Jaka jest różnica między eventami
sokojoko
21.08.2010
Jak w temacie czy się różnią te dwa eventy w praktyce, i w składni
Z tego co zauważyłem register_event nie działa jak sam sie zabijesz... potwierdzi ktoś ?
RegisterHam(Ham_Killed, "player", "Death", 1);
register_event("DeathMsg", "Death", "ade");
Z tego co zauważyłem register_event nie działa jak sam sie zabijesz... potwierdzi ktoś ?
R3X
21.08.2010
Ham_Killed jest zdarzeniem bezpośrednim - zawsze kiedy ktoś ginie jest wywoływany; funkcja
"DeathMsg" jest wywoływany przy pokazaniu w prawym górnym rogu komunikatu śmierci; funkcja
BTW flagi "de" i nie mają sensu dla globalnego eventu "a"
Death(ofiara){ new zabojca = get_user_attacker(id); // nie zawsze się zgadza :/ }
"DeathMsg" jest wywoływany przy pokazaniu w prawym górnym rogu komunikatu śmierci; funkcja
Death(){ new ofiara = read_data(2); new zabojca = read_data(1); // zasze się zgadza }jeśli gracz zginie bez globalnej informacji (np. user_silentkill() czy wybuch bomby) to śmierć gracza nie jest odnotowywana; nie jest także łapana w przypadku message_begin(MSG_ALL, get_user_msgid("DeathMsg")) -> trzeba użyć emessage_*
BTW flagi "de" i nie mają sensu dla globalnego eventu "a"
G[o]Q
21.08.2010
pozatym mozesz w hamsandwichu zlapac moment bezposrednio przed jak i po smierci przez co masz wiecej mozliwosci nigdy tego nie sprawdzalem ale zapewne mozna za pomoca ktorejs z SetHam... zmienic np zabojce
sokojoko
21.08.2010
jak przerobić (fragment COD MODa ten poniżej) tak aby wykrywał śmierć przez zabicie siebie samego
czy dorobić oddzielny event z warunkiem
KOD
Edited by sokojoko, 21.08.2010 22:11.
czy dorobić oddzielny event z warunkiem
RegisterHam(Ham_Killed, "player", "Death1",1);
.
.
.
Death1(id){
if(!get_user_attacker(id)){
return PLUGIN_CONTINUE;
}else{
.
.
.
}
}
KOD
register_event("DeathMsg", "Death", "ade");
.
.
.
public Death()
{
new id = read_data(2);
new attacker = read_data(1);
if(!is_user_alive(attacker) || !is_user_connected(attacker))
return PLUGIN_CONTINUE;
new weapon = get_user_weapon(attacker);
new zdrowie = get_user_health(attacker);
if(get_user_team(id) != get_user_team(attacker) && klasa_gracza[attacker])
{
new nowe_doswiadczenie = 0;
nowe_doswiadczenie += doswiadczenia_za_zabojstwo;
if(klasa_gracza[id] == Rambo && klasa_gracza[attacker] != Rambo)
nowe_doswiadczenie += doswiadczenia_za_zabojstwo*2;
if(poziom_gracza[id] > poziom_gracza[attacker])
nowe_doswiadczenie += poziom_gracza[id] - poziom_gracza[attacker];
if(klasa_gracza[attacker] == Rambo || informacje_przedmiotu_gracza[attacker][0] == 15 && maxClip[weapon] != -1)
{
new nowe_zdrowie = (zdrowie+20<maksymalne_zdrowie_gracza[attacker])? zdrowie+20: maksymalne_zdrowie_gracza[attacker];
set_user_clip(attacker, maxClip[weapon]);
set_user_health(attacker, nowe_zdrowie);
}
#if defined BOTY
if(is_user_bot2(attacker) && random(9) == 0)
WyrzucPrzedmiot(id);
#endif
if(!informacje_przedmiotu_gracza[attacker][0])
DajPrzedmiot(attacker, random_num(1, sizeof nazwy_przedmiotow-1));
if(informacje_przedmiotu_gracza[attacker][0] == 14)
{
new nowe_zdrowie = (zdrowie+50<maksymalne_zdrowie_gracza[attacker])? zdrowie+50: maksymalne_zdrowie_gracza[attacker];
set_user_health(attacker, nowe_zdrowie);
}
set_hudmessage(255, 212, 0, 0.50, 0.33, 1, 6.0, 4.0);
ShowSyncHudMsg(attacker, SyncHudObj2, "+%i", nowe_doswiadczenie);
doswiadczenie_gracza[attacker] += nowe_doswiadczenie;
}
SprawdzPoziom(attacker);
if(informacje_przedmiotu_gracza[id][0] == 7 && random_num(1, informacje_przedmiotu_gracza[id][1]) == 1)
set_task(0.1, "Wskrzes", id+ZADANIE_WSKRZES);
return PLUGIN_CONTINUE;
}
Edited by sokojoko, 21.08.2010 22:11.