Hali all :D
Elkészítettem nektek egy SMF alapon futó belépés rendszert.
Regisztrálni az SMF Fórumon keresztûl kell, és csak utána tudsz belépni a szerverre.
Remélem mindenkinek elcsavarja a fejét :P
Információk:
Elkészítési idõ: kb. 15-20perc
Felhasznált Includék: a_samp, zcmd, sscanf, mySQL(R6), MD5
Parancsok száma: 1 (Nem egy komplett regisztráció/belépés rendszer hoztam adminrendszerrel, hanem csak egy kiindulási pontot)
//=== INCLUDÉK ===//
#include <a_samp>
#include <zcmd>
#include <sscanf>
#include <mysql_r6>
#include <MD5>
//=== DEFINICIÓK ===//
#define SMFTABLA \"fórumodelõtagja_members\" //Amilyen elõtaggal telepítetted fel, azt kell odaírni
#define SMFCSOP \"fórumodelõtagja_membergroups\" //Amilyen elõtaggal telepítetted fel, azt kell odaírni
#define MYSQL_HOST \"mySQL IP Cím\"
#define MYSQL_USER \"mySQL Felhasználó\"
#define MYSQL_PW \"mySQL Jelszó\"
#define MYSQL_DB \"mySQL Adatbázis\"
#define CSOPSZAM 10
#define WEBOLDAL \"Weboldalad címe\"
//DIALOG
#define LOGIN 1
//GYORS BILLENYTÛ
#define chrtolower(%1) \\
(((%1) > 0x40 && (%1) <= 0x5A) ? ((%1) | 0x20) : (%1))
#define COLOR_GREEN 0x33FF33AA
#define COLOR_RED 0xFF0000AA
//=== NEWEK ===//
new Query[100];
new pw[MAX_PLAYERS];
new belepve[MAX_PLAYERS];
new FormatText[128];
public OnFilterScriptInit()
{
mysql_debug(0); //Hostolt szervernél érdemes kikapcsolni. (Nem pingeli teli a szervert)
mysql_connect(MYSQL_HOST, MYSQL_USER, MYSQL_DB, MYSQL_PW);
if( mysql_ping() == 1 )
{
print(\"<1> [MySQL] A kapcsolat létrejött. <1>\");
}
else
{
print(\"<1> [MySQL] A kapcsolat nem jött létre. <1>\");
SendRconCommand(\"gmx\");
}
return 1;
}
public OnPlayerConnect(playerid)
{
nullazas(playerid);
format(Query,100,\"SELECT * FROM \"SMFTABLA\" WHERE real_name=\'%s\'\",JatekosNeve(playerid));
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_PASSWORD, \"Bejelentkezés\", \"Szia!\\n\\nTe már regisztráltál a weblapunkon.\\nJelentkezz be:\", \"Belépés\", \"Mégse.\");
}
else
{
SendClientMessage(playerid,-1,\"Te még nem regisztráltál a \"WEBOLDAL\" oldalon. Regisztrálj, csak aztán tudsz játszani!\");
Kick(playerid);
}
mysql_free_result();
return 1;
}
public OnFilterScriptExit()
{
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == LOGIN)
{
if(response)
{
new loginnev[64];
format(loginnev,sizeof(loginnev),\"%s\",kisbetu(playerid));
strcat(loginnev,inputtext);
format(Query,sizeof(Query),\"SELECT * FROM \"SMFTABLA\" WHERE real_name = \'%s\' AND passwd = SHA1(\'%s\')\",JatekosNeve(playerid),loginnev);
mysql_query(Query);
mysql_store_result();
if(mysql_num_rows() != 0)
{
SendClientMessage(playerid, COLOR_GREEN, \"A jelszó helyes. Karakter betöltve.\");
format(FormatText,sizeof(FormatText),\"<INFO> %s sikeresen beirta a jelszavát, ezert beengedte a szerver. <INFO>\",JatekosNeve(playerid));
print(FormatText);
belepve[playerid] = 1;
}
else
{
pw[playerid] ++;
if(pw[playerid] == 2)
{
SendClientMessage(playerid, COLOR_RED, \"Túl sok próbálkozás.\");
format(FormatText,sizeof(FormatText),\"<INFO> %s rossz jelszot irt be ezért a szerver kidobta. <INFO>\",JatekosNeve(playerid));
print(FormatText);
Kick(playerid);
}
SendClientMessage(playerid, COLOR_RED, \"Hibás jelszó.\");
ShowPlayerDialog(playerid, LOGIN, DIALOG_STYLE_INPUT, \"Bejelentkezés\", \"Szia!\\n\\nTe már regisztráltál a weblapunkon.\\nJelentkezz be:\", \"Belépés\", \"Mégse.\");
mysql_free_result();
}
} else { Kick(playerid);}
}
return 1;
}
public OnPlayerText(playerid,text[])
{
new rangtxt[24];
new szin[12];
for(new i = 1; i < CSOPSZAM; i++)
{
if(sqlint(playerid,\"id_group\") == i && sqlint(playerid,\"id_group\") != 0)
{
format(Query,100,\"SELECT * FROM \"SMFCSOP\" WHERE id_group=%d\",i);
mysql_query(Query);
mysql_store_result();
if(mysql_retrieve_row())
{
mysql_get_field(\"online_color\", szin);
mysql_get_field(\"group_name\", rangtxt);
}
mysql_free_result();
if(strfind(szin, \"#\", true) != -1) szin[strfind(szin, \"#\")] = \'{\';
format(FormatText,sizeof(FormatText),\"%s < %s}%s {33AA33}>: {FFFFFF}%s\",JatekosNeve(playerid),szin,rangtxt,text);
SendClientMessageToAll(COLOR_GREEN,FormatText);
format(FormatText,sizeof(FormatText),\"<INFO> %s %s < %s >: %s <INFO>\",JatekosNeve(playerid),rangtxt,text);
print(FormatText);
}
else if(sqlint(playerid,\"id_post_group\") == i && sqlint(playerid,\"id_group\") == 0)
{
format(Query,100,\"SELECT * FROM \"SMFCSOP\" WHERE id_group=%d\",i);
mysql_query(Query);
mysql_store_result();
if(mysql_retrieve_row())
{
mysql_get_field(\"online_color\", szin);
mysql_get_field(\"group_name\", rangtxt);
}
mysql_free_result();
if(strfind(szin, \"#\", true) != -1) szin[strfind(szin, \"#\")] = \'{\';
format(FormatText,sizeof(FormatText),\"%s < %s}%s {33AA33}>: {FFFFFF}%s\",JatekosNeve(playerid),szin,rangtxt,text);
SendClientMessageToAll(COLOR_GREEN,FormatText);
format(FormatText,sizeof(FormatText),\"<INFO> %s %s < %s >: %s <INFO>\",JatekosNeve(playerid),rangtxt,text);
print(FormatText);
}
}
return 0;
}
//PARANCSOK
CMD:admin_ad(playerid,params[])
{
if(sqlint(playerid,\"id_group\") == 1)
{
new id,szint;
if(sscanf(params,\"ui\",id,szint)) return SendClientMessage(playerid,-1,\"Használat: /adadmin [id][szint(0-3)]\");
if(szint > 3 && szint < 0) return SendClientMessage(playerid,-1,\"A szint 0 és 3 között lehet.\");
admin(id,szint);
format(FormatText,sizeof(FormatText),\"%s %d adminjogot adott.\",JatekosNeve(playerid),szint);
SendClientMessage(id,COLOR_RED,FormatText);
format(FormatText,sizeof(FormatText),\"%s %d adminjogot kapott.\",JatekosNeve(id),szint);
SendClientMessage(playerid,COLOR_RED,FormatText);
format(FormatText,sizeof(FormatText),\"<INFO> %s kinevezte %s nevû játékos %d szintû adminnak <INFO>\",JatekosNeve(playerid),JatekosNeve(id), szint);
print(FormatText);
} else SendClientMessage(playerid,-1,\"Nem vagy admin.\");
return 1;
}
//STOCKOK
stock admin(playerid,szint)
{
if(szint > 3 && szint < 0) return print(\"Admin adás error.\");
if(szint == 0) format(Query,100,\"UPDATE \"SMFTABLA\" SET id_group = 0 WHERE real_name=\'%s\'\",JatekosNeve(playerid));
else if(szint == 1) format(Query,100,\"UPDATE \"SMFTABLA\" SET id_group = 9 WHERE real_name=\'%s\'\",JatekosNeve(playerid));
else if(szint == 2) format(Query,100,\"UPDATE \"SMFTABLA\" SET id_group = 2 WHERE real_name=\'%s\'\",JatekosNeve(playerid));
else if(szint == 3) format(Query,100,\"UPDATE \"SMFTABLA\" SET id_group = 1 WHERE real_name=\'%s\'\",JatekosNeve(playerid));
mysql_query(Query);
return szint;
}
stock sqlint(playerid,mezo[])
{
new szoveg[54];
format(Query,100,\"SELECT * FROM \"SMFTABLA\" WHERE real_name=\'%s\'\",JatekosNeve(playerid));
mysql_query(Query);
mysql_store_result();
if(mysql_retrieve_row())
{
mysql_get_field(mezo, szoveg);
}
mysql_free_result();
return strval(szoveg);
}
stock sql(playerid,mezo[])
{
new szoveg[54];
format(Query,100,\"SELECT * FROM \"SMFTABLA\" WHERE real_name=\'%s\'\",JatekosNeve(playerid));
mysql_query(Query);
mysql_store_result();
if(mysql_retrieve_row())
{
mysql_get_field(mezo, szoveg);
}
mysql_free_result();
return szoveg;
}
stock JatekosNeve(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,MAX_PLAYER_NAME);
return name;
}
stock nullazas(playerid)
{
pw[playerid] = 0;
belepve[playerid] = 0;
}
stock kisbetu(playerid)
{
new string[128];
format(string,sizeof(string),\"%s\",JatekosNeve(playerid));
new
retStr[128],
i,
j;
while ((j = string)) retStr[i++] = chrtolower(j);
retStr = \'\\0\';
return retStr;
}
Pastebin: Katt
Köszönöm, hogy végig olvastátok ezt az \"óriási\" leírást.:D
Na peace all 8)