Заказать игровой сервер Контакты (заказать плагин/исправить ошибки/другое) Пожертвовать Поиск

[ вход ]
[ последние сообщения ]

  • Страница 1 из 1
  • 1
кик игрока
dropych Дата: Пятница, 07.07.2017, 19:23:56 | Сообщение # 1
Сообщений: 9
Репутация: 0 [ +/- ]
Как сделать кик игрока, если запрос в бд не сработал
код:
Код
public OnClientPostAdminCheck(client)
{
if (!IsFakeClient(client))
{
decl String:steamid[32],String:clientname[24];
decl String:country[45];
decl String:ip[64];

GetClientName(client, clientname, sizeof(clientname));
GetClientIP(client, ip, sizeof(ip));
GeoipCountry(ip, country, sizeof(country));
GetClientAuthString(client,steamid,sizeof(steamid));
char szQuery[256], szAuth[32];

GetClientAuthId(client, AuthId_Engine, szAuth, sizeof(szAuth), true);
FormatEx(szQuery, sizeof(szQuery), "UPDATE `users` SET `steamid` = '%s' WHERE `ip` = '%s';", steamid, ip); // Формируем запрос
g_hDatabase.Query(SQL_Callback_SelectClient, szQuery, GetClientUserId(client));

}
}
public void SQL_Callback_SelectClient(Database hDatabase, DBResultSet results, const char[] sError, any iUserID) // Обратный вызов
{
if(sError[0]) // Если произошла ошибка
{

LogError("SQL_Callback_SelectClient: %s", sError); // Выводим в лог
return; // Прекращаем выполнение ф-и
}

int Client = GetClientOfUserId(iUserID);
if(Client)
{
// Игрок всё еще на сервере
}
}


Сообщение отредактировал dropych - Пятница, 07.07.2017, 19:24:13
 
_wS_ Дата: Пятница, 07.07.2017, 20:14:31 | Сообщение # 2
Код
if (Client > 0 && SQL_GetAffectedRows(results) < 1 && !IsClientInKickQueue(Client))
{
   KickClient(Client);
}
 
_wS_ Дата: Пятница, 07.07.2017, 20:17:30 | Сообщение # 3
И лучше сделать
mysql: UPDATE IGNORE `users`
sqlite: UPDATE OR IGNORE `users`
А то если записи в таблице нет, if(sError[0]) будет true.
 
dropych Дата: Пятница, 07.07.2017, 20:30:40 | Сообщение # 4
Сообщений: 9
Репутация: 0 [ +/- ]
Сделал так
Код
public OnClientPostAdminCheck(client)
{     
    if (!IsFakeClient(client))
    {
        decl String:steamid[32],String:clientname[24];
        decl String:country[45];
        decl String:ip[64];
  
        GetClientName(client, clientname, sizeof(clientname));
        GetClientIP(client, ip, sizeof(ip));
        GeoipCountry(ip, country, sizeof(country));
        GetClientAuthString(client,steamid,sizeof(steamid));
  char szQuery[256], szAuth[32];
  
        GetClientAuthId(client, AuthId_Engine, szAuth, sizeof(szAuth), true);
FormatEx(szQuery, sizeof(szQuery), "UPDATE IGNORE `users` SET `steamid` = '%s' WHERE `ip` = '%s';", steamid, ip);    // Формируем запрос
        g_hDatabase.Query(SQL_Callback_SelectClient, szQuery, GetClientUserId(client));
  
      
    }
    
    
}
public void SQL_Callback_SelectClient(Database hDatabase, DBResultSet results, const char[] sError, any iUserID) // Обратный вызов
{
    if(sError[0]) // Если произошла ошибка
    {
       
    LogError("SQL_Callback_SelectClient: %s", sError); // Выводим в лог
        return; // Прекращаем выполнение ф-и
    }
    int Client = GetClientOfUserId(iUserID);
    if (Client > 0 && SQL_GetAffectedRows(results) < 1 && !IsClientInKickQueue(Client))
{

   KickClient(Client);
}
   
    if(Client)
    {
       // Игрок всё еще на сервере
    }
}

но оно кикает в любом случаЕ, есть запись в БД или нет
 
  • Страница 1 из 1
  • 1
Поиск: