[Tutorial] Kako dodati cooldown kod komandi?
Balkan SA:MP
SA-MP Doprinos42 / 100 XP
- Na primer, zelimo da dodamo cooldown na komandu /kupiarmor, sa cime ogranicavamo igracu koriscenje komande na svakih 15 sekundi.
1. Moramo prikljuciti include koji se zove "zcmd" (Potraziti detaljan tutorijal na internetu).
#include
2. Zatim moramo napraviti komandu:
CMD:kupiarmor(playerid, params[]) // kreiramo komandu /kupiarmor
{
new Float:sadasnjiArmor; // kreiramo varijablu koja ce sadrzati armour naseg igraca
GetPlayerArmour(playerid, sadasnjiArmor); // uzimamo armour i stavljamo u varijablu
if(sadasnjiArmor >= 99.0)
return SendClientMessage(playerid, -1, "Vec imate pun armour."); // proveravamo da li igrac ima pun pancir
SetPlayerArmour(playerid, sadasnjiArmor + 50.0); // postavljamo igracu armor na +50
SendClientMessage(playerid, -1, "Uspesno ste kupili armor! +50.0");
SendClientMessage(playerid, -1, "Sledecu kupovinu mozete izvrsiti nakon 15 sekundi.");
return true;
}
Imamo sjajnu komandu, ali nam fali cooldown (osim poruke).
To cemo uraditi tako sto cemo dodati varijablu za igrace iznad komande:
new coolDown;
Zatim implementirati (staviti/primeniti) cooldown funkciju u komandu:
CMD:kupiarmor(playerid, params[]) // kreiramo komandu /kupiarmor
{
if(gettime() - coolDown < 15)
return SendClientMessage(playerid, -1, "Svakih 15 sekundi mozete koristiti ovu komandu!"); // proveravamo da li je proslo 15 sekundi od zadnjeg koriscenja komande
new Float:sadasnjiArmor; // kreiramo varijablu koja ce sadrzati armour naseg igraca
GetPlayerArmour(playerid, sadasnjiArmor); // uzimamo armour i stavljamo u varijablu
if(sadasnjiArmor >= 99.0)
return SendClientMessage(playerid, -1, "Vec imate pun armour."); // proveravamo da li igrac ima pun pancir
SetPlayerArmour(playerid, sadasnjiArmor + 50.0); // postavljamo igracu armor na +50
SendClientMessage(playerid, -1, "Uspesno ste kupili armor! +50.0");
SendClientMessage(playerid, -1, "Sledecu kupovinu mozete izvrsiti nakon 15 sekundi.");
coolDown = gettime(); // postavljamo trenutno vreme na varijablu
return true;
}
Nasa komanda je sada gotova!
Sada igrac ne moze da kupuje armour na svakih 5 sekundi ili kada on hoce, vec na svakih 15 sekundi!
Nadam se da ste nesto naucili iz ovog tutorijala.
first tutorial made by Djomla.
Balkan SA:MP
SA-MP Doprinos15 / 250 XP
Nije bas narocito jasan tutorial, trebalo je da citam sve kako bih dosao do onoga sto trazim
Fali objasnjenja vise, sta koji deo koda izvrsava jer korostis posebnu logiku za cooldown
Sta sam uradio/poboljsao:
Promenio sam ime varijable za sadasnji armor. Uvek je bolje engleske nazive koristiti za te stvarcice.
Poboljasnja struktura koda, jasniji komentari.
Dodao sam logiku provere armora, dodatnu, da se armor ne moze povecati iznad 99.0.
Objasnjenje cooldowna:
Kada igrac koristi komandu /kupiarmor, trenutni timestamp se cuva u promenljivoj (u tvom slucaju, armorCooldown). Ova promenljiva se koristi za pracenje kada je igrac poslednji put koristio komandu.
Kada igrac pokusa da ponovo koristi komandu, sistem proverava razliku izmedju trenutnog vremena (dobijenog pomocu gettime()) i vremena kada je poslednji put koriscena komanda (tj. armorCooldown).
Ako je razlika manja od definisanog cooldown-a (15 sekundi), igracu se salje poruka da mora sacekati pre nego sto ponovo koristi komandu.
Ako je proslo dovoljno vremena (15 sekundi), igrac moze koristiti komandu, a trenutni timestamp se ponovo postavlja na armorCooldown, cime se resetuje cooldown.
Kako to izgleda u kodu:
// Proveravamo cooldown
if (gettime() - armorCooldown < 15)
{
new message; // Deklaracija niza za poruku
new remainingTime = 15 - (gettime() - armorCooldown); // Izracunavamo preostalo vreme
format(message, sizeof(message), "Sledecu kupovinu mozete izvrsiti za %d sekundi.", remainingTime); // Formiramo poruku
return SendClientMessage(playerid, -1, message); // Saljemo poruku igracu
}
gettime(): Ova funkcija vraca trenutni Unix Timestamp
armorCooldown: Ovo je vreme (Timestamp) kada je igrac poslednji put koristio komandu.
gettime() - armorCooldown < 15: Ova provera utvrdjuje da li je proslo manje od 15 sekundi od poslednjeg koriscenja komande.
remainingTime: Ako je proslo manje od 15 sekundi, izracunava se preostalo vreme do sledece upotrebe komande i salje se poruka igracu.
Moj nacin kodiranja ove komande i sistema:
CMD:kupiarmor(playerid, params[]) // Kreiramo komandu /kupiArmor
{
// Proveravamo cooldown
if (gettime() - armorCooldown < 15)
{
new message; // Deklaracija niza za poruku
new remainingTime = 15 - (gettime() - armorCooldown); // Izracunavamo preostalo vreme
format(message, sizeof(message), "Sledecu kupovinu mozete izvrsiti za %d sekundi.", remainingTime); // Formiramo poruku
return SendClientMessage(playerid, -1, message); // Saljemo poruku igracu
}
new Float:currentArmor; // Varijabla koja sadrzi trenutni armor igraca
GetPlayerArmour(playerid, currentArmor); // Uzimamo trenutni armor i smestamo ga u varijablu
// Proveravamo da li igrac vec ima pun armor
if (currentArmor >= 99.0) return SendClientMessage(playerid, -1, "Vec imate pun armor."); // Poruka za pun armor
// Povecavamo armor i osiguravamo da ne predje maksimalnu vrednost
currentArmor += 50.0; // Povecavamo trenutni armor za 50
if (currentArmor > 99.0) currentArmor = 99.0; // Postavljamo na maksimalnu vrednost
SetPlayerArmour(playerid, currentArmor); // Postavljamo igracu novi armor
// Slanje poruka igracu
SendClientMessage(playerid, -1, "Uspesno ste kupili armor! +50.0"); // Potvrda o kupovini
SendClientMessage(playerid, -1, "Sledecu kupovinu mozete izvrsiti nakon 15 sekundi."); // Informacija o cooldown-u
armorCooldown = gettime(); // Postavljamo trenutno vreme na varijablu cooldown
return 1; // Izadji ovde
}
Nadam se da si razumeo o cemu govorim i opet kazem nemoj da me shvatis pogresno da sad ja odmah kritikujem, ovo, ono... Ovako opsirno ti niko ne bi napisao i ukazao na sitne propuste. Ja zaista cenim i postujem to sto si odvojio vreme i napravio tutorial.
ITS Student - Information Technology
Balkan SA:MP
SA-MP Doprinos42 / 100 XP
Balkan SA:MP
SA-MP Doprinos15 / 250 XP
𓆩đɉê‹áµ¯Å‚ⱥ𓆪 wrote on March 1, 2025, 3:25 pm:
Lepo. Molim i drugi put. Drago mi je što si razuman čovek i nisi odmah "aaa, džaaa, buuu, odmah me kritikuje"...
Smatrao sam da si okej i da ćeš prihvatiti to što govorim, zato sam i napisao. Bilo kome da pišem, ljudi treba da shvate da ja nemam ništa protiv njih, meni je drago kad neko napiše neki tutorial, objašnjenje, pomogne nekome. Tako i ja želim svojim iskustvom ili nekom konstruktivnom kritikom, komentarom, bilo čime pomoći tom nekome. Jer da ne komentarišemo, čemu bi služio ovaj forum. Treba da delimo svoja mišljenja na lep i civilizovan način, prijateljski. 😎
ITS Student - Information Technology
Balkan SA:MP
SA-MP Doprinos42 / 100 XP
Dragi wrote on March 1, 2025, 3:29 pm:
Smatrao sam da si okej i da ćeš prihvatiti to što govorim, zato sam i napisao. Bilo kome da pišem, ljudi treba da shvate da ja nemam ništa protiv njih, meni je drago kad neko napiše neki tutorial, objašnjenje, pomogne nekome. Tako i ja želim svojim iskustvom ili nekom konstruktivnom kritikom, komentarom, bilo čime pomoći tom nekome. Jer da ne komentarišemo, čemu bi služio ovaj forum. Treba da delimo svoja mišljenja na lep i civilizovan način, prijateljski. 😎
naravno, uvek ali bas uvek treba biti otvorenog uma : D
Balkan SA:MP
SA-MP Doprinos240 / 250 XP
Morate biti prijavljeni da biste odgovorili na ovu temu.
Prijava