Crash po 15 sek przy otrzymaniu broni
Andrzejek
13.05.2013
Siemka, mam problem, ponieważ gdy włączam public daj_bron() i zaczyna odliczanie kiedy ma dać broń dla tt to po 15 sek jest crash serwera, jak to naprawić?
#define MAX 32
#define TASK_HUD 6781252
//
public daj_bron()
{
for(new gracz=1; gracz<=MAX; gracz++)
{
if(is_user_alive(gracz) && is_user_connected(gracz))
{
if(get_user_team(gracz) == 1)
{
set_task(15.0, "DajBRON", TASK_HUD)
}
else if(get_user_team(gracz) == 2)
{
//
}
}
}
}
public DajBRON()
{
for(new gracz=1; gracz<=MAX; gracz++)
{
if(is_user_connected(gracz) && get_user_team(gracz) == 1 && is_user_alive(gracz))
{
player_strip_weapons(gracz);
give_item(gracz, "weapon_ak47");
cs_set_user_bpammo(gracz, CSW_AK47, 90);
give_item(gracz, "weapon_hegrenade")
give_item(gracz, "weapon_flashbang")
}
}
}
K!113r
13.05.2013
Dlaczego wywołujesz tyle tasków ile jest żywych tt? Być może taski z tym samym id nakładając się powodują crash (ja tak miałem), więc albo dla każdego wywołuj task z osobnym podaniem broni lub po prostu wywołaj jak teraz taska z czasem 15.0 (jeżeli choć jeden tt jest żywy) i w funkcji tasku w pętli sprawdzaj czy gracz żyje i daj mu broń, gdyż tak wywołujesz kilka-kilkanaście tasków o tym samym id, jeżeli dalej nie wiesz o czym pisze przeanalizuj sobie swoją pętle.
Droso
13.05.2013
#define MAX 32 #define TASK_HUD 6781252 public daj_bron() { set_task(15.0, "DajBRON", TASK_HUD) // tylko jeden task for(new gracz=1; gracz<=MAX; gracz++) { if(is_user_alive(gracz)) { if(get_user_team(gracz) == 2) { // twoj kodzik dla CT } } } } public DajBRON() { for(new gracz=1; gracz<=MAX; gracz++) { if(is_user_alive(gracz) && get_user_team(gracz) == 1) { player_strip_weapons(gracz); give_item(gracz, "weapon_ak47"); cs_set_user_bpammo(gracz, CSW_AK47, 90); give_item(gracz, "weapon_hegrenade") give_item(gracz, "weapon_flashbang") } } }
Możliwe też, że player_strip_weapons(gracz); ma jakiś błąd w sobie, a tego nie widzimy
radim
13.05.2013
#define MAX 32 public daj_bron() { set_task(15.0, "DajBRON") } public DajBRON() { for(new gracz=1; gracz<=MAX; gracz++) { if(is_user_alive(gracz) && get_user_team(gracz) == 1) { player_strip_weapons(gracz); give_item(gracz, "weapon_ak47"); cs_set_user_bpammo(gracz, CSW_AK47, 90); give_item(gracz, "weapon_hegrenade") give_item(gracz, "weapon_flashbang") } } }Uproszczony kod. Następnym razem nie sprawdzaj jednocześnie czy gracz jest połączony i żywy gdyż logiczne jest to, że gdy gracz jest żywy to i musi być połączony Jeżeli będzie nadal błąd, to podaj logi.
GwynBleidD
13.05.2013
Wywołanie bardzo szybko dużo razy give_item jest bardzo dobrym sposobem na crashowanie serwera. Jak masz amx_super zainstalowane (lub sam plugin na bronie, ale z możliwością dania komuś wszystkich pod kodem 200) to wpisz w konsoli amx_weapon @all 200 i patrz na fajerwerki
Andrzejek
14.05.2013
A mogę zrobićtak że dodam to w odliczaniu? I zrobię tak np.
if(odliczanie <= 15)
{
DajBRON();
}
radim
14.05.2013
No dobra a jaki jest tego cel ? Bo nie do końca rozumiem do czego zmierzasz.
Andrzejek
14.05.2013
Mam zabawę KillDay i nie chce że po włączeniu tej zabawy od razu daje wszystkim broń tylko po tych np. 15 sek. Nie chce żadnych gotowców z neta, bo chce się też czegoś nauczyć, proste.
radim
14.05.2013
A mogę zrobićtak że dodam to w odliczaniu? I zrobię tak np.
if(odliczanie <= 15) { DajBRON(); }
Chodzi mi dokładnie o to, bo nie wiem co chcesz dzięki temu uzyskać, jaki jest cel Twego dążenią.
Andrzejek
14.05.2013
Sory pomyliłem się tu powinno być:
if(odliczanie == 15)
{
DajBRON();
}
Jeżeli czas odliczania powiedzmy od 30 sek, wynosi 15 sek to daje broń
radim
14.05.2013
Czym się będzie różnić ten Twój kod od powyższych ? Pomijając fakt, że Twoja metoda byłaby wolniejsza ? Sprawdzałeś powyższe kody ? Działają ? Jeżeli nadal występują crashe to zapodaj logi/errory, bo mogą być. Ale spoglądając na kod, powinno działać.