Участник
Пользователь
- Сообщения
- 73
- Реакции
- 8
Всем привет.
На сервере использую некую систему монеток, которые сохраняются в бд по steamid.
При входе на сервер создается запрос для проверки - есть ли в бд steamid этого игрока и далее выполняется код.
При выходе игрока в зависимости от результата проверки (выше) также выполняется разный код (простое обновление значения в ячейке (монеток), либо полное добавление записи об игроке)
Сама проблема: в бд иногда появляются записи игроков со steamid, которые уже есть в бд.
То есть, запись в бд имеется, а проверка "не проходит что ли"...
Может с кодом что-то не так ?
Вопрос: почему такое может быть ?
ps код урезан
На сервере использую некую систему монеток, которые сохраняются в бд по steamid.
При входе на сервер создается запрос для проверки - есть ли в бд steamid этого игрока и далее выполняется код.
При выходе игрока в зависимости от результата проверки (выше) также выполняется разный код (простое обновление значения в ячейке (монеток), либо полное добавление записи об игроке)
Сама проблема: в бд иногда появляются записи игроков со steamid, которые уже есть в бд.
То есть, запись в бд имеется, а проверка "не проходит что ли"...
Может с кодом что-то не так ?
Вопрос: почему такое может быть ?
ps код урезан
Код:
#include <amxmodx>
#include <sqlx>
enum _:ques { INSTALL_PLUGIN, LOAD_COINS, ADD_COINS, UPD_COINS, PRUNED };
new Handle:g_sql_tuple, szQuery[512], data[3];
new bool:g_InBase[33], coins[33];
public PluginCfg()
{
g_sql_tuple = SQL_MakeDbTuple(szHost, szUser, szPasswd, szDb);
data[0] = INSTALL_PLUGIN;
formatex(szQuery, charsmax(szQuery), "CREATE TABLE IF NOT EXISTS `Coins_BD` (`coins` int(10) NOT NULL, `SteamID` varchar(25) NOT NULL, `Last_Connection` int(11) NOT NULL) ENGINE=MyISAM DEFAULT CHARSET=utf8;");
SQL_ThreadQuery(g_sql_tuple, "SQL_Handler", szQuery, data, sizeof(data));
data[0] = PRUNED;
formatex(szQuery, charsmax(szQuery), "DELETE FROM `Coins_BD` WHERE `Last_Connection` < (UNIX_TIMESTAMP(NOW()) - %d)", (30 * 86400));
SQL_ThreadQuery(g_sql_tuple, "SQL_Handler", szQuery, data, sizeof(data));
}
public client_putinserver(id)
{
data[0] = LOAD_COINS;
data[1] = id;
new szAuthid[25]; get_user_authid(id, szAuthid, charsmax(szAuthid));
formatex(szQuery, charsmax(szQuery), "SELECT * FROM `Coins_BD` WHERE `SteamID` = '%s'", szAuthid);
SQL_ThreadQuery(g_sql_tuple, "SQL_Handler", szQuery, data, sizeof(data));
}
public client_disconnected(id)
{
new szAuthid[25]; get_user_authid(id, szAuthid, charsmax(szAuthid));
data[1] = id;
switch(g_InBase[id])
{
case false:
{
data[0] = ADD_COINS;
formatex(szQuery, charsmax(szQuery), "INSERT INTO `Coins_BD` (coins, SteamID, Last_Connection) VALUES ('%d', '%s', UNIX_TIMESTAMP(NOW()))", coins[id], szAuthid);
}
case true:
{
data[0] = UPD_COINS;
formatex(szQuery, charsmax(szQuery), "UPDATE `Coins_BD` SET `coins` = '%d', `Last_Connection` = UNIX_TIMESTAMP(NOW()) WHERE `SteamID` = '%s'", coins[id], szAuthid);
}
}
SQL_ThreadQuery(g_sql_tuple, "SQL_Handler", szQuery, data, sizeof(data));
}
public SQL_Handler(failstate, Handle:query, err[], errcode, data[], datasize)
{
if(failstate == TQUERY_SUCCESS)
{
switch(data[0])
{
case LOAD_COINS:
{
new id = data[1];
if(SQL_NumResults(query))
{
g_InBase[id] = true;
//code
}
else
{
g_InBase[id] = false;
//code
}
}
case PRUNED:
{
SQL_AffectedRows(query);
}
case INSTALL_PLUGIN, ADD_COINS, UPD_COINS: { }
}
}
else log_amx("[State #%d] Error [#%d] %s", data[0], errcode, err);
return PLUGIN_CONTINUE;
}
public plugin_end()
SQL_FreeHandle(g_sql_tuple);