Помогите решить проблему. На сервере стоит 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;
}
-
Последнее редактирование: