[TRAŽIM INCLUDE] Health se smanjuje svaku minutu

Započeo GloomY, Januar 06, 2010, 21:26:12 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Ovako, dakle treba mi include za skriptu gdje se smanjuje heath. Imam jedan gamemode, ali ne smanjuje se health, nego stalno stoji na 100hp, naravno osim ako se sam ne ozlijediš ili te netko ozlijedi. Znate na što mislim. Dakle, da se samo smanjuje health, kao na svim RP serverima. Hvala puno.

Ludi Grad

Citat: haxby poslato Januar 06, 2010, 21:26:12 POSLE PODNE
Ovako, dakle treba mi include za skriptu gdje se smanjuje heath. Imam jedan gamemode, ali ne smanjuje se health, nego stalno stoji na 100hp, naravno osim ako se sam ne ozlijediš ili te netko ozlijedi. Znate na što mislim. Dakle, da se samo smanjuje health, kao na svim RP serverima. Hvala puno.
koji mod koristis???.....btw skini odavde neki GF mod i nadji tu skriptu.....

zerocoolos

kakav include, napravi to sa timerom... pronadji jedan timer od 60 sek ili ako nemas napravi novi i to ovako:
pod:
public OnGameModeInit()

stavi:
SetTimer("HealthSmanjenje",60000,1);// 1 minut timer, mozes i razlicito stavit, 1000ms = 1s


forward HealthSmanjenje();

public HealthSmanjenje()
{
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
		if(IsPlayerConnected(i))
		{
                       if(gPlayerLogged[i] == 1)//gledas dali je logiran jer inace nema potrebe da smanjuje health za tog igraca
                       {
                              SetPlayerHealth(i, -5.0);//recimo da se smanji za 5healtha(100 je pun indikator)
                       }
		}
	}
}

ovo zadnje stavi kod nekih public funkcija tako da ne stavis pod neki callback... i eto, to je sva filozofija

Hvala puno, sada ću isprobati. Inače, znam da za vas to nije neka filozofija, ali ja sam novi u skriptanju i za mene je to puno. Hvala
Ukoliko nebude radilo, ovdje ću vam odgovoriti.

EDIT : Stavio sam sve kako si mi rekao, ali mi ne smanji hp, nego me skroz ubije, što znači da kraja smanji hp. Probao sam i vidio, dakle bez obzira koliko mi je hp, umrijet ću. Samo da vam napomenem još da nije potpuno GF skriptanje, nego nešto slično.
Poslednja Izmena: Januar 06, 2010, 22:05:05 POSLE PODNE od haxby

zerocoolos

da, zaboravio sam da f-ja SetPlayerHealth vise ne uzima float...

umjesto SetPlayerHealth(i, -5.0); stavi SetPlayerHealth(i, -5)

ili da stavi

new health;
GetPlayerHealth(i,health);
SetPlayerHealth(i, health -5);



zerocoolos

Citat: John poslato Januar 06, 2010, 22:45:17 POSLE PODNE
ili da stavi

new health;
GetPlayerHealth(i,health);
SetPlayerHealth(i, health -5);




da u pravu si, nisam uzimao health, uopce nisam gledao... omg

samo mora malo drugacije nego si napisao jer getplayerhealth uzima float...
ovako stavi
new Float:health;
GetPlayerHealth(playerid,health);
SetPlayerHealth(i, floatround(health)-5);


moras prebacit float u cijeli broj jer su u 0.3 napravili da getplayerhealth uzima float vrijednost, a setplayerhealth ne radi sa floatom... bezveze ali je tako...
Poslednja Izmena: Januar 06, 2010, 22:55:45 POSLE PODNE od zerocoolos

Citat: zerocoolos poslato Januar 06, 2010, 21:47:48 POSLE PODNE
kakav include, napravi to sa timerom... pronadji jedan timer od 60 sek ili ako nemas napravi novi i to ovako:
pod:
public OnGameModeInit()

stavi:
SetTimer("HealthSmanjenje",60000,1);// 1 minut timer, mozes i razlicito stavit, 1000ms = 1s


forward HealthSmanjenje();

public HealthSmanjenje()
{
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
		if(IsPlayerConnected(i))
		{
                       if(gPlayerLogged[i] == 1)//gledas dali je logiran jer inace nema potrebe da smanjuje health za tog igraca
                       {
                              SetPlayerHealth(i, -5.0);//recimo da se smanji za 5healtha(100 je pun indikator)
                       }
		}
	}
}

ovo zadnje stavi kod nekih public funkcija tako da ne stavis pod neki callback... i eto, to je sva filozofija

Ovdje ti uopce ne treba IsPlayerConnected. Kao prvo sve funkcije koje ukljucuje playera imaju ugraden check jeli konektan, drugo gPlayerLogged kolko se sjecam stavlja se kada se logira. Znaci radis ovako 3*MAX_PLAYERS loopova umjesto 2*MAX_PLAYERS loopova.

Citat: JoeBullet v2.1 poslato Januar 06, 2010, 23:28:06 POSLE PODNE
Citat: zerocoolos poslato Januar 06, 2010, 21:47:48 POSLE PODNE
kakav include, napravi to sa timerom... pronadji jedan timer od 60 sek ili ako nemas napravi novi i to ovako:
pod:
public OnGameModeInit()

stavi:
SetTimer("HealthSmanjenje",60000,1);// 1 minut timer, mozes i razlicito stavit, 1000ms = 1s


forward HealthSmanjenje();

public HealthSmanjenje()
{
	for(new i = 0; i < MAX_PLAYERS; i++)
	{
		if(IsPlayerConnected(i))
		{
                       if(gPlayerLogged[i] == 1)//gledas dali je logiran jer inace nema potrebe da smanjuje health za tog igraca
                       {
                              SetPlayerHealth(i, -5.0);//recimo da se smanji za 5healtha(100 je pun indikator)
                       }
		}
	}
}

ovo zadnje stavi kod nekih public funkcija tako da ne stavis pod neki callback... i eto, to je sva filozofija

Ovdje ti uopce ne treba IsPlayerConnected. Kao prvo sve funkcije koje ukljucuje playera imaju ugraden check jeli konektan, drugo gPlayerLogged kolko se sjecam stavlja se kada se logira. Znaci radis ovako 3*MAX_PLAYERS loopova umjesto 2*MAX_PLAYERS loopova.

pa omg on je stavio gPlayerLogged == 1 (znaci ako je logiran da mu krene timer) i to je dobro stavio... jer budimo realni kaj ce ic timer ako nije logiran tako da...

po ovome sto ti kazes, ispada da nemas pojma,

1. timer je krenuo cim je stavio SetTimer,...
2. Bullet govori kako u ovom loopu ima "3 loopa" kroz IsPlayerConnected pri kojem prvo provjerava dal je spojen, drugi gPlayerLogged koji u tim spojenim provjerava dal su prijavljeni, te 3 ili ti ovaj prvi koji zatvara IsPlayerConnected i gPlayerLogged u sebe.


Sad neznam dal je to dovoljno dobro objasnjeno ali blizu sam  ;D
Poslednja Izmena: Januar 07, 2010, 02:45:47 PRE PODNE od John

zerocoolos

Citat: John poslato Januar 07, 2010, 02:45:37 PRE PODNE
po ovome sto ti kazes, ispada da nemas pojma,

1. timer je krenuo cim je stavio SetTimer,...
2. Bullet govori kako u ovom loopu ima "3 loopa" kroz IsPlayerConnected pri kojem prvo provjerava dal je spojen, drugi gPlayerLogged koji u tim spojenim provjerava dal su prijavljeni, te 3 ili ti ovaj prvi koji zatvara IsPlayerConnected i gPlayerLogged u sebe.


Sad neznam dal je to dovoljno dobro objasnjeno ali blizu sam  ;D

tehnički nisi u pravu, ne radi tri loopa za jedan id, vec je manji posao do toga, jer da radi tri loopa onda bi u svakom loopu morao i health podesavat ali to ne radi za one koji nisu logirani i konektirani(ovo naravno ne treba vec sam to beze stavio), vec samo ili prodje ili ne prodje provjeru i tu zavrsi za taj id kroz koji ide loop, tako da nije niti bullet u pravu a niti si ti, ustvari i jedan i drugi ste pomalo u pravu ;)
jer kad pogledas nije isto:
npr
ako je neki broj a: a>1, ako je onda provjerava jel a>2 i ako je onda ide recimo se netko iz mase bacit sa mosta.
To jesu dvije provjere prije izvrsenja onoga sto zelimo. Ali recimo da 50 posto do mase koja recimo broji 100 ljudi nece proci provjeru, na prvoj, a na drugoj ce proci samo 25 posto i to te dovodi do racunice da je izvrsio 100 radnji provjere na prvoj provjeri(a>1) + 50 radnji provjere na drugoj(a>2) + 25 izvrsavanja onoga da se baci sa mosta = 175 obavljanih radnji u loopu.

A da radi kao sto bullet 3 loopa ili dva, onda bi to bilo za 3 loopa:
na masi od 100 ljudi prvi loop ide 100 ljudi, pa drugi loop ide 100 i treci ide 100 jer svaka provjera je za njega poseban loop od te mase i to te dovodi do 300+25 izvrsavanja jer samo oni zadovoljavaju = 325 obavljanih radnji. znaci nije tocno.
Tako je i za 2 loopa = 225 opet je vise nego sto kaze...
Logika dovodi do toga da nisi u pravu bullet i nece se toliko puta izvrsiti koliko si ti mislio da hoce, naravno da je bolje da je samo jedna provjera samo jel logiran ali tu opet pogledaj svoju racunicu i opet te dovodi da sigurno nece toliko puta izvrsiti koliko si ti rekao, jer ako imam samo provjeru jel logiran izvrsit ce se 200 puta maksimalno(100 provjera+100 ljudi se baca sa mosta), a za tvoju racunicu dva loopa(kad je u loopu jedna provjera) je to 100 prvi loop, 100 drugi loop+ sa drugim loopom i 100 bacanja ljudi sa mosta = 300...

nikako ovo moze biti isto


Ovo je cista logika, ne moras imat nikakvo znanje programiranja za ovo....

E sad tko ce ovo shvatit super, tko ne zao mi je, bullet zasigurno hoce ;)

Citat: John poslato Januar 07, 2010, 02:45:37 PRE PODNE
po ovome sto ti kazes, ispada da nemas pojma,

1. timer je krenuo cim je stavio SetTimer,...
2. Bullet govori kako u ovom loopu ima "3 loopa" kroz IsPlayerConnected pri kojem prvo provjerava dal je spojen, drugi gPlayerLogged koji u tim spojenim provjerava dal su prijavljeni, te 3 ili ti ovaj prvi koji zatvara IsPlayerConnected i gPlayerLogged u sebe.


Sad neznam dal je to dovoljno dobro objasnjeno ali blizu sam  ;D

gledaj taj timer nece napraviti nista ako igrac uopce nije logiran... znaci nece mu smanjiti taj health... koda nije ni krenuo ako razumijes sta ocu rec... a kolko vidim ne... tako da... tisina... i druga stvar ja nisam pricao za IsPlayerConnected samo za gPlayerLogged zato ajde molim te drugi puta kad pises procitaj prvo sto sam napiso... a to sto ti mislis da ja pojma nemam to je tvoja stvar... niti te znam nit poznam tako da me tvoje misljenje niti najmanje ne dira...

Citat: zerocoolos poslato Januar 07, 2010, 03:42:33 PRE PODNE
Citat: John poslato Januar 07, 2010, 02:45:37 PRE PODNE
po ovome sto ti kazes, ispada da nemas pojma,

1. timer je krenuo cim je stavio SetTimer,...
2. Bullet govori kako u ovom loopu ima "3 loopa" kroz IsPlayerConnected pri kojem prvo provjerava dal je spojen, drugi gPlayerLogged koji u tim spojenim provjerava dal su prijavljeni, te 3 ili ti ovaj prvi koji zatvara IsPlayerConnected i gPlayerLogged u sebe.


Sad neznam dal je to dovoljno dobro objasnjeno ali blizu sam  ;D

tehnički nisi u pravu, ne radi tri loopa za jedan id, vec je manji posao do toga, jer da radi tri loopa onda bi u svakom loopu morao i health podesavat ali to ne radi za one koji nisu logirani i konektirani(ovo naravno ne treba vec sam to beze stavio), vec samo ili prodje ili ne prodje provjeru i tu zavrsi za taj id kroz koji ide loop, tako da nije niti bullet u pravu a niti si ti, ustvari i jedan i drugi ste pomalo u pravu ;)
jer kad pogledas nije isto:
npr
ako je neki broj a: a>1, ako je onda provjerava jel a>2 i ako je onda ide recimo se netko iz mase bacit sa mosta.
To jesu dvije provjere prije izvrsenja onoga sto zelimo. Ali recimo da 50 posto do mase koja recimo broji 100 ljudi nece proci provjeru, na prvoj, a na drugoj ce proci samo 25 posto i to te dovodi do racunice da je izvrsio 100 radnji provjere na prvoj provjeri(a>1) + 50 radnji provjere na drugoj(a>2) + 25 izvrsavanja onoga da se baci sa mosta = 175 obavljanih radnji u loopu.

A da radi kao sto bullet 3 loopa ili dva, onda bi to bilo za 3 loopa:
na masi od 100 ljudi prvi loop ide 100 ljudi, pa drugi loop ide 100 i treci ide 100 jer svaka provjera je za njega poseban loop od te mase i to te dovodi do 300+25 izvrsavanja jer samo oni zadovoljavaju = 325 obavljanih radnji. znaci nije tocno.
Tako je i za 2 loopa = 225 opet je vise nego sto kaze...
Logika dovodi do toga da nisi u pravu bullet i nece se toliko puta izvrsiti koliko si ti mislio da hoce, naravno da je bolje da je samo jedna provjera samo jel logiran ali tu opet pogledaj svoju racunicu i opet te dovodi da sigurno nece toliko puta izvrsiti koliko si ti rekao, jer ako imam samo provjeru jel logiran izvrsit ce se 200 puta maksimalno(100 provjera+100 ljudi se baca sa mosta), a za tvoju racunicu dva loopa(kad je u loopu jedna provjera) je to 100 prvi loop, 100 drugi loop+ sa drugim loopom i 100 bacanja ljudi sa mosta = 300...

nikako ovo moze biti isto


Ovo je cista logika, ne moras imat nikakvo znanje programiranja za ovo....

E sad tko ce ovo shvatit super, tko ne zao mi je, bullet zasigurno hoce ;)
ma nisam ja mislio doslovno koliko ce ici puta nego da ce 3x loop ici ( znaci 1x ne treba ) za IsPlayerConnected

zerocoolos

ma znam joe, zato sam i napisao da ces ti shvatit primjer ;)
ostali ce se samo pridruzit i vidi kao i oni kontaju, al ima jedan greska sto sam napisao  :P

Zato jesu gore navodnici pod "3 loopa".

A ti Capone malo se skoncentriraj i slusaj se, lako je bit borac poslje bitke, kladim se u kolko god oces novaca da nisi ni procitao post od zerocoolsa. Nema "ko da nije krenuo" kad je to globalni timer koji krece kad se mod u kojem je pokrene, procitaj malo SetTimer funkciju i bit ce ti jasno.
To sto ne radi nista tom igracu, o bome bogami i njega loopa ili po tvome misljenju ne? i loopa samo konektirane igrace kazes?

covjece nemoj me nasmijavat i malo pazi kome ces tisina govorit ubuduce
Poslednja Izmena: Januar 07, 2010, 09:53:10 PRE PODNE od John