nandoy

AntiAim BOT

Nov 29th, 2014
356
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 5.82 KB | None | 0 0
  1. //Made by Kyance, assisted by Threshold do NOT remove credits.
  2. //Version 4.0.0, fixed over 5 bugs since v1.0 BETA, and done over 10 improvements :p
  3.  
  4. //Previous update -> Fixed the aimbot giving out false results when a player is "surfing" a vehicle, AKA: Standing on a moving vehicle.
  5. //Latest update -> Attempting to improve performance ..
  6.  
  7. #include <a_samp>
  8. #include <zcmd>
  9. #include <foreach>
  10. #include <sscanf2>
  11. #include <callbacks>
  12.  
  13. #define COLOR_NOTES 0x2894FFFF
  14. #define COLOR_NOTES2 0xFF0000AA
  15. #define DIALOG_SUSPECTLIST 123
  16. #define BULLET_HIT_TYPE_PLAYER 1
  17. #define PUB:%0(%1)  forward %0(%1); \
  18.                     public %0(%1)
  19. //------------------------------ VARIABLES ---------------------------------------
  20. new
  21.     bool: DetectedForAimbot[ MAX_PLAYERS char ],
  22.     bool: IsAFK[ MAX_PLAYERS char ],
  23.     bool: CoolDown[ MAX_PLAYERS char ],
  24.     TimesDetected[ MAX_PLAYERS ] = 0,
  25.     ToggleCoolDown[ MAX_PLAYERS ]
  26. ;
  27.  
  28. #if defined FILTERSCRIPT
  29.  
  30.  
  31. public OnFilterScriptInit()
  32. {
  33.     print("\n [abd] Aimbot Detection fs loaded\n [abd] Version: 4.0.0\n [abd] Created by: Kyance");
  34.     return 1;
  35. }
  36. public OnFilterScriptExit()
  37. {
  38.     foreach(Player, i) ResetStats(i);
  39.     print("\n [abd] Aimbot Detection fs unloaded\n [abd] Version: 4.0.0\n [abd] Created by: Kyance");
  40.     return 1;
  41. }
  42.  
  43. #endif
  44. //------------------------------ CALLBACKS ----------------------------------
  45. public OnPlayerPause(playerid)
  46. {
  47.     IsAFK{ playerid } = true;
  48.     return 1;
  49. }
  50. public OnPlayerResume(playerid, time)
  51. {
  52.     IsAFK{ playerid } = false;
  53.     return 1;
  54. }
  55. public OnPlayerConnect(playerid)
  56. {
  57.     ResetStats(playerid);
  58.     return 1;
  59. }
  60. public OnPlayerDisconnect(playerid, reason)
  61. {
  62.     ResetStats(playerid);
  63.     return 1;
  64. }
  65. public OnPlayerTakeDamage(playerid, issuerid, Float: amount, weaponid, bodypart)
  66. {
  67.     if(issuerid != INVALID_PLAYER_ID)
  68.     {
  69.         if(!CoolDown{ playerid } && ToggleCoolDown[issuerid]) CoolDown{ issuerid } = true, SetTimerEx("ResetCoolDown", 2500, false, "i", issuerid);
  70.     }
  71.     return 1;
  72. }
  73. public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
  74. {
  75.     if(hittype == BULLET_HIT_TYPE_PLAYER && !IsPlayerNPC(hitid))
  76.     {
  77.         if(!IsAFK{ hitid } && !CoolDown{ playerid })
  78.         {
  79.             new surf = GetPlayerSurfingVehicleID(playerid), tsurf = GetPlayerSurfingVehicleID(playerid);
  80.             if(surf == INVALID_VEHICLE_ID && tsurf == INVALID_VEHICLE_ID && !IsPlayerInAnyVehicle(hitid))
  81.             {
  82.                 new
  83.                     Float:targetpkl = NetStats_PacketLossPercent(hitid),
  84.                     Float:playerpkl = NetStats_PacketLossPercent(playerid)
  85.                 ;
  86.                 if(targetpkl < 0.8 && playerpkl < 0.8)
  87.                 {
  88.                     new Float:fOriginX, Float:fOriginY, Float:fOriginZ, Float:fHitPosX, Float:fHitPosY, Float:fHitPosZ;
  89.                     GetPlayerLastShotVectors(playerid, fOriginX, fOriginY, fOriginZ, fHitPosX, fHitPosY, fHitPosZ);
  90.                     CheckForAimbot(playerid, fHitPosX, fHitPosY, fHitPosZ, hitid);
  91.                 }
  92.             }
  93.         }
  94.     }
  95.     return 1;
  96. }
  97. //------------------------------ STOCKs and TIMERs ----------------------------------
  98. stock CheckForAimbot(playerid, Float:fX, Float:fY, Float:fZ, attacked = INVALID_PLAYER_ID)
  99. {
  100.     if(attacked != INVALID_PLAYER_ID)
  101.     {
  102.         if(!IsPlayerInRangeOfPoint(attacked, 3.0, fX, fY, fZ))
  103.         {
  104.             TimesDetected[playerid]++;
  105.             printf("ABD: %s(IP: %s) has received %d/10 aimbot warnings.", GetName(playerid), PlayerIP(playerid), TimesDetected[playerid]);
  106.             new string[110];
  107.             if(TimesDetected[playerid] == 3)
  108.             {
  109.                 format(string, sizeof(string), "WARNING: %s(%d) is POSSIBLY using aimbot!", GetName(playerid), playerid, playerid, playerid);
  110.                 SendClientMessageToAll(COLOR_NOTES2, string), string = "\0";
  111.                 DetectedForAimbot{ playerid } = true;
  112.             }
  113.             else if(TimesDetected[playerid] >= 10)
  114.             {
  115.                 format(string, sizeof(string), "KICK: %s(%d) has been auto-kicked for receiving 10 aimbot warnings.", GetName(playerid), playerid);
  116.                 SendClientMessageToAll(COLOR_NOTES2, string), string = "\0", Kick(playerid);
  117.                 printf("ABD: %s(IP: %s) has been kicked for receiving 8 aimbot warnings.", GetName(playerid), PlayerIP(playerid));
  118.             }
  119.             string = "\0";
  120.         }
  121.     }
  122. }
  123. stock GetName(playerid)
  124. {
  125.     new pnameid[24];
  126.     GetPlayerName(playerid,pnameid,sizeof(pnameid));
  127.     return pnameid;
  128. }
  129. stock PlayerIP(playerid)
  130. {
  131.     new str[16];
  132.     GetPlayerIp(playerid, str, sizeof(str));
  133.     return str;
  134. }
  135. PUB:ResetCoolDown(playerid)
  136. {
  137.     CoolDown{ playerid } = false;
  138.     SetTimerEx("ToggleCoolDownTimer", 3500, false, "i", playerid);
  139.     return 1;
  140. }
  141. PUB:ToggleCoolDownTimer(playerid)
  142. {
  143.     ToggleCoolDown[playerid] = 1;
  144.     return 1;
  145. }
  146.  
  147. stock ResetStats(playerid)
  148. {
  149.     CoolDown{ playerid } = false, DetectedForAimbot{ playerid } = false, IsAFK{ playerid } = false;
  150.     ToggleCoolDown[playerid] = 1, TimesDetected[playerid] = 0;
  151. }
  152. //------------------------------ COMMANDS ----------------------------------
  153. CMD:suspects(playerid, params[]) {
  154.     new count = 0, string1[48], string2[320];
  155.     foreach(Player, i)
  156.     {
  157.         if(DetectedForAimbot{ i })
  158.         {
  159.             count++;
  160.             format(string2, sizeof(string2), "%s\n{FC4949}%s{FFFFFF}({FC4949}%d{FFFFFF})", string2, GetName(i), i);
  161.         }
  162.     }
  163.     format(string1, sizeof(string1), "{FC4949}%d {FFFFFF}suspects detected", count);
  164.    
  165.     if(count) ShowPlayerDialog(playerid, DIALOG_SUSPECTLIST, DIALOG_STYLE_LIST, string1, string2, "Close", "");
  166.     else ShowPlayerDialog(playerid, DIALOG_SUSPECTLIST, DIALOG_STYLE_LIST, "0 suspects detected", "No aimboters have been detected.", "Close", "");
  167.     string1 = "\0", string2 = "\0";
  168.     return 1;
  169. }
  170.  
  171. CMD:clearsuspects(playerid, params[]) {
  172.     if(!IsPlayerAdmin(playerid)) return SendClientMessage(playerid, COLOR_NOTES2, "* You're not an admin!");
  173.     foreach(Player, i) ResetStats(i);
  174.     SendClientMessage(playerid, COLOR_NOTES, "* Suspect list successfully cleared!");
  175.     return 1;
  176. }
Add Comment
Please, Sign In to add comment