Primo
типа серьёзный тип
- Сообщения
- 1,532
- Реакции
- 759
Возникла проблема:-D
Приспичило немного переписать плагин сохранения статистики в бд, да вот проблема возникла.
Имеется такой код:
Суть проблемы в том, что в базу в поле Steam записывается ник игрока, а не его STEAMID. Происходит это редко, но это очень мешает. Как, когда и по какой причине это происходит - я не имею понятия.
Один из вариантов, это при подключении к серверу игрока кикает, но, разве, steamid не известен уже в тот момент?
Приспичило немного переписать плагин сохранения статистики в бд, да вот проблема возникла.
Имеется такой код:
PHP:
public OnClientPostAdminCheck(client)
{
decl String:sAuth[32];
GetClientAuthString(client, sAuth, sizeof(sAuth) - 1);
decl String:sQuery[256];
Format(sQuery, sizeof(sQuery) - 1, "SELECT * FROM dp_users WHERE Steam = '%s'", sAuth);
SQL_TQuery(db, SQL_SelectPlayerCallback, sQuery, client);
}
public SQL_SelectPlayerCallback(Handle:owner, Handle:hndl, const String:error[], any:iClient)
{
if(hndl == INVALID_HANDLE)
{
LogError("Ошибка подключения к базе данных (%s)", error);
}
else
{
if(SQL_HasResultSet(hndl) && SQL_FetchRow(hndl) && IsClientInGame(iClient))
{
Player[pKills][iClient] = SQL_FetchInt(hndl, 2);
Player[pDeaths][iClient] = SQL_FetchInt(hndl, 3);
Player[pLevel][iClient] = SQL_FetchInt(hndl, 4);
Player[pEXP][iClient] = SQL_FetchInt(hndl, 5);
Player[pCredit][iClient] = SQL_FetchInt(hndl, 6);
Player[pBanValue][iClient] = SQL_FetchInt(hndl, 7);
}
else
{
Player[pKills][iClient] = 0;
Player[pDeaths][iClient] = 0;
Player[pLevel][iClient] = 0;
Player[pEXP][iClient] = 0;
Player[pCredit][iClient] = 0;
Player[pBanValue][iClient] = 0;
}
}
}
public OnClientDisconnect(client)
{
if(0 < client <= MaxClients && !IsFakeClient(client))
{
Player[PlayerJoin][client] = 1;
decl String:sAuth[64], String:pName[150], String:query[2048];
GetClientName(client, sAuth, sizeof(sAuth) - 1);
SQL_EscapeString(db, sAuth, pName, sizeof(pName) - 1);
GetClientAuthString(client, sAuth, sizeof(sAuth) - 1);
FormatEx(query, sizeof(query),
"INSERT INTO dp_users (Steam, Nick, Kills, Deaths, Level, EXP, Credits, BanValue) VALUES ('%s', '%s', %d, %d, %d, %d, %d, %d) ON DUPLICATE KEY UPDATE Steam = '%s', Nick = '%s', Kills = %d, Deaths = %d, Level = %d, EXP = %d, Credits = %d, BanValue = %d",
sAuth,
pName,
Player[pKills][client],
Player[pDeaths][client],
Player[pLevel][client],
Player[pEXP][client],
Player[pCredit][client],
Player[pBanValue][client],
sAuth,
pName,
Player[pKills][client],
Player[pDeaths][client],
Player[pLevel][client],
Player[pEXP][client],
Player[pCredit][client],
Player[pBanValue][client]);
SQL_TQuery(db, SQL_SelectPlayerCallback, query);
}
}
Суть проблемы в том, что в базу в поле Steam записывается ник игрока, а не его STEAMID. Происходит это редко, но это очень мешает. Как, когда и по какой причине это происходит - я не имею понятия.
Один из вариантов, это при подключении к серверу игрока кикает, но, разве, steamid не известен уже в тот момент?