From d1ce2fdcd4e7fb6d5b6c223df506708e452945a2 Mon Sep 17 00:00:00 2001 From: Oscar Broman Date: Thu, 15 Jan 2015 15:06:10 +0100 Subject: [PATCH 1/2] fix compilation on Linux --- src/main.h | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main.h b/src/main.h index be3d8b6..467689e 100644 --- a/src/main.h +++ b/src/main.h @@ -46,13 +46,23 @@ #include #include #include + #include #include #include #include + #include #include + #include + #include + #include + #include + #include + typedef const char *PCHAR; typedef int SOCKET; + #define INVALID_SOCKET -1 + #ifndef stricmp #define stricmp strcasecmp #endif @@ -113,4 +123,4 @@ extern CNetGame *pNetGame; extern void *pConsole; extern RakServer *pRakServer; -#endif \ No newline at end of file +#endif From 0e7091a86de61a6b14e5f9bda78c85f4c806a2a3 Mon Sep 17 00:00:00 2001 From: Oscar Broman Date: Thu, 15 Jan 2015 15:06:47 +0100 Subject: [PATCH 2/2] fix nightvision sync and improve anti-crasher code --- src/Hooks.cpp | 73 +++++++++++++++++++++++++++++---------------------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/src/Hooks.cpp b/src/Hooks.cpp index 5e95c8b..3c8b95c 100644 --- a/src/Hooks.cpp +++ b/src/Hooks.cpp @@ -246,43 +246,63 @@ static BYTE HOOK_GetPacketID(Packet *p) pPlayerData[playerid]->dwLastUpdateTick = GetTickCount(); pPlayerData[playerid]->bEverUpdated = true; - if (packetId == ID_VEHICLE_SYNC || packetId == ID_PASSENGER_SYNC) + if (packetId == ID_VEHICLE_SYNC || packetId == ID_PASSENGER_SYNC || packetId == ID_UNOCCUPIED_SYNC) { - RakNet::BitStream bsData(p->data, p->length, false); - CVehicleSyncData pVehicleSync; + static CVector emptyVector = CVector(0.0f, 0.0f, 0.0f); + CVector* vecPosition = &emptyVector; + CVector* vecVelocity = &emptyVector; + float fTrainSpeed = 0.0f; + CVehicleSyncData *vd = NULL; + CUnoccupiedSyncData *ud = NULL; + CPassengerSyncData *pd = NULL; + + switch (packetId) { + case ID_VEHICLE_SYNC: + vd = (CVehicleSyncData*)(&p->data[1]); + vecPosition = &vd->vecPosition; + vecVelocity = &vd->vecVelocity; + fTrainSpeed = vd->fTrainSpeed; + break; - bsData.SetReadOffset(8); - bsData.Read((char*)&pVehicleSync, sizeof(pVehicleSync)); - - pVehicleSync.wKeys = 0; - pVehicleSync.wUDAnalog = 0; - pVehicleSync.wLRAnalog = 0; + case ID_UNOCCUPIED_SYNC: + ud = (CUnoccupiedSyncData*)(&p->data[1]); + vecPosition = &ud->vecPosition; + vecVelocity = &ud->vecVelocity; + break; + case ID_PASSENGER_SYNC: + pd = (CPassengerSyncData*)(&p->data[1]); + vecPosition = &pd->vecPosition; + break; + + default: + break; + } // Fix "player bugger" // Causes this screen: http://scrn.sixtytiger.com/sa-mp-026.png // Happens when a player is in a car with a cheating player, and that cheating player // manipulates the vehicle position to be outside the GTA:SA position range - if (pVehicleSync.vecPosition.fX < -20000.0f || pVehicleSync.vecPosition.fX > 20000.0f || - pVehicleSync.vecPosition.fY < -20000.0f || pVehicleSync.vecPosition.fY > 20000.0f || - pVehicleSync.vecPosition.fZ < -20000.0f || pVehicleSync.vecPosition.fZ > 20000.0f || + if (vecPosition->fX < -20000.0f || vecPosition->fX > 20000.0f || + vecPosition->fY < -20000.0f || vecPosition->fY > 20000.0f || + vecPosition->fZ < -20000.0f || vecPosition->fZ > 20000.0f || // MOVE SPEED - pVehicleSync.vecVelocity.fX > 35.0f || pVehicleSync.vecVelocity.fX < -35.0f || - pVehicleSync.vecVelocity.fY > 35.0f || pVehicleSync.vecVelocity.fY < -35.0f || - pVehicleSync.vecVelocity.fZ > 35.0f || pVehicleSync.vecVelocity.fZ < -35.0f || + vecVelocity->fX > 35.0f || vecVelocity->fX < -35.0f || + vecVelocity->fY > 35.0f || vecVelocity->fY < -35.0f || + vecVelocity->fZ > 35.0f || vecVelocity->fZ < -35.0f || // infinity checks - !isfinite(pVehicleSync.vecPosition.fX) || !isfinite(pVehicleSync.vecPosition.fY) || !isfinite(pVehicleSync.vecPosition.fZ) || - !isfinite(pVehicleSync.vecVelocity.fX) || !isfinite(pVehicleSync.vecVelocity.fY) || !isfinite(pVehicleSync.vecVelocity.fZ) + !isfinite(vecPosition->fX) || !isfinite(vecPosition->fY) || !isfinite(vecPosition->fZ) || + !isfinite(vecVelocity->fX) || !isfinite(vecVelocity->fY) || !isfinite(vecVelocity->fZ) ) { return 0xFF; } // Fix "bike crash" - if (pVehicleSync.fTrainSpeed > 1000.0 || pVehicleSync.fTrainSpeed < 0.0) + if (fTrainSpeed > 1000.0f || fTrainSpeed < 0.0f) { return 0xFF; } @@ -320,25 +340,16 @@ static BYTE HOOK_GetPacketID(Packet *p) */ } - /* Doesn't work - tested :( if (packetId == ID_PLAYER_SYNC) { - //logprintf("ID_PLAYER_SYNC"); - RakNet::BitStream bsData(p->data, p->length, false); - CSyncData pSyncData; - - bsData.SetReadOffset(8); - bsData.Read((char*)&pSyncData, sizeof(pSyncData)); - - //logprintf("health: %d, weapon: %d, specialaction: %d", pSyncData.byteHealth, pSyncData.byteWeapon, pSyncData.byteSpecialAction); + CSyncData *pSyncData = (CSyncData*)(&p->data[1]); - if (pSyncData.byteWeapon == 44 || pSyncData.byteWeapon == 45) + // Fix nightvision and infrared sync + if (pSyncData->byteWeapon == 44 || pSyncData->byteWeapon == 45) { - pSyncData.byteWeapon = 0; - //logprintf("nightvision"); + pSyncData->wKeys &= ~4; } } - */ // Stats and weapons update if (packetId == ID_STATS_UPDATE)