11.01.2010, 11:11
Hello all.
My GameMode (PEN Based) have a little problem on saving data on OnUpdatePlayer...
It do all right: Checking if account exist or not, creating accounts, reading the data from the DB In-Game.
But When i try to... send data ingame(onupdateplayer) to the DB it does... nothing.
I Need Help, I Have tryed to fix it... everything sounds right but it still dont save data.
My Code:
My GameMode (PEN Based) have a little problem on saving data on OnUpdatePlayer...
It do all right: Checking if account exist or not, creating accounts, reading the data from the DB In-Game.
But When i try to... send data ingame(onupdateplayer) to the DB it does... nothing.
I Need Help, I Have tryed to fix it... everything sounds right but it still dont save data.
My Code:
pawn Код:
/* Includes */
#include <a_mysql>
/* Defines */
#define MYSQL_HOST "127.0.0.1"
#define MYSQL_USER "root"
#define MYSQL_PASS ""
#define MYSQL_DB "trdm"
#define MAX_STRING 255 //SQL
/* Functions */
forward OnUpdatePlayer(playerid);
forward MySQLConnect(sqlhost[], sqluser[], sqlpass[], sqldb[]);
forward MySQLCheckConnection();
forward MySQLUpdateBuild(query[], sqlplayerid);
forward MySQLUpdateFinish(query[], sqlplayerid);
forward MySQLUpdatePlayerInt(query[], sqlplayerid, sqlvalname[], sqlupdateint);
forward MySQLUpdatePlayerIntSingle(sqlplayerid, sqlvalname[], sqlupdateint);
forward MySQLUpdatePlayerFlo(query[], sqlplayerid, sqlvalname[], Float:sqlupdateflo);
forward MySQLUpdatePlayerStr(query[], sqlplayerid, sqlvalname[], sqlupdatestr[]);
forward MySQLCheckAccount(sqlplayersname[]);
forward MySQLFetchAcctSingle(sqlplayerid, sqlvalname[], sqlresult[]);
forward MySQLFetchAcctRecord(sqlplayerid, sqlresult[]);
forward MySQLCreateAccount(newplayersname[], newpassword[]);
pawn Код:
/* Funcions */
public MySQLConnect(sqlhost[], sqluser[], sqlpass[], sqldb[])
{
print("MySQL: Attempting to connect to database...");
mysql_connect(sqlhost,sqluser,sqldb,sqlpass);
if(mysql_ping()==1)
{
print("MYSQL: Database connection established.");
return 1;
}
else
{
print("MySQL: Connection error, retrying...");
mysql_connect(sqlhost,sqluser,sqldb,sqlpass);
if(mysql_ping()==1)
{
print("MySQL: Reconnection successful.");
return 1;
}
else
{
print("MySQL: Could not reconnect to database, terminating server...");
SendRconCommand("exit");
return 0;
}
}
}
public MySQLCheckConnection()
{
if(mysql_ping()==1)
{
return 1;
}
else
{
print("MySQL: Connection error, retrying...");
MySQLConnect(MYSQL_HOST,MYSQL_USER,MYSQL_PASS,MYSQL_DB);
if(mysql_ping()==1)
{
print("MySQL: Reconnection successful.");
return 1;
}
else
{
print("MySQL: Could not reconnect to database, terminating server...");
SendRconCommand("exit");
return 0;
}
}
}
public MySQLUpdateBuild(query[], sqlplayerid)
{
new querylen = strlen(query);
//new querymax = sizeof(query);
new querymax = MAX_STRING;
if (querylen < 1) format(query, querymax, "UPDATE players SET ");
else if (querymax-querylen < 50)
{
// query is too large, send this one and reset
new whereclause[32];
format(whereclause, sizeof(whereclause), " WHERE id=%d", sqlplayerid);
strcat(query, whereclause, querymax);
mysql_query(query);
printf("MYSQL(UpdateBuild): %s", query);
format(query, querymax, "UPDATE players SET ");
}
else if (strfind(query, "=", true) != -1) strcat(query, ",", MAX_STRING);
return 1;
}
public MySQLUpdateFinish(query[], sqlplayerid)
{
if (strcmp(query, "WHERE id=", false) == 0) mysql_query(query);
else
{
new whereclause[32];
format(whereclause, sizeof(whereclause)," WHERE id=%d",sqlplayerid);
strcat(query, whereclause, MAX_STRING);
mysql_query(query);
printf("MYSQL(UpdateFinish): %s", query);
format(query, MAX_STRING, "UPDATE players SET ");
}
return 1;
}
public MySQLUpdatePlayerInt(query[], sqlplayerid, sqlvalname[], sqlupdateint)
{
MySQLUpdateBuild(query, sqlplayerid);
new updval[64];
format(updval, sizeof(updval), "%s=%d", sqlvalname, sqlupdateint);
strcat(query, updval, MAX_STRING);
return 1;
}
public MySQLUpdatePlayerFlo(query[], sqlplayerid, sqlvalname[], Float:sqlupdateflo)
{
new flotostr[32];
format(flotostr, sizeof(flotostr), "%f", sqlupdateflo);
MySQLUpdatePlayerStr(query, sqlplayerid, sqlvalname, flotostr);
return 1;
}
public MySQLUpdatePlayerStr(query[], sqlplayerid, sqlvalname[], sqlupdatestr[])
{
MySQLUpdateBuild(query, sqlplayerid);
new escstr[128];
new updval[128];
mysql_real_escape_string(sqlupdatestr, escstr);
format(updval, sizeof(updval), "%s='%s'", sqlvalname, escstr);
strcat(query, updval, MAX_STRING);
return 1;
}
public MySQLUpdatePlayerIntSingle(sqlplayerid, sqlvalname[], sqlupdateint)
{
new query[128];
format(query, sizeof(query), "UPDATE players SET %s=%d WHERE id=%d", sqlvalname, sqlupdateint, sqlplayerid);
mysql_query(query);
return 1;
}
public MySQLCheckAccount(sqlplayersname[])
{
new query[128];
new escstr[MAX_PLAYER_NAME];
mysql_real_escape_string(sqlplayersname, escstr);
format(query, sizeof(query), "SELECT id FROM players WHERE LOWER(Name) = LOWER('%s') LIMIT 1", escstr);
mysql_query(query);
mysql_store_result();
if(mysql_num_rows()==0)
{
return 0;
}
else
{
new strid[32];
new intid;
mysql_fetch_row(strid);
intid = strval(strid);
return intid;
}
}
public MySQLFetchAcctSingle(sqlplayerid, sqlvalname[], sqlresult[])
{
new query[128];
format(query, sizeof(query), "SELECT %s FROM players WHERE id = %d LIMIT 1", sqlvalname, sqlplayerid);
mysql_query(query);
mysql_store_result();
if(mysql_fetch_row(sqlresult)==1)
{
return 1;
}
return 0;
}
public MySQLFetchAcctRecord(sqlplayerid, sqlresult[])
{
new query[64];
format(query, sizeof(query), "SELECT * FROM players WHERE id=%d LIMIT 1", sqlplayerid);
mysql_query(query);
mysql_store_result();
if(mysql_fetch_row(sqlresult)==1)
{
return 1;
}
return 0;
}
public MySQLCreateAccount(newplayersname[], newpassword[])
{
new query[128];
new sqlplyname[64];
new sqlpassword[64];
mysql_real_escape_string(newplayersname, sqlplyname);
mysql_real_escape_string(newpassword, sqlpassword);
format(query, sizeof(query), "INSERT INTO players (Name, Password) VALUES ('%s', '%s')", sqlplyname, sqlpassword);
mysql_query(query);
new newplayersid = MySQLCheckAccount(newplayersname);
if(newplayersid != 0)
{
return newplayersid;
}
return 0;
}
pawn Код:
/* OnUpdatePlayer Function */
public OnUpdatePlayer(playerid)
{
printf("OnUpdatePlayer(%d) (0)", playerid);
if(IsPlayerConnected(playerid))
{
printf("OnUpdatePlayer(%d) (1)", playerid);
if(gPlayerLogged[playerid])
{
printf("OnUpdatePlayer(%d) (2)", playerid);
MySQLCheckConnection();
new query[MAX_STRING];
format(query, MAX_STRING, "UPDATE players SET ");
//MySQLUpdatePlayerStr(query, PlayerInfo[playerid][pSQLID], "Password", PlayerInfo[playerid][pPassword]);
PlayerInfo[playerid][pMoney] = GetPlayerMoney(playerid);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Money", PlayerInfo[playerid][pMoney]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Bank", PlayerInfo[playerid][pBank]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Skin", PlayerInfo[playerid][pSkin]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Staff", PlayerInfo[playerid][pStaff]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Donator", PlayerInfo[playerid][pDonator]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Respect", PlayerInfo[playerid][pRespect]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Drugs", PlayerInfo[playerid][pDrugs]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Weapons", PlayerInfo[playerid][pWeapons]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Kills", PlayerInfo[playerid][pKills]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Deaths", PlayerInfo[playerid][pDeaths]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Traffics", PlayerInfo[playerid][pTF]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Exterminations", PlayerInfo[playerid][pEX]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "VehicleRobbery", PlayerInfo[playerid][pVR]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "StreetRaces", PlayerInfo[playerid][pSR]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "WantedLevel", PlayerInfo[playerid][pWanted]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "FightingStyle", PlayerInfo[playerid][pFStyle]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "MeleeSkill", PlayerInfo[playerid][pMelee]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "PistolSkill", PlayerInfo[playerid][pPistol]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "SMGSkill", PlayerInfo[playerid][pSMG]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "ShotgunSkill", PlayerInfo[playerid][pShotgun]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "MGSkill", PlayerInfo[playerid][pMG]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "RifleSkill", PlayerInfo[playerid][pRifle]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Team", PlayerInfo[playerid][pTeam]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "House", PlayerInfo[playerid][pHouse]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Business", PlayerInfo[playerid][pBusiness]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "Clan", PlayerInfo[playerid][pClan]);
MySQLUpdatePlayerInt(query, PlayerInfo[playerid][pSQLID], "ClanRank", PlayerInfo[playerid][pClanRank]);
MySQLUpdateFinish(query, PlayerInfo[playerid][pSQLID]);
printf("OnUpdatePlayer(%d) Finished", playerid);
}
}
return 1;
}
pawn Код:
/* SERVER LOG
(After change Respect in-game and quit) */
SA-MP Dedicated Server
----------------------
v0.3a R3, (C)2005-2009 SA-MP Team
[12:04:04] filterscripts = "" (string)
[12:04:04]
[12:04:04] Server Plugins
[12:04:04] --------------
[12:04:04] Loading plugin: mysql
[12:04:04]
> MySQL plugin loaded on. |
[12:04:04] Loaded.
[12:04:04] Loaded 1 plugins.
[12:04:04]
[12:04:04] Filter Scripts
[12:04:04] ---------------
[12:04:04] Loaded 0 filter scripts.
[12:04:04]
[12:04:04] Number of pickups: 259
[12:04:04]
[12:04:04] DEBUG TeamCarLockInit()
[12:04:04]
[12:04:04] =======================================
[12:04:04] | XXXXXXXXXXXX© |
[12:04:04] | |
[12:04:04] | XXXXXXX® |
[12:04:04] =======================================
[12:04:04]
[12:04:04] MySQL: Attempting to connect to database...
[12:04:04] MYSQL: Database connection established.
[12:04:04] Number of vehicle models: 59
[12:04:50] Incoming connection: 127.0.0.1:4119
[12:04:50] [join] Cr0ssFir3 has joined the server (0:127.0.0.1)
[12:04:50] DEBUG OnPlayerConnect(0)
[12:04:50] Player connecting as [ID:0]Cr0ssFir3
[12:04:50] I will check if connection is alive
[12:04:50] I Have checked the connection and is alive
[12:04:50] I Will hceck if you accounts exists
[12:04:50] Yes your Account exist
[12:04:53] Se tiver conta, ele faz isto(1)
[12:04:57] Conta lida(1)
[12:04:57] Conta lida(2)
[12:04:57] DEBUG OnPropUpdate()
[12:04:57] DEBUG OnPropUpdate()
[12:04:57] Conta lida(3)
[12:04:57] OnPlayerStateChange 0 8 0
[12:04:57] z =1100.374633 int =0
[12:04:57] DEBUG SPAWNED: Playerid:0 Team:3 SpawnPoint:4
[12:04:57] overhight or ob
[12:04:57] DEBUG SetPlayerWeapons(0)
[12:04:57] OnPlayerSpawn Playerid:0
[12:04:57] DEBUG TeamLockDoors(0)
[12:04:57] DEBUG1 InitLockDoors(0)
[12:04:57] OnPlayerStateChange 0 1 8
[12:05:16] DEBUG OnPlayerCommandText(0)
[12:05:16] DEBUG OnPlayerDisconnect(0)1
[12:05:16] OnUpdatePlayer(0) (0)
[12:05:16] OnUpdatePlayer(0) (1)
[12:05:16] OnUpdatePlayer(0) (2)
[12:05:16] MYSQL(UpdateFinish): UPDATE players SET PistolSkill=0,SMGSkill=0,ShotgunSkill=0,MGSkill=0,RifleSkill=0,Team=3,House=255,Business=255,Clan=0,ClanRank=0 WHERE id=1
[12:05:16] OnUpdatePlayer(0) Finished
[12:05:16] DEBUG OnPlayerDisconnect(0)2
[12:05:16] DEBUG OnPlayerDisconnect(0)3
[12:05:16] DEBUG OnPlayerDisconnect(0)4
[12:05:16] [part] Cr0ssFir3 has left the server (0:1)
[12:05:36] --- Server Shutting Down.
[12:05:36]
> MySQL plugin unloaded.
/* ON DATABASE */
No changes.