HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. /*
  2.   Fordította: BBk
  3. */
  4.  
  5. #include <amxmodx>
  6. #include <fakemeta>
  7.  
  8. #define VERSION "12"
  9.  
  10. #define NAMES_FILE "addons\amxmodx\configs\scanner\names.ini"
  11. #define MESSAGES_FILE "addons\amxmodx\configs\scanner\messages.ini"
  12. #define KEYS_FILE "addons\amxmodx\configs\scanner\keys.ini"
  13. #define ALIASES_FILE "addons\amxmodx\configs\scanner\aliases.ini"
  14. #define ZONES_FILE "addons\amxmodx\configs\scanner\zones.ini"
  15. #define CONFIGS_FILE "addons\amxmodx\configs\scanner\configs.ini"
  16. #define FILES_FILE "addons\amxmodx\configs\scanner\files.ini"
  17. #define CVARS_FILE "addons\amxmodx\configs\scanner\cvars.ini"
  18.  
  19. #define PROTECTOR_OFFSET 128
  20. #define ALIASES_OFFSET 256
  21. #define FASTFIRE_OFFSET 512
  22. #define AIMBOT_OFFSET 1024
  23.  
  24. new g_dFwid
  25. new g_dGunsEventidsBitsum
  26. new g_dProtocol
  27. new bool:g_dRoundStatus
  28.  
  29. new const g_sGunsEvents[][]=
  30. {
  31. "events/awp.sc",
  32. "events/g3sg1.sc",
  33. "events/ak47.sc",
  34. "events/scout.sc",
  35. "events/m249.sc",
  36. "events/m4a1.sc",
  37. "events/sg552.sc",
  38. "events/aug.sc",
  39. "events/sg550.sc",
  40. "events/m3.sc",
  41. "events/xm1014.sc",
  42. "events/usp.sc",
  43. "events/mac10.sc",
  44. "events/ump45.sc",
  45. "events/fiveseven.sc",
  46. "events/p90.sc",
  47. "events/deagle.sc",
  48. "events/p228.sc",
  49. "events/glock18.sc",
  50. "events/mp5n.sc",
  51. "events/tmp.sc",
  52. "events/elite_left.sc",
  53. "events/elite_right.sc",
  54. "events/galil.sc",
  55. "events/famas.sc"
  56. }
  57.  
  58. new Array:g_sNames
  59. new Array:g_sMessages
  60. new Array:g_sKeys
  61. new Array:g_sAliases
  62. new Array:g_sZones
  63. new Array:g_sConfigs
  64. new Array:g_sCvars
  65.  
  66. new g_sProtectorString[11]
  67. new g_sAimbotString[11]
  68. new g_sKeyString[11]
  69.  
  70. new g_dCvarStartTime //kezdo ido
  71. new g_dCvarLogs //logok
  72. new g_dCvarBanType //ban tipus
  73.  
  74. new g_dCvarProtector //protector
  75. new g_dCvarProtectorBanTime
  76.  
  77. new g_dCvarAimbot //aimbot
  78. new g_dCvarAimbotBanTime
  79.  
  80. new g_dCvarNames //nevek
  81. new g_dCvarNamesBanTime
  82.  
  83. new g_dCvarMessages //uzenetek
  84. new g_dCvarMessagesBanTime
  85.  
  86. new g_dCvarFullupdate //fullupdate spam
  87. new g_dCvarFullupdateBanTime
  88.  
  89. new g_dCvarKeys //jogok
  90. new g_dCvarKeysBanTime
  91.  
  92. new g_dCvarAliases //aliases
  93. new g_dCvarAliasesBanTime
  94.  
  95. new g_dCvarZones //bug zonak
  96. new g_dCvarZonesBanTime
  97.  
  98. new g_dCvarFastfire //fastfire
  99. new g_dCvarFastfireBanTime
  100.  
  101. new g_dCvarCvars //cvarok
  102. new g_dCvarCvarsBanTime
  103.  
  104. new g_dCvarSpeedhack //speedhack
  105. new g_dCvarSpeedhackMethod
  106. new g_dCvarSpeedhackBanTime
  107.  
  108. new bool:g_dPlayerStatus[33]
  109. new bool:g_dAimbotStatus[33]
  110. new bool:g_dInAttackStatus[33]
  111.  
  112. new g_dAimbotDetections[33]
  113. new g_dAimbotWarnings[33]
  114. new g_dFullupdateDetections[33]
  115. new g_dKeysWarnings[33]
  116. new g_dAliasesNumInList[33]
  117. new g_dAliasesWarnings[33]
  118. new g_dFastfire[33]
  119. new g_dShots[33]
  120. new g_dConfigsNumInList[33]
  121. new g_dCvarsNumInList[33]
  122. new g_dFpsMax[33]
  123. new g_dFrames[33]
  124. new g_dSpeedhackOrigin[33][3]
  125. new g_dSpeedWarnings[33]
  126.  
  127. new g_sAliasesBanReason[33][64]
  128.  
  129. public plugin_precache()
  130. {
  131. new sBuffer[64],dLine,dLen
  132.  
  133. while(read_file(FILES_FILE,dLine,sBuffer,63,dLen)!=0)
  134. {
  135. if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
  136. {
  137. dLine++
  138. continue
  139. }
  140. force_unmodified(force_exactfile,{0,0,0},{0,0,0},sBuffer)
  141. dLine++
  142. }
  143. g_dFwid=register_forward(FM_PrecacheEvent,"fwPrecacheEvent",1)
  144. }
  145.  
  146. public fwPrecacheEvent(type,const name[])
  147. {
  148. for(new i;i<sizeof(g_sGunsEvents);i++)
  149. {
  150. if(equal(g_sGunsEvents[i],name))
  151. {
  152. g_dGunsEventidsBitsum|=(1<<get_orig_retval())
  153. return FMRES_HANDLED
  154. }
  155. }
  156. return FMRES_IGNORED
  157. }
  158.  
  159. public plugin_init()
  160. {
  161. register_plugin("scanner",VERSION,"felicita")
  162.  
  163. unregister_forward(FM_PrecacheEvent,g_dFwid,1)
  164. register_forward(FM_PlaybackEvent, "fwPlaybackEvent")
  165. register_logevent("round_start",2,"1=Round_Start")
  166. register_logevent("round_end",2,"1=Round_End")
  167. register_logevent("round_end",2,"1&Restart_Round_")
  168. g_dProtocol=get_cvar_pointer("dp_r_protocol")
  169.  
  170. server_cmd("exec addons/amxmodx/configs/scanner/main_config.cfg")
  171.  
  172. g_dCvarStartTime= register_cvar("scanner_start_time","3")
  173. g_dCvarLogs= register_cvar("scanner_logs","1")
  174. g_dCvarBanType= register_cvar("scanner_ban_type","0")
  175.  
  176. g_dCvarProtector= register_cvar("scanner_protector","1")
  177. g_dCvarProtectorBanTime= register_cvar("scanner_protector_ban_time","1440")
  178.  
  179. g_dCvarAimbot= register_cvar("scanner_aimbot","1")
  180. g_dCvarAimbotBanTime= register_cvar("scanner_aimbot_ban_time","1440")
  181.  
  182. g_dCvarNames= register_cvar("scanner_names","1")
  183. g_dCvarNamesBanTime= register_cvar("scanner_names_ban_time","1440")
  184.  
  185. g_dCvarMessages= register_cvar("scanner_messages","1")
  186. g_dCvarMessagesBanTime= register_cvar("scanner_messages_ban_time","1440")
  187.  
  188. g_dCvarFullupdate= register_cvar("scanner_fullupdate","1")
  189. g_dCvarFullupdateBanTime= register_cvar("scanner_fullupdate_ban_time","1440")
  190.  
  191. g_dCvarKeys= register_cvar("scanner_keys","1")
  192. g_dCvarKeysBanTime= register_cvar("scanner_keys_ban_time","1440")
  193.  
  194. g_dCvarAliases= register_cvar("scanner_aliases","1")
  195. g_dCvarAliasesBanTime= register_cvar("scanner_aliases_ban_time","1440")
  196.  
  197. g_dCvarZones= register_cvar("scanner_zones","1")
  198. g_dCvarZonesBanTime= register_cvar("scanner_zones_ban_time","1440")
  199.  
  200. g_dCvarFastfire= register_cvar("scanner_fastfire","1")
  201. g_dCvarFastfireBanTime= register_cvar("scanner_fastfire_ban_time","1440")
  202.  
  203. g_dCvarCvars= register_cvar("scanner_cvars","1")
  204. g_dCvarCvarsBanTime= register_cvar("scanner_cvars_ban_time","1440")
  205.  
  206. g_dCvarSpeedhack= register_cvar("scanner_speedhack","1")
  207. g_dCvarSpeedhackMethod= register_cvar("scanner_speedhack_method","1")
  208. g_dCvarSpeedhackBanTime= register_cvar("scanner_speedhack_ban_time","1440")
  209.  
  210. g_sNames= ArrayCreate(64)
  211. g_sMessages= ArrayCreate(64)
  212. g_sKeys= ArrayCreate(64)
  213. g_sAliases= ArrayCreate(64)
  214. g_sZones= ArrayCreate(512)
  215. g_sConfigs= ArrayCreate(64)
  216. g_sCvars= ArrayCreate(256)
  217.  
  218. for(new i;i<10;i++)
  219. {
  220. g_sProtectorString[i]=random_num('a','z')
  221. }
  222. for(new i;i<10;i++)
  223. {
  224. g_sAimbotString[i]=random_num('a','z')
  225. }
  226. for(new i;i<10;i++)
  227. {
  228. g_sKeyString[i]=random_num('a','z')
  229. }
  230.  
  231. new sBuffer[512],dLine,dLen
  232.  
  233. while(read_file(NAMES_FILE,dLine,sBuffer,64,dLen)!=0)
  234. {
  235. if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
  236. {
  237. dLine++
  238. continue
  239. }
  240. ArrayPushString(g_sNames,sBuffer)
  241. dLine++
  242. }
  243.  
  244. dLine=0
  245.  
  246. while(read_file(MESSAGES_FILE,dLine,sBuffer,64,dLen)!=0)
  247. {
  248. if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
  249. {
  250. dLine++
  251. continue
  252. }
  253. ArrayPushString(g_sMessages,sBuffer)
  254. dLine++
  255. }
  256.  
  257. dLine=0
  258.  
  259. while(read_file(KEYS_FILE,dLine,sBuffer,64,dLen)!=0)
  260. {
  261. if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
  262. {
  263. dLine++
  264. continue
  265. }
  266. ArrayPushString(g_sKeys,sBuffer)
  267. dLine++
  268. }
  269.  
  270. dLine=0
  271.  
  272. while(read_file(ALIASES_FILE,dLine,sBuffer,64,dLen)!=0)
  273. {
  274. if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
  275. {
  276. dLine++
  277. continue
  278. }
  279. ArrayPushString(g_sAliases,sBuffer)
  280. dLine++
  281. }
  282.  
  283. dLine=0
  284.  
  285. new sMapName[64],sMap[64]
  286.  
  287. get_mapname(sMapName,63)
  288.  
  289. while(read_file(ZONES_FILE,dLine,sBuffer,511,dLen)!=0)
  290. {
  291. if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
  292. {
  293. dLine++
  294. continue
  295. }
  296.  
  297. parse(sBuffer,sMap,63)
  298.  
  299. if(!equal(sMapName,sMap))
  300. {
  301. dLine++
  302. continue
  303. }
  304.  
  305. ArrayPushString(g_sZones,sBuffer)
  306. dLine++
  307. }
  308.  
  309. dLine=0
  310.  
  311. while(read_file(CONFIGS_FILE,dLine,sBuffer,63,dLen)!=0)
  312. {
  313. if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
  314. {
  315. dLine++
  316. continue
  317. }
  318. ArrayPushString(g_sConfigs,sBuffer)
  319. dLine++
  320. }
  321.  
  322. dLine=0
  323.  
  324. while(read_file(CVARS_FILE,dLine,sBuffer,255,dLen)!=0)
  325. {
  326. if(!sBuffer[0]||sBuffer[0]==';'||(sBuffer[0]=='/'&&sBuffer[1]=='/'))
  327. {
  328. dLine++
  329. continue
  330. }
  331. ArrayPushString(g_sCvars,sBuffer)
  332. dLine++
  333. }
  334. }
  335.  
  336. public fwPlaybackEvent(flags,iPlayer,eventid)
  337. {
  338. if(!(g_dGunsEventidsBitsum&(1<<eventid))||!(1<=iPlayer<=32))
  339. {
  340. return FMRES_IGNORED
  341. }
  342. new iFastfire=get_pcvar_num(g_dCvarFastfire)
  343.  
  344. if(iFastfire)
  345. {
  346. g_dShots[iPlayer]++
  347. new dWeapon=get_user_weapon(iPlayer)
  348. switch(g_dShots[iPlayer])
  349. {
  350. case 2:
  351. {
  352. switch(dWeapon)
  353. {
  354. case CSW_AWP:
  355. {
  356. if(g_dFastfire[iPlayer]<12)
  357. {
  358. punish_fastfire(iPlayer)
  359. }
  360. }
  361. case CSW_SCOUT:
  362. {
  363. if(g_dFastfire[iPlayer]<10)
  364. {
  365. punish_fastfire(iPlayer)
  366. }
  367. }
  368. case CSW_M3:
  369. {
  370. if(g_dFastfire[iPlayer]<7)
  371. {
  372. punish_fastfire(iPlayer)
  373. }
  374. }
  375. }
  376. }
  377. case 5:
  378. {
  379. switch(dWeapon)
  380. {
  381. case CSW_AK47,CSW_M4A1,CSW_GALIL,CSW_SG552,CSW_MAC10,CSW_MP5NAVY:
  382. {
  383. if(g_dFastfire[iPlayer]<2)
  384. {
  385. punish_fastfire(iPlayer)
  386. }
  387. }
  388. case CSW_UMP45:
  389. {
  390. if(g_dFastfire[iPlayer]<3)
  391. {
  392. punish_fastfire(iPlayer)
  393. }
  394. }
  395. case CSW_XM1014,CSW_SG550,CSW_G3SG1:
  396. {
  397. if(g_dFastfire[iPlayer]<8)
  398. {
  399. punish_fastfire(iPlayer)
  400. }
  401. }
  402. }
  403. }
  404. }
  405. }
  406. return FMRES_HANDLED
  407. }
  408.  
  409. public client_putinserver(iPlayer)
  410. {
  411. if(is_user_bot(iPlayer)||is_user_hltv(iPlayer))
  412. {
  413. return PLUGIN_CONTINUE
  414. }
  415.  
  416. g_dPlayerStatus[iPlayer]=true
  417. g_dAimbotStatus[iPlayer]=false
  418. g_dInAttackStatus[iPlayer]=false
  419.  
  420. g_dAimbotDetections[iPlayer]=0
  421. g_dAimbotWarnings[iPlayer]=0
  422. g_dFullupdateDetections[iPlayer]=0
  423. g_dKeysWarnings[iPlayer]=0
  424. g_dAliasesNumInList[iPlayer]=0
  425. g_dAliasesWarnings[iPlayer]=0
  426. g_dFastfire[iPlayer]=0
  427. g_dShots[iPlayer]=0
  428. g_dConfigsNumInList[iPlayer]=0
  429. g_dCvarsNumInList[iPlayer]=0
  430. g_dFpsMax[iPlayer]=100
  431. g_dFrames[iPlayer]=0
  432. g_dSpeedWarnings[iPlayer]=0
  433.  
  434. new Float:iStartTime=get_pcvar_float(g_dCvarStartTime)
  435.  
  436. set_task(iStartTime,"start_scan",iPlayer)
  437.  
  438. return PLUGIN_CONTINUE
  439. }
  440.  
  441. public client_infochanged(iPlayer)
  442. {
  443. new sName[33],sNameInfo[33]
  444.  
  445. get_user_name(iPlayer,sName,32)
  446. get_user_info(iPlayer,"name",sNameInfo,32)
  447.  
  448. if(!equal(sName,sNameInfo))
  449. {
  450. check_name(iPlayer,sNameInfo)
  451. }
  452. }
  453.  
  454. public client_command(iPlayer)
  455. {
  456. new sArgv[64]
  457. read_argv(0,sArgv,63)
  458. if(equal(sArgv,g_sAimbotString))
  459. {
  460. g_dAimbotDetections[iPlayer]++
  461. return PLUGIN_HANDLED
  462. }
  463. else if(equal(sArgv,"say")||equal(sArgv,"say_team"))
  464. {
  465. new iMessages=get_pcvar_num(g_dCvarMessages)
  466. if(iMessages)
  467. {
  468. new sArgv[64],sArgvAll[128],sBuffer[64],sBanReason[64],dLen
  469. new dArgc=read_argc()
  470.  
  471. for(new i=1;i<dArgc;i++)
  472. {
  473. read_argv(i,sArgv,63)
  474. format(sArgvAll,127,"%s %s",sArgvAll,sArgv)
  475. }
  476.  
  477. format(sArgvAll,127,sArgvAll[1])
  478.  
  479. new dSize=ArraySize(g_sMessages)
  480.  
  481. for(new i;i<dSize;i++)
  482. {
  483. ArrayGetString(g_sMessages,i,sBuffer,63)
  484.  
  485. dLen=strlen(sBuffer)
  486.  
  487. if(sBuffer[0]=='['&&sBuffer[dLen-1]==']')
  488. {
  489. format(sBanReason,dLen-2,sBuffer[1])
  490. continue
  491. }
  492. else
  493. {
  494. if(containi(sArgvAll,sBuffer)!=-1)
  495. {
  496. if(g_dPlayerStatus[iPlayer]==true)
  497. {
  498. //ban messages
  499.  
  500. new iBanTime=get_pcvar_num(g_dCvarMessagesBanTime)
  501. ban(iPlayer,sBanReason,iBanTime)
  502. }
  503. return PLUGIN_HANDLED
  504. }
  505. }
  506. }
  507. }
  508. }
  509. else if(equal(sArgv,"fullupdate"))
  510. {
  511. g_dFullupdateDetections[iPlayer]++
  512. }
  513. else if(contain(sArgv,g_sKeyString)!=-1)
  514. {
  515. if(g_dPlayerStatus[iPlayer]==true)
  516. {
  517. if(g_dKeysWarnings[iPlayer]==2)
  518. {
  519. new sBanReason[64]
  520.  
  521. format(sBanReason,63,"%s jog alkalmazasa",sArgv[10])
  522.  
  523. //ban keys
  524.  
  525. new iBanTime=get_pcvar_num(g_dCvarKeysBanTime)
  526. ban(iPlayer,sBanReason,iBanTime)
  527. }
  528. else
  529. {
  530. g_dKeysWarnings[iPlayer]++
  531. }
  532. }
  533. return PLUGIN_HANDLED
  534. }
  535. else
  536. {
  537. new sBuffer[64]
  538.  
  539. ArrayGetString(g_sAliases,g_dAliasesNumInList[iPlayer],sBuffer,63)
  540.  
  541. if(equal(sArgv,sBuffer))
  542. {
  543. if(task_exists(iPlayer+ALIASES_OFFSET))
  544. {
  545. remove_task(iPlayer+ALIASES_OFFSET)
  546. }
  547.  
  548. new dSize=ArraySize(g_sAliases)
  549.  
  550. if(g_dAliasesNumInList[iPlayer]==dSize-1)
  551. {
  552. return PLUGIN_HANDLED
  553. }
  554.  
  555. g_dAliasesWarnings[iPlayer]=0
  556. g_dAliasesNumInList[iPlayer]++
  557.  
  558. ArrayGetString(g_sAliases,g_dAliasesNumInList[iPlayer],sBuffer,63)
  559.  
  560. new dLen=strlen(sBuffer)
  561.  
  562. if(sBuffer[0]=='['&&sBuffer[dLen-1]==']')
  563. {
  564. new sBanReason[64]
  565.  
  566. format(sBanReason,dLen-2,sBuffer[1])
  567.  
  568. g_sAliasesBanReason[iPlayer]=sBanReason
  569. g_dAliasesNumInList[iPlayer]++
  570.  
  571. ArrayGetString(g_sAliases,g_dAliasesNumInList[iPlayer],sBuffer,63)
  572. }
  573. client_cmd(iPlayer,sBuffer)
  574.  
  575. set_task(3.0,"check_aliases",iPlayer+ALIASES_OFFSET,_,_,"b")
  576.  
  577. return PLUGIN_HANDLED
  578. }
  579. }
  580. return PLUGIN_CONTINUE
  581. }
  582.  
  583. public start_scan(iPlayer)
  584. {
  585. set_user_info(iPlayer,"scanner","")
  586.  
  587. clear_info(iPlayer)
  588.  
  589. set_task(0.5,"set_protector_info",iPlayer+PROTECTOR_OFFSET,_,_,"a",20)
  590. set_task(10.5,"check_protector",iPlayer+PROTECTOR_OFFSET)
  591.  
  592. new iNames= get_pcvar_num(g_dCvarNames)
  593. new iFullupdate= get_pcvar_num(g_dCvarFullupdate)
  594. new iKeys= get_pcvar_num(g_dCvarKeys)
  595. new iAliases= get_pcvar_num(g_dCvarAliases)
  596. new iZones= get_pcvar_num(g_dCvarZones)
  597. new iCvars= get_pcvar_num(g_dCvarCvars)
  598. new iSpeedhack= get_pcvar_num(g_dCvarSpeedhack)
  599.  
  600. if(iNames)
  601. {
  602. new sName[33]
  603.  
  604. get_user_name(iPlayer,sName,32)
  605. check_name(iPlayer,sName)
  606. }
  607.  
  608. if(iFullupdate)
  609. {
  610. set_task(1.0,"check_fullupdate",iPlayer,_,_,"b")
  611. }
  612.  
  613. if(iKeys)
  614. {
  615. set_task(1.0,"check_keys",iPlayer,_,_,"b")
  616. }
  617.  
  618. if(iAliases)
  619. {
  620. new dSize=ArraySize(g_sConfigs)
  621.  
  622. set_task(0.5,"check_configs",iPlayer,_,_,"a",dSize+1)
  623. }
  624.  
  625. if(iZones)
  626. {
  627. set_task(1.0,"check_zones",iPlayer,_,_,"b")
  628. }
  629.  
  630. server_cmd("dp_clientinfo %d",iPlayer)
  631. server_exec()
  632.  
  633. new iProtocol=get_pcvar_num(g_dProtocol)
  634. if(!iProtocol)
  635. {
  636. new iUserid=get_user_userid(iPlayer)
  637.  
  638. server_cmd("kick #%d [felderito] protokol hiba: a szerver problemat eszlelt a dproto-ban!",iUserid)
  639. }
  640. if(iCvars)
  641. {
  642. switch(iProtocol)
  643. {
  644. case 47:set_task(0.5,"check_cvars_47",iPlayer,_,_,"b")
  645. case 48:set_task(5.0,"check_cvars_48",iPlayer,_,_,"b")
  646. }
  647. }
  648.  
  649. if(iSpeedhack)
  650. {
  651. new iSpeedhackMethod=get_pcvar_num(g_dCvarSpeedhackMethod)
  652.  
  653. switch(iSpeedhackMethod)
  654. {
  655. case 1:set_task(0.5,"check_speedhack_1",iPlayer,_,_,"b")
  656. case 2:
  657. {
  658. g_dFrames[iPlayer]=0
  659.  
  660. switch(iProtocol)
  661. {
  662. case 47:
  663. {
  664. set_task(1.0,"get_user_fps_max",iPlayer,_,_,"a",10)
  665. set_task(11.0,"start_scan_speedhack",iPlayer)
  666. }
  667. case 48:
  668. {
  669. set_task(1.0,"check_speedhack_2",iPlayer,_,_,"b")
  670. set_task(1.0,"check_fps_max",iPlayer,_,_,"b")
  671. }
  672. }
  673. }
  674. }
  675. }
  676. }
  677.  
  678. public check_configs(iPlayer)
  679. {
  680. new dNum=g_dConfigsNumInList[iPlayer]
  681. new dSize=ArraySize(g_sConfigs)
  682.  
  683. if(dNum==0)
  684. {
  685. client_print(iPlayer,print_console,"")
  686. client_print(iPlayer,print_console,"==================")
  687. client_print(iPlayer,print_console,"[felderito] kezdes")
  688. client_print(iPlayer,print_console,"")
  689. }
  690.  
  691. else if(dNum==dSize)
  692. {
  693. client_print(iPlayer,print_console,"")
  694. client_print(iPlayer,print_console,"[felderito] befejezes")
  695. client_print(iPlayer,print_console,"=================")
  696. client_print(iPlayer,print_console,"")
  697.  
  698. start_check_aliases(iPlayer)
  699. return PLUGIN_CONTINUE
  700. }
  701.  
  702. new sBuffer[64]
  703.  
  704. ArrayGetString(g_sConfigs,dNum,sBuffer,63)
  705.  
  706. client_cmd(iPlayer,"exec ^"%s^"",sBuffer)
  707.  
  708. g_dConfigsNumInList[iPlayer]++
  709.  
  710. return PLUGIN_CONTINUE
  711. }
  712.  
  713. public start_check_aliases(iPlayer)
  714. {
  715. new sBuffer[64]
  716.  
  717. ArrayGetString(g_sAliases,g_dAliasesNumInList[iPlayer],sBuffer,63)
  718.  
  719. new dLen=strlen(sBuffer)
  720.  
  721. if(sBuffer[0]=='['&&sBuffer[dLen-1]==']')
  722. {
  723. new sBanReason[64]
  724.  
  725. format(sBanReason,dLen-2,sBuffer[1])
  726.  
  727. g_sAliasesBanReason[iPlayer]=sBanReason
  728. g_dAliasesNumInList[iPlayer]++
  729.  
  730. ArrayGetString(g_sAliases,g_dAliasesNumInList[iPlayer],sBuffer,63)
  731. }
  732. client_cmd(iPlayer,sBuffer)
  733.  
  734. set_task(3.0,"check_aliases",iPlayer+ALIASES_OFFSET,_,_,"b")
  735. }
  736.  
  737. public check_name(iPlayer,sName[])
  738. {
  739. new sBuffer[64],sBanReason[64],dLen
  740. new dSize=ArraySize(g_sNames)
  741. for(new i;i<dSize;i++)
  742. {
  743. ArrayGetString(g_sNames,i,sBuffer,63)
  744. dLen=strlen(sBuffer)
  745. if(sBuffer[0]=='['&&sBuffer[dLen-1]==']')
  746. {
  747. format(sBanReason,dLen-2,sBuffer[1])
  748. continue
  749. }
  750. else
  751. {
  752. if(containi(sName,sBuffer)!=-1)
  753. {
  754. if(g_dPlayerStatus[iPlayer]==true)
  755. {
  756. //ban names
  757.  
  758. new iBanTime=get_pcvar_num(g_dCvarNamesBanTime)
  759. ban(iPlayer,sBanReason,iBanTime)
  760. }
  761. }
  762. }
  763. }
  764. }
  765.  
  766. public set_protector_info(iPlayer)
  767. {
  768. iPlayer-=PROTECTOR_OFFSET
  769.  
  770. new sInfo[11]
  771. get_user_info(iPlayer,"scanner",sInfo,10)
  772.  
  773. if(equal(sInfo,g_sProtectorString))
  774. {
  775. set_user_info(iPlayer,"scanner","")
  776.  
  777. set_task(5.0,"set_protector_empty",iPlayer)
  778.  
  779. if(task_exists(iPlayer+PROTECTOR_OFFSET))
  780. {
  781. remove_task(iPlayer+PROTECTOR_OFFSET)
  782. }
  783.  
  784. new iAimbot=get_pcvar_num(g_dCvarAimbot)
  785. if(iAimbot)
  786. {
  787. set_task(5.0,"set_aimbot_status",iPlayer)
  788. set_task(0.1,"bind_aimbot_keys",iPlayer)
  789. }
  790. }
  791. else
  792. {
  793. client_cmd(iPlayer,"setinfo scanner %s",g_sProtectorString)
  794. }
  795. }
  796.  
  797. public check_protector(iPlayer)
  798. {
  799. iPlayer-=PROTECTOR_OFFSET
  800. if(g_dPlayerStatus[iPlayer]==true)
  801. {
  802. new iProtector=get_pcvar_num(g_dCvarProtector)
  803. if(iProtector)
  804. {
  805. //ban protector
  806.  
  807. new iBanTime=get_pcvar_num(g_dCvarProtectorBanTime)
  808. ban(iPlayer,"protector",iBanTime)
  809. }
  810. }
  811. }
  812.  
  813. public set_protector_empty(iPlayer)
  814. {
  815. set_user_info(iPlayer,"scanner","")
  816. }
  817.  
  818. public set_aimbot_status(iPlayer)
  819. {
  820. g_dAimbotStatus[iPlayer]=true
  821. }
  822.  
  823. public bind_aimbot_keys(iPlayer)
  824. {
  825. client_cmd(iPlayer,"bind mouse1 ^"+attack;%s^"",g_sAimbotString)
  826. client_cmd(iPlayer,"bind ENTER ^"+attack;%s^"",g_sAimbotString)
  827. }
  828.  
  829. public client_disconnect(iPlayer)
  830. {
  831. reset(iPlayer)
  832. }
  833.  
  834. public client_PreThink(iPlayer)
  835. {
  836. g_dFrames[iPlayer]++
  837.  
  838. if(pev(iPlayer,pev_button)&IN_ATTACK)
  839. {
  840. if(g_dInAttackStatus[iPlayer]==false)
  841. {
  842. g_dInAttackStatus[iPlayer]=true
  843.  
  844. if(!task_exists(iPlayer+FASTFIRE_OFFSET))
  845. {
  846. set_task(0.1,"check_fastfire",iPlayer+FASTFIRE_OFFSET,_,_,"b")
  847. }
  848.  
  849. if(!task_exists(iPlayer+AIMBOT_OFFSET))
  850. {
  851. set_task(0.1,"check_aimbot",iPlayer+AIMBOT_OFFSET)
  852. }
  853. }
  854. }
  855. else
  856. {
  857. if(g_dInAttackStatus[iPlayer]==true)
  858. {
  859. g_dInAttackStatus[iPlayer]=false
  860. g_dAimbotDetections[iPlayer]=0
  861. g_dShots[iPlayer]=0
  862. g_dFastfire[iPlayer]=0
  863.  
  864. if(task_exists(iPlayer+FASTFIRE_OFFSET))
  865. {
  866. remove_task(iPlayer+FASTFIRE_OFFSET)
  867. }
  868.  
  869. if(task_exists(iPlayer+AIMBOT_OFFSET))
  870. {
  871. remove_task(iPlayer+AIMBOT_OFFSET)
  872. }
  873. }
  874. }
  875. }
  876.  
  877. public check_fullupdate(iPlayer)
  878. {
  879. if(g_dFullupdateDetections[iPlayer]>=4)
  880. {
  881. if(g_dPlayerStatus[iPlayer]==true)
  882. {
  883. //ban fullupdate spam
  884.  
  885. new iBanTime=get_pcvar_num(g_dCvarFullupdateBanTime)
  886. ban(iPlayer,"fullupdate spam",iBanTime)
  887. }
  888. }
  889. else
  890. {
  891. g_dFullupdateDetections[iPlayer]=0
  892. }
  893. }
  894.  
  895. public check_keys(iPlayer)
  896. {
  897. new sBuffer[64]
  898.  
  899. new dSize=ArraySize(g_sKeys)
  900.  
  901. for(new i;i<dSize;i++)
  902. {
  903. ArrayGetString(g_sKeys,i,sBuffer,63)
  904.  
  905. client_cmd(iPlayer,"bind %s %s%s",sBuffer,g_sKeyString,sBuffer)
  906. }
  907. }
  908.  
  909. public check_aliases(iPlayer)
  910. {
  911.  
  912. iPlayer-=ALIASES_OFFSET
  913.  
  914. if(g_dPlayerStatus[iPlayer]==true)
  915. {
  916. if(g_dAliasesWarnings[iPlayer]==4)
  917. {
  918. //ban aliases
  919.  
  920. new iBanTime=get_pcvar_num(g_dCvarAliasesBanTime)
  921. ban(iPlayer,g_sAliasesBanReason[iPlayer],iBanTime)
  922. }
  923. else
  924. {
  925. new sBuffer[64]
  926.  
  927. ArrayGetString(g_sAliases,g_dAliasesNumInList[iPlayer],sBuffer,63)
  928.  
  929. client_cmd(iPlayer,sBuffer)
  930.  
  931. g_dAliasesWarnings[iPlayer]++
  932. }
  933. }
  934. }
  935.  
  936. public check_zones(iPlayer)
  937. {
  938. new dOrigin[3],sBuffer[512],sMap[64],sMinX[64],sMaxX[64],sMinY[64],sMaxY[64],sMinZ[64],sMaxZ[64],dMin[3],dMax[3]
  939. new dSize=ArraySize(g_sZones)
  940.  
  941. get_user_origin(iPlayer,dOrigin)
  942. for(new i;i<dSize;i++)
  943. {
  944. ArrayGetString(g_sZones,i,sBuffer,511)
  945. parse(sBuffer,sMap,63,sMinX,63,sMaxX,63,sMinY,63,sMaxY,63,sMinZ,63,sMaxZ,63)
  946.  
  947. dMin[0]=str_to_num(sMinX)
  948. dMin[1]=str_to_num(sMinY)
  949. dMin[2]=str_to_num(sMinZ)
  950.  
  951. dMax[0]=str_to_num(sMaxX)
  952. dMax[1]=str_to_num(sMaxY)
  953. dMax[2]=str_to_num(sMaxZ)
  954.  
  955. if(dMin[0]<=dOrigin[0]<=dMax[0]&&dMin[1]<=dOrigin[1]<=dMax[1]&&dMin[2]<=dOrigin[2]<=dMax[2])
  956. {
  957. if(g_dPlayerStatus[iPlayer]==true)
  958. {
  959. //ban using bugs
  960.  
  961. new iBanTime=get_pcvar_num(g_dCvarZonesBanTime)
  962. ban(iPlayer,"palya bug hasznalat",iBanTime)
  963. }
  964. }
  965. }
  966. return PLUGIN_CONTINUE
  967. }
  968.  
  969. public check_fastfire(iPlayer)
  970. {
  971. iPlayer-=FASTFIRE_OFFSET
  972. g_dFastfire[iPlayer]++
  973. }
  974.  
  975. public check_aimbot(iPlayer)
  976. {
  977. iPlayer-=AIMBOT_OFFSET
  978.  
  979. if(g_dAimbotDetections[iPlayer]==0)
  980. {
  981. if(g_dAimbotStatus[iPlayer]==true)
  982. {
  983. if(g_dPlayerStatus[iPlayer]==true)
  984. {
  985. //ban aimbot
  986.  
  987. new iBanTime=get_pcvar_num(g_dCvarAimbotBanTime)
  988. ban(iPlayer,"aimbot",iBanTime)
  989. }
  990. }
  991. }
  992. }
  993.  
  994. public punish_fastfire(iPlayer)
  995. {
  996. if(g_dPlayerStatus[iPlayer]==true)
  997. {
  998. //ban fast fire
  999.  
  1000. new iBanTime=get_pcvar_num(g_dCvarFastfireBanTime)
  1001. ban(iPlayer,"fastfire",iBanTime)
  1002. }
  1003. }
  1004.  
  1005. public check_cvars_47(iPlayer)
  1006. {
  1007. new sBuffer[256],sCvar[64],sMin[64],sMiddle[64]
  1008. new dNum=g_dCvarsNumInList[iPlayer]
  1009. new dSize=ArraySize(g_sCvars)
  1010.  
  1011. ArrayGetString(g_sCvars,dNum,sBuffer,255)
  1012. parse(sBuffer,sCvar,63,sMin,63,sMiddle,63)
  1013. client_cmd(iPlayer,"%s %s",sCvar,sMiddle)
  1014.  
  1015. if(dNum==dSize-1)
  1016. {
  1017. g_dCvarsNumInList[iPlayer]=0
  1018. }
  1019. else
  1020. {
  1021. g_dCvarsNumInList[iPlayer]++
  1022. }
  1023. }
  1024.  
  1025. public check_cvars_48(iPlayer)
  1026. {
  1027. new dSize=ArraySize(g_sCvars)
  1028. new sBuffer[64],sCvar[64]
  1029. for(new i;i<dSize;i++)
  1030. {
  1031. ArrayGetString(g_sCvars,i,sBuffer,63)
  1032. parse(sBuffer,sCvar,63)
  1033. query_client_cvar(iPlayer,sCvar,"cvar_results")
  1034. }
  1035. }
  1036.  
  1037. public cvar_results(iPlayer,const cvar[],const value[])
  1038. {
  1039. new dSize=ArraySize(g_sCvars)
  1040.  
  1041. new sBanReason[64],sBuffer[256],sCvar[64],sMin[64],sMiddle[64],sMax[64],Float:dMin,Float:dMax,Float:dValue
  1042.  
  1043. for(new i;i<dSize;i++)
  1044. {
  1045. ArrayGetString(g_sCvars,i,sBuffer,255)
  1046. parse(sBuffer,sCvar,63,sMin,63,sMiddle,63,sMax,63)
  1047.  
  1048. dMin=str_to_float(sMin)
  1049. dMax=str_to_float(sMax)
  1050.  
  1051. if(equal(sCvar,cvar))
  1052. {
  1053. dValue=str_to_float(value)
  1054. if(dValue<dMin||dValue>dMax)
  1055. {
  1056. if(g_dPlayerStatus[iPlayer]==true)
  1057. {
  1058. //ban cvars
  1059.  
  1060. new iBanTime=get_pcvar_num(g_dCvarCvarsBanTime)
  1061.  
  1062. format(sBanReason,63,"%s %0.2f",cvar,dValue)
  1063.  
  1064. ban(iPlayer,sBanReason,iBanTime)
  1065. }
  1066. }
  1067. }
  1068. }
  1069. }
  1070.  
  1071. public check_speedhack_1(iPlayer)
  1072. {
  1073. if((pev(iPlayer,pev_flags)&FL_ONGROUND)&&is_user_alive(iPlayer)&&g_dRoundStatus==true)
  1074. {
  1075. get_user_origin(iPlayer,g_dSpeedhackOrigin[iPlayer])
  1076. set_task(0.1,"check_distance",iPlayer)
  1077. }
  1078. }
  1079.  
  1080. public check_distance(iPlayer)
  1081. {
  1082. if((pev(iPlayer,pev_flags)&FL_ONGROUND)&&is_user_alive(iPlayer)&&g_dRoundStatus==true)
  1083. {
  1084. new dSpeedhackOrigin[3]
  1085.  
  1086. get_user_origin(iPlayer,dSpeedhackOrigin)
  1087.  
  1088. new dSpeedhackDistance=get_distance(dSpeedhackOrigin,g_dSpeedhackOrigin[iPlayer])
  1089.  
  1090. if(dSpeedhackDistance>45)
  1091. {
  1092. if(g_dPlayerStatus[iPlayer]==true)
  1093. {
  1094. if(g_dSpeedWarnings[iPlayer]==2)
  1095. {
  1096. //ban speed hack
  1097.  
  1098. new iBanTime=get_pcvar_num(g_dCvarSpeedhackBanTime)
  1099. ban(iPlayer,"speed hack",iBanTime)
  1100. }
  1101. else
  1102. {
  1103. g_dSpeedWarnings[iPlayer]++
  1104. }
  1105. }
  1106. }
  1107. }
  1108. }
  1109.  
  1110. public check_fps_max(iPlayer)
  1111. {
  1112. query_client_cvar(iPlayer,"fps_max","fps_max_result")
  1113. }
  1114.  
  1115. public fps_max_result(iPlayer,cvar[],result[])
  1116. {
  1117. new dFpsMax=str_to_num(result)
  1118. dFpsMax+=30
  1119. g_dFpsMax[iPlayer]=dFpsMax
  1120. }
  1121.  
  1122. public get_user_fps_max(iPlayer)
  1123. {
  1124. if(g_dFrames[iPlayer]>g_dFpsMax[iPlayer])
  1125. {
  1126. g_dFpsMax[iPlayer]=g_dFrames[iPlayer]
  1127. }
  1128. g_dFrames[iPlayer]=0
  1129. }
  1130.  
  1131. public start_scan_speedhack(iPlayer)
  1132. {
  1133. g_dFpsMax[iPlayer]+=30
  1134. g_dFrames[iPlayer]=0
  1135.  
  1136. set_task(1.0,"check_speedhack_2",iPlayer,_,_,"b")
  1137. }
  1138.  
  1139. public check_speedhack_2(iPlayer)
  1140. {
  1141. if(g_dFrames[iPlayer]>g_dFpsMax[iPlayer])
  1142. {
  1143. if(g_dSpeedWarnings[iPlayer]==2)
  1144. {
  1145. if(g_dPlayerStatus[iPlayer]==true)
  1146. {
  1147. //ban speed hack
  1148.  
  1149. new iBanTime=get_pcvar_num(g_dCvarSpeedhackBanTime)
  1150. ban(iPlayer,"speed hack",iBanTime)
  1151. }
  1152. }
  1153. else
  1154. {
  1155. g_dSpeedWarnings[iPlayer]++
  1156. }
  1157. }
  1158. g_dFrames[iPlayer]=0
  1159. }
  1160.  
  1161. //Ban player
  1162.  
  1163. public ban(iPlayer,sBanReason[],dBanTime)
  1164. {
  1165. reset(iPlayer)
  1166.  
  1167. new iBanType=get_pcvar_num(g_dCvarBanType)
  1168. new iLogsEnable=get_pcvar_num(g_dCvarLogs)
  1169.  
  1170. new sIp[16],sAuthid[34],sName[33]
  1171.  
  1172. get_user_ip(iPlayer,sIp,15,1)
  1173. get_user_authid(iPlayer,sAuthid,33)
  1174. get_user_name(iPlayer,sName,32)
  1175.  
  1176. new dUserid=get_user_userid(iPlayer)
  1177.  
  1178. switch(iBanType)
  1179. {
  1180. case 0:server_cmd("kick #%d [felderito] %s detektalva!",dUserid,sBanReason)
  1181. case 1:server_cmd("addip %d %s;writeip",dBanTime,sIp)
  1182. case 2:
  1183. {
  1184. if(containi(sAuthid,"STEAM_0:")!=-1)
  1185. {
  1186. server_cmd("amx_ban #%d %d ^"[felderito] %s detektalva!^"",dUserid,dBanTime,sBanReason)
  1187. }
  1188. else
  1189. {
  1190. server_cmd("amx_banip #%d %d ^"[felderito] %s detektalva!^"",dUserid,dBanTime,sBanReason)
  1191. }
  1192. }
  1193. case 3:server_cmd("amx_ban %d #%d ^"[felderito] %s detektalva!^"",dBanTime,dUserid,sBanReason)
  1194. case 4:server_cmd("amx_ban #%d %d ^"[felderito] %s detektalva!^"",dUserid,dBanTime,sBanReason)
  1195. case 5:server_cmd("amx_superban #%d %d ^"[felderito] %s detektalva!^"",dUserid,dBanTime,sBanReason)
  1196. }
  1197. if(iLogsEnable)
  1198. {
  1199. log_to_file("addons\amxmodx\logs\scanner.txt","<%s> <%s> <%s> <%s>",sName,sIp,sAuthid,sBanReason)
  1200. }
  1201.  
  1202. set_hudmessage(255,0,0,-1.0,0.75,0,0.0,5.0,0.0,0.0,-1)
  1203. show_hudmessage(0,"[felderito] %s: %s detektalva!",sName,sBanReason)
  1204. }
  1205.  
  1206. public reset(iPlayer)
  1207. {
  1208. g_dPlayerStatus[iPlayer]=false
  1209.  
  1210. if(task_exists(iPlayer))
  1211. {
  1212. remove_task(iPlayer)
  1213. }
  1214.  
  1215. if(task_exists(iPlayer+PROTECTOR_OFFSET))
  1216. {
  1217. remove_task(iPlayer+PROTECTOR_OFFSET)
  1218. }
  1219.  
  1220. if(task_exists(iPlayer+ALIASES_OFFSET))
  1221. {
  1222. remove_task(iPlayer+ALIASES_OFFSET)
  1223. }
  1224.  
  1225. if(task_exists(iPlayer+FASTFIRE_OFFSET))
  1226. {
  1227. remove_task(iPlayer+FASTFIRE_OFFSET)
  1228. }
  1229.  
  1230. if(task_exists(iPlayer+AIMBOT_OFFSET))
  1231. {
  1232. remove_task(iPlayer+AIMBOT_OFFSET)
  1233. }
  1234. }
  1235.  
  1236. public clear_info(iPlayer)
  1237. {
  1238. set_user_info(iPlayer,"model","")
  1239. set_user_info(iPlayer,"topcolor","")
  1240. set_user_info(iPlayer,"bottomcolor","")
  1241. set_user_info(iPlayer,"team","")
  1242. set_user_info(iPlayer,"cheater","")
  1243. set_user_info(iPlayer,"gad","")
  1244. set_user_info(iPlayer,"nameacc","")
  1245. set_user_info(iPlayer,"xredir","")
  1246. set_user_info(iPlayer,"bn_patch","")
  1247. set_user_info(iPlayer,"_ndmh","")
  1248. set_user_info(iPlayer,"_ndmf","")
  1249. set_user_info(iPlayer,"_ndms","")
  1250. set_user_info(iPlayer,"_rpgm_cfg","")
  1251. set_user_info(iPlayer,"rhlg","")
  1252. set_user_info(iPlayer,"src","")
  1253. set_user_info(iPlayer,"autobind","")
  1254. set_user_info(iPlayer,"lang","")
  1255. set_user_info(iPlayer,"ah","")
  1256. set_user_info(iPlayer,"friends","")
  1257. set_user_info(iPlayer,"dm","")
  1258. set_user_info(iPlayer,"cl_lb","")
  1259. set_user_info(iPlayer,"ghosts","")
  1260. set_user_info(iPlayer,"lefthand","")
  1261. set_user_info(iPlayer,"vgui_menu","")
  1262. set_user_info(iPlayer,"lac_id","")
  1263. set_user_info(iPlayer,"dzuid","")
  1264. set_user_info(iPlayer,"nick_pass","")
  1265. set_user_info(iPlayer,"status_monitor","")
  1266. set_user_info(iPlayer,"source_models","")
  1267. set_user_info(iPlayer,"mp_cnet","")
  1268. set_user_info(iPlayer,"mp_net","")
  1269. }
  1270.  
  1271. public round_start()
  1272. {
  1273. g_dRoundStatus=true
  1274. }
  1275.  
  1276. public round_end()
  1277. {
  1278. g_dRoundStatus=false
  1279. }
  1280. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  1281. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
  1282. */
  1283.