| Debesėlis |
12-29-2009 07:31 |
mysql save
PHP Code:
#include <nvault> #include <sqlx>
new g_szAuth[33][35]; new g_szAuthID[33][35]; new g_szAuthIP[33][35];
new g_Vault;
public plugin_init( ) { save_type = register_cvar("amx_savetype", "1"); // Save Xp to : 1 = MySQL, 0 = NVault. savexp = register_cvar("amx_save", "0"); // Save Xp by : 2 = Name, 1 = SteamID, 0 = IP.
MySQLx_Init(); }
public plugin_end( ) { nvault_close(g_Vault); }
public client_connect( id ) { get_user_name(id, g_szAuth[id], 34); get_user_authid(id, g_szAuthID[id], 34); get_user_ip(id, g_szAuthIP[id], 34, 1);
LoadLevel(id); }
public client_disconnect( id ) { SaveLevel(id); }
public plugin_cfg( ) { g_Vault = nvault_open("mod");
if ( g_Vault == INVALID_HANDLE ) set_fail_state("Error opening MOD nVault, file does not exist!"); }
public MySQLx_Init() { if ( !get_pcvar_num(p_Enabled) || !get_pcvar_num(save_type) ) return;
new szHost[64], szUser[32], szPass[32], szDB[128]; get_pcvar_string(mysqlx_host, szHost, charsmax(szHost)); get_pcvar_string(mysqlx_user, szUser, charsmax(szUser)); get_pcvar_string(mysqlx_pass, szPass, charsmax(szPass)); get_pcvar_string(mysqlx_db, szDB, charsmax(szDB)); g_SqlTuple = SQL_MakeDbTuple(szHost, szUser, szPass, szDB); for(new i = 0; i < sizeof szTables; i++) { SQL_ThreadQuery(g_SqlTuple, "QueryCreateTable", szTables[i]); } }
public QueryCreateTable( iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime ) { if ( iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED ) { log_amx("%s", szError); return; } }
SaveLevel(id) { if ( get_pcvar_num(savexp) == 2 ) { if ( !get_pcvar_num(save_type) ) { new szData[256]; new szKey[64]; formatex(szKey, 63, "%s-NAME", g_szAuth[id]); formatex(szData, 255 , "%i#%i#", PlayerLevel[id], PlayerXp[id]); nvault_set(g_Vault, szKey, szData); } else { static szQuery[128];
formatex(szQuery, 127, "REPLACE INTO `levels` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", g_szAuth[id], PlayerLevel[id], PlayerXp[id]); SQL_ThreadQuery(g_SqlTuple, "QuerySetData", szQuery); } }
if ( get_pcvar_num(savexp) == 1 ) { if ( !get_pcvar_num(save_type) ) { new szData[256]; new szKey[64]; formatex(szKey, 63, "%s-ID", g_szAuthID[id]); formatex(szData, 255 , "%i#%i#", PlayerLevel[id], PlayerXp[id]); nvault_set(g_Vault, szKey, szData); } else { static szQuery[128];
formatex(szQuery, 127, "REPLACE INTO `levels` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", g_szAuthID[id] , PlayerLevel[id], PlayerXp[id]); SQL_ThreadQuery(g_SqlTuple, "QuerySetData", szQuery); } }
if ( get_pcvar_num(savexp) == 0 ) { if ( !get_pcvar_num(save_type) ) { new szData[256]; new szKey[64]; formatex(szKey, 63, "%s-IP", g_szAuthIP[id]); formatex(szData, 255, "%i#%i#", PlayerLevel[id], PlayerXp[id]); nvault_set(g_Vault, szKey, szData); } else { static szQuery[128];
formatex(szQuery, 127, "REPLACE INTO `levels` (`player_id`, `player_level`, `player_xp`) VALUES ('%s', '%d', '%d');", g_szAuthIP[id] , PlayerLevel[id], PlayerXp[id]); SQL_ThreadQuery(g_SqlTuple, "QuerySetData", szQuery); } } }
LoadLevel(id) { if ( get_pcvar_num(savexp) == 2 ) { if ( !get_pcvar_num(save_type) ) { new szData[256]; new szKey[40];
formatex(szKey, 39, "%s-NAME", g_szAuth[id]);
formatex(szData, 255, "%i#%i#", PlayerLevel[id], PlayerXp[id]); nvault_get(g_Vault, szKey, szData, 255);
replace_all(szData, 255, "#", " "); new xp[32], level[32]; parse(szData, level, 31, xp, 31); PlayerLevel[id] = str_to_num(level); PlayerXp[id] = str_to_num(xp); } else { static szQuery[128], iData[1]; formatex(szQuery, 127, "SELECT `player_level`, `player_xp` FROM `sdm_levels` WHERE (`player_id` = '%s');", g_szAuth[id]);
iData[0] = id; SQL_ThreadQuery(g_SqlTuple, "QuerySelectData", szQuery, iData, 1); } }
if ( get_pcvar_num(savexp) == 1 ) { if ( !get_pcvar_num(save_type) ) { new szData[256]; new szKey[40];
formatex(szKey, 39, "%s-ID", g_szAuthID[id]);
formatex(szData, 255, "%i#%i#", PlayerLevel[id], PlayerXp[id]); nvault_get(g_Vault, szKey, szData, 255);
replace_all(szData, 255, "#", " "); new xp[32], level[32]; parse(szData, level, 31, xp, 31); PlayerLevel[id] = str_to_num(level); PlayerXp[id] = str_to_num(xp); } else { static szQuery[128], iData[1]; formatex(szQuery, 127, "SELECT `player_level`, `player_xp` FROM `sdm_levels` WHERE (`player_id` = '%s');", g_szAuthID[id]);
iData[0] = id; SQL_ThreadQuery(g_SqlTuple, "QuerySelectData", szQuery, iData, 1); } }
if ( get_pcvar_num(savexp) == 0 ) { if ( !get_pcvar_num(save_type) ) { new szData[256]; new szKey[40];
formatex(szKey, 39, "%s-IP", g_szAuthIP[id]);
formatex(szData, 255, "%i#%i#", PlayerLevel[id], PlayerXp[id]); nvault_get(g_Vault, szKey, szData, 255);
replace_all(szData , 255, "#", " "); new xp[32], level[32]; parse(szData, level, 31, xp, 31); PlayerLevel[id] = str_to_num(level); PlayerXp[id] = str_to_num(xp); } else { static szQuery[128], iData[1]; formatex(szQuery, 127, "SELECT `player_level`, `player_xp` FROM `sdm_levels` WHERE (`player_id` = '%s');", g_szAuthIP[id]); iData[0] = id; SQL_ThreadQuery(g_SqlTuple, "QuerySelectData", szQuery, iData, 1); } } }
public QuerySelectData( iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime ) { if ( iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED ) { log_amx("%s", szError); return; } else { new id = iData[0]; new ColLevel = SQL_FieldNameToNum(hQuery, "player_level"); new ColXp = SQL_FieldNameToNum(hQuery, "player_xp"); while (SQL_MoreResults(hQuery)) { PlayerLevel[id] = SQL_ReadResult(hQuery, ColLevel); PlayerXp[id] = SQL_ReadResult(hQuery, ColXp); SQL_NextRow(hQuery); } } }
public QuerySetData( iFailState, Handle:hQuery, szError[], iError, iData[], iDataSize, Float:fQueueTime ) { if ( iFailState == TQUERY_CONNECT_FAILED || iFailState == TQUERY_QUERY_FAILED ) { log_amx("%s", szError); return; } }
I need that experience and level would be saved by name. When player change his name in server, level and experience will be reseted.
If player changes his name. last used nick xp would be saved. and when he changes it back. experience and level cames back.
And i got this error:
L 12/29/2009 - 01:40:47: [AMXX] Displaying debug trace (plugin "mod.amxx")
L 12/29/2009 - 01:40:47: [AMXX] Run time error 10: native error (native "nvault_close")
L 12/29/2009 - 01:40:47: [AMXX] [0] mod.sma::plugin_end (line 121)
L 12/29/2009 - 09:31:05: Start of error session.
|