Плагин выключает gotv

Drop

Участник
Сообщения
41
Реакции
1
Помогите решить проблему. На сервере стоит competativ мод,на разминке tv_status показывает, что готв работает и готов к нчалу работы. Когда начинается матч, готв выключается. Без плагина, такой проблемы нет.
Код плагина:
PHP:
#pragma semicolon 1

#include <sourcemod>
#include <geoip>
#pragma tabsize 0
#define VERSION "1.0"
Database g_hDatabase;
public OnPluginStart(){
    Database.Connect(ConnectCallBack, "wac");
    HookEvent("round_start", OnRoundStart, EventHookMode_PostNoCopy);}
public void ConnectCallBack(Database hDatabase, const char[] sError, any data)
{
    if (hDatabase == null)  
    {
        SetFailState("Database failure: %s", sError);
        return;
    }
    g_hDatabase = hDatabase;
    g_hDatabase.SetCharset("utf8");
}
public OnClientPostAdminCheck(client)
{  
    if (!IsClientInGame(client))
    {
        decl String:steamid[32],String:clientname[24];
        decl String:ip[64];
        GetClientName(client, clientname, sizeof(clientname));
        GetClientIP(client, ip, sizeof(ip));
        GetClientAuthId(client,AuthId_Steam2,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_updatesteamid, szQuery, GetClientUserId(client));
public Action:OnRoundStart(Handle:event, String:name[], bool:dontBroadcast)
{
    for (new i = 1 ; i <= MaxClients; i++)
        {
        decl String:steamid[32],String:clientname[24];

        decl String:ip[64];
        GetClientName(i, clientname, sizeof(clientname));
        GetClientIP(i, ip, sizeof(ip));
        GetClientAuthId(i,AuthId_Steam2,steamid,sizeof(steamid));
        char szQuery[256], szAuth[32];
        GetClientAuthId(i, AuthId_Engine, szAuth, sizeof(szAuth), true);
     
        FormatEx(szQuery, sizeof(szQuery), "SELECT `ip` FROM `users` WHERE `ip` = '%s' AND online = 1;", ip);  
        g_hDatabase.Query(SQL_Callback_checkonline, szQuery, GetClientUserId(i));

public void SQL_Callback_checkonline(Database hDatabase, DBResultSet results, const char[] sError, any iUserID)
{
    if(sError[0])
    {
      LogError("SQL_Callback_checkonline: %s", sError);
        return;
    }
    new iClient = GetClientOfUserId(iUserID);
    if (iClient > 0 && SQL_GetAffectedRows(results) < 1 && !IsClientInKickQueue(iClient))
{
   KickClient(iClient, "PFP-AC: LOST CONNECTION");
}
}
public void SQL_Callback_updatesteamid (Database hDatabase, DBResultSet results, const char[] sError, any iUserID)
    {
    if(sError[0])
    {    
      LogError("SQL_Callback_SelectClient: %s", sError);
        return;
    }
    new iClient = GetClientOfUserId(iUserID);
    if (iClient > 0 && SQL_GetAffectedRows(results) < 1 && !IsClientInKickQueue(iClient))  
{
}  
}
--- Добавлено позже ---
экспериментальным путем определил, что проблема кроется в участке кода:
PHP:
public Action:OnRoundStart(Handle:event, String:name[], bool:dontBroadcast)
{
    for (new i = 1 ; i <= MaxClients; i++)
        {
        decl String:steamid[32],String:clientname[24];

        decl String:ip[64];
        GetClientName(i, clientname, sizeof(clientname));
        GetClientIP(i, ip, sizeof(ip));
        GetClientAuthId(i,AuthId_Steam2,steamid,sizeof(steamid));
        char szQuery[256], szAuth[32];
        GetClientAuthId(i, AuthId_Engine, szAuth, sizeof(szAuth), true);
     
        FormatEx(szQuery, sizeof(szQuery), "SELECT `ip` FROM `users` WHERE `ip` = '%s' AND online = 1;", ip);  
        g_hDatabase.Query(SQL_Callback_checkonline, szQuery, GetClientUserId(i));
заменил на таймер
PHP:
public void OnMapStart()   
{
    CreateTimer(120.0, Timer_Message, _, TIMER_REPEAT|TIMER_FLAG_NO_MAPCHANGE);
}

public Action Timer_Message(Handle hTimer) // Каллбек нашего таймера
{
 int iCount;
    for (new i = 1 ; i <= MaxClients; ++i)
        {
        decl String:steamid[32],String:clientname[24];

        decl String:ip[64];
        GetClientName(i, clientname, sizeof(clientname));
        GetClientIP(i, ip, sizeof(ip));
        GetClientAuthId(i,AuthId_Steam2,steamid,sizeof(steamid));
        char szQuery[256], szAuth[32];
        GetClientAuthId(i, AuthId_Engine, szAuth, sizeof(szAuth), true);
      
        FormatEx(szQuery, sizeof(szQuery), "SELECT `ip` FROM `users` WHERE `ip` = '%s' AND online = 1;", ip);   
        g_hDatabase.Query(SQL_Callback_checkonline, szQuery, GetClientUserId(i));
      
  
        ++iCount;
    }
      if(iCount == 0)   
    {
        return Plugin_Stop;   
    }

    return Plugin_Continue;
}
Однако возникла проблема, что первая часть кода. которая выполняет проверку при подключении игрока перестала работать. Подскажите, в чем проблема ? И если все же, есть мысли почему первая версия плагина из первого поста, выключает готв, буду рад прочитать.
-
 
Последнее редактирование:
Сверху Снизу