Szerző Téma: MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)  (Megtekintve 47177 alkalommal)

Nem elérhető doboka98

  • 1002
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #210 Dátum: 2013. Január 03. - 17:58:39 »
0 Show voters
\" post=\"380972\" timestamp=\"1357229112\"]
mert már megszünt a honlapja!! majd felteszem!! :)

Dupla hozzászólás automatikusan összefûzve. ( 2013. Január 03. - 17:12:26 )

Itt van :D
 
// MySQL Regisztráció rendszer by kurta999
// Verzió: 2.0
// Last Update: 2012.06.04
#include <a_samp>
#tryinclude a_mysql_r7
#if !defined _a_mysql_r7_included
    #include <a_mysql>
#endif
#if defined mysql_fetch_int
#error \"Frissítsd a MySQL (a_mysql.inc) függvénykönyvtárad az R7-re!\"
#endif
#include <zcmd> // http://forum.sa-mp.com/showthread.php?t=91354
#define             NINCS_REG_CSILLAG // Rakd a kommenttárba, ha a jelszót a játékosnak a regisztráció dialógusban csillagozni akarod.
// Szerintem ezt ajánlott így hagyni, mivel a regisztrációban könnyen félrhetírhatsz és nemjössz rá a hibára, mivel nem látod, hogy mit írtál..
// A hibára pedig csak akkor jössz rá, miután beregisztráltál.
#define ChangeNameDialog(%1) \\
    ShowPlayerDialog(%1, DIALOG_CHANGENAME, DIALOG_STYLE_INPUT, !\"{\" #XCOLOR_RED \"}Névváltás\", !\"{\" #XCOLOR_GREEN \"}Lentre írd be az új neved! \\nHa régóta játszol már, akkor a névváltás több másodpercig is eltarthat!\\n\\n{\" #XCOLOR_RED \"}Ahogy megváltoztattad, rögtön változtasd meg a neved a SAMP-ba!\", !\"Változtatás\", !\"Mégse\")
// gpci beágyazása
native gpci(playerid, const serial[], maxlen);
new
year,
month,
day,
hour,
minute,
second;
new // Direkt adok hozzá + 1 karaktert, mivel valahol a \\0 kraktert is tárolni kell. (Ez 4 karakter, de kell az 5. is, mivel ott tárolja a \\0-t! [\'a\', \'n\', \'y\', \'á\', \'d\', \'\\0\'])
g_szQuery[512 +1],
g_szDialogFormat[4096],
i_str[128 +1],
g_szIP[16 +1];
// Bit flagok
enum e_PLAYER_FLAGS (<<= 1)
{
e_LOGGED_IN = 1,
e_FIRST_SPAWN
}
new
e_PLAYER_FLAGS:g_PlayerFlags[MAX_PLAYERS char];
new
g_pQueryQueue[MAX_PLAYERS];
 
// MySQL beállítások, alapból ezek azok a wamp-nál, csak a tábla nevét módosítsd arra, amilyen néven létrehoztad, nekem itt a \'samp\'
#define MYSQL_HOST             \"localhost\"
#define MYSQL_USER             \"root\"
#define MYSQL_PASS             \"\"
#define MYSQL_DB               \"samp\"
// Üzenet, amit akkor ír ki, ha a lekérdezés befejezése elõtt lelép a játékos
#define QUERY_COLLISION(%0) \\
printf(\"Query collision \\\" #%0 \\\"! PlayerID: %d, queue: %d, g_pQueryQueue: %d\", playerid, queue, g_pQueryQueue[playerid])
// RRGGBBAA
#define COLOR_GREEN          0x33FF33AA
#define COLOR_RED            0xFF0000AA
#define COLOR_YELLOW         0xFF9900AA
#define COLOR_PINK             0xFF66FFAA
// RRGGBB
#define XCOLOR_GREEN          33FF33
#define XCOLOR_RED             FF0000
#define XCOLOR_BLUE            33CCFF
#define XCOLOR_YELLOW         FF9900
#define XCOLOR_WHITE         FFFFFF
// Dialóg ID
enum
{
DIALOG_LOGIN = 20000,
DIALOG_REGISTER,
DIALOG_CHANGENAME,
DIALOG_CHANGEPASS,
DIALOG_FINDPLAYER
}
// isnull by Y_Less
#define isnull(%1) \\
((!(%1[0])) || (((%1[0]) == \'\\1\') && (!(%1[1]))))
public OnFilterScriptInit()
{
// MySQL
print(!\"MySQL: Kapcsolódás erre a címre \" MYSQL_HOST \" \" MYSQL_USER \" nevû felhasználóval. \\nAdatbázis neve: \" MYSQL_DB \".\");
mysql_debug(1); // Hosztos szerveren ajánlott kikapcsolni. (Ha bekapcsovla hagyod sem nagyon lesz semmi, mivel R7-ben nem ír annyi információt ki, mind a régebbiekben)
mysql_connect(!MYSQL_HOST, !MYSQL_USER, !MYSQL_DB, !MYSQL_PASS);
if(mysql_ping() != 1)
{
print(!\"MySQL: Kapcsolódás sikertelen! (\" MYSQL_HOST \")\");
print(!\"MySQL: A mód kikapcsol! (\" MYSQL_HOST \")\");
SendRconCommand(!\"exit\");
return 1;
}
print(!\"MySQL: Kapcsolódás elfogadva!\" MYSQL_HOST \"\");
print(!\"MySQL: Adatbázis \" MYSQL_DB \" kiválasztva!\");
     return 1;
}
public OnFilterScriptExit()
{
mysql_close(); // Kapcsolat bezárása
return 1;
}
public OnPlayerConnect(playerid)
{
SetPlayerColor(playerid, (random(0xFFFFFF) << 8) | 0xFF); // GetPlayerColor() javítása
g_pQueryQueue[playerid]++;
format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid));
mysql_function_query(1, g_szQuery, true, \"THREAD_OnPlayerConnect\", \"dd\", playerid, g_pQueryQueue[playerid]);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
g_pQueryQueue[playerid]++;
return SavePlayer(playerid, GetPVarInt(playerid, \"RegID\"));
}
forward THREAD_OnPlayerConnect(playerid, queue);
public THREAD_OnPlayerConnect(playerid, queue)
{
// Ha a játékos csatlakozik vagy lelép, akkor a \"g_pQueryQueue[playerid]\" értéke mindig növekedik.
// Lekérdezésnél átvisszük ennek az értékét a \"queue\" nevû paraméterben, amit majd a lekérdezés lefutásánál ellenõrzünk.
// Ha a játékos lelépett, akkor \"g_pQueryQueue[playerid]\" egyel több lett, tehát nem egyenlõ a \"queue\" paraméter értékével.
// Ez esetben a lekérdezés nem fog lefutni, hanem egy figyelmezetõ üzenetet fog kiírni a konzolva, hogy \"query collision\".
// Nagyon fontos ez, mivel ha van egy lekérdezés, ami lekérdez valami \"titkos\" adatot az adatbázisból,
// közben belaggol a a mysql szerver, a lekérdezés eltart 5 másodpercig, feljön egy másik játékos és annak fogja kiírni az adatokat,
// mivel a lekérdezés lefutása közben lelépett a játékos és egy másik jött a helyére. Erre van ez a védelem, így ettõl egyáltalán nem kell tartani.
// Sima lekérdezéseknél (ház betöltés, egyéb betöltés, frissítés, stb.. sz*rságok) ilyen helyen nem szükséges ez a védelem.
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_OnPlayerConnect);
new
szFetch[12];
cache_get_row(0, 0, szFetch);
SetPVarInt(playerid, \"LineID\", strval(szFetch));
// Ez itt egy \"átmeneti változó\", ami tárolja, hogy mi a reg id-je a játékosnak.
// Ha nulla, akkor nincs regisztrálva (mivel az SQL 0-t ad vissza, ha nemlétezõ a sor), ellentétben pedig igen.
g_PlayerFlags{playerid} = e_PLAYER_FLAGS:0; // Nullázuk az értékét, nem elég a nulla, kell elé a változó tagja is, különben figyelmeztet a fordító.
// Automatikus bejelentkezés
if(!IsPlayerNPC(playerid)) // Csak játékosokra vonatkozik
{
SetPVarInt(playerid, \"RegID\", -1);
GetPlayerIp(playerid, g_szIP, sizeof(g_szIP));
gpci(playerid, i_str, sizeof(i_str));
getdate(year, month, day);
gettime(hour, minute, second);
format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `connections`(id, name, ip, serial, time) VALUES(0, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pName(playerid), g_szIP, i_str, year, month, day, hour, minute, second);
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
// Autologin
// Leftuttatunk egy lekérdezést, ami ha befejezõdött, akkor meghívódik a \"THREAD_Autologin\" callback.
// A régebbi pluginnal ez egy funkcióban ment, szóval ha a mysql szerver belaggolt és a lekérdezés eltartott 5 másodpercig,
// akkor 5 másodpercig megfagyott a szerver.
// Itt nem fog megfagyni semeddig a szerver, mivel létrehoz neki egy új szálat, és az a szál fagy meg míg nem fut le a lekérdezés.
// Lefutás után pedig meghívja a \"THREAD_Autologin\" callbackot. Ez már logikus, hogy az alap szálon (main thread)-on fut.
//
// Fenti lekérdezéssel is szintén ez a helyzet, viszont ott nem vagyunk kiváncsi a kapott értékekre.
// Az a lefutása során az \"OnQueryFinish\" callbackot hívja meg, viszont itt nem történik semmi.
// Ugyanaz a helyzet az összes lekérdezéssel, ha kiváncsi lennék az értékére, akkor ugyanúgy a callback alá raknám a dolgokat, mint itt.
format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `ip` = \'%s\'\", pName(playerid), g_szIP);
mysql_function_query(1, g_szQuery, true, \"THREAD_Autologin\", \"dd\", playerid, g_pQueryQueue[playerid]);
}
     return 1;
}
forward THREAD_Autologin(playerid, queue);
public THREAD_Autologin(playerid, queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Autologin);
new
    rows,
    fields;
cache_get_data(rows, fields);
if(rows) // Ha a sor nem üres
{
LoginPlayer(playerid);
SendClientMessage(playerid, COLOR_GREEN, \"Automatikusan bejelentkeztél!\");
}
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
if(IsPlayerNPC(playerid)) return 1;
if(!(g_PlayerFlags{playerid} & e_LOGGED_IN)) // Felmutatjuk neki a megfelelõ dialógot
{
if(GetPVarInt(playerid, \"LineID\"))
{
   LoginDialog(playerid);
}
else
{
   RegisterDialog(playerid);
}
}
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
if(IsPlayerNPC(playerid)) return 1;
if(!(g_PlayerFlags{playerid} & e_LOGGED_IN)) // Felmutatjuk neki a megfelelõ dialógot
{
if(GetPVarInt(playerid, \"LineID\"))
{
   LoginDialog(playerid);
}
else
{
   RegisterDialog(playerid);
}
}
return 1;
}
public OnPlayerSpawn(playerid)
{
// Ha elõször spawnol, akkor odaadjuk neki a pénzt. Mivel skinválasztásnál nem lehet pénzt adni a játékosnak!
if(!(g_PlayerFlags{playerid} & e_FIRST_SPAWN))
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, GetPVarInt(playerid, \"Cash\"));
DeletePVar(playerid, \"Cash\");
g_PlayerFlags{playerid} |= e_FIRST_SPAWN;
}
// Ütésstílus beállítása
SetPlayerFightingStyle(playerid, GetPVarInt(playerid, \"Style\"));
return 1;
}
 
// Y_Less
NameCheck(const aname[])
{
    new
        i,
        ch;
    while ((ch = aname[i++]) && ((ch == \']\') || (ch == \'[\') || (ch == \'(\') || (ch == \')\') || (ch == \'_\') || (ch == \'$\') || (ch == \'@\') || (ch == \'.\') || (ch == \'=\') || (\'0\' <= ch <= \'9\') || ((ch |= 0x20) && (\'a\' <= ch <= \'z\')))) {}
    return !ch;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_LOGIN:
{
   if(!response)
       return LoginDialog(playerid);
   if(g_PlayerFlags{playerid} & e_LOGGED_IN)
   {
      SendClientMessage(playerid, COLOR_RED, \"Már be vagy jelentkezve.\");
      return 1;
   }
   if(isnull(inputtext))
   {
      SendClientMessage(playerid, COLOR_RED, \"Nem írtál be semilyen jelszót!\");
      LoginDialog(playerid);
      return 1;
   }
   if(!(3 <= strlen(inputtext) <= 20))
   {
      SendClientMessage(playerid, COLOR_RED, \"Rossz jelszó hosszúság! 3 - 20\");
      LoginDialog(playerid);
      return 1;
   }
   new
      szEscape[32];
   mysql_real_escape_string(inputtext, szEscape); // Kiszûri az adatot, SQL injection elkerülése végett. Bõvebben itt olvashatsz róla: http://sampforum.hu/index.php?topic=9285.0
   format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `pass` COLLATE `utf8_bin` LIKE \'%s\'\", pName(playerid), szEscape);
   mysql_function_query(1, g_szQuery, true, \"THREAD_DialogLogin\", \"dd\", playerid, g_pQueryQueue[playerid]);
}
case DIALOG_REGISTER:
{
   if(!response)
      return RegisterDialog(playerid);
   if(isnull(inputtext))
   {
      SendClientMessage(playerid, COLOR_RED, \"Nem írtál be semilyen jelszót!\");
      RegisterDialog(playerid);
      return 1;
   }
   if(!(3 <= strlen(inputtext) <= 20))
   {
      SendClientMessage(playerid, COLOR_RED, \"Rossz jelszó hosszúság! 3 - 20\");
      RegisterDialog(playerid);
      return 1;
   }
   format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid));
   mysql_function_query(1, g_szQuery, true, \"THREAD_Register_1\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]);
}
case DIALOG_CHANGENAME:
{
   if(!response)
      return 0;
   if(!(3 <= strlen(inputtext) <= 20))
   {
      SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ hosszú a neved! 3 és 20 karakter között legyen!\");
      ChangeNameDialog(playerid);
      return 1;
   }
   if(!NameCheck(inputtext))
   {
      SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ név! Csak ezek a karakterek lehetnek benne: {\" #XCOLOR_GREEN \"}A-Z, 0-9, [], (), $, @. {\" #XCOLOR_RED \"}Ezenkívül helyet nem tartamlazhat!\");
      ChangeNameDialog(playerid);
      return 1;
   }
   if(!strcmp(inputtext, pName(playerid), true))
   {
      SendClientMessage(playerid, COLOR_RED, \"Jelenleg is ez a neved! Írj be egy másikat!\");
      ChangeNameDialog(playerid);
      return 1;
   }
   format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", inputtext);
   mysql_function_query(1, g_szQuery, true, \"THREAD_Changename\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]);
}
case DIALOG_CHANGEPASS:
{
   if(!response)
      return 0;
   if(!(3 <= strlen(inputtext) <= 20))
   {
      SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ hosszú a jelszavad! 3 és 20 karakter között legyen!\");
      ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_INPUT, \"Jelszóváltás\", \"Lentre írd be az új jelszavad! \\n\\n\", \"Változtatás\", \"Mégse\");
      return 1;
   }
   format(g_szQuery, sizeof(g_szQuery), \"SELECT `pass` FROM `players` WHERE `reg_id` = %d\", GetPVarInt(playerid, \"RegID\"));
   mysql_function_query(1, g_szQuery, true, \"THREAD_Changepass\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]);
}
case DIALOG_FINDPLAYER:
{
   if(!response)
      return 0;
   format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\'\", inputtext);
   mysql_function_query(1, g_szQuery, true, \"THREAD_Findplayer\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]);
}
}
return 1;
}
forward THREAD_DialogLogin(playerid, queue);
public THREAD_DialogLogin(playerid, queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_DialogLogin);
new
    rows,
    fields;
cache_get_data(rows, fields);
if(rows != 1)
{
SendClientMessage(playerid, COLOR_RED, \"HIBA: Rossz jelszó.\");
LoginDialog(playerid);
return 1;
}
LoginPlayer(playerid);
GetPlayerIp(playerid, g_szIP, sizeof(g_szIP));
format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `ip` = \'%s\' WHERE `reg_id` = %d\", g_szIP, GetPVarInt(playerid, \"RegID\"));
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
SendClientMessage(playerid, COLOR_GREEN, !\"Sikersen bejelentkeztél!\");
return 1;
}
forward THREAD_Register_1(playerid, password[], queue);
public THREAD_Register_1(playerid, password[], queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Register_1);
new
    rows,
    fields;
cache_get_data(rows, fields);
if(rows)
{
SendClientMessage(playerid, COLOR_RED, \"MySQL sorok száma nem 0, valami hiba történt a kiválasztás közben!\");
SendClientMessage(playerid, COLOR_RED, \"Ezt a hibát jelezd a tulajdonosnak! Kickelve lettél, mert ebbõl hiba keletkezhet!\");
printf(\"MySQL rosw > 1 (%d, %s)\", playerid, password);
Kick(playerid);
return 1;
}
new
szEscape[21];
getdate(year, month, day);
gettime(hour, minute, second);
GetPlayerIp(playerid, g_szIP, sizeof(g_szIP));
mysql_real_escape_string(password, szEscape);
format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `players`(reg_id, name, ip, pass, reg_date, laston) VALUES(0, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pName(playerid), g_szIP, szEscape, year, month, day, hour, minute, second, year, month, day, hour, minute, second);
mysql_function_query(1, g_szQuery, false, \"THREAD_Register_2\", \"dsd\", playerid, password, g_pQueryQueue[playerid]);
return 1;
}
forward THREAD_Register_2(playerid, password[], queue);
public THREAD_Register_2(playerid, password[], queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Register_2);
new
iRegID = mysql_insert_id();
SetPVarInt(playerid, \"RegID\", iRegID); // Játékos Regisztrációs ID-jét beállítuk arra, amelyik sorba írtunk elõbb ( INSERT INTO )
SetPVarInt(playerid, \"Style\", 4);
g_PlayerFlags{playerid} |= e_LOGGED_IN;
format(i_str, sizeof(i_str), \"Sikeresen regisztráltál! A jelszavad: {\" #XCOLOR_RED \"}%s. {\" #XCOLOR_GREEN \"}Felhasználó ID: {\" #XCOLOR_BLUE \"}%d\", password, iRegID);
SendClientMessage(playerid, COLOR_GREEN, i_str);
SendClientMessage(playerid, COLOR_PINK, \"Ennyi lenne a MySQL regisztáció {\" #XCOLOR_BLUE \"}:)\");
return 1;
}
forward THREAD_Changename(playerid, inputtext[], queue);
public THREAD_Changename(playerid, inputtext[], queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Changename);
new
    rows,
    fields;
cache_get_data(rows, fields);
if(rows)
{
SendClientMessage(playerid, COLOR_RED, \"HIBA: Ez a név már használatban van!\");
SendClientMessage(playerid, COLOR_GREEN, \"Írj be egy más nevet, vagy menj a \'Mégse\' gombra!\");
ChangeNameDialog(playerid);
return 1;
}
new
szOldName[MAX_PLAYER_NAME + 1],
pRegID = GetPVarInt(playerid, \"RegID\");
GetPlayerName(playerid, szOldName, sizeof(szOldName));
if(SetPlayerName(playerid, inputtext) != 1)
{
SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ név! Írj be egy másikat!\");
ChangeNameDialog(playerid);
return 1;
}
getdate(year, month, day);
gettime(hour, minute, second);
format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `namechanges`(id, reg_id, oldname, newname, time) VALUES(0, %d, \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pRegID, szOldName, inputtext, year, month, day, hour, minute, second);
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `name` = \'%s\' WHERE `reg_id` = %d\", inputtext, pRegID);
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
format(i_str, sizeof(i_str), \"Sikeresen átváltottad a neved! Új neved: {\" #XCOLOR_WHITE \"}%s.\", inputtext);
SendClientMessage(playerid, COLOR_YELLOW, i_str);
return 1;
}
forward THREAD_Changepass(playerid, password[], queue);
public THREAD_Changepass(playerid, password[], queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Changepass);
new
    szOldPass[21],
    szEscaped[21],
    pRegID = GetPVarInt(playerid, \"RegID\");
cache_get_row(0, 0, szOldPass);
mysql_real_escape_string(password, szEscaped);
format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `pass` = \'%s\' WHERE `reg_id` = %d\", szEscaped, pRegID);
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
getdate(year, month, day);
gettime(hour, minute, second);
format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `namechanges_p`(id, reg_id, name, oldpass, newpass, time) VALUES(0, %d, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pRegID, pName(playerid), szOldPass, szEscaped, year, month, day, hour, minute, second);
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
format(i_str, sizeof(i_str), \"Sikeresen átállítotad a jelszavad! Új jelszavad: {\" #XCOLOR_GREEN \"}%s\", password);
SendClientMessage(playerid, COLOR_YELLOW, i_str);
return 1;
}
forward THREAD_Findplayer(playerid, inputtext[], queue);
public THREAD_Findplayer(playerid, inputtext[], queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Findplayer);
new
szFetch[12],
szRegDate[24],
szLaston[24],
iData[6];
cache_get_row(0, 0, szFetch); iData[0] = strval(szFetch); // regid
cache_get_row(0, 4, szRegDate);
cache_get_row(0, 5, szLaston);
cache_get_row(0, 6, szFetch); iData[1] = strval(szFetch); // money
cache_get_row(0, 7, szFetch); iData[2] = strval(szFetch); // score
cache_get_row(0, 8, szFetch); iData[3] = strval(szFetch); // kills
cache_get_row(0, 9, szFetch); iData[4] = strval(szFetch); // deaths
cache_get_row(0, 10, szFetch); iData[5] = strval(szFetch); // style
switch(iData[5])
{
case FIGHT_STYLE_NORMAL: szFetch = \"Normál\";
      case FIGHT_STYLE_BOXING: szFetch = \"Boxoló\";
      case FIGHT_STYLE_KUNGFU: szFetch = \"Kungfu\";
case FIGHT_STYLE_KNEEHEAD: szFetch = \"Kneehead\";
case FIGHT_STYLE_GRABKICK: szFetch = \"Grabkick\";
case FIGHT_STYLE_ELBOW: szFetch = \"Elbow\";
}
// Üzenet elküldése
format(i_str, sizeof(i_str), \"Név: %s, ID: %d, RegID: %d, Pénz: %d, Pont: %d\", inputtext, playerid, iData[0], iData[1], iData[2]);
SendClientMessage(playerid, COLOR_RED, i_str);
format(i_str, sizeof(i_str), \"Ölések: %d, Halálok: %d, Arány: %.2f, Ütés Stílus: %s\", iData[3], iData[4], (iData[3] && iData[4]) ? (floatdiv(iData[3], iData[4])) : (0.0), szFetch);
SendClientMessage(playerid, COLOR_YELLOW, i_str);
format(i_str, sizeof(i_str), \"Regisztáció ideje: {\" #XCOLOR_BLUE \"}%s{\" #XCOLOR_GREEN \"}, Utuljára a szerveren: {\" #XCOLOR_BLUE \"}%s\", szRegDate, szLaston);
SendClientMessage(playerid, COLOR_GREEN, i_str);
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(IsPlayerConnected(killerid) && killerid != INVALID_PLAYER_ID)
{
SetPVarInt(killerid, \"Kills\", GetPVarInt(killerid, \"Kills\") + 1);
}
SetPVarInt(playerid, \"Deaths\", GetPVarInt(playerid, \"Deaths\") + 1);
return 1;
}
// Statisztika felmutató
CMD:stats(playerid, params[])
{
format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_date`, `laston` FROM `players` WHERE `reg_id` = %d\", GetPVarInt(playerid, \"RegID\")); // Kiválasztjuk a reg_date és a laston mezõt
mysql_function_query(1, g_szQuery, true, \"THREAD_Stats\", \"dd\", playerid, g_pQueryQueue[playerid]);
return 1;
}
forward THREAD_Stats(playerid, queue);
public THREAD_Stats(playerid, queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Stats);
new
RegDate[24],
Laston[24],
szStyle[24],
Kills = GetPVarInt(playerid, \"Kills\"),
Deaths = GetPVarInt(playerid, \"Deaths\");
cache_get_row(0, 0, RegDate);
cache_get_row(0, 1, Laston);
switch(GetPlayerFightingStyle(playerid))
{
case FIGHT_STYLE_NORMAL: szStyle = \"Normál\";
      case FIGHT_STYLE_BOXING: szStyle = \"Boxoló\";
      case FIGHT_STYLE_KUNGFU: szStyle = \"Kungfu\";
case FIGHT_STYLE_KNEEHEAD: szStyle = \"Kneehead\";
case FIGHT_STYLE_GRABKICK: szStyle = \"Grabkick\";
case FIGHT_STYLE_ELBOW: szStyle = \"Elbow\";
}
// Üzenet elküldése
format(i_str, sizeof(i_str), \"Név: %s, ID: %d, RegID: %d, Pénz: %d, Pont: %d\", pName(playerid), playerid, GetPVarInt(playerid, \"RegID\"), GetPlayerMoney(playerid), GetPlayerScore(playerid));
SendClientMessage(playerid, COLOR_RED, i_str);
format(i_str, sizeof(i_str), \"Ölések: %d, Halálok: %d, Arány: %.2f, Ütés Stílus: %s\", Kills, Deaths, (Kills && Deaths) ? (floatdiv(Kills, Deaths)) : (0.0), szStyle);
SendClientMessage(playerid, COLOR_YELLOW, i_str);
format(i_str, sizeof(i_str), \"Regisztáció ideje: {\" #XCOLOR_BLUE \"}%s{\" #XCOLOR_GREEN \"}, Utuljára a szerveren: {\" #XCOLOR_BLUE \"}%s\", RegDate, Laston);
SendClientMessage(playerid, COLOR_GREEN, i_str);
return 1;
}
/*
CMD:kill(playerid, params[])
{
SetPlayerHealth(playerid, 0.0);
return 1;
}
CMD:flag(playerid, params[])
{
format(i_str, 128, \"Logged: %d, FirstSpawn: %d\", g_PlayerFlags{playerid} & e_LOGGED_IN, g_PlayerFlags{playerid} & e_FIRST_SPAWN);
SendClientMessage(playerid, -1, i_str);
return 1;
}
*/
CMD:changename(playerid, params[])
{
ChangeNameDialog(playerid);
return 1;
}
CMD:changepass(playerid, params[])
{
ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_PASSWORD, \"Jelszóváltás\", \"Lentre írd be az új jelszavad! \\n\\n\", \"Változtatás\", \"Mégse\");
return 1;
}
CMD:findplayer(playerid, params[])
{
if(isnull(params)) return SendClientMessage(playerid, COLOR_RED, \"HASZNÁLAT: /findplayer <Játékos Névrészlet>\");
if(strlen(params) > MAX_PLAYER_NAME) return SendClientMessage(playerid, COLOR_RED, \"HIBA: Túl hosszú a részlet, maximum 24 karakter lehet!\");
format(g_szQuery, sizeof(g_szQuery), \"SELECT `name` FROM `players` WHERE `name` LIKE \'%s%s%s\'\", \"%%\", params, \"%%\");
mysql_function_query(1, g_szQuery, true, \"THREAD_FindplayerDialog\", \"dsd\", playerid, params, g_pQueryQueue[playerid]);
return 1;
}
forward THREAD_FindplayerDialog(playerid, reszlet[], queue);
public THREAD_FindplayerDialog(playerid, reszlet[], queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_FindplayerDialog);
new
    rows,
    fields;
cache_get_data(rows, fields);
if(!rows)
{
format(i_str, sizeof(i_str), \"Nincs találat a \'%s\' részletre!\", reszlet);
SendClientMessage(playerid, COLOR_RED, i_str);
return 1;
}
else if(rows > 180)
{
format(i_str, sizeof(i_str), \"A \'%s\' részletre több, mint 180 találad van! < %d >!\", reszlet, rows);
SendClientMessage(playerid, COLOR_RED, i_str);
return 1;
}
new
    x,
    szName[MAX_PLAYER_NAME];
g_szDialogFormat[0] = EOS;
for( ; x < rows; x++)
{
cache_get_row(x, 0, szName);
strcat(g_szDialogFormat, szName);
strcat(g_szDialogFormat, \"\\n\");
}
format(i_str, 128, \"Találatok a(z) \'%s\' részletre..\", reszlet);
ShowPlayerDialog(playerid, DIALOG_FINDPLAYER, DIALOG_STYLE_LIST, i_str, g_szDialogFormat, \"Megtekint\", \"Mégse\");
return 1;
}
/////////////////////////////////////////
stock LoginDialog(playerid)
{
format(i_str, sizeof(i_str), \"{\" #XCOLOR_WHITE \"}Bejelentkezés: {%06x}%s(%d)\", GetPlayerColor(playerid) >>> 8, pName(playerid), playerid);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nTe már regisztálva vagy. Lentre írd be a jelszavad\", !\"Bejelentkezés\", !\"Mégse\");
return 1;
}
stock RegisterDialog(playerid)
{
format(i_str, sizeof(i_str), \"{\" #XCOLOR_WHITE \"}Regisztráció: {%06x}%s(%d)\", GetPlayerColor(playerid) >>> 8, pName(playerid), playerid);
#if defined NINCS_REG_CSILLAG
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nItt még nem regisztráltál. Lentre írd be a jelszavad\", !\"Regisztáció\", !\"Mégse\");
#else
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nItt még nem regisztráltál. Lentre írd be a jelszavad\", !\"Regisztáció\", !\"Mégse\");
#endif
return 1;
}
/* Bejelentkezés */
stock LoginPlayer(playerid)
{
new
iPVarSet[6],
szFetch[12],
iRegID = GetPVarInt(playerid, \"LineID\");
// Ha a line ID 0, tehát a MySQL nem adott vissza sorokat, akkor semmiképp sem jelentkezhez be!
// Ennek nem szabadna elõfordulnia, de biztonság kedvéért teszek rá védelmet.
if(!iRegID) return printf(\"HIBA: Rossz reg ID! Játékos: %s(%d) (regid: %d)\", pName(playerid), playerid, iRegID);
SetPVarInt(playerid, \"RegID\", iRegID); // RegID-t beállítjuk
cache_get_row(0, 0, szFetch); iPVarSet[0] = strval(szFetch); // RegID
cache_get_row(0, 6, szFetch); iPVarSet[1] = strval(szFetch); // Money
cache_get_row(0, 7, szFetch); iPVarSet[2] = strval(szFetch); // Score
cache_get_row(0, 8, szFetch); iPVarSet[3] = strval(szFetch); // Kills
cache_get_row(0, 9, szFetch); iPVarSet[4] = strval(szFetch); // Deaths
cache_get_row(0, 10, szFetch); iPVarSet[5] = strval(szFetch); // Fightingstyle
SetPVarInt(playerid, \"Cash\", iPVarSet[1]); // A pénzét egy PVar-ban tároljuk, mert a skinválasztásnál nemlehet a játékos pénzét állítani.
SetPlayerScore(playerid, iPVarSet[2]);
SetPVarInt(playerid, \"Kills\", iPVarSet[3]);
SetPVarInt(playerid, \"Deaths\", iPVarSet[4]);
SetPVarInt(playerid, \"Style\", iPVarSet[5]);
g_PlayerFlags{playerid} |= e_LOGGED_IN;
return 1;
}
stock SavePlayer(playerid, regid)
{
if(IsPlayerNPC(playerid)) return 1;
// Ha nincs bejelentkezve és még nem spawnolt le, akkor nem mentjük. Ezt ajánlatos itthagyni, mivel ezmiatt nekem sok bug keletkezett!
if(g_PlayerFlags{playerid} & (e_LOGGED_IN | e_FIRST_SPAWN) == (e_LOGGED_IN | e_FIRST_SPAWN))
{
getdate(year, month, day);
gettime(hour, minute, second);
format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `laston` = \'%02d.%02d.%02d/%02d.%02d.%02d\', `money` = %d, `score` = %d, `kills` = %d, `deaths` = %d, `fightingstyle` = \'%d\' WHERE `reg_id` = %d\",
year, month, day, hour, minute, second, GetPlayerMoney(playerid), GetPlayerScore(playerid), GetPVarInt(playerid, \"Kills\"), GetPVarInt(playerid, \"Deaths\"), GetPlayerFightingStyle(playerid),
regid);
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
// %02d azt jelenti, hogyha a szám egyjegyû (1, 5, 7, stb... ), akkor tegyen elé egy 0-t. Pl: 05, 07.
// Ezt általában idõre használják, mivel így \'érthetõbb\'.
// Ez ugyanúgy mûködik %03d-vel %04d-vel, és így továb... ^
}
return 1;
}
stock pName(playerid)
{
static // \"Helyi\" globális változó
s_szName[MAX_PLAYER_NAME];
GetPlayerName(playerid, s_szName, sizeof(s_szName));
return s_szName;
}
forward OnQueryFinish();
public OnQueryFinish()
{
return 1;
}
/* SQL Tábla */
/*
CREATE TABLE IF NOT EXISTS `connections` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(21) NOT NULL,
  `ip` varchar(16) NOT NULL,
  `serial` varchar(128) NOT NULL,
  `time` varchar(24) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `namechanges` (
  `id` smallint(5) NOT NULL AUTO_INCREMENT,
  `reg_id` mediumint(8) NOT NULL,
  `oldname` varchar(21) NOT NULL,
  `newname` varchar(21) NOT NULL,
  `time` varchar(24) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `reg_id` (`reg_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `namechanges_p` (
  `id` smallint(5) NOT NULL AUTO_INCREMENT,
  `reg_id` mediumint(8) NOT NULL,
  `name` varchar(24) NOT NULL,
  `oldpass` varchar(21) NOT NULL,
  `newpass` varchar(21) NOT NULL,
  `time` varchar(24) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `reg_id` (`reg_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `players` (
  `reg_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(24) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `ip` varchar(20) NOT NULL,
  `pass` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `reg_date` varchar(24) NOT NULL,
  `laston` varchar(24) NOT NULL,
  `money` int(11) NOT NULL DEFAULT \'0\',
  `score` int(11) NOT NULL DEFAULT \'0\',
  `kills` mediumint(11) unsigned NOT NULL DEFAULT \'0\',
  `deaths` mediumint(11) unsigned NOT NULL DEFAULT \'0\',
  `fightingstyle` enum(\'4\',\'5\',\'6\',\'7\',\'15\',\'16\') NOT NULL DEFAULT \'4\',
  PRIMARY KEY (`reg_id`),
  KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
CREATE TABLE IF NOT EXISTS `queryerrors` (
  `id` mediumint(7) NOT NULL AUTO_INCREMENT,
  `errorid` int(11) NOT NULL,
  `error` text NOT NULL,
  `resultid` mediumint(7) NOT NULL,
  `extraid` mediumint(7) NOT NULL,
  `callback` varchar(512) NOT NULL,
  `sql_query` varchar(512) NOT NULL,
  `connectionHandle` mediumint(7) NOT NULL,
  `time` varchar(24) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `errorid` (`errorid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
 
*/

 
Ha valami kimaradt SRY :DD

Dupla hozzászólás automatikusan összefûzve. ( 2013. Január 03. - 17:13:20 )

Majd valamelyik admin vagy kurta másolja be a fõ postba!! :D
 
[/quote]
Milyen honlapról beszélsz, lol? Amúgy már megoldottam, más volt a gebasz.

MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #211 Dátum: 2013. Január 03. - 18:13:41 »
0 Show voters
Kurta nmss-tarhely.biz-es honlapjáról mert azon volt a letöltési link!!

MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #212 Dátum: 2013. Január 03. - 18:36:44 »
0 Show voters
Idézetet írta: dxslide date=1342909520\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"3791\" data-ipsquote-contentclass=\"forums_Topic
Miert van az hogy  belep megjelenik a regisztracios ablak beirom a jelszot de utana semmi ramegyek spawn megint megjelenik a regisztracios ablak.Vagyis nem fogadja el valamiert de nem ir ki semmit
 
Nekem is volt ilyen problémám mikor házi szerveren akartam tesztelni és hostos volt a mysql adatbázis nekem nem csatlakozott rá :S

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #213 Dátum: 2013. Január 03. - 19:19:44 »
0 Show voters
Visszamondtam a tárhelyet, befejeztem a szervert úgyhogy minden .tarhely.biz-es link rossz. Akinek vmi kell, írjon PM-et.
Ittvan a legújabb:
 

// MySQL Regisztráció rendszer by kurta999
// Verzió: 2.0
// Last Update: 2012.10.29
#include <a_samp>
#tryinclude a_mysql_r7
#if !defined _a_mysql_r7_included
    #include <a_mysql>
#endif
#if defined mysql_fetch_int
#error \"Frissítsd a MySQL (a_mysql.inc) függvénykönyvtárad az R7-re!\"
#endif
#include <zcmd> // http://forum.sa-mp.com/showthread.php?t=91354
#define             NINCS_REG_CSILLAG // Rakd a kommenttárba, ha a jelszót a játékosnak a regisztráció dialógusban csillagozni akarod.
// Szerintem ezt ajánlott így hagyni, mivel a regisztrációban könnyen félrhetírhatsz és nemjössz rá a hibára, mivel nem látod, hogy mit írtál..
// A hibára pedig csak akkor jössz rá, miután beregisztráltál.
#define ChangeNameDialog(%1) \\
    ShowPlayerDialog(%1, DIALOG_CHANGENAME, DIALOG_STYLE_INPUT, !\"{\" #XCOLOR_RED \"}Névváltás\", !\"{\" #XCOLOR_GREEN \"}Lentre írd be az új neved! \\nHa régóta játszol már, akkor a névváltás több másodpercig is eltarthat!\\n\\n{\" #XCOLOR_RED \"}Ahogy megváltoztattad, rögtön változtasd meg a neved a SAMP-ba!\", !\"Változtatás\", !\"Mégse\")
// gpci beágyazása
native gpci(playerid, const serial[], maxlen);
new
year,
month,
day,
hour,
minute,
second;
new // Direkt adok hozzá + 1 karaktert, mivel valahol a \\0 kraktert is tárolni kell. (Ez 4 karakter, de kell az 5. is, mivel ott tárolja a \\0-t! [\'a\', \'n\', \'y\', \'á\', \'d\', \'\\0\'])
g_szQuery[512 +1],
g_szDialogFormat[4096],
i_str[128 +1],
g_szIP[16 +1];
// Bit flagok
enum e_PLAYER_FLAGS (<<= 1)
{
e_LOGGED_IN = 1,
e_FIRST_SPAWN
}
new
e_PLAYER_FLAGS:g_PlayerFlags[MAX_PLAYERS char];
new
g_pQueryQueue[MAX_PLAYERS];
// MySQL beállítások, alapból ezek azok a wamp-nál, csak a tábla nevét módosítsd arra, amilyen néven létrehoztad, nekem itt a \'samp\'
#define MYSQL_HOST             \"localhost\"
#define MYSQL_USER             \"root\"
#define MYSQL_PASS             \"\"
#define MYSQL_DB               \"samp\"
// Üzenet, amit akkor ír ki, ha a lekérdezés befejezése elõtt lelép a játékos
#define QUERY_COLLISION(%0) \\
printf(\"Query collision \\\" #%0 \\\"! PlayerID: %d, queue: %d, g_pQueryQueue: %d\", playerid, queue, g_pQueryQueue[playerid])
// RRGGBBAA
#define COLOR_GREEN          0x33FF33AA
#define COLOR_RED            0xFF0000AA
#define COLOR_YELLOW         0xFF9900AA
#define COLOR_PINK             0xFF66FFAA
// RRGGBB
#define XCOLOR_GREEN          33FF33
#define XCOLOR_RED             FF0000
#define XCOLOR_BLUE            33CCFF
#define XCOLOR_YELLOW         FF9900
#define XCOLOR_WHITE         FFFFFF
// Dialóg ID
enum
{
DIALOG_LOGIN = 20000,
DIALOG_REGISTER,
DIALOG_CHANGENAME,
DIALOG_CHANGEPASS,
DIALOG_FINDPLAYER
}
// isnull by Y_Less
#define isnull(%1) \\
((!(%1[0])) || (((%1[0]) == \'\\1\') && (!(%1[1]))))
public OnFilterScriptInit()
{
// MySQL
print(!\"MySQL: Kapcsolódás erre a címre \" MYSQL_HOST \" \" MYSQL_USER \" nevû felhasználóval. \\nAdatbázis neve: \" MYSQL_DB \".\");
mysql_debug(1); // Hosztos szerveren ajánlott kikapcsolni. (Ha bekapcsovla hagyod sem nagyon lesz semmi, mivel R7-ben nem ír annyi információt ki, mind a régebbiekben)
mysql_connect(!MYSQL_HOST, !MYSQL_USER, !MYSQL_DB, !MYSQL_PASS);
if(mysql_ping() != 1)
{
print(!\"MySQL: Kapcsolódás sikertelen! (\" MYSQL_HOST \")\");
print(!\"MySQL: A mód kikapcsol! (\" MYSQL_HOST \")\");
SendRconCommand(!\"exit\");
return 1;
}
print(!\"MySQL: Kapcsolódás elfogadva!\" MYSQL_HOST \"\");
print(!\"MySQL: Adatbázis \" MYSQL_DB \" kiválasztva!\");
     return 1;
}
public OnFilterScriptExit()
{
mysql_close(); // Kapcsolat bezárása
return 1;
}
public OnPlayerConnect(playerid)
{
SetPlayerColor(playerid, (random(0xFFFFFF) << 8) | 0xFF); // GetPlayerColor() javítása
g_pQueryQueue[playerid]++;
format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid));
mysql_function_query(1, g_szQuery, true, \"THREAD_OnPlayerConnect\", \"dd\", playerid, g_pQueryQueue[playerid]);
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
g_pQueryQueue[playerid]++;
return SavePlayer(playerid, GetPVarInt(playerid, \"RegID\"));
}
forward THREAD_OnPlayerConnect(playerid, queue);
public THREAD_OnPlayerConnect(playerid, queue)
{
// Ha a játékos csatlakozik vagy lelép, akkor a \"g_pQueryQueue[playerid]\" értéke mindig növekedik.
// Lekérdezésnél átvisszük ennek az értékét a \"queue\" nevû paraméterben, amit majd a lekérdezés lefutásánál ellenõrzünk.
// Ha a játékos lelépett, akkor \"g_pQueryQueue[playerid]\" egyel több lett, tehát nem egyenlõ a \"queue\" paraméter értékével.
// Ez esetben a lekérdezés nem fog lefutni, hanem egy figyelmezetõ üzenetet fog kiírni a konzolva, hogy \"query collision\".
// Nagyon fontos ez, mivel ha van egy lekérdezés, ami lekérdez valami \"titkos\" adatot az adatbázisból,
// közben belaggol a a mysql szerver, a lekérdezés eltart 5 másodpercig, feljön egy másik játékos és annak fogja kiírni az adatokat,
// mivel a lekérdezés lefutása közben lelépett a játékos és egy másik jött a helyére. Erre van ez a védelem, így ettõl egyáltalán nem kell tartani.
// Sima lekérdezéseknél (ház betöltés, egyéb betöltés, frissítés, stb.. szarságok) ilyen helyen nem szükséges ez a védelem.
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_OnPlayerConnect);
new
szFetch[12];
cache_get_row(0, 0, szFetch);
SetPVarInt(playerid, \"LineID\", strval(szFetch));
// Ez itt egy \"átmeneti változó\", ami tárolja, hogy mi a reg id-je a játékosnak.
// Ha nulla, akkor nincs regisztrálva (mivel az SQL 0-t ad vissza, ha nemlétezõ a sor), ellentétben pedig igen.
g_PlayerFlags{playerid} = e_PLAYER_FLAGS:0; // Nullázuk az értékét, nem elég a nulla, kell elé a változó tagja is, különben figyelmeztet a fordító.
    if(!IsPlayerNPC(playerid)) // Csak játékosokra vonatkozik
{
SetPVarInt(playerid, \"RegID\", -1);
GetPlayerIp(playerid, g_szIP, sizeof(g_szIP));
gpci(playerid, i_str, sizeof(i_str));
getdate(year, month, day);
gettime(hour, minute, second);
format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `connections`(id, name, ip, serial, time) VALUES(0, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pName(playerid), g_szIP, i_str, year, month, day, hour, minute, second);
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
// Autologin
// Leftuttatunk egy lekérdezést, ami ha befejezõdött, akkor meghívódik a \"THREAD_Autologin\" callback.
// A régebbi pluginnal ez egy funkcióban ment, szóval ha a mysql szerver belaggolt és a lekérdezés eltartott 5 másodpercig,
// akkor 5 másodpercig megfagyott a szerver.
// Itt nem fog megfagyni semeddig a szerver, mivel létrehoz neki egy új szálat, és az a szál fagy meg míg nem fut le a lekérdezés.
// Lefutás után pedig meghívja a \"THREAD_Autologin\" callbackot. Ez már logikus, hogy az alap szálon (main thread)-on fut.
//
// Fenti lekérdezéssel is szintén ez a helyzet, viszont ott nem vagyunk kiváncsi a kapott értékekre.
// Az a lefutása során az \"OnQueryFinish\" callbackot hívja meg, viszont itt nem történik semmi.
// Ugyanaz a helyzet az összes lekérdezéssel, ha kiváncsi lennék az értékére, akkor ugyanúgy a callback alá raknám a dolgokat, mint itt.
format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `ip` = \'%s\'\", pName(playerid), g_szIP);
mysql_function_query(1, g_szQuery, true, \"THREAD_Autologin\", \"dd\", playerid, g_pQueryQueue[playerid]);
}
     return 1;
}
forward THREAD_Autologin(playerid, queue);
public THREAD_Autologin(playerid, queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Autologin);
new
    rows,
    fields;
cache_get_data(rows, fields);
if(rows) // Ha a sor nem üres
{
LoginPlayer(playerid);
SendClientMessage(playerid, COLOR_GREEN, \"Automatikusan bejelentkeztél!\");
}
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
if(IsPlayerNPC(playerid)) return 1;
   
    //printf(\"%d\", g_PlayerFlags{playerid} & e_LOGGED_IN);
if(!(g_PlayerFlags{playerid} & e_LOGGED_IN)) // Felmutatjuk neki a megfelelõ dialógot
{
if(GetPVarInt(playerid, \"LineID\"))
{
   LoginDialog(playerid);
}
else
{
   RegisterDialog(playerid);
}
}
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
if(IsPlayerNPC(playerid)) return 1;
if(!(g_PlayerFlags{playerid} & e_LOGGED_IN)) // Felmutatjuk neki a megfelelõ dialógot
{
if(GetPVarInt(playerid, \"LineID\"))
{
   LoginDialog(playerid);
}
else
{
   RegisterDialog(playerid);
}
}
return 1;
}
public OnPlayerSpawn(playerid)
{
// Ha elõször spawnol, akkor odaadjuk neki a pénzt. Mivel skinválasztásnál nem lehet pénzt adni a játékosnak!
if(!(g_PlayerFlags{playerid} & e_FIRST_SPAWN))
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, GetPVarInt(playerid, \"Cash\"));
DeletePVar(playerid, \"Cash\");
g_PlayerFlags{playerid} |= e_FIRST_SPAWN;
}
// Ütésstílus beállítása
SetPlayerFightingStyle(playerid, GetPVarInt(playerid, \"Style\"));
return 1;
}
 
// Y_Less
NameCheck(const aname[])
{
    new
        i,
        ch;
    while ((ch = aname[i++]) && ((ch == \']\') || (ch == \'[\') || (ch == \'(\') || (ch == \')\') || (ch == \'_\') || (ch == \'$\') || (ch == \'@\') || (ch == \'.\') || (ch == \'=\') || (\'0\' <= ch <= \'9\') || ((ch |= 0x20) && (\'a\' <= ch <= \'z\')))) {}
    return !ch;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
switch(dialogid)
{
case DIALOG_LOGIN:
{
   if(!response)
       return LoginDialog(playerid);
   if(g_PlayerFlags{playerid} & e_LOGGED_IN)
   {
      SendClientMessage(playerid, COLOR_RED, \"Már be vagy jelentkezve.\");
      return 1;
   }
   if(isnull(inputtext))
   {
      SendClientMessage(playerid, COLOR_RED, \"Nem írtál be semilyen jelszót!\");
      LoginDialog(playerid);
      return 1;
   }
   if(!(3 <= strlen(inputtext) <= 20))
   {
      SendClientMessage(playerid, COLOR_RED, \"Rossz jelszó hosszúság! 3 - 20\");
      LoginDialog(playerid);
      return 1;
   }
   new
      szEscape[32];
   mysql_real_escape_string(inputtext, szEscape); // Kiszûri az adatot, SQL injection elkerülése végett. Bõvebben itt olvashatsz róla: http://sampforum.hu/index.php?topic=9285.0
   format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `pass` COLLATE `utf8_bin` LIKE \'%s\'\", pName(playerid), szEscape);
   mysql_function_query(1, g_szQuery, true, \"THREAD_DialogLogin\", \"dd\", playerid, g_pQueryQueue[playerid]);
}
case DIALOG_REGISTER:
{
   if(!response)
      return RegisterDialog(playerid);
   if(isnull(inputtext))
   {
      SendClientMessage(playerid, COLOR_RED, \"Nem írtál be semilyen jelszót!\");
      RegisterDialog(playerid);
      return 1;
   }
   if(!(3 <= strlen(inputtext) <= 20))
   {
      SendClientMessage(playerid, COLOR_RED, \"Rossz jelszó hosszúság! 3 - 20\");
      RegisterDialog(playerid);
      return 1;
   }
   format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid));
   mysql_function_query(1, g_szQuery, true, \"THREAD_Register_1\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]);
}
case DIALOG_CHANGENAME:
{
   if(!response)
      return 0;
   if(!(3 <= strlen(inputtext) <= 20))
   {
      SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ hosszú a neved! 3 és 20 karakter között legyen!\");
      ChangeNameDialog(playerid);
      return 1;
   }
   if(!NameCheck(inputtext))
   {
      SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ név! Csak ezek a karakterek lehetnek benne: {\" #XCOLOR_GREEN \"}A-Z, 0-9, [], (), $, @. {\" #XCOLOR_RED \"}Ezenkívül helyet nem tartamlazhat!\");
      ChangeNameDialog(playerid);
      return 1;
   }
   if(!strcmp(inputtext, pName(playerid), true))
   {
      SendClientMessage(playerid, COLOR_RED, \"Jelenleg is ez a neved! Írj be egy másikat!\");
      ChangeNameDialog(playerid);
      return 1;
   }
   mysql_real_escape_string(inputtext, i_str);
   format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", i_str);
   mysql_function_query(1, g_szQuery, true, \"THREAD_Changename\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]);
}
case DIALOG_CHANGEPASS:
{
   if(!response)
      return 0;
   if(!(3 <= strlen(inputtext) <= 20))
   {
      SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ hosszú a jelszavad! 3 és 20 karakter között legyen!\");
      ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_INPUT, \"Jelszóváltás\", \"Lentre írd be az új jelszavad! \\n\\n\", \"Változtatás\", \"Mégse\");
      return 1;
   }
   format(g_szQuery, sizeof(g_szQuery), \"SELECT `pass` FROM `players` WHERE `reg_id` = %d\", GetPVarInt(playerid, \"RegID\"));
   mysql_function_query(1, g_szQuery, true, \"THREAD_Changepass\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]);
}
case DIALOG_FINDPLAYER:
{
   if(!response)
      return 0;
   format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\'\", inputtext);
   mysql_function_query(1, g_szQuery, true, \"THREAD_Findplayer\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]);
}
}
return 1;
}
forward THREAD_DialogLogin(playerid, queue);
public THREAD_DialogLogin(playerid, queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_DialogLogin);
new
    rows,
    fields;
cache_get_data(rows, fields);
if(rows != 1)
{
SendClientMessage(playerid, COLOR_RED, \"HIBA: Rossz jelszó.\");
LoginDialog(playerid);
return 1;
}
LoginPlayer(playerid);
GetPlayerIp(playerid, g_szIP, sizeof(g_szIP));
format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `ip` = \'%s\' WHERE `reg_id` = %d\", g_szIP, GetPVarInt(playerid, \"RegID\"));
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
SendClientMessage(playerid, COLOR_GREEN, !\"Sikersen bejelentkeztél!\");
return 1;
}
forward THREAD_Register_1(playerid, password[], queue);
public THREAD_Register_1(playerid, password[], queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Register_1);
new
    rows,
    fields;
cache_get_data(rows, fields);
if(rows)
{
SendClientMessage(playerid, COLOR_RED, \"MySQL sorok száma nem 0, valami hiba történt a kiválasztás közben!\");
SendClientMessage(playerid, COLOR_RED, \"Ezt a hibát jelezd a tulajdonosnak! Kickelve lettél, mert ebbõl hiba keletkezhet!\");
printf(\"MySQL rosw > 1 (%d, %s)\", playerid, password);
Kick(playerid);
return 1;
}
new
szEscape[21];
getdate(year, month, day);
gettime(hour, minute, second);
GetPlayerIp(playerid, g_szIP, sizeof(g_szIP));
mysql_real_escape_string(password, szEscape);
format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `players`(reg_id, name, ip, pass, reg_date, laston) VALUES(0, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pName(playerid), g_szIP, szEscape, year, month, day, hour, minute, second, year, month, day, hour, minute, second);
mysql_function_query(1, g_szQuery, false, \"THREAD_Register_2\", \"dsd\", playerid, password, g_pQueryQueue[playerid]);
return 1;
}
forward THREAD_Register_2(playerid, password[], queue);
public THREAD_Register_2(playerid, password[], queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Register_2);
new
iRegID = mysql_insert_id();
SetPVarInt(playerid, \"RegID\", iRegID); // Játékos Regisztrációs ID-jét beállítuk arra, amelyik sorba írtunk elõbb ( INSERT INTO )
SetPVarInt(playerid, \"Style\", 4);
g_PlayerFlags{playerid} |= e_LOGGED_IN;
format(i_str, sizeof(i_str), \"Sikeresen regisztráltál! A jelszavad: {\" #XCOLOR_RED \"}%s. {\" #XCOLOR_GREEN \"}Felhasználó ID: {\" #XCOLOR_BLUE \"}%d\", password, iRegID);
SendClientMessage(playerid, COLOR_GREEN, i_str);
SendClientMessage(playerid, COLOR_PINK, \"Ennyi lenne a MySQL regisztáció {\" #XCOLOR_BLUE \"}:)\");
return 1;
}
forward THREAD_Changename(playerid, inputtext[], queue);
public THREAD_Changename(playerid, inputtext[], queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Changename);
new
    rows,
    fields;
cache_get_data(rows, fields);
if(rows)
{
SendClientMessage(playerid, COLOR_RED, \"HIBA: Ez a név már használatban van!\");
SendClientMessage(playerid, COLOR_GREEN, \"Írj be egy más nevet, vagy menj a \'Mégse\' gombra!\");
ChangeNameDialog(playerid);
return 1;
}
new
szOldName[MAX_PLAYER_NAME + 1],
pRegID = GetPVarInt(playerid, \"RegID\");
GetPlayerName(playerid, szOldName, sizeof(szOldName));
if(SetPlayerName(playerid, inputtext) != 1)
{
SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ név! Írj be egy másikat!\");
ChangeNameDialog(playerid);
return 1;
}
getdate(year, month, day);
gettime(hour, minute, second);
format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `namechanges`(id, reg_id, oldname, newname, time) VALUES(0, %d, \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pRegID, szOldName, inputtext, year, month, day, hour, minute, second);
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `name` = \'%s\' WHERE `reg_id` = %d\", inputtext, pRegID);
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
format(i_str, sizeof(i_str), \"Sikeresen átváltottad a neved! Új neved: {\" #XCOLOR_WHITE \"}%s.\", inputtext);
SendClientMessage(playerid, COLOR_YELLOW, i_str);
return 1;
}
forward THREAD_Changepass(playerid, password[], queue);
public THREAD_Changepass(playerid, password[], queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Changepass);
new
    szOldPass[21],
    szEscaped[21],
    pRegID = GetPVarInt(playerid, \"RegID\");
cache_get_row(0, 0, szOldPass);
mysql_real_escape_string(password, szEscaped);
format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `pass` = \'%s\' WHERE `reg_id` = %d\", szEscaped, pRegID);
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
getdate(year, month, day);
gettime(hour, minute, second);
format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `namechanges_p`(id, reg_id, name, oldpass, newpass, time) VALUES(0, %d, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pRegID, pName(playerid), szOldPass, szEscaped, year, month, day, hour, minute, second);
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
format(i_str, sizeof(i_str), \"Sikeresen átállítotad a jelszavad! Új jelszavad: {\" #XCOLOR_GREEN \"}%s\", password);
SendClientMessage(playerid, COLOR_YELLOW, i_str);
return 1;
}
forward THREAD_Findplayer(playerid, inputtext[], queue);
public THREAD_Findplayer(playerid, inputtext[], queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Findplayer);
new
szFetch[12],
szRegDate[24],
szLaston[24],
iData[6];
cache_get_row(0, 0, szFetch); iData[0] = strval(szFetch); // regid
cache_get_row(0, 4, szRegDate);
cache_get_row(0, 5, szLaston);
cache_get_row(0, 6, szFetch); iData[1] = strval(szFetch); // money
cache_get_row(0, 7, szFetch); iData[2] = strval(szFetch); // score
cache_get_row(0, 8, szFetch); iData[3] = strval(szFetch); // kills
cache_get_row(0, 9, szFetch); iData[4] = strval(szFetch); // deaths
cache_get_row(0, 10, szFetch); iData[5] = strval(szFetch); // style
switch(iData[5])
{
case FIGHT_STYLE_NORMAL: szFetch = \"Normál\";
      case FIGHT_STYLE_BOXING: szFetch = \"Boxoló\";
      case FIGHT_STYLE_KUNGFU: szFetch = \"Kungfu\";
case FIGHT_STYLE_KNEEHEAD: szFetch = \"Kneehead\";
case FIGHT_STYLE_GRABKICK: szFetch = \"Grabkick\";
case FIGHT_STYLE_ELBOW: szFetch = \"Elbow\";
}
// Üzenet elküldése
format(i_str, sizeof(i_str), \"Név: %s, ID: %d, RegID: %d, Pénz: %d, Pont: %d\", inputtext, playerid, iData[0], iData[1], iData[2]);
SendClientMessage(playerid, COLOR_RED, i_str);
format(i_str, sizeof(i_str), \"Ölések: %d, Halálok: %d, Arány: %.2f, Ütés Stílus: %s\", iData[3], iData[4], (iData[3] && iData[4]) ? (floatdiv(iData[3], iData[4])) : (0.0), szFetch);
SendClientMessage(playerid, COLOR_YELLOW, i_str);
format(i_str, sizeof(i_str), \"Regisztáció ideje: {\" #XCOLOR_BLUE \"}%s{\" #XCOLOR_GREEN \"}, Utuljára a szerveren: {\" #XCOLOR_BLUE \"}%s\", szRegDate, szLaston);
SendClientMessage(playerid, COLOR_GREEN, i_str);
return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
if(IsPlayerConnected(killerid) && killerid != INVALID_PLAYER_ID)
{
SetPVarInt(killerid, \"Kills\", GetPVarInt(killerid, \"Kills\") + 1);
}
SetPVarInt(playerid, \"Deaths\", GetPVarInt(playerid, \"Deaths\") + 1);
return 1;
}
// Statisztika felmutató
CMD:stats(playerid, params[])
{
format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_date`, `laston` FROM `players` WHERE `reg_id` = %d\", GetPVarInt(playerid, \"RegID\")); // Kiválasztjuk a reg_date és a laston mezõt
mysql_function_query(1, g_szQuery, true, \"THREAD_Stats\", \"dd\", playerid, g_pQueryQueue[playerid]);
return 1;
}
forward THREAD_Stats(playerid, queue);
public THREAD_Stats(playerid, queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Stats);
new
RegDate[24],
Laston[24],
szStyle[24],
Kills = GetPVarInt(playerid, \"Kills\"),
Deaths = GetPVarInt(playerid, \"Deaths\");
cache_get_row(0, 0, RegDate);
cache_get_row(0, 1, Laston);
switch(GetPlayerFightingStyle(playerid))
{
case FIGHT_STYLE_NORMAL: szStyle = \"Normál\";
      case FIGHT_STYLE_BOXING: szStyle = \"Boxoló\";
      case FIGHT_STYLE_KUNGFU: szStyle = \"Kungfu\";
case FIGHT_STYLE_KNEEHEAD: szStyle = \"Kneehead\";
case FIGHT_STYLE_GRABKICK: szStyle = \"Grabkick\";
case FIGHT_STYLE_ELBOW: szStyle = \"Elbow\";
}
// Üzenet elküldése
format(i_str, sizeof(i_str), \"Név: %s, ID: %d, RegID: %d, Pénz: %d, Pont: %d\", pName(playerid), playerid, GetPVarInt(playerid, \"RegID\"), GetPlayerMoney(playerid), GetPlayerScore(playerid));
SendClientMessage(playerid, COLOR_RED, i_str);
format(i_str, sizeof(i_str), \"Ölések: %d, Halálok: %d, Arány: %.2f, Ütés Stílus: %s\", Kills, Deaths, (Kills && Deaths) ? (floatdiv(Kills, Deaths)) : (0.0), szStyle);
SendClientMessage(playerid, COLOR_YELLOW, i_str);
format(i_str, sizeof(i_str), \"Regisztáció ideje: {\" #XCOLOR_BLUE \"}%s{\" #XCOLOR_GREEN \"}, Utuljára a szerveren: {\" #XCOLOR_BLUE \"}%s\", RegDate, Laston);
SendClientMessage(playerid, COLOR_GREEN, i_str);
return 1;
}
/*
CMD:kill(playerid, params[])
{
SetPlayerHealth(playerid, 0.0);
return 1;
}
CMD:flag(playerid, params[])
{
format(i_str, 128, \"Logged: %d, FirstSpawn: %d\", g_PlayerFlags{playerid} & e_LOGGED_IN, g_PlayerFlags{playerid} & e_FIRST_SPAWN);
SendClientMessage(playerid, -1, i_str);
return 1;
}
*/
CMD:changename(playerid, params[])
{
ChangeNameDialog(playerid);
return 1;
}
CMD:changepass(playerid, params[])
{
ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_PASSWORD, \"Jelszóváltás\", \"Lentre írd be az új jelszavad! \\n\\n\", \"Változtatás\", \"Mégse\");
return 1;
}
CMD:findplayer(playerid, params[])
{
if(isnull(params)) return SendClientMessage(playerid, COLOR_RED, \"HASZNÁLAT: /findplayer <Játékos Névrészlet>\");
if(strlen(params) > MAX_PLAYER_NAME) return SendClientMessage(playerid, COLOR_RED, \"HIBA: Túl hosszú a részlet, maximum 24 karakter lehet!\");
format(g_szQuery, sizeof(g_szQuery), \"SELECT `name` FROM `players` WHERE `name` LIKE \'%s%s%s\'\", \"%%\", params, \"%%\");
mysql_function_query(1, g_szQuery, true, \"THREAD_FindplayerDialog\", \"dsd\", playerid, params, g_pQueryQueue[playerid]);
return 1;
}
forward THREAD_FindplayerDialog(playerid, reszlet[], queue);
public THREAD_FindplayerDialog(playerid, reszlet[], queue)
{
if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_FindplayerDialog);
new
    rows,
    fields;
cache_get_data(rows, fields);
if(!rows)
{
format(i_str, sizeof(i_str), \"Nincs találat a \'%s\' részletre!\", reszlet);
SendClientMessage(playerid, COLOR_RED, i_str);
return 1;
}
else if(rows > 180)
{
format(i_str, sizeof(i_str), \"A \'%s\' részletre több, mint 180 találad van! < %d >!\", reszlet, rows);
SendClientMessage(playerid, COLOR_RED, i_str);
return 1;
}
new
    x,
    szName[MAX_PLAYER_NAME];
g_szDialogFormat[0] = EOS;
for( ; x != rows; x++)
{
cache_get_row(x, 0, szName);
strcat(g_szDialogFormat, szName);
strcat(g_szDialogFormat, \"\\n\");
}
format(i_str, 128, \"Találatok a(z) \'%s\' részletre.. (%d)\", reszlet, x);
ShowPlayerDialog(playerid, DIALOG_FINDPLAYER, DIALOG_STYLE_LIST, i_str, g_szDialogFormat, \"Megtekint\", \"Mégse\");
return 1;
}
/////////////////////////////////////////
stock LoginDialog(playerid)
{
format(i_str, sizeof(i_str), \"{\" #XCOLOR_WHITE \"}Bejelentkezés: {%06x}%s(%d)\", GetPlayerColor(playerid) >>> 8, pName(playerid), playerid);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nTe már regisztálva vagy. Lentre írd be a jelszavad\", !\"Bejelentkezés\", !\"Mégse\");
return 1;
}
stock RegisterDialog(playerid)
{
format(i_str, sizeof(i_str), \"{\" #XCOLOR_WHITE \"}Regisztráció: {%06x}%s(%d)\", GetPlayerColor(playerid) >>> 8, pName(playerid), playerid);
#if defined NINCS_REG_CSILLAG
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nItt még nem regisztráltál. Lentre írd be a jelszavad\", !\"Regisztáció\", !\"Mégse\");
#else
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nItt még nem regisztráltál. Lentre írd be a jelszavad\", !\"Regisztáció\", !\"Mégse\");
#endif
return 1;
}
/* Bejelentkezés */
stock LoginPlayer(playerid)
{
new
iPVarSet[6],
szFetch[12],
iRegID = GetPVarInt(playerid, \"LineID\");
// Ha a line ID 0, tehát a MySQL nem adott vissza sorokat, akkor semmiképp sem jelentkezhez be!
// Ennek nem szabadna elõfordulnia, de biztonság kedvéért teszek rá védelmet.
if(!iRegID) return printf(\"HIBA: Rossz reg ID! Játékos: %s(%d) (regid: %d)\", pName(playerid), playerid, iRegID);
   
SetPVarInt(playerid, \"RegID\", iRegID); // RegID-t beállítjuk
cache_get_row(0, 0, szFetch); iPVarSet[0] = strval(szFetch); // RegID
cache_get_row(0, 6, szFetch); iPVarSet[1] = strval(szFetch); // Money
cache_get_row(0, 7, szFetch); iPVarSet[2] = strval(szFetch); // Score
cache_get_row(0, 8, szFetch); iPVarSet[3] = strval(szFetch); // Kills
cache_get_row(0, 9, szFetch); iPVarSet[4] = strval(szFetch); // Deaths
cache_get_row(0, 10, szFetch); iPVarSet[5] = strval(szFetch); // Fightingstyle
SetPVarInt(playerid, \"Cash\", iPVarSet[1]); // A pénzét egy PVar-ban tároljuk, mert a skinválasztásnál nemlehet a játékos pénzét állítani.
SetPlayerScore(playerid, iPVarSet[2]);
SetPVarInt(playerid, \"Kills\", iPVarSet[3]);
SetPVarInt(playerid, \"Deaths\", iPVarSet[4]);
SetPVarInt(playerid, \"Style\", iPVarSet[5]);
g_PlayerFlags{playerid} |= e_LOGGED_IN;
return 1;
}
stock SavePlayer(playerid, regid)
{
if(IsPlayerNPC(playerid)) return 1;
// Ha nincs bejelentkezve és még nem spawnolt le, akkor nem mentjük. Ezt ajánlatos itthagyni, mivel ezmiatt nekem sok bug keletkezett!
if(g_PlayerFlags{playerid} & (e_LOGGED_IN | e_FIRST_SPAWN) == (e_LOGGED_IN | e_FIRST_SPAWN))
{
getdate(year, month, day);
gettime(hour, minute, second);
format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `laston` = \'%02d.%02d.%02d/%02d.%02d.%02d\', `money` = %d, `score` = %d, `kills` = %d, `deaths` = %d, `fightingstyle` = \'%d\' WHERE `reg_id` = %d\",
year, month, day, hour, minute, second, GetPlayerMoney(playerid), GetPlayerScore(playerid), GetPVarInt(playerid, \"Kills\"), GetPVarInt(playerid, \"Deaths\"), GetPlayerFightingStyle(playerid),
regid);
mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
// %02d azt jelenti, hogyha a szám egyjegyû (1, 5, 7, stb... ), akkor tegyen elé egy 0-t. Pl: 05, 07.
// Ezt általában idõre használják, mivel így \'érthetõbb\'.
// Ez ugyanúgy mûködik %03d-vel %04d-vel, és így továb... ^
}
return 1;
}
stock pName(playerid)
{
static // \"Helyi\" globális változó
s_szName[MAX_PLAYER_NAME];
GetPlayerName(playerid, s_szName, sizeof(s_szName));
return s_szName;
}
forward OnQueryFinish();
public OnQueryFinish()
{
return 1;
}
/* SQL Tábla */
/*
CREATE TABLE IF NOT EXISTS `connections` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(21) NOT NULL,
  `ip` varchar(16) NOT NULL,
  `serial` varchar(128) NOT NULL,
  `time` varchar(24) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `namechanges` (
  `id` smallint(5) NOT NULL AUTO_INCREMENT,
  `reg_id` mediumint(8) NOT NULL,
  `oldname` varchar(21) NOT NULL,
  `newname` varchar(21) NOT NULL,
  `time` varchar(24) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `reg_id` (`reg_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `namechanges_p` (
  `id` smallint(5) NOT NULL AUTO_INCREMENT,
  `reg_id` mediumint(8) NOT NULL,
  `name` varchar(24) NOT NULL,
  `oldpass` varchar(21) NOT NULL,
  `newpass` varchar(21) NOT NULL,
  `time` varchar(24) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `reg_id` (`reg_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `players` (
  `reg_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(24) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `ip` varchar(20) NOT NULL,
  `pass` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `reg_date` varchar(24) NOT NULL,
  `laston` varchar(24) NOT NULL,
  `money` int(11) NOT NULL DEFAULT \'0\',
  `score` int(11) NOT NULL DEFAULT \'0\',
  `kills` mediumint(11) unsigned NOT NULL DEFAULT \'0\',
  `deaths` mediumint(11) unsigned NOT NULL DEFAULT \'0\',
  `fightingstyle` enum(\'4\',\'5\',\'6\',\'7\',\'15\',\'16\') NOT NULL DEFAULT \'4\',
  PRIMARY KEY (`reg_id`),
  KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
CREATE TABLE IF NOT EXISTS `queryerrors` (
  `id` mediumint(7) NOT NULL AUTO_INCREMENT,
  `errorid` int(11) NOT NULL,
  `error` text NOT NULL,
  `resultid` mediumint(7) NOT NULL,
  `extraid` mediumint(7) NOT NULL,
  `callback` varchar(512) NOT NULL,
  `sql_query` varchar(512) NOT NULL,
  `connectionHandle` mediumint(7) NOT NULL,
  `time` varchar(24) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `errorid` (`errorid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
*/
« Utoljára szerkesztve: 2013. Január 03. - 22:53:06 írta kurta999 »

MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #214 Dátum: 2013. Január 03. - 19:30:29 »
0 Show voters
Mi lett benne új?? :D

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #215 Dátum: 2013. Január 03. - 22:54:45 »
0 Show voters
Kurva régen csináltam, nem igazán emléxek rá, de azt tudom, hogy semmi olyan aminek lenne valami nagyobb jelentõsége.
Egyébként elõbbi kódban bennehagytam véletlen egy másik scriptbõl részleget, azt javítottam. Valamit teszteltem a szerveren nos ebbe írtam bele és bennemaradt :D

MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #216 Dátum: 2013. Január 07. - 15:23:09 »
0 Show voters
Fõposztba nem teszed ki?? :D

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #217 Dátum: 2013. Március 22. - 16:04:21 »
0 Show voters
Bocsi az offért de nem jó a letöltési link.. kérlek módosísd!

Nem elérhető .:Secur:.

  • 2430
  • GTA Hero
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #218 Dátum: 2013. Március 22. - 16:53:58 »
0 Show voters
Hasznosak voltak az SQL órák a suliban  ;D

Nem elérhető JBauer

  • 1407
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #219 Dátum: 2013. Március 22. - 17:09:45 »
0 Show voters
ZyZu.. pont most írta le, hogy megszûnt a tárhely ott a kód.
Kurta: nem tudnád felrakni az R6ost is?

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #220 Dátum: 2013. Március 22. - 17:34:19 »
0 Show voters
Nem hinném, hogy még megvan..

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #221 Dátum: 2013. Március 22. - 19:28:54 »
0 Show voters
Egyébként megkaptam ha kell valakinek akkor :
 

// MySQL Regisztráció rendszer by kurta999
// Verzió: 2.0
// Last Update: 2012.10.29
#include <a_samp>
#tryinclude a_mysql_r7
        #if !defined _a_mysql_r7_included
            #include <a_mysql>
        #endif
       
#if defined mysql_fetch_int
        #error \"Frissítsd a MySQL (a_mysql.inc) függvénykönyvtárad az R7-re!\"
#endif
#include <zcmd> // http://forum.sa-mp.com/showthread.php?t=91354
#define             NINCS_REG_CSILLAG // Rakd a kommenttárba, ha a jelszót a játékosnak a regisztráció dialógusban csillagozni akarod.
// Szerintem ezt ajánlott így hagyni, mivel a regisztrációban könnyen félrhetírhatsz és nemjössz rá a hibára, mivel nem látod, hogy mit írtál..
// A hibára pedig csak akkor jössz rá, miután beregisztráltál.
#define ChangeNameDialog(%1) \\
   ShowPlayerDialog(%1, DIALOG_CHANGENAME, DIALOG_STYLE_INPUT, !\"{\" #XCOLOR_RED \"}Névváltás\", !\"{\" #XCOLOR_GREEN \"}Lentre írd be az új neved! \\nHa régóta játszol már, akkor a névváltás több másodpercig is eltarthat!\\n\\n{\" #XCOLOR_RED \"}Ahogy megváltoztattad, rögtön változtasd meg a neved a SAMP-ba!\", !\"Változtatás\", !\"Mégse\")
// gpci beágyazása
native gpci(playerid, const serial[], maxlen);
new
        year,
        month,
        day,
        hour,
        minute,
        second;
new // Direkt adok hozzá + 1 karaktert, mivel valahol a \\0 kraktert is tárolni kell. (Ez 4 karakter, de kell az 5. is, mivel ott tárolja a \\0-t! [\'a\', \'n\', \'y\', \'á\', \'d\', \'\\0\'])
        g_szQuery[512 +1],
        g_szDialogFormat[4096],
        i_str[128 +1],
        g_szIP[16 +1];
// Bit flagok
enum e_PLAYER_FLAGS (<<= 1)
{
        e_LOGGED_IN = 1,
        e_FIRST_SPAWN
}
new
        e_PLAYER_FLAGS:g_PlayerFlags[MAX_PLAYERS char];
new
        g_pQueryQueue[MAX_PLAYERS];
// MySQL beállítások, alapból ezek azok a wamp-nál, csak a tábla nevét módosítsd arra, amilyen néven létrehoztad, nekem itt a \'samp\'
#define MYSQL_HOST                              \"localhost\"
#define MYSQL_USER                              \"root\"
#define MYSQL_PASS                              \"\"
#define MYSQL_DB                                \"samp\"
// Üzenet, amit akkor ír ki, ha a lekérdezés befejezése elõtt lelép a játékos
#define QUERY_COLLISION(%0) \\
        printf(\"Query collision \\\" #%0 \\\"! PlayerID: %d, queue: %d, g_pQueryQueue: %d\", playerid, queue, g_pQueryQueue[playerid])
// RRGGBBAA
#define COLOR_GREEN                     0x33FF33AA
#define COLOR_RED                               0xFF0000AA
#define COLOR_YELLOW                    0xFF9900AA
#define COLOR_PINK                              0xFF66FFAA
// RRGGBB
#define XCOLOR_GREEN                    33FF33
#define XCOLOR_RED                              FF0000
#define XCOLOR_BLUE                             33CCFF
#define XCOLOR_YELLOW                   FF9900
#define XCOLOR_WHITE                    FFFFFF
// Dialóg ID
enum
{
        DIALOG_LOGIN = 20000,
        DIALOG_REGISTER,
        DIALOG_CHANGENAME,
        DIALOG_CHANGEPASS,
        DIALOG_FINDPLAYER
}
// isnull by Y_Less
#define isnull(%1) \\
        ((!(%1[0])) || (((%1[0]) == \'\\1\') && (!(%1[1]))))
public OnFilterScriptInit()
{
        // MySQL
        print(!\"MySQL: Kapcsolódás erre a címre \" MYSQL_HOST \" \" MYSQL_USER \" nevû felhasználóval. \\nAdatbázis neve: \" MYSQL_DB \".\");
        mysql_debug(1); // Hosztos szerveren ajánlott kikapcsolni. (Ha bekapcsovla hagyod sem nagyon lesz semmi, mivel R7-ben nem ír annyi információt ki, mind a régebbiekben)
        mysql_connect(!MYSQL_HOST, !MYSQL_USER, !MYSQL_DB, !MYSQL_PASS);
        if(mysql_ping() != 1)
        {
                print(!\"MySQL: Kapcsolódás sikertelen! (\" MYSQL_HOST \")\");
                print(!\"MySQL: A mód kikapcsol! (\" MYSQL_HOST \")\");
                SendRconCommand(!\"exit\");
                return 1;
        }
        print(!\"MySQL: Kapcsolódás elfogadva!\" MYSQL_HOST \"\");
        print(!\"MySQL: Adatbázis \" MYSQL_DB \" kiválasztva!\");
        return 1;
}
public OnFilterScriptExit()
{
        mysql_close(); // Kapcsolat bezárása
        return 1;
}
public OnPlayerConnect(playerid)
{
        SetPlayerColor(playerid, (random(0xFFFFFF) << 8) | 0xFF); // GetPlayerColor() javítása
        g_pQueryQueue[playerid]++;
       
        format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid));
        mysql_function_query(1, g_szQuery, true, \"THREAD_OnPlayerConnect\", \"dd\", playerid, g_pQueryQueue[playerid]);
        return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
        g_pQueryQueue[playerid]++;
        return SavePlayer(playerid, GetPVarInt(playerid, \"RegID\"));
}
forward THREAD_OnPlayerConnect(playerid, queue);
public THREAD_OnPlayerConnect(playerid, queue)
{
        // Ha a játékos csatlakozik vagy lelép, akkor a \"g_pQueryQueue[playerid]\" értéke mindig növekedik.
        // Lekérdezésnél átvisszük ennek az értékét a \"queue\" nevû paraméterben, amit majd a lekérdezés lefutásánál ellenõrzünk.
        // Ha a játékos lelépett, akkor \"g_pQueryQueue[playerid]\" egyel több lett, tehát nem egyenlõ a \"queue\" paraméter értékével.
        // Ez esetben a lekérdezés nem fog lefutni, hanem egy figyelmezetõ üzenetet fog kiírni a konzolva, hogy \"query collision\".
        // Nagyon fontos ez, mivel ha van egy lekérdezés, ami lekérdez valami \"titkos\" adatot az adatbázisból,
        // közben belaggol a a mysql szerver, a lekérdezés eltart 5 másodpercig, feljön egy másik játékos és annak fogja kiírni az adatokat,
        // mivel a lekérdezés lefutása közben lelépett a játékos és egy másik jött a helyére. Erre van ez a védelem, így ettõl egyáltalán nem kell tartani.
        // Sima lekérdezéseknél (ház betöltés, egyéb betöltés, frissítés, stb.. sz*rságok) ilyen helyen nem szükséges ez a védelem.
        if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_OnPlayerConnect);
        new
                szFetch[12];
        cache_get_row(0, 0, szFetch);
        SetPVarInt(playerid, \"LineID\", strval(szFetch));
        // Ez itt egy \"átmeneti változó\", ami tárolja, hogy mi a reg id-je a játékosnak.
        // Ha nulla, akkor nincs regisztrálva (mivel az SQL 0-t ad vissza, ha nemlétezõ a sor), ellentétben pedig igen.
       
        g_PlayerFlags{playerid} = e_PLAYER_FLAGS:0; // Nullázuk az értékét, nem elég a nulla, kell elé a változó tagja is, különben figyelmeztet a fordító.
    if(!IsPlayerNPC(playerid)) // Csak játékosokra vonatkozik
        {
                SetPVarInt(playerid, \"RegID\", -1);
                GetPlayerIp(playerid, g_szIP, sizeof(g_szIP));
                gpci(playerid, i_str, sizeof(i_str));
                getdate(year, month, day);
                gettime(hour, minute, second);
                format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `connections`(id, name, ip, serial, time) VALUES(0, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pName(playerid), g_szIP, i_str, year, month, day, hour, minute, second);
                mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
                // Autologin
               
                // Leftuttatunk egy lekérdezést, ami ha befejezõdött, akkor meghívódik a \"THREAD_Autologin\" callback.
                // A régebbi pluginnal ez egy funkcióban ment, szóval ha a mysql szerver belaggolt és a lekérdezés eltartott 5 másodpercig,
                // akkor 5 másodpercig megfagyott a szerver.
                // Itt nem fog megfagyni semeddig a szerver, mivel létrehoz neki egy új szálat, és az a szál fagy meg míg nem fut le a lekérdezés.
                // Lefutás után pedig meghívja a \"THREAD_Autologin\" callbackot. Ez már logikus, hogy az alap szálon (main thread)-on fut.
                //
                // Fenti lekérdezéssel is szintén ez a helyzet, viszont ott nem vagyunk kiváncsi a kapott értékekre.
                // Az a lefutása során az \"OnQueryFinish\" callbackot hívja meg, viszont itt nem történik semmi.
                // Ugyanaz a helyzet az összes lekérdezéssel, ha kiváncsi lennék az értékére, akkor ugyanúgy a callback alá raknám a dolgokat, mint itt.
                format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `ip` = \'%s\'\", pName(playerid), g_szIP);
                mysql_function_query(1, g_szQuery, true, \"THREAD_Autologin\", \"dd\", playerid, g_pQueryQueue[playerid]);
        }
        return 1;
}
forward THREAD_Autologin(playerid, queue);
public THREAD_Autologin(playerid, queue)
{
        if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Autologin);
        new
            rows,
            fields;
        cache_get_data(rows, fields);
        if(rows) // Ha a sor nem üres
        {
                LoginPlayer(playerid);
                SendClientMessage(playerid, COLOR_GREEN, \"Automatikusan bejelentkeztél!\");
        }
        return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
        if(IsPlayerNPC(playerid)) return 1;
   
    //printf(\"%d\", g_PlayerFlags{playerid} & e_LOGGED_IN);
        if(!(g_PlayerFlags{playerid} & e_LOGGED_IN)) // Felmutatjuk neki a megfelelõ dialógot
        {
                if(GetPVarInt(playerid, \"LineID\"))
                {
                        LoginDialog(playerid);
                }
                else
                {
                        RegisterDialog(playerid);
                }
        }
        return 1;
}
public OnPlayerRequestSpawn(playerid)
{
        if(IsPlayerNPC(playerid)) return 1;
        if(!(g_PlayerFlags{playerid} & e_LOGGED_IN)) // Felmutatjuk neki a megfelelõ dialógot
        {
                if(GetPVarInt(playerid, \"LineID\"))
                {
                        LoginDialog(playerid);
                }
                else
                {
                        RegisterDialog(playerid);
                }
        }
        return 1;
}
public OnPlayerSpawn(playerid)
{
        // Ha elõször spawnol, akkor odaadjuk neki a pénzt. Mivel skinválasztásnál nem lehet pénzt adni a játékosnak!
        if(!(g_PlayerFlags{playerid} & e_FIRST_SPAWN))
        {
                ResetPlayerMoney(playerid);
                GivePlayerMoney(playerid, GetPVarInt(playerid, \"Cash\"));
                DeletePVar(playerid, \"Cash\");
                g_PlayerFlags{playerid} |= e_FIRST_SPAWN;
        }
        // Ütésstílus beállítása
        SetPlayerFightingStyle(playerid, GetPVarInt(playerid, \"Style\"));
        return 1;
}
 
// Y_Less
NameCheck(const aname[])
{
    new
        i,
        ch;
    while ((ch = aname[i++]) && ((ch == \']\') || (ch == \'[\') || (ch == \'(\') || (ch == \')\') || (ch == \'_\') || (ch == \'$\') || (ch == \'@\') || (ch == \'.\') || (ch == \'=\') || (\'0\' <= ch <= \'9\') || ((ch |= 0x20) && (\'a\' <= ch <= \'z\')))) {}
    return !ch;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
        switch(dialogid)
        {
                case DIALOG_LOGIN:
                {
                        if(!response)
                            return LoginDialog(playerid);
                        if(g_PlayerFlags{playerid} & e_LOGGED_IN)
                        {
                                SendClientMessage(playerid, COLOR_RED, \"Már be vagy jelentkezve.\");
                                return 1;
                        }
                        if(isnull(inputtext))
                        {
                                SendClientMessage(playerid, COLOR_RED, \"Nem írtál be semilyen jelszót!\");
                                LoginDialog(playerid);
                                return 1;
                        }
                        if(!(3 <= strlen(inputtext) <= 20))
                        {
                                SendClientMessage(playerid, COLOR_RED, \"Rossz jelszó hosszúság! 3 - 20\");
                                LoginDialog(playerid);
                                return 1;
                        }
                        new
                                szEscape[32];
                        mysql_real_escape_string(inputtext, szEscape); // Kiszûri az adatot, SQL injection elkerülése végett. Bõvebben itt olvashatsz róla: http://sampforum.hu/index.php?topic=9285.0
                        format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `pass` COLLATE `utf8_bin` LIKE \'%s\'\", pName(playerid), szEscape);
                        mysql_function_query(1, g_szQuery, true, \"THREAD_DialogLogin\", \"dd\", playerid, g_pQueryQueue[playerid]);
                }
                case DIALOG_REGISTER:
                {
                        if(!response)
                                return RegisterDialog(playerid);
                        if(isnull(inputtext))
                        {
                                SendClientMessage(playerid, COLOR_RED, \"Nem írtál be semilyen jelszót!\");
                                RegisterDialog(playerid);
                                return 1;
                        }
                        if(!(3 <= strlen(inputtext) <= 20))
                        {
                                SendClientMessage(playerid, COLOR_RED, \"Rossz jelszó hosszúság! 3 - 20\");
                                RegisterDialog(playerid);
                                return 1;
                        }
                        format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid));
                        mysql_function_query(1, g_szQuery, true, \"THREAD_Register_1\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]);
                }
                case DIALOG_CHANGENAME:
                {
                        if(!response)
                                return 0;
                        if(!(3 <= strlen(inputtext) <= 20))
                        {
                                SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ hosszú a neved! 3 és 20 karakter között legyen!\");
                                ChangeNameDialog(playerid);
                                return 1;
                        }
                        if(!NameCheck(inputtext))
                        {
                                SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ név! Csak ezek a karakterek lehetnek benne: {\" #XCOLOR_GREEN \"}A-Z, 0-9, [], (), $, @. {\" #XCOLOR_RED \"}Ezenkívül helyet nem tartamlazhat!\");
                                ChangeNameDialog(playerid);
                                return 1;
                        }
                        if(!strcmp(inputtext, pName(playerid), true))
                        {
                                SendClientMessage(playerid, COLOR_RED, \"Jelenleg is ez a neved! Írj be egy másikat!\");
                                ChangeNameDialog(playerid);
                                return 1;
                        }
                        mysql_real_escape_string(inputtext, i_str);
                        format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", i_str);
                        mysql_function_query(1, g_szQuery, true, \"THREAD_Changename\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]);
                }
                case DIALOG_CHANGEPASS:
                {
                        if(!response)
                                return 0;
                        if(!(3 <= strlen(inputtext) <= 20))
                        {
                                SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ hosszú a jelszavad! 3 és 20 karakter között legyen!\");
                                ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_INPUT, \"Jelszóváltás\", \"Lentre írd be az új jelszavad! \\n\\n\", \"Változtatás\", \"Mégse\");
                                return 1;
                        }
                        format(g_szQuery, sizeof(g_szQuery), \"SELECT `pass` FROM `players` WHERE `reg_id` = %d\", GetPVarInt(playerid, \"RegID\"));
                        mysql_function_query(1, g_szQuery, true, \"THREAD_Changepass\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]);
                }
                case DIALOG_FINDPLAYER:
                {
                        if(!response)
                                return 0;
                        format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\'\", inputtext);
                        mysql_function_query(1, g_szQuery, true, \"THREAD_Findplayer\", \"dsd\", playerid, inputtext, g_pQueryQueue[playerid]);
                }
        }
        return 1;
}
forward THREAD_DialogLogin(playerid, queue);
public THREAD_DialogLogin(playerid, queue)
{
        if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_DialogLogin);
        new
            rows,
            fields;
        cache_get_data(rows, fields);
        if(rows != 1)
        {
                SendClientMessage(playerid, COLOR_RED, \"HIBA: Rossz jelszó.\");
                LoginDialog(playerid);
                return 1;
        }
        LoginPlayer(playerid);
        GetPlayerIp(playerid, g_szIP, sizeof(g_szIP));
        format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `ip` = \'%s\' WHERE `reg_id` = %d\", g_szIP, GetPVarInt(playerid, \"RegID\"));
        mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
        SendClientMessage(playerid, COLOR_GREEN, !\"Sikersen bejelentkeztél!\");
        return 1;
}
forward THREAD_Register_1(playerid, password[], queue);
public THREAD_Register_1(playerid, password[], queue)
{
        if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Register_1);
        new
            rows,
            fields;
        cache_get_data(rows, fields);
        if(rows)
        {
                SendClientMessage(playerid, COLOR_RED, \"MySQL sorok száma nem 0, valami hiba történt a kiválasztás közben!\");
                SendClientMessage(playerid, COLOR_RED, \"Ezt a hibát jelezd a tulajdonosnak! Kickelve lettél, mert ebbõl hiba keletkezhet!\");
                printf(\"MySQL rosw > 1 (%d, %s)\", playerid, password);
                Kick(playerid);
                return 1;
        }
        new
                szEscape[21];
        getdate(year, month, day);
        gettime(hour, minute, second);
        GetPlayerIp(playerid, g_szIP, sizeof(g_szIP));
        mysql_real_escape_string(password, szEscape);
        format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `players`(reg_id, name, ip, pass, reg_date, laston) VALUES(0, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pName(playerid), g_szIP, szEscape, year, month, day, hour, minute, second, year, month, day, hour, minute, second);
        mysql_function_query(1, g_szQuery, false, \"THREAD_Register_2\", \"dsd\", playerid, password, g_pQueryQueue[playerid]);
        return 1;
}
forward THREAD_Register_2(playerid, password[], queue);
public THREAD_Register_2(playerid, password[], queue)
{
        if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Register_2);
        new
                iRegID = mysql_insert_id();
        SetPVarInt(playerid, \"RegID\", iRegID); // Játékos Regisztrációs ID-jét beállítuk arra, amelyik sorba írtunk elõbb ( INSERT INTO )
        SetPVarInt(playerid, \"Style\", 4);
        g_PlayerFlags{playerid} |= e_LOGGED_IN;
        format(i_str, sizeof(i_str), \"Sikeresen regisztráltál! A jelszavad: {\" #XCOLOR_RED \"}%s. {\" #XCOLOR_GREEN \"}Felhasználó ID: {\" #XCOLOR_BLUE \"}%d\", password, iRegID);
        SendClientMessage(playerid, COLOR_GREEN, i_str);
        SendClientMessage(playerid, COLOR_PINK, \"Ennyi lenne a MySQL regisztáció {\" #XCOLOR_BLUE \"}:)\");
        return 1;
}
forward THREAD_Changename(playerid, inputtext[], queue);
public THREAD_Changename(playerid, inputtext[], queue)
{
        if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Changename);
        new
            rows,
            fields;
        cache_get_data(rows, fields);
        if(rows)
        {
                SendClientMessage(playerid, COLOR_RED, \"HIBA: Ez a név már használatban van!\");
                SendClientMessage(playerid, COLOR_GREEN, \"Írj be egy más nevet, vagy menj a \'Mégse\' gombra!\");
                ChangeNameDialog(playerid);
                return 1;
        }
        new
                szOldName[MAX_PLAYER_NAME + 1],
                pRegID = GetPVarInt(playerid, \"RegID\");
        GetPlayerName(playerid, szOldName, sizeof(szOldName));
        if(SetPlayerName(playerid, inputtext) != 1)
        {
                SendClientMessage(playerid, COLOR_RED, \"Nem megfelelõ név! Írj be egy másikat!\");
                ChangeNameDialog(playerid);
                return 1;
        }
        getdate(year, month, day);
        gettime(hour, minute, second);
        format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `namechanges`(id, reg_id, oldname, newname, time) VALUES(0, %d, \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pRegID, szOldName, inputtext, year, month, day, hour, minute, second);
        mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
        format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `name` = \'%s\' WHERE `reg_id` = %d\", inputtext, pRegID);
        mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
        format(i_str, sizeof(i_str), \"Sikeresen átváltottad a neved! Új neved: {\" #XCOLOR_WHITE \"}%s.\", inputtext);
        SendClientMessage(playerid, COLOR_YELLOW, i_str);
        return 1;
}
forward THREAD_Changepass(playerid, password[], queue);
public THREAD_Changepass(playerid, password[], queue)
{
        if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Changepass);
        new
            szOldPass[21],
            szEscaped[21],
            pRegID = GetPVarInt(playerid, \"RegID\");
        cache_get_row(0, 0, szOldPass);
        mysql_real_escape_string(password, szEscaped);
        format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `pass` = \'%s\' WHERE `reg_id` = %d\", szEscaped, pRegID);
        mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
        getdate(year, month, day);
        gettime(hour, minute, second);
        format(g_szQuery, sizeof(g_szQuery), \"INSERT INTO `namechanges_p`(id, reg_id, name, oldpass, newpass, time) VALUES(0, %d, \'%s\', \'%s\', \'%s\', \'%02d.%02d.%02d/%02d.%02d.%02d\')\", pRegID, pName(playerid), szOldPass, szEscaped, year, month, day, hour, minute, second);
        mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
        format(i_str, sizeof(i_str), \"Sikeresen átállítotad a jelszavad! Új jelszavad: {\" #XCOLOR_GREEN \"}%s\", password);
        SendClientMessage(playerid, COLOR_YELLOW, i_str);
        return 1;
}
forward THREAD_Findplayer(playerid, inputtext[], queue);
public THREAD_Findplayer(playerid, inputtext[], queue)
{
        if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Findplayer);
        new
                szFetch[12],
                szRegDate[24],
                szLaston[24],
                iData[6];
        cache_get_row(0, 0, szFetch); iData[0] = strval(szFetch); // regid
        cache_get_row(0, 4, szRegDate);
        cache_get_row(0, 5, szLaston);
        cache_get_row(0, 6, szFetch); iData[1] = strval(szFetch); // money
        cache_get_row(0, 7, szFetch); iData[2] = strval(szFetch); // score
        cache_get_row(0, 8, szFetch); iData[3] = strval(szFetch); // kills
        cache_get_row(0, 9, szFetch); iData[4] = strval(szFetch); // deaths
        cache_get_row(0, 10, szFetch); iData[5] = strval(szFetch); // style
        switch(iData[5])
        {
                case FIGHT_STYLE_NORMAL: szFetch = \"Normál\";
                case FIGHT_STYLE_BOXING: szFetch = \"Boxoló\";
                case FIGHT_STYLE_KUNGFU: szFetch = \"Kungfu\";
                case FIGHT_STYLE_KNEEHEAD: szFetch = \"Kneehead\";
                case FIGHT_STYLE_GRABKICK: szFetch = \"Grabkick\";
                case FIGHT_STYLE_ELBOW: szFetch = \"Elbow\";
        }
        // Üzenet elküldése
        format(i_str, sizeof(i_str), \"Név: %s, ID: %d, RegID: %d, Pénz: %d, Pont: %d\", inputtext, playerid, iData[0], iData[1], iData[2]);
        SendClientMessage(playerid, COLOR_RED, i_str);
        format(i_str, sizeof(i_str), \"Ölések: %d, Halálok: %d, Arány: %.2f, Ütés Stílus: %s\", iData[3], iData[4], (iData[3] && iData[4]) ? (floatdiv(iData[3], iData[4])) : (0.0), szFetch);
        SendClientMessage(playerid, COLOR_YELLOW, i_str);
        format(i_str, sizeof(i_str), \"Regisztáció ideje: {\" #XCOLOR_BLUE \"}%s{\" #XCOLOR_GREEN \"}, Utuljára a szerveren: {\" #XCOLOR_BLUE \"}%s\", szRegDate, szLaston);
        SendClientMessage(playerid, COLOR_GREEN, i_str);
        return 1;
}
public OnPlayerDeath(playerid, killerid, reason)
{
        if(IsPlayerConnected(killerid) && killerid != INVALID_PLAYER_ID)
        {
                SetPVarInt(killerid, \"Kills\", GetPVarInt(killerid, \"Kills\") + 1);
        }
        SetPVarInt(playerid, \"Deaths\", GetPVarInt(playerid, \"Deaths\") + 1);
        return 1;
}
// Statisztika felmutató
CMD:stats(playerid, params[])
{
        format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_date`, `laston` FROM `players` WHERE `reg_id` = %d\", GetPVarInt(playerid, \"RegID\")); // Kiválasztjuk a reg_date és a laston mezõt
        mysql_function_query(1, g_szQuery, true, \"THREAD_Stats\", \"dd\", playerid, g_pQueryQueue[playerid]);
        return 1;
}
forward THREAD_Stats(playerid, queue);
public THREAD_Stats(playerid, queue)
{
        if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_Stats);
        new
                RegDate[24],
                Laston[24],
                szStyle[24],
                Kills = GetPVarInt(playerid, \"Kills\"),
                Deaths = GetPVarInt(playerid, \"Deaths\");
        cache_get_row(0, 0, RegDate);
        cache_get_row(0, 1, Laston);
        switch(GetPlayerFightingStyle(playerid))
        {
                case FIGHT_STYLE_NORMAL: szStyle = \"Normál\";
                case FIGHT_STYLE_BOXING: szStyle = \"Boxoló\";
                case FIGHT_STYLE_KUNGFU: szStyle = \"Kungfu\";
                case FIGHT_STYLE_KNEEHEAD: szStyle = \"Kneehead\";
                case FIGHT_STYLE_GRABKICK: szStyle = \"Grabkick\";
                case FIGHT_STYLE_ELBOW: szStyle = \"Elbow\";
        }
        // Üzenet elküldése
        format(i_str, sizeof(i_str), \"Név: %s, ID: %d, RegID: %d, Pénz: %d, Pont: %d\", pName(playerid), playerid, GetPVarInt(playerid, \"RegID\"), GetPlayerMoney(playerid), GetPlayerScore(playerid));
        SendClientMessage(playerid, COLOR_RED, i_str);
        format(i_str, sizeof(i_str), \"Ölések: %d, Halálok: %d, Arány: %.2f, Ütés Stílus: %s\", Kills, Deaths, (Kills && Deaths) ? (floatdiv(Kills, Deaths)) : (0.0), szStyle);
        SendClientMessage(playerid, COLOR_YELLOW, i_str);
        format(i_str, sizeof(i_str), \"Regisztáció ideje: {\" #XCOLOR_BLUE \"}%s{\" #XCOLOR_GREEN \"}, Utuljára a szerveren: {\" #XCOLOR_BLUE \"}%s\", RegDate, Laston);
        SendClientMessage(playerid, COLOR_GREEN, i_str);
        return 1;
}
/*
CMD:kill(playerid, params[])
{
        SetPlayerHealth(playerid, 0.0);
        return 1;
}
CMD:flag(playerid, params[])
{
        format(i_str, 128, \"Logged: %d, FirstSpawn: %d\", g_PlayerFlags{playerid} & e_LOGGED_IN, g_PlayerFlags{playerid} & e_FIRST_SPAWN);
        SendClientMessage(playerid, -1, i_str);
        return 1;
}
*/
CMD:changename(playerid, params[])
{
        ChangeNameDialog(playerid);
        return 1;
}
CMD:changepass(playerid, params[])
{
        ShowPlayerDialog(playerid, DIALOG_CHANGEPASS, DIALOG_STYLE_PASSWORD, \"Jelszóváltás\", \"Lentre írd be az új jelszavad! \\n\\n\", \"Változtatás\", \"Mégse\");
        return 1;
}
CMD:findplayer(playerid, params[])
{
        if(isnull(params)) return SendClientMessage(playerid, COLOR_RED, \"HASZNÁLAT: /findplayer <Játékos Névrészlet>\");
        if(strlen(params) > MAX_PLAYER_NAME) return SendClientMessage(playerid, COLOR_RED, \"HIBA: Túl hosszú a részlet, maximum 24 karakter lehet!\");
        format(g_szQuery, sizeof(g_szQuery), \"SELECT `name` FROM `players` WHERE `name` LIKE \'%s%s%s\'\", \"%%\", params, \"%%\");
        mysql_function_query(1, g_szQuery, true, \"THREAD_FindplayerDialog\", \"dsd\", playerid, params, g_pQueryQueue[playerid]);
        return 1;
}
forward THREAD_FindplayerDialog(playerid, reszlet[], queue);
public THREAD_FindplayerDialog(playerid, reszlet[], queue)
{
        if(g_pQueryQueue[playerid] != queue) return QUERY_COLLISION(THREAD_FindplayerDialog);
        new
            rows,
            fields;
        cache_get_data(rows, fields);
        if(!rows)
        {
                format(i_str, sizeof(i_str), \"Nincs találat a \'%s\' részletre!\", reszlet);
                SendClientMessage(playerid, COLOR_RED, i_str);
                return 1;
        }
        else if(rows > 180)
        {
                format(i_str, sizeof(i_str), \"A \'%s\' részletre több, mint 180 találad van! < %d >!\", reszlet, rows);
                SendClientMessage(playerid, COLOR_RED, i_str);
                return 1;
        }
        new
            x,
            szName[MAX_PLAYER_NAME];
        g_szDialogFormat[0] = EOS;
        for( ; x != rows; x++)
        {
                cache_get_row(x, 0, szName);
                strcat(g_szDialogFormat, szName);
                strcat(g_szDialogFormat, \"\\n\");
        }
        format(i_str, 128, \"Találatok a(z) \'%s\' részletre.. (%d)\", reszlet, x);
        ShowPlayerDialog(playerid, DIALOG_FINDPLAYER, DIALOG_STYLE_LIST, i_str, g_szDialogFormat, \"Megtekint\", \"Mégse\");
        return 1;
}
/////////////////////////////////////////
stock LoginDialog(playerid)
{
        format(i_str, sizeof(i_str), \"{\" #XCOLOR_WHITE \"}Bejelentkezés: {%06x}%s(%d)\", GetPlayerColor(playerid) >>> 8, pName(playerid), playerid);
        ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nTe már regisztálva vagy. Lentre írd be a jelszavad\", !\"Bejelentkezés\", !\"Mégse\");
        return 1;
}
stock RegisterDialog(playerid)
{
        format(i_str, sizeof(i_str), \"{\" #XCOLOR_WHITE \"}Regisztráció: {%06x}%s(%d)\", GetPlayerColor(playerid) >>> 8, pName(playerid), playerid);
        #if defined NINCS_REG_CSILLAG
                ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nItt még nem regisztráltál. Lentre írd be a jelszavad\", !\"Regisztáció\", !\"Mégse\");
        #else
                ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, i_str, !\"{\" #XCOLOR_GREEN \"}Üdvözöllek a \\n\\n{\" #XCOLOR_BLUE \"}My{\" #XCOLOR_YELLOW \"}SQL {\" #XCOLOR_GREEN \"}teszt szerveren! \\n\\nItt még nem regisztráltál. Lentre írd be a jelszavad\", !\"Regisztáció\", !\"Mégse\");
        #endif
        return 1;
}
/* Bejelentkezés */
stock LoginPlayer(playerid)
{
        new
                iPVarSet[6],
                szFetch[12],
                iRegID = GetPVarInt(playerid, \"LineID\");
        // Ha a line ID 0, tehát a MySQL nem adott vissza sorokat, akkor semmiképp sem jelentkezhez be!
        // Ennek nem szabadna elõfordulnia, de biztonság kedvéért teszek rá védelmet.
        if(!iRegID) return printf(\"HIBA: Rossz reg ID! Játékos: %s(%d) (regid: %d)\", pName(playerid), playerid, iRegID);
   
        SetPVarInt(playerid, \"RegID\", iRegID); // RegID-t beállítjuk
        cache_get_row(0, 0, szFetch); iPVarSet[0] = strval(szFetch); // RegID
        cache_get_row(0, 6, szFetch); iPVarSet[1] = strval(szFetch); // Money
        cache_get_row(0, 7, szFetch); iPVarSet[2] = strval(szFetch); // Score
        cache_get_row(0, 8, szFetch); iPVarSet[3] = strval(szFetch); // Kills
        cache_get_row(0, 9, szFetch); iPVarSet[4] = strval(szFetch); // Deaths
        cache_get_row(0, 10, szFetch); iPVarSet[5] = strval(szFetch); // Fightingstyle
        SetPVarInt(playerid, \"Cash\", iPVarSet[1]); // A pénzét egy PVar-ban tároljuk, mert a skinválasztásnál nemlehet a játékos pénzét állítani.
        SetPlayerScore(playerid, iPVarSet[2]);
        SetPVarInt(playerid, \"Kills\", iPVarSet[3]);
        SetPVarInt(playerid, \"Deaths\", iPVarSet[4]);
        SetPVarInt(playerid, \"Style\", iPVarSet[5]);
        g_PlayerFlags{playerid} |= e_LOGGED_IN;
        return 1;
}
stock SavePlayer(playerid, regid)
{
        if(IsPlayerNPC(playerid)) return 1;
        // Ha nincs bejelentkezve és még nem spawnolt le, akkor nem mentjük. Ezt ajánlatos itthagyni, mivel ezmiatt nekem sok bug keletkezett!
        if(g_PlayerFlags{playerid} & (e_LOGGED_IN | e_FIRST_SPAWN) == (e_LOGGED_IN | e_FIRST_SPAWN))
        {
                getdate(year, month, day);
                gettime(hour, minute, second);
                format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `laston` = \'%02d.%02d.%02d/%02d.%02d.%02d\', `money` = %d, `score` = %d, `kills` = %d, `deaths` = %d, `fightingstyle` = \'%d\' WHERE `reg_id` = %d\",
                year, month, day, hour, minute, second, GetPlayerMoney(playerid), GetPlayerScore(playerid), GetPVarInt(playerid, \"Kills\"), GetPVarInt(playerid, \"Deaths\"), GetPlayerFightingStyle(playerid),
                regid);
                mysql_function_query(1, g_szQuery, false, \"OnQueryFinish\", \"\");
                // %02d azt jelenti, hogyha a szám egyjegyû (1, 5, 7, stb... ), akkor tegyen elé egy 0-t. Pl: 05, 07.
                // Ezt általában idõre használják, mivel így \'érthetõbb\'.
                // Ez ugyanúgy mûködik %03d-vel %04d-vel, és így továb... ^
        }
        return 1;
}
stock pName(playerid)
{
        static // \"Helyi\" globális változó
                s_szName[MAX_PLAYER_NAME];
        GetPlayerName(playerid, s_szName, sizeof(s_szName));
        return s_szName;
}
forward OnQueryFinish();
public OnQueryFinish()
{
        return 1;
}
/* SQL Tábla */
/*
CREATE TABLE IF NOT EXISTS `connections` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `name` varchar(21) NOT NULL,
  `ip` varchar(16) NOT NULL,
  `serial` varchar(128) NOT NULL,
  `time` varchar(24) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `namechanges` (
  `id` smallint(5) NOT NULL AUTO_INCREMENT,
  `reg_id` mediumint(8) NOT NULL,
  `oldname` varchar(21) NOT NULL,
  `newname` varchar(21) NOT NULL,
  `time` varchar(24) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `reg_id` (`reg_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `namechanges_p` (
  `id` smallint(5) NOT NULL AUTO_INCREMENT,
  `reg_id` mediumint(8) NOT NULL,
  `name` varchar(24) NOT NULL,
  `oldpass` varchar(21) NOT NULL,
  `newpass` varchar(21) NOT NULL,
  `time` varchar(24) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `reg_id` (`reg_id`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
CREATE TABLE IF NOT EXISTS `players` (
  `reg_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(24) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `ip` varchar(20) NOT NULL,
  `pass` varchar(20) CHARACTER SET utf8 COLLATE utf8_bin NOT NULL,
  `reg_date` varchar(24) NOT NULL,
  `laston` varchar(24) NOT NULL,
  `money` int(11) NOT NULL DEFAULT \'0\',
  `score` int(11) NOT NULL DEFAULT \'0\',
  `kills` mediumint(11) unsigned NOT NULL DEFAULT \'0\',
  `deaths` mediumint(11) unsigned NOT NULL DEFAULT \'0\',
  `fightingstyle` enum(\'4\',\'5\',\'6\',\'7\',\'15\',\'16\') NOT NULL DEFAULT \'4\',
  PRIMARY KEY (`reg_id`),
  KEY `name` (`name`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
CREATE TABLE IF NOT EXISTS `queryerrors` (
  `id` mediumint(7) NOT NULL AUTO_INCREMENT,
  `errorid` int(11) NOT NULL,
  `error` text NOT NULL,
  `resultid` mediumint(7) NOT NULL,
  `extraid` mediumint(7) NOT NULL,
  `callback` varchar(512) NOT NULL,
  `sql_query` varchar(512) NOT NULL,
  `connectionHandle` mediumint(7) NOT NULL,
  `time` varchar(24) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `errorid` (`errorid`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1;
*/

Nem elérhető JBauer

  • 1407
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #222 Dátum: 2013. Március 22. - 19:31:37 »
+2 Show voters
Végül is az elõzõ oldalon is csak 2x volt kint.

Nem elérhető kurta999

  • 2759
  • Éllő fédisznó
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #223 Dátum: 2013. Szeptember 02. - 14:37:30 »
0 Show voters
Érdemes lenne felújítani a legújabb SQL pluginra, vagy már inkább ne is foglalkozzak vele?
Mert ha nincs érdeklõdés, akkor nem pazarolom rá az idõmet.

Nem elérhető ZyZu.

  • Globális moderátor
  • 8939
  • my turbo diesel forum
  • Discord: ZyZu.
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #224 Dátum: 2013. Szeptember 02. - 17:20:27 »
0 Show voters
De csináld meg.. ha van olyan sok idõd akkor megírhatnád még r6 -ra is :D  :whistle: De én hasznát venném.  ;)

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal