Skip to content

Commit

Permalink
Added a new sync type
Browse files Browse the repository at this point in the history
  • Loading branch information
ADRFranklin committed Dec 28, 2019
1 parent 8998ea0 commit a0606e5
Show file tree
Hide file tree
Showing 11 changed files with 223 additions and 155 deletions.
3 changes: 2 additions & 1 deletion SKY.inc
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,8 @@ enum E_SYNC_TYPES
E_AIM_SYNC,
E_VEHICLE_SYNC,
E_PASSENGER_SYNC,
E_SPECTATING_SYNC
E_SPECTATING_SYNC,
E_LAST_SYNC
};

// Make a player appear to spawn for all players but himself
Expand Down
8 changes: 1 addition & 7 deletions src/CTypes.h
Original file line number Diff line number Diff line change
@@ -1,4 +1,3 @@

typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;
Expand All @@ -12,9 +11,4 @@ typedef float FLOAT;

#ifndef MAX_PATH
#define MAX_PATH 260
#endif
/*
#ifndef PCHAR
typedef unsigned char *PCHAR;
#endif
*/
#endif
7 changes: 7 additions & 0 deletions src/Global.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
#include "Global.h"

namespace Global
{
BOOL disableSyncBugs = true;
BOOL knifeSync = true;
};
22 changes: 22 additions & 0 deletions src/Global.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
#ifndef SKY_GLOBAL
#define SKY_GLOBAL

#include "CTypes.h"

namespace Global
{
enum SyncTypes
{
E_PLAYER_SYNC = 0,
E_AIM_SYNC,
E_VEHICLE_SYNC,
E_PASSENGER_SYNC,
E_SPECTATING_SYNC,
E_LAST_SYNC
};

extern BOOL disableSyncBugs;
extern BOOL knifeSync;
};

#endif
120 changes: 57 additions & 63 deletions src/Hooks.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -39,6 +39,7 @@
#include "Scripting.h"
#include "Utils.h"
#include "Versions.h"
#include "Player.h"
#include "main.h"
#include <cmath>
#include <cstring>
Expand Down Expand Up @@ -74,11 +75,6 @@ using std::isfinite;

extern void *pAMXFunctions;

BOOL knifeSync = true;
int lastAnim[1000] = {0};
DWORD lastUpdateTick[1000] = {0};
BOOL blockKeySync[1000] = {0};

// Y_Less - original YSF
bool Unlock(void *address, size_t len)
{
Expand Down Expand Up @@ -143,19 +139,6 @@ static bool IsPlayerUpdatePacket(unsigned char packetId)
packetId == ID_TRAILER_SYNC);
}

BYTE lastWeapon[1000] = {0};
BYTE fakeHealth[1000] = {0};
BYTE fakeArmour[1000] = {0};
glm::quat *fakeQuat[1000];
BOOL disableSyncBugs = true;
BOOL infiniteAmmo[1000] = {0};

BOOL syncDataFrozen[1000] = {0};
BOOL syncAimDataFrozen[1000] = {0};
BOOL syncVehicleDataFrozen[1000] = {0};
BOOL syncPassengerDataFrozen[1000] = {0};
BOOL syncSpectatingDataFrozen[1000] = {0};

BYTE GetPacketID(Packet *p)
{
if (p == 0)
Expand Down Expand Up @@ -186,7 +169,7 @@ Packet *THISCALL CHookRakServer::Receive(void *ppRakServer)

if (IsPlayerUpdatePacket(packetId))
{
lastUpdateTick[playerid] = GetTickCount();
Player::lastUpdateTick[playerid] = GetTickCount();
}

if (packetId == ID_PLAYER_SYNC)
Expand Down Expand Up @@ -220,7 +203,7 @@ Packet *THISCALL CHookRakServer::Receive(void *ppRakServer)
d->wKeys &= ~128;
}

if (disableSyncBugs)
if (Global::disableSyncBugs)
{
// Prevent "ghost shooting" bugs
if ((d->byteWeapon >= WEAPON_COLT45 && d->byteWeapon <= WEAPON_SNIPER) || d->byteWeapon == WEAPON_MINIGUN)
Expand Down Expand Up @@ -406,54 +389,54 @@ Packet *THISCALL CHookRakServer::Receive(void *ppRakServer)
}

auto lastSyncData = &Versions::getLastSyncData<Structs>(playerid);
if (syncDataFrozen[playerid])
if (Player::syncDataFrozen[playerid])
{
d = lastSyncData;
std::memcpy(d, lastSyncData, sizeof(typename Structs::CSyncData));
}
else
{
lastSyncData = d;
std::memcpy(lastSyncData, d, sizeof(typename Structs::CSyncData));
}

if (blockKeySync[playerid])
if (Player::blockKeySync[playerid])
{
d->wKeys = 0;
}

if (fakeHealth[playerid] != 255)
if (Player::fakeHealth[playerid] != 255)
{
d->byteHealth = fakeHealth[playerid];
d->byteHealth = Player::fakeHealth[playerid];
}

if (fakeArmour[playerid] != 255)
if (Player::fakeArmour[playerid] != 255)
{
d->byteArmour = fakeArmour[playerid];
d->byteArmour = Player::fakeArmour[playerid];
}

if (fakeQuat[playerid] != NULL)
if (Player::fakeQuat[playerid] != NULL)
{
// NOT AT ALL SURE WHICH ELEMENTS OF THIS ARRAY ARE WHAT. THIS CODE MIGHT BE COMPLETELY WRONG.
// SOMEONE WHO KNOWS WHAT THEY'RE DOING PLEASE CHECK THIS.
// 03/09/18 - Whitetiger
d->fQuaternion[0] = fakeQuat[playerid]->w; // angle
d->fQuaternion[1] = fakeQuat[playerid]->x; // x
d->fQuaternion[2] = fakeQuat[playerid]->y; // y
d->fQuaternion[3] = fakeQuat[playerid]->z; // z
d->fQuaternion[0] = Player::fakeQuat[playerid]->w; // angle
d->fQuaternion[1] = Player::fakeQuat[playerid]->x; // x
d->fQuaternion[2] = Player::fakeQuat[playerid]->y; // y
d->fQuaternion[3] = Player::fakeQuat[playerid]->z; // z
}

if (d->byteWeapon == 44 || d->byteWeapon == 45)
{
d->wKeys &= ~4;
}
else if (d->byteWeapon == 4 && knifeSync == false)
else if (d->byteWeapon == 4 && Global::knifeSync == false)
{
d->wKeys &= ~128;
}

int anim = d->dwAnimationData;
lastAnim[playerid] = anim;

lastWeapon[playerid] = d->byteWeapon;

Player::lastWeapon[playerid] = d->byteWeapon;
Player::lastSyncPacket[playerid] = Global::SyncTypes::E_PLAYER_SYNC;
}

if (packetId == ID_AIM_SYNC)
Expand All @@ -473,17 +456,20 @@ Packet *THISCALL CHookRakServer::Receive(void *ppRakServer)
}

auto lastAimSyncData = &Versions::getLastAimSyncData<Structs>(playerid);
if (syncAimDataFrozen[playerid])
if (Player::syncAimDataFrozen[playerid])
{
d = lastAimSyncData;
std::memcpy(d, lastAimSyncData, sizeof(typename Structs::CAimSyncData));
}
else
{
lastAimSyncData = d;
std::memcpy(lastAimSyncData, d, sizeof(typename Structs::CAimSyncData));
}

// Fix first-person up/down aim sync
if (lastWeapon[playerid] == 34 || lastWeapon[playerid] == 35 || lastWeapon[playerid] == 36 || lastWeapon[playerid] == 43)
if (Player::lastWeapon[playerid] == 34
|| Player::lastWeapon[playerid] == 35
|| Player::lastWeapon[playerid] == 36
|| Player::lastWeapon[playerid] == 43)
{
d->fZAim = -d->vecFront.fZ;

Expand All @@ -497,10 +483,12 @@ Packet *THISCALL CHookRakServer::Receive(void *ppRakServer)
}
}

if (infiniteAmmo[playerid])
if (Player::infiniteAmmo[playerid])
{
d->byteCameraZoom = 2;
}

Player::lastSyncPacket[playerid] = Global::SyncTypes::E_AIM_SYNC;
}

if (packetId == ID_VEHICLE_SYNC)
Expand All @@ -522,29 +510,31 @@ Packet *THISCALL CHookRakServer::Receive(void *ppRakServer)
}

auto lastVehicleSyncData = &Versions::getLastVehicleSyncData<Structs>(playerid);
if (syncVehicleDataFrozen[playerid])
if (Player::syncVehicleDataFrozen[playerid])
{
d = lastVehicleSyncData;
std::memcpy(d, lastVehicleSyncData, sizeof(typename Structs::CVehicleSyncData));
}
else
{
lastVehicleSyncData = d;
std::memcpy(lastVehicleSyncData, d, sizeof(typename Structs::CVehicleSyncData));
}

if (d->bytePlayerWeapon > 46 || (d->bytePlayerWeapon > 18 && d->bytePlayerWeapon < 22))
{
d->bytePlayerWeapon = 0;
}

if (fakeHealth[playerid] != 255)
if (Player::fakeHealth[playerid] != 255)
{
d->bytePlayerHealth = fakeHealth[playerid];
d->bytePlayerHealth = Player::fakeHealth[playerid];
}

if (fakeArmour[playerid] != 255)
if (Player::fakeArmour[playerid] != 255)
{
d->bytePlayerArmour = fakeArmour[playerid];
d->bytePlayerArmour = Player::fakeArmour[playerid];
}

Player::lastSyncPacket[playerid] = Global::SyncTypes::E_VEHICLE_SYNC;
}

if (packetId == ID_PASSENGER_SYNC)
Expand All @@ -564,29 +554,31 @@ Packet *THISCALL CHookRakServer::Receive(void *ppRakServer)
}

auto lastPassengerSyncData = &Versions::getLastPassengerSyncData<Structs>(playerid);
if (syncPassengerDataFrozen[playerid])
if (Player::syncPassengerDataFrozen[playerid])
{
d = lastPassengerSyncData;
std::memcpy(d, lastPassengerSyncData, sizeof(typename Structs::CPassengerSyncData));
}
else
{
lastPassengerSyncData = d;
std::memcpy(lastPassengerSyncData, d, sizeof(typename Structs::CPassengerSyncData));
}

if (d->bytePlayerWeapon > 46 || (d->bytePlayerWeapon > 18 && d->bytePlayerWeapon < 22))
{
d->bytePlayerWeapon = 0;
}

if (fakeHealth[playerid] != 255)
if (Player::fakeHealth[playerid] != 255)
{
d->bytePlayerHealth = fakeHealth[playerid];
d->bytePlayerHealth = Player::fakeHealth[playerid];
}

if (fakeArmour[playerid] != 255)
if (Player::fakeArmour[playerid] != 255)
{
d->bytePlayerArmour = fakeArmour[playerid];
d->bytePlayerArmour = Player::fakeArmour[playerid];
}

Player::lastSyncPacket[playerid] = Global::SyncTypes::E_PASSENGER_SYNC;
}

if(packetId == ID_SPECTATOR_SYNC)
Expand All @@ -606,14 +598,16 @@ Packet *THISCALL CHookRakServer::Receive(void *ppRakServer)
}

auto lastSpectatingSyncData = &Versions::getLastSpectatingSyncData<Structs>(playerid);
if (syncSpectatingDataFrozen[playerid])
if (Player::syncSpectatingDataFrozen[playerid])
{
d = lastSpectatingSyncData;
std::memcpy(d, lastSpectatingSyncData, sizeof(typename Structs::CSpectatingSyncData));
}
else
{
lastSpectatingSyncData = d;
}
std::memcpy(lastSpectatingSyncData, d, sizeof(typename Structs::CSpectatingSyncData));
}

Player::lastSyncPacket[playerid] = Global::SyncTypes::E_SPECTATING_SYNC;
}

return p;
Expand All @@ -624,11 +618,11 @@ Packet *THISCALL CHookRakServer::Receive(void *ppRakServer)

void InstallPreHooks()
{
std::memset(&fakeHealth, 255, sizeof(fakeHealth));
std::memset(&fakeArmour, 255, sizeof(fakeArmour));
std::memset(&Player::fakeHealth, 255, sizeof(Player::fakeHealth));
std::memset(&Player::fakeArmour, 255, sizeof(Player::fakeArmour));

for (int i = 0; i < 1000; i++)
{
fakeQuat[i] = 0;
Player::fakeQuat[i] = 0;
}
}
16 changes: 0 additions & 16 deletions src/Hooks.h
Original file line number Diff line number Diff line change
Expand Up @@ -24,20 +24,4 @@ void InstallPreHooks();

BYTE GetPacketID(Packet *p);

extern BYTE lastWeapon[1000];
extern BYTE fakeHealth[1000];
extern BYTE fakeArmour[1000];
extern BOOL knifeSync;
extern glm::quat *fakeQuat[1000];
extern DWORD lastUpdateTick[1000];
extern BOOL disableSyncBugs;
extern BOOL blockKeySync[1000];
extern BOOL infiniteAmmo[1000];

extern BOOL syncDataFrozen[1000];
extern BOOL syncAimDataFrozen[1000];
extern BOOL syncVehicleDataFrozen[1000];
extern BOOL syncPassengerDataFrozen[1000];
extern BOOL syncSpectatingDataFrozen[1000];

#endif
20 changes: 20 additions & 0 deletions src/Player.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,20 @@
#include "Player.h"

namespace Player
{
BYTE lastWeapon[1000] = {0};
BYTE fakeHealth[1000] = {0};
BYTE fakeArmour[1000] = {0};
glm::quat *fakeQuat[1000];
DWORD lastUpdateTick[1000] = {0};
BOOL blockKeySync[1000] = {0};
BOOL infiniteAmmo[1000] = {0};

BOOL syncDataFrozen[1000] = {0};
BOOL syncAimDataFrozen[1000] = {0};
BOOL syncVehicleDataFrozen[1000] = {0};
BOOL syncPassengerDataFrozen[1000] = {0};
BOOL syncSpectatingDataFrozen[1000] = {0};

extern Global::SyncTypes lastSyncPacket[1000] = {Global::SyncTypes::E_PLAYER_SYNC};
};
Loading

0 comments on commit a0606e5

Please sign in to comment.