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).
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
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.
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.
@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.
}
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 ?
[pawn]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;
}
[/pawn]
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 ?
[pawn]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;
}
[/pawn]
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
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.
Ja odustajem od ovoga jer mi se svadjamo oko teme koja je starija od 3 dana, a autor ove teme vjerovatno nece ni procitati.
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).
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?
[pawn]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;
}[/pawn]
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.");
MissionStatus[playerid] = 0;
}
}
return 1;
}
Riješeno, može lock!! :D