[Tutorial] Kako dodati cooldown kod komandi?

1. Mar. 2025.
3,055
pregleda
6
postova
Mladjo558
4
Shot Caller
1. Mar. 2025.
Kako dodati cooldown na neku komandu? (Na primer: /ad)

- 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.
Gagule
4
Made Man
1. Mar. 2025.
Lepo, cestitam na trudu i vremenu koje si proveo da napises ovaj tutorial, ali imam par zamerki. Nemoj da me shvatis pogresno, vec prijateljski. Znam da ti je prvi tutorial i to vrlo postujem.
  1. Nije bas narocito jasan tutorial, trebalo je da citam sve kako bih dosao do onoga sto trazim

  2. 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.
Mladjo558
4
Shot Caller
1. Mar. 2025.
Puno ti hvala sto cenis moje vreme i trud za tutorijal, prvi mi je pa sad tako je kako je. Hvala ti mnogo na kritikama, ja to obozavam jer uvek mogu da se poboljsam : D
Gagule
4
Made Man
1. Mar. 2025.
𓆩đɉꝋᵯłⱥ𓆪 wrote on March 1, 2025, 3:25 pm:
Puno ti hvala sto cenis moje vreme i trud za tutorijal, prvi mi je pa sad tako je kako je. Hvala ti mnogo na kritikama, ja to obozavam jer uvek mogu da se poboljsam : D


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.  😎
Mladjo558
4
Shot Caller
1. Mar. 2025.
Dragi wrote on March 1, 2025, 3:29 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.  😎

naravno, uvek ali bas uvek treba biti otvorenog uma : D
neshallon
5
Kingpin
1. Mar. 2025.
Not bad, posvetite se vise detaljima.

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava

© 2026 SmartShark. All rights reserved.

Powered by Momentum|v2026.3.001 Alpha