Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- * tgTranslations - AntiCheat Module
- * Copyright (c) 2014 - TheGoldenHelmet ([SAK]Apple)
- *
- * Find me: {
- * Skype: fellipe.orsini,
- * IRC Server: irc.tl:6667,
- * IRC Channels: #partyecho, #partyserver, #sakclan, #sa-mp, #sa-mp.scripting, #samp-ptbr
- * };
- *
- * Script Info: {
- * Build: 0001,
- * Last update on: 29/01/2014 14:06:20 (GMT -5),
- * %SESSION_INFO%
- * };
- *
- * Additional: {
- * Author desc: As informações que são enviadas para o servidor podem não ser exatas, então evite banir instantaneamente :)
- * Special thanks: JernejL, Y_Less, cessil, Kye (SA-MP), Double-O-Seven, Emmet_, Lorenc_
- * };
- *
- */
- #include <a_samp>
- #include <YSI\y_iterate>
- #include <YSI\y_timers>
- #include <YSI\y_hooks>
- #include <YSI\y_bit>
- #include <YSI\y_playerset>
- //====================================================================================================================
- #if !defined OnGameModeInit // Verifica se o módulo <a_samp> existe
- #define tg_ac_allowStart_R0 0
- #else
- #define tg_ac_allowStart_R0 1
- #endif
- #if !defined _Y_ITER_ARRAY // Verifica se o módulo <YSI\y_iterate> existe
- #define tg_ac_allowStart_R1 0
- #else
- #define tg_ac_allowStart_R1 1
- #endif
- #if defined _inc_y_hooks // Verifica se o módulo <YSI\y_hooks> existe
- #define tg_ac_allowStart_R2 0
- #else
- #define tg_ac_allowStart_R2 1
- #endif
- #if !defined BitArray // Verifica se o módulo <YSI\y_bit> existe
- #define tg_ac_allowStart_R3 0
- #else
- #define tg_ac_allowStart_R3 1
- #endif
- #if !defined PS@YSII_Ag // Verifica se o módulo <YSI\y_playerset> existe
- #define tg_ac_allowStart_R4 0
- #else
- #define tg_ac_allowStart_R4 1
- #endif
- //====================================================================================================================
- // - Callback do módulo
- forward OnPlayerCheat(playerid, cheattype);
- // - Macros do módulo
- #define AC_Func::%0(%1) forward %0(%1); public %0(%1)
- #define AC_IntFunc::%0(%1) forward %0(%1); public %0(%1)
- #define AC_NewLine printf("\n");
- // - Inicia váriaveis do módulo
- #define DEBUG_FUNCTIONS (0) // Coloque 1 caso queria visualizar o debug das funções no prompt to servidor.
- #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).
- // - Cheats que são detectados
- #define AC_CHEAT_HEALTH (0)
- #define AC_CHEAT_HEALTH_CNOR (1)
- #define AC_CHEAT_ARMOUR (2)
- #define AC_CHEAT_ARMOUR_CNOR (3)
- #define AC_CHEAT_TELEPORT (4)
- #define AC_CHEAT_AIRBRAKE (5)
- #define AC_CHEAT_FAKEKILL (6)
- #define AC_CHEAT_FLYHACK (7)
- #define AC_CHEAT_CARHH (8)
- #define AC_CHEAT_CARWARP (9)
- #define AC_CHEAT_CARRJACK (10) // Não disponível ainda
- // - Váriaveis de sincronização
- #define TOTAL_SYNC_TYPE (4)
- #define SYNC_TYPE_HEALTH (0)
- #define SYNC_TYPE_ARMOUR (1)
- #define SYNC_TYPE_POS (2)
- #define SYNC_TYPE_VEH (3)
- new
- _AC_syncTime[MAX_PLAYERS][TOTAL_SYNC_TYPE],
- _AC_syncLastTime[MAX_PLAYERS][TOTAL_SYNC_TYPE],
- Iterator:SYNC_TYPE<TOTAL_SYNC_TYPE>;
- // - Váriaveis do jogador
- enum _tgAc_playerInfo
- {
- _playerLastUpdate,
- bool:_playerNoUpdate,
- Float:_playerHealth,
- Float:_playerArmour,
- Float:_playerPos[3],
- Float:_playerPosSet[3],
- _playerFakeKillCount,
- _playerLastDeath,
- _playerCarID,
- _playerLastChangeCarID,
- Float:_playerCarHealth,
- _playerLastAntiJackState
- };
- new
- _AC_playerData[MAX_PLAYERS][_tgAc_playerInfo];
- // - Pay 'n Spray, Transfender and Vending machine pos
- new const Float:payNSprayTransfender[][] = {
- {1025.05, -1024.23, 32.1}, // LS Temple
- {487.68, -1740.87, 11.13}, // LS Santa Maria
- {-1420.73, 2583.37, 55.56}, // El Quebrados
- {-1904.39, 284.97, 40.75}, // Wang Cars
- {-2425.91, 1022.33, 50.10}, // Juniper Hill
- {1975.60, 2162.16, 10.77}, // LV Redsands
- {2065.38, -1831.51, 13.25}, // Idlewood
- {-99.55, 1118.36, 19.44}, // Fort Carson
- {721.07, -455.94, 16.04}, // Dillimore
- {2393.74, 1493.01, 10.52}, // LV Unused (Pyramid)
- {616.7820, -74.8151, 997.6350}, // Transfender 1
- {615.2851, -124.2390, 997.6350}, // Transfender 2
- {617.5380, -1.9900, 1000.6829} // Transfender 3
- };
- new const Float:vendingMachines[][] = {
- {-14.70, 1175.36, 18.95},
- {201.02, -107.62, 0.90},
- {662.43, -552.16, 15.71},
- {-76.03, 1227.99, 19.13},
- {1154.73, -1460.89, 15.16},
- {1277.84, 372.52, 18.95},
- {1398.84, 2222.61, 10.42},
- {1520.15, 1055.27, 10.00},
- {1634.11, -2237.53, 12.89},
- {1659.46, 1722.86, 10.22},
- {1729.79, -1943.05, 12.95},
- {1789.21, -1369.27, 15.16},
- {1928.73, -1772.45, 12.95},
- {2060.12, -1897.64, 12.93},
- {2085.77, 2071.36, 10.45},
- {2139.52, -1161.48, 23.36},
- {2153.23, -1016.15, 62.23},
- {2271.73, -76.46, 25.96},
- {2319.99, 2532.85, 10.22},
- {2325.98, -1645.13, 14.21},
- {2352.18, -1357.16, 23.77},
- {2480.86, -1959.27, 12.96},
- {2503.14, 1243.70, 10.22},
- {-253.74, 2597.95, 62.24},
- {-253.74, 2599.76, 62.24},
- {2647.70, 1129.66, 10.22},
- {2845.73, 1295.05, 10.79},
- {-862.83, 1536.61, 21.98},
- {-1350.12, 492.29, 10.59},
- {-1350.12, 493.86, 10.59},
- {-1455.12, 2591.66, 55.23},
- {-1980.79, 142.66, 27.07},
- {-2005.65, -490.05, 34.73},
- {-2011.14, -398.34, 34.73},
- {-2034.46, -490.05, 34.73},
- {-2039.85, -398.34, 34.73},
- {-2063.27, -490.05, 34.73},
- {-2068.56, -398.34, 34.73},
- {-2092.09, -490.05, 34.73},
- {-2097.27, -398.34, 34.73},
- {-2118.62, -422.41, 34.73},
- {-2118.97, -423.65, 34.73},
- {-2229.19, 286.41, 34.70},
- {-2420.18, 985.95, 44.30},
- {-2420.22, 984.58, 44.30},
- {2155.84, 1607.88, 1000.06},
- {2155.91, 1606.77, 1000.05},
- {2202.45, 1617.01, 1000.06},
- {2209.24, 1621.21, 1000.06},
- {2209.91, 1607.20, 1000.05},
- {2222.20, 1606.77, 1000.05},
- {2222.37, 1602.64, 1000.06},
- {2225.20, -1153.42, 1025.91},
- {-15.10, -140.23, 1003.63},
- {-16.12, -91.64, 1003.63},
- {-16.53, -140.30, 1003.63},
- {-17.55, -91.71, 1003.63},
- {-19.04, -57.84, 1003.63},
- {-32.45, -186.70, 1003.63},
- {-33.88, -186.77, 1003.63},
- {330.68, 178.50, 1020.07},
- {331.92, 178.50, 1020.07},
- {-35.73, -140.23, 1003.63},
- {350.91, 206.09, 1008.48},
- {-36.15, -57.88, 1003.63},
- {361.56, 158.62, 1008.48},
- {371.59, 178.45, 1020.07},
- {373.83, -178.14, 1000.73},
- {374.89, 188.98, 1008.48},
- {379.04, -178.88, 1000.73},
- {495.97, -24.32, 1000.73},
- {500.56, -1.37, 1000.73},
- {501.83, -1.43, 1000.73},
- {2576.70, -1284.43, 1061.09}
- };
- //====================================================================================================================
- hook OnGameModeInit()
- {
- #if tg_ac_allowStart_R0 || tg_ac_allowStart_R1 || tg_ac_allowStart_R2 || tg_ac_allowStart_R3 || tg_ac_allowStart_R4
- printf("[tgAnticheat] SUCCESS: Módulo do AntiCheat iniciado com sucesso.");
- #else
- printf("[tgAnticheat] ERROR: Não foi possível iniciar o módulo do AntiCheat.");
- #endif
- for(new i = 0; i < TOTAL_SYNC_TYPE; i++)
- Iter_Add(SYNC_TYPE, i);
- return 1;
- }
- hook OnPlayerConnect(PlayerID)
- {
- _AC_playerData[PlayerID][_playerNoUpdate] = true;
- // - Sync
- foreach(new i : SYNC_TYPE)
- SyncPlayer_AC(PlayerID, i, SYNC_DELAY);
- // - Sync
- _AC_playerData[PlayerID][_playerPos][0] = 0.0;
- _AC_playerData[PlayerID][_playerPos][1] = 0.0;
- _AC_playerData[PlayerID][_playerPos][2] = 0.0;
- _AC_playerData[PlayerID][_playerPosSet][0] = 0.0;
- _AC_playerData[PlayerID][_playerPosSet][1] = 0.0;
- _AC_playerData[PlayerID][_playerPosSet][2] = 0.0;
- _AC_playerData[PlayerID][_playerFakeKillCount] = 0;
- _AC_playerData[PlayerID][_playerLastDeath] = -1;
- _AC_playerData[PlayerID][_playerCarID] = INVALID_VEHICLE_ID;
- _AC_playerData[PlayerID][_playerLastChangeCarID] = -1;
- _AC_playerData[PlayerID][_playerCarHealth] = 0.0;
- _AC_playerData[PlayerID][_playerLastAntiJackState] = 0;
- // - Fix para qualquer erro que possa acontecer
- SetPlayerHealth_AC(PlayerID, 100.0);
- SetPlayerArmour_AC(PlayerID, 0.0);
- return 1;
- }
- hook OnPlayerSpawn(PlayerID)
- {
- _AC_playerData[PlayerID][_playerNoUpdate] = false;
- _AC_playerData[PlayerID][_playerLastAntiJackState] = 0;
- if(GetPVarInt(PlayerID, "SpawnPlayer_AC_Force_Sync") == 1)
- {
- new
- Float:forceSyntPos[3];
- GetPlayerPos(PlayerID, forceSyntPos[0], forceSyntPos[1], forceSyntPos[2]);
- SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, SYNC_DELAY);
- _AC_playerData[PlayerID][_playerPos][0] = forceSyntPos[0];
- _AC_playerData[PlayerID][_playerPos][1] = forceSyntPos[1];
- _AC_playerData[PlayerID][_playerPos][2] = forceSyntPos[2];
- _AC_playerData[PlayerID][_playerPosSet][0] = forceSyntPos[0];
- _AC_playerData[PlayerID][_playerPosSet][1] = forceSyntPos[1];
- _AC_playerData[PlayerID][_playerPosSet][2] = forceSyntPos[2];
- SetPVarInt(PlayerID, "SpawnPlayer_AC_Force_Sync", 0);
- #if DEBUG_FUNCTIONS
- 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]);
- #endif
- }
- return 1;
- }
- hook OnPlayerDeath(PlayerID, KillerID, Reason)
- {
- _AC_playerData[PlayerID][_playerNoUpdate] = true;
- // - Fakekill stuff
- new timeNow = gettime();
- switch((timeNow - _AC_playerData[PlayerID][_playerLastDeath]))
- {
- case 0 .. 3:
- {
- _AC_playerData[PlayerID][_playerFakeKillCount]++;
- if(_AC_playerData[PlayerID][_playerFakeKillCount] >= 3)
- {
- _AC_playerData[PlayerID][_playerFakeKillCount] = 0;
- CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_FAKEKILL);
- }
- }
- default: _AC_playerData[PlayerID][_playerFakeKillCount] = 0;
- }
- _AC_playerData[PlayerID][_playerLastDeath] = timeNow;
- // - Fakekill stuff
- foreach(new i : SYNC_TYPE)
- SyncPlayer_AC(PlayerID, i, SYNC_DELAY);
- SetPlayerHealth_AC(PlayerID, 0.0);
- SetPlayerArmour_AC(PlayerID, 0.0);
- return 1;
- }
- hook OnPlayerStateChange(PlayerID, NewState, OldState)
- {
- if(NewState == PLAYER_STATE_DRIVER || NewState == PLAYER_STATE_PASSENGER)
- {
- if(GetPlayerVehicleID(PlayerID) != _AC_playerData[PlayerID][_playerCarID])
- {
- if(_AC_playerData[PlayerID][_playerLastChangeCarID] > gettime())
- {
- CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_CARWARP);
- return 1;
- }
- _AC_playerData[PlayerID][_playerLastChangeCarID] = gettime();
- _AC_playerData[PlayerID][_playerCarID] = GetPlayerVehicleID(PlayerID);
- SyncPlayer_AC(PlayerID, SYNC_TYPE_VEH, SYNC_DELAY);
- GetVehicleHealth(_AC_playerData[PlayerID][_playerCarID], _AC_playerData[PlayerID][_playerCarHealth]);
- if(_AC_playerData[PlayerID][_playerCarHealth] > 1000.0)
- SetVehicleHealth_AC(_AC_playerData[PlayerID][_playerCarID], 1000.0);
- }
- }
- if(OldState == PLAYER_STATE_DRIVER || OldState == PLAYER_STATE_PASSENGER)
- {
- _AC_playerData[PlayerID][_playerCarID] = INVALID_VEHICLE_ID;
- }
- return 1;
- }
- hook OnEnterExitModShop(PlayerID, EnterExit, InteriorID)
- {
- if(EnterExit)
- {
- SetPVarInt(PlayerID, "playerInTransfender", 1);
- }
- else
- {
- SetPVarInt(PlayerID, "playerInTransfender", 0);
- }
- return 1;
- }
- hook OnPlayerUpdate(PlayerID)
- {
- _AC_playerData[PlayerID][_playerLastUpdate] = GetTickCount();
- if(!_AC_playerData[PlayerID][_playerNoUpdate])
- {
- // - Sync
- foreach(new i : SYNC_TYPE)
- {
- if(_AC_syncTime[PlayerID][i])
- {
- if(_AC_playerData[PlayerID][_playerLastUpdate] - _AC_syncLastTime[PlayerID][i] > 1000)
- {
- _AC_syncTime[PlayerID][i]--;
- _AC_syncLastTime[PlayerID][i] = _AC_playerData[PlayerID][_playerLastUpdate];
- #if DEBUG_FUNCTIONS
- printf("[tgAnticheat:DEBUG] OnPlayerUpdate -> Sincronizando informações do jogador '%d' do tipo '%d' para '%d'.", PlayerID, i, _AC_syncTime[PlayerID][i]);
- #endif
- }
- }
- }
- // - Sync
- // - Pos fixer
- static
- Float:_playerIntPos[3];
- if(GetPlayerPos(PlayerID, _playerIntPos[0], _playerIntPos[1], _playerIntPos[2]))
- {
- 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)
- {
- SetPlayerPos_AC(PlayerID, _AC_playerData[PlayerID][_playerPos][0], _AC_playerData[PlayerID][_playerPos][1], _AC_playerData[PlayerID][_playerPos][2]);
- #if DEBUG_FUNCTIONS
- printf("[tgAnticheat:DEBUG] World Boundries -> Jogador %d fora dos limites do jogo. Reposicionado para sua última posição válida.", PlayerID);
- #endif
- return 1;
- }
- }
- // - Pos fixer
- // - Health / Armour Updates
- static
- Float:pHealth,
- Float:pArmour;
- GetPlayerHealth(PlayerID, pHealth);
- GetPlayerArmour(PlayerID, pArmour);
- if(pHealth < GetPVarFloat(PlayerID, "secPlayerHealth") || _AC_syncTime[PlayerID][SYNC_TYPE_HEALTH] > 0)
- {
- SetPVarFloat(PlayerID, "secPlayerHealth", pHealth);
- _AC_playerData[PlayerID][_playerHealth] = GetPVarFloat(PlayerID, "secPlayerHealth");
- #if DEBUG_FUNCTIONS
- printf("[tgAnticheat:DEBUG] OnPlayerUpdate -> Sincronizando vida do jogador '%d' para '%0.2f'.", PlayerID, _AC_playerData[PlayerID][_playerHealth]);
- #endif
- }
- if(pArmour < GetPVarFloat(PlayerID, "secPlayerArmour") || _AC_syncTime[PlayerID][SYNC_TYPE_ARMOUR] > 0)
- {
- SetPVarFloat(PlayerID, "secPlayerArmour", pArmour);
- _AC_playerData[PlayerID][_playerArmour] = GetPVarFloat(PlayerID, "secPlayerArmour");
- #if DEBUG_FUNCTIONS
- printf("[tgAnticheat:DEBUG] OnPlayerUpdate -> Sincronizando colete do jogador '%d' para '%0.2f'.", PlayerID, _AC_playerData[PlayerID][_playerArmour]);
- #endif
- }
- // - Health / Armour Updates
- // - Vehicle Health Updates
- if(IsPlayerInAnyVehicle(PlayerID))
- {
- static
- Float:vHealth;
- GetVehicleHealth(_AC_playerData[PlayerID][_playerCarID], vHealth);
- if(vHealth < _AC_playerData[PlayerID][_playerCarHealth])
- {
- _AC_playerData[PlayerID][_playerCarHealth] = vHealth;
- #if DEBUG_FUNCTIONS
- printf("[tgAnticheat:DEBUG] OnPlayerUpdate -> Sincronizando vida do veículo do jogador '%d' para '%0.2f'.", PlayerID, _AC_playerData[PlayerID][_playerCarHealth]);
- #endif
- }
- }
- // - Vehicle Health Updates
- }
- return 1;
- }
- //===================================================================================================================
- task AC_Update[990]()
- {
- new
- Float:_playerNewHealth,
- Float:_playerNewArmour,
- Float:_playerNewPos[3],
- _playerSurfVar,
- _generalVar;
- foreach(new PlayerID : Player)
- {
- if(GetPlayerPos(PlayerID, _playerNewPos[0], _playerNewPos[1], _playerNewPos[2]))
- {
- GetPlayerHealth(PlayerID, _playerNewHealth);
- GetPlayerArmour(PlayerID, _playerNewArmour);
- // - Health stuff
- if(!_AC_syncTime[PlayerID][SYNC_TYPE_HEALTH] && GetPlayerState(PlayerID) != PLAYER_STATE_SPECTATING && GetPlayerState(PlayerID) != PLAYER_STATE_WASTED)
- {
- if(!_AC_playerData[PlayerID][_playerNoUpdate])
- {
- if(_playerNewHealth > _AC_playerData[PlayerID][_playerHealth] && _playerNewHealth <= 100.0 || _playerNewHealth < _AC_playerData[PlayerID][_playerHealth])
- {
- if(!IsPlayerInFrontOfVMachine(PlayerID))
- {
- CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_HEALTH);
- SyncPlayer_AC(PlayerID, SYNC_TYPE_HEALTH, SYNC_DELAY);
- _AC_playerData[PlayerID][_playerHealth] = _playerNewHealth;
- return 1;
- }
- else
- {
- SyncPlayer_AC(PlayerID, SYNC_TYPE_HEALTH, SYNC_DELAY);
- _AC_playerData[PlayerID][_playerHealth] = _playerNewHealth;
- }
- }
- }
- }
- if(_playerNewHealth > 100.0)
- {
- CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_HEALTH_CNOR);
- SyncPlayer_AC(PlayerID, SYNC_TYPE_HEALTH, SYNC_DELAY);
- SetPlayerHealth_AC(PlayerID, 100.0);
- return 1;
- }
- // - Health stuff
- // - Armour stuff
- if(!_AC_syncTime[PlayerID][SYNC_TYPE_ARMOUR] && GetPlayerState(PlayerID) != PLAYER_STATE_SPECTATING && GetPlayerState(PlayerID) != PLAYER_STATE_WASTED)
- {
- if(!_AC_playerData[PlayerID][_playerNoUpdate])
- {
- if(_playerNewArmour > _AC_playerData[PlayerID][_playerArmour] && _playerNewArmour <= 100.0 || _playerNewArmour < _AC_playerData[PlayerID][_playerArmour])
- {
- CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_ARMOUR);
- SyncPlayer_AC(PlayerID, SYNC_TYPE_ARMOUR, SYNC_DELAY);
- _AC_playerData[PlayerID][_playerArmour] = _playerNewArmour;
- return 1;
- }
- }
- }
- if(_playerNewArmour > 100.0)
- {
- CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_ARMOUR_CNOR);
- SyncPlayer_AC(PlayerID, SYNC_TYPE_ARMOUR, SYNC_DELAY);
- SetPlayerArmour_AC(PlayerID, 100.0);
- return 1;
- }
- // - Armour stuff
- // - Teleport/Airbrake stuff
- if(!_AC_syncTime[PlayerID][SYNC_TYPE_POS] && GetPlayerState(PlayerID) != PLAYER_STATE_SPECTATING && GetPlayerState(PlayerID) != PLAYER_STATE_PASSENGER && GetPlayerState(PlayerID) != PLAYER_STATE_WASTED)
- {
- _playerSurfVar = (GetPlayerSurfingVehicleID(PlayerID) != INVALID_VEHICLE_ID || GetPlayerSurfingObjectID(PlayerID) != INVALID_OBJECT_ID);
- if(!_AC_playerData[PlayerID][_playerNoUpdate])
- {
- if((_playerNewPos[2] < 900.0) == (_AC_playerData[PlayerID][_playerPos][2] < 900.0))
- {
- if(!_playerSurfVar && !IsPlayerInRangeOfPoint(PlayerID, 100.0, _AC_playerData[PlayerID][_playerPos][0], _AC_playerData[PlayerID][_playerPos][1], _AC_playerData[PlayerID][_playerPos][2]))
- {
- if(floatabs(_AC_playerData[PlayerID][_playerPos][2] - _playerNewPos[2]) <= 1.0)
- {
- if((floatabs(_AC_playerData[PlayerID][_playerPos][1] - _playerNewPos[1]) >= 45.0 || floatabs(_AC_playerData[PlayerID][_playerPos][0] - _playerNewPos[0]) >= 45.0))
- {
- CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_AIRBRAKE);
- SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, SYNC_DELAY);
- _AC_playerData[PlayerID][_playerPos][0] = _playerNewPos[0];
- _AC_playerData[PlayerID][_playerPos][1] = _playerNewPos[1];
- _AC_playerData[PlayerID][_playerPos][2] = _playerNewPos[2];
- }
- }
- else
- {
- if(GetPVarInt(PlayerID, "playerInTransfender") == 0)
- {
- CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_TELEPORT);
- SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, SYNC_DELAY);
- _AC_playerData[PlayerID][_playerPos][0] = _playerNewPos[0];
- _AC_playerData[PlayerID][_playerPos][1] = _playerNewPos[1];
- _AC_playerData[PlayerID][_playerPos][2] = _playerNewPos[2];
- return 1;
- }
- }
- }
- }
- }
- }
- // - Teleport stuff
- // - Flyhack stuff
- _generalVar = GetPlayerAnimationIndex(PlayerID);
- if(_playerNewPos[2] > 12.0 && !IsPlayerOutOfWater(PlayerID) && (_generalVar == 1543 || _generalVar == 1538 || _generalVar == 1539))
- {
- CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_FLYHACK);
- }
- // - Flyhack stuff
- // - VHH stuff
- if(!_AC_syncTime[PlayerID][SYNC_TYPE_VEH] && IsPlayerInAnyVehicle(PlayerID) && GetVehicleModel(_AC_playerData[PlayerID][_playerCarID]) != 481) // Existem bugs relacionados à bmx
- {
- if(!_AC_playerData[PlayerID][_playerNoUpdate])
- {
- static
- Float:vHealth;
- GetVehicleHealth(_AC_playerData[PlayerID][_playerCarID], vHealth);
- if(vHealth > _AC_playerData[PlayerID][_playerCarHealth])
- {
- if(!IsPlayerInPNSorTR(PlayerID))
- {
- CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_CARHH);
- SyncPlayer_AC(PlayerID, SYNC_TYPE_VEH, SYNC_DELAY);
- _AC_playerData[PlayerID][_playerCarHealth] = vHealth;
- }
- else
- {
- SyncPlayer_AC(PlayerID, SYNC_TYPE_VEH, SYNC_DELAY);
- _AC_playerData[PlayerID][_playerCarHealth] = vHealth;
- }
- }
- }
- }
- // - VHH stuff
- // - Remote jack stuff
- /*_generalVar = GetPlayerVehicleID(PlayerID);
- if(!_AC_syncTime[PlayerID][SYNC_TYPE_POS] && (_generalVar != _AC_playerData[PlayerID][_playerLastAntiJackState]) && (_generalVar != 0) && (GetPlayerState(PlayerID) == PLAYER_STATE_DRIVER))
- {
- if(!_AC_playerData[PlayerID][_playerNoUpdate])
- {
- new
- vehicleModel,
- Float:vehiclePos[3],
- Float:jackDistance = 0.0,
- Float:maxDistance = 10.0;
- GetVehiclePos(_AC_playerData[PlayerID][_playerCarID], vehiclePos[0], vehiclePos[1], vehiclePos[2]);
- jackDistance = GetDistanceFromPointToPoint(vehiclePos[0], vehiclePos[1], vehiclePos[2], _playerNewPos[0], _playerNewPos[1], _playerNewPos[2]);
- vehicleModel = GetVehicleModel(_AC_playerData[PlayerID][_playerCarID]);
- if((vehicleModel == 577) || (vehicleModel == 592)) // ignore AT-400 and andromada (false positives spam)
- maxDistance = 25.0;
- #if DEBUG_FUNCTIONS
- 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);
- #endif
- if(jackDistance > maxDistance)
- {
- CallLocalFunction("OnPlayerCheat", "dd", PlayerID, AC_CHEAT_CARRJACK);
- SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, SYNC_DELAY);
- _AC_playerData[PlayerID][_playerPos][0] = _playerNewPos[0];
- _AC_playerData[PlayerID][_playerPos][1] = _playerNewPos[1];
- _AC_playerData[PlayerID][_playerPos][2] = _playerNewPos[2];
- #if DEBUG_FUNCTIONS
- 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);
- #endif
- }
- //_AC_playerData[PlayerID][_playerLastAntiJackState] = _generalVar;
- }
- }*/
- // - Remote jack stuff
- _AC_playerData[PlayerID][_playerPos][0] = _playerNewPos[0];
- _AC_playerData[PlayerID][_playerPos][1] = _playerNewPos[1];
- _AC_playerData[PlayerID][_playerPos][2] = _playerNewPos[2];
- }
- }
- return 1;
- }
- //===================================================================================================================
- AC_Func::SetPlayerHealth_AC(PlayerID, Float:HealthAmount)
- {
- if(IsPlayerConnected(PlayerID))
- {
- if(SetPlayerHealth(PlayerID, HealthAmount))
- {
- SyncPlayer_AC(PlayerID, SYNC_TYPE_HEALTH, SYNC_DELAY);
- SetPVarFloat(PlayerID, "secPlayerHealth", HealthAmount);
- _AC_playerData[PlayerID][_playerHealth] = HealthAmount;
- #if DEBUG_FUNCTIONS
- printf("[tgAnticheat:DEBUG] SetPlayerHealth_AC -> Definindo vida do jogador '%d' para '%0.2f' (Server: %0.2f)", PlayerID, HealthAmount, _AC_playerData[PlayerID][_playerHealth]);
- #endif
- }
- }
- return false;
- }
- AC_Func::SetPlayerArmour_AC(PlayerID, Float:ArmourAmount)
- {
- if(IsPlayerConnected(PlayerID))
- {
- if(SetPlayerArmour(PlayerID, ArmourAmount))
- {
- SyncPlayer_AC(PlayerID, SYNC_TYPE_ARMOUR, SYNC_DELAY);
- SetPVarFloat(PlayerID, "secPlayerArmour", ArmourAmount);
- _AC_playerData[PlayerID][_playerArmour] = ArmourAmount;
- #if DEBUG_FUNCTIONS
- printf("[tgAnticheat:DEBUG] SetPlayerArmour_AC -> Definindo colete do jogador '%d' para '%0.2f' (Server: %0.2f)", PlayerID, ArmourAmount, _AC_playerData[PlayerID][_playerArmour]);
- #endif
- }
- }
- return false;
- }
- AC_Func::SpawnPlayer_AC(PlayerID)
- {
- SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, 10);
- _AC_playerData[PlayerID][_playerNoUpdate] = true;
- SetPVarInt(PlayerID, "SpawnPlayer_AC_Force_Sync", 1);
- if(GetPlayerState(PlayerID) == PLAYER_STATE_SPECTATING)
- {
- TogglePlayerSpectating(PlayerID, false);
- return 1;
- }
- if(IsPlayerInAnyVehicle(PlayerID))
- {
- new Float:myPos[3];
- GetPlayerPos(PlayerID, myPos[0], myPos[1], myPos[2]);
- SetPlayerPos(PlayerID, myPos[0], myPos[1], myPos[2]);
- }
- return SpawnPlayer(PlayerID);
- }
- AC_Func::SetPlayerPos_AC(PlayerID, Float:X, Float:Y, Float:Z)
- {
- SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, 10);
- _AC_playerData[PlayerID][_playerPos][0] = X;
- _AC_playerData[PlayerID][_playerPos][1] = Y;
- _AC_playerData[PlayerID][_playerPos][2] = Z;
- _AC_playerData[PlayerID][_playerPosSet][0] = X;
- _AC_playerData[PlayerID][_playerPosSet][1] = Y;
- _AC_playerData[PlayerID][_playerPosSet][2] = Z;
- #if DEBUG_FUNCTIONS
- 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);
- #endif
- return SetPlayerPos(PlayerID, X, Y, Z);
- }
- AC_Func::PutPlayerInVehicle_AC(PlayerID, VehicleID, SeatID)
- {
- if(VehicleID != INVALID_VEHICLE_ID)
- {
- SyncPlayer_AC(PlayerID, SYNC_TYPE_POS, 10);
- new
- Float:posVeh[3];
- GetVehiclePos(VehicleID, posVeh[0], posVeh[1], posVeh[2]);
- _AC_playerData[PlayerID][_playerPos][0] = posVeh[0];
- _AC_playerData[PlayerID][_playerPos][1] = posVeh[1];
- _AC_playerData[PlayerID][_playerPos][2] = posVeh[2];
- _AC_playerData[PlayerID][_playerPosSet][0] = posVeh[0];
- _AC_playerData[PlayerID][_playerPosSet][1] = posVeh[1];
- _AC_playerData[PlayerID][_playerPosSet][2] = posVeh[2];
- PutPlayerInVehicle(PlayerID, VehicleID, SeatID);
- #if DEBUG_FUNCTIONS
- printf("[tgAnticheat:DEBUG] PutPlayerInVehicle_AC -> Colocando jogador '%d' no veículo '%d'", PlayerID, VehicleID);
- #endif
- }
- return 1;
- }
- AC_Func::SetVehiclePos_AC(VehicleID, Float:X, Float:Y, Float:Z)
- {
- if(VehicleID != INVALID_VEHICLE_ID)
- {
- new getSeatID[MAX_PLAYERS];
- foreach(new i : Player)
- {
- if(GetPlayerVehicleID(i) == VehicleID)
- {
- getSeatID[i] = GetPlayerVehicleSeat(i);
- }
- }
- SetVehiclePos(VehicleID, X, Y, Z);
- foreach(new i : Player)
- {
- if(GetPlayerVehicleID(i) == VehicleID)
- {
- PutPlayerInVehicle_AC(i, VehicleID, getSeatID[i]);
- }
- }
- #if DEBUG_FUNCTIONS
- 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);
- #endif
- }
- return 1;
- }
- AC_Func::SetVehicleHealth_AC(VehicleID, Float:HealthAmount)
- {
- foreach(new i : Player)
- {
- if(GetPlayerVehicleID(i) == VehicleID)
- {
- SyncPlayer_AC(i, SYNC_TYPE_VEH, SYNC_DELAY);
- _AC_playerData[i][_playerCarHealth] = HealthAmount;
- }
- }
- #if DEBUG_FUNCTIONS
- printf("[tgAnticheat:DEBUG] SetVehiclePos_AC -> Definindo vida do veículo '%d' para '%0.2f'", VehicleID, HealthAmount);
- #endif
- return SetVehicleHealth(VehicleID, HealthAmount);
- }
- AC_Func::RepairVehicle_AC(VehicleID)
- {
- foreach(new i : Player)
- {
- if(GetPlayerVehicleID(i) == VehicleID)
- {
- SyncPlayer_AC(i, SYNC_TYPE_VEH, SYNC_DELAY);
- _AC_playerData[i][_playerCarHealth] = 1000.0;
- }
- }
- #if DEBUG_FUNCTIONS
- printf("[tgAnticheat:DEBUG] RepairVehicle_AC -> Reparando veículo '%d'", VehicleID);
- #endif
- return RepairVehicle(VehicleID);
- }
- //===================================================================================================================
- AC_IntFunc::SyncPlayer_AC(PlayerID, SyncType, TimeSet)
- {
- _AC_syncTime[PlayerID][SyncType] = TimeSet;
- _AC_syncLastTime[PlayerID][SyncType] = GetTickCount();
- #if DEBUG_FUNCTIONS
- printf("[tgAnticheat:DEBUG] SyncPlayer_AC -> Sincronizando informações do jogador '%d' do tipo '%d'.", PlayerID, SyncType);
- #endif
- return 1;
- }
- AC_IntFunc::GetDistanceFromPointToPoint(Float:X, Float:Y, Float:Z, Float:tX, Float:tY, Float:tZ)
- {
- return floatround(floatsqroot(((X - tX) * (X - tX)) + ((Y - tY) * (Y - tY)) + ((Z - tZ) * (Z - tZ))));
- }
- AC_IntFunc::IsPlayerOutOfWater(PlayerID)
- {
- new
- Float:posPlayer[3];
- GetPlayerPos(PlayerID, posPlayer[0], posPlayer[1], posPlayer[2]);
- if((posPlayer[0] >= -1408.0629 && posPlayer[2] >= 2021.0587 && posPlayer[0] <= -460.9319 && posPlayer[2] <= 2861.4893) ||
- (posPlayer[0] >= 1269.5886 && posPlayer[2] >= -810.4507 && posPlayer[0] <= 1288.8916 && posPlayer[2] <= -800.5959) ||
- (posPlayer[0] >= 1086.6010 && posPlayer[2] >= -683.6998 && posPlayer[0] <= 1103.0225 && posPlayer[2] <= -662.1832) ||
- (posPlayer[0] >= 169.6879 && posPlayer[2] >= -1392.6630 && posPlayer[0] <= 281.5444 && posPlayer[2] <= -1168.9749) ||
- (posPlayer[0] >= -828.3018 && posPlayer[2] >= -2107.1487 && posPlayer[0] <= -443.5032 && posPlayer[2] <= -1855.6273) ||
- (posPlayer[0] >= 1198.9982 && posPlayer[2] >= -2407.0581 && posPlayer[0] <= 1275.7397 && posPlayer[2] <= -2341.6262) ||
- (posPlayer[0] >= 2293.1467 && posPlayer[2] >= -1432.5869 && posPlayer[0] <= 2331.7388 && posPlayer[2] <= -1397.6476) ||
- (posPlayer[0] >= 1915.3196 && posPlayer[2] >= -1236.2382 && posPlayer[0] <= 2016.6565 && posPlayer[2] <= -1167.9290) ||
- (posPlayer[0] >= -2747.1692 && posPlayer[2] >= -510.1152 && posPlayer[0] <= -2663.2468 && posPlayer[2] <= -411.4905) ||
- (posPlayer[0] >= 1838.8041 && posPlayer[2] >= 1463.2024 && posPlayer[0] <= 2035.4167 && posPlayer[2] <= 1703.0480) ||
- (posPlayer[0] >= 2049.6646 && posPlayer[2] >= 1843.3029 && posPlayer[0] <= 2119.9021 && posPlayer[2] <= 1983.5464) ||
- (posPlayer[0] >= 2094.9255 && posPlayer[2] >= 1085.2852 && posPlayer[0] <= 2179.1790 && posPlayer[2] <= 1183.0610) ||
- (posPlayer[0] >= 2545.3718 && posPlayer[2] >= 2347.7112 && posPlayer[0] <= 2593.6794 && posPlayer[2] <= 2403.8040))
- {
- return 1;
- }
- return 0;
- }
- AC_IntFunc::IsPlayerInPNSorTR(PlayerID)
- {
- for(new i = 0; i < sizeof(payNSprayTransfender); i++)
- {
- if(IsPlayerInRangeOfPoint(PlayerID, 15.0, payNSprayTransfender[i][0], payNSprayTransfender[i][1], payNSprayTransfender[i][2]))
- {
- return 1;
- }
- }
- return 0;
- }
- AC_IntFunc::IsPlayerInFrontOfVMachine(PlayerID)
- {
- for(new i = 0; i < sizeof(vendingMachines); i++)
- {
- if(IsPlayerInRangeOfPoint(PlayerID, 5.0, vendingMachines[i][0], vendingMachines[i][1], vendingMachines[i][2]))
- {
- return 1;
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment