#pragma once #include "FortPlayerState.h" #include "Stack.h" struct FFortRespawnData { static UStruct* GetStruct() { static auto Struct = FindObject(L"/Script/FortniteGame.FortRespawnData"); return Struct; } static int GetStructSize() { return GetStruct()->GetPropertiesSize(); } bool& IsRespawnDataAvailable() { static auto bRespawnDataAvailableOffset = FindOffsetStruct("/Script/FortniteGame.FortRespawnData", "bRespawnDataAvailable"); return *(bool*)(__int64(this) + bRespawnDataAvailableOffset); } bool& IsClientReady() { static auto bClientIsReadyOffset = FindOffsetStruct("/Script/FortniteGame.FortRespawnData", "bClientIsReady"); return *(bool*)(__int64(this) + bClientIsReadyOffset); } bool& IsServerReady() { static auto bServerIsReadyOffset = FindOffsetStruct("/Script/FortniteGame.FortRespawnData", "bServerIsReady"); return *(bool*)(__int64(this) + bServerIsReadyOffset); } FVector& GetRespawnLocation() { static auto RespawnLocationOffset = FindOffsetStruct("/Script/FortniteGame.FortRespawnData", "RespawnLocation"); return *(FVector*)(__int64(this) + RespawnLocationOffset); } FRotator& GetRespawnRotation() { static auto RespawnRotationOffset = FindOffsetStruct("/Script/FortniteGame.FortRespawnData", "RespawnRotation"); return *(FRotator*)(__int64(this) + RespawnRotationOffset); } }; struct FDeathInfo { static UStruct* GetStruct() { static auto Struct = FindObject("/Script/FortniteGame.DeathInfo"); return Struct; } static int GetStructSize() { return GetStruct()->GetPropertiesSize(); } bool& IsDBNO() { static auto bDBNOOffset = FindOffsetStruct("/Script/FortniteGame.DeathInfo", "bDBNO"); return *(bool*)(__int64(this) + bDBNOOffset); } }; class AFortPlayerStateAthena : public AFortPlayerState { public: static inline void (*ServerSetInAircraftOriginal)(UObject* Context, FFrame& Stack, void* Ret); uint8& GetSquadId() { static auto SquadIdOffset = GetOffset("SquadId"); return Get(SquadIdOffset); } uint8& GetTeamIndex() { static auto TeamIndexOffset = GetOffset("TeamIndex"); return Get(TeamIndexOffset); } int& GetPlace() { static auto PlaceOffset = GetOffset("Place"); return Get(PlaceOffset); } FFortRespawnData* GetRespawnData() { static auto RespawnDataOffset = GetOffset("RespawnData"); return GetPtr(RespawnDataOffset); } bool IsInAircraft() { static auto bInAircraftOffset = GetOffset("bInAircraft"); static auto bInAircraftFieldMask = GetFieldMask(GetProperty("bInAircraft")); return ReadBitfieldValue(bInAircraftOffset, bInAircraftFieldMask); } bool HasThankedBusDriver() { static auto bThankedBusDriverOffset = GetOffset("bThankedBusDriver"); static auto bThankedBusDriverFieldMask = GetFieldMask(GetProperty("bThankedBusDriver")); return ReadBitfieldValue(bThankedBusDriverOffset, bThankedBusDriverFieldMask); } bool& IsResurrectingNow() { static auto bResurrectingNowOffset = GetOffset("bResurrectingNow", false); // if (bResurrectingNowOffset == -1) // return false; return Get(bResurrectingNowOffset); } void ClientReportKill(AFortPlayerStateAthena* Player) { static auto ClientReportKillFn = FindObject(L"/Script/FortniteGame.FortPlayerStateAthena.ClientReportKill"); this->ProcessEvent(ClientReportKillFn, &Player); } void OnRep_DeathInfo() { static auto OnRep_DeathInfoFn = FindObject(L"/Script/FortniteGame.FortPlayerStateAthena.OnRep_DeathInfo"); if (OnRep_DeathInfoFn) // needed? { this->ProcessEvent(OnRep_DeathInfoFn); } } FDeathInfo* GetDeathInfo() { return GetPtr(MemberOffsets::FortPlayerStateAthena::DeathInfo); } void ClearDeathInfo() { RtlSecureZeroMemory(GetDeathInfo(), FDeathInfo::GetStructSize()); // TODO FREE THE DEATHTAGS } static void ServerSetInAircraftHook(UObject* Context, FFrame& Stack, void* Ret); static UClass* StaticClass() { static auto Class = FindObject(L"/Script/FortniteGame.FortPlayerStateAthena"); return Class; } };