←  Pytania dotyczące pluginów

AMXX.pl: Support AMX Mod X i SourceMod

»

Task się nie wyłącza.

  • +
  • -
Black004's Photo 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?

Quote

  • +
  • -
Rivit's Photo 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)
Quote

  • +
  • -
Black004's Photo 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);
	}
} 
Quote

  • +
  • -
Robiin's Photo 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.

Quote

  • +
  • -
Black004's Photo 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ć?

Quote

  • +
  • -
Rivit's Photo 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);
}

:D Przecie wystarczy samo:

public client_disconnect(index)
{
	remove_task(index + POKAZ_HUD);
}

Rivit (12.07.2019 17:27):
Tak, wiem, czepiam sie

Edited by TibacK, 12.07.2019 17:27.
Quote