De akk a wamphoz kicsit értesz, nem ? xD
More, most meg nemmegy a wampom :@
Ittvan, elvileg menni kéne, a módomból szedtem ki:
#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>
new year,
month,
day,
hour,
minute,
second;
// Stringeket egyszer hozom csak létre, hogy kevesebb meriát fogyassztjon.
new query[128],
line[128],
//i_str[128],
tmp[128],
name[24],
ip[16];
// MySQL regisztrációs rendszer By kurta999
/*
mysql_query Egy megadott \'parancs\' elküldése
mysql_store_result Ez akkor kell, hogy ha ezeket használjuk: SELECT, INSERT INTO
mysql_free_result(); Ez a store_result után kell, \'szabad eltérés\' xD
mysql_num_rows SQL sorok száma
mysql_fetch_row A kiválasztott sort beleírjuk egy megadott karakterláncba, egy megadott elválasztóval, alapból ez: |
*/
// 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
public OnFilterScriptInit()
{
// MySQL
print(\"MySQL Kapcsolódás erre a címre \" MYSQL_HOST \" \" MYSQL_USER \" nevû felhasználóval. Adatbázis neve: \" MYSQL_DB \".\");
mysql_debug(1);
mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PASS);
if(mysql_ping() != 1)
{
print(\"MySQL Kapcsolódás sikertelen! (\" MYSQL_HOST \")\");
print(\"MySQL Újrakapcsolódás! (\" MYSQL_HOST \")\");
mysql_reconnect();
return 1;
}
print(\"MySQL Kapcsolódás elfogadva!\" MYSQL_HOST \"\");
print(\"MySQL Adatbázis \" MYSQL_DB \" kiválasztva!\");
return 1;
}
public OnFilterScriptExit()
{
mysql_close();
return 1;
}
public OnPlayerConnect(playerid)
{
SetPVarInt(playerid, \"LoggedIn\", 0);
SetPVarInt(playerid, \"RegID\", -1);
// Automatikus bejelentkezés
if(!IsPlayerNPC(playerid))
{
new MyRegID;
GetPlayerIp(playerid, ip, sizeof(ip));
// Autologin
format(query, sizeof(query), \"SELECT * FROM `players` WHERE `name` = \'%s\' AND `ip` = \'%s\'\", pName(playerid), ip);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows() != 0) // Ha a sor nem üres
{
mysql_fetch_row(line);
mysql_free_result();
sscanf(line, \"p<|>{ds[24]s[20]s[30]s[30]}d\", MyRegID);
SetPVarInt(playerid, \"RegID\", MyRegID);
LoginPlayer(playerid, line);
SendClientMessage(playerid, COLOR_GREEN, \"Automatikusan bejelentkeztél.\");
}
}
return 1;
}
public OnPlayerDisconnect(playerid, reason)
{
if(GetPVarInt(playerid, \"LoggedIn\"))
{
SavePlayer(playerid);
}
return 1;
}
public OnPlayerRequestClass(playerid, classid)
{
if(!GetPVarInt(playerid, \"LoggedIn\")) // Ha nincs bejelentkezve, ez a lekérés ide nagyon fontos mert minden gobnyomásnál felmutatná a skiválasztóban.
{
format(query, sizeof(query), \"SELECT * FROM `players` WHERE `name` = \'%s\'\", pName(playerid)); // Kiválasztjuk, a játékos nevét
mysql_query(query);
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 OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
new Pass[32], MyRegID;
if(dialogid == 1)
{
if(response)
{
if(GetPVarInt(playerid, \"LoggedIn\"))
{
SendClientMessage(playerid, COLOR_RED, \"Már be vagy jelentkezve.\");
return 1;
}
if(!strlen(inputtext[0]))
{
SendClientMessage(playerid, COLOR_RED, \"Nem írtál be semilyen jelszót!\");
LoginDialog(playerid);
return 1;
}
format(query, sizeof(query), \"SELECT * FROM `players` WHERE `name` = \'%s\'\", pName(playerid));
mysql_query(query);
mysql_store_result();
mysql_fetch_row(line);
mysql_free_result();
sscanf(line, \"p<|>d{s[24]s[20]}s[30]{s[30]s[30]d}\", MyRegID, Pass);
SetPVarInt(playerid, \"RegID\", MyRegID);
if(!strcmp(inputtext, Pass))
{
LoginPlayer(playerid, Pass);
}
else
{
SendClientMessage(playerid, COLOR_RED, \"HIBA: Rossz jelszó.\");
return 1;
}
// Az IP-t beállítjuk a jelenlegi IP-re, hogy az autologin menjen. A GetPlayerIp OnPlayerDisconnect-nél nem mûködik ( szarsággal tér vissza )
GetPlayerIp(playerid, ip, sizeof(ip));
format(query, sizeof(query), \"UPDATE `players` SET `ip` = \'%s\' WHERE `reg_id` = %d\", ip, GetPVarInt(playerid, \"RegID\"));
mysql_query(query);
SendClientMessage(playerid, COLOR_GREEN, \"Sikeresen bejelentkeztél.\");
}
else
{
LoginDialog(playerid);
}
}
if(dialogid == 2)
{
if(response)
{
if(!strlen(inputtext[0]))
{
SendClientMessage(playerid, COLOR_RED, \"Nem írtál be semilyen jelszót!\");
RegisterDialog(playerid);
return 1;
}
if(strlen(inputtext) < 3 || strlen(inputtext) > 20)
{
SendClientMessage(playerid, COLOR_RED, \"Rossz jelszó hosszúság! 3 - 20\");
RegisterDialog(playerid);
return 1;
}
format(query, sizeof(query), \"SELECT `reg_id` FROM `players` WHERE `name` = \'%s\'\", pName(playerid));
mysql_query(query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
return 1;
}
mysql_free_result();
getdate(year, month, day);
gettime(hour, minute, second);
GetPlayerIp(playerid, ip, sizeof(ip));
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(query, sizeof(query), \"INSERT INTO `players`(reg_id, name, ip, pass, reg_date) VALUES(0, \'%s\', \'%s\', \'%s\', %d.%d.%d/%d.%d.%d)\", pName(playerid), ip, tmp, year, month, day, hour, minute, second);
mysql_query(query);
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 )
SendClientFormatMessage(playerid, COLOR_GREEN, \"Sikeresen regisztráltál! A jelszavad: %s. Regisztráció ID: %d\", tmp, GetPVarInt(playerid, \"RegID\"));
SendClientMessage(playerid, COLOR_PINK, \"Ennyi lenne a MySQL regisztáció :D\");
}
else
{
RegisterDialog(playerid);
}
return 1;
}
return 1;
}
// Statisztika felmutató
CMD:stats(playerid)
{
SendClientFormatMessage(playerid, COLOR_GREEN, \"Név: %s, ID: %d, RegID: %d, Pénz: %d\", pName(playerid), playerid, GetPVarInt(playerid, \"RegID\"), GetPlayerMoney(playerid));
return 1;
}
stock LoginDialog(playerid)
{
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_INPUT, \"Bejelentkezés\",\"Üdvözöllek a \\n\\nMySQL teszt szerveren, \\n\\n Te már regisztálva vagy. Lentre írd be a jelszavad\", \"Bejelentkezés\", \"Mégse\");
return 1;
}
stock RegisterDialog(playerid)
{
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, \"Regisztráció\",\"Üdvözöllek a \\n\\nMySQL teszt szerveren, \\n\\n Itt még nem regisztráltál. Lentre írd be a jelszavad\", \"Regisztáció\", \"Mégse\");
return 1;
}
/* Bejelentkezés */
stock LoginPlayer(playerid, result_line[])
{
new PVarSet[1][MAX_PLAYERS]; // Direkt raktam rá MAX_PLAYERS értéket, mert nekem aznélkül keveredett...
sscanf(result_line, \"p<|>{ds[24]s[20]s[30]s[30]s[30]}d\", PVarSet[0][playerid]);
GivePlayerMoney(playerid, PVarSet[0][playerid]);
SetPVarInt(playerid, \"LoggedIn\", 1);
return 1;
}
SavePlayer(playerid)
{
if(!GetPVarInt(playerid, \"LoggedIn\")) return 0; // Ha nincs bejelentkezve, akk nem mentjuk, ezt ajánlatos itthagyni...
if(!IsPlayerNPC(playerid))
{
getdate(year, month, day);
gettime(hour, minute, second);
format(query, sizeof(query), \"UPDATE `players` SET `laston` = \'%s\', `money` = %d WHERE `reg_id` = %d\",
year, month, day, hour, minute, second, GetPlayerMoney(playerid),
GetPVarInt(playerid, \"RegID\") );
mysql_query(query);
}
return 1;
}
stock pName(playerid)
{
GetPlayerName(playerid, name, sizeof(name));
return name;
}
/*
CREATE TABLE IF NOT EXISTS `players` (
`reg_id` smallint(7) NOT NULL auto_increment,
`name` varchar(24) NOT NULL,
`ip` varchar(20) NOT NULL,
`pass` varchar(20) NOT NULL,
`reg_date` varchar(24) NOT NULL,
`laston` varchar(24) NOT NULL,
`money` int(20) NOT NULL default \'50000\',
PRIMARY KEY (`reg_id`),
KEY `name` (`name`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 ROW_FORMAT=DYNAMIC;
*/
stock SendClientFormatMessage(playerid, color, const msg[], {Float,_}:...)
{
new len = strlen(msg),d=0,posArg = 3;
new dest[512];
for(new i=0;i<len;i++)
{
if(msg == \'%\')
{
switch (msg[i+1])
{
case \'s\':
{
new pos,arg,tmppos;
new str[128];
while(getarg(posArg,pos)!=\'\\0\')
{
arg=getarg(posArg,pos++);
str[tmppos]=arg;
tmppos++;
}
strins(dest,str,d,strlen(str));
d+=strlen(str);
posArg++;
i++;
}
case \'i\', \'d\':
{
new str[128];
format(str,sizeof(str),\"%d\",getarg(posArg));
strins(dest,str,d,strlen(str));
d+=strlen(str);
posArg++;
i++;
}
case \'f\':
{
new str[128];
format(str,sizeof(str),\"%f\",getarg(posArg));
strins(dest,str,d,strlen(str));
d+=strlen(str);
posArg++;
i++;
}
case \'.\':
{
new len2 = msg[i+2];
if(len2 == 0)
{
dest[d] = msg;
d++;
}
else
{
new str[32],formatting[5];
formatting[0] = \'%\';
formatting[1] = \'.\';
formatting[2] = len2;
formatting[3] = \'f\';
format(str,sizeof(str),formatting,getarg(posArg));
strins(dest,str,d,len2);
d+=len;
posArg++;
i+= 2;
}
}
default:
{
dest[d] = msg;
d++;
}
}
}
else
{
dest[d] = msg;
d++;
}
}
return SendClientMessage(playerid,color,dest);
}
stock SendClientFormatMessageToAll(color, const msg[], {Float,_}:...)
{
new len = strlen(msg),d=0,posArg = 2;
new dest[128];
for(new i=0;i<len;i++)
{
if(msg == \'%\')
{
switch (msg[i+1])
{
case \'s\':
{
new pos,arg,tmppos;
new str[128];
while(getarg(posArg,pos)!=\'\\0\')
{
arg=getarg(posArg,pos++);
str[tmppos]=arg;
tmppos++;
}
strins(dest,str,d,strlen(str));
d+=strlen(str);
posArg++;
i++;
}
case \'i\', \'d\':
{
new str[128];
format(str,sizeof(str),\"%d\",getarg(posArg));
strins(dest,str,d,strlen(str));
d+=strlen(str);
posArg++;
i++;
}
case \'f\':
{
new str[128];
format(str,sizeof(str),\"%f\",getarg(posArg));
strins(dest,str,d,strlen(str));
d+=strlen(str);
posArg++;
i++;
}
case \'.\':
{
new len2 = msg[i+2];
if(len2 == 0)
{
dest[d] = msg;
d++;
}
else
{
new str[32],formatting[5];
formatting[0] = \'%\';
formatting[1] = \'.\';
formatting[2] = len2;
formatting[3] = \'f\';
format(str,sizeof(str),formatting,getarg(posArg));
strins(dest,str,d,len2);
d+=len;
posArg++;
i+= 2;
}
}
default:
{
dest[d] = msg;
d++;
}
}
}else{
dest[d] = msg;
d++;
}
}
return SendClientMessageToAll(color,dest);
}
#define SendClientMessageToAll SendClientFormatMessageToAll