Offline ažuriranje [MYSQL]

Započeo Slade
12. Avg. 2018. Zaključano
2,237
pregleda
10
postova
Danisoni
5
Godfather
12. Avg. 2018.

Offline skidanje admin nivoa uz provjeru trenutnog

Naime ovo je način koji i sam koristim u svojoj skripti, i obzirom kada sam prelazio na mysql, previše sam se mučio oko osnova, pa i oko ovoga, ako ima netko ko počinje raditi u MySQL čuvanju, ovo će mu možda pomoći.

Selektovanje igrača.
Naime moramo prvo uzeti tog igrača, tj. selectovati ga.
mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT * FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", nick);
new Cache:rezultat = mysql_query(Database, DB_Query); //Spremanje cache-a

LIMIT 1 - označava da želimo samo 1 select iz table-a, Username je uglavnom unique dio kad je igrač u pitanju, ali ova opcija vam mnogo pomaže kada želite selektovati samo jednog igrača koji je povezan sa nečime čiju jednakost mogu imati mnogi (recimo više igrača može imati okruglo 1.000.000$ na banci)

Broj redova
Ovdje jednostavno uzimamo broj redova, u novu varijablu rows.
new rows;
cache_get_row_count(rows); //Provjera redova


Provjera broja redova
Jednostavno, provjerit ćemo dal se red selektovao, ako je rows veći od 0, jednostavno netko je selektovan, u ovom slučaju samo jedan račun može biti, ali može se također selektovati i više njih.
if (rows)


Uzimanje vrijednosti
Red je da uzmemo igraču trenutni admin i helper level.
if (rows) {  //Provjera ukoliko račun postoji
      new alevel, hlevel;
      cache_get_value_int(0, "ADMIN", alevel); //Uzimanje admin nivoa igraču
      cache_get_value_int(0, "HELPER", hlevel); //Uzimanje helper nivoa igraču
}


"ADMIN" i "HELPER" su imena koja su u mojoj bazi, ako ste vi svoje nazvali pGameMaster, pHelper, pSupporter, ili sasvim nebitno, unesite tu vrijednost. Napomena: "ADMIN" ne označava vrijednost iz PlayerInfo enuma, nego iz kolone iz MySQL baze.

Sada, možete tu komandu jednostavno iskoristiti kako hoćete, uz ovako nekakve primjere:
if (rows) { //Provjera ukoliko račun postoji
      new alevel, hlevel;
      cache_get_value_int(0, "ADMIN", alevel); //Uzimanje admin nivoa igraču
      cache_get_value_int(0, "HELPER", hlevel); //Uzimanje helper nivoa igraču
      if(alevel > pInfo[ playerid ]) return SendErrorMessage(playerid, "Ne mozes skinuti veci admin nivo."); //Provjera ako je igračev nivo manji od offline igračevog.
      if(alevel == 0 && hlevel == 0) return SendErrorMessage(playerid, "Igrac nema poziciju."); //Igrač nije ni helper ni admin
      mysql_format(Database, DB_Query, sizeof(DB_Query), "UPDATE `PLAYERS` set `ADMIN` = 0, `HELPER` = 0 WHERE `USERNAME` = '%s'", nick);
      mysql_pquery(Database, DB_Query); //Update igrača
      if(alevel > 0) AdminMessage(playerid, "Igracu %s ste offline oduzeli Admin nivo %d.", nick, alevel);
      else if(hlevel > 0) AdminMessage(playerid, "Igracu %s ste offline oduzeli Helper nivo %d.", nick, hlevel);
}


Obavezno! Na kraju svega moramo obrisati spremljeni cache, dakle na dnu komande, jednostavno brišemo gore spremljeni cache.
cache_delete(rezultat);


Kako to izgleda sve zajedno:
mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT * FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", nick);
new Cache:rezultat = mysql_query(Database, DB_Query); //Spremanje cache-a
new rows;
cache_get_row_count(rows); //Provjera redova
if (rows) { //Provjera ukoliko račun postoji
      new alevel, hlevel;
      cache_get_value_int(0, "ADMIN", alevel); //Uzimanje admin nivoa igraču
      cache_get_value_int(0, "HELPER", hlevel); //Uzimanje helper nivoa igraču
      if(alevel > pInfo[ playerid ]) return SendErrorMessage(playerid, "Ne mozes skinuti veci admin nivo."); //Provjera ako je igračev nivo manji od offline igračevog.
      if(alevel == 0 && hlevel == 0) return SendErrorMessage(playerid, "Igrac nema poziciju."); //Igrač nije ni helper ni admin
      mysql_format(Database, DB_Query, sizeof(DB_Query), "UPDATE `PLAYERS` set `ADMIN` = 0, `HELPER` = 0 WHERE `USERNAME` = '%s'", nick);
      mysql_pquery(Database, DB_Query); //Update igrača
      if(alevel > 0) AdminMessage(playerid, "Igracu %s ste offline oduzeli Admin nivo %d.", nick, alevel);
      else if(hlevel > 0) AdminMessage(playerid, "Igracu %s ste offline oduzeli Helper nivo %d.", nick, hlevel);
}
cache_delete(rezultat);


Napomena: Moj kod vam copy-paste neće raditi, jer koristi neke moje defineove iz moda poput AdminMessage, SendErrorMessage, DB_Query i slično, ali suština komande hoće, nemojte zaboraviti prilagoditi "ADMIN" i "HELPER" sa vašim kolonama, iz vaše MySQL baze.
Ako pronađete ikakve greške, pošto sam pisao odvojeno od mog moda radi lakšeg prilagođavanja drugima, samo mi javite da ispravim.
Komanda bi trebala raditi ispravno sa ovim kodom, jer kod mene radi odličan posao.
viceroy
4
Made Man
12. Avg. 2018.
Svaka ti dala  😁
Adam_Lay
6
Underboss
12. Avg. 2018.
Ok je ali nemoj nikada koristiti SELECT * ukoliko ti to stvarno nije potrebno.(A to ti je najćešče potrebno samo na loginu kada trebaš učitati sve podatke).Jer SELECT * selektira sve "kolone" a ti ovdje koristiš samo 3(admin,helper i username)

Umjesto ovoga:
mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT * FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", nick);
new Cache:rezultat = mysql_query(Database, DB_Query); //Spremanje cache-a


Bi trebalo biti ovo:
mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT USERNAME,HELPER,ADMIN FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", nick);
new Cache:rezultat = mysql_query(Database, DB_Query); //Spremanje cache-a
ogi corleone
4
Made Man
12. Avg. 2018.
Super, konacno je neko krenuo i MySQL tutorijale, da imam više vremena objavio bih i ja neki..
Nikola-.-
6
Kingpin
13. Avg. 2018.
Odlicno 😉
Svidja mi se sto neko pise mysql tutorijale 😄
Danisoni
5
Godfather
13. Avg. 2018.
Paul Castellano wrote on August 12, 2018, 9:37 pm:
Ok je ali nemoj nikada koristiti SELECT * ukoliko ti to stvarno nije potrebno.(A to ti je najćešče potrebno samo na loginu kada trebaš učitati sve podatke).Jer SELECT * selektira sve "kolone" a ti ovdje koristiš samo 3(admin,helper i username)

Umjesto ovoga:
mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT * FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", nick);
new Cache:rezultat = mysql_query(Database, DB_Query); //Spremanje cache-a


Bi trebalo biti ovo:
mysql_format(Database, DB_Query, sizeof(DB_Query), "SELECT USERNAME,HELPER,ADMIN FROM `PLAYERS` WHERE `USERNAME` = '%e' LIMIT 1", nick);
new Cache:rezultat = mysql_query(Database, DB_Query); //Spremanje cache-a


Da, upravu si, bolje je selektovati ono što ćemo koristiti, iskoristio sam * (SVE), jer iskreno nisam znao što će ko selektovati, a nije mi palo na pamet da bih to mogao objasniti, hvala na ispravci.

Hvala svima 🙂
Ivan_Ino
5
Kingpin
13. Avg. 2018.
Nikada ne selektiraj sve sa * jer cak i ako imas kolone

id, name, email
SELECT *
&
SELECT id, name, email

Imaju razliku u brzini, cesto se primjeti na velikim tablicama ili na velikim joinima (znam iz iskustva)

Tako da dobra je praksa uvijek selektirati odredjene kolone

Ako vas zanima zasto je tu razlika, let me know, pa cu vam objasniti
TerzaScripting
5
Underboss
13. Avg. 2018.

new rows;
cache_get_row_count(rows); //Provjera redova
if (rows) { //Provjera ukoliko račun postoji


mozes uraditi sa simple stockom koji imas uradjen vec u mysql datoteci
cache_num_rows
if(cache_num_rows() "znak(> < =  ...)" 0)
Rax_King
5
Godfather
13. Avg. 2018.
Terzic wrote on August 13, 2018, 11:46 am:

new rows;
cache_get_row_count(rows); //Provjera redova
if (rows) { //Provjera ukoliko račun postoji


mozes uraditi sa simple stockom koji imas uradjen vec u mysql datoteci
cache_num_rows
if(cache_num_rows() "znak(> < =  ...)" 0)


Isti djavo kada pogledas u kod
stock cache_num_rows()
{
new row_count;
cache_get_row_count(row_count);
return row_count;
}
TerzaScripting
5
Underboss
13. Avg. 2018.
.ксундер wrote on August 13, 2018, 11:56 am:
Isti djavo kada pogledas u kod
stock cache_num_rows()
{
new row_count;
cache_get_row_count(row_count);
return row_count;
}

O tome upravo i pricam, nema potrebe da pise opet isto dok ono stoji bzvz tamo

Morate biti prijavljeni da biste odgovorili na ovu temu.

Prijava

© 2026 SmartShark. All rights reserved.

Powered by Momentum|v2026.3.001 Alpha