This is what I use, it will be different then yours but it'll be close enough.
I use R7 so if you're not threading your queries some things will differ.
I'm also modulating my gamemode so this is all hooked to my main script, so if yours is part of the main gamemode
pawn Код:
#include <a_samp>
#include <zcmd>
#include <sscanf2>
#include <a_mysql>
#include <YSI\y_hooks>
#define C_YELLOW 0xFFFF00FF
#define C_WHITE 0xFFFFFFAA
// LOCAL DATABASE
#define HOST "localhost"
#define USER "root"
#define DATABASE "sampdata"
#define PASS ""
#define DIALOG_REGISTER (1000)
#define DIALOG_LOGIN (2000)
#define PF:%0(%1) forward %0(%1); \
public %0(%1)
#define SCM SendClientMessage
#define SCMToAll SendClientMessageToAll
enum PlayerStats
{
N_Pass[129],
N_Cash,
N_Admin,
N_Kills,
N_Deaths,
N_Rank,
N_Score,
N_Vehicle,
N_Rounds,
N_Gun,
Float:N_Health,
Float:N_Armour,
Text3D:Nametag,
N_Robberies,
Float:LastX,
Float:LastY,
Float:LastZ,
pID,
N_Class,
N_WLevel,
N_Donor,
N_Banned
};
new P_Info[MAX_PLAYERS][PlayerStats];
// mySQL
static
mysql,
myName[MAX_PLAYERS][24]
;
native WP_Hash(buffer[], len, const str[]);
hook OnGameModeInit()
{
mysql_log(LOG_ERROR | LOG_WARNING | LOG_DEBUG);
mysql = mysql_connect(HOST, USER, DATABASE, PASS);
if(mysql_errno(mysql) != 0) print("ERROR: MySQL Database unsucessfully connected.");
}
hook OnPlayerConnect(playerid)
{
new query[144];
GetPlayerName(playerid, myName[playerid], 24);
mysql_format(mysql, query, sizeof(query),"SELECT `Password`, `ID` FROM `players` WHERE `Username` = '%e' LIMIT 1", myName[playerid]);
mysql_tquery(mysql, query, "OnAccountCheck", "i", playerid);
DeletePVar(playerid, #JustLogged);
}
PF: OnAccountCheck(playerid)
{
new rows, fields;
cache_get_data(rows, fields, mysql);
new str[500];
if(rows)
{
cache_get_field_content(0, "Password", P_Info[playerid][N_Pass], mysql, 129);
P_Info[playerid][pID] = cache_get_field_content_int(0, "ID");
format(str, sizeof(str), "{FFFFFF}SERVER RULES\n * Do not Carpark\n{FFFFFF}* Do not hack\n{FFFFFF}* Do not Crackshot(Cbug)\n* Do not use any exploits of any kind\n{FFFFFF}* Do not Flame or bully members\
\n{FFFFFF}* Do not server advertise\n{FFFFFF}* Public chat is ENGLISH only.\n{3399FF}Neptune Gaming: TDM\n{FFFFFF}Welcome back {3399FF}%s\n{FFFFFF}Login Below", mySQL_Name(playerid));
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{3399FF}System Login",str,"Login","Quit");
}
else
{
format(str, sizeof(str), "{FFFFFF}SERVER RULES\n * Do not Carpark\n{FFFFFF}* Do not hack\n{FFFFFF}* Do not Crackshot(Cbug)\n* Do not use any exploits of any kind\n{FFFFFF}* Do not Flame or bully members\
\n{FFFFFF}* Do not server advertise\n{FFFFFF}* Public chat is ENGLISH only.\n{3399FF}Neptune Gaming: TDM\n{FFFFFF}Welcome {3399FF}%s\n{FFFFFF}Please Register below", mySQL_Name(playerid));
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD,"{3399FF}System Register", str,"Register","Quit");
}
return 1;
}
PF:SaveAcct(playerid)
{
Save_Account(playerid);
SCM(playerid, C_YELLOW, " >> Player account saved automatically.");
}
PF:Save_Account(playerid)
{
new query[2000];
P_Info[playerid][N_Cash] = GetPlayerMoney(playerid);
mysql_format(mysql, query, sizeof(query),"UPDATE `players` SET `Cash`=%d, `Admin`=%d,`Kills`=%d,`Deaths`=%d,`Rank`=%d,\
`Vehicle`=%d, `Robberies`=%d, `Score`=%d, `Donor`=%d, `Banned`=%d WHERE `ID`=%d", P_Info[playerid][N_Cash], P_Info[playerid][N_Admin], P_Info[playerid][N_Kills], P_Info[playerid][N_Deaths],
P_Info[playerid][N_Rank], P_Info[playerid][N_Vehicle], P_Info[playerid][N_Robberies], P_Info[playerid][N_Score], P_Info[playerid][N_Donor], P_Info[playerid][N_Banned], P_Info[playerid][pID]);
mysql_tquery(mysql, query, "", "");
return true;
}
CMD:oban(playerid, params[])
{
if(P_Info[playerid][N_Admin] >= 3)
{
new id[24];
if(sscanf(params,"s[24]",id)) return SendClientMessage (playerid,C_WHITE,"SYNTAX: {3399FF}/oban [PlayerName]");
else {
if(cache_get_row_count() > 0) //This is offline-ban. It grabs the IP from the user (offline), and inserts it into ban database.
{
new query[144];
mysql_format(mysql, query, sizeof(query),"UPDATE `players` SET `Banned`=1 WHERE `Username` = '%e'", id);
mysql_tquery(mysql, query, "", "");
}
else //DOESNT EXIST
{
SCM(playerid, C_WHITE, "{F81414}ERROR{FFFFFF}: Could not find anyone with that username");
return 1;
}
}
}
return 1;
}
hook OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_REGISTER)
{
if(!response) return Kick(playerid);
if(strlen(inputtext) < 6) return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_INPUT, "{3399FF}System Register", "{3399FF}Neptune Gaming: TDM\n{FFFFFF}Please type Password\n{FFFFFF}Atleast {3399FF}6 {FFFFFF}Characters long.", "Register", "Quit");
new query[2000];
WP_Hash(P_Info[playerid][N_Pass], 129, inputtext);
mysql_format(mysql, query, sizeof(query), "INSERT INTO `players` (`Username`, `Password`, `Cash`, `Admin`, `Kills`, `Deaths`, `Rank`,\
`Vehicle`, `Robberies`, `Score`, `Donor`) VALUES ('%e', '%s',0,0,0,0,0,0,0,0,0)",
myName[playerid], P_Info[playerid][N_Pass]);
mysql_tquery(mysql, query, "OnAccountRegister", "i", playerid);
}
if(dialogid == DIALOG_LOGIN)
{
if(!response) Kick(playerid);
new hpass[129];
new query[100];
WP_Hash(hpass, 129, inputtext);
if(!strcmp(hpass, P_Info[playerid][N_Pass]))
{
mysql_format(mysql, query, sizeof(query), "SELECT * FROM `players` WHERE `Username` = '%e' LIMIT 1", myName[playerid]);
mysql_tquery(mysql, query, "OnAccountLoad", "i", playerid);
}
else
{
ShowPlayerDialog(playerid,DIALOG_LOGIN,DIALOG_STYLE_PASSWORD,"{3399FF}System Login","{3399FF}Neptune Gaming: TDM\n{FFFFFF}ERROR: {F81414}Incorrect Password\n{FFFFFF}Please fix it below.","Login","Quit");
}
}
return 1;
}
stock mySQL_Name(playerid)
{
new name[MAX_PLAYER_NAME];
GetPlayerName(playerid,name,sizeof(name));
strreplaceee(name, '_', ' ');
return name;
}
stock strreplaceee(string[], find, replace)
{
for(new i=0; string[i]; i++)
{
if(string[i] == find)
{
string[i] = replace;
}
}
}