Task się nie wyłącza.
Black004
12.07.2019
Witam, mam problem z pluginem, ponieważ tak w pluginie który jest włączany przez menu, nie wyłącza się kiedy jest nowa runda.
Dodaje kod:
public plugin_init() { register_logevent("Poczatek_Rundy", 2, "1=Round_Start") ; }
public Poczatek_Rundy(){ for(new id=1; id<=32; id++){ hud_on[id] = false remove_task(id+POKAZ_HUD); } }
public task_hud(task_id){ new id = task_id-POKAZ_HUD if(!hud_on[id]){ remove_task( id + POKAZ_HUD) } if(hud_on[id]){ set_hudmessage( 0, 0, 200, 0.5, 0.6, 2, 0.02, 1.0, 0.01) show_hudmessage(0, "TEST"); } }
Tak wygląda case, włączenia HUD:
case 3:{ hud_on[id] = true; set_task(0.3, "task_hud", id+POKAZ_HUD, _, _, "b"); }
Dlaczego HUD/task się nie wyłącza kiedy następuję nowa runda?
Rivit
12.07.2019
Hmmm, na pierwszy rzut oka wyglada ok.
register_logevent("Poczatek_Rundy", 2, "1=Round_Start") ;
Nie pamiętam dokładnie, ale to chyba łapie Ci moment w którym kończy się freezetime.
Nie rozumiem sensu zmiennej hud_on, jeśli jest używana tylko w tych miejscach - czyli do ogarniania czy hud jest włączony czy nie to jest bez sensu. Bo przecież robiąc remove_task wyłączasz taska, a sprawdzić czy gracz ma wyswietlany hud można poprzez funkcje task_exists(taskid), która powie Ci czy istnieje dany hud.
Kod jest ok, daj sobie jakieś printy etc czy w ogóle sterowanie Ci wchodzi do ifów w których jest remove_task
Poza tym to stosuj wcięcia w kodzie.
A i zamiast:
remove_task( id + POKAZ_HUD)
w tasku mozesz se dać:
remove_task(task_id)
Black004
12.07.2019
Hmmm, na pierwszy rzut oka wyglada ok.
register_logevent("Poczatek_Rundy", 2, "1=Round_Start") ;Nie pamiętam dokładnie, ale to chyba łapie Ci moment w którym kończy się freezetime.
Nie rozumiem sensu zmiennej hud_on, jeśli jest używana tylko w tych miejscach - czyli do ogarniania czy hud jest włączony czy nie to jest bez sensu. Bo przecież robiąc remove_task wyłączasz taska, a sprawdzić czy gracz ma wyswietlany hud można poprzez funkcje task_exists(taskid), która powie Ci czy istnieje dany hud.
Kod jest ok, daj sobie jakieś printy etc czy w ogóle sterowanie Ci wchodzi do ifów w których jest remove_task
Poza tym to stosuj wcięcia w kodzie.
A i zamiast:
remove_task( id + POKAZ_HUD)w tasku mozesz se dać:
remove_task(task_id)
Nie wiem sam już o co chodzi mam teraz tak:
public task_hud(task_id){ new id = task_id-POKAZ_HUD if(task_exists(id + POKAZ_HUD)){ set_hudmessage( 0, 160, 255, 0.5, 0.6, 2, 0.02, 1.0, 0.01) show_hudmessage(0, "TEST"); } }
Jak w menu wyłączam task to normalnie działa
case 8:{ remove_task(id + POKAZ_HUD); }
Jak robię tym to już nie:
register_logevent("Poczatek_Rundy", 2, "1=Round_Start");
public Poczatek_Rundy(){ for(new id=1; id<=32; id++){ remove_task(id + POKAZ_HUD); } }
Robiin
12.07.2019
Pokaż cały kod.
Zmień public Poczatek_Rundy na to:
public Poczatek_Rundy() { for(new i = 1; i <= 32; i++) { if(!is_user_connected(i)) { continue; } remove_task(i + POKAZ_HUD); } }
Dodaj:
public client_disconnect(index) { if(!task_exists(index + POKAZ_HUD)) { return; } remove_task(index + POKAZ_HUD); }
Dodaj w Poczatek_Rundy log_amx'a, sprawdzającego czy task istnieje, przykładowo:
log_amx("Player: %i, Task id: %i, exist: %s", id, id + POKAZ_HUD, task_exists(id + POKAZ_HUD) ? "True" : "False");
Tak jak napisał TibacK, możesz uzywać argumentu "task_id" zamiast "id + POKAZ_HUD", wartości wyjdą dokładnie te same.
Polecam też pomyśleć nad estetyką kodu (odezwij się na PW, chętnie Ci podpowiem co i jak) i nazywaniem zmiennych po angielsku.
Black004
12.07.2019
Ku mojemu zdziwieniu, Task się wyłącza i w ogóle cały działa. Da się zrobić żeby się jeszcze wcześniej wyłączał? Nie po tym freezie ? Jaki event trzeba dać?
Rivit
12.07.2019
register_event("HLTV", "Event_NewRound", "a", "1=0", "2=0")
@aSiorr
Nie trzeba robić tak:
public client_disconnect(index) { if(!task_exists(index + POKAZ_HUD)) { return; } remove_task(index + POKAZ_HUD); }
Przecie wystarczy samo:
public client_disconnect(index) { remove_task(index + POKAZ_HUD); }
Edited by TibacK, 12.07.2019 17:27.