Diff
checker
Testo
Testo
Immagini
Documenti
Excel
Cartelle
Legal
Enterprise
Applicazione per desktop
Prezzi
Accedi
Scarica Diffchecker Desktop
Confronta il testo
Trova la differenza tra due file di testo
Strumenti
Cronologia
Editor live
Nascondi spazi bianchi
Comprimi invariate
Senza a capo
Layout
Diviso
Unificato
Livello di dettaglio
Intelligente
Parola
Carattere
Stili testo
Modifica aspetto
Evidenziazione sintassi
Scegli sintassi
Ignora
Trasforma testo
Vai alla prima modifica
Modifica input
Diffchecker Desktop
Il modo più sicuro per usare Diffchecker. Ottieni l'app Diffchecker Desktop: i tuoi diff non lasciano mai il tuo computer!
Ottieni Desktop
AMXX4U reaimdetector
Creato
3 anni fa
Il diff non scade mai
Eliminare
Esporta
Condividere
Spiegare
526 rimozioni
Linee
Totale
Rimosso
Caratteri
Totale
Rimosso
Per continuare a utilizzare questa funzione, aggiorna a
Diff
checker
Pro
Visualizza prezzi
776 linee
Copia tutti
537 aggiunte
Linee
Totale
Aggiunto
Caratteri
Totale
Aggiunto
Per continuare a utilizzare questa funzione, aggiorna a
Diff
checker
Pro
Visualizza prezzi
782 linee
Copia tutti
#include <amxmodx>
#include <amxmodx>
#include <reaimdetector>
#include <reaimdetector>
#pragma semicolon 1
#pragma semicolon 1
#if !defined MAX_PLAYERS
#if !defined MAX_PLAYERS
Copia
Copiato
Copia
Copiato
#define MAX_PLAYERS
32
#define MAX_PLAYERS
32
#endif
#endif
#if defined client_disconnected
#if defined client_disconnected
Copia
Copiato
Copia
Copiato
#define player_disconnect client_disconnected
#define player_disconnect client_disconnected
#else
#else
Copia
Copiato
Copia
Copiato
#define player_disconnect client_disconnect
#define player_disconnect client_disconnect
#endif
#endif
Copia
Copiato
Copia
Copiato
#define ENABLE_LOG_FILE
// ŠŠŗŠ»ŃŃŠøŃŃ Š»Š¾Š³ŠøŃŠ¾Š²Š°Š½ŠøŠµ
#define ENABLE_LOG_FILE
// ŠŠŗŠ»ŃŃŠøŃŃ Š»Š¾Š³ŠøŃŠ¾Š²Š°Š½ŠøŠµ
#define RELOAD_CMD
ADMIN_
CFG
// Флаг ГоŃŃŃŠæŠ° Šŗ команГе ŠæŠµŃŠµŠ·Š°Š³ŃŃŠ·ŠŗŠø ŠŗŠ¾Š½ŃŠøŠ³Š°: reaim_reloadcfg
#define RELOAD_CMD
ADMIN_
IMMUNITY
// Флаг ГоŃŃŃŠæŠ° Šŗ команГе ŠæŠµŃŠµŠ·Š°Š³ŃŃŠ·ŠŗŠø ŠŗŠ¾Š½ŃŠøŠ³Š°: reaim_reloadcfg
#define MENU_CMD
ADMIN_
BAN
// Флаг ГоŃŃŃŠæŠ° Šŗ Aim менŃ: say /aim
#define MENU_CMD
ADMIN_
IMMUNITY
// Флаг ГоŃŃŃŠæŠ° Šŗ Aim менŃ: say /aim
new const reAIMPrefix[] = "^4[ReAim]^1";
new const NSDPrefix[] = "^4[NSD]^1";
enum CfgType
enum CfgType
{
{
Copia
Copiato
Copia
Copiato
AIM = 1,
AIM = 1,
SPREAD,
SPREAD,
PUNISH,
PUNISH,
SAVE,
SAVE,
OTHER
OTHER
}
}
#if (AMXX_VERSION_NUM < 183)
#if (AMXX_VERSION_NUM < 183)
Copia
Copiato
Copia
Copiato
enum
enum
{
{
print_team_default = 0,
print_team_default = 0,
print_team_grey = -1,
print_team_grey = -1,
print_team_red = -2,
print_team_red = -2,
print_team_blue = -3
print_team_blue = -3
};
};
Copia
Copiato
Copia
Copiato
#define replace_string replace_all
#define replace_string replace_all
#endif
#endif
new Trie:g_tAimBotSteamWarns, Trie:g_tAimBotIpWarns;
new Trie:g_tAimBotSteamWarns, Trie:g_tAimBotIpWarns;
new Trie:g_tNoSpreadSteamWarns, Trie:g_tNoSpreadIpWarns;
new Trie:g_tNoSpreadSteamWarns, Trie:g_tNoSpreadIpWarns;
new g_iAimDetection, g_iAimSens, g_iAimMultiWarn, g_iAimNotify, g_iAimMaxWarns, g_iAimShotsReset, g_iAimKillsReset, g_iAimTimeReset;
new g_iAimDetection, g_iAimSens, g_iAimMultiWarn, g_iAimNotify, g_iAimMaxWarns, g_iAimShotsReset, g_iAimKillsReset, g_iAimTimeReset;
new g_iSaveType, g_iAimSaveWarns, g_iSpreadSaveWarns;
new g_iSaveType, g_iAimSaveWarns, g_iSpreadSaveWarns;
new g_iSpreadDetection, g_iSpreadNotify, g_iSpreadMaxWarns;
new g_iSpreadDetection, g_iSpreadNotify, g_iSpreadMaxWarns;
new g_iAlertFlag;
new g_iAlertFlag;
new g_iSendProtectionWeapon;
new g_iSendProtectionWeapon;
new g_iCrashCheat;
new g_iCrashCheat;
new g_iBanTime[PunishType];
new g_iBanTime[PunishType];
new g_szBanReason[PunishType][64];
new g_szBanReason[PunishType][64];
new g_szBanString[PunishType][128];
new g_szBanString[PunishType][128];
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
new g_FilePath[64], g_LogDir[128];
new g_FilePath[64], g_LogDir[128];
#endif
#endif
Copia
Copiato
Copia
Copiato
static const configs_file[] = "addons_configs/amxx4u/antycheat/reaimdetector.ini";
public plugin_init()
public plugin_init()
{
{
Copia
Copiato
Copia
Copiato
register_plugin("ReAimDetector API", REAIMDETECTOR_VERSION, "ReHLDS Team
");
register_plugin("ReAimDetector API", REAIMDETECTOR_VERSION, "ReHLDS Team
& NewITVision", "https://amxx4u.pl/
");
Copia
Copiato
Copia
Copiato
register_concmd("reaim_reloadcfg", "ReloadCfg",
RELOAD_CMD
);
register_concmd("reaim_reloadcfg", "ReloadCfg",
ADMIN_IMMUNITY
);
Copia
Copiato
Copia
Copiato
register_clcmd("say /aim", "AimMenu", MENU_CMD);
register_clcmd("say /aim", "AimMenu", MENU_CMD);
register_clcmd("say_team /aim", "AimMenu", MENU_CMD);
register_clcmd("say_team /aim", "AimMenu", MENU_CMD);
Copia
Copiato
Copia
Copiato
g_tAimBotSteamWarns = TrieCreate();
g_tAimBotSteamWarns = TrieCreate();
g_tAimBotIpWarns = TrieCreate();
g_tAimBotIpWarns = TrieCreate();
g_tNoSpreadSteamWarns = TrieCreate();
g_tNoSpreadSteamWarns = TrieCreate();
g_tNoSpreadIpWarns = TrieCreate();
g_tNoSpreadIpWarns = TrieCreate();
}
}
public plugin_end()
public plugin_end()
{
{
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
new Map[32], BufLog[64];
new Map[32], BufLog[64];
get_mapname(Map, charsmax(Map));
get_mapname(Map, charsmax(Map));
formatex(BufLog, charsmax(BufLog), "End Map [%s]", Map);
formatex(BufLog, charsmax(BufLog), "End Map [%s]", Map);
SaveLogFile(BufLog);
SaveLogFile(BufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
TrieClear(g_tAimBotSteamWarns);
TrieClear(g_tAimBotSteamWarns);
TrieClear(g_tAimBotIpWarns);
TrieClear(g_tAimBotIpWarns);
TrieClear(g_tNoSpreadSteamWarns);
TrieClear(g_tNoSpreadSteamWarns);
TrieClear(g_tNoSpreadIpWarns);
TrieClear(g_tNoSpreadIpWarns);
}
}
public client_putinserver(id)
public client_putinserver(id)
{
{
Copia
Copiato
Copia
Copiato
switch(g_iSaveType)
switch(g_iSaveType)
{
{
case 1:
case 1:
{
{
new szSteam[33], iWarns;
new szSteam[33], iWarns;
get_user_authid(id, szSteam, charsmax(szSteam));
get_user_authid(id, szSteam, charsmax(szSteam));
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
new szBufLog[190], szAddress[17], szName[32];
new szBufLog[190], szAddress[17], szName[32];
get_user_ip(id, szAddress, charsmax(szAddress), 1);
get_user_ip(id, szAddress, charsmax(szAddress), 1);
get_user_name(id, szName, charsmax(szName));
get_user_name(id, szName, charsmax(szName));
#endif
#endif
Copia
Copiato
Copia
Copiato
if(TrieKeyExists(g_tAimBotSteamWarns, szSteam))
if(TrieKeyExists(g_tAimBotSteamWarns, szSteam))
{
{
TrieGetCell(g_tAimBotSteamWarns, szSteam, iWarns);
TrieGetCell(g_tAimBotSteamWarns, szSteam, iWarns);
TrieDeleteKey(g_tAimBotSteamWarns, szSteam);
TrieDeleteKey(g_tAimBotSteamWarns, szSteam);
Copia
Copiato
Copia
Copiato
ad_set_client(id, AimWarn, iWarns);
ad_set_client(id, AimWarn, iWarns);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
}
}
Copia
Copiato
Copia
Copiato
if(TrieKeyExists(g_tNoSpreadSteamWarns, szSteam))
if(TrieKeyExists(g_tNoSpreadSteamWarns, szSteam))
{
{
TrieGetCell(g_tNoSpreadSteamWarns, szSteam, iWarns);
TrieGetCell(g_tNoSpreadSteamWarns, szSteam, iWarns);
TrieDeleteKey(g_tNoSpreadSteamWarns, szSteam);
TrieDeleteKey(g_tNoSpreadSteamWarns, szSteam);
Copia
Copiato
Copia
Copiato
ad_set_client(id, NoSpreadWarn, iWarns);
ad_set_client(id, NoSpreadWarn, iWarns);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
}
}
}
}
case 2:
case 2:
{
{
new szAddress[17], iWarns;
new szAddress[17], iWarns;
get_user_ip(id, szAddress, charsmax(szAddress), 1);
get_user_ip(id, szAddress, charsmax(szAddress), 1);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
new szBufLog[190], szSteam[33], szName[32];
new szBufLog[190], szSteam[33], szName[32];
get_user_authid(id, szSteam, charsmax(szSteam));
get_user_authid(id, szSteam, charsmax(szSteam));
get_user_name(id, szName, charsmax(szName));
get_user_name(id, szName, charsmax(szName));
#endif
#endif
Copia
Copiato
Copia
Copiato
if(TrieKeyExists(g_tAimBotIpWarns, szAddress))
if(TrieKeyExists(g_tAimBotIpWarns, szAddress))
{
{
TrieGetCell(g_tAimBotIpWarns, szAddress, iWarns);
TrieGetCell(g_tAimBotIpWarns, szAddress, iWarns);
TrieDeleteKey(g_tAimBotIpWarns, szAddress);
TrieDeleteKey(g_tAimBotIpWarns, szAddress);
Copia
Copiato
Copia
Copiato
ad_set_client(id, AimWarn, iWarns);
ad_set_client(id, AimWarn, iWarns);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
}
}
Copia
Copiato
Copia
Copiato
if(TrieKeyExists(g_tNoSpreadIpWarns, szAddress))
if(TrieKeyExists(g_tNoSpreadIpWarns, szAddress))
{
{
TrieGetCell(g_tNoSpreadIpWarns, szAddress, iWarns);
TrieGetCell(g_tNoSpreadIpWarns, szAddress, iWarns);
TrieDeleteKey(g_tNoSpreadIpWarns, szAddress);
TrieDeleteKey(g_tNoSpreadIpWarns, szAddress);
Copia
Copiato
Copia
Copiato
ad_set_client(id, NoSpreadWarn, iWarns);
ad_set_client(id, NoSpreadWarn, iWarns);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
}
}
}
}
case 3:
case 3:
{
{
new szSteam[33], szAddress[17], iWarns;
new szSteam[33], szAddress[17], iWarns;
get_user_authid(id, szSteam, charsmax(szSteam));
get_user_authid(id, szSteam, charsmax(szSteam));
get_user_ip(id, szAddress, charsmax(szAddress), 1);
get_user_ip(id, szAddress, charsmax(szAddress), 1);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
new szBufLog[190], szName[32];
new szBufLog[190], szName[32];
get_user_name(id, szName, charsmax(szName));
get_user_name(id, szName, charsmax(szName));
#endif
#endif
Copia
Copiato
Copia
Copiato
new bool:IsExistsAim = false;
new bool:IsExistsAim = false;
new bool:IsExistsSpread = false;
new bool:IsExistsSpread = false;
Copia
Copiato
Copia
Copiato
if(TrieKeyExists(g_tAimBotSteamWarns, szSteam))
if(TrieKeyExists(g_tAimBotSteamWarns, szSteam))
{
{
IsExistsAim = true;
IsExistsAim = true;
Copia
Copiato
Copia
Copiato
TrieGetCell(g_tAimBotSteamWarns, szSteam, iWarns);
TrieGetCell(g_tAimBotSteamWarns, szSteam, iWarns);
TrieDeleteKey(g_tAimBotSteamWarns, szSteam);
TrieDeleteKey(g_tAimBotSteamWarns, szSteam);
Copia
Copiato
Copia
Copiato
ad_set_client(id, AimWarn, iWarns);
ad_set_client(id, AimWarn, iWarns);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
}
}
Copia
Copiato
Copia
Copiato
if(TrieKeyExists(g_tAimBotIpWarns, szAddress))
if(TrieKeyExists(g_tAimBotIpWarns, szAddress))
{
{
if(IsExistsAim)
if(IsExistsAim)
{
{
TrieDeleteKey(g_tAimBotIpWarns, szAddress);
TrieDeleteKey(g_tAimBotIpWarns, szAddress);
}
}
else
else
{
{
TrieGetCell(g_tAimBotIpWarns, szAddress, iWarns);
TrieGetCell(g_tAimBotIpWarns, szAddress, iWarns);
TrieDeleteKey(g_tAimBotIpWarns, szAddress);
TrieDeleteKey(g_tAimBotIpWarns, szAddress);
Copia
Copiato
Copia
Copiato
ad_set_client(id, AimWarn, iWarns);
ad_set_client(id, AimWarn, iWarns);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
}
}
}
}
Copia
Copiato
Copia
Copiato
if(TrieKeyExists(g_tNoSpreadSteamWarns, szSteam))
if(TrieKeyExists(g_tNoSpreadSteamWarns, szSteam))
{
{
IsExistsSpread = true;
IsExistsSpread = true;
Copia
Copiato
Copia
Copiato
TrieGetCell(g_tNoSpreadSteamWarns, szSteam, iWarns);
TrieGetCell(g_tNoSpreadSteamWarns, szSteam, iWarns);
TrieDeleteKey(g_tNoSpreadSteamWarns, szSteam);
TrieDeleteKey(g_tNoSpreadSteamWarns, szSteam);
Copia
Copiato
Copia
Copiato
ad_set_client(id, NoSpreadWarn, iWarns);
ad_set_client(id, NoSpreadWarn, iWarns);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
}
}
Copia
Copiato
Copia
Copiato
if(TrieKeyExists(g_tNoSpreadIpWarns, szAddress))
if(TrieKeyExists(g_tNoSpreadIpWarns, szAddress))
{
{
if(IsExistsSpread)
if(IsExistsSpread)
{
{
TrieDeleteKey(g_tNoSpreadIpWarns, szAddress);
TrieDeleteKey(g_tNoSpreadIpWarns, szAddress);
}
}
else
else
{
{
TrieGetCell(g_tNoSpreadIpWarns, szAddress, iWarns);
TrieGetCell(g_tNoSpreadIpWarns, szAddress, iWarns);
TrieDeleteKey(g_tNoSpreadIpWarns, szAddress);
TrieDeleteKey(g_tNoSpreadIpWarns, szAddress);
Copia
Copiato
Copia
Copiato
ad_set_client(id, NoSpreadWarn, iWarns);
ad_set_client(id, NoSpreadWarn, iWarns);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
}
}
}
}
}
}
}
}
}
}
public player_disconnect(id)
public player_disconnect(id)
{
{
Copia
Copiato
Copia
Copiato
switch(g_iSaveType)
switch(g_iSaveType)
{
{
case 1:
case 1:
{
{
new szSteam[33];
new szSteam[33];
get_user_authid(id, szSteam, charsmax(szSteam));
get_user_authid(id, szSteam, charsmax(szSteam));
Copia
Copiato
Copia
Copiato
new iAimBotWarns = ad_get_client(id, AimWarn);
new iAimBotWarns = ad_get_client(id, AimWarn);
new iNoSpreadWarns = ad_get_client(id, NoSpreadWarn);
new iNoSpreadWarns = ad_get_client(id, NoSpreadWarn);
Copia
Copiato
Copia
Copiato
if(iAimBotWarns >= g_iAimSaveWarns)
if(iAimBotWarns >= g_iAimSaveWarns)
{
{
TrieSetCell(g_tAimBotSteamWarns, szSteam, iAimBotWarns);
TrieSetCell(g_tAimBotSteamWarns, szSteam, iAimBotWarns);
}
}
Copia
Copiato
Copia
Copiato
if(iNoSpreadWarns >= g_iSpreadSaveWarns)
if(iNoSpreadWarns >= g_iSpreadSaveWarns)
{
{
TrieSetCell(g_tNoSpreadSteamWarns, szSteam, iNoSpreadWarns);
TrieSetCell(g_tNoSpreadSteamWarns, szSteam, iNoSpreadWarns);
}
}
}
}
case 2:
case 2:
{
{
new szAddress[17];
new szAddress[17];
get_user_ip(id, szAddress, charsmax(szAddress), 1);
get_user_ip(id, szAddress, charsmax(szAddress), 1);
Copia
Copiato
Copia
Copiato
new iAimBotWarns = ad_get_client(id, AimWarn);
new iAimBotWarns = ad_get_client(id, AimWarn);
new iNoSpreadWarns = ad_get_client(id, NoSpreadWarn);
new iNoSpreadWarns = ad_get_client(id, NoSpreadWarn);
Copia
Copiato
Copia
Copiato
if(iAimBotWarns >= g_iAimSaveWarns)
if(iAimBotWarns >= g_iAimSaveWarns)
{
{
TrieSetCell(g_tAimBotIpWarns, szAddress, iAimBotWarns);
TrieSetCell(g_tAimBotIpWarns, szAddress, iAimBotWarns);
}
}
Copia
Copiato
Copia
Copiato
if(iNoSpreadWarns >= g_iSpreadSaveWarns)
if(iNoSpreadWarns >= g_iSpreadSaveWarns)
{
{
TrieSetCell(g_tNoSpreadIpWarns, szAddress, iNoSpreadWarns);
TrieSetCell(g_tNoSpreadIpWarns, szAddress, iNoSpreadWarns);
}
}
}
}
case 3:
case 3:
{
{
new szSteam[33], szAddress[17];
new szSteam[33], szAddress[17];
get_user_authid(id, szSteam, charsmax(szSteam));
get_user_authid(id, szSteam, charsmax(szSteam));
get_user_ip(id, szAddress, charsmax(szAddress), 1);
get_user_ip(id, szAddress, charsmax(szAddress), 1);
Copia
Copiato
Copia
Copiato
new iAimBotWarns = ad_get_client(id, AimWarn);
new iAimBotWarns = ad_get_client(id, AimWarn);
new iNoSpreadWarns = ad_get_client(id, NoSpreadWarn);
new iNoSpreadWarns = ad_get_client(id, NoSpreadWarn);
Copia
Copiato
Copia
Copiato
if(iAimBotWarns >= g_iAimSaveWarns)
if(iAimBotWarns >= g_iAimSaveWarns)
{
{
TrieSetCell(g_tAimBotSteamWarns, szSteam, iAimBotWarns);
TrieSetCell(g_tAimBotSteamWarns, szSteam, iAimBotWarns);
TrieSetCell(g_tAimBotIpWarns, szAddress, iAimBotWarns);
TrieSetCell(g_tAimBotIpWarns, szAddress, iAimBotWarns);
}
}
Copia
Copiato
Copia
Copiato
if(iNoSpreadWarns >= g_iSpreadSaveWarns)
if(iNoSpreadWarns >= g_iSpreadSaveWarns)
{
{
TrieSetCell(g_tNoSpreadSteamWarns, szSteam, iNoSpreadWarns);
TrieSetCell(g_tNoSpreadSteamWarns, szSteam, iNoSpreadWarns);
TrieSetCell(g_tNoSpreadIpWarns, szAddress, iNoSpreadWarns);
TrieSetCell(g_tNoSpreadIpWarns, szAddress, iNoSpreadWarns);
}
}
}
}
}
}
}
}
public ReloadCfg(id, level, cid)
public ReloadCfg(id, level, cid)
{
{
Copia
Copiato
Copia
Copiato
if(~get_user_flags(id) & level) {
if(~get_user_flags(id) & level) {
return PLUGIN_CONTINUE;
return PLUGIN_CONTINUE;
}
}
Copia
Copiato
Copia
Copiato
ReadCfg();
ReadCfg();
Copia
Copiato
Copia
Copiato
client_print(id, print_console, "[Aim Detector]: Reload Cfg.");
client_print(id, print_console, "[Aim Detector]: Reload Cfg.");
Copia
Copiato
Copia
Copiato
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
public AimMenu(id, level)
public AimMenu(id, level)
{
{
Copia
Copiato
Copia
Copiato
if(~get_user_flags(id) & level) {
if(~get_user_flags(id) & level) {
return PLUGIN_CONTINUE;
return PLUGIN_CONTINUE;
}
}
Copia
Copiato
Copia
Copiato
static iPlayers[32], iNum, i, iPlayer;
static iPlayers[32], iNum, i, iPlayer;
get_players(iPlayers, iNum, "ch");
get_players(iPlayers, iNum, "ch");
Copia
Copiato
Copia
Copiato
new szName[32], szInfo[3], szTempString[96];
new szName[32], szInfo[3], szTempString[96];
new iMenu = menu_create("\wAim Detector
ŠŠµŠ½Ń
", "AimMenuHandler");
new iMenu = menu_create("\wAim Detector
menu
", "AimMenuHandler");
Copia
Copiato
Copia
Copiato
new bool:bFindPlayer = false;
new bool:bFindPlayer = false;
Copia
Copiato
Copia
Copiato
for(i = 0; i < iNum; i++)
for(i = 0; i < iNum; i++)
{
{
iPlayer = iPlayers[i];
iPlayer = iPlayers[i];
Copia
Copiato
Copia
Copiato
new iAimBotWarns = ad_get_client(iPlayer, AimWarn);
new iAimBotWarns = ad_get_client(iPlayer, AimWarn);
new iNoSpreadWarns = ad_get_client(iPlayer, NoSpreadWarn);
new iNoSpreadWarns = ad_get_client(iPlayer, NoSpreadWarn);
Copia
Copiato
Copia
Copiato
if(iAimBotWarns == 0 && iNoSpreadWarns == 0) {
if(iAimBotWarns == 0 && iNoSpreadWarns == 0) {
continue;
continue;
}
}
Copia
Copiato
Copia
Copiato
bFindPlayer = true;
bFindPlayer = true;
Copia
Copiato
Copia
Copiato
get_user_name(iPlayer, szName, charsmax(szName));
get_user_name(iPlayer, szName, charsmax(szName));
Copia
Copiato
Copia
Copiato
formatex(szTempString, charsmax(szTempString), "\w%s \r[\yAim\r: \w%d\r|\yNoSpread\r: \w%d\r]", szName, iAimBotWarns, iNoSpreadWarns);
formatex(szTempString, charsmax(szTempString), "\w%s \r[\yAim\r: \w%d\r|\yNoSpread\r: \w%d\r]", szName, iAimBotWarns, iNoSpreadWarns);
Copia
Copiato
Copia
Copiato
num_to_str(iPlayer, szInfo, charsmax(szInfo));
num_to_str(iPlayer, szInfo, charsmax(szInfo));
menu_additem(iMenu, szTempString, szInfo);
menu_additem(iMenu, szTempString, szInfo);
}
}
Copia
Copiato
Copia
Copiato
if(bFindPlayer)
if(bFindPlayer)
{
{
menu_setprop(iMenu, MPROP_NUMBER_COLOR, "\r");
menu_setprop(iMenu, MPROP_NUMBER_COLOR, "\r");
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL);
menu_setprop(iMenu, MPROP_EXITNAME, "ŠŃŃ Š¾Š“");
menu_setprop(iMenu, MPROP_EXITNAME, "ŠŃŃ Š¾Š“");
menu_setprop(iMenu, MPROP_NEXTNAME, "ŠŠ°Š»ŠµŠµ");
menu_setprop(iMenu, MPROP_NEXTNAME, "ŠŠ°Š»ŠµŠµ");
menu_setprop(iMenu, MPROP_BACKNAME, "ŠŠ°Š·Š°Š“");
menu_setprop(iMenu, MPROP_BACKNAME, "ŠŠ°Š·Š°Š“");
menu_display(id, iMenu);
menu_display(id, iMenu);
}
}
else
else
{
{
new szBufNotify[190];
new szBufNotify[190];
formatex(szBufNotify, charsmax(szBufNotify), "
^1[^4Aim Detector^1] ^3Š”ŠæŠøŃŠ¾Šŗ ^1в ^4Š¼ŠµŠ½Ń ^3ŠæŃŃŃŠ¾Š¹
^1."
);
formatex(szBufNotify, charsmax(szBufNotify), "
%s Lista w menu jest^4 pusta
^1."
, reAIMPrefix
);
client_print_color(id, print_team_default, szBufNotify);
client_print_color(id, print_team_default, szBufNotify);
}
}
Copia
Copiato
Copia
Copiato
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
public AimMenuHandler(id, menu, item)
public AimMenuHandler(id, menu, item)
{
{
Copia
Copiato
Copia
Copiato
if (item == MENU_EXIT)
if (item == MENU_EXIT)
{
{
menu_destroy(menu);
menu_destroy(menu);
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
Copia
Copiato
Copia
Copiato
new iAccess, szInfo[3], iCallback;
new iAccess, szInfo[3], iCallback;
menu_item_getinfo(menu, item, iAccess, szInfo, charsmax(szInfo), .callback = iCallback);
menu_item_getinfo(menu, item, iAccess, szInfo, charsmax(szInfo), .callback = iCallback);
Copia
Copiato
Copia
Copiato
new iPlayer = str_to_num(szInfo);
new iPlayer = str_to_num(szInfo);
Copia
Copiato
Copia
Copiato
new iAimWarn = ad_get_client(iPlayer, AimWarn);
new iAimWarn = ad_get_client(iPlayer, AimWarn);
new iSpreadWarn = ad_get_client(iPlayer, NoSpreadWarn);
new iSpreadWarn = ad_get_client(iPlayer, NoSpreadWarn);
Copia
Copiato
Copia
Copiato
new szBufNotify[190], szName[32];
new szBufNotify[190], szName[32];
get_user_name(iPlayer, szName, charsmax(szName));
get_user_name(iPlayer, szName, charsmax(szName));
Copia
Copiato
Copia
Copiato
formatex(szBufNotify, charsmax(szBufNotify), "
^1[^4Aim Detector^1] ^3
Name
^1[^4 %s ^1] ^3
AimWarn
^1[^4 %d ^1] ^3
NoSpreadWarn
^1[^4 %d ^1]"
, szName, iAimWarn, iSpreadWarn);
formatex(szBufNotify, charsmax(szBufNotify), "
%s
Name
^4[%s]^1
AimWarn
^4[%d]^1
NoSpreadWarn
^4[%d]^1", reAIMPrefix
, szName, iAimWarn, iSpreadWarn);
client_print_color(id, print_team_default, szBufNotify);
client_print_color(id, print_team_default, szBufNotify);
Copia
Copiato
Copia
Copiato
return PLUGIN_HANDLED;
return PLUGIN_HANDLED;
}
}
public ad_init(const Version[], const Map[])
public ad_init(const Version[], const Map[])
{
{
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
get_localinfo("amxx_logs", g_FilePath, charsmax(g_FilePath));
get_localinfo("amxx_logs", g_FilePath, charsmax(g_FilePath));
formatex(g_LogDir, charsmax(g_LogDir), "%s
/reaimdetector
", g_FilePath);
formatex(g_LogDir, charsmax(g_LogDir), "%s
", g_FilePath);
Copia
Copiato
Copia
Copiato
if(!dir_exists(g_LogDir))
if(!dir_exists(g_LogDir))
{
{
mkdir(g_LogDir);
mkdir(g_LogDir);
}
}
#endif
#endif
Copia
Copiato
Copia
Copiato
ReadCfg();
ReadCfg();
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
new szBufLog[190];
new szBufLog[190];
formatex(szBufLog, charsmax(szBufLog), "Start Map [%s] AimSens [%d] AimMaxWarns [%d] NoSpreadNotifyWarns [%d] NoSpreadMaxWarns [%d]",
formatex(szBufLog, charsmax(szBufLog), "Start Map [%s] AimSens [%d] AimMaxWarns [%d] NoSpreadNotifyWarns [%d] NoSpreadMaxWarns [%d]",
Map, ad_get_cfg(AimSens), g_iAimMaxWarns, ad_get_cfg(NoSpreadNotifyWarns), g_iSpreadMaxWarns);
Map, ad_get_cfg(AimSens), g_iAimMaxWarns, ad_get_cfg(NoSpreadNotifyWarns), g_iSpreadMaxWarns);
Copia
Copiato
Copia
Copiato
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
}
}
public ad_notify(const index, const PunishType:pType, const NotifyType:nType, const Kills, const Shots, const Warn)
public ad_notify(const index, const PunishType:pType, const NotifyType:nType, const Kills, const Shots, const Warn)
{
{
Copia
Copiato
Copia
Copiato
new szBufNotify[190], szName[32];
new szBufNotify[190], szName[32];
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
new szBufLog[190], szAddress[22], szSteam[33];
new szBufLog[190], szAddress[22], szSteam[33];
Copia
Copiato
Copia
Copiato
get_user_ip(index, szAddress, charsmax(szAddress));
get_user_ip(index, szAddress, charsmax(szAddress));
get_user_authid(index, szSteam, charsmax(szSteam));
get_user_authid(index, szSteam, charsmax(szSteam));
#endif
#endif
Copia
Copiato
Copia
Copiato
get_user_name(index, szName, charsmax(szName));
get_user_name(index, szName, charsmax(szName));
Copia
Copiato
Copia
Copiato
if(pType == AIMBOT)
if(pType == AIMBOT)
{
{
if(nType == WARNING && Warn > g_iAimNotify)
if(nType == WARNING && Warn > g_iAimNotify)
{
{
formatex(szBufNotify, charsmax(szBufNotify), "
^1[^4Aim Detector^1] ^3Name ^1[
^4 %s
^1] ^3Warn ^1[
^4 %d
^1] ^3MaxWarn ^1[
^4 %d
^1]"
, szName, Warn, g_iAimMaxWarns);
formatex(szBufNotify, charsmax(szBufNotify), "
%s Nick:
^4 %s
^1 | Ostrzerzenie:
^4 %d
^1 | Max ostrzezen:
^4 %d
^1", reAIMPrefix
, szName, Warn, g_iAimMaxWarns);
Send_Notify_Admins(index, szBufNotify);
Send_Notify_Admins(index, szBufNotify);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
formatex(szBufLog, charsmax(szBufLog), "Aim Warn Add: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn);
formatex(szBufLog, charsmax(szBufLog), "Aim Warn Add: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
}
}
else if(nType == DETECT)
else if(nType == DETECT)
{
{
formatex(szBufNotify, charsmax(szBufNotify), "
^1[^4Aim Detector^1] ^3Name ^1[
^4 %s
^1] ^3
Detected"
, szName);
formatex(szBufNotify, charsmax(szBufNotify), "
%s Nick:
^4 %s
^3
Detected"
, reAIMPrefix
, szName);
Send_Notify_Admins(index, szBufNotify);
Send_Notify_Admins(index, szBufNotify);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
formatex(szBufLog, charsmax(szBufLog), "Aim Detected: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn);
formatex(szBufLog, charsmax(szBufLog), "Aim Detected: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
ad_set_client(index, AimCheck, 0);
ad_set_client(index, AimCheck, 0);
Copia
Copiato
Copia
Copiato
PunishPlayer(index, AIMBOT);
PunishPlayer(index, AIMBOT);
}
}
}
}
else if(pType == NOSPREAD)
else if(pType == NOSPREAD)
{
{
if(nType == WARNING && Warn > g_iSpreadNotify)
if(nType == WARNING && Warn > g_iSpreadNotify)
{
{
formatex(szBufNotify, charsmax(szBufNotify), "
^1[^4NoSpread Detector^1] ^3Name ^1[
^4 %s
^1] ^3Warn ^1[
^4 %d
^1]"
, szName, Warn, g_iSpreadMaxWarns);
formatex(szBufNotify, charsmax(szBufNotify), "
%s Nick
^4 %s
^1 | Ostrzezenie^4 %d^1 | Max ostrzezen
^4 %d
^1", NSDPrefix
, szName, Warn, g_iSpreadMaxWarns);
Send_Notify_Admins(index, szBufNotify);
Send_Notify_Admins(index, szBufNotify);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Add: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn);
formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Add: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
}
}
else if(nType == DETECT)
else if(nType == DETECT)
{
{
formatex(szBufNotify, charsmax(szBufNotify), "
^1[^4NoSpread Detector^1] ^3Name ^1[
^4 %s
^1] ^3
Detected"
, szName);
formatex(szBufNotify, charsmax(szBufNotify), "
%s Nick
^4 %s
^3
Detected"
, NSDPrefix
, szName);
Send_Notify_Admins(index, szBufNotify);
Send_Notify_Admins(index, szBufNotify);
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
formatex(szBufLog, charsmax(szBufLog), "NoSpread Detected: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn);
formatex(szBufLog, charsmax(szBufLog), "NoSpread Detected: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
#endif
#endif
Copia
Copiato
Copia
Copiato
ad_set_client(index, NoSpreadCheck, 0);
ad_set_client(index, NoSpreadCheck, 0);
Copia
Copiato
Copia
Copiato
PunishPlayer(index, NOSPREAD);
PunishPlayer(index, NOSPREAD);
}
}
}
}
}
}
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
public ad_aim_reset_warn(const index, const ResetType:rType, const Kills, const Shots)
public ad_aim_reset_warn(const index, const ResetType:rType, const Kills, const Shots)
{
{
new szBufLog[190], szName[32], szAddress[22], szSteam[33];
new szBufLog[190], szName[32], szAddress[22], szSteam[33];
Copia
Copiato
Copia
Copiato
get_user_name(index, szName, charsmax(szName));
get_user_name(index, szName, charsmax(szName));
get_user_ip(index, szAddress, charsmax(szAddress));
get_user_ip(index, szAddress, charsmax(szAddress));
get_user_authid(index, szSteam, charsmax(szSteam));
get_user_authid(index, szSteam, charsmax(szSteam));
Copia
Copiato
Copia
Copiato
switch(rType)
switch(rType)
{
{
case KILLED:
case KILLED:
{
{
formatex(szBufLog, charsmax(szBufLog), "Killed Reset: ID [%d] Name [%s] Steam [%s] IP [%s] Kills [%d] Shots [%d]", index, szName, szSteam, szAddress, Kills + 1, Shots);
formatex(szBufLog, charsmax(szBufLog), "Killed Reset: ID [%d] Name [%s] Steam [%s] IP [%s] Kills [%d] Shots [%d]", index, szName, szSteam, szAddress, Kills + 1, Shots);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
}
}
case SHOTS:
case SHOTS:
{
{
formatex(szBufLog, charsmax(szBufLog), "Shots Reset: ID [%d] Name [%s] Steam [%s] IP [%s] Kills [%d] Shots [%d]", index, szName, szSteam, szAddress, Kills, Shots + 1);
formatex(szBufLog, charsmax(szBufLog), "Shots Reset: ID [%d] Name [%s] Steam [%s] IP [%s] Kills [%d] Shots [%d]", index, szName, szSteam, szAddress, Kills, Shots + 1);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
}
}
case TIME:
case TIME:
{
{
formatex(szBufLog, charsmax(szBufLog), "Time Reset: ID [%d] Name [%s] Steam [%s] IP [%s] Kills [%d] Shots [%d]", index, szName, szSteam, szAddress, Kills, Shots);
formatex(szBufLog, charsmax(szBufLog), "Time Reset: ID [%d] Name [%s] Steam [%s] IP [%s] Kills [%d] Shots [%d]", index, szName, szSteam, szAddress, Kills, Shots);
SaveLogFile(szBufLog);
SaveLogFile(szBufLog);
}
}
}
}
}
}
#endif
#endif
stock ReadCfg()
stock ReadCfg()
{
{
Copia
Copiato
Copia
Copiato
new szFilePath[
64
];
new szFilePath[
256
];
get_localinfo("amxx_configsdir", szFilePath, charsmax(szFilePath));
get_localinfo("amxx_configsdir", szFilePath, charsmax(szFilePath));
formatex(szFilePath, charsmax(szFilePath), "%s/
reaimdetector.ini
", szFilePath
);
formatex(szFilePath, charsmax(szFilePath), "%s/
%s
", szFilePath
, configs_file
);
Copia
Copiato
Copia
Copiato
new FileHandle = fopen(szFilePath, "rt");
new FileHandle = fopen(szFilePath, "rt");
Copia
Copiato
Copia
Copiato
if(!FileHandle)
if(!FileHandle)
{
{
set_fail_state("Error load cfg.");
set_fail_state("Error load cfg.");
}
}
Copia
Copiato
Copia
Copiato
new szTemp[256], szKey[32], szValue[512], iSection;
new szTemp[256], szKey[32], szValue[512], iSection;
Copia
Copiato
Copia
Copiato
while(!feof(FileHandle))
while(!feof(FileHandle))
{
{
fgets(FileHandle, szTemp, charsmax(szTemp));
fgets(FileHandle, szTemp, charsmax(szTemp));
trim(szTemp);
trim(szTemp);
Copia
Copiato
Copia
Copiato
if (szTemp[0] == '[')
if (szTemp[0] == '[')
{
{
iSection++;
iSection++;
continue;
continue;
}
}
Copia
Copiato
Copia
Copiato
if(!szTemp[0] || szTemp[0] == ';' || szTemp[0] == '/') {
if(!szTemp[0] || szTemp[0] == ';' || szTemp[0] == '/') {
continue;
continue;
}
}
Copia
Copiato
Copia
Copiato
strtok(szTemp, szKey, charsmax(szKey), szValue, charsmax(szValue), '=');
strtok(szTemp, szKey, charsmax(szKey), szValue, charsmax(szValue), '=');
trim(szKey);
trim(szKey);
trim(szValue);
trim(szValue);
Copia
Copiato
Copia
Copiato
switch(iSection)
switch(iSection)
{
{
case AIM:
case AIM:
{
{
if(equal(szKey, "AIM_DETECTION"))
if(equal(szKey, "AIM_DETECTION"))
g_iAimDetection = str_to_num(szValue);
g_iAimDetection = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "SENS"))
else if(equal(szKey, "SENS"))
g_iAimSens = str_to_num(szValue);
g_iAimSens = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "MULTI_WARN"))
else if(equal(szKey, "MULTI_WARN"))
g_iAimMultiWarn = str_to_num(szValue);
g_iAimMultiWarn = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "NOTIFY_WARNS"))
else if(equal(szKey, "NOTIFY_WARNS"))
g_iAimNotify = str_to_num(szValue);
g_iAimNotify = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "MAX_WARNS"))
else if(equal(szKey, "MAX_WARNS"))
g_iAimMaxWarns = str_to_num(szValue);
g_iAimMaxWarns = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "SHOTS_RESET"))
else if(equal(szKey, "SHOTS_RESET"))
g_iAimShotsReset = str_to_num(szValue);
g_iAimShotsReset = str_to_num(szValue);
else if(equal(szKey, "KILLS_RESET"))
else if(equal(szKey, "KILLS_RESET"))
g_iAimKillsReset = str_to_num(szValue);
g_iAimKillsReset = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "TIME_RESET"))
else if(equal(szKey, "TIME_RESET"))
g_iAimTimeReset = str_to_num(szValue);
g_iAimTimeReset = str_to_num(szValue);
}
}
case SPREAD:
case SPREAD:
{
{
if(equal(szKey, "NOSPREAD_DETECTION"))
if(equal(szKey, "NOSPREAD_DETECTION"))
g_iSpreadDetection = str_to_num(szValue);
g_iSpreadDetection = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "NOTIFY_WARNS"))
else if(equal(szKey, "NOTIFY_WARNS"))
g_iSpreadNotify = str_to_num(szValue);
g_iSpreadNotify = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "MAX_WARNS"))
else if(equal(szKey, "MAX_WARNS"))
g_iSpreadMaxWarns = str_to_num(szValue);
g_iSpreadMaxWarns = str_to_num(szValue);
}
}
case PUNISH:
case PUNISH:
{
{
if(equal(szKey, "REASON_AIMBOT"))
if(equal(szKey, "REASON_AIMBOT"))
copy(g_szBanReason[AIMBOT], charsmax(g_szBanReason[]), szValue);
copy(g_szBanReason[AIMBOT], charsmax(g_szBanReason[]), szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "BAN_TIME_AIMBOT"))
else if(equal(szKey, "BAN_TIME_AIMBOT"))
g_iBanTime[AIMBOT] = str_to_num(szValue);
g_iBanTime[AIMBOT] = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "REASON_NOSPREAD"))
else if(equal(szKey, "REASON_NOSPREAD"))
copy(g_szBanReason[NOSPREAD], charsmax(g_szBanReason[]), szValue);
copy(g_szBanReason[NOSPREAD], charsmax(g_szBanReason[]), szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "BAN_TIME_NOSPREAD"))
else if(equal(szKey, "BAN_TIME_NOSPREAD"))
g_iBanTime[NOSPREAD] = str_to_num(szValue);
g_iBanTime[NOSPREAD] = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "PUNISH_AIMBOT"))
else if(equal(szKey, "PUNISH_AIMBOT"))
copy(g_szBanString[AIMBOT], charsmax(g_szBanString[]), szValue);
copy(g_szBanString[AIMBOT], charsmax(g_szBanString[]), szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "PUNISH_NOSPREAD"))
else if(equal(szKey, "PUNISH_NOSPREAD"))
copy(g_szBanString[NOSPREAD], charsmax(g_szBanString[]), szValue);
copy(g_szBanString[NOSPREAD], charsmax(g_szBanString[]), szValue);
Copia
Copiato
Copia
Copiato
}
}
case SAVE:
case SAVE:
{
{
if(equal(szKey, "TYPE"))
if(equal(szKey, "TYPE"))
g_iSaveType = str_to_num(szValue);
g_iSaveType = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "AIM_WARNS"))
else if(equal(szKey, "AIM_WARNS"))
g_iAimSaveWarns = str_to_num(szValue);
g_iAimSaveWarns = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "NOSPREAD_WARNS"))
else if(equal(szKey, "NOSPREAD_WARNS"))
g_iSpreadSaveWarns = str_to_num(szValue);
g_iSpreadSaveWarns = str_to_num(szValue);
}
}
case OTHER:
case OTHER:
{
{
if(equal(szKey, "FLAG_ALERT"))
if(equal(szKey, "FLAG_ALERT"))
{
{
new szFlags[21];
new szFlags[21];
copy(szFlags, charsmax(szFlags), szValue);
copy(szFlags, charsmax(szFlags), szValue);
Copia
Copiato
Copia
Copiato
g_iAlertFlag = read_flags(szFlags);
g_iAlertFlag = read_flags(szFlags);
}
}
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "SEND_PROTECTION_WEAPON"))
else if(equal(szKey, "SEND_PROTECTION_WEAPON"))
g_iSendProtectionWeapon = str_to_num(szValue);
g_iSendProtectionWeapon = str_to_num(szValue);
Copia
Copiato
Copia
Copiato
else if(equal(szKey, "CRASH_CHEAT"))
else if(equal(szKey, "CRASH_CHEAT"))
g_iCrashCheat = str_to_num(szValue);
g_iCrashCheat = str_to_num(szValue);
}
}
}
}
}
}
Copia
Copiato
Copia
Copiato
fclose(FileHandle);
fclose(FileHandle);
Copia
Copiato
Copia
Copiato
SetCfg();
SetCfg();
Copia
Copiato
Copia
Copiato
return PLUGIN_CONTINUE;
return PLUGIN_CONTINUE;
}
}
stock SetCfg()
stock SetCfg()
{
{
Copia
Copiato
Copia
Copiato
ad_set_cfg(AimDetection, g_iAimDetection);
ad_set_cfg(AimDetection, g_iAimDetection);
ad_set_cfg(AimSens, g_iAimSens);
ad_set_cfg(AimSens, g_iAimSens);
ad_set_cfg(AimMultiWarns, g_iAimMultiWarn);
ad_set_cfg(AimMultiWarns, g_iAimMultiWarn);
ad_set_cfg(AimNotifyWarns, g_iAimNotify);
ad_set_cfg(AimNotifyWarns, g_iAimNotify);
ad_set_cfg(AimMaxWarns, g_iAimMaxWarns);
ad_set_cfg(AimMaxWarns, g_iAimMaxWarns);
ad_set_cfg(AimShotsReset, g_iAimShotsReset);
ad_set_cfg(AimShotsReset, g_iAimShotsReset);
ad_set_cfg(AimKillsReset, g_iAimKillsReset);
ad_set_cfg(AimKillsReset, g_iAimKillsReset);
ad_set_cfg(AimTimeReset, g_iAimTimeReset);
ad_set_cfg(AimTimeReset, g_iAimTimeReset);
ad_set_cfg(NoSpreadDetection, g_iSpreadDetection);
ad_set_cfg(NoSpreadDetection, g_iSpreadDetection);
ad_set_cfg(NoSpreadNotifyWarns, g_iSpreadNotify);
ad_set_cfg(NoSpreadNotifyWarns, g_iSpreadNotify);
ad_set_cfg(NoSpreadMaxWarns, g_iSpreadMaxWarns);
ad_set_cfg(NoSpreadMaxWarns, g_iSpreadMaxWarns);
ad_set_cfg(SendProtectionWeapon, g_iSendProtectionWeapon);
ad_set_cfg(SendProtectionWeapon, g_iSendProtectionWeapon);
ad_set_cfg(CrashCheat, g_iCrashCheat);
ad_set_cfg(CrashCheat, g_iCrashCheat);
}
}
stock PunishPlayer(id, PunishType:iType)
stock PunishPlayer(id, PunishType:iType)
{
{
Copia
Copiato
Copia
Copiato
new szUserId[10], szSteam[33], szIp[17], szTime[10], szBanString[128];
new szUserId[10], szSteam[33], szIp[17], szTime[10], szBanString[128];
Copia
Copiato
Copia
Copiato
formatex(szUserId, charsmax(szUserId), "#%d", get_user_userid(id));
formatex(szUserId, charsmax(szUserId), "#%d", get_user_userid(id));
Copia
Copiato
Copia
Copiato
get_user_authid(id, szSteam, charsmax(szSteam));
get_user_authid(id, szSteam, charsmax(szSteam));
get_user_ip(id, szIp, charsmax(szIp), 1);
get_user_ip(id, szIp, charsmax(szIp), 1);
Copia
Copiato
Copia
Copiato
num_to_str(g_iBanTime[iType], szTime, charsmax(szTime));
num_to_str(g_iBanTime[iType], szTime, charsmax(szTime));
Copia
Copiato
Copia
Copiato
copy(szBanString, charsmax(szBanString), g_szBanString[iType]);
copy(szBanString, charsmax(szBanString), g_szBanString[iType]);
Copia
Copiato
Copia
Copiato
replace_string(szBanString, charsmax(szBanString), "[userid]", szUserId);
replace_string(szBanString, charsmax(szBanString), "[userid]", szUserId);
replace_string(szBanString, charsmax(szBanString), "[steam]", szSteam);
replace_string(szBanString, charsmax(szBanString), "[steam]", szSteam);
replace_string(szBanString, charsmax(szBanString), "[ip]", szIp);
replace_string(szBanString, charsmax(szBanString), "[ip]", szIp);
replace_string(szBanString, charsmax(szBanString), "[reason]", g_szBanReason[iType]);
replace_string(szBanString, charsmax(szBanString), "[reason]", g_szBanReason[iType]);
replace_string(szBanString, charsmax(szBanString), "[time]", szTime);
replace_string(szBanString, charsmax(szBanString), "[time]", szTime);
Copia
Copiato
Copia
Copiato
server_cmd("%s", szBanString);
server_cmd("%s", szBanString);
}
}
stock Send_Notify_Admins(const NotifyIndex, const Msg[])
stock Send_Notify_Admins(const NotifyIndex, const Msg[])
{
{
Copia
Copiato
Copia
Copiato
new Players[MAX_PLAYERS], iNum, iReceiver;
new Players[MAX_PLAYERS], iNum, iReceiver;
get_players(Players, iNum, "ch");
get_players(Players, iNum, "ch");
Copia
Copiato
Copia
Copiato
for (new i = 0; i < iNum; ++i)
for (new i = 0; i < iNum; ++i)
{
{
iReceiver = Players[i];
iReceiver = Players[i];
Copia
Copiato
Copia
Copiato
if(NotifyIndex == iReceiver || !(get_user_flags(iReceiver) & g_iAlertFlag)) {
if(NotifyIndex == iReceiver || !(get_user_flags(iReceiver) & g_iAlertFlag)) {
continue;
continue;
}
}
Copia
Copiato
Copia
Copiato
client_print_color(iReceiver, print_team_default, Msg);
client_print_color(iReceiver, print_team_default, Msg);
}
}
}
}
#if defined ENABLE_LOG_FILE
#if defined ENABLE_LOG_FILE
Copia
Copiato
Copia
Copiato
stock SaveLogFile(const LogText[])
stock SaveLogFile(const LogText[])
{
{
new LogFileTime[32], LogTime[32], LogFile[128], LogMsg[190];
new LogFileTime[32], LogTime[32], LogFile[128], LogMsg[190];
Copia
Copiato
Copia
Copiato
get_time("20%y.%m.%d", LogFileTime, charsmax(LogFileTime));
get_time("20%y.%m.%d", LogFileTime, charsmax(LogFileTime));
get_time("%H:%M:%S", LogTime, charsmax(LogTime));
get_time("%H:%M:%S", LogTime, charsmax(LogTime));
Copia
Copiato
Copia
Copiato
formatex(LogFile, charsmax(LogFile), "%s/%s.log", g_LogDir, LogFileTime);
formatex(LogFile, charsmax(LogFile), "%s/%s.log", g_LogDir, LogFileTime);
formatex(LogMsg, charsmax(LogMsg), "[%s] [%s] %s", LogFileTime, LogTime, LogText);
formatex(LogMsg, charsmax(LogMsg), "[%s] [%s] %s", LogFileTime, LogTime, LogText);
Copia
Copiato
Copia
Copiato
write_file(LogFile, LogMsg, -1);
write_file(LogFile, LogMsg, -1);
}
}
#endif
#endif
#if (AMXX_VERSION_NUM < 183)
#if (AMXX_VERSION_NUM < 183)
Copia
Copiato
Copia
Copiato
stock client_print_color(const id, const iSender, const input[], any:...)
stock client_print_color(const id, const iSender, const input[], any:...)
{
{
static iSayText = 0;
static iSayText = 0;
if (!iSayText) {
if (!iSayText) {
iSayText = get_user_msgid("SayText");
iSayText = get_user_msgid("SayText");
}
}
new iReceiver, iNum = 1, Players[MAX_PLAYERS], Msg[190];
new iReceiver, iNum = 1, Players[MAX_PLAYERS], Msg[190];
vformat(Msg, charsmax(Msg), input, 3);
vformat(Msg, charsmax(Msg), input, 3);
if(id)
if(id)
{
{
if(!is_user_connected(id)) {
if(!is_user_connected(id)) {
return;
return;
}
}
Players[0] = id;
Players[0] = id;
} else {
} else {
get_players(Players, iNum, "ch");
get_players(Players, iNum, "ch");
}
}
for (new i = 0; i < iNum; i++)
for (new i = 0; i < iNum; i++)
{
{
iReceiver = Players[i];
iReceiver = Players[i];
message_begin(MSG_ONE, iSayText , _, iReceiver);
message_begin(MSG_ONE, iSayText , _, iReceiver);
write_byte(iSender ? iSender : iReceiver);
write_byte(iSender ? iSender : iReceiver);
write_string(Msg);
write_string(Msg);
message_end();
message_end();
}
}
}
}
#endif
#endif
Diff salvati
Testo originale
Apri file
#include <amxmodx> #include <reaimdetector> #pragma semicolon 1 #if !defined MAX_PLAYERS #define MAX_PLAYERS 32 #endif #if defined client_disconnected #define player_disconnect client_disconnected #else #define player_disconnect client_disconnect #endif #define ENABLE_LOG_FILE // ŠŠŗŠ»ŃŃŠøŃŃ Š»Š¾Š³ŠøŃŠ¾Š²Š°Š½ŠøŠµ #define RELOAD_CMD ADMIN_CFG // Флаг ГоŃŃŃŠæŠ° Šŗ команГе ŠæŠµŃŠµŠ·Š°Š³ŃŃŠ·ŠŗŠø ŠŗŠ¾Š½ŃŠøŠ³Š°: reaim_reloadcfg #define MENU_CMD ADMIN_BAN // Флаг ГоŃŃŃŠæŠ° Šŗ Aim менŃ: say /aim enum CfgType { AIM = 1, SPREAD, PUNISH, SAVE, OTHER } #if (AMXX_VERSION_NUM < 183) enum { print_team_default = 0, print_team_grey = -1, print_team_red = -2, print_team_blue = -3 }; #define replace_string replace_all #endif new Trie:g_tAimBotSteamWarns, Trie:g_tAimBotIpWarns; new Trie:g_tNoSpreadSteamWarns, Trie:g_tNoSpreadIpWarns; new g_iAimDetection, g_iAimSens, g_iAimMultiWarn, g_iAimNotify, g_iAimMaxWarns, g_iAimShotsReset, g_iAimKillsReset, g_iAimTimeReset; new g_iSaveType, g_iAimSaveWarns, g_iSpreadSaveWarns; new g_iSpreadDetection, g_iSpreadNotify, g_iSpreadMaxWarns; new g_iAlertFlag; new g_iSendProtectionWeapon; new g_iCrashCheat; new g_iBanTime[PunishType]; new g_szBanReason[PunishType][64]; new g_szBanString[PunishType][128]; #if defined ENABLE_LOG_FILE new g_FilePath[64], g_LogDir[128]; #endif public plugin_init() { register_plugin("ReAimDetector API", REAIMDETECTOR_VERSION, "ReHLDS Team"); register_concmd("reaim_reloadcfg", "ReloadCfg", RELOAD_CMD); register_clcmd("say /aim", "AimMenu", MENU_CMD); register_clcmd("say_team /aim", "AimMenu", MENU_CMD); g_tAimBotSteamWarns = TrieCreate(); g_tAimBotIpWarns = TrieCreate(); g_tNoSpreadSteamWarns = TrieCreate(); g_tNoSpreadIpWarns = TrieCreate(); } public plugin_end() { #if defined ENABLE_LOG_FILE new Map[32], BufLog[64]; get_mapname(Map, charsmax(Map)); formatex(BufLog, charsmax(BufLog), "End Map [%s]", Map); SaveLogFile(BufLog); #endif TrieClear(g_tAimBotSteamWarns); TrieClear(g_tAimBotIpWarns); TrieClear(g_tNoSpreadSteamWarns); TrieClear(g_tNoSpreadIpWarns); } public client_putinserver(id) { switch(g_iSaveType) { case 1: { new szSteam[33], iWarns; get_user_authid(id, szSteam, charsmax(szSteam)); #if defined ENABLE_LOG_FILE new szBufLog[190], szAddress[17], szName[32]; get_user_ip(id, szAddress, charsmax(szAddress), 1); get_user_name(id, szName, charsmax(szName)); #endif if(TrieKeyExists(g_tAimBotSteamWarns, szSteam)) { TrieGetCell(g_tAimBotSteamWarns, szSteam, iWarns); TrieDeleteKey(g_tAimBotSteamWarns, szSteam); ad_set_client(id, AimWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } if(TrieKeyExists(g_tNoSpreadSteamWarns, szSteam)) { TrieGetCell(g_tNoSpreadSteamWarns, szSteam, iWarns); TrieDeleteKey(g_tNoSpreadSteamWarns, szSteam); ad_set_client(id, NoSpreadWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } } case 2: { new szAddress[17], iWarns; get_user_ip(id, szAddress, charsmax(szAddress), 1); #if defined ENABLE_LOG_FILE new szBufLog[190], szSteam[33], szName[32]; get_user_authid(id, szSteam, charsmax(szSteam)); get_user_name(id, szName, charsmax(szName)); #endif if(TrieKeyExists(g_tAimBotIpWarns, szAddress)) { TrieGetCell(g_tAimBotIpWarns, szAddress, iWarns); TrieDeleteKey(g_tAimBotIpWarns, szAddress); ad_set_client(id, AimWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } if(TrieKeyExists(g_tNoSpreadIpWarns, szAddress)) { TrieGetCell(g_tNoSpreadIpWarns, szAddress, iWarns); TrieDeleteKey(g_tNoSpreadIpWarns, szAddress); ad_set_client(id, NoSpreadWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } } case 3: { new szSteam[33], szAddress[17], iWarns; get_user_authid(id, szSteam, charsmax(szSteam)); get_user_ip(id, szAddress, charsmax(szAddress), 1); #if defined ENABLE_LOG_FILE new szBufLog[190], szName[32]; get_user_name(id, szName, charsmax(szName)); #endif new bool:IsExistsAim = false; new bool:IsExistsSpread = false; if(TrieKeyExists(g_tAimBotSteamWarns, szSteam)) { IsExistsAim = true; TrieGetCell(g_tAimBotSteamWarns, szSteam, iWarns); TrieDeleteKey(g_tAimBotSteamWarns, szSteam); ad_set_client(id, AimWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } if(TrieKeyExists(g_tAimBotIpWarns, szAddress)) { if(IsExistsAim) { TrieDeleteKey(g_tAimBotIpWarns, szAddress); } else { TrieGetCell(g_tAimBotIpWarns, szAddress, iWarns); TrieDeleteKey(g_tAimBotIpWarns, szAddress); ad_set_client(id, AimWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } } if(TrieKeyExists(g_tNoSpreadSteamWarns, szSteam)) { IsExistsSpread = true; TrieGetCell(g_tNoSpreadSteamWarns, szSteam, iWarns); TrieDeleteKey(g_tNoSpreadSteamWarns, szSteam); ad_set_client(id, NoSpreadWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } if(TrieKeyExists(g_tNoSpreadIpWarns, szAddress)) { if(IsExistsSpread) { TrieDeleteKey(g_tNoSpreadIpWarns, szAddress); } else { TrieGetCell(g_tNoSpreadIpWarns, szAddress, iWarns); TrieDeleteKey(g_tNoSpreadIpWarns, szAddress); ad_set_client(id, NoSpreadWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } } } } } public player_disconnect(id) { switch(g_iSaveType) { case 1: { new szSteam[33]; get_user_authid(id, szSteam, charsmax(szSteam)); new iAimBotWarns = ad_get_client(id, AimWarn); new iNoSpreadWarns = ad_get_client(id, NoSpreadWarn); if(iAimBotWarns >= g_iAimSaveWarns) { TrieSetCell(g_tAimBotSteamWarns, szSteam, iAimBotWarns); } if(iNoSpreadWarns >= g_iSpreadSaveWarns) { TrieSetCell(g_tNoSpreadSteamWarns, szSteam, iNoSpreadWarns); } } case 2: { new szAddress[17]; get_user_ip(id, szAddress, charsmax(szAddress), 1); new iAimBotWarns = ad_get_client(id, AimWarn); new iNoSpreadWarns = ad_get_client(id, NoSpreadWarn); if(iAimBotWarns >= g_iAimSaveWarns) { TrieSetCell(g_tAimBotIpWarns, szAddress, iAimBotWarns); } if(iNoSpreadWarns >= g_iSpreadSaveWarns) { TrieSetCell(g_tNoSpreadIpWarns, szAddress, iNoSpreadWarns); } } case 3: { new szSteam[33], szAddress[17]; get_user_authid(id, szSteam, charsmax(szSteam)); get_user_ip(id, szAddress, charsmax(szAddress), 1); new iAimBotWarns = ad_get_client(id, AimWarn); new iNoSpreadWarns = ad_get_client(id, NoSpreadWarn); if(iAimBotWarns >= g_iAimSaveWarns) { TrieSetCell(g_tAimBotSteamWarns, szSteam, iAimBotWarns); TrieSetCell(g_tAimBotIpWarns, szAddress, iAimBotWarns); } if(iNoSpreadWarns >= g_iSpreadSaveWarns) { TrieSetCell(g_tNoSpreadSteamWarns, szSteam, iNoSpreadWarns); TrieSetCell(g_tNoSpreadIpWarns, szAddress, iNoSpreadWarns); } } } } public ReloadCfg(id, level, cid) { if(~get_user_flags(id) & level) { return PLUGIN_CONTINUE; } ReadCfg(); client_print(id, print_console, "[Aim Detector]: Reload Cfg."); return PLUGIN_HANDLED; } public AimMenu(id, level) { if(~get_user_flags(id) & level) { return PLUGIN_CONTINUE; } static iPlayers[32], iNum, i, iPlayer; get_players(iPlayers, iNum, "ch"); new szName[32], szInfo[3], szTempString[96]; new iMenu = menu_create("\wAim Detector ŠŠµŠ½Ń", "AimMenuHandler"); new bool:bFindPlayer = false; for(i = 0; i < iNum; i++) { iPlayer = iPlayers[i]; new iAimBotWarns = ad_get_client(iPlayer, AimWarn); new iNoSpreadWarns = ad_get_client(iPlayer, NoSpreadWarn); if(iAimBotWarns == 0 && iNoSpreadWarns == 0) { continue; } bFindPlayer = true; get_user_name(iPlayer, szName, charsmax(szName)); formatex(szTempString, charsmax(szTempString), "\w%s \r[\yAim\r: \w%d\r|\yNoSpread\r: \w%d\r]", szName, iAimBotWarns, iNoSpreadWarns); num_to_str(iPlayer, szInfo, charsmax(szInfo)); menu_additem(iMenu, szTempString, szInfo); } if(bFindPlayer) { menu_setprop(iMenu, MPROP_NUMBER_COLOR, "\r"); menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL); menu_setprop(iMenu, MPROP_EXITNAME, "ŠŃŃ Š¾Š“"); menu_setprop(iMenu, MPROP_NEXTNAME, "ŠŠ°Š»ŠµŠµ"); menu_setprop(iMenu, MPROP_BACKNAME, "ŠŠ°Š·Š°Š“"); menu_display(id, iMenu); } else { new szBufNotify[190]; formatex(szBufNotify, charsmax(szBufNotify), "^1[^4Aim Detector^1] ^3Š”ŠæŠøŃŠ¾Šŗ ^1в ^4Š¼ŠµŠ½Ń ^3ŠæŃŃŃŠ¾Š¹^1."); client_print_color(id, print_team_default, szBufNotify); } return PLUGIN_HANDLED; } public AimMenuHandler(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new iAccess, szInfo[3], iCallback; menu_item_getinfo(menu, item, iAccess, szInfo, charsmax(szInfo), .callback = iCallback); new iPlayer = str_to_num(szInfo); new iAimWarn = ad_get_client(iPlayer, AimWarn); new iSpreadWarn = ad_get_client(iPlayer, NoSpreadWarn); new szBufNotify[190], szName[32]; get_user_name(iPlayer, szName, charsmax(szName)); formatex(szBufNotify, charsmax(szBufNotify), "^1[^4Aim Detector^1] ^3Name ^1[^4 %s ^1] ^3AimWarn ^1[^4 %d ^1] ^3NoSpreadWarn ^1[^4 %d ^1]", szName, iAimWarn, iSpreadWarn); client_print_color(id, print_team_default, szBufNotify); return PLUGIN_HANDLED; } public ad_init(const Version[], const Map[]) { #if defined ENABLE_LOG_FILE get_localinfo("amxx_logs", g_FilePath, charsmax(g_FilePath)); formatex(g_LogDir, charsmax(g_LogDir), "%s/reaimdetector", g_FilePath); if(!dir_exists(g_LogDir)) { mkdir(g_LogDir); } #endif ReadCfg(); #if defined ENABLE_LOG_FILE new szBufLog[190]; formatex(szBufLog, charsmax(szBufLog), "Start Map [%s] AimSens [%d] AimMaxWarns [%d] NoSpreadNotifyWarns [%d] NoSpreadMaxWarns [%d]", Map, ad_get_cfg(AimSens), g_iAimMaxWarns, ad_get_cfg(NoSpreadNotifyWarns), g_iSpreadMaxWarns); SaveLogFile(szBufLog); #endif } public ad_notify(const index, const PunishType:pType, const NotifyType:nType, const Kills, const Shots, const Warn) { new szBufNotify[190], szName[32]; #if defined ENABLE_LOG_FILE new szBufLog[190], szAddress[22], szSteam[33]; get_user_ip(index, szAddress, charsmax(szAddress)); get_user_authid(index, szSteam, charsmax(szSteam)); #endif get_user_name(index, szName, charsmax(szName)); if(pType == AIMBOT) { if(nType == WARNING && Warn > g_iAimNotify) { formatex(szBufNotify, charsmax(szBufNotify), "^1[^4Aim Detector^1] ^3Name ^1[^4 %s ^1] ^3Warn ^1[^4 %d ^1] ^3MaxWarn ^1[^4 %d ^1]", szName, Warn, g_iAimMaxWarns); Send_Notify_Admins(index, szBufNotify); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "Aim Warn Add: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn); SaveLogFile(szBufLog); #endif } else if(nType == DETECT) { formatex(szBufNotify, charsmax(szBufNotify), "^1[^4Aim Detector^1] ^3Name ^1[^4 %s ^1] ^3Detected", szName); Send_Notify_Admins(index, szBufNotify); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "Aim Detected: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn); SaveLogFile(szBufLog); #endif ad_set_client(index, AimCheck, 0); PunishPlayer(index, AIMBOT); } } else if(pType == NOSPREAD) { if(nType == WARNING && Warn > g_iSpreadNotify) { formatex(szBufNotify, charsmax(szBufNotify), "^1[^4NoSpread Detector^1] ^3Name ^1[^4 %s ^1] ^3Warn ^1[^4 %d ^1]", szName, Warn, g_iSpreadMaxWarns); Send_Notify_Admins(index, szBufNotify); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Add: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn); SaveLogFile(szBufLog); #endif } else if(nType == DETECT) { formatex(szBufNotify, charsmax(szBufNotify), "^1[^4NoSpread Detector^1] ^3Name ^1[^4 %s ^1] ^3Detected", szName); Send_Notify_Admins(index, szBufNotify); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "NoSpread Detected: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn); SaveLogFile(szBufLog); #endif ad_set_client(index, NoSpreadCheck, 0); PunishPlayer(index, NOSPREAD); } } } #if defined ENABLE_LOG_FILE public ad_aim_reset_warn(const index, const ResetType:rType, const Kills, const Shots) { new szBufLog[190], szName[32], szAddress[22], szSteam[33]; get_user_name(index, szName, charsmax(szName)); get_user_ip(index, szAddress, charsmax(szAddress)); get_user_authid(index, szSteam, charsmax(szSteam)); switch(rType) { case KILLED: { formatex(szBufLog, charsmax(szBufLog), "Killed Reset: ID [%d] Name [%s] Steam [%s] IP [%s] Kills [%d] Shots [%d]", index, szName, szSteam, szAddress, Kills + 1, Shots); SaveLogFile(szBufLog); } case SHOTS: { formatex(szBufLog, charsmax(szBufLog), "Shots Reset: ID [%d] Name [%s] Steam [%s] IP [%s] Kills [%d] Shots [%d]", index, szName, szSteam, szAddress, Kills, Shots + 1); SaveLogFile(szBufLog); } case TIME: { formatex(szBufLog, charsmax(szBufLog), "Time Reset: ID [%d] Name [%s] Steam [%s] IP [%s] Kills [%d] Shots [%d]", index, szName, szSteam, szAddress, Kills, Shots); SaveLogFile(szBufLog); } } } #endif stock ReadCfg() { new szFilePath[64]; get_localinfo("amxx_configsdir", szFilePath, charsmax(szFilePath)); formatex(szFilePath, charsmax(szFilePath), "%s/reaimdetector.ini", szFilePath); new FileHandle = fopen(szFilePath, "rt"); if(!FileHandle) { set_fail_state("Error load cfg."); } new szTemp[256], szKey[32], szValue[512], iSection; while(!feof(FileHandle)) { fgets(FileHandle, szTemp, charsmax(szTemp)); trim(szTemp); if (szTemp[0] == '[') { iSection++; continue; } if(!szTemp[0] || szTemp[0] == ';' || szTemp[0] == '/') { continue; } strtok(szTemp, szKey, charsmax(szKey), szValue, charsmax(szValue), '='); trim(szKey); trim(szValue); switch(iSection) { case AIM: { if(equal(szKey, "AIM_DETECTION")) g_iAimDetection = str_to_num(szValue); else if(equal(szKey, "SENS")) g_iAimSens = str_to_num(szValue); else if(equal(szKey, "MULTI_WARN")) g_iAimMultiWarn = str_to_num(szValue); else if(equal(szKey, "NOTIFY_WARNS")) g_iAimNotify = str_to_num(szValue); else if(equal(szKey, "MAX_WARNS")) g_iAimMaxWarns = str_to_num(szValue); else if(equal(szKey, "SHOTS_RESET")) g_iAimShotsReset = str_to_num(szValue); else if(equal(szKey, "KILLS_RESET")) g_iAimKillsReset = str_to_num(szValue); else if(equal(szKey, "TIME_RESET")) g_iAimTimeReset = str_to_num(szValue); } case SPREAD: { if(equal(szKey, "NOSPREAD_DETECTION")) g_iSpreadDetection = str_to_num(szValue); else if(equal(szKey, "NOTIFY_WARNS")) g_iSpreadNotify = str_to_num(szValue); else if(equal(szKey, "MAX_WARNS")) g_iSpreadMaxWarns = str_to_num(szValue); } case PUNISH: { if(equal(szKey, "REASON_AIMBOT")) copy(g_szBanReason[AIMBOT], charsmax(g_szBanReason[]), szValue); else if(equal(szKey, "BAN_TIME_AIMBOT")) g_iBanTime[AIMBOT] = str_to_num(szValue); else if(equal(szKey, "REASON_NOSPREAD")) copy(g_szBanReason[NOSPREAD], charsmax(g_szBanReason[]), szValue); else if(equal(szKey, "BAN_TIME_NOSPREAD")) g_iBanTime[NOSPREAD] = str_to_num(szValue); else if(equal(szKey, "PUNISH_AIMBOT")) copy(g_szBanString[AIMBOT], charsmax(g_szBanString[]), szValue); else if(equal(szKey, "PUNISH_NOSPREAD")) copy(g_szBanString[NOSPREAD], charsmax(g_szBanString[]), szValue); } case SAVE: { if(equal(szKey, "TYPE")) g_iSaveType = str_to_num(szValue); else if(equal(szKey, "AIM_WARNS")) g_iAimSaveWarns = str_to_num(szValue); else if(equal(szKey, "NOSPREAD_WARNS")) g_iSpreadSaveWarns = str_to_num(szValue); } case OTHER: { if(equal(szKey, "FLAG_ALERT")) { new szFlags[21]; copy(szFlags, charsmax(szFlags), szValue); g_iAlertFlag = read_flags(szFlags); } else if(equal(szKey, "SEND_PROTECTION_WEAPON")) g_iSendProtectionWeapon = str_to_num(szValue); else if(equal(szKey, "CRASH_CHEAT")) g_iCrashCheat = str_to_num(szValue); } } } fclose(FileHandle); SetCfg(); return PLUGIN_CONTINUE; } stock SetCfg() { ad_set_cfg(AimDetection, g_iAimDetection); ad_set_cfg(AimSens, g_iAimSens); ad_set_cfg(AimMultiWarns, g_iAimMultiWarn); ad_set_cfg(AimNotifyWarns, g_iAimNotify); ad_set_cfg(AimMaxWarns, g_iAimMaxWarns); ad_set_cfg(AimShotsReset, g_iAimShotsReset); ad_set_cfg(AimKillsReset, g_iAimKillsReset); ad_set_cfg(AimTimeReset, g_iAimTimeReset); ad_set_cfg(NoSpreadDetection, g_iSpreadDetection); ad_set_cfg(NoSpreadNotifyWarns, g_iSpreadNotify); ad_set_cfg(NoSpreadMaxWarns, g_iSpreadMaxWarns); ad_set_cfg(SendProtectionWeapon, g_iSendProtectionWeapon); ad_set_cfg(CrashCheat, g_iCrashCheat); } stock PunishPlayer(id, PunishType:iType) { new szUserId[10], szSteam[33], szIp[17], szTime[10], szBanString[128]; formatex(szUserId, charsmax(szUserId), "#%d", get_user_userid(id)); get_user_authid(id, szSteam, charsmax(szSteam)); get_user_ip(id, szIp, charsmax(szIp), 1); num_to_str(g_iBanTime[iType], szTime, charsmax(szTime)); copy(szBanString, charsmax(szBanString), g_szBanString[iType]); replace_string(szBanString, charsmax(szBanString), "[userid]", szUserId); replace_string(szBanString, charsmax(szBanString), "[steam]", szSteam); replace_string(szBanString, charsmax(szBanString), "[ip]", szIp); replace_string(szBanString, charsmax(szBanString), "[reason]", g_szBanReason[iType]); replace_string(szBanString, charsmax(szBanString), "[time]", szTime); server_cmd("%s", szBanString); } stock Send_Notify_Admins(const NotifyIndex, const Msg[]) { new Players[MAX_PLAYERS], iNum, iReceiver; get_players(Players, iNum, "ch"); for (new i = 0; i < iNum; ++i) { iReceiver = Players[i]; if(NotifyIndex == iReceiver || !(get_user_flags(iReceiver) & g_iAlertFlag)) { continue; } client_print_color(iReceiver, print_team_default, Msg); } } #if defined ENABLE_LOG_FILE stock SaveLogFile(const LogText[]) { new LogFileTime[32], LogTime[32], LogFile[128], LogMsg[190]; get_time("20%y.%m.%d", LogFileTime, charsmax(LogFileTime)); get_time("%H:%M:%S", LogTime, charsmax(LogTime)); formatex(LogFile, charsmax(LogFile), "%s/%s.log", g_LogDir, LogFileTime); formatex(LogMsg, charsmax(LogMsg), "[%s] [%s] %s", LogFileTime, LogTime, LogText); write_file(LogFile, LogMsg, -1); } #endif #if (AMXX_VERSION_NUM < 183) stock client_print_color(const id, const iSender, const input[], any:...) { static iSayText = 0; if (!iSayText) { iSayText = get_user_msgid("SayText"); } new iReceiver, iNum = 1, Players[MAX_PLAYERS], Msg[190]; vformat(Msg, charsmax(Msg), input, 3); if(id) { if(!is_user_connected(id)) { return; } Players[0] = id; } else { get_players(Players, iNum, "ch"); } for (new i = 0; i < iNum; i++) { iReceiver = Players[i]; message_begin(MSG_ONE, iSayText , _, iReceiver); write_byte(iSender ? iSender : iReceiver); write_string(Msg); message_end(); } } #endif
Testo modificato
Apri file
#include <amxmodx> #include <reaimdetector> #pragma semicolon 1 #if !defined MAX_PLAYERS #define MAX_PLAYERS 32 #endif #if defined client_disconnected #define player_disconnect client_disconnected #else #define player_disconnect client_disconnect #endif #define ENABLE_LOG_FILE // ŠŠŗŠ»ŃŃŠøŃŃ Š»Š¾Š³ŠøŃŠ¾Š²Š°Š½ŠøŠµ #define RELOAD_CMD ADMIN_IMMUNITY // Флаг ГоŃŃŃŠæŠ° Šŗ команГе ŠæŠµŃŠµŠ·Š°Š³ŃŃŠ·ŠŗŠø ŠŗŠ¾Š½ŃŠøŠ³Š°: reaim_reloadcfg #define MENU_CMD ADMIN_IMMUNITY // Флаг ГоŃŃŃŠæŠ° Šŗ Aim менŃ: say /aim new const reAIMPrefix[] = "^4[ReAim]^1"; new const NSDPrefix[] = "^4[NSD]^1"; enum CfgType { AIM = 1, SPREAD, PUNISH, SAVE, OTHER } #if (AMXX_VERSION_NUM < 183) enum { print_team_default = 0, print_team_grey = -1, print_team_red = -2, print_team_blue = -3 }; #define replace_string replace_all #endif new Trie:g_tAimBotSteamWarns, Trie:g_tAimBotIpWarns; new Trie:g_tNoSpreadSteamWarns, Trie:g_tNoSpreadIpWarns; new g_iAimDetection, g_iAimSens, g_iAimMultiWarn, g_iAimNotify, g_iAimMaxWarns, g_iAimShotsReset, g_iAimKillsReset, g_iAimTimeReset; new g_iSaveType, g_iAimSaveWarns, g_iSpreadSaveWarns; new g_iSpreadDetection, g_iSpreadNotify, g_iSpreadMaxWarns; new g_iAlertFlag; new g_iSendProtectionWeapon; new g_iCrashCheat; new g_iBanTime[PunishType]; new g_szBanReason[PunishType][64]; new g_szBanString[PunishType][128]; #if defined ENABLE_LOG_FILE new g_FilePath[64], g_LogDir[128]; #endif static const configs_file[] = "addons_configs/amxx4u/antycheat/reaimdetector.ini"; public plugin_init() { register_plugin("ReAimDetector API", REAIMDETECTOR_VERSION, "ReHLDS Team & NewITVision", "https://amxx4u.pl/"); register_concmd("reaim_reloadcfg", "ReloadCfg", ADMIN_IMMUNITY); register_clcmd("say /aim", "AimMenu", MENU_CMD); register_clcmd("say_team /aim", "AimMenu", MENU_CMD); g_tAimBotSteamWarns = TrieCreate(); g_tAimBotIpWarns = TrieCreate(); g_tNoSpreadSteamWarns = TrieCreate(); g_tNoSpreadIpWarns = TrieCreate(); } public plugin_end() { #if defined ENABLE_LOG_FILE new Map[32], BufLog[64]; get_mapname(Map, charsmax(Map)); formatex(BufLog, charsmax(BufLog), "End Map [%s]", Map); SaveLogFile(BufLog); #endif TrieClear(g_tAimBotSteamWarns); TrieClear(g_tAimBotIpWarns); TrieClear(g_tNoSpreadSteamWarns); TrieClear(g_tNoSpreadIpWarns); } public client_putinserver(id) { switch(g_iSaveType) { case 1: { new szSteam[33], iWarns; get_user_authid(id, szSteam, charsmax(szSteam)); #if defined ENABLE_LOG_FILE new szBufLog[190], szAddress[17], szName[32]; get_user_ip(id, szAddress, charsmax(szAddress), 1); get_user_name(id, szName, charsmax(szName)); #endif if(TrieKeyExists(g_tAimBotSteamWarns, szSteam)) { TrieGetCell(g_tAimBotSteamWarns, szSteam, iWarns); TrieDeleteKey(g_tAimBotSteamWarns, szSteam); ad_set_client(id, AimWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } if(TrieKeyExists(g_tNoSpreadSteamWarns, szSteam)) { TrieGetCell(g_tNoSpreadSteamWarns, szSteam, iWarns); TrieDeleteKey(g_tNoSpreadSteamWarns, szSteam); ad_set_client(id, NoSpreadWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } } case 2: { new szAddress[17], iWarns; get_user_ip(id, szAddress, charsmax(szAddress), 1); #if defined ENABLE_LOG_FILE new szBufLog[190], szSteam[33], szName[32]; get_user_authid(id, szSteam, charsmax(szSteam)); get_user_name(id, szName, charsmax(szName)); #endif if(TrieKeyExists(g_tAimBotIpWarns, szAddress)) { TrieGetCell(g_tAimBotIpWarns, szAddress, iWarns); TrieDeleteKey(g_tAimBotIpWarns, szAddress); ad_set_client(id, AimWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } if(TrieKeyExists(g_tNoSpreadIpWarns, szAddress)) { TrieGetCell(g_tNoSpreadIpWarns, szAddress, iWarns); TrieDeleteKey(g_tNoSpreadIpWarns, szAddress); ad_set_client(id, NoSpreadWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } } case 3: { new szSteam[33], szAddress[17], iWarns; get_user_authid(id, szSteam, charsmax(szSteam)); get_user_ip(id, szAddress, charsmax(szAddress), 1); #if defined ENABLE_LOG_FILE new szBufLog[190], szName[32]; get_user_name(id, szName, charsmax(szName)); #endif new bool:IsExistsAim = false; new bool:IsExistsSpread = false; if(TrieKeyExists(g_tAimBotSteamWarns, szSteam)) { IsExistsAim = true; TrieGetCell(g_tAimBotSteamWarns, szSteam, iWarns); TrieDeleteKey(g_tAimBotSteamWarns, szSteam); ad_set_client(id, AimWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } if(TrieKeyExists(g_tAimBotIpWarns, szAddress)) { if(IsExistsAim) { TrieDeleteKey(g_tAimBotIpWarns, szAddress); } else { TrieGetCell(g_tAimBotIpWarns, szAddress, iWarns); TrieDeleteKey(g_tAimBotIpWarns, szAddress); ad_set_client(id, AimWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "Aim Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } } if(TrieKeyExists(g_tNoSpreadSteamWarns, szSteam)) { IsExistsSpread = true; TrieGetCell(g_tNoSpreadSteamWarns, szSteam, iWarns); TrieDeleteKey(g_tNoSpreadSteamWarns, szSteam); ad_set_client(id, NoSpreadWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (Steam): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } if(TrieKeyExists(g_tNoSpreadIpWarns, szAddress)) { if(IsExistsSpread) { TrieDeleteKey(g_tNoSpreadIpWarns, szAddress); } else { TrieGetCell(g_tNoSpreadIpWarns, szAddress, iWarns); TrieDeleteKey(g_tNoSpreadIpWarns, szAddress); ad_set_client(id, NoSpreadWarn, iWarns); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Recovered (IP): ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", id, szName, szSteam, szAddress, iWarns); SaveLogFile(szBufLog); #endif } } } } } public player_disconnect(id) { switch(g_iSaveType) { case 1: { new szSteam[33]; get_user_authid(id, szSteam, charsmax(szSteam)); new iAimBotWarns = ad_get_client(id, AimWarn); new iNoSpreadWarns = ad_get_client(id, NoSpreadWarn); if(iAimBotWarns >= g_iAimSaveWarns) { TrieSetCell(g_tAimBotSteamWarns, szSteam, iAimBotWarns); } if(iNoSpreadWarns >= g_iSpreadSaveWarns) { TrieSetCell(g_tNoSpreadSteamWarns, szSteam, iNoSpreadWarns); } } case 2: { new szAddress[17]; get_user_ip(id, szAddress, charsmax(szAddress), 1); new iAimBotWarns = ad_get_client(id, AimWarn); new iNoSpreadWarns = ad_get_client(id, NoSpreadWarn); if(iAimBotWarns >= g_iAimSaveWarns) { TrieSetCell(g_tAimBotIpWarns, szAddress, iAimBotWarns); } if(iNoSpreadWarns >= g_iSpreadSaveWarns) { TrieSetCell(g_tNoSpreadIpWarns, szAddress, iNoSpreadWarns); } } case 3: { new szSteam[33], szAddress[17]; get_user_authid(id, szSteam, charsmax(szSteam)); get_user_ip(id, szAddress, charsmax(szAddress), 1); new iAimBotWarns = ad_get_client(id, AimWarn); new iNoSpreadWarns = ad_get_client(id, NoSpreadWarn); if(iAimBotWarns >= g_iAimSaveWarns) { TrieSetCell(g_tAimBotSteamWarns, szSteam, iAimBotWarns); TrieSetCell(g_tAimBotIpWarns, szAddress, iAimBotWarns); } if(iNoSpreadWarns >= g_iSpreadSaveWarns) { TrieSetCell(g_tNoSpreadSteamWarns, szSteam, iNoSpreadWarns); TrieSetCell(g_tNoSpreadIpWarns, szAddress, iNoSpreadWarns); } } } } public ReloadCfg(id, level, cid) { if(~get_user_flags(id) & level) { return PLUGIN_CONTINUE; } ReadCfg(); client_print(id, print_console, "[Aim Detector]: Reload Cfg."); return PLUGIN_HANDLED; } public AimMenu(id, level) { if(~get_user_flags(id) & level) { return PLUGIN_CONTINUE; } static iPlayers[32], iNum, i, iPlayer; get_players(iPlayers, iNum, "ch"); new szName[32], szInfo[3], szTempString[96]; new iMenu = menu_create("\wAim Detector menu", "AimMenuHandler"); new bool:bFindPlayer = false; for(i = 0; i < iNum; i++) { iPlayer = iPlayers[i]; new iAimBotWarns = ad_get_client(iPlayer, AimWarn); new iNoSpreadWarns = ad_get_client(iPlayer, NoSpreadWarn); if(iAimBotWarns == 0 && iNoSpreadWarns == 0) { continue; } bFindPlayer = true; get_user_name(iPlayer, szName, charsmax(szName)); formatex(szTempString, charsmax(szTempString), "\w%s \r[\yAim\r: \w%d\r|\yNoSpread\r: \w%d\r]", szName, iAimBotWarns, iNoSpreadWarns); num_to_str(iPlayer, szInfo, charsmax(szInfo)); menu_additem(iMenu, szTempString, szInfo); } if(bFindPlayer) { menu_setprop(iMenu, MPROP_NUMBER_COLOR, "\r"); menu_setprop(iMenu, MPROP_EXIT, MEXIT_ALL); menu_setprop(iMenu, MPROP_EXITNAME, "ŠŃŃ Š¾Š“"); menu_setprop(iMenu, MPROP_NEXTNAME, "ŠŠ°Š»ŠµŠµ"); menu_setprop(iMenu, MPROP_BACKNAME, "ŠŠ°Š·Š°Š“"); menu_display(id, iMenu); } else { new szBufNotify[190]; formatex(szBufNotify, charsmax(szBufNotify), "%s Lista w menu jest^4 pusta^1.", reAIMPrefix); client_print_color(id, print_team_default, szBufNotify); } return PLUGIN_HANDLED; } public AimMenuHandler(id, menu, item) { if (item == MENU_EXIT) { menu_destroy(menu); return PLUGIN_HANDLED; } new iAccess, szInfo[3], iCallback; menu_item_getinfo(menu, item, iAccess, szInfo, charsmax(szInfo), .callback = iCallback); new iPlayer = str_to_num(szInfo); new iAimWarn = ad_get_client(iPlayer, AimWarn); new iSpreadWarn = ad_get_client(iPlayer, NoSpreadWarn); new szBufNotify[190], szName[32]; get_user_name(iPlayer, szName, charsmax(szName)); formatex(szBufNotify, charsmax(szBufNotify), "%s Name ^4[%s]^1 AimWarn ^4[%d]^1 NoSpreadWarn ^4[%d]^1", reAIMPrefix, szName, iAimWarn, iSpreadWarn); client_print_color(id, print_team_default, szBufNotify); return PLUGIN_HANDLED; } public ad_init(const Version[], const Map[]) { #if defined ENABLE_LOG_FILE get_localinfo("amxx_logs", g_FilePath, charsmax(g_FilePath)); formatex(g_LogDir, charsmax(g_LogDir), "%s", g_FilePath); if(!dir_exists(g_LogDir)) { mkdir(g_LogDir); } #endif ReadCfg(); #if defined ENABLE_LOG_FILE new szBufLog[190]; formatex(szBufLog, charsmax(szBufLog), "Start Map [%s] AimSens [%d] AimMaxWarns [%d] NoSpreadNotifyWarns [%d] NoSpreadMaxWarns [%d]", Map, ad_get_cfg(AimSens), g_iAimMaxWarns, ad_get_cfg(NoSpreadNotifyWarns), g_iSpreadMaxWarns); SaveLogFile(szBufLog); #endif } public ad_notify(const index, const PunishType:pType, const NotifyType:nType, const Kills, const Shots, const Warn) { new szBufNotify[190], szName[32]; #if defined ENABLE_LOG_FILE new szBufLog[190], szAddress[22], szSteam[33]; get_user_ip(index, szAddress, charsmax(szAddress)); get_user_authid(index, szSteam, charsmax(szSteam)); #endif get_user_name(index, szName, charsmax(szName)); if(pType == AIMBOT) { if(nType == WARNING && Warn > g_iAimNotify) { formatex(szBufNotify, charsmax(szBufNotify), "%s Nick:^4 %s^1 | Ostrzerzenie:^4 %d^1 | Max ostrzezen:^4 %d^1", reAIMPrefix, szName, Warn, g_iAimMaxWarns); Send_Notify_Admins(index, szBufNotify); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "Aim Warn Add: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn); SaveLogFile(szBufLog); #endif } else if(nType == DETECT) { formatex(szBufNotify, charsmax(szBufNotify), "%s Nick:^4 %s^3 Detected", reAIMPrefix, szName); Send_Notify_Admins(index, szBufNotify); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "Aim Detected: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn); SaveLogFile(szBufLog); #endif ad_set_client(index, AimCheck, 0); PunishPlayer(index, AIMBOT); } } else if(pType == NOSPREAD) { if(nType == WARNING && Warn > g_iSpreadNotify) { formatex(szBufNotify, charsmax(szBufNotify), "%s Nick^4 %s^1 | Ostrzezenie^4 %d^1 | Max ostrzezen^4 %d^1", NSDPrefix, szName, Warn, g_iSpreadMaxWarns); Send_Notify_Admins(index, szBufNotify); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "NoSpread Warn Add: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn); SaveLogFile(szBufLog); #endif } else if(nType == DETECT) { formatex(szBufNotify, charsmax(szBufNotify), "%s Nick^4 %s^3 Detected", NSDPrefix, szName); Send_Notify_Admins(index, szBufNotify); #if defined ENABLE_LOG_FILE formatex(szBufLog, charsmax(szBufLog), "NoSpread Detected: ID [%d] Name [%s] Steam [%s] IP [%s] Warn [%d]", index, szName, szSteam, szAddress, Warn); SaveLogFile(szBufLog); #endif ad_set_client(index, NoSpreadCheck, 0); PunishPlayer(index, NOSPREAD); } } } #if defined ENABLE_LOG_FILE public ad_aim_reset_warn(const index, const ResetType:rType, const Kills, const Shots) { new szBufLog[190], szName[32], szAddress[22], szSteam[33]; get_user_name(index, szName, charsmax(szName)); get_user_ip(index, szAddress, charsmax(szAddress)); get_user_authid(index, szSteam, charsmax(szSteam)); switch(rType) { case KILLED: { formatex(szBufLog, charsmax(szBufLog), "Killed Reset: ID [%d] Name [%s] Steam [%s] IP [%s] Kills [%d] Shots [%d]", index, szName, szSteam, szAddress, Kills + 1, Shots); SaveLogFile(szBufLog); } case SHOTS: { formatex(szBufLog, charsmax(szBufLog), "Shots Reset: ID [%d] Name [%s] Steam [%s] IP [%s] Kills [%d] Shots [%d]", index, szName, szSteam, szAddress, Kills, Shots + 1); SaveLogFile(szBufLog); } case TIME: { formatex(szBufLog, charsmax(szBufLog), "Time Reset: ID [%d] Name [%s] Steam [%s] IP [%s] Kills [%d] Shots [%d]", index, szName, szSteam, szAddress, Kills, Shots); SaveLogFile(szBufLog); } } } #endif stock ReadCfg() { new szFilePath[256]; get_localinfo("amxx_configsdir", szFilePath, charsmax(szFilePath)); formatex(szFilePath, charsmax(szFilePath), "%s/%s", szFilePath, configs_file); new FileHandle = fopen(szFilePath, "rt"); if(!FileHandle) { set_fail_state("Error load cfg."); } new szTemp[256], szKey[32], szValue[512], iSection; while(!feof(FileHandle)) { fgets(FileHandle, szTemp, charsmax(szTemp)); trim(szTemp); if (szTemp[0] == '[') { iSection++; continue; } if(!szTemp[0] || szTemp[0] == ';' || szTemp[0] == '/') { continue; } strtok(szTemp, szKey, charsmax(szKey), szValue, charsmax(szValue), '='); trim(szKey); trim(szValue); switch(iSection) { case AIM: { if(equal(szKey, "AIM_DETECTION")) g_iAimDetection = str_to_num(szValue); else if(equal(szKey, "SENS")) g_iAimSens = str_to_num(szValue); else if(equal(szKey, "MULTI_WARN")) g_iAimMultiWarn = str_to_num(szValue); else if(equal(szKey, "NOTIFY_WARNS")) g_iAimNotify = str_to_num(szValue); else if(equal(szKey, "MAX_WARNS")) g_iAimMaxWarns = str_to_num(szValue); else if(equal(szKey, "SHOTS_RESET")) g_iAimShotsReset = str_to_num(szValue); else if(equal(szKey, "KILLS_RESET")) g_iAimKillsReset = str_to_num(szValue); else if(equal(szKey, "TIME_RESET")) g_iAimTimeReset = str_to_num(szValue); } case SPREAD: { if(equal(szKey, "NOSPREAD_DETECTION")) g_iSpreadDetection = str_to_num(szValue); else if(equal(szKey, "NOTIFY_WARNS")) g_iSpreadNotify = str_to_num(szValue); else if(equal(szKey, "MAX_WARNS")) g_iSpreadMaxWarns = str_to_num(szValue); } case PUNISH: { if(equal(szKey, "REASON_AIMBOT")) copy(g_szBanReason[AIMBOT], charsmax(g_szBanReason[]), szValue); else if(equal(szKey, "BAN_TIME_AIMBOT")) g_iBanTime[AIMBOT] = str_to_num(szValue); else if(equal(szKey, "REASON_NOSPREAD")) copy(g_szBanReason[NOSPREAD], charsmax(g_szBanReason[]), szValue); else if(equal(szKey, "BAN_TIME_NOSPREAD")) g_iBanTime[NOSPREAD] = str_to_num(szValue); else if(equal(szKey, "PUNISH_AIMBOT")) copy(g_szBanString[AIMBOT], charsmax(g_szBanString[]), szValue); else if(equal(szKey, "PUNISH_NOSPREAD")) copy(g_szBanString[NOSPREAD], charsmax(g_szBanString[]), szValue); } case SAVE: { if(equal(szKey, "TYPE")) g_iSaveType = str_to_num(szValue); else if(equal(szKey, "AIM_WARNS")) g_iAimSaveWarns = str_to_num(szValue); else if(equal(szKey, "NOSPREAD_WARNS")) g_iSpreadSaveWarns = str_to_num(szValue); } case OTHER: { if(equal(szKey, "FLAG_ALERT")) { new szFlags[21]; copy(szFlags, charsmax(szFlags), szValue); g_iAlertFlag = read_flags(szFlags); } else if(equal(szKey, "SEND_PROTECTION_WEAPON")) g_iSendProtectionWeapon = str_to_num(szValue); else if(equal(szKey, "CRASH_CHEAT")) g_iCrashCheat = str_to_num(szValue); } } } fclose(FileHandle); SetCfg(); return PLUGIN_CONTINUE; } stock SetCfg() { ad_set_cfg(AimDetection, g_iAimDetection); ad_set_cfg(AimSens, g_iAimSens); ad_set_cfg(AimMultiWarns, g_iAimMultiWarn); ad_set_cfg(AimNotifyWarns, g_iAimNotify); ad_set_cfg(AimMaxWarns, g_iAimMaxWarns); ad_set_cfg(AimShotsReset, g_iAimShotsReset); ad_set_cfg(AimKillsReset, g_iAimKillsReset); ad_set_cfg(AimTimeReset, g_iAimTimeReset); ad_set_cfg(NoSpreadDetection, g_iSpreadDetection); ad_set_cfg(NoSpreadNotifyWarns, g_iSpreadNotify); ad_set_cfg(NoSpreadMaxWarns, g_iSpreadMaxWarns); ad_set_cfg(SendProtectionWeapon, g_iSendProtectionWeapon); ad_set_cfg(CrashCheat, g_iCrashCheat); } stock PunishPlayer(id, PunishType:iType) { new szUserId[10], szSteam[33], szIp[17], szTime[10], szBanString[128]; formatex(szUserId, charsmax(szUserId), "#%d", get_user_userid(id)); get_user_authid(id, szSteam, charsmax(szSteam)); get_user_ip(id, szIp, charsmax(szIp), 1); num_to_str(g_iBanTime[iType], szTime, charsmax(szTime)); copy(szBanString, charsmax(szBanString), g_szBanString[iType]); replace_string(szBanString, charsmax(szBanString), "[userid]", szUserId); replace_string(szBanString, charsmax(szBanString), "[steam]", szSteam); replace_string(szBanString, charsmax(szBanString), "[ip]", szIp); replace_string(szBanString, charsmax(szBanString), "[reason]", g_szBanReason[iType]); replace_string(szBanString, charsmax(szBanString), "[time]", szTime); server_cmd("%s", szBanString); } stock Send_Notify_Admins(const NotifyIndex, const Msg[]) { new Players[MAX_PLAYERS], iNum, iReceiver; get_players(Players, iNum, "ch"); for (new i = 0; i < iNum; ++i) { iReceiver = Players[i]; if(NotifyIndex == iReceiver || !(get_user_flags(iReceiver) & g_iAlertFlag)) { continue; } client_print_color(iReceiver, print_team_default, Msg); } } #if defined ENABLE_LOG_FILE stock SaveLogFile(const LogText[]) { new LogFileTime[32], LogTime[32], LogFile[128], LogMsg[190]; get_time("20%y.%m.%d", LogFileTime, charsmax(LogFileTime)); get_time("%H:%M:%S", LogTime, charsmax(LogTime)); formatex(LogFile, charsmax(LogFile), "%s/%s.log", g_LogDir, LogFileTime); formatex(LogMsg, charsmax(LogMsg), "[%s] [%s] %s", LogFileTime, LogTime, LogText); write_file(LogFile, LogMsg, -1); } #endif #if (AMXX_VERSION_NUM < 183) stock client_print_color(const id, const iSender, const input[], any:...) { static iSayText = 0; if (!iSayText) { iSayText = get_user_msgid("SayText"); } new iReceiver, iNum = 1, Players[MAX_PLAYERS], Msg[190]; vformat(Msg, charsmax(Msg), input, 3); if(id) { if(!is_user_connected(id)) { return; } Players[0] = id; } else { get_players(Players, iNum, "ch"); } for (new i = 0; i < iNum; i++) { iReceiver = Players[i]; message_begin(MSG_ONE, iSayText , _, iReceiver); write_byte(iSender ? iSender : iReceiver); write_string(Msg); message_end(); } } #endif
Trovare la differenza