Advertisement
S4T3K

ANTICHEAT [ALPHA]

Aug 3rd, 2014
559
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 39.48 KB | None | 0 0
  1. #include <a_samp>
  2. #include <a_http>
  3. #include <mapandreas>
  4.  
  5. #if defined _ANTICHEAT_INCLUDED
  6.     #endinput
  7. #endif
  8.  
  9. #define _ANTICHEAT_INCLUDED
  10.  
  11.  
  12. /**********************************
  13.         Initialization
  14. *********************************/
  15.  
  16. enum AC_p
  17. {
  18.     pMoney,
  19.     bool:pWeapons[46],
  20.     pAmmoNr[13],
  21.     pShots[15],
  22.     pLag,
  23.     pAFK,
  24.     pStartAFK,
  25.     pLastUpdate,
  26.     Float:pHealthNr,
  27.     Float:pArmourNr,
  28.     Float:pClicked[3],
  29.     pPut[2],
  30.     pMod[15],
  31.     pLastAJ,
  32.     Float:pLastVelo[3],
  33.     Float:pLastUpdPos[3],
  34.     Float:pLastCamera[3],
  35.     Float:pDropJetpack[3],
  36.     pSkyWarnings,
  37.     bool:pDeathCount,
  38.     bool:pSpectating,
  39.     bool:pJetpack,
  40. };
  41.  
  42. enum AC_cInfo
  43. {
  44.     weap1,
  45.     weap2,
  46.     weap3,
  47. };
  48.  
  49. #if defined USE_COUNTRY_CHECKING
  50.     enum E_QUERY_TYPES
  51.     {
  52.         QUERY_TYPE_CODE = 0,
  53.         QUERY_TYPE_COUNTRY_NAME = 1
  54.     };
  55. #endif
  56.  
  57. new
  58.     bool:AC_pAlive[MAX_PLAYERS];
  59.  
  60. static
  61.     AC_PlayerInfo[MAX_PLAYERS][AC_p],
  62.     AC_Classes[300][AC_cInfo],
  63.     AC_waitForSync[MAX_PLAYERS][2]
  64. ;
  65.  
  66. static stock const AC_magazines[] = {34, 17, 7, 1, 4, 7, 100, 30, 30, 50, 100, 1, 1};
  67.  
  68. /*********************************
  69.         EXPORTED
  70. *********************************/
  71.  
  72. #define PING_LIMIT                     (500)               // Ping maximal avant d'être kick pour éviter les problèmes de latence
  73. #define MAX_AFK_TIME                   (1200)              // Temps en seconde maximal d'AFK avant d'être kick pour éviter de surcharger le serveur
  74. #define MAX_PLAYER_HEALTH              (1000.0)            // Vie maximale que peut avoir un joueur sans se faire bannir (doit être différent de 100 et supérieur à 99). Utile dans le cas des aduty par exemple
  75. #define MAX_PLAYER_ARMOUR              (1000.0)            // Armure maximale que peut avoir un joueur sans se faire bannir (doit être différent de 100 et supérieur à 99). Utile dans le cas des aduty par exemple
  76. #define MAX_ATTEMPTS                   (3)                 // Nombre de secondes en unsynchro maximal avant de se faire timeout
  77.  
  78. #if defined USE_COUNTRY_CHECKING
  79.     #define DEFAULT_COUNTRY_CHECKING   (QUERY_TYPE_CODE)   // Type de vérification à effectuer sur l'IP (choisir une des deux vérifications de l'enum)
  80. #endif
  81.  
  82. #define CHEAT_SOBEIT                   (-2)                // Cheat ID -2 = Appel de la callback par le détecteur de s0beit. C'est pas un cheat (mais un outil pour cheater), mais ça rentre dans le cadre de la callback. [EXPERIMENTAL]
  83. #define CHEAT_AFK                      (-1)                // Cheat ID -1 = Appel de la callback par l'Anti AFK. Ce n'est pas un cheat mais je me voyais mal faire une callback pour ça
  84. #define CHEAT_MONEY                    (0)                 // Cheat ID 0 = Cheat argent
  85. #define CHEAT_WEAPON                   (1)                 // Cheat ID 1 = Cheat arme
  86. #define CHEAT_HEALTH                   (2)                 // Cheat ID 2 = Cheat vie
  87. #define CHEAT_ARMOUR                   (3)                 // Cheat ID 3 = Cheat armure
  88. #define CHEAT_BLOCK                    (4)                 // Cheat ID 4 = Cheat block munitions (munitions infinies)
  89. #define CHEAT_MUNI                     (5)                 // Cheat ID 5 = Cheat munitions (ajout de munitions)
  90. #define CHEAT_TUNING                   (6)                 // Cheat ID 6 = Cheat tuning
  91. #define CHEAT_INVULNERABLE             (7)                 // Cheat ID 7 = Cheat invulnerable
  92. #define CHEAT_FLY                      (8)                 // Cheat ID 8 = Cheat anti fly (quand la personne nage en l'air)
  93. #define CHEAT_AIRBREAK                 (9)                 // Cheat ID 9 = Cheat anti airbreak (anti gravité)
  94. #define CHEAT_SKYDIVING                (10)                // Cheat ID 10 = Cheat skydiving (chute du haut du ciel pour déplacements plus rapides)
  95. #define CHEAT_TELEPORT_MAP             (11)                // Cheat ID 11 = Cheat teleport map (le joueur clique droit sur la carte et s'y téléporte)
  96. #define CHEAT_TELEPORT_VEH             (12)                // Cheat ID 12 = Cheat teleport veh (le joueur se téléporte dans un véhicule)
  97. #define CHEAT_REMOTE_JACKING           (13)                // Cheat ID 13 = Cheat remote jacking (le joueur se téléporte dans le veh d'un autre, fout le bordel avec et revient à son ancienne place)
  98. #define CHEAT_UNREG_ANIM               (14)                // Cheat ID 14 = Cheat unregistrated animation (le joueur utilise un mod qui lui fournit des animations non natives et/ou non détectables par SAMP)
  99. #define CHEAT_SPOOFED_WEAPON           (15)                // Cheat ID 15 = Cheat spoofed weapon (le joueur fait semblant de se faire tuer par une arme que le tueur n'a pas)
  100. #define CHEAT_FAKE_KILL                (16)                // Cheat ID 16 = Cheat fake kill (le joueur fait semblant de se faire tuer)
  101. #define CHEAT_SPECTATING               (17)                // Cheat ID 17 = Cheat spectating (le joueur se met à spec les autres joueurs)
  102. #define CHEAT_JETPACK                  (18)                // Cheat ID 18 = Cheat jetpack (le joueur spawn un jetpack cheaté, aucun risque de faux positif théorique)
  103. #define CHEAT_SPEEDHACK                (19)                // Cheat ID 19 = Cheat speedhack (le joueur utilise un cheat pour se déplacer plus vite) [EXPERIMENTAL]
  104.  
  105. forward OnPlayerCheat(playerid, cheatid);       // CETTE CALLBACK DOIT TOUJOURS RETOURNER 1
  106.  
  107. #if defined USE_ANTI_VPN
  108.     forward OnPlayerVPN(playerid, ip_address[]);
  109. #endif
  110.  
  111. #if defined USE_BADWORD
  112.     forward OnPlayerBadword(playerid, badword[]);   // Retourner à cette callback ce que vous retourneriez à OnPlayerText (0 ou 1)
  113. #endif
  114.  
  115. #if defined USE_COUNTRY_CHECKING
  116.     forward OnPlayerForeignCountry(playerid, ip_address[], country_name[], E_QUERY_TYPES:query_type);
  117. #endif
  118.  
  119. /******************************************
  120.             HOOKED CALLBACKS
  121. ******************************************/
  122.  
  123. #if defined FILTERSCRIPT
  124.     public OnFilterScriptInit()
  125.     {
  126.         #if defined AC_OnFilterScriptInit
  127.             return AC_OnFilterScriptInit();
  128.         #else
  129.             MapAndreas_Init(MAP_ANDREAS_MODE_FULL);
  130.             return true;
  131.         #endif
  132.     }
  133.  
  134.     #if defined _ALS_OnFilterScriptInit
  135.         #undef OnFilterScriptInit
  136.     #else
  137.         #define _ALS_OnFilterScriptInit
  138.     #endif
  139.      
  140.     #define OnFilterScriptInit AC_OnFilterScriptInit
  141.     #if defined AC_OnFilterScriptInit
  142.         forward AC_OnFilterScriptInit();
  143.     #endif
  144. #else
  145.     public OnGameModeInit()
  146.     {
  147.         #if defined AC_OnGameModeInit
  148.             return AC_OnGameModeInit();
  149.         #else
  150.             MapAndreas_Init(MAP_ANDREAS_MODE_FULL);
  151.             return true;
  152.         #endif
  153.     }
  154.  
  155.     #if defined _ALS_OnGameModeInit
  156.         #undef OnGameModeInit
  157.     #else
  158.         #define _ALS_OnGameModeInit
  159.     #endif
  160.      
  161.     #define OnGameModeInit AC_OnGameModeInit
  162.     #if defined AC_OnGameModeInit
  163.         forward AC_OnGameModeInit();
  164.     #endif
  165. #endif
  166.  
  167.  
  168. public OnPlayerSpawn(playerid)
  169. {
  170.     #if defined AC_OnPlayerSpawn
  171.         return AC_OnPlayerSpawn(playerid);
  172.     #else
  173.         AC_pAlive[playerid] = true;
  174.         SetPlayerHealth(playerid, 99.0);
  175.         return  1;
  176.     #endif
  177. }
  178.  
  179. public OnPlayerConnect(playerid)
  180. {
  181.     #if defined AC_OnPlayerConnect
  182.         return AC_OnPlayerConnect(playerid);
  183.     #else
  184.         // No vending machines, so no risk to ban innocents due to heal fail
  185.  
  186.         RemoveBuildingForPlayer(playerid, 1302, 0.0, 0.0, 0.0, 6000.0);
  187.         RemoveBuildingForPlayer(playerid, 1209, 0.0, 0.0, 0.0, 6000.0);
  188.         RemoveBuildingForPlayer(playerid, 955, 0.0, 0.0, 0.0, 6000.0);
  189.         RemoveBuildingForPlayer(playerid, 956, 0.0, 0.0, 0.0, 6000.0);
  190.         RemoveBuildingForPlayer(playerid, 1775, 0.0, 0.0, 0.0, 6000.0);
  191.         RemoveBuildingForPlayer(playerid, 1776, 0.0, 0.0, 0.0, 6000.0);
  192.         RemoveBuildingForPlayer(playerid, 1977, 0.0, 0.0, 0.0, 6000.0);
  193.  
  194.         AC_pAlive[playerid] = false;
  195.         AC_ResetPlayerWeapons(playerid);
  196.  
  197.         #if defined USE_COUNTRY_CHECKING
  198.             Lookup_ip(playerid, DEFAULT_COUNTRY_CHECKING);
  199.         #endif
  200.  
  201.         // anti sobeit
  202.         TogglePlayerControllable(playerid, 0);
  203.         new Float:x, Float:z;
  204.         GetPlayerCameraFrontVector(playerid, x, x, z);
  205.  
  206.         #pragma unused x
  207.  
  208.         if(z < 0.8) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_SOBEIT); // basic detection though, need to be far improved if possible
  209.         TogglePlayerControllable(playerid, 1);
  210.         return  1;
  211.     #endif
  212. }
  213.  
  214. public OnPlayerRequestClass(playerid, classid)
  215. {
  216.     #if defined AC_OnPlayerRequestClass
  217.         return AC_OnPlayerRequestClass(playerid, classid);
  218.     #else
  219.         AC_pAlive[playerid] = false;
  220.         AC_PlayerInfo[playerid][pWeapons][AC_Classes[classid][weap1]] = true;
  221.         AC_PlayerInfo[playerid][pWeapons][AC_Classes[classid][weap2]] = true;
  222.         AC_PlayerInfo[playerid][pWeapons][AC_Classes[classid][weap3]] = true;
  223.         return 1;
  224.     #endif
  225. }
  226.  
  227. public OnPlayerDeath(playerid, killerid, reason)
  228. {
  229.     #if defined AC_OnPlayerDeath
  230.         return AC_OnPlayerDeath(playerid, killerid, reason);
  231.     #else
  232.         if(!AC_pAlive[playerid] && AC_PlayerInfo[playerid][pDeathCount]) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_FAKE_KILL);
  233.         AC_pAlive[playerid] = false;
  234.         if(!AC_PlayerInfo[playerid][pDeathCount]) AC_PlayerInfo[playerid][pDeathCount] = true;
  235.         new weapons[13], ammo, slot;
  236.         slot = GetWeaponSlot(reason);
  237.         for(new s = 0; s < 13; s++) GetPlayerWeaponData(killerid, s, weapons[s], ammo);
  238.         if(weapons[slot] != reason) CallRemoteFunction("OnPlayerCheat", "ii", CHEAT_SPOOFED_WEAPON);
  239.         AC_ResetPlayerWeapons(playerid);
  240.         return 1;
  241.     #endif
  242. }
  243.  
  244. public OnPlayerDisconnect(playerid, reason)
  245. {
  246.     #if defined AC_OnPlayerDisconnect
  247.         return AC_OnPlayerDisconnect(playerid, reason);
  248.     #else
  249.         static AC_blank[AC_p];
  250.         AC_PlayerInfo[playerid] = AC_blank;
  251.         if(GetPVarInt(playerid, "timeout") == 1)
  252.         {
  253.             new ip[16], cmd[25];
  254.             GetPVarString(playerid, "ip", ip, 16);
  255.             format(cmd, 25, "unbanip %s", ip);
  256.             SendRconCommand(cmd);
  257.             DeletePVar(playerid, "ip");
  258.             DeletePVar(playerid, "timeout");
  259.             return true;
  260.         }
  261.         return true;
  262.     #endif
  263. }
  264.  
  265. public OnPlayerKeyStateChange(playerid, newkeys, oldkeys)
  266. {
  267.     #if defined AC_OnPlayerKeyStateChange
  268.         return AC_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  269.     #else
  270.         if(AC_PlayerInfo[playerid][pAFK] != -1) AC_PlayerInfo[playerid][pAFK] = -1;
  271.         new Float:z;
  272.         MapAndreas_FindZ_For2DCoord(AC_PlayerInfo[playerid][pLastUpdPos][0], AC_PlayerInfo[playerid][pLastUpdPos][1], z);
  273.         if((AC_PlayerInfo[playerid][pLastUpdPos][2] - 1.0 <= z <= AC_PlayerInfo[playerid][pLastUpdPos][2] + 1.0) && (newkeys & KEY_SECONDARY_ATTACK) && (AC_PlayerInfo[playerid][pJetpack]))
  274.         {
  275.             AC_PlayerInfo[playerid][pJetpack] = false;
  276.             for(new i = 0; i < 3; i++) AC_PlayerInfo[playerid][pDropJetpack][i] = AC_PlayerInfo[playerid][pLastUpdPos][i];
  277.         }
  278.         return true;
  279.     #endif
  280. }
  281.  
  282. public OnPlayerText(playerid, text[])
  283. {
  284.     #if defined AC_OnPlayerText
  285.         return AC_OnPlayerText(playerid, text);
  286.     #else
  287.         if(AC_PlayerInfo[playerid][pAFK] != -1) AC_PlayerInfo[playerid][pAFK] = -1;
  288.         #if defined USE_BADWORD
  289.             for(new i = 0; i < sizeof(AC_badwords); i++)
  290.             {
  291.                 if(strfind(text, AC_badwords[i], true) != -1) return CallRemoteFunction("OnPlayerBadword", "is", playerid, AC_badwords[i]);
  292.             }
  293.             new count;
  294.             for(new i = 0; i < strlen(text); i++)
  295.             {
  296.                 if((0 <= text[i] <= '9') && (text[i+1] == '.') && ('0' <= text[i+2]+1 <= '9')) count++, i++;
  297.                 if(count == 3) return CallRemoteFunction("OnPlayerBadword", "is", playerid, text);
  298.             }
  299.         #endif
  300.         return true;
  301.     #endif
  302. }
  303.  
  304. // Anti VPN
  305.  
  306. #if defined USE_ANTI_VPN
  307.  
  308.     public OnIncomingConnection(playerid, ip_address[], port)
  309.     {
  310.         #if defined AC_OnIncomingConnection
  311.             return OnIncomingConnection(playerid, ip_address, port);
  312.         #else
  313.             SetPVarString(playerid, "ip", ip_address);
  314.             new buffer[19] = "ip=";
  315.             memcpy(buffer, ip_address, 0, (strlen(ip_address)*4));
  316.             HTTP(playerid, HTTP_POST, "http://s4t3kx.alwaysdata.net/vpn.php", buffer, "OnVPNResponse");
  317.             return 1;
  318.         #endif
  319.     }
  320.  
  321.     #if defined _ALS_OnIncomingConnection
  322.         #undef OnIncomingConnection
  323.     #else
  324.         #define _ALS_OnIncomingConnection
  325.     #endif
  326.      
  327.     #define OnIncomingConnection AC_OnIncomingConnection
  328.     #if defined AC_OnIncomingConnection
  329.         forward AC_OnIncomingConnection(playerid, ip_address[], port);
  330.     #endif
  331.  
  332.     static OnVPNResponse(index, response, data[]);
  333.     public OnVPNResponse(index, response, data[])
  334.     {
  335.         if(response != 200) return printf("Problème de traitement de la base de donnée d'IPs [Code d'erreur : %d]", response), 1;
  336.         if(!strcmp(data, "entry", true))
  337.         {
  338.             new ip[16];
  339.             GetPVarString(index, "ip", ip, 16);
  340.             CallRemoteFunction("OnPlayerVPN", "is", index, ip);
  341.         }
  342.         return 1;
  343.     }
  344.  
  345. #endif
  346.  
  347. #if defined _ALS_OnPlayerSpawn
  348.     #undef OnPlayerSpawn
  349. #else
  350.     #define _ALS_OnPlayerSpawn
  351. #endif
  352.  
  353. #define OnPlayerSpawn AC_OnPlayerSpawn
  354. #if defined AC_OnPlayerSpawn
  355.     forward AC_OnPlayerSpawn(playerid);
  356. #endif
  357.  
  358.  
  359. #if defined _ALS_OnPlayerConnect
  360.     #undef OnPlayerConnect
  361. #else
  362.     #define _ALS_OnPlayerConnect
  363. #endif
  364.  
  365. #define OnPlayerConnect AC_OnPlayerConnect
  366. #if defined AC_OnPlayerConnect
  367.     forward AC_OnPlayerConnect(playerid);
  368. #endif
  369.  
  370.  
  371. #if defined _ALS_OnPlayerRequestClass
  372.     #undef OnPlayerRequestClass
  373. #else
  374.     #define _ALS_OnPlayerRequestClass
  375. #endif
  376.  
  377. #define OnPlayerRequestClass AC_OnPlayerRequestClass
  378. #if defined AC_OnPlayerRequestClass
  379.     forward AC_OnPlayerRequestClass(playerid, classid);
  380. #endif
  381.  
  382.  
  383. #if defined _ALS_OnPlayerDeath
  384.     #undef OnPlayerDeath
  385. #else
  386.     #define _ALS_OnPlayerDeath
  387. #endif
  388.  
  389. #define OnPlayerDeath AC_OnPlayerDeath
  390. #if defined AC_OnPlayerDeath
  391.     forward AC_OnPlayerDeath(playerid, killerid, reason);
  392. #endif
  393.  
  394. #if defined _ALS_OnPlayerDisconnect
  395.     #undef OnPlayerDisconnect
  396. #else
  397.     #define _ALS_OnPlayerDisconnect
  398. #endif
  399.  
  400. #define OnPlayerDisconnect AC_OnPlayerDisconnect
  401. #if defined AC_OnPlayerDisconnect
  402.     forward AC_OnPlayerDisconnect(playerid, reason);
  403. #endif
  404.  
  405.  
  406. #if defined _ALS_OnPlayerKeyStateChange
  407.     #undef OnPlayerKeyStateChange
  408. #else
  409.     #define _ALS_OnPlayerKeyStateChange
  410. #endif
  411.  
  412. #define OnPlayerKeyStateChange AC_OnPlayerKeyStateChange
  413. #if defined AC_OnPlayerKeyStateChange
  414.     forward AC_OnPlayerKeyStateChange(playerid, newkeys, oldkeys);
  415. #endif
  416.  
  417. #if defined _ALS_OnPlayerText
  418.     #undef OnPlayerText
  419. #else
  420.     #define _ALS_OnPlayerText
  421. #endif
  422.  
  423. #define OnPlayerText AC_OnPlayerText
  424. #if defined AC_OnPlayerText
  425.     forward AC_OnPlayerText(playerid, text[]);
  426. #endif
  427.  
  428.  
  429. /***************************************
  430.             MONEY MANAGING
  431. ***************************************/
  432.  
  433.  
  434. stock AC_GivePlayerMoney(const playerid, const money)
  435. {
  436.     if(money < 0) AC_PlayerInfo[playerid][pMoney] -= money;
  437.     else AC_PlayerInfo[playerid][pMoney] += money;
  438.     return GivePlayerMoney(playerid, money);
  439. }
  440.  
  441. stock AC_ResetPlayerMoney(const playerid)
  442. {
  443.     AC_PlayerInfo[playerid][pMoney] = 0;
  444.     return ResetPlayerMoney(playerid);
  445. }
  446.  
  447. stock AC_GetPlayerMoney(playerid)
  448. {
  449.     return AC_PlayerInfo[playerid][pMoney];
  450. }
  451.  
  452.  
  453. #if defined _ALS_GivePlayerMoney
  454.     #undef GivePlayerMoney
  455. #else
  456.     #define _ALS_GivePlayerMoney
  457. #endif
  458.  
  459. #define GivePlayerMoney AC_GivePlayerMoney
  460.  
  461. #if defined _ALS_ResetPlayerMoney
  462.     #undef ResetPlayerMoney
  463. #else
  464.     #define _ALS_ResetPlayerMoney
  465. #endif
  466.  
  467. #define ResetPlayerMoney AC_ResetPlayerMoney
  468.  
  469.  
  470. /************************************
  471.             ANTI HACK
  472.             WEAPONS
  473. ************************************/
  474.  
  475. stock AC_GivePlayerWeapon(playerid, weaponid, ammo)
  476. {
  477.     AC_PlayerInfo[playerid][pWeapons][weaponid] = true;
  478.     new s = GetWeaponSlot(weaponid);
  479.     AC_PlayerInfo[playerid][pAmmoNr][s] = ammo;
  480.     return GivePlayerWeapon(playerid, weaponid, ammo);
  481. }
  482.  
  483. stock AC_ResetPlayerWeapons(playerid)
  484. {
  485.     for(new i = 1; i < 45; i++) AC_PlayerInfo[playerid][pWeapons][i] = false;
  486.     for(new s = 0; s < 13; s++) AC_PlayerInfo[playerid][pAmmoNr][s] = 0;
  487.     return ResetPlayerWeapons(playerid);
  488. }
  489.  
  490. stock AC_AddPlayerClass(modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo)
  491. {
  492.     new classid = AddPlayerClass(modelid, spawn_x, spawn_y, spawn_z, z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
  493.     AC_Classes[classid][weap1] = weapon1;
  494.     AC_Classes[classid][weap2] = weapon2;
  495.     AC_Classes[classid][weap3] = weapon3;
  496.     return classid;
  497. }
  498.  
  499. stock AC_AddPlayerClassEx(teamid, modelid, Float:spawn_x, Float:spawn_y, Float:spawn_z, Float:z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo)
  500. {
  501.     new classid = AddPlayerClassEx(teamid, modelid, spawn_x, spawn_y, spawn_z, z_angle, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
  502.     AC_Classes[classid][weap1] = weapon1;
  503.     AC_Classes[classid][weap2] = weapon2;
  504.     AC_Classes[classid][weap3] = weapon3;
  505.     return classid;
  506. }
  507.  
  508. stock AC_SetSpawnInfo(playerid, team, skin, Float:x, Float:y, Float:z, Float:rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo)
  509. {
  510.     AC_PlayerInfo[playerid][pWeapons][weapon1] = true;
  511.     AC_PlayerInfo[playerid][pWeapons][weapon2] = true;
  512.     AC_PlayerInfo[playerid][pWeapons][weapon3] = true;
  513.     return SetSpawnInfo(playerid, team, skin, x, y, z, rotation, weapon1, weapon1_ammo, weapon2, weapon2_ammo, weapon3, weapon3_ammo);
  514. }
  515.  
  516. stock AC_SetPlayerAmmo(playerid, weaponslot, ammo)
  517. {
  518.     AC_PlayerInfo[playerid][pAmmoNr][weaponslot] = ammo;
  519.     return SetPlayerAmmo(playerid, weaponslot, ammo);
  520. }
  521.  
  522. #if defined _ALS_GivePlayerWeapon
  523.     #undef GivePlayerWeapon
  524. #else
  525.     #define _ALS_GivePlayerWeapon
  526. #endif
  527.  
  528. #if defined _ALS_ResetPlayerWeapons
  529.     #undef ResetPlayerWeapons
  530. #else
  531.     #define _ALS_ResetPlayerWeapons
  532. #endif
  533.  
  534. #if defined _ALS_AddPlayerClass
  535.     #undef AddPlayerClass
  536. #else
  537.     #define _ALS_AddPlayerClass
  538. #endif
  539.  
  540. #if defined _ALS_AddPlayerClassEx
  541.     #undef AddPlayerClassEx
  542. #else
  543.     #define _ALS_AddPlayerClassEx
  544. #endif
  545.  
  546. #if defined _ALS_SetSpawnInfo
  547.     #undef SetSpawnInfo
  548. #else
  549.     #define _ALS_SetSpawnInfo
  550. #endif
  551.  
  552. #if defined _ALS_SetPlayerAmmo
  553.     #undef SetPlayerAmmo
  554. #else
  555.     #define _ALS_SetPlayerAmmo
  556. #endif
  557.  
  558.  
  559. #define GivePlayerWeapon AC_GivePlayerWeapon
  560. #define ResetPlayerWeapons AC_ResetPlayerWeapons
  561. #define AddPlayerClass AC_AddPlayerClass
  562. #define AddPlayerClassEx AC_AddPlayerClassEx
  563. #define SetSpawnInfo AC_SetSpawnInfo
  564. #define SetPlayerAmmo AC_SetPlayerAmmo
  565.  
  566.  
  567. /**************************************
  568.             ANTI AMMO HACK
  569. **************************************/
  570.  
  571. public OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ)
  572. {
  573.     #if defined AC_OnPlayerWeaponShot
  574.         return AC_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, fX, fY, fZ);
  575.     #else
  576.     // Anti block munitions
  577.  
  578.     if((22 <= weaponid <= 34) && (++AC_PlayerInfo[playerid][pShots][weaponid-22] > AC_magazines[weaponid-22])) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_BLOCK);
  579.  
  580.     // Anti ammo hack
  581.  
  582.     if(16 <= weaponid <= 43)
  583.     {
  584.         new s = GetWeaponSlot(weaponid);
  585.         AC_PlayerInfo[playerid][pAmmoNr][s]--;
  586.     }
  587.     return true;
  588.     #endif
  589. }
  590.  
  591. #if defined _ALS_OnPlayerWeaponShot
  592.     #undef OnPlayerWeaponShot
  593. #else
  594.     #define _ALS_OnPlayerWeaponShot
  595. #endif
  596.  
  597. #define OnPlayerWeaponShot AC_OnPlayerWeaponShot
  598. #if defined AC_OnPlayerWeaponShot
  599.     forward AC_OnPlayerWeaponShot(playerid, weaponid, hittype, hitid, Float:fX, Float:fY, Float:fZ);
  600. #endif
  601.  
  602. /********************************************
  603.             ANTI HEALTH/ARMOUR HACK
  604. ********************************************/
  605.  
  606. stock AC_SetPlayerHealth(playerid, Float:health)
  607. {
  608.     if(health == 100.0) health = 99.0;
  609.     AC_PlayerInfo[playerid][pHealthNr] = health;
  610.     return SetPlayerHealth(playerid, health);
  611. }
  612.  
  613. stock AC_SetPlayerArmour(playerid, Float:armour)
  614. {
  615.     if(armour == 100.0) armour = 99.0;
  616.     AC_PlayerInfo[playerid][pArmourNr] = armour;
  617.     return SetPlayerArmour(playerid, armour);
  618. }
  619.  
  620. public OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart)
  621. {
  622.     #if defined AC_OnPlayerTakeDamage
  623.         return AC_OnPlayerTakeDamage(playerid, issuerid, amount, weaponid, bodypart);
  624.     #else
  625.         if(amount <= AC_PlayerInfo[playerid][pArmourNr]) AC_PlayerInfo[playerid][pArmourNr] -= amount, AC_waitForSync[playerid][0] = SetTimerEx("WaitForSync", PING_LIMIT*2, true, "ii", playerid, 0);
  626.         else AC_PlayerInfo[playerid][pHealthNr] -= amount, AC_waitForSync[playerid][1] = SetTimerEx("WaitForSync", 250, true, "ii", playerid, 1);
  627.         return 1;
  628.     #endif
  629. }
  630.  
  631. #if defined _ALS_SetPlayerHealth
  632.     #undef SetPlayerHealth
  633. #else
  634.     #define _ALS_SetPlayerHealth
  635. #endif
  636.  
  637. #if defined _ALS_SetPlayerArmour
  638.     #undef SetPlayerArmour
  639. #else
  640.     #define _ALS_SetPlayerArmour
  641. #endif
  642.  
  643. #if defined _ALS_OnPlayerTakeDamage
  644.     #undef OnPlayerTakeDamage
  645. #else
  646.     #define _ALS_OnPlayerTakeDamage
  647. #endif
  648.  
  649. #define SetPlayerHealth AC_SetPlayerHealth
  650. #define SetPlayerArmour AC_SetPlayerArmour
  651. #define OnPlayerTakeDamage AC_OnPlayerTakeDamage
  652. #if defined AC_OnPlayerTakeDamage  
  653.     forward AC_OnPlayerTakeDamage(playerid, issuerid, Float:amount, weaponid, bodypart);
  654. #endif
  655.  
  656. static WaitForSync(playerid, type);
  657. public WaitForSync(playerid, type)
  658. {
  659.     static nbr;
  660.     nbr++;
  661.     new Float:fl;
  662.     switch(type)
  663.     {
  664.         case 0:
  665.         {
  666.             GetPlayerArmour(playerid, fl);
  667.             if((AC_PlayerInfo[playerid][pArmourNr] != fl) && (nbr == 2))
  668.             {
  669.                 KillTimer(AC_waitForSync[playerid][0]);
  670.                 CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_INVULNERABLE);
  671.                 nbr = 0;
  672.                 return;
  673.             }
  674.         }
  675.         case 1:
  676.         {
  677.             GetPlayerHealth(playerid, fl);
  678.             if((AC_PlayerInfo[playerid][pHealthNr] != fl) && (nbr == 2))
  679.             {
  680.                 KillTimer(AC_waitForSync[playerid][1]);
  681.                 CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_INVULNERABLE);
  682.                 nbr = 0;
  683.                 return;
  684.             }
  685.         }
  686.     }
  687. }
  688.  
  689. /**************************************
  690.             CHEAT CLICK MAP
  691. **************************************/
  692.  
  693. public OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ)
  694. {
  695.     #if defined AC_OnPlayerClickMap
  696.         return AC_OnPlayerClickMap(playerid, fx, fy, fz);
  697.     #else
  698.         AC_PlayerInfo[playerid][pClicked][0] = fX;
  699.         AC_PlayerInfo[playerid][pClicked][1] = fY;
  700.         MapAndreas_FindZ_For2DCoord(fX, fY, AC_PlayerInfo[playerid][pClicked][2]);
  701.         return true;
  702.     #endif
  703. }
  704.  
  705. #if defined _ALS_OnPlayerClickMap
  706.     #undef OnPlayerClickMap
  707. #else
  708.     #define _ALS_OnPlayerClickMap
  709. #endif
  710.  
  711. #define OnPlayerClickMap AC_OnPlayerClickMap
  712. #if defined AC_OnPlayerClickMap
  713.     forward AC_OnPlayerClickMap(playerid, Float:fX, Float:fY, Float:fZ);
  714. #endif
  715.  
  716. /***************************************
  717.         ANTI CHEAT SPECTATING
  718. ***************************************/
  719.  
  720. stock AC_TogglePlayerSpectating(playerid, bool:toggle)
  721. {
  722.     AC_PlayerInfo[playerid][pSpectating] = toggle;
  723.     return TogglePlayerSpectating(playerid, toggle);
  724. }
  725.  
  726. stock AC_PlayerSpectatePlayer(playerid, targetplayerid, mode = SPECTATE_MODE_NORMAL)
  727. {
  728.     AC_PlayerInfo[playerid][pSpectating] = true;
  729.     return PlayerSpectatePlayer(playerid, targetplayerid, mode);
  730. }
  731.  
  732. stock AC_PlayerSpectateVehicle(playerid, targetvehicleid, mode = SPECTATE_MODE_NORMAL)
  733. {
  734.     AC_PlayerInfo[playerid][pSpectating] = true;
  735.     return PlayerSpectateVehicle(playerid, targetvehicleid, mode);
  736. }
  737.  
  738. #if defined _ALS_TogglePlayerSpectating
  739.     #undef TogglePlayerSpectating
  740. #else
  741.     #define _ALS_TogglePlayerSpectating
  742. #endif
  743.  
  744. #if defined _ALS_PlayerSpectatePlayer
  745.     #undef PlayerSpectatePlayer
  746. #else
  747.     #define _ALS_PlayerSpectatePlayer
  748. #endif
  749.  
  750. #if defined _ALS_PlayerSpectateVehicle
  751.     #undef PlayerSpectateVehicle
  752. #else
  753.     #define _ALS_PlayerSpectateVehicle
  754. #endif
  755.  
  756. #define TogglePlayerSpectating AC_TogglePlayerSpectating
  757. #define PlayerSpectatePlayer AC_PlayerSpectatePlayer
  758. #define PlayerSpectateVehicle AC_PlayerSpectateVehicle
  759.  
  760. /**************************************
  761.             FOREIGN COUNTRY
  762. **************************************/
  763.  
  764. #if defined USE_COUNTRY_CHECKING
  765.  
  766.     static stock Lookup_ip(playerid, E_QUERY_TYPES:query_type, bool:ipv6 = false)
  767.     {
  768.         new buffer[35] = "ip=";
  769.         GetPlayerIp(playerid, buffer[3], 16);
  770.         SetPVarString(playerid, "ip", buffer[3]);
  771.         SetPVarInt(playerid, "query", query_type);
  772.         strcat(buffer, "&query=");
  773.         format(buffer, sizeof(buffer), "%s%d", buffer, query_type);
  774.         strcat(buffer, "&ipv6=");
  775.         format(buffer, sizeof(buffer), "%s%d", buffer, ipv6);
  776.  
  777.         return HTTP(playerid, HTTP_POST, "http://s4t3kx.alwaysdata.net/geoip/_geoip.php", buffer, "OnGeoIPResponse");
  778.     }
  779.  
  780.     static OnGeoIPResponse(index, response, data[]);
  781.     public OnGeoIPResponse(index, response, data[])
  782.     {
  783.         new query = GetPVarInt(playerid, "query");
  784.         for(new i = 0; i < sizeof(AC_allowed_countries); ++i)
  785.         {
  786.             if(!strcmp(AC_allowed_countries[i][query], data, true)) return 1;
  787.         }
  788.         new ip[16];
  789.         GetPVarString(index, "ip", ip, 16);
  790.         CallRemoteFunction("OnPlayerForeignCountry", "issi", index, ip, data, query);
  791.         DeletePVar(playerid, "ip");
  792.         DeletePVar(playerid, "query");
  793.         return 1;
  794.     }
  795.  
  796. #endif
  797.  
  798. /**************************************
  799.             ANTI CHEAT JETPACK
  800. **************************************/
  801.  
  802. stock AC_SetPlayerSpecialAction(playerid, actionid)
  803. {
  804.     if(actionid == SPECIAL_ACTION_USEJETPACK) AC_PlayerInfo[playerid][pJetpack] = true;
  805.     if(actionid == SPECIAL_ACTION_NONE) AC_PlayerInfo[playerid][pJetpack] = false;
  806.     return SetPlayerSpecialAction(playerid, actionid);
  807. }
  808.  
  809. #if defined _ALS_SetPlayerSpecialAction
  810.     #undef SetPlayerSpecialAction
  811. #else
  812.     #define _ALS_SetPlayerSpecialAction
  813. #endif
  814.  
  815. #define SetPlayerSpecialAction AC_SetPlayerSpecialAction
  816.  
  817. /***************************************
  818.             ANTI CHEAT TUNING
  819. ***************************************/
  820.  
  821. stock AC_AddVehicleComponent(vehicleid, componentid)
  822. {
  823.     new slot = GetVehicleComponentType(componentid);
  824.     for(new i = 0, l = GetMaxPlayers(); i < l; i++)
  825.     {
  826.         if(!IsPlayerConnected(i)) continue;
  827.         if(GetPlayerVehicleID(i) == vehicleid) AC_PlayerInfo[i][pMod][slot] = 2, AC_PlayerInfo[i][pMod][14] = vehicleid;
  828.     }
  829.     return AddVehicleComponent(vehicleid, componentid);
  830. }
  831.  
  832. stock AC_RemoveVehicleComponent(vehicleid, componentid)
  833. {
  834.     new slot = GetVehicleComponentType(componentid)
  835.     for(new i = 0, l = GetMaxPlayers(); i < l; i++)
  836.     {
  837.         if(!IsPlayerConnected(i)) continue;
  838.         if(GetPlayerVehicleID(i) == vehicleid) AC_PlayerInfo[i][pMod][slot] = -1, AC_PlayerInfo[i][pMod][14] = vehicleid;
  839.     }
  840.     return RemoveVehicleComponent(vehicleid, componentid);
  841. }
  842.  
  843. public OnVehicleMod(playerid, vehicleid, componentid)
  844. {
  845.     new slotid = GetVehicleComponentType(componentid);
  846.     if(GetPlayerInterior(playerid) == 0 && AC_PlayerInfo[playerid][pMod][14] != vehicleid && (AC_PlayerInfo[playerid][pMod][slotid] != 2 && AC_PlayerInfo[playerid][pMod] != -1))
  847.         CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_TUNING);
  848. }
  849.  
  850. #if defined _ALS_AddVehicleComponent
  851.     #undef AddVehicleComponent
  852. #else
  853.     #define _ALS_AddVehicleComponent
  854. #endif
  855.  
  856. #if defined _ALS_RemoveVehicleComponent
  857.     #undef RemoveVehicleComponent
  858. #else
  859.     #define _ALS_RemoveVehicleComponent
  860. #endif
  861.  
  862. #if defined _ALS_OnVehicleMod
  863.     #undef OnVehicleMod
  864. #else
  865.     #define _ALS_OnVehicleMod
  866. #endif
  867.  
  868. #define AddVehicleComponent AC_AddVehicleComponent
  869. #define RemoveVehicleComponent AC_RemoveVehicleComponent
  870. #define OnVehicleMod AC_OnVehicleMod
  871. #if defined AC_OnVehicleMod
  872.     forward AC_OnVehicleMod(playerid, vehicleid, componentid);
  873. #endif
  874.  
  875. /************************************
  876.             ANTI TP VEH
  877. ************************************/
  878.  
  879. stock AC_PutPlayerInVehicle(playerid, vehicleid, seatid)
  880. {
  881.     AC_PlayerInfo[playerid][pPut][0] = vehicleid;
  882.     AC_PlayerInfo[playerid][pPut][1] = seatid;
  883.     return PutPlayerInVehicle(playerid, vehicleid, seatid);
  884. }
  885.  
  886. public OnPlayerEnterVehicle(playerid, vehicleid, ispassenger)
  887. {
  888.     #if defined AC_OnPlayerEnterVehicle
  889.         return AC_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
  890.     #else
  891.         AC_PlayerInfo[playerid][pPut][0] = vehicleid;
  892.         AC_PlayerInfo[playerid][pPut][1] = ispassenger;
  893.         return true;
  894.     #endif
  895. }
  896.  
  897. public OnPlayerStateChange(playerid, newstate, oldstate)
  898. {
  899.     #if defined AC_OnPlayerStateChange
  900.         return AC_OnPlayerStateChange(playerid, newstate, oldstate);
  901.     #else
  902.         if(((newstate == PLAYER_STATE_DRIVER) || (newstate == PLAYER_STATE_PASSENGER)) && ((AC_PlayerInfo[playerid][pPut][0] != GetPlayerVehicleID(playerid)) || ((AC_PlayerInfo[playerid][pPut][1] == 0 && GetPlayerVehicleSeat(playerid) != 0) || (AC_PlayerInfo[playerid][pPut][1] != 0 && GetPlayerVehicleSeat(playerid) == 0))))
  903.             CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_TELEPORT_VEH);
  904.         if((newstate == PLAYER_STATE_SPECTATING) && (!AC_PlayerInfo[playerid][pSpectating]))
  905.             CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_SPECTATING);
  906.         return true;
  907.     #endif
  908. }
  909.  
  910. #if defined _ALS_PutPlayerInVehicle
  911.     #undef PutPlayerInVehicle
  912. #else
  913.     #define _ALS_PutPlayerInVehicle
  914. #endif
  915.  
  916. #if defined _ALS_OnPlayerEnterVehicle
  917.     #undef OnPlayerEnterVehicle
  918. #else
  919.     #define _ALS_OnPlayerEnterVehicle
  920. #endif
  921.  
  922. #if defined _ALS_OnPlayerStateChange
  923.     #undef OnPlayerStateChange
  924. #else
  925.     #define _ALS_OnPlayerStateChange
  926. #endif
  927.  
  928. #define PutPlayerInVehicle AC_PutPlayerInVehicle
  929. #define OnPlayerEnterVehicle AC_OnPlayerEnterVehicle
  930. #define OnPlayerStateChange AC_OnPlayerStateChange
  931.  
  932. #if defined AC_OnPlayerEnterVehicle
  933.     forward AC_OnPlayerEnterVehicle(playerid, vehicleid, ispassenger);
  934. #endif
  935.  
  936. #if defined AC_OnPlayerStateChange
  937.     forward AC_OnPlayerStateChange(playerid, newstate, oldstate);
  938. #endif
  939.  
  940. /************************************
  941.         INTERNAL FUNCTIONS
  942. ************************************/
  943.  
  944. stock Timeout(playerid)
  945. {
  946.     new ip[16], cmd[23];
  947.     GetPVarString(playerid, "ip", ip, 16);
  948.     SetPVarInt(playerid, "timeout", 1);
  949.     SendRconCommand(cmd);
  950.     return true;
  951. }
  952.  
  953. stock GetWeaponSlot(weaponid)
  954. {
  955.     switch(weaponid)
  956.     {
  957.         case 0,1: return 0;
  958.         case 2..9: return 1;
  959.         case 10..15: return 10;
  960.         case 16, 17, 18, 39: return 8;
  961.         case 22..24: return 2;
  962.         case 25..27: return 3;
  963.         case 28, 29, 32: return 4;
  964.         case 30, 31: return 5;
  965.         case 33, 34: return 6;
  966.         case 35..38: return 7;
  967.         case 40: return 12;
  968.         case 41..43: return 9;
  969.         case 44..46: return 11;
  970.     }
  971.     return -1;
  972. }
  973.  
  974. stock GetWeaponBySlot(playerid, slot)
  975. {
  976.     new w[2];
  977.     GetPlayerWeaponData(playerid, slot, w[0], w[1]);
  978.     return w[0];
  979. }
  980.  
  981. static stock GetFreeCell(const array[], def = 0)
  982. {
  983.     for(new i = 0; i < 15; i++)
  984.     {
  985.         if(array[i] == def) return i;
  986.     }
  987.     return -1;
  988. }
  989.  
  990. static stock CheckRemoteJacking(playerid)
  991. {
  992.     new currstate;
  993.     currstate = GetPlayerVehicleID(playerid);
  994.    
  995.     if ((currstate != AC_PlayerInfo[playerid][pLastAJ]) && (currstate) && (GetPlayerState(playerid) == PLAYER_STATE_DRIVER))
  996.     {
  997.         new Float:pos[3];
  998.         GetVehiclePos(GetPlayerVehicleID(playerid), pos[0], pos[1], pos[2]);
  999.        
  1000.         new
  1001.             Float:dist = VectorSize(pos[0]-AC_PlayerInfo[playerid][pLastUpdPos][0], pos[1]-AC_PlayerInfo[playerid][pLastUpdPos][1], pos[2]-AC_PlayerInfo[playerid][pLastUpdPos][2]),
  1002.             model = GetVehicleModel(GetPlayerVehicleID(playerid)),
  1003.             Float:radi = 10.0;
  1004.        
  1005.         if ((model == 577) || (model == 592)) radi = 25.0; // larger values for AT 400 & Andromada (larger models)
  1006.        
  1007.         if (dist > radi) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_REMOTE_JACKING);
  1008.  
  1009.         GetPlayerPos(playerid, AC_PlayerInfo[playerid][pLastUpdPos][0], AC_PlayerInfo[playerid][pLastUpdPos][1], AC_PlayerInfo[playerid][pLastUpdPos][2]);
  1010.         AC_PlayerInfo[playerid][pLastAJ] = currstate;
  1011.         return true;
  1012.     }
  1013.     return false;
  1014. }
  1015.  
  1016. stock IsPlayerFalling(playerid)
  1017. {
  1018.     new Float:z, Float:zv;
  1019.     GetPlayerPos(playerid, z, z, z);
  1020.     GetPlayerVelocity(playerid, zv, zv, zv);
  1021.     if((z < AC_PlayerInfo[playerid][pLastUpdPos][2]) && (zv - 0.7 <= AC_PlayerInfo[playerid][pLastUpdPos][2] - z <= zv + 0.7)) return true;
  1022.     return false;
  1023. }
  1024.  
  1025. /**********************************
  1026.             CHECKING
  1027. **********************************/
  1028.  
  1029.  
  1030. public OnPlayerUpdate(playerid)
  1031. {
  1032.     #if defined AC_OnPlayerUpdate
  1033.         return AC_OnPlayerUpdate(playerid);
  1034.     #else
  1035.  
  1036.     if(GetPVarInt(playerid, "timeout") == 1) return true;
  1037.  
  1038.     new time = gettime();
  1039.     if(time == AC_PlayerInfo[playerid][pLastUpdate]) return true;
  1040.  
  1041.     // Prevent fake checking
  1042.     if(!AC_pAlive[playerid]) return true;
  1043.     if(GetPlayerPing(playerid) >= PING_LIMIT && ++AC_PlayerInfo[playerid][pLag] == MAX_ATTEMPTS) return Timeout(playerid);
  1044.     //if(!IsPlayerSynced(playerid)) return Timeout(playerid);
  1045.  
  1046.     AC_PlayerInfo[playerid][pLastUpdate] = time;
  1047.     new Float:x, Float:y, Float:z;
  1048.     GetPlayerPos(playerid, x, y, z);
  1049.  
  1050.     // Anti AFK
  1051.     new Float:cam[3];
  1052.     GetPlayerCameraFrontVector(playerid, cam[0], cam[1], cam[2]);
  1053.     if((AC_PlayerInfo[playerid][pLastCamera][0] != cam[0]) || (AC_PlayerInfo[playerid][pLastCamera][1] != cam[1]) || (AC_PlayerInfo[playerid][pLastCamera][2] != cam[2])) AC_PlayerInfo[playerid][pAFK] = -1;
  1054.     else if((AC_PlayerInfo[playerid][pLastCamera][0] == cam[0]) && (AC_PlayerInfo[playerid][pLastCamera][1] == cam[1]) && (AC_PlayerInfo[playerid][pLastCamera][2] == cam[2]))
  1055.     {
  1056.         AC_PlayerInfo[playerid][pAFK] = time;
  1057.         if(AC_PlayerInfo[playerid][pStartAFK] == -1) AC_PlayerInfo[playerid][pStartAFK] = time;
  1058.         if((AC_PlayerInfo[playerid][pAFK] - AC_PlayerInfo[playerid][pStartAFK] >= MAX_AFK_TIME) || (time - AC_PlayerInfo[playerid][pLastUpdate] >= MAX_AFK_TIME)) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_AFK);
  1059.     }
  1060.  
  1061.     // Anti unreg anim
  1062.     new idx = GetPlayerAnimationIndex(playerid);
  1063.     if(idx < 0) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_UNREG_ANIM); // BE CARREFUL ! May bug with some of the SEX animations
  1064.                                                                                        // But you must be a weird man to use them, really
  1065.  
  1066.     // Anti hack munitions
  1067.     new s = GetWeaponSlot(GetPlayerWeapon(playerid));
  1068.     if((16 <= GetPlayerWeapon(playerid) <= 44) && ((GetPlayerAmmo(playerid) == -1) || (GetPlayerAmmo(playerid) != AC_PlayerInfo[playerid][pAmmoNr][s]))) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_MUNI);
  1069.  
  1070.  
  1071.     // Anti hack argent
  1072.     if(AC_PlayerInfo[playerid][pMoney] != GetPlayerMoney(playerid)) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_MONEY);
  1073.  
  1074.     // Anti hack vie/armure
  1075.  
  1076.     new Float:health, Float:armour;
  1077.     GetPlayerHealth(playerid, health);
  1078.     GetPlayerArmour(playerid, armour);
  1079.     if(((99.0 < health) || (health > MAX_PLAYER_HEALTH)) || (health != AC_PlayerInfo[playerid][pHealthNr])) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_HEALTH);
  1080.     if(((99.0 < armour) || (armour > MAX_PLAYER_ARMOUR)) || (armour != AC_PlayerInfo[playerid][pArmourNr])) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_ARMOUR);
  1081.  
  1082.     //Anti click tp
  1083.  
  1084.     if((!IsPlayerInRangeOfPoint(playerid, 2.0, x, y, z)) && (IsPlayerInRangeOfPoint(playerid, 3.0, AC_PlayerInfo[playerid][pClicked][0], AC_PlayerInfo[playerid][pClicked][1], AC_PlayerInfo[playerid][pClicked][2])))
  1085.         CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_TELEPORT_MAP);
  1086.  
  1087.     // Anti airbreak & anti fly
  1088.  
  1089.     new Float:z1, Float:velo[3];
  1090.     MapAndreas_FindZ_For2DCoord(x, y, z1);
  1091.     if(!IsPlayerInAnyVehicle(playerid)) GetPlayerVelocity(playerid, velo[0], velo[1], velo[2]);
  1092.     else GetVehicleVelocity(GetPlayerVehicleID(playerid), velo[0], velo[1], velo[2]);
  1093.  
  1094.     if((z1 - 1.0 > AC_PlayerInfo[playerid][pLastUpdPos][2]) || (!IsPlayerInRangeOfPoint(playerid, 1.0, AC_PlayerInfo[playerid][pLastUpdPos][0], AC_PlayerInfo[playerid][pLastUpdPos][1], AC_PlayerInfo[playerid][pLastUpdPos][2]) && (velo[0] <= 1.0 && velo[1] <= 1.0 && velo[2] <= 1.0)))
  1095.         CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_AIRBREAK);
  1096.  
  1097.     if((idx == 1538 || idx == 1539 || idx == 1543) && (velo[2]-5.0 <= AC_PlayerInfo[playerid][pLastVelo][2] <= velo[2]+5.0) && (++AC_PlayerInfo[playerid][pSkyWarnings] == 3)) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_FLY), AC_PlayerInfo[playerid][pSkyWarnings] = 0;
  1098.  
  1099.  
  1100.     // Anti remote-jacking
  1101.  
  1102.     CheckRemoteJacking(playerid); // JernejL
  1103.  
  1104.     // anti skydiving
  1105.  
  1106.     new anim[2][25];
  1107.     GetAnimationName(idx, anim[0], 25, anim[1], 25);
  1108.     if((!strcmp(anim[0], "GYMNASIUM", true)) && (!strcmp(anim[1], "gym_thread_jog", true)) && (!IsPlayerFalling(playerid))) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_SKYDIVING);
  1109.  
  1110.     // anti cheat jetpack
  1111.     if((GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK) && (IsPlayerInRangeOfPoint(playerid, 1.0, AC_PlayerInfo[playerid][pDropJetpack][0], AC_PlayerInfo[playerid][pDropJetpack][1], AC_PlayerInfo[playerid][pDropJetpack][2]))) AC_PlayerInfo[playerid][pJetpack] = true;
  1112.     if((!AC_PlayerInfo[playerid][pJetpack]) && (GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK)) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_JETPACK);
  1113.  
  1114.     // EXPERIMENTAL : anti speed hack
  1115.  
  1116.     if((VectorSize(AC_PlayerInfo[playerid][pLastUpdPos][0] - x, AC_PlayerInfo[playerid][pLastUpdPos][1] - y, AC_PlayerInfo[playerid][pLastUpdPos][2] - z) > (IsPlayerInAnyVehicle(playerid) ? 180.0 : 100.0))) CallRemoteFunction("OnPlayerCheat", "ii", playerid, CHEAT_SPEEDHACK);
  1117.  
  1118.     // saving
  1119.  
  1120.     AC_PlayerInfo[playerid][pLastUpdPos][0] = x;
  1121.     AC_PlayerInfo[playerid][pLastUpdPos][1] = y;
  1122.     AC_PlayerInfo[playerid][pLastUpdPos][2] = z;
  1123.     AC_PlayerInfo[playerid][pLastVelo][0] = velo[0];
  1124.     AC_PlayerInfo[playerid][pLastVelo][1] = velo[1];
  1125.     AC_PlayerInfo[playerid][pLastVelo][2] = velo[2];
  1126.     return true;
  1127.  
  1128.     #endif
  1129. }
  1130.  
  1131. #if defined _ALS_OnPlayerUpdate
  1132.     #undef OnPlayerUpdate
  1133. #else
  1134.     #define _ALS_OnPlayerUpdate
  1135. #endif
  1136.  
  1137. #define OnPlayerUpdate AC_OnPlayerUpdate
  1138. #if defined AC_OnPlayerUpdate
  1139.     forward AC_OnPlayerUpdate(playerid);
  1140. #endif
  1141.  
  1142. /*********************************
  1143.  
  1144.         Script de test :
  1145.  
  1146. public OnPlayerCheat(playerid, cheatid)
  1147. {
  1148.     new player_name[21];
  1149.     GetPlayerName(playerid, player_name, 21);
  1150.     printf("Joueur ID : %d || Cheat ID : %d || Nom du joueur : %s", playerid, cheatid, player_name);
  1151.     return 1;
  1152. }
  1153.  
  1154. *********************************/
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement