28.12.2014, 04:14
Hi friends can anyone help me what is the error of this script in which I am begining mysql fucionarlo system then my server and all is apparently well I just do not want to save the data aca code
pawn Код:
#include <a_samp>
#include <a_mysql>
native WP_Hash(buffer[], len, const str[]);
#define WHITE 0xFFFFFFAA
#define GREY 0xAFAFAFAA
#define RED 0xFF0000AA
#define YELLOW 0xFFFF00AA
#define LIGHTBLUE 0x33CCFFAA
#define CHAT_WHITE "{FFFFFF}"
#define CHAT_GREY "{AFAFAF}"
#define CHAT_RED "{FF0000}"
#define CHAT_YELLOW "{FFFF00}"
#define CHAT_LIGHTBLUE "{33CCFF}"
forward OnPlayerDataLoaded(playerid, race_check);
forward OnPlayerRegister(playerid);
#define SQL_HOST "127.0.0.1"
#define SQL_DB "Database"
#define SQL_USER "root"
#define SQL_PASS ""
new g_SQL = -1;
enum E_PLAYERS
{
ID,
Name[MAX_PLAYER_NAME],
Password[129],
Money,
bool:IsLoggedIn,
bool:IsRegistered,
LoginAttempts,
LoginTimer
};
new PlayerInfo[MAX_PLAYERS][E_PLAYERS];
new g_MysqlRaceCheck[MAX_PLAYERS];
enum
{
DIALOG_INVALID,
DIALOG_UNUSED,
DIALOG_LOGIN,
DIALOG_REGISTER,
};
public OnGameModeInit()
{
mysql_log(LOG_ERROR | LOG_WARNING, LOG_TYPE_HTML);
g_SQL = mysql_connect(SQL_HOST, SQL_USER, SQL_DB, SQL_PASS);
SetupPlayerTable();
return 1;
}
public OnGameModeExit()
{
for(new p=0; p < MAX_PLAYERS; ++p)
if(IsPlayerConnected(p))
UpdatePlayerData(p);
mysql_close();
return 1;
}
public OnPlayerConnect(playerid)
{
g_MysqlRaceCheck[playerid]++;
for(new E_PLAYERS:e; e < E_PLAYERS; ++e)
PlayerInfo[playerid][e] = 0;
new query[128];
GetPlayerName(playerid, PlayerInfo[playerid][Name], MAX_PLAYER_NAME);
mysql_format(g_SQL, query, sizeof(query), "SELECT * FROM `players` WHERE `username` = '%e' LIMIT 1", PlayerInfo[playerid][Name]);
mysql_tquery(g_SQL, query, "OnPlayerDataLoaded", "dd", playerid, g_MysqlRaceCheck[playerid]);
return 1;
}
public OnPlayerDataLoaded(playerid, race_check)
{
if(race_check != g_MysqlRaceCheck[playerid])
return Kick(playerid);
new string[128];
if(cache_num_rows() > 0)
{
AssignPlayerData(playerid);
format(string, sizeof(string), CHAT_WHITE "This account (" CHAT_YELLOW "%s" CHAT_WHITE ") is registered. Please login by entering your password in the field below:", PlayerInfo[playerid][Name]);
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", string, "Login", "Abort");
PlayerInfo[playerid][IsRegistered] = true;
}
else
{
format(string, sizeof(string), CHAT_WHITE "Welcome " CHAT_YELLOW "%s" CHAT_WHITE ", you can register by entering your password in the field below:", PlayerInfo[playerid][Name]);
ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration", string, "Register", "Abort");
PlayerInfo[playerid][IsRegistered] = false;
}
return 1;
}
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
{
if(dialogid == DIALOG_INVALID || dialogid == DIALOG_UNUSED)
return 1;
switch(dialogid)
{
case DIALOG_LOGIN:
{
if(!response)
return Kick(playerid);
if(strlen(inputtext) <= 5)
return ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login",
CHAT_RED "Your password must be longer than 5 characters!\n" CHAT_WHITE "Please enter your password in the field below:",
"Login", "Abort");
new hashed_pass[129];
WP_Hash(hashed_pass, sizeof(hashed_pass), inputtext);
if(strcmp(hashed_pass, PlayerInfo[playerid][Password]) == 0)
{
ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Login", "You have been successfully logged in.", "Okay", "");
PlayerInfo[playerid][IsLoggedIn] = true;
SetSpawnInfo(playerid, 0, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
}
else
{
PlayerInfo[playerid][LoginAttempts]++;
if(PlayerInfo[playerid][LoginAttempts] >= 3)
{
ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Login", CHAT_RED "You have mistyped your password too often (3 times).", "Okay", "");
DelayedKick(playerid);
}
else
ShowPlayerDialog(playerid, DIALOG_LOGIN, DIALOG_STYLE_PASSWORD, "Login", CHAT_RED "Wrong password!\n" CHAT_WHITE "Please enter your password in the field below:", "Login", "Abort");
}
}
case DIALOG_REGISTER:
{
if(!response)
return Kick(playerid);
if(strlen(inputtext) <= 5)
return ShowPlayerDialog(playerid, DIALOG_REGISTER, DIALOG_STYLE_PASSWORD, "Registration",
CHAT_RED "Your password must be longer than 5 characters!\n" CHAT_WHITE "Please enter your password in the field below:",
"Register", "Abort");
new query[256];
WP_Hash(PlayerInfo[playerid][Password], 129, inputtext);
mysql_format(g_SQL, query, sizeof(query), "INSERT INTO `players` (`username`, `password`) VALUES ('%e', '%s')", PlayerInfo[playerid][Name], PlayerInfo[playerid][Password]);
mysql_tquery(g_SQL, query, "OnPlayerRegister", "d", playerid);
}
default:
return 0;
}
return 1;
}
public OnPlayerRegister(playerid)
{
PlayerInfo[playerid][ID] = cache_insert_id();
ShowPlayerDialog(playerid, DIALOG_UNUSED, DIALOG_STYLE_MSGBOX, "Registration", "Account successfully registered, you have been automatically logged in.", "Okay", "");
PlayerInfo[playerid][IsLoggedIn] = true;
PlayerInfo[playerid][IsRegistered] = true;
SetSpawnInfo(playerid, 0, 0, 0.0, 0.0, 0.0, 0.0, 0, 0, 0, 0, 0, 0);
SpawnPlayer(playerid);
return 1;
}
public OnPlayerCommandText(playerid, cmdtext[])
{
if(!strcmp(cmdtext, "/kill", true))
{
SetPlayerHealth(playerid, 0.0);
SendClientMessage(playerid, 0xFF0000FF, "Te has suicidado");
return 1;
}
return 0;
}
public OnPlayerDeath(playerid, killerid, reason)
{
GivePlayerMoney(playerid, 1000);
return 1;
}
public OnPlayerRequestSpawn(playerid)
{
ResetPlayerMoney(playerid);
GivePlayerMoney(playerid, PlayerInfo[playerid][Money]);
return 1;
}
public OnPlayerSpawn(playerid)
{
SetPlayerInterior(playerid,0);
SetPlayerPos(playerid,325.35,2512.09,16.56);
return 1;
}
public OnPlayerDisconnect(playerid,reason)
{
g_MysqlRaceCheck[playerid]++;
UpdatePlayerData(playerid);
return 1;
}
/*
* functions
*/
AssignPlayerData(playerid)
{
PlayerInfo[playerid][ID] = cache_get_field_content_int(0, "id");
cache_get_field_content(0, "password", PlayerInfo[playerid][Password], g_SQL, 129);
PlayerInfo[playerid][Money] = cache_get_field_content_int(0, "money");
return 1;
}
UpdatePlayerData(playerid)
{
if(PlayerInfo[playerid][IsLoggedIn] == false)
return 0;
new query[128];
mysql_format(g_SQL, query, sizeof(query), "UPDATE `players` SET `money` = '%d' WHERE `username` = '%e' LIMIT 1", PlayerInfo[playerid][Money], PlayerInfo[playerid][Name]);
mysql_tquery(g_SQL, query);
return 1;
}
SetupPlayerTable()
{
mysql_query(g_SQL, "CREATE TABLE IF NOT EXISTS `players` (`id` int(11) NOT NULL auto_increment PRIMARY KEY,`username` varchar(30) NOT NULL,`password` varchar(130) NOT NULL,`money` int(10) NOT NULL default '0')", false);
return 1;
}
DelayedKick(playerid, time=500)
{
SetTimerEx("_KickPlayerDelayed", time, false, "d", playerid);
return 1;
}
forward _KickPlayerDelayed(playerid);
public _KickPlayerDelayed(playerid)
{
Kick(playerid);
return 1;
}
main() {}