[Tutorial] Prost MUTE sistem u PAWN-u i MySQL-u

Započeo Dragi, Januar 19, 2025, 22:24:42 POSLE PODNE

prethodna tema - sledeća tema

0 članova i 9 gostiju pregledaju ovu temu.

Prost MUTE sistem u PAWN-u i MySQL-u

Uvod
Ovo je standardan i prost sistem zabrane pisanja koji koriste Administratori SA:MP servera razvijen u PAWN jeziku i MySQL-u.
Sistem se sastoji od komande /mute i /unmute. Nisam hteo prenatrpavati logovanjem, listingom baze podataka... Ukoliko izricito zelite, napisite, pa cu u okviru ovoga dodati posebno to. (Npr. /svimutirani > Offline ili Online, logovanje /mute...)

Da bi vam sistem funkcionisao, morate imati login sistem u MySQL-u koji koristi cache, ne orm. Zato se ovde necu bazirati na tome.

Bice nam potrebne 2 varijable, "mute" i "is_muted", obe imaju tip podatka INT, s default vrednostima "0".
  • U "mute" smestamo broj minuta na koliko je neki igrac mutiran. (mute=60)
  • U "is_muted" smestamo "1" ili "0" u zavisnosti da li je igrac mutiran ili ne. Mozemo nazvati i status mute-a. Trebace nam zbog obavestenja u tasku.

Finte:
Primer Dragijevog koda:
if (Player[i][Mute] > 0) {
    Player[i][Mute] = max(0, Player[i][Mute] - 1);
}

Ostalo:
if(Player[i][Mute] != 0) {
    Player[i][Mute]--;
    if(Player[i][Mute] <= 0) {
        Player[i][Mute] = 0;
    }
}
Je li da da je prvi primer mnogo laksi, optimizovaniji i citljiviji? Nemojte uvek gledati daj da sto pre smandrljam. Radice to, ali skarabudz je skarabudz.

Potrebne biblioteke, plugini:

Code
https://pastebin.com/fF1qxk30

Fotografija iz igre


Zakljucak
Nadam se da ste naucili nesto novo danas. Ako niste, procitajte i razmislite dobro, ponovo. Hvala na citanju.


Lepo, korisno.

Nisi se lepo izrazio u par slucajeva.

Sistem je razvijen za platformu SAMP koristeci zvanican PAWN jezik za skriptanje istog. Koristi dodatne biblioteke poput sscanf, mysql, zcmd i YSI.

Ne svidja mi se sto nisi dao vise opcija cuvanja, poput YSI kada ga vec koristis.

Zasto zcmd kada vec imas YSI command procesor y_commands.

Ako se pravi nesto, preporucujem da se iskoristi sve iz paketa i ne ubacuju nove nepotrebne biblioteke.

Mogao bih pisati bas dosta oko sitnica nekih, ali glavno sam rekao.

Takodje ovaj sistem moze da se uradi i putem timestamp-ova koji je uzgred brzei i laksi za rad, jer nemas timer koji vrtis stalno da bi uradio check.

Jednostavno kada mutiras igraca postavis timestamp, koji kroz funkciju proveri da li je timestamp u usporedbi sa trenutnim prosao ili nije prosao, te mu skine mute.

No hate, ovde sam da samo rasirim svest sta je sve moguce ukoliko se dovoljno promisli.

Ostavicu ovde ispravku code na moj nacin.

https://pastebin.com/gQsMUYHt
(nisam testirao ali sam uzeo iz svog fajla (modula) tako da je radilo na mom blank gamemode vec (prilagodio sam samo postojecem napisanom sistemu))

Ovde ne koristimo timer, jer apsolutno nije potreban ! Ne koristimo YSI pakete jer nije potrebno. Promisli ubuduce code malo vise i ne pravi ga vise kompleksnim nego sto je potrebno <3

Ovo je najprostiji, najbrzi i najbolji nacin za uraditi nesto ovako.
Poslednja Izmena: Januar 19, 2025, 23:48:24 POSLE PODNE od markosimic
HTML / CSS / Javascript / Inspect : Entry Masterclass.
ReactJS / Tailwind CSS / PWA / Axios / SCSS / Redux, ViteJS : Entry Masterclass.
C / C++ / C# / C-objective - kroz Pawn Lang : Entry Masterclass
Grupisano Pravljenje Objekata : Filterscript.


Sta je to web development?
To je nesto ono kao, kako bih to rekao, izgubis volju za zivotom i zelis da se ubijes, ali to je okej.
Onda jednostavno shvatis da si bio glup i resis problem, das sam sebi lajk,
skuvas NES 3u1 i pripremis se za sledeci projekat.

Citat: markosimic poslato Januar 19, 2025, 23:37:20 POSLE PODNELepo, korisno.

Nisi se lepo izrazio u par slucajeva.

Sistem je razvijen za platformu SAMP koristeci zvanican PAWN jezik za skriptanje istog. Koristi dodatne biblioteke poput sscanf, mysql, zcmd i YSI.

Ne svidja mi se sto nisi dao vise opcija cuvanja, poput YSI kada ga vec koristis.

Zasto zcmd kada vec imas YSI command procesor y_commands.

Ako se pravi nesto, preporucujem da se iskoristi sve iz paketa i ne ubacuju nove nepotrebne biblioteke.

Mogao bih pisati bas dosta oko sitnica nekih, ali glavno sam rekao.

Takodje ovaj sistem moze da se uradi i putem timestamp-ova koji je uzgred brzei i laksi za rad, jer nemas timer koji vrtis stalno da bi uradio check.

Jednostavno kada mutiras igraca postavis timestamp, koji kroz funkciju proveri da li je timestamp u usporedbi sa trenutnim prosao ili nije prosao, te mu skine mute.

No hate, ovde sam da samo rasirim svest sta je sve moguce ukoliko se dovoljno promisli.

Ostavicu ovde ispravku code na moj nacin.

https://pastebin.com/gQsMUYHt
(nisam testirao ali sam uzeo iz svog fajla (modula) tako da je radilo na mom blank gamemode vec (prilagodio sam samo postojecem napisanom sistemu))

Ovde ne koristimo timer, jer apsolutno nije potreban ! Ne koristimo YSI pakete jer nije potrebno. Promisli ubuduce code malo vise i ne pravi ga vise kompleksnim nego sto je potrebno <3

Ovo je najprostiji, najbrzi i najbolji nacin za uraditi nesto ovako.


Hvala ti na komentaru i deljenju svog koda. Cenim trud koji si uložio u optimizaciju, ali si za..bao debelo stvar i napraivo opasan BUG. Mislim da sam se lepo izrazio jer nisam rekao jezici, ogradio sam MySQL kao poseban sistem.

Moj pristup koristi timer koji se pokreće svake minute, što smanjuje učestalost poziva i opterećenje na serveru. Mislim da je efikasnije za veći broj igrača. (Čak i na 1000ms je bolji)

S druge strane, tvoj kod koristi `OnPlayerUpdate`, što NIKAKO nije dobro! Napravio si opasnu grešku tu, samo zasto što si hteo da uprostiš, kobajagai, nešto što je Dragi vrlo dobro realizovao! A objasniću kasnije šta si uradio...

Svaka složenija skripta mora koristiti tajmere na svakih 1000ms i-ili 60000ms. Ja nisam napravio tajmer specijalno zbog mute sistema. I ne brini, to uopšte ne šteti optimizaciji, jer YSI radi ko Singer, a usput, imaš samo jedan timer, eventualno dva timera na takvim intervalima uzastopno.

Ne znam zašto pojedinci misle da su ti tajmeri BAUK i da to šteti optimizaciji, naprotiv, kad se pravilno koristi, uopšte ne šteti.

Nigde nisam implementirao y_commands. Ne vidim razlog za spominjanje. Od YSI je samo timer implementiran. Ja više volim ZCMD ili Pawn.CMD. Šta bih mogao čuvati u YSI i zašto bih? Sve se roka u MySQL, zašto? Opet kažem hiljaditi put, da bi radilo ko Singer. Dragi = Singer.

Tvoja varijabla se pojavila ko grom iz vedra neba? "MuteTimestamp". Hajde, sredio sam ti kod i šta se desilo? Bugčina baća i to velikih razmera, ali dobro je što si napravio BUG da bih tebi i drugima pokazao koliko nije ispravno koristiti taj tvoj "najbolji, najefikasniji i najbrži način".



Odmah sam uočio tu grešku, jer sam znao da se ne čita šta ja pišem, a lepo sam napisao "Trebace nam zbog obavestenja u tasku." Valjda si skontao sad da ja ne pišem bezveze stvari tek tako... Nije lepo što ne čitaš moje reči. Ovo je dobro što se desilo, jer mi je CPU skočio na 100%... Toliko o tvom callbacku i najboljem načinu koji se 30x ponavlja u jednoj sekundi.

Takođe, ne smatraj da se svađam ili tako nešto. Svakako ja tebe cenim dosta i to će biti tako, ali bih te zamolio da više ne radiš ovakve opaske. "Promisli ubuduce code malo vise i ne pravi ga vise kompleksnim nego sto je potrebno <3".... Ne ide da tako govoriš za mene.

Moj kod je promišljen 10000x i testiran 99999x. I nikad nije namerno napravljen kompleksno osim ako nisam ja to hteo iz dosade ili zabave, ali to naglasim! Retko kad mogu napraviti BUG i objaviti public bez rigoroznih testova. Ja dobro znam šta radim, valjda si dosad video. Ponavljam, moj kod je najbolji način za ovo, to će ti potvridti svaki skripter pri zdravom razumu. Moj kod može da radi na 9999 igrača ko Singer. Veruj Dragiju, bespotrebno si sve to napisao. :) Šta bi bilo da ja s tvojim stavom idem po forumu i svima analiziram kod, ali stvarno analiziram... Ne ide to. :D Razumem da nisi iz ove branše, ali baš zbog toga ne ide da govoriš meni šta je brže, bolje, optimizovanije, koje biblitoeke da koristim, a koje ne. Zamisli mene da govorim o veb developmentu tebi. Zamoliću te da me razumeš samo i ne uvrediš se, jer se i ja nisam uvredio. Sve najbolje ti želim!

P.S. Svaku kritiku koja je na mestu prihvatam. Ljudi smo i grešimo. Da ne pomislite da sam neki namćor.  ;D Ali kad sam u pravu, onda sam u pravu i ne bih pisao referate.



Citat: Dragi poslato juče u 01:34:32 PRE PODNEHvala ti na komentaru i deljenju svog koda. Cenim trud koji si uložio u optimizaciju, ali si za..bao debelo stvar i napraivo opasan BUG. Mislim da sam se lepo izrazio jer nisam rekao jezici, ogradio sam MySQL kao poseban sistem.

Moj pristup koristi timer koji se pokreće svake minute, što smanjuje učestalost poziva i opterećenje na serveru. Mislim da je efikasnije za veći broj igrača. (Čak i na 1000ms je bolji)

S druge strane, tvoj kod koristi `OnPlayerUpdate`, što NIKAKO nije dobro! Napravio si opasnu grešku tu, samo zasto što si hteo da uprostiš, kobajagai, nešto što je Dragi vrlo dobro realizovao! A objasniću kasnije šta si uradio...

Svaka složenija skripta mora koristiti tajmere na svakih 1000ms i-ili 60000ms. Ja nisam napravio tajmer specijalno zbog mute sistema. I ne brini, to uopšte ne šteti optimizaciji, jer YSI radi ko Singer, a usput, imaš samo jedan timer, eventualno dva timera na takvim intervalima uzastopno.

Ne znam zašto pojedinci misle da su ti tajmeri BAUK i da to šteti optimizaciji, naprotiv, kad se pravilno koristi, uopšte ne šteti.

Nigde nisam implementirao y_commands. Ne vidim razlog za spominjanje. Od YSI je samo timer implementiran. Ja više volim ZCMD ili Pawn.CMD. Šta bih mogao čuvati u YSI i zašto bih? Sve se roka u MySQL, zašto? Opet kažem hiljaditi put, da bi radilo ko Singer. Dragi = Singer.

Tvoja varijabla se pojavila ko grom iz vedra neba? "MuteTimestamp". Hajde, sredio sam ti kod i šta se desilo? Bugčina baća i to velikih razmera, ali dobro je što si napravio BUG da bih tebi i drugima pokazao koliko nije ispravno koristiti taj tvoj "najbolji, najefikasniji i najbrži način".



Odmah sam uočio tu grešku, jer sam znao da se ne čita šta ja pišem, a lepo sam napisao "Trebace nam zbog obavestenja u tasku." Valjda si skontao sad da ja ne pišem bezveze stvari tek tako... Nije lepo što ne čitaš moje reči. Ovo je dobro što se desilo, jer mi je CPU skočio na 100%... Toliko o tvom callbacku i najboljem načinu koji se 30x ponavlja u jednoj sekundi.

Takođe, ne smatraj da se svađam ili tako nešto. Svakako ja tebe cenim dosta i to će biti tako, ali bih te zamolio da više ne radiš ovakve opaske. "Promisli ubuduce code malo vise i ne pravi ga vise kompleksnim nego sto je potrebno <3".... Ne ide da tako govoriš za mene.

Moj kod je promišljen 10000x i testiran 99999x. I nikad nije namerno napravljen kompleksno osim ako nisam ja to hteo iz dosade ili zabave, ali to naglasim! Retko kad mogu napraviti BUG i objaviti public bez rigoroznih testova. Ja dobro znam šta radim, valjda si dosad video. Ponavljam, moj kod je najbolji način za ovo, to će ti potvridti svaki skripter pri zdravom razumu. Moj kod može da radi na 9999 igrača ko Singer. Veruj Dragiju, bespotrebno si sve to napisao. :) Šta bi bilo da ja s tvojim stavom idem po forumu i svima analiziram kod, ali stvarno analiziram... Ne ide to. :D Razumem da nisi iz ove branše, ali baš zbog toga ne ide da govoriš meni šta je brže, bolje, optimizovanije, koje biblitoeke da koristim, a koje ne. Zamisli mene da govorim o veb developmentu tebi. Zamoliću te da me razumeš samo i ne uvrediš se, jer se i ja nisam uvredio. Sve najbolje ti želim!

P.S. Svaku kritiku koja je na mestu prihvatam. Ljudi smo i grešimo. Da ne pomislite da sam neki namćor.  ;D Ali kad sam u pravu, onda sam u pravu i ne bih pisao referate.


Zato sam naglasio bas da nisam testirao jer sam uzeo tvoje, ubacio delove mog po nekoj logici koja bi trebala da radi. Kod mene moja verzija koja je napisana radi perfektno, ali bih morao taj sistem da ceo izvucem iz admin sistema koji je uzgred u sqlite, ne u mysql. Dao sam primer da se sve moze uraditi na mnogo prostije nacine, smatram da je bolja opcija usporedba timestamp jer nemas potrebe da imas timer koji se vrti. Radis usporedbu i odobravas pisanje u chatu ili ne odobravas.

Nisam hteo vise i dalje od toga da detaljisem jer sam u obavezama i nisam pri samom racunaru.

U YSI paketima postoji command procesor koji je deo biblioteke, radi isto skoro kao zcmd i nepotrebno je imati zcmd biblioteku kada vec imas u paketu nesto slicno da ne kazem identicno.

Takodje nigde nisi include foreach, a koristis ga. Doduse YSI ima foreach koliko znam u biblioteci svojoj. Foreach kao sam nije deo SAMP-a i nije integrisan u isti koliko znam.

Ovaj sistem po meni mnogo prostije, brze i logicnije radi putem timestamp-ova, a moze se uraditi na jos razne nacine.

Nisam rekao da je los sistem, naveo sam da postoji samo mnogo drugih nacina i da nije promisljeno dovoljno. Ne mozes da kazes da usporedba timestamp-ova nije efikasniji, optimizovaniji i brzi nacin od koriscenja timera.

Takodje naveo sam da si mogao uraditi i u YSI cuvanju, cisto da ima i ta verzija jer ne koriste svi (vecina) mysql.

Zamolicu te da citas moje reci pazljivije takodje.

"(nisam testirao ali sam uzeo iz svog fajla (modula) tako da je radilo na mom blank gamemode vec (prilagodio sam samo postojecem napisanom sistemu))"

"Ako se pravi nesto, preporucujem da se iskoristi sve iz paketa i ne ubacuju nove nepotrebne biblioteke."

"Takodje ovaj sistem moze da se uradi i putem timestamp-ova koji je uzgred brzei i laksi za rad, jer nemas timer koji vrtis stalno da bi uradio check.

Jednostavno kada mutiras igraca postavis timestamp, koji kroz funkciju proveri da li je timestamp u usporedbi sa trenutnim prosao ili nije prosao, te mu skine mute.

No hate, ovde sam da samo rasirim svest sta je sve moguce ukoliko se dovoljno promisli."

Ova zadnja recenica je kljucna. Opet kazem kod mene full sistem mute/unmute zauzima oko 150 linija code, u sqlite je pre svega i ne koristi timere, ali je modul i nece raditi samo ako se ubaci jer prati postojecu skriptu.

Kada budem imao vremena ovih dana rado cu ispraviti link i postaviti full funkcionalan sistem a ne ispravku kao primer kako se jos to moze odraditi, efikasnije i brze.

Takodje koristim napisanu custom funkciju a ne playerupdate, ovde sam ga stavio jer mi se nije dalo prepravljati celu funkciju ili pisati drugu iznova putem telefona.

Ps. Nema ljutnje, sve pet, nisam rekao nista lose, samo prosirio pricu kako se moze jos to napraviti i po meni optimizovaniji nacin (niko ne moze reci da je timer optimizovaniji od usporedbe i brzi od iste), osim ako timer ne ide kroz mnogo mnogo toga u buducnosti i tako ima smisla vise u samoj upotrebi, sto nije naglaseno. Ovakve debate nisu o tome ko je vise ili manje u pravu, nego o sirenju svesti i mogucnosti sta sve moze, ispravkama i edukaciji cak izmedju nas samih. Svakako su to sve neke nijanse, ja u ovo pristupam logikom weba jer sam iz web sveta, dok ti pristupas ipak iz legacy (c) sveta.
HTML / CSS / Javascript / Inspect : Entry Masterclass.
ReactJS / Tailwind CSS / PWA / Axios / SCSS / Redux, ViteJS : Entry Masterclass.
C / C++ / C# / C-objective - kroz Pawn Lang : Entry Masterclass
Grupisano Pravljenje Objekata : Filterscript.


Sta je to web development?
To je nesto ono kao, kako bih to rekao, izgubis volju za zivotom i zelis da se ubijes, ali to je okej.
Onda jednostavno shvatis da si bio glup i resis problem, das sam sebi lajk,
skuvas NES 3u1 i pripremis se za sledeci projekat.


Citat: markosimic poslato juče u 06:54:19 PRE PODNEZato sam naglasio bas da nisam testirao jer sam uzeo tvoje, ubacio delove mog po nekoj logici koja bi trebala da radi. Kod mene moja verzija koja je napisana radi perfektno, ali bih morao taj sistem da ceo izvucem iz admin sistema koji je uzgred u sqlite, ne u mysql. Dao sam primer da se sve moze uraditi na mnogo prostije nacine, smatram da je bolja opcija usporedba timestamp jer nemas potrebe da imas timer koji se vrti. Radis usporedbu i odobravas pisanje u chatu ili ne odobravas.

Nisam hteo vise i dalje od toga da detaljisem jer sam u obavezama i nisam pri samom racunaru.

U YSI paketima postoji command procesor koji je deo biblioteke, radi isto skoro kao zcmd i nepotrebno je imati zcmd biblioteku kada vec imas u paketu nesto slicno da ne kazem identicno.

Takodje nigde nisi include foreach, a koristis ga. Doduse YSI ima foreach koliko znam u biblioteci svojoj. Foreach kao sam nije deo SAMP-a i nije integrisan u isti koliko znam.

Ovaj sistem po meni mnogo prostije, brze i logicnije radi putem timestamp-ova, a moze se uraditi na jos razne nacine.

Nisam rekao da je los sistem, naveo sam da postoji samo mnogo drugih nacina i da nije promisljeno dovoljno. Ne mozes da kazes da usporedba timestamp-ova nije efikasniji, optimizovaniji i brzi nacin od koriscenja timera.

Takodje naveo sam da si mogao uraditi i u YSI cuvanju, cisto da ima i ta verzija jer ne koriste svi (vecina) mysql.

Zamolicu te da citas moje reci pazljivije takodje.

"(nisam testirao ali sam uzeo iz svog fajla (modula) tako da je radilo na mom blank gamemode vec (prilagodio sam samo postojecem napisanom sistemu))"

"Ako se pravi nesto, preporucujem da se iskoristi sve iz paketa i ne ubacuju nove nepotrebne biblioteke."

"Takodje ovaj sistem moze da se uradi i putem timestamp-ova koji je uzgred brzei i laksi za rad, jer nemas timer koji vrtis stalno da bi uradio check.

Jednostavno kada mutiras igraca postavis timestamp, koji kroz funkciju proveri da li je timestamp u usporedbi sa trenutnim prosao ili nije prosao, te mu skine mute.

No hate, ovde sam da samo rasirim svest sta je sve moguce ukoliko se dovoljno promisli."

Ova zadnja recenica je kljucna. Opet kazem kod mene full sistem mute/unmute zauzima oko 150 linija code, u sqlite je pre svega i ne koristi timere, ali je modul i nece raditi samo ako se ubaci jer prati postojecu skriptu.

Kada budem imao vremena ovih dana rado cu ispraviti link i postaviti full funkcionalan sistem a ne ispravku kao primer kako se jos to moze odraditi, efikasnije i brze.

Takodje koristim napisanu custom funkciju a ne playerupdate, ovde sam ga stavio jer mi se nije dalo prepravljati celu funkciju ili pisati drugu iznova putem telefona.

Ps. Nema ljutnje, sve pet, nisam rekao nista lose, samo prosirio pricu kako se moze jos to napraviti i po meni optimizovaniji nacin (niko ne moze reci da je timer optimizovaniji od usporedbe i brzi od iste), osim ako timer ne ide kroz mnogo mnogo toga u buducnosti i tako ima smisla vise u samoj upotrebi, sto nije naglaseno. Ovakve debate nisu o tome ko je vise ili manje u pravu, nego o sirenju svesti i mogucnosti sta sve moze, ispravkama i edukaciji cak izmedju nas samih. Svakako su to sve neke nijanse, ja u ovo pristupam logikom weba jer sam iz web sveta, dok ti pristupas ipak iz legacy (c) sveta.

Ne znam vise stvarno, posaljes netestiran kod, sad jos kazes nisi koristio OnPlayerUpdate, a i njega si poslao u kodu. Kazes onda taj nacin je najbolji, najbrzi. Boze pomozi, ahahaha. Neke stvari ne mogu, Boga mi da ti objasnjavam sad za te biblioteke i timere.

Ako je tako, ona sto sam rekao prethodno za kod pada u vodu ili sta?

Ja sam rekao da nije optimizovaniji tvoj nacin timestampa, za koji sad navodis da nije dobar. Isto ti je na sudu kad imas dve razlcite price, tamo krivicno odgovaras, a ovde j..s mene. 8)

Hajde, rado bih voleo videti tvoj nacin, taman posla. Volim istrazivati.

Jasta, nema ljutnje. Samo razmenjujemo misljenje, a moram biti iskren da tvoj nacin izrazavanja je malo cudan.  :D

Kako zauzima 150k linija mute/unmute sistem? ::) Sistem kao sistem sadrzi dve komande, ostalo su provere varijabli.

Evo za one koji zele preko timestampa:

Pod komandom "/mute" zamenite postojecu vrednost varijable Mute s novom:
Player[target_id][Mute] = gettime() + (mute_time * 60);

Deklarisite funkciju za proveru da li je igrac mutovan:
stock is_muted(playerid)
{
    if (Player[playerid][Mute] == 0) return 0; // Nije mutovan

    if (gettime() >= Player[playerid][Mute])
    {
	new query[128];
	//Isteklo, resetung
	Player[playerid][IsMuted] = 0;
	Player[playerid][Mute] = 0;
	mysql_format(g_SQL, query, sizeof query,
	    "UPDATE `players` SET `is_muted` = 0, mute = 0 WHERE `id` = %d LIMIT 1", Player[playerid][ID]);
	mysql_tquery(g_SQL, query);
	return 0; // nije mutovan
    }
    return 1; // mutovan
}

Pod callbackom OnPlayerText stavite ovo gore:
if (is_muted(playerid))
{
    SendClientMessage(playerid, -1, "Ne mozete koristiti ovu komandu jer ste utisani.");
    return 0; // Blokada, rokada
}
Gde god imate potrebu da proverite da li je mute, koristite taj kod!!!

Ovo ce raditi isto savrseno. Eto da ispunim zelju @markosimic da se ne koriste timeri uzimavsi u obzir da sam stavio "Prost" u naslovu. (Opet to je individualno sta je nekome prosto)  ;D
Poslednja Izmena: juče u 15:20:40 POSLE PODNE od Dragi

Citat: Dragi poslato juče u 14:35:34 POSLE PODNENe znam vise stvarno, posaljes netestiran kod, sad jos kazes nisi koristio OnPlayerUpdate, a i njega si poslao u kodu. Kazes onda taj nacin je najbolji, najbrzi. Boze pomozi, ahahaha. Neke stvari ne mogu, Boga mi da ti objasnjavam sad za te biblioteke i timere.

Ako je tako, ona sto sam rekao prethodno za kod pada u vodu ili sta?

Ja sam rekao da nije optimizovaniji tvoj nacin timestampa, za koji sad navodis da nije dobar. Isto ti je na sudu kad imas dve razlcite price, tamo krivicno odgovaras, a ovde j..s mene. 8)

Hajde, rado bih voleo videti tvoj nacin, taman posla. Volim istrazivati.

Jasta, nema ljutnje. Samo razmenjujemo misljenje, a moram biti iskren da tvoj nacin izrazavanja je malo cudan.  :D

Kako zauzima 150k linija mute/unmute sistem? ::) Sistem kao sistem sadrzi dve komande, ostalo su provere varijabli.


Izgleda da opet ne citas.

150 linija koda, ne 150k linija koda.

Naveo sam da sam poslao netestiranu verziju gde sam u bazi uzeo tvoj sistem, izmenio, postavio pod onplayerupdate primer da ne bih davao svoju funkciju koja se poziva u onplayertext zapravo kao update koji radi ispis.

Code kao code sistem (princip koji sam poslao nije jer sadrzi playerupdate) je optimizovaniji jer usporedjujes timestamp i odobravas ili ne odobravas slanje poruke, sto je optimizovanije.

Nisam neki master za objasnjavanje generalno, tako da mi treba dosta vise vremena da objasnim ono sto zapravo gledam i vidim, sto ljudi jako tesko razumeju jer po defaultu uvek mislim da svi mogu videti sta je meni u glavi i mislima sto bas nije realno  :'(

Citat: Dragi poslato juče u 15:19:10 POSLE PODNEEvo za one koji zele preko timestampa:

Pod komandom "/mute" zamenite postojecu vrednost varijable Mute s novom:
Player[target_id][Mute] = gettime() + (mute_time * 60);

Deklarisite funkciju za proveru da li je igrac mutovan:
stock is_muted(playerid)
{
    if (Player[playerid][Mute] == 0) return 0; // Nije mutovan

    if (gettime() >= Player[playerid][Mute])
    {
	new query[128];
	//Isteklo, resetung
	Player[playerid][IsMuted] = 0;
	Player[playerid][Mute] = 0;
	mysql_format(g_SQL, query, sizeof query,
	    "UPDATE `players` SET `is_muted` = 0, mute = 0 WHERE `id` = %d LIMIT 1", Player[playerid][ID]);
	mysql_tquery(g_SQL, query);
	return 0; // nije mutovan
    }
    return 1; // mutovan
}

Pod callbackom OnPlayerText stavite ovo gore:
if (is_muted(playerid))
{
    SendClientMessage(playerid, -1, "Ne mozete koristiti ovu komandu jer ste utisani.");
    return 0; // Blokada, rokada
}
Gde god imate potrebu da proverite da li je mute, koristite taj kod!!!

Ovo ce raditi isto savrseno. Eto da ispunim zelju @markosimic da se ne koriste timeri uzimavsi u obzir da sam stavio "Prost" u naslovu. (Opet to je individualno sta je nekome prosto)  ;D

Upravo tako, jako slican sistem imam samo trunku detaljniji i naming naravno drugaciji, malo drugacije cuvanje, uglavnom to je tehnicki to.

Jos da uradis u Yini i vrh :D
Poslednja Izmena: juče u 15:21:47 POSLE PODNE od markosimic
HTML / CSS / Javascript / Inspect : Entry Masterclass.
ReactJS / Tailwind CSS / PWA / Axios / SCSS / Redux, ViteJS : Entry Masterclass.
C / C++ / C# / C-objective - kroz Pawn Lang : Entry Masterclass
Grupisano Pravljenje Objekata : Filterscript.


Sta je to web development?
To je nesto ono kao, kako bih to rekao, izgubis volju za zivotom i zelis da se ubijes, ali to je okej.
Onda jednostavno shvatis da si bio glup i resis problem, das sam sebi lajk,
skuvas NES 3u1 i pripremis se za sledeci projekat.



@markosimic Ma sve moze. Oba sistema su podjenako dobra i obavljaju funkciju za koju su namenjeni. Ti samo iskosrcavas vec postojeci timer i tu nema pada performansi...

Jedina prednost timestampa je ta sto nisi uslovljen da svakih minut ili sekund proveravas i dekrementujes varijablu za 1. Moj tempban sistem sam isto radio preko timestampa. Ne kazem ja nista lose za timestamp, nego za tvoj kod koji koristi OnPlayerUpdate, valjda smo se razumeli na kraju. Srdacan pozdrav!  8)