#pragma tabsize 0
#pragma semicolon 1
#pragma newdecls required
#include <sourcemod>
#define PLUGIN_NAME "Auth Exploit Fix"
#define PLUGIN_AUTHOR "xyligan"
#define PLUGIN_DESCRIPTION "Фикс-плагин ошибки идентификации игрока"
#define PLUGIN_VERSION "1.1.3"
#define PLUGIN_URL "https://dynodev.ru"
EngineVersion g_hEngine;
Handle g_hAuthTimer[MAXPLAYERS + 1];
char g_szKickMessage[PLATFORM_MAX_PATH];
public Plugin myinfo = {
name = PLUGIN_NAME,
author = PLUGIN_AUTHOR,
description = PLUGIN_DESCRIPTION,
version = PLUGIN_VERSION,
url = PLUGIN_URL
}
public void OnPluginStart() {
g_hEngine = GetEngineVersion();
ConVar hCvar = CreateConVar("sm_auth_fix_kick_message", "Вы кикнуты по причине неидентификации клиента!", "Сообщение, которое будет отображено игроку при кике");
GetConVarString(hCvar, g_szKickMessage, sizeof g_szKickMessage);
HookConVarChange(hCvar, OnConVarValueChanged);
AutoExecConfig(true, "AuthExploitFix");
for(int iClient = 1; iClient <= MaxClients; iClient++)
if(IsClientInGame(iClient) && !IsFakeClient(iClient))
OnClientConnected(iClient);
}
public void OnMapEnd() {
for(int iClient = 1; iClient <= MaxClients; iClient++)
OnClientDisconnect(iClient);
}
public void OnConVarValueChanged(Handle hCvar, const char[] szOldValue, const char[] szNewValue) {
GetConVarString(hCvar, g_szKickMessage, sizeof g_szKickMessage);
}
public void OnClientConnected(int iClient) {
if(!IsFakeClient(iClient))
g_hAuthTimer[iClient] = CreateTimer(2.0, Timer_CheckAuth, GetClientUserId(iClient), TIMER_REPEAT);
}
public void OnClientDisconnect(int iClient) {
if(g_hAuthTimer[iClient] != INVALID_HANDLE) {
CloseHandle(g_hAuthTimer[iClient]);
g_hAuthTimer[iClient] = null;
}
}
public Action Timer_CheckAuth(Handle hTimer, int iUserID) {
int iClient = GetClientOfUserId(iUserID);
if(!iClient || !IsClientInGame(iClient)) return Plugin_Continue;
// Добавил проверку на авторизацию
if (!IsClientAuthorized(iClient)) return Plugin_Continue;
char szAuth[32];
bool result = GetClientAuthId(iClient, AuthId_Steam2, szAuth, sizeof szAuth);
if(!result ||
StrContains("STEAM_ID_STOP_IGNORING_RETVALS", szAuth, false) != -1 ||
// Еще неверные steamID
StrContains("STEAM_ID_PENDING", szAuth, false) != -1 ||
StrEqual(szAuth, "")
) {
PrintToServer("[AuthExploit] KICK %d (%s) STEAM_ID_INVALID", iClient, szAuth);
// Добавил проверку на IsClientInKickQueue
if (!IsClientInKickQueue(iClient))
KickClient(iClient, g_szKickMessage);
if(g_hEngine != Engine_CSGO)
ServerCommand("namelockid %i 1", iUserID);
}
g_hAuthTimer[iClient] = null;
return Plugin_Handled;
}