ScrashOff

tgAnticheat.inc BUILD 0001

Jan 29th, 2014
319
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pawn 29.73 KB | None | 0 0
  1. /*
  2.  * tgTranslations - AntiCheat Module
  3.  * Copyright (c) 2014 - TheGoldenHelmet ([SAK]Apple)
  4.  *
  5.  * Find me: {
  6.  *  Skype: fellipe.orsini,
  7.  *  IRC Server: irc.tl:6667,
  8.  *  IRC Channels: #partyecho, #partyserver, #sakclan, #sa-mp, #sa-mp.scripting, #samp-ptbr
  9.  * };
  10.  *
  11.  * Script Info: {
  12.  *  Build: 0001,
  13.  *  Last update on: 29/01/2014 14:06:20 (GMT -5),
  14.  *  %SESSION_INFO%
  15.  * };
  16.  *
  17.  * Additional: {
  18.  *  Author desc: As informações que são enviadas para o servidor podem não ser exatas, então evite banir instantaneamente :)
  19.  *  Special thanks: JernejL, Y_Less, cessil, Kye (SA-MP), Double-O-Seven, Emmet_, Lorenc_
  20.  * };
  21.  *
  22. */
  23.  
  24. #include <a_samp>
  25.  
  26. #include <YSI\y_iterate>
  27. #include <YSI\y_timers>
  28. #include <YSI\y_hooks>
  29. #include <YSI\y_bit>
  30.  
  31. #include <YSI\y_playerset>
  32.  
  33. //====================================================================================================================
  34.  
  35. #if !defined OnGameModeInit // Verifica se o módulo <a_samp> existe
  36.     #define tg_ac_allowStart_R0 0
  37. #else
  38.     #define tg_ac_allowStart_R0 1
  39. #endif
  40.  
  41. #if !defined _Y_ITER_ARRAY // Verifica se o módulo <YSI\y_iterate> existe
  42.     #define tg_ac_allowStart_R1 0
  43. #else
  44.     #define tg_ac_allowStart_R1 1
  45. #endif
  46.  
  47. #if defined _inc_y_hooks // Verifica se o módulo <YSI\y_hooks> existe
  48.     #define tg_ac_allowStart_R2 0
  49. #else
  50.     #define tg_ac_allowStart_R2 1
  51. #endif
  52.  
  53. #if !defined BitArray // Verifica se o módulo <YSI\y_bit> existe
  54.     #define tg_ac_allowStart_R3 0
  55. #else
  56.     #define tg_ac_allowStart_R3 1
  57. #endif
  58.  
  59. #if !defined PS@YSII_Ag // Verifica se o módulo <YSI\y_playerset> existe
  60.     #define tg_ac_allowStart_R4 0
  61. #else
  62.     #define tg_ac_allowStart_R4 1
  63. #endif
  64.  
  65. //====================================================================================================================
  66.  
  67. // - Callback do módulo
  68. forward OnPlayerCheat(playerid, cheattype);
  69.  
  70. // - Macros do módulo
  71. #define AC_Func::%0(%1) forward %0(%1); public %0(%1)
  72. #define AC_IntFunc::%0(%1) forward %0(%1); public %0(%1)
  73. #define AC_NewLine printf("\n");
  74.  
  75. // - Inicia váriaveis do módulo
  76. #define     DEBUG_FUNCTIONS         (0) // Coloque 1 caso queria visualizar o debug das funções no prompt to servidor.
  77. #define     SYNC_DELAY              (4) // Tempo que é levado em relação ao OnPlayerUpdate para atualizar as informações para o server (É recomendável que não seja editado).
  78.  
  79. // - Cheats que são detectados
  80. #define     AC_CHEAT_HEALTH         (0)
  81. #define     AC_CHEAT_HEALTH_CNOR    (1)
  82.  
  83. #define     AC_CHEAT_ARMOUR         (2)
  84. #define     AC_CHEAT_ARMOUR_CNOR    (3)
  85.  
  86. #define     AC_CHEAT_TELEPORT       (4)
  87. #define     AC_CHEAT_AIRBRAKE       (5)
  88.  
  89. #define     AC_CHEAT_FAKEKILL       (6)
  90. #define     AC_CHEAT_FLYHACK        (7)
  91.  
  92. #define     AC_CHEAT_CARHH          (8)
  93. #define     AC_CHEAT_CARWARP        (9)
  94. #define     AC_CHEAT_CARRJACK       (10) // Não disponível ainda
  95.  
  96. // - Váriaveis de sincronização
  97. #define     TOTAL_SYNC_TYPE         (4)
  98.  
  99. #define     SYNC_TYPE_HEALTH        (0)
  100. #define     SYNC_TYPE_ARMOUR        (1)
  101. #define     SYNC_TYPE_POS           (2)
  102. #define     SYNC_TYPE_VEH           (3)
  103.  
  104. new
  105.     _AC_syncTime[MAX_PLAYERS][TOTAL_SYNC_TYPE],
  106.     _AC_syncLastTime[MAX_PLAYERS][TOTAL_SYNC_TYPE],
  107.     Iterator:SYNC_TYPE<TOTAL_SYNC_TYPE>;
  108.  
  109. // - Váriaveis do jogador
  110. enum _tgAc_playerInfo
  111. {
  112.     _playerLastUpdate,
  113.     bool:_playerNoUpdate,
  114.    
  115.     Float:_playerHealth,
  116.     Float:_playerArmour,
  117.     Float:_playerPos[3],
  118.     Float:_playerPosSet[3],
  119.    
  120.     _playerFakeKillCount,
  121.     _playerLastDeath,
  122.    
  123.     _playerCarID,
  124.     _playerLastChangeCarID,
  125.     Float:_playerCarHealth,
  126.    
  127.     _playerLastAntiJackState
  128.    
  129. };
  130.  
  131. new
  132.     _AC_playerData[MAX_PLAYERS][_tgAc_playerInfo];
  133.  
  134. // - Pay 'n Spray, Transfender and Vending machine pos
  135. new const Float:payNSprayTransfender[][] = {
  136.     {1025.05, -1024.23, 32.1}, // LS Temple
  137.     {487.68, -1740.87, 11.13}, // LS Santa Maria
  138.     {-1420.73, 2583.37, 55.56}, // El Quebrados
  139.     {-1904.39, 284.97, 40.75}, // Wang Cars
  140.     {-2425.91, 1022.33, 50.10}, // Juniper Hill
  141.     {1975.60, 2162.16, 10.77}, // LV Redsands
  142.     {2065.38, -1831.51, 13.25}, // Idlewood
  143.     {-99.55, 1118.36, 19.44}, // Fort Carson
  144.     {721.07, -455.94, 16.04}, // Dillimore
  145.     {2393.74, 1493.01, 10.52}, // LV Unused (Pyramid)
  146.     {616.7820, -74.8151, 997.6350}, // Transfender 1
  147.     {615.2851, -124.2390, 997.6350}, // Transfender 2
  148.     {617.5380, -1.9900, 1000.6829} // Transfender 3
  149. };
  150.  
  151. new const Float:vendingMachines[][] = {
  152.     {-14.70, 1175.36, 18.95},
  153.     {201.02, -107.62, 0.90},
  154.     {662.43, -552.16, 15.71},
  155.     {-76.03, 1227.99, 19.13},
  156.     {1154.73, -1460.89, 15.16},
  157.     {1277.84, 372.52, 18.95},
  158.     {1398.84, 2222.61, 10.42},
  159.     {1520.15, 1055.27, 10.00},
  160.     {1634.11, -2237.53, 12.89},
  161.     {1659.46, 1722.86, 10.22},
  162.     {1729.79, -1943.05, 12.95},
  163.     {1789.21, -1369.27, 15.16},
  164.     {1928.73, -1772.45, 12.95},
  165.     {2060.12, -1897.64, 12.93},
  166.     {2085.77, 2071.36, 10.45},
  167.     {2139.52, -1161.48, 23.36},
  168.     {2153.23, -1016.15, 62.23},
  169.     {2271.73, -76.46, 25.96},
  170.     {2319.99, 2532.85, 10.22},
  171.     {2325.98, -1645.13, 14.21},
  172.     {2352.18, -1357.16, 23.77},
  173.     {2480.86, -1959.27, 12.96},
  174.     {2503.14, 1243.70, 10.22},
  175.     {-253.74, 2597.95, 62.24},
  176.     {-253.74, 2599.76, 62.24},
  177.     {2647.70, 1129.66, 10.22},
  178.     {2845.73, 1295.05, 10.79},
  179.     {-862.83, 1536.61, 21.98},
  180.     {-1350.12, 492.29, 10.59},
  181.     {-1350.12, 493.86, 10.59},
  182.     {-1455.12, 2591.66, 55.23},
  183.     {-1980.79, 142.66, 27.07},
  184.     {-2005.65, -490.05, 34.73},
  185.     {-2011.14, -398.34, 34.73},
  186.     {-2034.46, -490.05, 34.73},
  187.     {-2039.85, -398.34, 34.73},
  188.     {-2063.27, -490.05, 34.73},
  189.     {-2068.56, -398.34, 34.73},
  190.     {-2092.09, -490.05, 34.73},
  191.     {-2097.27, -398.34, 34.73},
  192.     {-2118.62, -422.41, 34.73},
  193.     {-2118.97, -423.65, 34.73},
  194.     {-2229.19, 286.41, 34.70},
  195.     {-2420.18, 985.95, 44.30},
  196.     {-2420.22, 984.58, 44.30},
  197.     {2155.84, 1607.88, 1000.06},
  198.     {2155.91, 1606.77, 1000.05},
  199.     {2202.45, 1617.01, 1000.06},
  200.     {2209.24, 1621.21, 1000.06},
  201.     {2209.91, 1607.20, 1000.05},
  202.     {2222.20, 1606.77, 1000.05},
  203.     {2222.37, 1602.64, 1000.06},
  204.     {2225.20, -1153.42, 1025.91},
  205.     {-15.10, -140.23, 1003.63},
  206.     {-16.12, -91.64, 1003.63},
  207.     {-16.53, -140.30, 1003.63},
  208.     {-17.55, -91.71, 1003.63},
  209.     {-19.04, -57.84, 1003.63},
  210.     {-32.45, -186.70, 1003.63},
  211.     {-33.88, -186.77, 1003.63},
  212.     {330.68, 178.50, 1020.07},
  213.     {331.92, 178.50, 1020.07},
  214.     {-35.73, -140.23, 1003.63},
  215.     {350.91, 206.09, 1008.48},
  216.     {-36.15, -57.88, 1003.63},
  217.     {361.56, 158.62, 1008.48},
  218.     {371.59, 178.45, 1020.07},
  219.     {373.83, -178.14, 1000.73},
  220.     {374.89, 188.98, 1008.48},
  221.     {379.04, -178.88, 1000.73},
  222.     {495.97, -24.32, 1000.73},
  223.     {500.56, -1.37, 1000.73},
  224.     {501.83, -1.43, 1000.73},
  225.     {2576.70, -1284.43, 1061.09}
  226. };
  227.  
  228. //====================================================================================================================
  229.  
  230. hook OnGameModeInit()
  231. {
  232.     #if tg_ac_allowStart_R0 || tg_ac_allowStart_R1 || tg_ac_allowStart_R2 || tg_ac_allowStart_R3 || tg_ac_allowStart_R4
  233.         printf("[tgAnticheat] SUCCESS: Módulo do AntiCheat iniciado com sucesso.");
  234.     #else
  235.         printf("[tgAnticheat] ERROR: Não foi possível iniciar o módulo do AntiCheat.");
  236.     #endif
  237.    
  238.     for(new i = 0; i < TOTAL_SYNC_TYPE; i++)
  239.         Iter_Add(SYNC_TYPE, i);
  240.     return 1;
  241. }
  242.  
  243. hook OnPlayerConnect(PlayerID)
  244. {
  245.     _AC_playerData[PlayerID][_playerNoUpdate]   =   true;
  246.    
  247.     // - Sync
  248.     foreach(new i : SYNC_TYPE)
  249.         SyncPlayer_AC(PlayerID, i, SYNC_DELAY);
  250.     // - Sync
  251.    
  252.     _AC_playerData[PlayerID][_playerPos][0]             =   0.0;
  253.     _AC_playerData[PlayerID][_playerPos][1]             =   0.0;
  254.     _AC_playerData[PlayerID][_playerPos][2]             =   0.0;
  255.     _AC_playerData[PlayerID][_playerPosSet][0]          =   0.0;
  256.     _AC_playerData[PlayerID][_playerPosSet][1]          =   0.0;
  257.     _AC_playerData[PlayerID][_playerPosSet][2]          =   0.0;
  258.    
  259.     _AC_playerData[PlayerID][_playerFakeKillCount]      =   0;
  260.     _AC_playerData[PlayerID][_playerLastDeath]          =   -1;
  261.    
  262.     _AC_playerData[PlayerID][_playerCarID]              =   INVALID_VEHICLE_ID;
  263.     _AC_playerData[PlayerID][_playerLastChangeCarID]    =   -1;
  264.     _AC_playerData[PlayerID][_playerCarHealth]          =   0.0;
  265.    
  266.     _AC_playerData[PlayerID][_playerLastAntiJackState]  =   0;
  267.    
  268.     // - Fix para qualquer erro que possa acontecer
  269.     SetPlayerHealth_AC(PlayerID, 100.0);
  270.     SetPlayerArmour_AC(PlayerID, 0.0);
  271.     return 1;
  272. }
  273.  
  274. hook OnPlayerSpawn(PlayerID)
  275. {
  276.     _AC_playerData[PlayerID][_playerNoUpdate]           =   false;
  277.    
  278.     _AC_playerData[PlayerID][_playerLastAntiJackState]  =   0;
  279.    
  280.     if(GetPVarInt(PlayerID, "SpawnPlayer_AC_Force_Sync") == 1)
  281.     {
  282.         new
  283.             Float:forceSyntPos[3];
  284.         GetPlayerPos(PlayerID, forceSyntPos[0], forceSyntPos[1], forceSyntPos[2]);
  285.        
  286.         SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, SYNC_DELAY);
  287.        
  288.         _AC_playerData[PlayerID][_playerPos][0]         =       forceSyntPos[0];
  289.         _AC_playerData[PlayerID][_playerPos][1]         =       forceSyntPos[1];
  290.         _AC_playerData[PlayerID][_playerPos][2]         =       forceSyntPos[2];
  291.        
  292.         _AC_playerData[PlayerID][_playerPosSet][0]      =       forceSyntPos[0];
  293.         _AC_playerData[PlayerID][_playerPosSet][1]      =       forceSyntPos[1];
  294.         _AC_playerData[PlayerID][_playerPosSet][2]      =       forceSyntPos[2];
  295.        
  296.         SetPVarInt(PlayerID, "SpawnPlayer_AC_Force_Sync", 0);
  297.        
  298.         #if DEBUG_FUNCTIONS
  299.             printf("[tgAnticheat:DEBUG] OnPlayerSpawn -> AC_Force_Sync -> Sincronizando posição do jogador '%d' para X '%0.2f' Y '%0.2f' Z '%0.2f'", PlayerID, forceSyntPos[0], forceSyntPos[1], forceSyntPos[2]);
  300.         #endif
  301.     }
  302.     return 1;
  303. }
  304.  
  305. hook OnPlayerDeath(PlayerID, KillerID, Reason)
  306. {
  307.     _AC_playerData[PlayerID][_playerNoUpdate]   =   true;
  308.    
  309.     // - Fakekill stuff
  310.     new timeNow = gettime();
  311.    
  312.     switch((timeNow - _AC_playerData[PlayerID][_playerLastDeath]))
  313.     {
  314.         case 0 .. 3:
  315.         {
  316.             _AC_playerData[PlayerID][_playerFakeKillCount]++;
  317.             if(_AC_playerData[PlayerID][_playerFakeKillCount] >= 3)
  318.             {
  319.                 _AC_playerData[PlayerID][_playerFakeKillCount] = 0;
  320.                 CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_FAKEKILL);
  321.             }
  322.         }
  323.         default: _AC_playerData[PlayerID][_playerFakeKillCount] = 0;
  324.     }
  325.    
  326.     _AC_playerData[PlayerID][_playerLastDeath] = timeNow;
  327.     // - Fakekill stuff
  328.    
  329.     foreach(new i : SYNC_TYPE)
  330.         SyncPlayer_AC(PlayerID, i, SYNC_DELAY);
  331.    
  332.     SetPlayerHealth_AC(PlayerID, 0.0);
  333.     SetPlayerArmour_AC(PlayerID, 0.0);
  334.     return 1;
  335. }
  336.  
  337. hook OnPlayerStateChange(PlayerID, NewState, OldState)
  338. {
  339.     if(NewState == PLAYER_STATE_DRIVER || NewState == PLAYER_STATE_PASSENGER)
  340.     {
  341.         if(GetPlayerVehicleID(PlayerID) != _AC_playerData[PlayerID][_playerCarID])
  342.         {
  343.             if(_AC_playerData[PlayerID][_playerLastChangeCarID] > gettime())
  344.             {
  345.                 CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_CARWARP);
  346.                 return 1;
  347.             }
  348.            
  349.             _AC_playerData[PlayerID][_playerLastChangeCarID]    =       gettime();
  350.             _AC_playerData[PlayerID][_playerCarID]              =       GetPlayerVehicleID(PlayerID);
  351.            
  352.             SyncPlayer_AC(PlayerID, SYNC_TYPE_VEH, SYNC_DELAY);
  353.            
  354.             GetVehicleHealth(_AC_playerData[PlayerID][_playerCarID], _AC_playerData[PlayerID][_playerCarHealth]);
  355.            
  356.             if(_AC_playerData[PlayerID][_playerCarHealth] > 1000.0)
  357.                 SetVehicleHealth_AC(_AC_playerData[PlayerID][_playerCarID], 1000.0);
  358.         }
  359.     }
  360.    
  361.     if(OldState == PLAYER_STATE_DRIVER || OldState == PLAYER_STATE_PASSENGER)
  362.     {
  363.         _AC_playerData[PlayerID][_playerCarID] = INVALID_VEHICLE_ID;
  364.     }
  365.     return 1;
  366. }
  367.  
  368. hook OnEnterExitModShop(PlayerID, EnterExit, InteriorID)
  369. {
  370.     if(EnterExit)
  371.     {
  372.         SetPVarInt(PlayerID, "playerInTransfender", 1);
  373.     }
  374.     else
  375.     {
  376.         SetPVarInt(PlayerID, "playerInTransfender", 0);
  377.     }
  378.     return 1;
  379. }
  380.  
  381. hook OnPlayerUpdate(PlayerID)
  382. {
  383.     _AC_playerData[PlayerID][_playerLastUpdate] =   GetTickCount();
  384.    
  385.     if(!_AC_playerData[PlayerID][_playerNoUpdate])
  386.     {
  387.         // - Sync
  388.         foreach(new i : SYNC_TYPE)
  389.         {
  390.             if(_AC_syncTime[PlayerID][i])
  391.             {
  392.                 if(_AC_playerData[PlayerID][_playerLastUpdate] - _AC_syncLastTime[PlayerID][i] > 1000)
  393.                 {
  394.                     _AC_syncTime[PlayerID][i]--;
  395.                     _AC_syncLastTime[PlayerID][i] = _AC_playerData[PlayerID][_playerLastUpdate];
  396.                    
  397.                     #if DEBUG_FUNCTIONS
  398.                         printf("[tgAnticheat:DEBUG] OnPlayerUpdate -> Sincronizando informações do jogador '%d' do tipo '%d' para '%d'.", PlayerID, i, _AC_syncTime[PlayerID][i]);
  399.                     #endif
  400.                 }
  401.             }
  402.         }
  403.         // - Sync
  404.        
  405.         // - Pos fixer
  406.         static
  407.             Float:_playerIntPos[3];
  408.        
  409.         if(GetPlayerPos(PlayerID, _playerIntPos[0], _playerIntPos[1], _playerIntPos[2]))
  410.         {
  411.             if(_playerIntPos[0] >= 99999.0 || _playerIntPos[1] >= 99999.0 || _playerIntPos[2] >= 99999.0 || _playerIntPos[0] <= -99999.0 || _playerIntPos[1] <= -99999.0 || _playerIntPos[2] <= -99999.0)
  412.             {
  413.                 SetPlayerPos_AC(PlayerID, _AC_playerData[PlayerID][_playerPos][0], _AC_playerData[PlayerID][_playerPos][1], _AC_playerData[PlayerID][_playerPos][2]);
  414.                
  415.                 #if DEBUG_FUNCTIONS
  416.                     printf("[tgAnticheat:DEBUG] World Boundries -> Jogador %d fora dos limites do jogo. Reposicionado para sua última posição válida.", PlayerID);
  417.                 #endif
  418.                
  419.                 return 1;
  420.             }
  421.         }
  422.         // - Pos fixer
  423.        
  424.         // - Health / Armour Updates
  425.         static
  426.             Float:pHealth,
  427.             Float:pArmour;
  428.        
  429.         GetPlayerHealth(PlayerID, pHealth);
  430.         GetPlayerArmour(PlayerID, pArmour);
  431.        
  432.         if(pHealth < GetPVarFloat(PlayerID, "secPlayerHealth") || _AC_syncTime[PlayerID][SYNC_TYPE_HEALTH] > 0)
  433.         {
  434.             SetPVarFloat(PlayerID, "secPlayerHealth", pHealth);
  435.             _AC_playerData[PlayerID][_playerHealth] = GetPVarFloat(PlayerID, "secPlayerHealth");
  436.            
  437.             #if DEBUG_FUNCTIONS
  438.                 printf("[tgAnticheat:DEBUG] OnPlayerUpdate -> Sincronizando vida do jogador '%d' para '%0.2f'.", PlayerID, _AC_playerData[PlayerID][_playerHealth]);
  439.             #endif
  440.         }
  441.        
  442.         if(pArmour < GetPVarFloat(PlayerID, "secPlayerArmour") || _AC_syncTime[PlayerID][SYNC_TYPE_ARMOUR] > 0)
  443.         {
  444.             SetPVarFloat(PlayerID, "secPlayerArmour", pArmour);
  445.             _AC_playerData[PlayerID][_playerArmour] = GetPVarFloat(PlayerID, "secPlayerArmour");
  446.            
  447.             #if DEBUG_FUNCTIONS
  448.                 printf("[tgAnticheat:DEBUG] OnPlayerUpdate -> Sincronizando colete do jogador '%d' para '%0.2f'.", PlayerID, _AC_playerData[PlayerID][_playerArmour]);
  449.             #endif
  450.         }
  451.         // - Health / Armour Updates
  452.        
  453.         // - Vehicle Health Updates
  454.         if(IsPlayerInAnyVehicle(PlayerID))
  455.         {
  456.             static
  457.                 Float:vHealth;
  458.            
  459.             GetVehicleHealth(_AC_playerData[PlayerID][_playerCarID], vHealth);
  460.            
  461.             if(vHealth < _AC_playerData[PlayerID][_playerCarHealth])
  462.             {
  463.                 _AC_playerData[PlayerID][_playerCarHealth] = vHealth;
  464.                
  465.                 #if DEBUG_FUNCTIONS
  466.                     printf("[tgAnticheat:DEBUG] OnPlayerUpdate -> Sincronizando vida do veículo do jogador '%d' para '%0.2f'.", PlayerID, _AC_playerData[PlayerID][_playerCarHealth]);
  467.                 #endif
  468.             }
  469.         }
  470.         // - Vehicle Health Updates
  471.     }
  472.     return 1;
  473. }
  474.  
  475. //===================================================================================================================
  476.  
  477. task AC_Update[990]()
  478. {
  479.     new
  480.         Float:_playerNewHealth,
  481.         Float:_playerNewArmour,
  482.         Float:_playerNewPos[3],
  483.         _playerSurfVar,
  484.         _generalVar;
  485.    
  486.     foreach(new PlayerID : Player)
  487.     {
  488.         if(GetPlayerPos(PlayerID, _playerNewPos[0], _playerNewPos[1], _playerNewPos[2]))
  489.         {
  490.             GetPlayerHealth(PlayerID, _playerNewHealth);
  491.             GetPlayerArmour(PlayerID, _playerNewArmour);
  492.            
  493.             // - Health stuff
  494.             if(!_AC_syncTime[PlayerID][SYNC_TYPE_HEALTH] && GetPlayerState(PlayerID) != PLAYER_STATE_SPECTATING && GetPlayerState(PlayerID) != PLAYER_STATE_WASTED)
  495.             {
  496.                 if(!_AC_playerData[PlayerID][_playerNoUpdate])
  497.                 {
  498.                     if(_playerNewHealth > _AC_playerData[PlayerID][_playerHealth] && _playerNewHealth <= 100.0 || _playerNewHealth < _AC_playerData[PlayerID][_playerHealth])
  499.                     {
  500.                         if(!IsPlayerInFrontOfVMachine(PlayerID))
  501.                         {
  502.                             CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_HEALTH);
  503.                            
  504.                             SyncPlayer_AC(PlayerID, SYNC_TYPE_HEALTH, SYNC_DELAY);
  505.                             _AC_playerData[PlayerID][_playerHealth] = _playerNewHealth;
  506.                            
  507.                             return 1;
  508.                         }
  509.                         else
  510.                         {
  511.                             SyncPlayer_AC(PlayerID, SYNC_TYPE_HEALTH, SYNC_DELAY);
  512.                             _AC_playerData[PlayerID][_playerHealth] = _playerNewHealth;
  513.                         }
  514.                     }
  515.                 }
  516.             }
  517.            
  518.             if(_playerNewHealth > 100.0)
  519.             {
  520.                 CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_HEALTH_CNOR);
  521.                
  522.                 SyncPlayer_AC(PlayerID, SYNC_TYPE_HEALTH, SYNC_DELAY);
  523.                 SetPlayerHealth_AC(PlayerID, 100.0);
  524.                
  525.                 return 1;
  526.             }
  527.             // - Health stuff
  528.            
  529.             // - Armour stuff
  530.             if(!_AC_syncTime[PlayerID][SYNC_TYPE_ARMOUR] && GetPlayerState(PlayerID) != PLAYER_STATE_SPECTATING && GetPlayerState(PlayerID) != PLAYER_STATE_WASTED)
  531.             {
  532.                 if(!_AC_playerData[PlayerID][_playerNoUpdate])
  533.                 {
  534.                     if(_playerNewArmour > _AC_playerData[PlayerID][_playerArmour] && _playerNewArmour <= 100.0 || _playerNewArmour < _AC_playerData[PlayerID][_playerArmour])
  535.                     {
  536.                         CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_ARMOUR);
  537.                        
  538.                         SyncPlayer_AC(PlayerID, SYNC_TYPE_ARMOUR, SYNC_DELAY);
  539.                         _AC_playerData[PlayerID][_playerArmour] = _playerNewArmour;
  540.                        
  541.                         return 1;
  542.                     }
  543.                 }
  544.             }
  545.            
  546.             if(_playerNewArmour > 100.0)
  547.             {
  548.                 CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_ARMOUR_CNOR);
  549.                
  550.                 SyncPlayer_AC(PlayerID, SYNC_TYPE_ARMOUR, SYNC_DELAY);
  551.                 SetPlayerArmour_AC(PlayerID, 100.0);
  552.                
  553.                 return 1;
  554.             }
  555.             // - Armour stuff
  556.            
  557.             // - Teleport/Airbrake stuff
  558.             if(!_AC_syncTime[PlayerID][SYNC_TYPE_POS] && GetPlayerState(PlayerID) != PLAYER_STATE_SPECTATING && GetPlayerState(PlayerID) != PLAYER_STATE_PASSENGER && GetPlayerState(PlayerID) != PLAYER_STATE_WASTED)
  559.             {
  560.                 _playerSurfVar = (GetPlayerSurfingVehicleID(PlayerID) != INVALID_VEHICLE_ID || GetPlayerSurfingObjectID(PlayerID) != INVALID_OBJECT_ID);
  561.                 if(!_AC_playerData[PlayerID][_playerNoUpdate])
  562.                 {
  563.                     if((_playerNewPos[2] < 900.0) == (_AC_playerData[PlayerID][_playerPos][2] < 900.0))
  564.                     {
  565.                         if(!_playerSurfVar && !IsPlayerInRangeOfPoint(PlayerID, 100.0, _AC_playerData[PlayerID][_playerPos][0], _AC_playerData[PlayerID][_playerPos][1], _AC_playerData[PlayerID][_playerPos][2]))
  566.                         {
  567.                             if(floatabs(_AC_playerData[PlayerID][_playerPos][2] - _playerNewPos[2]) <= 1.0)
  568.                             {
  569.                                 if((floatabs(_AC_playerData[PlayerID][_playerPos][1] - _playerNewPos[1]) >= 45.0 || floatabs(_AC_playerData[PlayerID][_playerPos][0] - _playerNewPos[0]) >= 45.0))
  570.                                 {
  571.                                     CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_AIRBRAKE);
  572.                                    
  573.                                     SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, SYNC_DELAY);
  574.                                     _AC_playerData[PlayerID][_playerPos][0] = _playerNewPos[0];
  575.                                     _AC_playerData[PlayerID][_playerPos][1] = _playerNewPos[1];
  576.                                     _AC_playerData[PlayerID][_playerPos][2] = _playerNewPos[2];
  577.                                 }
  578.                             }
  579.                             else
  580.                             {
  581.                                 if(GetPVarInt(PlayerID, "playerInTransfender") == 0)
  582.                                 {
  583.                                     CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_TELEPORT);
  584.                                    
  585.                                     SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, SYNC_DELAY);
  586.                                     _AC_playerData[PlayerID][_playerPos][0] = _playerNewPos[0];
  587.                                     _AC_playerData[PlayerID][_playerPos][1] = _playerNewPos[1];
  588.                                     _AC_playerData[PlayerID][_playerPos][2] = _playerNewPos[2];
  589.                                    
  590.                                     return 1;
  591.                                 }
  592.                             }
  593.                         }
  594.                     }
  595.                 }
  596.             }
  597.             // - Teleport stuff
  598.            
  599.             // - Flyhack stuff
  600.             _generalVar = GetPlayerAnimationIndex(PlayerID);
  601.             if(_playerNewPos[2] > 12.0 && !IsPlayerOutOfWater(PlayerID) && (_generalVar == 1543 || _generalVar == 1538 || _generalVar == 1539))
  602.             {
  603.                 CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_FLYHACK);
  604.             }
  605.             // - Flyhack stuff
  606.            
  607.             // - VHH stuff
  608.             if(!_AC_syncTime[PlayerID][SYNC_TYPE_VEH] && IsPlayerInAnyVehicle(PlayerID) && GetVehicleModel(_AC_playerData[PlayerID][_playerCarID]) != 481) // Existem bugs relacionados à bmx
  609.             {
  610.                 if(!_AC_playerData[PlayerID][_playerNoUpdate])
  611.                 {
  612.                     static
  613.                         Float:vHealth;
  614.                    
  615.                     GetVehicleHealth(_AC_playerData[PlayerID][_playerCarID], vHealth);
  616.                    
  617.                     if(vHealth > _AC_playerData[PlayerID][_playerCarHealth])
  618.                     {
  619.                         if(!IsPlayerInPNSorTR(PlayerID))
  620.                         {
  621.                             CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_CARHH);
  622.                            
  623.                             SyncPlayer_AC(PlayerID, SYNC_TYPE_VEH, SYNC_DELAY);
  624.                             _AC_playerData[PlayerID][_playerCarHealth] = vHealth;
  625.                         }
  626.                         else
  627.                         {
  628.                             SyncPlayer_AC(PlayerID, SYNC_TYPE_VEH, SYNC_DELAY);
  629.                             _AC_playerData[PlayerID][_playerCarHealth] = vHealth;
  630.                         }
  631.                     }
  632.                 }
  633.             }
  634.             // - VHH stuff
  635.            
  636.             // - Remote jack stuff
  637.             /*_generalVar = GetPlayerVehicleID(PlayerID);
  638.            
  639.             if(!_AC_syncTime[PlayerID][SYNC_TYPE_POS] && (_generalVar != _AC_playerData[PlayerID][_playerLastAntiJackState]) && (_generalVar != 0) && (GetPlayerState(PlayerID) == PLAYER_STATE_DRIVER))
  640.             {
  641.                 if(!_AC_playerData[PlayerID][_playerNoUpdate])
  642.                 {
  643.                     new
  644.                         vehicleModel,
  645.                         Float:vehiclePos[3],
  646.                         Float:jackDistance = 0.0,
  647.                         Float:maxDistance = 10.0;
  648.                    
  649.                     GetVehiclePos(_AC_playerData[PlayerID][_playerCarID], vehiclePos[0], vehiclePos[1], vehiclePos[2]);
  650.                    
  651.                     jackDistance = GetDistanceFromPointToPoint(vehiclePos[0], vehiclePos[1], vehiclePos[2], _playerNewPos[0], _playerNewPos[1], _playerNewPos[2]);
  652.                     vehicleModel = GetVehicleModel(_AC_playerData[PlayerID][_playerCarID]);
  653.                    
  654.                     if((vehicleModel == 577) || (vehicleModel == 592)) // ignore AT-400 and andromada (false positives spam)
  655.                         maxDistance = 25.0;
  656.                    
  657.                     #if DEBUG_FUNCTIONS
  658.                         printf("1 -> '%0.2f', '%0.2f', '%0.2f' - '%0.2f', '%0.2f', '%0.2f' = '%0.2f'", vehiclePos[0], vehiclePos[1], vehiclePos[2], _playerNewPos[0], _playerNewPos[1], _playerNewPos[2], jackDistance);
  659.                     #endif
  660.                    
  661.                     if(jackDistance > maxDistance)
  662.                     {
  663.                         CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_CARRJACK);
  664.                        
  665.                         SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, SYNC_DELAY);
  666.                         _AC_playerData[PlayerID][_playerPos][0] = _playerNewPos[0];
  667.                         _AC_playerData[PlayerID][_playerPos][1] = _playerNewPos[1];
  668.                         _AC_playerData[PlayerID][_playerPos][2] = _playerNewPos[2];
  669.                        
  670.                         #if DEBUG_FUNCTIONS
  671.                             printf("2 -> '%0.2f', '%0.2f', '%0.2f' - '%0.2f', '%0.2f', '%0.2f' = '%0.2f'", vehiclePos[0], vehiclePos[1], vehiclePos[2], _playerNewPos[0], _playerNewPos[1], _playerNewPos[2], jackDistance);
  672.                         #endif
  673.                     }
  674.                    
  675.                     //_AC_playerData[PlayerID][_playerLastAntiJackState] = _generalVar;
  676.                 }
  677.             }*/
  678.             // - Remote jack stuff
  679.            
  680.             _AC_playerData[PlayerID][_playerPos][0] = _playerNewPos[0];
  681.             _AC_playerData[PlayerID][_playerPos][1] = _playerNewPos[1];
  682.             _AC_playerData[PlayerID][_playerPos][2] = _playerNewPos[2];
  683.         }
  684.     }
  685.     return 1;
  686. }
  687.  
  688. //===================================================================================================================
  689.  
  690. AC_Func::SetPlayerHealth_AC(PlayerID, Float:HealthAmount)
  691. {
  692.     if(IsPlayerConnected(PlayerID))
  693.     {
  694.         if(SetPlayerHealth(PlayerID, HealthAmount))
  695.         {
  696.             SyncPlayer_AC(PlayerID, SYNC_TYPE_HEALTH, SYNC_DELAY);
  697.            
  698.             SetPVarFloat(PlayerID, "secPlayerHealth", HealthAmount);
  699.             _AC_playerData[PlayerID][_playerHealth] = HealthAmount;
  700.            
  701.             #if DEBUG_FUNCTIONS
  702.                 printf("[tgAnticheat:DEBUG] SetPlayerHealth_AC -> Definindo vida do jogador '%d' para '%0.2f' (Server: %0.2f)", PlayerID, HealthAmount, _AC_playerData[PlayerID][_playerHealth]);
  703.             #endif
  704.         }
  705.     }
  706.     return false;
  707. }
  708.  
  709. AC_Func::SetPlayerArmour_AC(PlayerID, Float:ArmourAmount)
  710. {
  711.     if(IsPlayerConnected(PlayerID))
  712.     {
  713.         if(SetPlayerArmour(PlayerID, ArmourAmount))
  714.         {
  715.             SyncPlayer_AC(PlayerID, SYNC_TYPE_ARMOUR, SYNC_DELAY);
  716.            
  717.             SetPVarFloat(PlayerID, "secPlayerArmour", ArmourAmount);
  718.             _AC_playerData[PlayerID][_playerArmour] = ArmourAmount;
  719.            
  720.             #if DEBUG_FUNCTIONS
  721.                 printf("[tgAnticheat:DEBUG] SetPlayerArmour_AC -> Definindo colete do jogador '%d' para '%0.2f' (Server: %0.2f)", PlayerID, ArmourAmount, _AC_playerData[PlayerID][_playerArmour]);
  722.             #endif
  723.         }
  724.     }
  725.     return false;
  726. }
  727.  
  728. AC_Func::SpawnPlayer_AC(PlayerID)
  729. {
  730.     SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, 10);
  731.    
  732.     _AC_playerData[PlayerID][_playerNoUpdate] = true;
  733.     SetPVarInt(PlayerID, "SpawnPlayer_AC_Force_Sync", 1);
  734.    
  735.     if(GetPlayerState(PlayerID) == PLAYER_STATE_SPECTATING)
  736.     {
  737.         TogglePlayerSpectating(PlayerID, false);
  738.         return 1;
  739.     }
  740.    
  741.     if(IsPlayerInAnyVehicle(PlayerID))
  742.     {
  743.         new Float:myPos[3];
  744.         GetPlayerPos(PlayerID, myPos[0], myPos[1], myPos[2]);
  745.         SetPlayerPos(PlayerID, myPos[0], myPos[1], myPos[2]);
  746.     }
  747.    
  748.     return SpawnPlayer(PlayerID);
  749. }
  750.  
  751. AC_Func::SetPlayerPos_AC(PlayerID, Float:X, Float:Y, Float:Z)
  752. {
  753.     SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, 10);
  754.    
  755.     _AC_playerData[PlayerID][_playerPos][0]         =       X;
  756.     _AC_playerData[PlayerID][_playerPos][1]         =       Y;
  757.     _AC_playerData[PlayerID][_playerPos][2]         =       Z;
  758.    
  759.     _AC_playerData[PlayerID][_playerPosSet][0]      =       X;
  760.     _AC_playerData[PlayerID][_playerPosSet][1]      =       Y;
  761.     _AC_playerData[PlayerID][_playerPosSet][2]      =       Z;
  762.    
  763.     #if DEBUG_FUNCTIONS
  764.         printf("[tgAnticheat:DEBUG] SetPlayerPos_AC -> Definindo posição do jogador '%d' para X '%0.2f' Y '%0.2f' Z '%0.2f'", PlayerID, X, Y, Z);
  765.     #endif
  766.    
  767.     return SetPlayerPos(PlayerID, X, Y, Z);
  768. }
  769.  
  770. AC_Func::PutPlayerInVehicle_AC(PlayerID, VehicleID, SeatID)
  771. {
  772.     if(VehicleID != INVALID_VEHICLE_ID)
  773.     {
  774.         SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, 10);
  775.        
  776.         new
  777.             Float:posVeh[3];
  778.        
  779.         GetVehiclePos(VehicleID, posVeh[0], posVeh[1], posVeh[2]);
  780.        
  781.         _AC_playerData[PlayerID][_playerPos][0]         =       posVeh[0];
  782.         _AC_playerData[PlayerID][_playerPos][1]         =       posVeh[1];
  783.         _AC_playerData[PlayerID][_playerPos][2]         =       posVeh[2];
  784.        
  785.         _AC_playerData[PlayerID][_playerPosSet][0]      =       posVeh[0];
  786.         _AC_playerData[PlayerID][_playerPosSet][1]      =       posVeh[1];
  787.         _AC_playerData[PlayerID][_playerPosSet][2]      =       posVeh[2];
  788.        
  789.         PutPlayerInVehicle(PlayerID, VehicleID, SeatID);
  790.        
  791.         #if DEBUG_FUNCTIONS
  792.             printf("[tgAnticheat:DEBUG] PutPlayerInVehicle_AC -> Colocando jogador '%d' no veículo '%d'", PlayerID, VehicleID);
  793.         #endif
  794.     }
  795.     return 1;
  796. }
  797.  
  798. AC_Func::SetVehiclePos_AC(VehicleID, Float:X, Float:Y, Float:Z)
  799. {
  800.     if(VehicleID != INVALID_VEHICLE_ID)
  801.     {
  802.         new getSeatID[MAX_PLAYERS];
  803.    
  804.         foreach(new i : Player)
  805.         {
  806.             if(GetPlayerVehicleID(i) == VehicleID)
  807.             {
  808.                 getSeatID[i] = GetPlayerVehicleSeat(i);
  809.             }
  810.         }
  811.        
  812.         SetVehiclePos(VehicleID, X, Y, Z);
  813.        
  814.         foreach(new i : Player)
  815.         {
  816.             if(GetPlayerVehicleID(i) == VehicleID)
  817.             {
  818.                 PutPlayerInVehicle_AC(i, VehicleID, getSeatID[i]);
  819.             }
  820.         }
  821.        
  822.         #if DEBUG_FUNCTIONS
  823.             printf("[tgAnticheat:DEBUG] SetVehiclePos_AC -> Definindo posição do veículo '%d' para X '%0.2f' Y '%0.2f' Z '%0.2f'", VehicleID, X, Y, Z);
  824.         #endif
  825.     }
  826.     return 1;
  827. }
  828.  
  829. AC_Func::SetVehicleHealth_AC(VehicleID, Float:HealthAmount)
  830. {
  831.     foreach(new i : Player)
  832.     {
  833.         if(GetPlayerVehicleID(i) == VehicleID)
  834.         {
  835.             SyncPlayer_AC(i, SYNC_TYPE_VEH, SYNC_DELAY);
  836.             _AC_playerData[i][_playerCarHealth] = HealthAmount;
  837.         }
  838.     }
  839.    
  840.     #if DEBUG_FUNCTIONS
  841.         printf("[tgAnticheat:DEBUG] SetVehiclePos_AC -> Definindo vida do veículo '%d' para '%0.2f'", VehicleID, HealthAmount);
  842.     #endif
  843.    
  844.     return SetVehicleHealth(VehicleID, HealthAmount);
  845. }
  846.  
  847. AC_Func::RepairVehicle_AC(VehicleID)
  848. {
  849.     foreach(new i : Player)
  850.     {
  851.         if(GetPlayerVehicleID(i) == VehicleID)
  852.         {
  853.             SyncPlayer_AC(i, SYNC_TYPE_VEH, SYNC_DELAY);
  854.             _AC_playerData[i][_playerCarHealth] = 1000.0;
  855.         }
  856.     }
  857.    
  858.     #if DEBUG_FUNCTIONS
  859.         printf("[tgAnticheat:DEBUG] RepairVehicle_AC -> Reparando veículo '%d'", VehicleID);
  860.     #endif
  861.    
  862.     return RepairVehicle(VehicleID);
  863. }
  864.  
  865. //===================================================================================================================
  866.  
  867. AC_IntFunc::SyncPlayer_AC(PlayerID, SyncType, TimeSet)
  868. {
  869.     _AC_syncTime[PlayerID][SyncType]            =   TimeSet;
  870.     _AC_syncLastTime[PlayerID][SyncType]        =   GetTickCount();
  871.    
  872.     #if DEBUG_FUNCTIONS
  873.         printf("[tgAnticheat:DEBUG] SyncPlayer_AC -> Sincronizando informações do jogador '%d' do tipo '%d'.", PlayerID, SyncType);
  874.     #endif
  875.     return 1;
  876. }
  877.  
  878.  
  879. AC_IntFunc::GetDistanceFromPointToPoint(Float:X, Float:Y, Float:Z, Float:tX, Float:tY, Float:tZ)
  880. {
  881.     return floatround(floatsqroot(((X - tX) * (X - tX)) + ((Y - tY) * (Y - tY)) + ((Z - tZ) * (Z - tZ))));
  882. }
  883.  
  884. AC_IntFunc::IsPlayerOutOfWater(PlayerID)
  885. {
  886.     new
  887.         Float:posPlayer[3];
  888.    
  889.     GetPlayerPos(PlayerID, posPlayer[0], posPlayer[1], posPlayer[2]);
  890.    
  891.     if((posPlayer[0] >= -1408.0629 && posPlayer[2] >= 2021.0587 && posPlayer[0] <= -460.9319 && posPlayer[2] <= 2861.4893) ||
  892.         (posPlayer[0] >= 1269.5886 && posPlayer[2] >= -810.4507 && posPlayer[0] <= 1288.8916 && posPlayer[2] <= -800.5959) ||
  893.         (posPlayer[0] >= 1086.6010 && posPlayer[2] >= -683.6998 && posPlayer[0] <= 1103.0225 && posPlayer[2] <= -662.1832) ||
  894.         (posPlayer[0] >= 169.6879 && posPlayer[2] >= -1392.6630 && posPlayer[0] <= 281.5444 && posPlayer[2] <= -1168.9749) ||
  895.         (posPlayer[0] >= -828.3018 && posPlayer[2] >= -2107.1487 && posPlayer[0] <= -443.5032 && posPlayer[2] <= -1855.6273) ||
  896.         (posPlayer[0] >= 1198.9982 && posPlayer[2] >= -2407.0581 && posPlayer[0] <= 1275.7397 && posPlayer[2] <= -2341.6262) ||
  897.         (posPlayer[0] >= 2293.1467 && posPlayer[2] >= -1432.5869 && posPlayer[0] <= 2331.7388 && posPlayer[2] <= -1397.6476) ||
  898.         (posPlayer[0] >= 1915.3196 && posPlayer[2] >= -1236.2382 && posPlayer[0] <= 2016.6565 && posPlayer[2] <= -1167.9290) ||
  899.         (posPlayer[0] >= -2747.1692 && posPlayer[2] >= -510.1152 && posPlayer[0] <= -2663.2468 && posPlayer[2] <= -411.4905) ||
  900.         (posPlayer[0] >= 1838.8041 && posPlayer[2] >= 1463.2024 && posPlayer[0] <= 2035.4167 && posPlayer[2] <= 1703.0480) ||
  901.         (posPlayer[0] >= 2049.6646 && posPlayer[2] >= 1843.3029 && posPlayer[0] <= 2119.9021 && posPlayer[2] <= 1983.5464) ||
  902.         (posPlayer[0] >= 2094.9255 && posPlayer[2] >= 1085.2852 && posPlayer[0] <= 2179.1790 && posPlayer[2] <= 1183.0610) ||
  903.         (posPlayer[0] >= 2545.3718 && posPlayer[2] >= 2347.7112 && posPlayer[0] <= 2593.6794 && posPlayer[2] <= 2403.8040))
  904.     {
  905.         return 1;
  906.     }
  907.     return 0;
  908. }
  909.  
  910. AC_IntFunc::IsPlayerInPNSorTR(PlayerID)
  911. {
  912.     for(new i = 0; i < sizeof(payNSprayTransfender); i++)
  913.     {
  914.         if(IsPlayerInRangeOfPoint(PlayerID, 15.0, payNSprayTransfender[i][0], payNSprayTransfender[i][1], payNSprayTransfender[i][2]))
  915.         {
  916.             return 1;
  917.         }
  918.     }
  919.     return 0;
  920. }
  921.  
  922. AC_IntFunc::IsPlayerInFrontOfVMachine(PlayerID)
  923. {
  924.     for(new i = 0; i < sizeof(vendingMachines); i++)
  925.     {
  926.         if(IsPlayerInRangeOfPoint(PlayerID, 5.0, vendingMachines[i][0], vendingMachines[i][1], vendingMachines[i][2]))
  927.         {
  928.             return 1;
  929.         }
  930.     }
  931.     return 0;
  932. }
Advertisement
Add Comment
Please, Sign In to add comment