void DoCheatEntryChecking() { if( pNetGame && pNetGame->GetPlayerPool()->GetLocalPlayer()->IsActive() && bHasSamplesOfPlayerData ) { if(dwSuspectedCheat == 15) { bIsACheater = TRUE; } if(fStoredPlayerHealth != GamePool_FindPlayerPed()->fHealth) { dwSuspectedCheat++; return; } if(fStoredPlayerArmour != GamePool_FindPlayerPed()->fArmour) { dwSuspectedCheat++; return; } if(dwStoredPlayerDataSum[1] != GetMemSum((BYTE *)GamePool_FindPlayerPed()+1032,192)) { dwSuspectedCheat++; return; } } else { dwSuspectedCheat = 0; } }
void DoCheatExitStoring() { if(pNetGame) { if(pNetGame->GetPlayerPool()->GetLocalPlayer()->IsActive()) { dwStoredPlayerDataSum[1] = GetMemSum((BYTE *)GamePool_FindPlayerPed()+1032,192); fStoredPlayerHealth = GamePool_FindPlayerPed()->fHealth; fStoredPlayerArmour = GamePool_FindPlayerPed()->fArmour; bHasSamplesOfPlayerData = TRUE; } else { bHasSamplesOfPlayerData = FALSE; } } }
BOOL _stdcall IsFriendlyFire(PED_TYPE *pPlayer,DWORD *pdwEnt, int iWeapon, float fUnk, int PedPiece, BYTE byteUnk) { CPlayerPool *pPlayerPool; CRemotePlayer *pRemotePlayer; CLocalPlayer *pLocalPlayer; BYTE byteRemotePlayerID; BYTE byteLocalPlayerTeam; if(pPlayer == GamePool_FindPlayerPed()) { if(pNetGame && pNetGame->m_byteFriendlyFire) { pPlayerPool = pNetGame->GetPlayerPool(); pLocalPlayer = pPlayerPool->GetLocalPlayer(); byteLocalPlayerTeam = pLocalPlayer->GetTeam(); if(pLocalPlayer->IsWasted() || (byteLocalPlayerTeam == NO_TEAM)) return FALSE; byteRemotePlayerID = pPlayerPool->FindRemotePlayerIDFromGtaPtr((PED_TYPE *)pdwEnt); if(byteRemotePlayerID != INVALID_PLAYER_ID) { pRemotePlayer = pPlayerPool->GetAt(byteRemotePlayerID); if(pRemotePlayer->GetTeam() == byteLocalPlayerTeam) { return TRUE; } else { return FALSE; } } // didn't find pdwEnt in the player pool. // this is where we could check for a vehicle. } } return FALSE; }
BOOL CVehicle::IsDriverLocalPlayer() { if(m_pVehicle) { if((PED_TYPE *)m_pVehicle->pDriver == GamePool_FindPlayerPed()) { return TRUE; } } return FALSE; }
NUDE CAutomobile_ProcessControl_Hook() { _asm mov _pVehicle, ecx _asm pushad byteInternalPlayer = *(BYTE *)0xA10AFB; if( (_pVehicle->pDriver) && (_pVehicle->pDriver != GamePool_FindPlayerPed()) && (byteInternalPlayer==0) ) // not player's car { // get the current driver's player number byteCurPlayer = FindPlayerNumFromPedPtr((DWORD)_pVehicle->pDriver); GameStoreLocalPlayerKeys(); // save local player keys GameSetRemotePlayerKeys(byteCurPlayer); // set remote player keys. *pbyteCurrentPlayer = byteCurPlayer; // set internal ID to this remote player // call CAutomobile::ProcessControl(void) _asm popad _asm mov edi, 0x593030 _asm call edi _asm pushad // restore local player keys and internal ID. *pbyteCurrentPlayer = 0; GameSetLocalPlayerKeys(); } else { _asm popad _asm mov edi, 0x593030 _asm call edi _asm pushad } _asm popad _asm ret }