Knock system help


Započeo Timur Script, Februar 06, 2020, 22:11:59 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Problem(error/warning): Sve radi sa ovim taskom, ali me interesuje , kako da napravim da mi ne ponavlja stalno animacije, kad igrac ima manje od 20 hp sve fino radi ALI POCNE da spama ovo da je nokan i to fakat mi ne pada na pamet nista, kako da napravim u ovom tasku, ako ima manje od 20 hp da posalje jednom poruku i jednom applyanimaciju a ne 10000000000000puta?
Dio skripte:
task panokanje[100]()
{
	foreach(Player,i)
	{
	new Float:playerHealth;														//pravimo health varijablu
	GetPlayerHealth(i, playerHealth);
	if(playerHealth < 20)
	{
		TogglePlayerControllable(i, false);
		ApplyAnimation(i,"PED","KO_shot_stom",4.0,0,1,1,1,0);
		SendClientMessage(i, -1, "Nokovan si da ustanes kucaj /pozovipomoc");
		return 0;
	}
}
return 0;
}

Pawno Code: [Izaberi]
Debug iz server_log(ukoliko je u pitanju crashanje servera - crashdetect log): [ code ]//[ /code ]
Slika/video ingame problema(obavezno ako je ingame problem): //

Pa sada, imam nesto na umu. Napravi novu varijablu, nesto tipa

new Nokovan[MAX_PLAYERS];


Zatim da ti ovo izgleda nesto ovako:

task panokanje[100]()
{
        if(Nokovan[playerid] == 1) return 0; //Ukoliko je nokovan, nece nista uraditi dalje
	foreach(Player,i)
	{
	new Float:playerHealth;														//pravimo health varijablu
	GetPlayerHealth(i, playerHealth);
	if(playerHealth < 20)
	{
		TogglePlayerControllable(i, false);
		ApplyAnimation(i,"PED","KO_shot_stom",4.0,0,1,1,1,0);
		SendClientMessage(i, -1, "Nokovan si da ustanes kucaj /pozovipomoc");
                Nokovan[playerid] = 1; //Stavlja da jeste nokovan
		return 0;
	}
}
return 0;
}


Zatim kada kuca ga neko podigne ili sta vec, stavljas :

Nokovan[playerid] = 0; //Vracamo varijablu na 0 da bi igrac opet mogao biti nokovan


Mislim da je ovo najjednostavnija metoda :/ , nadam se da sam pomogao..

Citat: V01D poslato Februar 06, 2020, 23:01:43 POSLE PODNE
Pa sada, imam nesto na umu. Napravi novu varijablu, nesto tipa

new Nokovan[MAX_PLAYERS];


Zatim da ti ovo izgleda nesto ovako:

task panokanje[100]()
{
        if(Nokovan[playerid] == 1) return 0; //Ukoliko je nokovan, nece nista uraditi dalje
	foreach(Player,i)
	{
	new Float:playerHealth;														//pravimo health varijablu
	GetPlayerHealth(i, playerHealth);
	if(playerHealth < 20)
	{
		TogglePlayerControllable(i, false);
		ApplyAnimation(i,"PED","KO_shot_stom",4.0,0,1,1,1,0);
		SendClientMessage(i, -1, "Nokovan si da ustanes kucaj /pozovipomoc");
                Nokovan[playerid] = 1; //Stavlja da jeste nokovan
		return 0;
	}
}
return 0;
}


Zatim kada kuca ga neko podigne ili sta vec, stavljas :

Nokovan[playerid] = 0; //Vracamo varijablu na 0 da bi igrac opet mogao biti nokovan


Mislim da je ovo najjednostavnija metoda :/ , nadam se da sam pomogao..
Hvala sto si izdvojio vreme , ali nazalost ne mogu da stavim gore [playerid]a dole da mi je foreach(Player,i) jer gore nigdje nema (playerid) samo je () , tako da odo testirati kad stavim (playerid) nadam se da ce raditi! :D hvala jos jednom  , ovako nesto mi je bilo na umu ali nikako da dodje do mozga da se realizuje xd :D

Hmmmm, ali ne kontam zasto ne koristis ptask?? Lakse ti je, to bi ovako sve izgledalo :

ptask panokanje[100](playerid)
{
        if(Nokovan[playerid] == 1) return 0; //Ukoliko je nokovan, nece nista uraditi dalje
	new Float:playerHealth;														//pravimo health varijablu
	GetPlayerHealth(playerid, playerHealth);
	if(playerHealth < 20)
	{
		TogglePlayerControllable(playerid, false);
		ApplyAnimation(playerid,"PED","KO_shot_stom",4.0,0,1,1,1,0);
		SendClientMessage(playerid, -1, "Nokovan si da ustanes kucaj /pozovipomoc");
                Nokovan[playerid] = 1; //Stavlja da jeste nokovan
		return 0;
	}
return 0;
}


Istu funkciju ce vrsiti, pritom ces moci da primenis playerid :P

Citat: V01D poslato Februar 06, 2020, 23:22:14 POSLE PODNE
Hmmmm, ali ne kontam zasto ne koristis ptask?? Lakse ti je, to bi ovako sve izgledalo :

ptask panokanje[100](playerid)
{
        if(Nokovan[playerid] == 1) return 0; //Ukoliko je nokovan, nece nista uraditi dalje
	new Float:playerHealth;														//pravimo health varijablu
	GetPlayerHealth(playerid, playerHealth);
	if(playerHealth < 20)
	{
		TogglePlayerControllable(playerid, false);
		ApplyAnimation(playerid,"PED","KO_shot_stom",4.0,0,1,1,1,0);
		SendClientMessage(playerid, -1, "Nokovan si da ustanes kucaj /pozovipomoc");
                Nokovan[playerid] = 1; //Stavlja da jeste nokovan
		return 0;
	}
return 0;
}


Istu funkciju ce vrsiti, pritom ces moci da primenis playerid :P
Dobro moze se i primjeniti playerid na nacin :
   foreach(new playerid : Player)

Citat: Timur Script poslato Februar 06, 2020, 23:26:10 POSLE PODNE
Dobro moze se i primjeniti playerid na nacin :
   foreach(new playerid : Player)
Ne može, debilno je, uradi ovo sto je void rekao

Y_timeri su perfektno balansirani interno tako da nemoj kakiš

Fazon kod ovog svega je taj sto kad uradim sto @V01D  kaze sve napisem kad imam manje od 20 hp onda se nista ne desi :P

Citat: Timur Script poslato Februar 06, 2020, 23:33:33 POSLE PODNE
Fazon kod ovog svega je taj sto kad uradim sto @V01D  kaze sve napisem kad imam manje od 20 hp onda se nista ne desi :P
Ptask gledaj kao taj task timer koji u sebi ima foreach, daj paste šta si uradio
edit: a i zašto praviti tamer mrtvi i jesti resurse ako imaš odličan callback za to, samo frizas igraca i stavis animaciju ili je delay
Poslednja Izmena: Februar 06, 2020, 23:40:51 POSLE PODNE od Ruzica

Citat: Ruzica poslato Februar 06, 2020, 23:39:17 POSLE PODNE
Ptask gledaj kao taj task timer koji u sebi ima foreach, daj paste šta si uradio
ptask panokanje[100](playerid)
{
	if(Nokovan[playerid] == 1) return 0; //Ukoliko je nokovan, nece nista uraditi dalje
	new Float:playerHealth;														//pravimo health varijablu
	GetPlayerHealth(playerid, playerHealth);
	if(playerHealth < 20)
	{
		TogglePlayerControllable(playerid, false);
		ApplyAnimation(playerid,"PED","KO_shot_stom",4.0,0,1,1,1,0);
		SendClientMessage(playerid, -1, "Nokovan si da ustanes kucaj /pozovipomoc");
        Nokovan[playerid] = 1; //Stavlja da jeste nokovan
        return 0;
		}
	return 1;
	}

A kad uklonim ovo if(Nokan , onda radi ali spama i animacija i ovo nokovan si ?

Citat: Timur Script poslato Februar 06, 2020, 23:40:37 POSLE PODNE
ptask panokanje[100](playerid)
{
	if(Nokovan[playerid] == 1) return 0; //Ukoliko je nokovan, nece nista uraditi dalje
	new Float:playerHealth;														//pravimo health varijablu
	GetPlayerHealth(playerid, playerHealth);
	if(playerHealth < 20)
	{
		TogglePlayerControllable(playerid, false);
		ApplyAnimation(playerid,"PED","KO_shot_stom",4.0,0,1,1,1,0);
		SendClientMessage(playerid, -1, "Nokovan si da ustanes kucaj /pozovipomoc");
        Nokovan[playerid] = 1; //Stavlja da jeste nokovan
        return 0;
		}
	return 1;
	}

A kad uklonim ovo if(Nokan , onda radi ali spama i animacija i ovo nokovan si ?
Pa sta si očekivao ako si napravio tajmer koji se poziva na svakih 100 mili sekundi i gleda da li igrac ima manje od 100hp? Krem bananicu?

Imaš callback za tako nešto brate, čemu tajmer

Citat: Ruzica poslato Februar 06, 2020, 23:42:29 POSLE PODNE
Pa sta si očekivao ako si napravio tajmer koji se poziva na svakih 100 mili sekundi i gleda da li igrac ima manje od 100hp? Krem bananicu?

Imaš callback za tako nešto brate, čemu tajmer
Hah jako smjesno od tebe jako jako, kao 1 kqdq se stqvi pod callback nece uopstw niti spama niti nista bilo sta da napisem nece da uradi .. zato sam odlucio kao tajmer tj ptask jer tako jedino radi...

Probaj povecaj malo timer, da bude tipa 1000 ili 2000 milisekundi. Mozda ce nesto da se promeni, ja licno nemam takvih problema sa ptask :/

Citat: V01D poslato Februar 06, 2020, 23:47:47 POSLE PODNE
Probaj povecaj malo timer, da bude tipa 1000 ili 2000 milisekundi. Mozda ce nesto da se promeni, ja licno nemam takvih problema sa ptask :/
Brate tebi hvala ja sam malo otisao na zivcima sto se ticr ovoga vec 3 dana me zeza ne prestano i stvarno .... uh ugl hvala ti a mrzim kad mi neko ko ova ruzica pametuje a ne zna nista napisat osim cokoladnih bananica itd ... ti si meni koliko toliko pomogao zahvaljujem!

Citat: Timur Script poslato Februar 06, 2020, 23:45:49 POSLE PODNE
I PS ako ne znas ne nabijaj postove.
Brate puko si

I možda nemaš fixes include pa ne pusti animaciju odmah jer se ovaj kod mora bar jednom izvršiti tj animacija jer posle staviš vrednost na 1 i bukvalno dobiješ unreachable kod posle ponovljanja ako ne resetiras sve....

I radi pod callbackom, kako meni radi sve kad napravim? Možda bi ti mogao naučiti nešto za promenu..?

Edit: Postoji bug sa animacijama u samom sampu pa koristi fixes