#include <sourcemod>
new Handle:g_SQL = INVALID_HANDLE, bool:MYSQL;
public OnPluginStart()
{
if (!SQL_CheckConfig("fastmix"))
{
SetFailState("Секция \"fastmix\" не найдена в databases.cfg");
return;
}
decl String:error[256];
g_SQL = SQL_Connect("fastmix", true, error, 256);
if (g_SQL == INVALID_HANDLE)
{
LogError(error);
SetFailState("Не удалось установить SQL соединение");
return;
}
// тип соединения (mysql или sqlite)
new String:driver[15]; SQL_ReadDriver(g_SQL, driver, 15);
MYSQL = StrEqual(driver, "mysql", false);
LogMessage("Установлено %s соединение", MYSQL ? "MYSQL" : "SQLite");
}
public OnClientPutInServer(client)
{
// игрок вошел, делаем запрос
/////////////////////////////////////////////////////
// Если это бот, стоп
if (IsFakeClient(client)) return;
// Если не удалось стим получить (wtf..), стоп
decl String:steamid[28];
if (!GetClientAuthString(client, steamid, 28))
{
KickClient(client, "Не удалось определить ваш SteamID (1)");
return;
}
decl String:zapros[125];
Format(zapros, 125, "SELECT `status` FROM `my_tab` WHERE `my_steamid` = '%s' LIMIT 1", steamid);
SQL_TQuery(g_SQL, wS_OnClientPutInServer_CallBack, zapros, GetClientUserId(client));
}
public wS_OnClientPutInServer_CallBack(Handle:owner, Handle:result, const String:error[], any:userid)
{
// игрок успел выйти, стоп (wtf)
new client = GetClientOfUserId(userid);
if (client < 1) return;
if (result == INVALID_HANDLE)
{
LogError(error); KickClient(client, "wtf, ошибка в SQL запросе");
return;
}
if (!SQL_FetchRow(result))
{
KickClient(client, "Вашего SteamID нет в таблице 'my_tab'");
return;
}
if (SQL_FetchInt(result, 0) == 1)
{
KickClient(client, "Вы отключены (status = 1)");
return;
}
// Разрешаем играть и обновляем status на 1
decl String:steamid[28];
if (!GetClientAuthString(client, steamid, 28))
{
KickClient(client, "Не удалось определить ваш SteamID (2)");
return;
}
decl String:zapros[125];
Format(zapros, 125, "UPDATE `my_tab` SET `status` = 1 WHERE `my_steamid` = '%s'", steamid);
SQL_TQuery(g_SQL, SQL_CallBack, zapros);
}
public SQL_CallBack(Handle:owner, Handle:result, const String:error[])
{
if (result == INVALID_HANDLE) LogError(error);
}