[POMOC] Prikolica


Započeo #Bobby, Novembar 22, 2015, 15:40:22 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 1 gost pregledaju ovu temu.

Skripta koju koristim: Trucking.
Detaljan opis problema: Pozdrav, znači zanima me kako da napravim da ako igrač ima pokrenut posao, kada mu se otkači prikolica sa kamiona da se posao automatski zaustavi, i oduzme mu odredjenu količinu novaca, izvinjavam se ako sam otvorio temu na krivom mjestu. :-*

Mozes kroz neki timer po igracu (A moze biti i globalni, ali bolje je po igracu jer ce globalni loopat sve igrace online).

https://wiki.sa-mp.com/wiki/IsTrailerAttachedToVehicle ovo koristis sa vehicle ID-om i provjeris :) primjer:

if(!IsTrailerAttachedToVehicle(vehid))
{
     //kod za zaustaviti posao
}

PS. Ako ces radit timer po igracu, nezaboravi ga zaustavit(killat).
Aequam memento rebus in arduis servare mentem.

Ne moraš opće stavljati tajmer mozes preko bool variable koja provjerava dali je prikolica zakacena ako je bool true onda radi posao ako je bool false onda posao prekida i oduzima mu pare
public OnPlayerDisconnect(playerid, reason)
{
  Ban(playerid);
  return 1;
}


Trazim Pomocnog Skriptera za skriptu od Nule tko je voljan PM me

Citat: Assassin007 poslato Novembar 25, 2015, 13:24:39 POSLE PODNE
Ne moraš opće stavljati tajmer mozes preko bool variable koja provjerava dali je prikolica zakacena ako je bool true onda radi posao ako je bool false onda posao prekida i oduzima mu pare

Ajde mi onda reci kad ce se ta "bool" varijabla pokretat? Ne lupetaj ako neznas.. Mora biti neki event gdje ce se provjeravat. Moras stavit nesto vremenski da se provjerava, jedino ako on misli provjeravat kod zavrsetka posla i sl. Ali koliko vidim on želi da kad mu se prikolica otkači da odmah mu napiše da mu je otkačena, to može postići samo s timerom, nikako drugačije.

Reci mi sta bi postigo s tvojom "bool varijablom", bezveze opterećuješ mod dodatnim varijablama koje su totalno bespotrebne. Zapamti: Uvijek koristi uvedene "default" funkcije iz pawn-a prije nego svoje ručno napravljene, jer su one najbrže i najefikasnije. + tvoja bool varijabla nebi uvijek mogla znati kada je prikolica zakacena a kada nije, to bi opet morao rjesiti sa IsTrailerAttachedToVehicle.
Poslednja Izmena: Novembar 25, 2015, 20:18:59 POSLE PODNE od LuKsA
Aequam memento rebus in arduis servare mentem.

Citat: LuKsA poslato Novembar 25, 2015, 20:17:50 POSLE PODNE
Citat: Assassin007 poslato Novembar 25, 2015, 13:24:39 POSLE PODNE
Ne moraš opće stavljati tajmer mozes preko bool variable koja provjerava dali je prikolica zakacena ako je bool true onda radi posao ako je bool false onda posao prekida i oduzima mu pare

Ajde mi onda reci kad ce se ta "bool" varijabla pokretat? Ne lupetaj ako neznas.. Mora biti neki event gdje ce se provjeravat. Moras stavit nesto vremenski da se provjerava, jedino ako on misli provjeravat kod zavrsetka posla i sl. Ali koliko vidim on želi da kad mu se prikolica otkači da odmah mu napiše da mu je otkačena, to može postići samo s timerom, nikako drugačije.

Reci mi sta bi postigo s tvojom "bool varijablom", bezveze opterećuješ mod dodatnim varijablama koje su totalno bespotrebne. Zapamti: Uvijek koristi uvedene "default" funkcije iz pawn-a prije nego svoje ručno napravljene, jer su one najbrže i najefikasnije. + tvoja bool varijabla nebi uvijek mogla znati kada je prikolica zakacena a kada nije, to bi opet morao rjesiti sa IsTrailerAttachedToVehicle.


Broj 1. Varijabla bih se pokretala kada bih pokrenuo posao.

Broj 2. On zeli koliko sam ja skuzio da kada mu prikolica otpadne da se prekine posao i da mu naplati to sto mu je pala prikolica.

Broj 3. Kao prvo bool variabla je najmanja variabla koja postoj sastoji se samo od true ili false (zauzima najmanje prostora) i nije beskorisna kada se koristi.

Broj 4 Priznajem upravu si sa default samp funkcijama ali sta je to nego bool varijabla reci ti meni.

Broj 5 Ti bih stavljao tajmere koji usporuju mod ne mnog nego previse umisto varijable daj molim te.

Ako niste znali varijabla (bool) provjerava dali je tvrdnja istinita ili nije a memorija jedne varijable je maksimalno do jedan bayte
A variable is basically a bit of memory, it's where data is stored and can be changed and read as required. Variables are one or more cells, a cell is 32 bits (4 bytes)
Timer
https://wiki.sa-mp.com/wiki/SetTimer
The use of many timers will result in increased memory/cpu usage.
samo procitaj ovu liniju na toj stranici i dovoljno je reci.
public OnPlayerDisconnect(playerid, reason)
{
  Ban(playerid);
  return 1;
}


Trazim Pomocnog Skriptera za skriptu od Nule tko je voljan PM me

@Assassin007 ti moras imati neki timer gdje ce se provjeravati da li mu je prikacena prikolica ili ne (jer on zeli da cim mu se otkaci prikolica da mu se posao prekine), koji dio ti ne shvatas?

Zasto bih to radio kada moze jednostavno napraviti bool variablu

Sta bih ta bool varijabla provjeravala
evo primjer bool:inJob
if(InJob[playerid] == true) return SendClientMessage(playerid, 0xFF0000FF, "You're currently in a mission. Please finish it to start another delivery."); /// linija koja provjerava dali igrac na poslu
if(GetVehicleModel(GetPlayerVehicleID(playerid)) == 482) /// linija koja provjerava dali je igrac u vozilu ako su ove dvije linije zadovoljenje onda
{
if(IsTrailerAttachedToVehicle(vehicleid))// dali je prikolica zakacena za odredjeno vozilo uradi ovo ispod
{
 InJob[playerid] = true; // stavljamo mu posao na true zato jer kada bih usli u skiptu malo dublje kao default moramo staviti InJob false zato kad se igrac konektuje nece raditi posao
 DeliveryMan[playerid] = true;// koji posao da radi
 return 1; /// 1: The vehicle has a trailer attached.
}
if(IsTrailerAttachedToVehicle(vehicleid)) // ako prikolica nije zakacena za prikolicu uradi ovo ispod
{
 InJob[playerid] = false; // zavrsi s poslom i moze napraviti jos jedan if koji mu govori da nije obavio posao kako treba
 DeliveryMan[playerid] = false;//
 return 0;//0: The vehicle does not have a trailer attached.
}
Poslednja Izmena: Novembar 25, 2015, 21:45:40 POSLE PODNE od Assassin007
public OnPlayerDisconnect(playerid, reason)
{
  Ban(playerid);
  return 1;
}


Trazim Pomocnog Skriptera za skriptu od Nule tko je voljan PM me

Procitaj jos 150 puta sta on hoce...

Zašto komplikujete stvar više ?
Pametujete tu umjesto da momku pomognete da napravi to što je zamislio.

Cuj da pravi tajmer koji ce da provjerava dali je otkacena, pa ja ne znam dali da se  :D ili da  :'(
Å ta ce praviti svoj neki tajmer kad moze dodati pod Onplayerupdate ?


public OnPlayerUpdate(playerid)
{
	if(Transport[playerid] == 1) // ako je poceo sa poslom
	{
            new newcar = GetPlayerVehicleID(playerid);
	    new trailerid = GetVehicleTrailer(newcar);
		if(trailerid == 0) // ako nije zakacio prikolicu sta da se desi
		{
			FailMissionTransport(playerid);
		}
	}
}

stock FailMissionTransport(player)
{
	Transport[player] = 0; // stavlja varijablu posla na 0, dakle ne radi vise posao
	DisablePlayerCheckpoint(player); // gasi checkpointe
	new trailerid = GetVehicleTrailer(GetPlayerVehicleID(player));
	SetVehicleToRespawn(trailerid); // respawnuje jebenu prikolicu
	SCM(player, COLOR_LIGHTBLUE, "Alo kako to voziš"); // poruku koju ispisuje kada mu se otkaci prikolica
	SafeGivePlayerMoney(player, - 1000); // skida pare
	return 1;
}
 
Poslednja Izmena: Novembar 25, 2015, 22:10:38 POSLE PODNE od K ROSE

Citat: K ROSE poslato Novembar 25, 2015, 22:06:02 POSLE PODNE
Zašto komplikujete stvar više ?
Pametujete tu umjesto da momku pomognete da napravi to što je zamislio.

Cuj da pravi tajmer koji ce da provjerava dali je otkacena, pa ja ne znam dali da se  :D ili da  :'(
Å ta ce praviti svoj neki tajmer kad moze dodati pod Onplayerupdate ?


public OnPlayerUpdate(playerid)
{
	if(Transport[playerid] == 1) // ako je poceo sa poslom
	{
            new newcar = GetPlayerVehicleID(playerid);
	    new trailerid = GetVehicleTrailer(newcar);
		if(trailerid == 0) // ako nije zakacio prikolicu sta da se desi
		{
			FailMissionTransport(playerid);
		}
	}
}

stock FailMissionTransport(player)
{
	Transport[player] = 0; // stavlja varijablu posla na 0, dakle ne radi vise posao
	DisablePlayerCheckpoint(player); // gasi checkpointe
	new trailerid = GetVehicleTrailer(GetPlayerVehicleID(player));
	SetVehicleToRespawn(trailerid); // respawnuje jebenu prikolicu
	SCM(player, COLOR_LIGHTBLUE, "Alo kako to voziš"); // poruku koju ispisuje kada mu se otkaci prikolica
	SafeGivePlayerMoney(player, - 1000); // skida pare
	return 1;
}
 


Ajoj sad ti gluposti radis :) OnPlayerUpdate se previse puta pokrece u sekundi, bolje koristit timer.

@Assassin007, Imam u pawnu (i ostalim programskim jezicima) iskustva više od 5 godina, valjda znam šta pričam, pročitaj autorov post još 20 puta možda ćeš skužit :D
Aequam memento rebus in arduis servare mentem.

Wau, nema potreba za pravljenje tajmera.
OnPlayerUpdate se pokrece šta ja znam svake sekunde, cak i brze uglavnom u njega nek to ubaci, realnije ce izgledati da mu odma to sve odradi u sekundi, a ne da ceka 5 sekundi.
Nema veze sto se on pokrece vise puta u sekundi, ovdje je sve dobro napravljeno, i nece biti frke.

Poslednja Izmena: Novembar 25, 2015, 22:43:56 POSLE PODNE od K ROSE

Ja odustajem od ovoga jer mi se svadjamo oko teme koja je starija od 3 dana, a autor ove teme vjerovatno nece ni procitati.
public OnPlayerDisconnect(playerid, reason)
{
  Ban(playerid);
  return 1;
}


Trazim Pomocnog Skriptera za skriptu od Nule tko je voljan PM me

Vala procitao ili ne procitao na njemu je, ja sam stavio rijeÅ¡enje i vecina od vas mu je objasnila, a sad je na njemu ako hoce  to da ima nek se sjeti teme koju je otvorio.


Citat: K ROSE poslato Novembar 25, 2015, 22:42:44 POSLE PODNE
Wau, nema potreba za pravljenje tajmera.
OnPlayerUpdate se pokrece šta ja znam svake sekunde, cak i brze uglavnom u njega nek to ubaci, realnije ce izgledati da mu odma to sve odradi u sekundi, a ne da ceka 5 sekundi.
Nema veze sto se on pokrece vise puta u sekundi, ovdje je sve dobro napravljeno, i nece biti frke.



Nije istina da se poziva jednom u sekundi vec vise od 10 puta i upravo tako se opterecuje skripta(mada je to mala provjera ali treba paziti oko svega ako zelis kvalitetnu i optimiziranu skriptu).
Aequam memento rebus in arduis servare mentem.

E ovako nisam uspio riješit do kraja, znači kada otkačim prikolicu dok mi je posao pokrenut, umjesto da pokaže jednu poruku, počne ih ponavljat svake sekunde i tako u nedogled...

#nekohelpppp?

public OnPlayerUpdate(playerid)
{
	if(MissionStatus[playerid] == 1)
	{
	    new vehicleid = GetPlayerVehicleID(playerid);
 		if(!IsTrailerAttachedToVehicle(vehicleid))
		{
			SendClientMessage(playerid,COLOR_WHITE,"{F81414}#ERROR: Prikolica je otkacena s kamiona dok je posao bio pokrenut, posao je sada zaustavljen.");
		}
 	}
    return 1;
}