/*
Fordította: BBk
*/
#include <amxmodx>
#include <fakemeta>
#define VERSION "12"
#define NAMES_FILE "addons\amxmodx\configs\scanner\names.ini"
#define MESSAGES_FILE "addons\amxmodx\configs\scanner\messages.ini"
#define KEYS_FILE "addons\amxmodx\configs\scanner\keys.ini"
#define ALIASES_FILE "addons\amxmodx\configs\scanner\aliases.ini"
#define ZONES_FILE "addons\amxmodx\configs\scanner\zones.ini"
#define CONFIGS_FILE "addons\amxmodx\configs\scanner\configs.ini"
#define FILES_FILE "addons\amxmodx\configs\scanner\files.ini"
#define CVARS_FILE "addons\amxmodx\configs\scanner\cvars.ini"
#define PROTECTOR_OFFSET 128
#define ALIASES_OFFSET 256
#define FASTFIRE_OFFSET 512
#define AIMBOT_OFFSET 1024
new g_dFwid
new g_dGunsEventidsBitsum
new g_dProtocol
new bool:g_dRoundStatus
new const g_sGunsEvents[][]=
{
"events/awp.sc",
"events/g3sg1.sc",
"events/ak47.sc",
"events/scout.sc",
"events/m249.sc",
"events/m4a1.sc",
"events/sg552.sc",
"events/aug.sc",
"events/sg550.sc",
"events/m3.sc",
"events/xm1014.sc",
"events/usp.sc",
"events/mac10.sc",
"events/ump45.sc",
"events/fiveseven.sc",
"events/p90.sc",
"events/deagle.sc",
"events/p228.sc",
"events/glock18.sc",
"events/mp5n.sc",
"events/tmp.sc",
"events/elite_left.sc",
"events/elite_right.sc",
"events/galil.sc",
"events/famas.sc"
}
new Array:g_sNames
new Array:g_sMessages
new Array:g_sKeys
new Array:g_sAliases
new Array:g_sZones
new Array:g_sConfigs
new Array:g_sCvars
new g_sProtectorString[11]
new g_sAimbotString[11]
new g_sKeyString[11]
new g_dCvarStartTime //kezdo ido
new g_dCvarLogs //logok
new g_dCvarBanType //ban tipus
new g_dCvarProtector //protector
new g_dCvarProtectorBanTime
new g_dCvarAimbot //aimbot
new g_dCvarAimbotBanTime
new g_dCvarNames //nevek
new g_dCvarNamesBanTime
new g_dCvarMessages //uzenetek
new g_dCvarMessagesBanTime
new g_dCvarFullupdate //fullupdate spam
new g_dCvarFullupdateBanTime
new g_dCvarKeys //jogok
new g_dCvarKeysBanTime
new g_dCvarAliases //aliases
new g_dCvarAliasesBanTime
new g_dCvarZones //bug zonak
new g_dCvarZonesBanTime
new g_dCvarFastfire //fastfire
new g_dCvarFastfireBanTime
new g_dCvarCvars //cvarok
new g_dCvarCvarsBanTime
new g_dCvarSpeedhack //speedhack
new g_dCvarSpeedhackMethod
new g_dCvarSpeedhackBanTime
new bool:g_dPlayerStatus[33]
new bool:g_dAimbotStatus[33]
new bool:g_dInAttackStatus[33]
new g_dAimbotDetections[33]
new g_dAimbotWarnings[33]
new g_dFullupdateDetections[33]
new g_dKeysWarnings[33]
new g_dAliasesNumInList[33]
new g_dAliasesWarnings[33]
new g_dFastfire[33]
new g_dShots[33]
new g_dConfigsNumInList[33]
new g_dCvarsNumInList[33]
new g_dFpsMax[33]
new g_dFrames[33]
new g_dSpeedhackOrigin[33][3]
new g_dSpeedWarnings[33]
new g_sAliasesBanReason[33][64]
public plugin_precache()
{
new sBuffer[64],dLine,dLen
while(read_file(FILES_FILE,dLine,sBuffer,63,dLen)!=0)
{
if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
{
dLine++
continue
}
force_unmodified(force_exactfile,{0,0,0},{0,0,0},sBuffer)
dLine++
}
g_dFwid=register_forward(FM_PrecacheEvent,"fwPrecacheEvent",1)
}
public fwPrecacheEvent(type,const name[])
{
for(new i;i<sizeof(g_sGunsEvents);i++)
{
if(equal(g_sGunsEvents[i],name))
{
g_dGunsEventidsBitsum|=(1<<get_orig_retval())
return FMRES_HANDLED
}
}
return FMRES_IGNORED
}
public plugin_init()
{
register_plugin("scanner",VERSION,"felicita")
unregister_forward(FM_PrecacheEvent,g_dFwid,1)
register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
register_logevent("round_start",2,"1=Round_Start")
register_logevent("round_end",2,"1=Round_End")
register_logevent("round_end",2,"1&Restart_Round_")
g_dProtocol=get_cvar_pointer("dp_r_protocol")
server_cmd("exec addons/amxmodx/configs/scanner/main_config.cfg")
g_dCvarStartTime= register_cvar("scanner_start_time","3")
g_dCvarLogs= register_cvar("scanner_logs","1")
g_dCvarBanType= register_cvar("scanner_ban_type","0")
g_dCvarProtector= register_cvar("scanner_protector","1")
g_dCvarProtectorBanTime= register_cvar("scanner_protector_ban_time","1440")
g_dCvarAimbot= register_cvar("scanner_aimbot","1")
g_dCvarAimbotBanTime= register_cvar("scanner_aimbot_ban_time","1440")
g_dCvarNames= register_cvar("scanner_names","1")
g_dCvarNamesBanTime= register_cvar("scanner_names_ban_time","1440")
g_dCvarMessages= register_cvar("scanner_messages","1")
g_dCvarMessagesBanTime= register_cvar("scanner_messages_ban_time","1440")
g_dCvarFullupdate= register_cvar("scanner_fullupdate","1")
g_dCvarFullupdateBanTime= register_cvar("scanner_fullupdate_ban_time","1440")
g_dCvarKeys= register_cvar("scanner_keys","1")
g_dCvarKeysBanTime= register_cvar("scanner_keys_ban_time","1440")
g_dCvarAliases= register_cvar("scanner_aliases","1")
g_dCvarAliasesBanTime= register_cvar("scanner_aliases_ban_time","1440")
g_dCvarZones= register_cvar("scanner_zones","1")
g_dCvarZonesBanTime= register_cvar("scanner_zones_ban_time","1440")
g_dCvarFastfire= register_cvar("scanner_fastfire","1")
g_dCvarFastfireBanTime= register_cvar("scanner_fastfire_ban_time","1440")
g_dCvarCvars= register_cvar("scanner_cvars","1")
g_dCvarCvarsBanTime= register_cvar("scanner_cvars_ban_time","1440")
g_dCvarSpeedhack= register_cvar("scanner_speedhack","1")
g_dCvarSpeedhackMethod= register_cvar("scanner_speedhack_method","1")
g_dCvarSpeedhackBanTime= register_cvar("scanner_speedhack_ban_time","1440")
g_sNames= ArrayCreate(64)
g_sMessages= ArrayCreate(64)
g_sKeys= ArrayCreate(64)
g_sAliases= ArrayCreate(64)
g_sZones= ArrayCreate(512)
g_sConfigs= ArrayCreate(64)
g_sCvars= ArrayCreate(256)
for(new i;i<10;i++)
{
g_sProtectorString[i]=random_num('a','z')
}
for(new i;i<10;i++)
{
g_sAimbotString[i]=random_num('a','z')
}
for(new i;i<10;i++)
{
g_sKeyString[i]=random_num('a','z')
}
new sBuffer[512],dLine,dLen
while(read_file(NAMES_FILE,dLine,sBuffer,64,dLen)!=0)
{
if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
{
dLine++
continue
}
ArrayPushString(g_sNames,sBuffer)
dLine++
}
dLine=0
while(read_file(MESSAGES_FILE,dLine,sBuffer,64,dLen)!=0)
{
if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
{
dLine++
continue
}
ArrayPushString(g_sMessages,sBuffer)
dLine++
}
dLine=0
while(read_file(KEYS_FILE,dLine,sBuffer,64,dLen)!=0)
{
if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
{
dLine++
continue
}
ArrayPushString(g_sKeys,sBuffer)
dLine++
}
dLine=0
while(read_file(ALIASES_FILE,dLine,sBuffer,64,dLen)!=0)
{
if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
{
dLine++
continue
}
ArrayPushString(g_sAliases,sBuffer)
dLine++
}
dLine=0
new sMapName[64],sMap[64]
get_mapname(sMapName,63)
while(read_file(ZONES_FILE,dLine,sBuffer,511,dLen)!=0)
{
if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
{
dLine++
continue
}
parse(sBuffer,sMap,63)
if(!equal(sMapName,sMap))
{
dLine++
continue
}
ArrayPushString(g_sZones,sBuffer)
dLine++
}
dLine=0
while(read_file(CONFIGS_FILE,dLine,sBuffer,63,dLen)!=0)
{
if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
{
dLine++
continue
}
ArrayPushString(g_sConfigs,sBuffer)
dLine++
}
dLine=0
while(read_file(CVARS_FILE,dLine,sBuffer,255,dLen)!=0)
{
if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
{
dLine++
continue
}
ArrayPushString(g_sCvars,sBuffer)
dLine++
}
}
public fwPlaybackEvent(flags,iPlayer,eventid)
{
if(!(g_dGunsEventidsBitsum&(1<<eventid))||!(1<=iPlayer<=32))
{
return FMRES_IGNORED
}
new iFastfire=get_pcvar_num(g_dCvarFastfire)
if(iFastfire)
{
g_dShots[iPlayer]++
new dWeapon=get_user_weapon(iPlayer)
switch(g_dShots[iPlayer])
{
case 2:
{
switch(dWeapon)
{
case CSW_AWP:
{
if(g_dFastfire[iPlayer]<12)
{
punish_fastfire(iPlayer)
}
}
case CSW_SCOUT:
{
if(g_dFastfire[iPlayer]<10)
{
punish_fastfire(iPlayer)
}
}
case CSW_M3:
{
if(g_dFastfire[iPlayer]<7)
{
punish_fastfire(iPlayer)
}
}
}
}
case 5:
{
switch(dWeapon)
{
case CSW_AK47,CSW_M4A1,CSW_GALIL,CSW_SG552,CSW_MAC10,CSW_MP5NAVY:
{
if(g_dFastfire[iPlayer]<2)
{
punish_fastfire(iPlayer)
}
}
case CSW_UMP45:
{
if(g_dFastfire[iPlayer]<3)
{
punish_fastfire(iPlayer)
}
}
case CSW_XM1014,CSW_SG550,CSW_G3SG1:
{
if(g_dFastfire[iPlayer]<8)
{
punish_fastfire(iPlayer)
}
}
}
}
}
}
return FMRES_HANDLED
}
public client_putinserver(iPlayer)
{
if(is_user_bot(iPlayer)||is_user_hltv(iPlayer))
{
return PLUGIN_CONTINUE
}
g_dPlayerStatus[iPlayer]=true
g_dAimbotStatus[iPlayer]=false
g_dInAttackStatus[iPlayer]=false
g_dAimbotDetections[iPlayer]=0
g_dAimbotWarnings[iPlayer]=0
g_dFullupdateDetections[iPlayer]=0
g_dKeysWarnings[iPlayer]=0
g_dAliasesNumInList[iPlayer]=0
g_dAliasesWarnings[iPlayer]=0
g_dFastfire[iPlayer]=0
g_dShots[iPlayer]=0
g_dConfigsNumInList[iPlayer]=0
g_dCvarsNumInList[iPlayer]=0
g_dFpsMax[iPlayer]=100
g_dFrames[iPlayer]=0
g_dSpeedWarnings[iPlayer]=0
new Float:iStartTime=get_pcvar_float(g_dCvarStartTime)
set_task(iStartTime,"start_scan",iPlayer)
return PLUGIN_CONTINUE
}
public client_infochanged(iPlayer)
{
new sName[33],sNameInfo[33]
get_user_name(iPlayer,sName,32)
get_user_info(iPlayer,"name",sNameInfo,32)
if(!equal(sName,sNameInfo))
{
check_name(iPlayer,sNameInfo)
}
}
public client_command(iPlayer)
{
new sArgv[64]
read_argv(0,sArgv,63)
if(equal(sArgv,g_sAimbotString))
{
g_dAimbotDetections[iPlayer]++
return PLUGIN_HANDLED
}
else if(equal(sArgv,"say")||equal(sArgv,"say_team"))
{
new iMessages=get_pcvar_num(g_dCvarMessages)
if(iMessages)
{
new sArgv[64],sArgvAll[128],sBuffer[64],sBanReason[64],dLen
new dArgc=read_argc()
for(new i=1;i<dArgc;i++)
{
read_argv(i,sArgv,63)
format(sArgvAll,127,"%s %s",sArgvAll,sArgv)
}
format(sArgvAll,127,sArgvAll[1])
new dSize=ArraySize(g_sMessages)
for(new i;i<dSize;i++)
{
ArrayGetString(g_sMessages,i,sBuffer,63)
dLen=strlen(sBuffer)
if(sBuffer[0]=='['&&sBuffer[dLen-1]==']')
{
format(sBanReason,dLen-2,sBuffer[1])
continue
}
else
{
if(containi(sArgvAll,sBuffer)!=-1)
{
if(g_dPlayerStatus[iPlayer]==true)
{
//ban messages
new iBanTime=get_pcvar_num(g_dCvarMessagesBanTime)
ban(iPlayer,sBanReason,iBanTime)
}
return PLUGIN_HANDLED
}
}
}
}
}
else if(equal(sArgv,"fullupdate"))
{
g_dFullupdateDetections[iPlayer]++
}
else if(contain(sArgv,g_sKeyString)!=-1)
{
if(g_dPlayerStatus[iPlayer]==true)
{
if(g_dKeysWarnings[iPlayer]==2)
{
new sBanReason[64]
format(sBanReason,63,"%s jog alkalmazasa",sArgv[10])
//ban keys
new iBanTime=get_pcvar_num(g_dCvarKeysBanTime)
ban(iPlayer,sBanReason,iBanTime)
}
else
{
g_dKeysWarnings[iPlayer]++
}
}
return PLUGIN_HANDLED
}
else
{
new sBuffer[64]
ArrayGetString(g_sAliases,g_dAliasesNumInList[iPlayer],sBuffer,63)
if(equal(sArgv,sBuffer))
{
if(task_exists(iPlayer+ALIASES_OFFSET))
{
remove_task(iPlayer+ALIASES_OFFSET)
}
new dSize=ArraySize(g_sAliases)
if(g_dAliasesNumInList[iPlayer]==dSize-1)
{
return PLUGIN_HANDLED
}
g_dAliasesWarnings[iPlayer]=0
g_dAliasesNumInList[iPlayer]++
ArrayGetString(g_sAliases,g_dAliasesNumInList[iPlayer],sBuffer,63)
new dLen=strlen(sBuffer)
if(sBuffer[0]=='['&&sBuffer[dLen-1]==']')
{
new sBanReason[64]
format(sBanReason,dLen-2,sBuffer[1])
g_sAliasesBanReason[iPlayer]=sBanReason
g_dAliasesNumInList[iPlayer]++
ArrayGetString(g_sAliases,g_dAliasesNumInList[iPlayer],sBuffer,63)
}
client_cmd(iPlayer,sBuffer)
set_task(3.0,"check_aliases",iPlayer+ALIASES_OFFSET,_,_,"b")
return PLUGIN_HANDLED
}
}
return PLUGIN_CONTINUE
}
public start_scan(iPlayer)
{
set_user_info(iPlayer,"scanner","")
clear_info(iPlayer)
set_task(0.5,"set_protector_info",iPlayer+PROTECTOR_OFFSET,_,_,"a",20)
set_task(10.5,"check_protector",iPlayer+PROTECTOR_OFFSET)
new iNames= get_pcvar_num(g_dCvarNames)
new iFullupdate= get_pcvar_num(g_dCvarFullupdate)
new iKeys= get_pcvar_num(g_dCvarKeys)
new iAliases= get_pcvar_num(g_dCvarAliases)
new iZones= get_pcvar_num(g_dCvarZones)
new iCvars= get_pcvar_num(g_dCvarCvars)
new iSpeedhack= get_pcvar_num(g_dCvarSpeedhack)
if(iNames)
{
new sName[33]
get_user_name(iPlayer,sName,32)
check_name(iPlayer,sName)
}
if(iFullupdate)
{
set_task(1.0,"check_fullupdate",iPlayer,_,_,"b")
}
if(iKeys)
{
set_task(1.0,"check_keys",iPlayer,_,_,"b")
}
if(iAliases)
{
new dSize=ArraySize(g_sConfigs)
set_task(0.5,"check_configs",iPlayer,_,_,"a",dSize+1)
}
if(iZones)
{
set_task(1.0,"check_zones",iPlayer,_,_,"b")
}
server_cmd("dp_clientinfo %d",iPlayer)
server_exec()
new iProtocol=get_pcvar_num(g_dProtocol)
if(!iProtocol)
{
new iUserid=get_user_userid(iPlayer)
server_cmd("kick #%d [felderito] protokol hiba: a szerver problemat eszlelt a dproto-ban!",iUserid)
}
if(iCvars)
{
switch(iProtocol)
{
case 47:set_task(0.5,"check_cvars_47",iPlayer,_,_,"b")
case 48:set_task(5.0,"check_cvars_48",iPlayer,_,_,"b")
}
}
if(iSpeedhack)
{
new iSpeedhackMethod=get_pcvar_num(g_dCvarSpeedhackMethod)
switch(iSpeedhackMethod)
{
case 1:set_task(0.5,"check_speedhack_1",iPlayer,_,_,"b")
case 2:
{
g_dFrames[iPlayer]=0
switch(iProtocol)
{
case 47:
{
set_task(1.0,"get_user_fps_max",iPlayer,_,_,"a",10)
set_task(11.0,"start_scan_speedhack",iPlayer)
}
case 48:
{
set_task(1.0,"check_speedhack_2",iPlayer,_,_,"b")
set_task(1.0,"check_fps_max",iPlayer,_,_,"b")
}
}
}
}
}
}
public check_configs(iPlayer)
{
new dNum=g_dConfigsNumInList[iPlayer]
new dSize=ArraySize(g_sConfigs)
if(dNum==0)
{
client_print(iPlayer,print_console,"")
client_print(iPlayer,print_console,"==================")
client_print(iPlayer,print_console,"[felderito] kezdes")
client_print(iPlayer,print_console,"")
}
else if(dNum==dSize)
{
client_print(iPlayer,print_console,"")
client_print(iPlayer,print_console,"[felderito] befejezes")
client_print(iPlayer,print_console,"=================")
client_print(iPlayer,print_console,"")
start_check_aliases(iPlayer)
return PLUGIN_CONTINUE
}
new sBuffer[64]
ArrayGetString(g_sConfigs,dNum,sBuffer,63)
client_cmd(iPlayer,"exec ^"%s^"",sBuffer)
g_dConfigsNumInList[iPlayer]++
return PLUGIN_CONTINUE
}
public start_check_aliases(iPlayer)
{
new sBuffer[64]
ArrayGetString(g_sAliases,g_dAliasesNumInList[iPlayer],sBuffer,63)
new dLen=strlen(sBuffer)
if(sBuffer[0]=='['&&sBuffer[dLen-1]==']')
{
new sBanReason[64]
format(sBanReason,dLen-2,sBuffer[1])
g_sAliasesBanReason[iPlayer]=sBanReason
g_dAliasesNumInList[iPlayer]++
ArrayGetString(g_sAliases,g_dAliasesNumInList[iPlayer],sBuffer,63)
}
client_cmd(iPlayer,sBuffer)
set_task(3.0,"check_aliases",iPlayer+ALIASES_OFFSET,_,_,"b")
}
public check_name(iPlayer,sName[])
{
new sBuffer[64],sBanReason[64],dLen
new dSize=ArraySize(g_sNames)
for(new i;i<dSize;i++)
{
ArrayGetString(g_sNames,i,sBuffer,63)
dLen=strlen(sBuffer)
if(sBuffer[0]=='['&&sBuffer[dLen-1]==']')
{
format(sBanReason,dLen-2,sBuffer[1])
continue
}
else
{
if(containi(sName,sBuffer)!=-1)
{
if(g_dPlayerStatus[iPlayer]==true)
{
//ban names
new iBanTime=get_pcvar_num(g_dCvarNamesBanTime)
ban(iPlayer,sBanReason,iBanTime)
}
}
}
}
}
public set_protector_info(iPlayer)
{
iPlayer-=PROTECTOR_OFFSET
new sInfo[11]
get_user_info(iPlayer,"scanner",sInfo,10)
if(equal(sInfo,g_sProtectorString))
{
set_user_info(iPlayer,"scanner","")
set_task(5.0,"set_protector_empty",iPlayer)
if(task_exists(iPlayer+PROTECTOR_OFFSET))
{
remove_task(iPlayer+PROTECTOR_OFFSET)
}
new iAimbot=get_pcvar_num(g_dCvarAimbot)
if(iAimbot)
{
set_task(5.0,"set_aimbot_status",iPlayer)
set_task(0.1,"bind_aimbot_keys",iPlayer)
}
}
else
{
client_cmd(iPlayer,"setinfo scanner %s",g_sProtectorString)
}
}
public check_protector(iPlayer)
{
iPlayer-=PROTECTOR_OFFSET
if(g_dPlayerStatus[iPlayer]==true)
{
new iProtector=get_pcvar_num(g_dCvarProtector)
if(iProtector)
{
//ban protector
new iBanTime=get_pcvar_num(g_dCvarProtectorBanTime)
ban(iPlayer,"protector",iBanTime)
}
}
}
public set_protector_empty(iPlayer)
{
set_user_info(iPlayer,"scanner","")
}
public set_aimbot_status(iPlayer)
{
g_dAimbotStatus[iPlayer]=true
}
public bind_aimbot_keys(iPlayer)
{
client_cmd(iPlayer,"bind mouse1 ^"+attack;%s^"",g_sAimbotString)
client_cmd(iPlayer,"bind ENTER ^"+attack;%s^"",g_sAimbotString)
}
public client_disconnect(iPlayer)
{
reset(iPlayer)
}
public client_PreThink(iPlayer)
{
g_dFrames[iPlayer]++
if(pev(iPlayer,pev_button)&IN_ATTACK)
{
if(g_dInAttackStatus[iPlayer]==false)
{
g_dInAttackStatus[iPlayer]=true
if(!task_exists(iPlayer+FASTFIRE_OFFSET))
{
set_task(0.1,"check_fastfire",iPlayer+FASTFIRE_OFFSET,_,_,"b")
}
if(!task_exists(iPlayer+AIMBOT_OFFSET))
{
set_task(0.1,"check_aimbot",iPlayer+AIMBOT_OFFSET)
}
}
}
else
{
if(g_dInAttackStatus[iPlayer]==true)
{
g_dInAttackStatus[iPlayer]=false
g_dAimbotDetections[iPlayer]=0
g_dShots[iPlayer]=0
g_dFastfire[iPlayer]=0
if(task_exists(iPlayer+FASTFIRE_OFFSET))
{
remove_task(iPlayer+FASTFIRE_OFFSET)
}
if(task_exists(iPlayer+AIMBOT_OFFSET))
{
remove_task(iPlayer+AIMBOT_OFFSET)
}
}
}
}
public check_fullupdate(iPlayer)
{
if(g_dFullupdateDetections[iPlayer]>=4)
{
if(g_dPlayerStatus[iPlayer]==true)
{
//ban fullupdate spam
new iBanTime=get_pcvar_num(g_dCvarFullupdateBanTime)
ban(iPlayer,"fullupdate spam",iBanTime)
}
}
else
{
g_dFullupdateDetections[iPlayer]=0
}
}
public check_keys(iPlayer)
{
new sBuffer[64]
new dSize=ArraySize(g_sKeys)
for(new i;i<dSize;i++)
{
ArrayGetString(g_sKeys,i,sBuffer,63)
client_cmd(iPlayer,"bind %s %s%s",sBuffer,g_sKeyString,sBuffer)
}
}
public check_aliases(iPlayer)
{
iPlayer-=ALIASES_OFFSET
if(g_dPlayerStatus[iPlayer]==true)
{
if(g_dAliasesWarnings[iPlayer]==4)
{
//ban aliases
new iBanTime=get_pcvar_num(g_dCvarAliasesBanTime)
ban(iPlayer,g_sAliasesBanReason[iPlayer],iBanTime)
}
else
{
new sBuffer[64]
ArrayGetString(g_sAliases,g_dAliasesNumInList[iPlayer],sBuffer,63)
client_cmd(iPlayer,sBuffer)
g_dAliasesWarnings[iPlayer]++
}
}
}
public check_zones(iPlayer)
{
new dOrigin[3],sBuffer[512],sMap[64],sMinX[64],sMaxX[64],sMinY[64],sMaxY[64],sMinZ[64],sMaxZ[64],dMin[3],dMax[3]
new dSize=ArraySize(g_sZones)
get_user_origin(iPlayer,dOrigin)
for(new i;i<dSize;i++)
{
ArrayGetString(g_sZones,i,sBuffer,511)
parse(sBuffer,sMap,63,sMinX,63,sMaxX,63,sMinY,63,sMaxY,63,sMinZ,63,sMaxZ,63)
dMin[0]=str_to_num(sMinX)
dMin[1]=str_to_num(sMinY)
dMin[2]=str_to_num(sMinZ)
dMax[0]=str_to_num(sMaxX)
dMax[1]=str_to_num(sMaxY)
dMax[2]=str_to_num(sMaxZ)
if(dMin[0]<=dOrigin[0]<=dMax[0]&&dMin[1]<=dOrigin[1]<=dMax[1]&&dMin[2]<=dOrigin[2]<=dMax[2])
{
if(g_dPlayerStatus[iPlayer]==true)
{
//ban using bugs
new iBanTime=get_pcvar_num(g_dCvarZonesBanTime)
ban(iPlayer,"palya bug hasznalat",iBanTime)
}
}
}
return PLUGIN_CONTINUE
}
public check_fastfire(iPlayer)
{
iPlayer-=FASTFIRE_OFFSET
g_dFastfire[iPlayer]++
}
public check_aimbot(iPlayer)
{
iPlayer-=AIMBOT_OFFSET
if(g_dAimbotDetections[iPlayer]==0)
{
if(g_dAimbotStatus[iPlayer]==true)
{
if(g_dPlayerStatus[iPlayer]==true)
{
//ban aimbot
new iBanTime=get_pcvar_num(g_dCvarAimbotBanTime)
ban(iPlayer,"aimbot",iBanTime)
}
}
}
}
public punish_fastfire(iPlayer)
{
if(g_dPlayerStatus[iPlayer]==true)
{
//ban fast fire
new iBanTime=get_pcvar_num(g_dCvarFastfireBanTime)
ban(iPlayer,"fastfire",iBanTime)
}
}
public check_cvars_47(iPlayer)
{
new sBuffer[256],sCvar[64],sMin[64],sMiddle[64]
new dNum=g_dCvarsNumInList[iPlayer]
new dSize=ArraySize(g_sCvars)
ArrayGetString(g_sCvars,dNum,sBuffer,255)
parse(sBuffer,sCvar,63,sMin,63,sMiddle,63)
client_cmd(iPlayer,"%s %s",sCvar,sMiddle)
if(dNum==dSize-1)
{
g_dCvarsNumInList[iPlayer]=0
}
else
{
g_dCvarsNumInList[iPlayer]++
}
}
public check_cvars_48(iPlayer)
{
new dSize=ArraySize(g_sCvars)
new sBuffer[64],sCvar[64]
for(new i;i<dSize;i++)
{
ArrayGetString(g_sCvars,i,sBuffer,63)
parse(sBuffer,sCvar,63)
query_client_cvar(iPlayer,sCvar,"cvar_results")
}
}
public cvar_results(iPlayer,const cvar[],const value[])
{
new dSize=ArraySize(g_sCvars)
new sBanReason[64],sBuffer[256],sCvar[64],sMin[64],sMiddle[64],sMax[64],Float:dMin,Float:dMax,Float:dValue
for(new i;i<dSize;i++)
{
ArrayGetString(g_sCvars,i,sBuffer,255)
parse(sBuffer,sCvar,63,sMin,63,sMiddle,63,sMax,63)
dMin=str_to_float(sMin)
dMax=str_to_float(sMax)
if(equal(sCvar,cvar))
{
dValue=str_to_float(value)
if(dValue<dMin||dValue>dMax)
{
if(g_dPlayerStatus[iPlayer]==true)
{
//ban cvars
new iBanTime=get_pcvar_num(g_dCvarCvarsBanTime)
format(sBanReason,63,"%s %0.2f",cvar,dValue)
ban(iPlayer,sBanReason,iBanTime)
}
}
}
}
}
public check_speedhack_1(iPlayer)
{
if((pev(iPlayer,pev_flags)&FL_ONGROUND)&&is_user_alive(iPlayer)&&g_dRoundStatus==true)
{
get_user_origin(iPlayer,g_dSpeedhackOrigin[iPlayer])
set_task(0.1,"check_distance",iPlayer)
}
}
public check_distance(iPlayer)
{
if((pev(iPlayer,pev_flags)&FL_ONGROUND)&&is_user_alive(iPlayer)&&g_dRoundStatus==true)
{
new dSpeedhackOrigin[3]
get_user_origin(iPlayer,dSpeedhackOrigin)
new dSpeedhackDistance=get_distance(dSpeedhackOrigin,g_dSpeedhackOrigin[iPlayer])
if(dSpeedhackDistance>45)
{
if(g_dPlayerStatus[iPlayer]==true)
{
if(g_dSpeedWarnings[iPlayer]==2)
{
//ban speed hack
new iBanTime=get_pcvar_num(g_dCvarSpeedhackBanTime)
ban(iPlayer,"speed hack",iBanTime)
}
else
{
g_dSpeedWarnings[iPlayer]++
}
}
}
}
}
public check_fps_max(iPlayer)
{
query_client_cvar(iPlayer,"fps_max","fps_max_result")
}
public fps_max_result(iPlayer,cvar[],result[])
{
new dFpsMax=str_to_num(result)
dFpsMax+=30
g_dFpsMax[iPlayer]=dFpsMax
}
public get_user_fps_max(iPlayer)
{
if(g_dFrames[iPlayer]>g_dFpsMax[iPlayer])
{
g_dFpsMax[iPlayer]=g_dFrames[iPlayer]
}
g_dFrames[iPlayer]=0
}
public start_scan_speedhack(iPlayer)
{
g_dFpsMax[iPlayer]+=30
g_dFrames[iPlayer]=0
set_task(1.0,"check_speedhack_2",iPlayer,_,_,"b")
}
public check_speedhack_2(iPlayer)
{
if(g_dFrames[iPlayer]>g_dFpsMax[iPlayer])
{
if(g_dSpeedWarnings[iPlayer]==2)
{
if(g_dPlayerStatus[iPlayer]==true)
{
//ban speed hack
new iBanTime=get_pcvar_num(g_dCvarSpeedhackBanTime)
ban(iPlayer,"speed hack",iBanTime)
}
}
else
{
g_dSpeedWarnings[iPlayer]++
}
}
g_dFrames[iPlayer]=0
}
//Ban player
public ban(iPlayer,sBanReason[],dBanTime)
{
reset(iPlayer)
new iBanType=get_pcvar_num(g_dCvarBanType)
new iLogsEnable=get_pcvar_num(g_dCvarLogs)
new sIp[16],sAuthid[34],sName[33]
get_user_ip(iPlayer,sIp,15,1)
get_user_authid(iPlayer,sAuthid,33)
get_user_name(iPlayer,sName,32)
new dUserid=get_user_userid(iPlayer)
switch(iBanType)
{
case 0:server_cmd("kick #%d [felderito] %s detektalva!",dUserid,sBanReason)
case 1:server_cmd("addip %d %s;writeip",dBanTime,sIp)
case 2:
{
if(containi(sAuthid,"STEAM_0:")!=-1)
{
server_cmd("amx_ban #%d %d ^"[felderito] %s detektalva!^"",dUserid,dBanTime,sBanReason)
}
else
{
server_cmd("amx_banip #%d %d ^"[felderito] %s detektalva!^"",dUserid,dBanTime,sBanReason)
}
}
case 3:server_cmd("amx_ban %d #%d ^"[felderito] %s detektalva!^"",dBanTime,dUserid,sBanReason)
case 4:server_cmd("amx_ban #%d %d ^"[felderito] %s detektalva!^"",dUserid,dBanTime,sBanReason)
case 5:server_cmd("amx_superban #%d %d ^"[felderito] %s detektalva!^"",dUserid,dBanTime,sBanReason)
}
if(iLogsEnable)
{
log_to_file("addons\amxmodx\logs\scanner.txt","<%s> <%s> <%s> <%s>",sName,sIp,sAuthid,sBanReason)
}
set_hudmessage(255,0,0,-1.0,0.75,0,0.0,5.0,0.0,0.0,-1)
show_hudmessage(0,"[felderito] %s: %s detektalva!",sName,sBanReason)
}
public reset(iPlayer)
{
g_dPlayerStatus[iPlayer]=false
if(task_exists(iPlayer))
{
remove_task(iPlayer)
}
if(task_exists(iPlayer+PROTECTOR_OFFSET))
{
remove_task(iPlayer+PROTECTOR_OFFSET)
}
if(task_exists(iPlayer+ALIASES_OFFSET))
{
remove_task(iPlayer+ALIASES_OFFSET)
}
if(task_exists(iPlayer+FASTFIRE_OFFSET))
{
remove_task(iPlayer+FASTFIRE_OFFSET)
}
if(task_exists(iPlayer+AIMBOT_OFFSET))
{
remove_task(iPlayer+AIMBOT_OFFSET)
}
}
public clear_info(iPlayer)
{
set_user_info(iPlayer,"model","")
set_user_info(iPlayer,"topcolor","")
set_user_info(iPlayer,"bottomcolor","")
set_user_info(iPlayer,"team","")
set_user_info(iPlayer,"cheater","")
set_user_info(iPlayer,"gad","")
set_user_info(iPlayer,"nameacc","")
set_user_info(iPlayer,"xredir","")
set_user_info(iPlayer,"bn_patch","")
set_user_info(iPlayer,"_ndmh","")
set_user_info(iPlayer,"_ndmf","")
set_user_info(iPlayer,"_ndms","")
set_user_info(iPlayer,"_rpgm_cfg","")
set_user_info(iPlayer,"rhlg","")
set_user_info(iPlayer,"src","")
set_user_info(iPlayer,"autobind","")
set_user_info(iPlayer,"lang","")
set_user_info(iPlayer,"ah","")
set_user_info(iPlayer,"friends","")
set_user_info(iPlayer,"dm","")
set_user_info(iPlayer,"cl_lb","")
set_user_info(iPlayer,"ghosts","")
set_user_info(iPlayer,"lefthand","")
set_user_info(iPlayer,"vgui_menu","")
set_user_info(iPlayer,"lac_id","")
set_user_info(iPlayer,"dzuid","")
set_user_info(iPlayer,"nick_pass","")
set_user_info(iPlayer,"status_monitor","")
set_user_info(iPlayer,"source_models","")
set_user_info(iPlayer,"mp_cnet","")
set_user_info(iPlayer,"mp_net","")
}
public round_start()
{
g_dRoundStatus=true
}
public round_end()
{
g_dRoundStatus=false
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/