Balkan SA:MP

San Andreas Multiplayer - www.sa-mp.com => Tutorijali u vezi SA-MPa => Temu započeo: Đ J Ø ₥ Ⱡ ₳ poslato Mart 01, 2025, 15:03:35 POSLE PODNE

Naslov: [Tutorial] Kako dodati cooldown kod komandi?
Poruka od: Đ J Ø ₥ Ⱡ ₳ poslato Mart 01, 2025, 15:03:35 POSLE PODNE
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 <zcmd>

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[MAX_PLAYERS];

Zatim implementirati (staviti/primeniti) cooldown funkciju u komandu:

CMD:kupiarmor(playerid, params[]) // kreiramo komandu /kupiarmor
{
if(gettime() - coolDown[playerid] < 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[playerid] = 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.
Naslov: Odg: [Tutorial] Kako dodati cooldown kod komandi?
Poruka od: Dragi poslato Mart 01, 2025, 16:16:47 POSLE PODNE
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.


Sta sam uradio/poboljsao:

Objasnjenje cooldowna:
Kada igrac koristi komandu /kupiarmor, trenutni timestamp se cuva u promenljivoj (u tvom slucaju, armorCooldown[playerid]). 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[playerId]).

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[playerid], cime se resetuje cooldown.

Kako to izgleda u kodu:
[pawn]
// Proveravamo cooldown
    if (gettime() - armorCooldown[playerid] < 15)
    {
        new message[55]; // Deklaracija niza za poruku
        new remainingTime = 15 - (gettime() - armorCooldown[playerid]); // 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
    }
[/pawn]

Moj nacin kodiranja ove komande i sistema:
[pawn]
CMD:kupiarmor(playerid, params[]) // Kreiramo komandu /kupiArmor
{
    // Proveravamo cooldown
    if (gettime() - armorCooldown[playerid] < 15)
    {
        new message[55]; // Deklaracija niza za poruku
        new remainingTime = 15 - (gettime() - armorCooldown[playerid]); // 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[playerid] = gettime(); // Postavljamo trenutno vreme na varijablu cooldown

    return 1; // Izadji ovde
}


[/pawn]

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.
Naslov: Odg: [Tutorial] Kako dodati cooldown kod komandi?
Poruka od: Đ J Ø ₥ Ⱡ ₳ poslato Mart 01, 2025, 16:25:15 POSLE PODNE
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
Naslov: Odg: [Tutorial] Kako dodati cooldown kod komandi?
Poruka od: Dragi poslato Mart 01, 2025, 16:29:40 POSLE PODNE
Citat: 𓆩đɉꝋᵯłⱥ𓆪 poslato Mart 01, 2025, 16:25:15 POSLE PODNEPuno 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.  8)
Naslov: Odg: [Tutorial] Kako dodati cooldown kod komandi?
Poruka od: Đ J Ø ₥ Ⱡ ₳ poslato Mart 01, 2025, 16:51:49 POSLE PODNE
Citat: Dragi poslato Mart 01, 2025, 16:29:40 POSLE PODNELepo. 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.  8)
naravno, uvek ali bas uvek treba biti otvorenog uma : D
Naslov: Odg: [Tutorial] Kako dodati cooldown kod komandi?
Poruka od: markosimic poslato Mart 01, 2025, 17:03:22 POSLE PODNE
Not bad, posvetite se vise detaljima.