←  Pytania

AMXX.pl: Support AMX Mod X i SourceMod

»

Forwardy

Zablokowany

  • +
  • -
Pittero - zdjęcie Pittero 14.03.2011

	register_forward(FM_CmdStart, "CmdStart")
register_forward(FM_Voice_SetClientListening, "fw_SetClientListening");
register_forward(FM_SetClientKeyValue, "fw_SetClientKeyValue")
register_forward(FM_EmitSound, "EmitSound")


Czy te forwardy moga obciazac serwer az tak mocno ze beda lagi ?
Jak powinno sie konczyc dany forward ?
return FMRES_SUPERCEDE czy return FMRES_IGNORED ?
dzięki za odpowiedz.
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 14.03.2011

same forwardy to nie wszystko, ważne co w nich robisz i jak często się wykonują; nawet je uporządkowałeś po częstotliwości wykonywania :P tzn najmniej kod powinno być w CmdStart, za to w emit sound możesz robić co chcesz; najgorszy jest pod tym względem addtofullpack

jak tylko słuchasz to ignored, jak chcesz blokować/zmieniać to supercede czy handled
Odpowiedz

  • +
  • -
Pittero - zdjęcie Pittero 14.03.2011

public CmdStart(id, uc_handle)
{
if(!is_user_connected(id) || !is_user_alive(id))
{
return FMRES_IGNORED;
}
if(deagle_duel[id])
{
cs_set_user_bpammo(id, CSW_DEAGLE, 1)
}
return FMRES_IGNORED;
}

Taki zapis jest poprawny ?
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 14.03.2011

jak najbardziej poprawny, ale wątpię by o to Ci chodziło; cmdstart jest prawie jak prethink, kilkadziesiąt razy na sekudnę
Odpowiedz

  • +
  • -
Pittero - zdjęcie Pittero 14.03.2011

jak najbardziej poprawny, ale wątpię by o to Ci chodziło; cmdstart jest prawie jak prethink, kilkadziesiąt razy na sekudnę

I to moze lagowac serwa...
A reszta forwardow jak sie wykonuje ?
Czym mozna zastapic cmdstart ? Jesli chce uzyc tego do pojedynkow czyli do dgla ma ustawiac 1 naboj :D
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 14.03.2011

CurWeapon albo z HamSandwich któryś z itemw (deploy?)
Odpowiedz

  • +
  • -
Pittero - zdjęcie Pittero 14.03.2011

CurWeapon albo z HamSandwich któryś z itemw (deploy?)

CurWeapon sie wlacza jak zmieniamy bron, a hamsandwich to nie mam pojecia jak uzyc :D
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 14.03.2011

czyli nie masz też pojęcia jak użyć CurWeapon xD

sry musiałem

Half-Life 1 Game Events - AlliedModders Wiki
ClipAmmo

złap
register_event("CurWeapon", "eventCurWeapon", "be", "1=1");

public eventCurWeapon(id){
	if(read_data(3))
		return;
	//daj pocisk/przeladuj
}
Odpowiedz

  • +
  • -
Pittero - zdjęcie Pittero 14.03.2011

R3X, a poprawnie jest:
1.
public CurWeapon(id)
{
if(!is_user_alive(id) || !is_user_connected(id))
{
return PLUGIN_HANDLED;
}
}

czy 2.
public CurWeapon(id)
{
if(!is_user_alive(id) || !is_user_connected(id))
{
return FMRES_IGNORED;

}
}
Odpowiedz

  • +
  • -
Ortega - zdjęcie Ortega 14.03.2011

W tym przypadku obie formy są poprawne.
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 14.03.2011

są poprawne, bo zwrócona wartość nie ma znaczenia:

amxconst.inc
#define PLUGIN_CONTINUE		0	/* Results returned by public functions */

fakemeta_const.inc
#define FMRES_IGNORED	1	// Calls target function, returns normal value

wartości nie są takie same, a jako message/event to przetwarzane jest przez Core, czyli PLUGIN_* by pasowało
FMRES_* dotyczy forwardów fakemety


Nie ma sensu sprawdzać czy gracz jest żywy i podłączony w 1 ifie : jeśli jest żywy to musi być podłączony
Odpowiedz

  • +
  • -
Pittero - zdjęcie Pittero 14.03.2011

JEszcze mam jendo pytanie :D
Ktore read_data odpowiada za sprawdzenie czy gracz wystrzelil naboj w CurWeapon ?
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 14.03.2011

czy wystrzelił? tzn czy ma pusty magazynek tak? to read_data(3) == 0 wtedy
Odpowiedz

  • +
  • -
Pittero - zdjęcie Pittero 14.03.2011

czy wystrzelił? tzn czy ma pusty magazynek tak? to read_data(3) == 0 wtedy

Czy jak raz strzelil
Odpowiedz

  • +
  • -
R3X - zdjęcie R3X 14.03.2011

3 parametr to po prostu ilość pocisków w magazynku
Odpowiedz

  • +
  • -
DarkGL - zdjęcie DarkGL 14.03.2011


#define MAX 32



public CurWeapon(id)

{

	static iPlayerWeapon[MAX+1],iPlayerAmmo[MAX+1];

	new wid = read_data(2)	// Id broni

	new ammo = read_data(3)	// liczba naboi w magazynku

	if(iPlayerWeapon[id] != wid){

		iPlayerWeapon[id] = wid;

		iPlayerAmmo[id] = ammo;

	}

	else if(iPlayerAmmo[id] > ammo){

		//strzelilem

	}

	iPlayerAmmo[id] = ammo;

	

}
Odpowiedz

  • +
  • -
Pittero - zdjęcie Pittero 15.03.2011

A co oznacza parametr "be" w curweapon oraz "1=1"
moglby ktos napisac mi przyklady uzycia eventu na:
1. Sprawdzenie broni jaka ma grac "w reku" aktualnie
2. Pobranie momentu przeladowania.
3. Wykonanie akcji jesli bron to noz, a drugi na to jesli bron inna niz noz.
4. Jak zablokowac uzywanie broni z tzw automatow ktore daja bron po wcisnieciu buttonu?
Odpowiedz
Zablokowany