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

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 #105 Dátum: 2012. február 26. - 18:44:13 »
+1 Show voters
Próbáld ki ezt, bár ebben még elõfordulhatnak hibák, nem teszteltem..
 

// MySQL Regisztrációs rendszer By kurta999
// Verzió: 1.0 R4
// Last Update: 2012.02.24
#include <a_samp>
#include <a_mysql> // http://forum.sa-mp.com/showthread.php?t=56564
#include <sscanf2> // http://forum.sa-mp.com/showthread.php?t=120356
#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_szLine[128 +1],
i_str[128 +1],
tmp[128 +1],
g_szName[24 +1],
g_szIP[16 +1];
// MySQL regisztrációs rendszer By kurta999
/*  Forrás: Wiki
mysql_query               Egy megadott \'parancs\' elküldése
mysql_store_result         Ez akkor kell, ha tárolni szertnénk azokat az adatokat, amiket a lekérdedés visszadott.  (SELECT, stb.. )
mysql_free_result()         Ez a store_result után kell, felszabadítja a memóriát, amit a store_result() lefoglalt.
mysql_num_rows            Az SQL sorok számával tér vissza (SELECT & SHOW)
mysql_affected_rows         Az SQL sorok számával tér vissza (INSERT, UPDATE, REPLACE & DELETE)
mysql_fetch_row            A kiválasztott sort beleírjuk egy megadott karakterláncba, egy megadott elválasztóval, alapból ez: |
mysql_insert_id            INSTER INTO után visszatér a sor azonosítójával (Csak akkor, ha az auto_increment)
*/
// 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\"
#define COLOR_GREY             0x375FFFFF
#define COLOR_GREEN          0x33FF33AA
#define COLOR_RED             0xFF0000AA
#define COLOR_YELLOW         0xFF9900AA
#define COLOR_WHITE          0xFFFFFFAA
#define COLOR_BLUE             0x33CCFFAA
#define COLOR_LIGHTBLUE       0x33CCFFAA
#define COLOR_BASIC          0x0066FFAA
#define COLOR_SYSTEM          0xEFEFF7AA
#define COLOR_LIGHTBLUE       0x33CCFFAA
#define COLOR_PINK             0xFF66FFAA
#define XCOLOR_GREEN          33FF33
#define XCOLOR_RED             FF0000
#define XCOLOR_BLUE            33CCFF
#define XCOLOR_YELLOW         FF9900
#define XCOLOR_WHITE         FFFFFF
// Dialóg ID-k
#define DIALOG_LOGIN         16770
#define DIALOG_REGISTER         16771
#define DIALOG_CHANGENAME      16772
#define DIALOG_CHANGEPASS      16773
#define DIALOG_FINDPLAYER      16774
// 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); // Ha élesbe futtatod, akkor ezt SEMMIKÉPP se hagy bekapcsolva! Ez az egész rendszer sebességét kb. ötszörösére csökkenti, ha nem tízszeresére..
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!\");
mysql_reconnect(); // Újrakapcsolódás engedélyezése
     return 1;
}
public OnFilterScriptExit()
{
mysql_close();
return 1;
}
public OnPlayerConnect(playerid)
{
// Automatikus bejelentkezés
if(!IsPlayerNPC(playerid)) // Csak játékosokra vonatkozik
{
SetPVarInt(playerid, \"RegID\", -1);
SetPVarInt(playerid, \"FristSpawn\", 1);
new
   iRegID;
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_query(g_szQuery);
// Autologin
format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `ip` = \'%s\'\", pName(playerid), g_szIP);
mysql_query(g_szQuery);
mysql_store_result();
if(mysql_num_rows() != 0) // Ha a sor nem üres
{
   mysql_fetch_row(g_szLine);
   mysql_free_result();
   sscanf(g_szLine, \"p<|>d{s[24]s[16]s[30]s[24]s[24]ddddd}\", iRegID);
   SetPVarInt(playerid, \"RegID\", iRegID);
   // printf(\"%d\", iRegID);
   LoginPlayer(playerid, g_szLine);
   SendClientMessage(playerid, COLOR_GREEN, \"Automatikusan bejelentkeztél!\");
}
else // Ha üres, akkor itt lesz free_result, mer az elõzõ részünk akkor nem fut le és nem lesz neki ott free_result..
{
   mysql_free_result();
}
        SetPlayerColor(playerid, (random(0xFFFFFF) << 8) | 0xFF); // GetPlayerColor() javítása
}
     return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
return (GetPVarType(playerid, \"LoggedIn\")) ? (SavePlayer(playerid)) : (1);
}
public OnPlayerRequestClass(playerid, classid)
{
    if(!GetPVarType(playerid, \"LoggedIn\")) // Ha nincs bejelentkezve, ez a lekérés ide nagyon fontos mert minden gobnyomásnál felmutatná a skiválasztóban.
    {
format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\'\", pName(playerid)); // Kiválasztjuk, a játékos nevét
mysql_query(g_szQuery);
mysql_store_result();
if(mysql_num_rows() != 0) // Ha a sorok száma nem 0 ( nem üres )
{
   LoginDialog(playerid); // Akkor login
}
else // Ellentétben
{
   RegisterDialog(playerid); // Register
}
mysql_free_result();
}
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
if(!IsPlayerNPC(playerid))
{
if(!GetPVarType(playerid, \"LoggedIn\"))
    {
   format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid));
   mysql_query(g_szQuery);
   mysql_store_result();
   if(mysql_num_rows() != 0)
   {
      LoginDialog(playerid);
   }
   else
   {
      RegisterDialog(playerid);
   }
   mysql_free_result();
   return 0;
}
}
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(GetPVarType(playerid, \"FristSpawn\"))
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, GetPVarInt(playerid, \"Cash\"));
DeletePVar(playerid, \"FristSpawn\");
DeletePVar(playerid, \"Cash\");
}
// Ü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(GetPVarType(playerid, \"LoggedIn\"))
   {
      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;
   }
   mysql_real_escape_string(inputtext, tmp); // \"Átvisszzük a karaktereket MySQL formába, hogy nemhogy hiba lesz\"... ( lol, ez aztán kurva értelmes :P )
   format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `pass` COLLATE `utf8_bin` LIKE \'%s\'\", pName(playerid), tmp);
   mysql_query(g_szQuery);
   mysql_store_result();
   if(mysql_num_rows() != 1)
   {
                mysql_free_result();
               
      SendClientMessage(playerid, COLOR_RED, \"HIBA: Rossz jelszó.\");
      LoginDialog(playerid);
      return 1;
   }
   else
   {
      new
         iRegID;
      mysql_fetch_row(g_szLine);
      mysql_free_result();
      sscanf(g_szLine, \"p<|>d{s[24]s[16]s[30]s[24]s[24]ddddd}\", iRegID);
      SetPVarInt(playerid, \"RegID\", iRegID);
      LoginPlayer(playerid, g_szLine);
   }
   // Az IP-t beállítjuk a jelenlegi IP-re, hogy az autologin menjen. A GetPlayerIp OnPlayerDisconnect-nél nem mûködik! (255.255.255.255-el tér mindig vissza..)
   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_query(g_szQuery);
   SendClientMessage(playerid, COLOR_GREEN, \"Sikeresen bejelentkeztél!\");
}
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;
   }
            new
                len = strlen(inputtext);
   if(!(3 <= len <= 20))
   {
      SendClientMessage(playerid, COLOR_RED, \"Rossz jelszó hosszúság! 3 - 20\");
      RegisterDialog(playerid);
      return 1;
   }
   for(new i; i < len; i++)
    {
      if(inputtext == \'|\') return SendClientMessage(playerid, COLOR_RED, \"Ezt a jelet {\" #XCOLOR_BLUE \"}| {\" #XCOLOR_RED \"}nem használhatod, mert ez a MySQL elválasztó!\");
   }
   format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid));
   mysql_query(g_szQuery);
   mysql_store_result();
   if(mysql_num_rows() != 0)
   {
                mysql_free_result();
               
      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!\");
      Kick(playerid);
      return 1;
   }
   mysql_free_result();
   getdate(year, month, day);
   gettime(hour, minute, second);
   GetPlayerIp(playerid, g_szIP, sizeof(g_szIP));
   mysql_real_escape_string(inputtext, tmp); // Ez arra van, hogy ha speciális karatereket tartalmaz, akk azt átcsinálja az SQL-nek érthetõre
   // A jeszavak nincsenek titkosítva...
   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, tmp, year, month, day, hour, minute, second, year, month, day, hour, minute, second);
   mysql_query(g_szQuery);
   SetPVarInt(playerid, \"RegID\", mysql_insert_id()); // Játékos Regisztrációs ID-jét beállítuk arra, ameik sorba írtunk elõbb ( INSERT INTO )
   SetPVarInt(playerid, \"LoggedIn\", 1);
   format(i_str, sizeof(i_str), \"Sikeresen regisztráltál! A jelszavad: {\" #XCOLOR_RED \"}%s. {\" #XCOLOR_GREEN \"}Felhasználó ID: {\" #XCOLOR_BLUE \"}%d\", tmp, GetPVarInt(playerid, \"RegID\"));
   SendClientMessage(playerid, COLOR_GREEN, i_str);
   SendClientMessage(playerid, COLOR_PINK, \"Ennyi lenne a MySQL regisztáció {\" #XCOLOR_BLUE \"}:)\");
}
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_query(g_szQuery);
   mysql_store_result();
   if(mysql_num_rows() != 0)
   {
                mysql_free_result();
               
      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;
   }
   else
   {
      mysql_free_result();
   }
   new
      pname[MAX_PLAYER_NAME + 1],
      pRegID = GetPVarInt(playerid, \"RegID\");
   GetPlayerName(playerid, pname, sizeof(pname));
   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, pname, inputtext, year, month, day, hour, minute, second);
   mysql_query(g_szQuery);
   format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `name` = \'%s\' WHERE `reg_id` = %d\", inputtext, pRegID);
   mysql_query(g_szQuery);
   format(i_str, sizeof(i_str), \"Sikeresen átváltottad a neved! Új neved: {\" #XCOLOR_WHITE \"}%s.\", inputtext);
            SendClientMessage(playerid, COLOR_YELLOW, i_str);
}
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;
   }
   new
       pRegID = GetPVarInt(playerid, \"RegID\");
   format(g_szQuery, sizeof(g_szQuery), \"SELECT `pass` FROM `players` WHERE `reg_id` = %d\", pRegID);
   mysql_query(g_szQuery);
   mysql_store_result();
   mysql_fetch_row(i_str);
   mysql_free_result();
   mysql_real_escape_string(inputtext, tmp);
   format(g_szQuery, sizeof(g_szQuery), \"UPDATE `players` SET `pass` = \'%s\' WHERE `reg_id` = %d\", tmp, pRegID);
   mysql_query(g_szQuery);
   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), i_str, tmp, year, month, day, hour, minute, second);
   mysql_query(g_szQuery);
   format(i_str, sizeof(i_str), \"Sikeresen átállítotad a jelszavad! Új jelszavad: {\" #XCOLOR_GREEN \"}%s\", tmp);
            SendClientMessage(playerid, COLOR_YELLOW, i_str);
}
case DIALOG_FINDPLAYER:
{
   if(!response)
      return 0;
   format(g_szQuery, sizeof(g_szQuery), \"SELECT * FROM `players` WHERE `name` = \'%s\'\", inputtext);
   mysql_query(g_szQuery);
   mysql_store_result();
   mysql_fetch_row(g_szLine);
   mysql_free_result();
   new
       pRegID,
      RegDate[24],
      Laston[24],
      Cash,
      Score,
      Kills,
      Deaths,
      Style,
      Float:Ratio,
      Changes[2];
   sscanf(g_szLine, \"p<|>d{s[24]s[16]s[30]}s[24]s[24]ddddd\", pRegID, RegDate, Laston, Cash, Score, Kills, Deaths, Style);
   // Arány kiszámítása
   if(Deaths && Kills) // Ha az ölések és a halálok száma nem nulla, mivel a 0-val való osztásnak nincs értelme és bebugol a format()
   {
      Ratio = floatdiv(Kills, Deaths);
   }
   else
   {
      Ratio = 0.0;
   }
   switch(GetPlayerFightingStyle(playerid))
   {
       case FIGHT_STYLE_NORMAL: tmp = \"Normál\";
         case FIGHT_STYLE_BOXING: tmp = \"Boxoló\";
         case FIGHT_STYLE_KUNGFU: tmp = \"Kungfu\";
      case FIGHT_STYLE_KNEEHEAD: tmp = \"Kneehead\";
      case FIGHT_STYLE_GRABKICK: tmp = \"Grabkick\";
      case FIGHT_STYLE_ELBOW: tmp = \"Elbow\";
   }
   // Megszámlálás
   format(g_szQuery, sizeof(g_szQuery), \"SELECT COUNT( reg_id ) FROM `namechanges` WHERE `reg_id` = %d\", pRegID);
   mysql_query(g_szQuery);
   mysql_store_result();
   Changes[0] = mysql_fetch_int();
   mysql_free_result();
   format(g_szQuery, sizeof(g_szQuery), \"SELECT COUNT( reg_id ) FROM `namechanges_p` WHERE `reg_id` = %d\", pRegID);
   mysql_query(g_szQuery);
   mysql_store_result();
   Changes[1] = mysql_fetch_int();
   mysql_free_result();
   // Üzenet elküldése
   format(i_str, sizeof(i_str), \"Név: %s, ID: %d, RegID: %d, Pénz: %d, Pont: %d\", inputtext, playerid, pRegID, Cash, Score);
   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, Ratio, tmp);
   SendClientMessage(playerid, COLOR_YELLOW, i_str);
   format(i_str, sizeof(i_str), \"Névváltások: %d, Jelszóváltások: %d\", Changes[0], Changes[1]);
   SendClientMessage(playerid, COLOR_PINK, 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;
}
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;
}
public OnQueryError(errorid, error[], resultid, extraid, callback[], sql_query[], connectionHandle)
{
print(sql_query);
}
// Statisztika felmutató
CMD:stats(playerid, params[])
{
new
RegDate[24],
Laston[24],
Kills = GetPVarInt(playerid, \"Kills\"),
Deaths = GetPVarInt(playerid, \"Deaths\"),
Float:Ratio,
Changes[2],
pRegID = GetPVarInt(playerid, \"RegID\");
format(g_szQuery, sizeof(g_szQuery), \"SELECT `reg_date`, `laston` FROM `players` WHERE `reg_id` = %d\", pRegID); // Kiválasztjuk a reg_date és a laston mezõt
mysql_query(g_szQuery);
mysql_store_result();
mysql_fetch_row(g_szLine); // Beleírjuk a \"g_szLine\" karakterláncba
mysql_free_result();
sscanf(g_szLine, \"p<|>s[24]s[24]\", RegDate, Laston);
// Arány kiszámítása
if(Deaths && Kills) // Ha az ölések és a halálok száma nem nulla, mivel a 0-val való osztásnak nincs értelme és bebugol a format()
{
Ratio = floatdiv(Kills, Deaths);
}
else
{
Ratio = 0.0;
}
switch(GetPlayerFightingStyle(playerid))
{
    case FIGHT_STYLE_NORMAL: tmp = \"Normál\";
      case FIGHT_STYLE_BOXING: tmp = \"Boxoló\";
      case FIGHT_STYLE_KUNGFU: tmp = \"Kungfu\";
case FIGHT_STYLE_KNEEHEAD: tmp = \"Kneehead\";
case FIGHT_STYLE_GRABKICK: tmp = \"Grabkick\";
case FIGHT_STYLE_ELBOW: tmp = \"Elbow\";
}
// Megszámlálás
format(g_szQuery, sizeof(g_szQuery), \"SELECT COUNT( reg_id ) FROM `namechanges` WHERE `reg_id` = %d\", pRegID);
mysql_query(g_szQuery);
mysql_store_result();
Changes[0] = mysql_fetch_int();
mysql_free_result();
format(g_szQuery, sizeof(g_szQuery), \"SELECT COUNT( reg_id ) FROM `namechanges_p` WHERE `reg_id` = %d\", pRegID);
mysql_query(g_szQuery);
mysql_store_result();
Changes[1] = mysql_fetch_int();
mysql_free_result();
// Ü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, Ratio, tmp);
SendClientMessage(playerid, COLOR_YELLOW, i_str);
format(i_str, sizeof(i_str), \"Névváltások: %d, Jelszóváltások: %d\", Changes[0], Changes[1]);
SendClientMessage(playerid, COLOR_PINK, 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: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[])
{
new
    count;
if(sscanf(params, \"s[128]\", i_str)) return SendClientMessage(playerid, COLOR_RED, \"HASZNÁLAT: /findplayer <Játékos Névrészlet>\");
//                                                                              format() trükk, bele kell írni valahogy a százalékot ( % ) is
format(g_szQuery, sizeof(g_szQuery), \"SELECT `name` FROM `players` WHERE `name` LIKE \'%s%s%s\'\", \"%%\", i_str, \"%%\");
mysql_query(g_szQuery);
mysql_store_result();
count = mysql_num_rows();
if(!count)
{
mysql_free_result();
format(i_str, sizeof(i_str), \"Nincs találat a \'%s\' részletre!\", i_str);
SendClientMessage(playerid, COLOR_RED, i_str);
return 1;
}
else if(count > 130)
{
mysql_free_result();
format(i_str, sizeof(i_str), \"A \'%s\' részletre több, mint 130 találad van! < %d >!\", i_str, count);
SendClientMessage(playerid, COLOR_RED, i_str);
return 1;
}
g_szQuery[0] = EOS; // Kiûrítjük a karakterláncot
while(mysql_fetch_row(g_szName))
{
strcat(g_szQuery, g_szName); // Hozzáadjuk a \"g_szQuery\" karakterlánchoz a \"g_szName\" karakterláncot.
strcat(g_szQuery, \"\\n\"); // Hozzáadjuk a \"g_szQuery\" karakterlánchoz az \"\\n\" karaktert. Ez eredményezi az új sort.
}
    mysql_free_result();
format(tmp, 128, \"Találatok a(z) \'%s\' részletre..\", i_str);
ShowPlayerDialog(playerid, DIALOG_FINDPLAYER, DIALOG_STYLE_LIST, tmp, g_szQuery, \"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, sor[])
{
new
PVarSet[5];
sscanf(sor,   \"p<|>{ds[24]s[16]s[30]s[24]s[24]}ddddd\", PVarSet[0], PVarSet[1], PVarSet[2], PVarSet[3], PVarSet[4]);
// printf(\"Cash: %d\", PVarSet[0]);
SetPVarInt(playerid, \"Cash\", PVarSet[0]); // 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, PVarSet[1]);
SetPVarInt(playerid, \"Kills\", PVarSet[2]);
SetPVarInt(playerid, \"Deaths\", PVarSet[3]);
SetPVarInt(playerid, \"Style\", PVarSet[4]);
SetPVarInt(playerid, \"LoggedIn\", 1);
return 1;
}
SavePlayer(playerid)
{
if(!IsPlayerNPC(playerid))
{
          if(!GetPVarType(playerid, \"LoggedIn\")) return 0; // Ha nincs bejelentkezve, akkor nem mentjük. Ezt ajánlatos itthagyni, mivel ezmiatt nekem sok bug keletkezett!
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),
GetPVarInt(playerid, \"RegID\"));
mysql_query(g_szQuery);
// %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)
{
GetPlayerName(playerid, g_szName, sizeof(g_szName));
return g_szName;
}
/* 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;
*/

MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #106 Dátum: 2012. február 27. - 08:15:33 »
0 Show voters
Köszi szépen, lefutott még nem teszteltem de remélem minden jó lesz.

Nem elérhető [sdc]skyline

  • 1333
  • ςκyΙιηε
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #107 Dátum: 2012. március 18. - 20:56:39 »
0 Show voters
Nekem annyi  aproblémám, hogy a samp-server.exe be kií rja hogy beloadolta a scriptet. De ha be lépek nem nyitja ki a dialogot.
Elõre is ksözönöm!

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 #108 Dátum: 2012. március 19. - 06:44:54 »
0 Show voters
Ha csak simán azt írja, hogy \"Filterscript %s loaded\", és a következõ sort nem \"print(!\"MySQL: Kapcsolódás erre a címre \" MYSQL_HOST \" \" MYSQL_USER \" nevû felhasználóval. \\nAdatbázis neve: \" MYSQL_DB \".\");\", akkor nemjó!
Valamelyik pluginod hiányzik ebben az esetben.

Nem elérhető [sdc]skyline

  • 1333
  • ςκyΙιηε
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #109 Dátum: 2012. március 19. - 07:43:07 »
0 Show voters
Akkor biztos a plugin.  Köszönöm!

Nem elérhető totar

  • 425
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #110 Dátum: 2012. április 21. - 18:11:53 »
0 Show voters
Pls Kurta frissítsd már a reg rendszert, mert így nem tudom írni a modot...
és még azt is írd már le, hogy
 

így lelehet kérdezni a sorban lévõ dolgokat, és akkor azt kell használni, hogy mysql_function_query(1, query, false, \"OnQueryFinish\", \"\");
mysql_num_rows()
while(mysql_fetch_row(Line))
muszáj ezt használni, amit írtál elõzõ topicba...:
cache_get_data(rows, fields); // Lekérjük a lekérdezés után kapott értékeket. Sorok és a mezõk számát.
for(new i; i < rows; i++) // Minden sorra vonatkozik.
{
cache_get_row(i, 0, szMusicName); // Lekérjük azt a sort, ami az \"i\" változó értéke, ebben a sorban pedig a nulladik mezõt. Ezt bele a \"szMusicName\" tömbbe.
SendClientMessage(playerid, 0x33FF33AA, szMusicName);
}

MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #111 Dátum: 2012. április 22. - 08:55:26 »
0 Show voters
Részletesen leírtál mindent a szöveg alapján észre lehet venni hogy tökéletes!: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 #112 Dátum: 2012. április 22. - 17:09:56 »
0 Show voters
Ha kijön a 0.3e akkor befejezem a szerveremen az új módot és frissítem ezt.
Átírom az R7-ben található gyorsítótárra, meg még pár apróságot megcsinálok, ami jelenleg elég nagy ökörség benne.

Nem elérhető Erik3333

  • 945
  • SMF | phpBB | TS3 | PHP | HTML | CSS | JS | PAWN | JAVA
    • Profil megtekintése
MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #113 Dátum: 2012. április 22. - 17:11:00 »
0 Show voters
Nem lehetne bele admin rendszert rakni?

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 #114 Dátum: 2012. április 22. - 17:13:38 »
0 Show voters
Azt bele tudod rakni magadnak.
Rengeteg munka, és mindenki más admin rendszert használ.

MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #115 Dátum: 2012. április 22. - 18:13:52 »
0 Show voters
Idézetet írta: Erik3333 date=1335107460\" data-ipsquote-contentapp=\"forums\" data-ipsquote-contenttype=\"forums\" data-ipsquote-contentid=\"3791\" data-ipsquote-contentclass=\"forums_Topic
Nem lehetne bele admin rendszert rakni?
 
Ez engem is érdekelne.

MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #116 Dátum: 2012. április 24. - 13:54:23 »
0 Show voters
                   HaliÓ
Még ujj vagyok a Fórumon és a Scriptelés világát is most kezdtem El..
 
Valakit kérek szépen Magyarázza el ezt nekem hogyan is kell azt megoldani PoNtról POntra ... Mert Nemértem hogyan is csináljam vagy mit kezdjek azokkal a Pluginokkal.. Hogy ez a Regisztráció/Belépés müködjön.. !!

Dupla hozzászólás automatikusan összefûzve. ( 2012. április 25. - 16:12:36 )

megpróbáltam a systemet és egy Error-t irt nekem :
ebben a sorban van a hiba:
public OnQueryError                                                     
{                                                                                   
print(sql_query);                                                 
}                                                                                 
                                                                                   
--------------------------------------------------------------------
Run/:
d:\\samp\\SA-MPS~1\\GAMEMO~1\\dh.pwn(526) : error 001: expected token: \";\", but found \"{\"
Pawn compiler 3.2.3664           Copyright © 1997-2006, ITB CompuPhase
1 Error.
De Várnám valakinek a Commentét aki leirja nekem hogy hogyan csináljam meg a reg/belépés systemet hogy tökéletesen müködjön .!
« Utoljára szerkesztve: 2012. április 25. - 16:15:43 írta Neax_Neax »

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 #117 Dátum: 2012. április 28. - 09:19:27 »
0 Show voters
Amíg nem adtam ki az új verziót, addig ezt ajánlom elolvasni.
http://forum.sa-mp.com/showthread.php?t=337810

MySQL Regisztráció rendszer v3.0 (R38-R39 plugin támogatás)
« Válasz #118 Dátum: 2012. április 28. - 11:28:34 »
0 Show voters
Én Ezt a regisztrrációs rendszert akarnám megcsinálni De nemtudom hogyan kell  :-[  :hmmm: 
kurta99 lécci magyarázd nekem el...
vagy itt hozászólásban vagy :
skype : bihari.dani1
msn : [email protected]

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 #119 Dátum: 2012. április 28. - 14:30:37 »
0 Show voters
Írd le ide a témába, hogy mit nem értesz, vagy, hogy hol akadtál el.
Arra van ez, msn-en meg skypon ne szedjen fel senki se segítségért, mert nem válaszolok.

 

SimplePortal 2.3.7 © 2008-2024, SimplePortal