2.5 semi supprt what

This commit is contained in:
Milxnor
2023-03-24 23:59:31 -04:00
parent 129e9ab0d2
commit ffcead3ed0
9 changed files with 110 additions and 35 deletions

View File

@@ -972,7 +972,7 @@ void AFortGameModeAthena::Athena_HandleStartingNewPlayerHook(AFortGameModeAthena
LOG_INFO(LogDev, "HandleStartingNewPlayer end"); LOG_INFO(LogDev, "HandleStartingNewPlayer end");
if (Engine_Version < 420) if (Fortnite_Version <= 2.5)
{ {
static auto QuickBarsOffset = NewPlayer->GetOffset("QuickBars", false); static auto QuickBarsOffset = NewPlayer->GetOffset("QuickBars", false);

View File

@@ -66,6 +66,12 @@ void UFortKismetLibrary::ApplyCharacterCosmetics(UObject* WorldContextObject, co
} }
} }
void UFortKismetLibrary::PickLootDropsWithNamedWeightsHook(UObject* Context, FFrame& Stack, void* Ret)
{
LOG_INFO(LogDev, __FUNCTION__);
return PickLootDropsWithNamedWeightsOriginal(Context, Stack, Ret);
}
void UFortKismetLibrary::SpawnItemVariantPickupInWorldHook(UObject* Context, FFrame& Stack, void* Ret) void UFortKismetLibrary::SpawnItemVariantPickupInWorldHook(UObject* Context, FFrame& Stack, void* Ret)
{ {
UObject* WorldContextObject; // 0x0(0x8)(Parm, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic) UObject* WorldContextObject; // 0x0(0x8)(Parm, ZeroConstructor, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
@@ -149,7 +155,7 @@ void UFortKismetLibrary::CreateTossAmmoPickupForWeaponItemDefinitionAtLocationHo
LOG_INFO(LogDev, __FUNCTION__); LOG_INFO(LogDev, __FUNCTION__);
return CreateTossAmmoPickupForWeaponItemDefinitionAtLocationOriginal(Context, Stack, Ret); // return CreateTossAmmoPickupForWeaponItemDefinitionAtLocationOriginal(Context, Stack, Ret);
int Count = 1; int Count = 1;
@@ -167,9 +173,11 @@ void UFortKismetLibrary::GiveItemToInventoryOwnerHook(UObject* Context, FFrame&
{ {
static auto ItemLevelOffset = FindOffsetStruct("/Script/FortniteGame.FortKismetLibrary.GiveItemToInventoryOwner", "ItemLevel", false); static auto ItemLevelOffset = FindOffsetStruct("/Script/FortniteGame.FortKismetLibrary.GiveItemToInventoryOwner", "ItemLevel", false);
static auto PickupInstigatorHandleOffset = FindOffsetStruct("/Script/FortniteGame.FortKismetLibrary.GiveItemToInventoryOwner", "PickupInstigatorHandle", false); static auto PickupInstigatorHandleOffset = FindOffsetStruct("/Script/FortniteGame.FortKismetLibrary.GiveItemToInventoryOwner", "PickupInstigatorHandle", false);
static auto ItemVariantGuidOffset = FindOffsetStruct("/Script/FortniteGame.FortKismetLibrary.GiveItemToInventoryOwner", "ItemVariantGuid", false);
TScriptInterface<UFortInventoryOwnerInterface> InventoryOwner; // = *(TScriptInterface<UFortInventoryOwnerInterface>*)(__int64(Params) + InventoryOwnerOffset); TScriptInterface<UFortInventoryOwnerInterface> InventoryOwner; // = *(TScriptInterface<UFortInventoryOwnerInterface>*)(__int64(Params) + InventoryOwnerOffset);
UFortWorldItemDefinition* ItemDefinition = nullptr; // *(UFortWorldItemDefinition**)(__int64(Params) + ItemDefinitionOffset); UFortWorldItemDefinition* ItemDefinition = nullptr; // *(UFortWorldItemDefinition**)(__int64(Params) + ItemDefinitionOffset);
FGuid ItemVariantGuid;
int NumberToGive; // = *(int*)(__int64(Params) + NumberToGiveOffset); int NumberToGive; // = *(int*)(__int64(Params) + NumberToGiveOffset);
bool bNotifyPlayer; // = *(bool*)(__int64(Params) + bNotifyPlayerOffset); bool bNotifyPlayer; // = *(bool*)(__int64(Params) + bNotifyPlayerOffset);
int ItemLevel; // = *(int*)(__int64(Params) + ItemLevelOffset); int ItemLevel; // = *(int*)(__int64(Params) + ItemLevelOffset);
@@ -177,6 +185,7 @@ void UFortKismetLibrary::GiveItemToInventoryOwnerHook(UObject* Context, FFrame&
Stack.StepCompiledIn(&InventoryOwner); Stack.StepCompiledIn(&InventoryOwner);
Stack.StepCompiledIn(&ItemDefinition); Stack.StepCompiledIn(&ItemDefinition);
if (ItemVariantGuidOffset != -1) Stack.StepCompiledIn(&ItemVariantGuid);
Stack.StepCompiledIn(&NumberToGive); Stack.StepCompiledIn(&NumberToGive);
Stack.StepCompiledIn(&bNotifyPlayer); Stack.StepCompiledIn(&bNotifyPlayer);
@@ -293,15 +302,19 @@ void UFortKismetLibrary::K2_RemoveItemFromPlayerByGuidHook(UObject* Context, FFr
void UFortKismetLibrary::K2_GiveItemToPlayerHook(UObject* Context, FFrame& Stack, void* Ret) void UFortKismetLibrary::K2_GiveItemToPlayerHook(UObject* Context, FFrame& Stack, void* Ret)
{ {
static auto ItemVariantGuidOffset = FindOffsetStruct("/Script/FortniteGame.FortKismetLibrary.K2_GiveItemToPlayer", "ItemVariantGuid", false);
auto Params = Stack.Locals; auto Params = Stack.Locals;
AFortPlayerController* PlayerController = nullptr; AFortPlayerController* PlayerController = nullptr;
UFortWorldItemDefinition* ItemDefinition = nullptr; UFortWorldItemDefinition* ItemDefinition = nullptr;
FGuid ItemVariantGuid;
int NumberToGive; int NumberToGive;
bool bNotifyPlayer; bool bNotifyPlayer;
Stack.StepCompiledIn(&PlayerController); Stack.StepCompiledIn(&PlayerController);
Stack.StepCompiledIn(&ItemDefinition); Stack.StepCompiledIn(&ItemDefinition);
if (ItemVariantGuidOffset != -1) Stack.StepCompiledIn(&ItemVariantGuid);
Stack.StepCompiledIn(&NumberToGive); Stack.StepCompiledIn(&NumberToGive);
Stack.StepCompiledIn(&bNotifyPlayer); Stack.StepCompiledIn(&bNotifyPlayer);

View File

@@ -79,10 +79,12 @@ public:
static inline void (*K2_SpawnPickupInWorldWithLootTierOriginal)(UObject* Context, FFrame& Stack, void* Ret); static inline void (*K2_SpawnPickupInWorldWithLootTierOriginal)(UObject* Context, FFrame& Stack, void* Ret);
static inline bool (*SpawnInstancedPickupInWorldOriginal)(UObject* Context, FFrame& Stack, bool* Ret); static inline bool (*SpawnInstancedPickupInWorldOriginal)(UObject* Context, FFrame& Stack, bool* Ret);
static inline void (*SpawnItemVariantPickupInWorldOriginal)(UObject* Context, FFrame& Stack, void* Ret); static inline void (*SpawnItemVariantPickupInWorldOriginal)(UObject* Context, FFrame& Stack, void* Ret);
static inline void (*PickLootDropsWithNamedWeightsOriginal)(UObject* Context, FFrame& Stack, void* Ret);
static UFortResourceItemDefinition* K2_GetResourceItemDefinition(EFortResourceType ResourceType); static UFortResourceItemDefinition* K2_GetResourceItemDefinition(EFortResourceType ResourceType);
static void ApplyCharacterCosmetics(UObject* WorldContextObject, const TArray<UObject*>& CharacterParts, UObject* PlayerState, bool* bSuccess); static void ApplyCharacterCosmetics(UObject* WorldContextObject, const TArray<UObject*>& CharacterParts, UObject* PlayerState, bool* bSuccess);
static void PickLootDropsWithNamedWeightsHook(UObject* Context, FFrame& Stack, void* Ret);
static void SpawnItemVariantPickupInWorldHook(UObject* Context, FFrame& Stack, void* Ret); static void SpawnItemVariantPickupInWorldHook(UObject* Context, FFrame& Stack, void* Ret);
static bool SpawnInstancedPickupInWorldHook(UObject* Context, FFrame& Stack, bool* Ret); static bool SpawnInstancedPickupInWorldHook(UObject* Context, FFrame& Stack, bool* Ret);
static void K2_SpawnPickupInWorldWithLootTierHook(UObject* Context, FFrame& Stack, void* Ret); static void K2_SpawnPickupInWorldWithLootTierHook(UObject* Context, FFrame& Stack, void* Ret);

View File

@@ -6,10 +6,29 @@ AFortWeapon* AFortPawn::EquipWeaponDefinition(UFortWeaponItemDefinition* WeaponD
{ {
static auto EquipWeaponDefinitionFn = FindObject<UFunction>("/Script/FortniteGame.FortPawn.EquipWeaponDefinition"); static auto EquipWeaponDefinitionFn = FindObject<UFunction>("/Script/FortniteGame.FortPawn.EquipWeaponDefinition");
struct { UObject* Def; FGuid Guid; AFortWeapon* Wep; } params{ WeaponData, ItemEntryGuid }; FGuid TrackerGuid{};
this->ProcessEvent(EquipWeaponDefinitionFn, &params);
struct { UObject* Def; FGuid Guid; AFortWeapon* Wep; } params{ WeaponData, ItemEntryGuid };
struct { UObject* Def; FGuid Guid; FGuid TrackerGuid; AFortWeapon* Wep; } S16_params{ WeaponData, ItemEntryGuid, TrackerGuid };
struct { UObject* Def; FGuid Guid; FGuid TrackerGuid; bool bDisableEquipAnimation; AFortWeapon* Wep; } S17_params{ WeaponData, ItemEntryGuid, TrackerGuid, false };
if (Fortnite_Version < 16)
{
this->ProcessEvent(EquipWeaponDefinitionFn, &params);
return params.Wep; return params.Wep;
}
else if (std::floor(Fortnite_Version) == 16)
{
this->ProcessEvent(EquipWeaponDefinitionFn, &S16_params);
return S16_params.Wep;
}
else
{
this->ProcessEvent(EquipWeaponDefinitionFn, &S17_params);
return S17_params.Wep;
}
return nullptr;
} }
bool AFortPawn::PickUpActor(AActor* PickupTarget, UFortDecoItemDefinition* PlacementDecoItemDefinition) bool AFortPawn::PickUpActor(AActor* PickupTarget, UFortDecoItemDefinition* PlacementDecoItemDefinition)

View File

@@ -46,7 +46,10 @@ void AFortPlayerPawn::ServerHandlePickupHook(AFortPlayerPawn* Pawn, AFortPickup*
static auto bPickedUpOffset = Pickup->GetOffset("bPickedUp"); static auto bPickedUpOffset = Pickup->GetOffset("bPickedUp");
if (Pickup->Get<bool>(bPickedUpOffset)) if (Pickup->Get<bool>(bPickedUpOffset))
{
LOG_INFO(LogDev, "Trying to pickup picked up weapon?");
return; return;
}
static auto IncomingPickupsOffset = Pawn->GetOffset("IncomingPickups"); static auto IncomingPickupsOffset = Pawn->GetOffset("IncomingPickups");
Pawn->Get<TArray<AFortPickup*>>(IncomingPickupsOffset).Add(Pickup); Pawn->Get<TArray<AFortPickup*>>(IncomingPickupsOffset).Add(Pickup);

View File

@@ -19,6 +19,6 @@ public:
static void RemoveItemsHook(UObject* Context, FFrame& Stack, void* Ret); static void RemoveItemsHook(UObject* Context, FFrame& Stack, void* Ret);
static void RemoveItemHook(UObject* Context, FFrame& Stack, void* Ret); static void RemoveItemHook(UObject* Context, FFrame& Stack, void* Ret);
static void GiveItemEntryToInventoryOwnerHook(UObject* Context, FFrame& Stack, void* Ret); static void GiveItemEntryToInventoryOwnerHook(UObject* Context, FFrame& Stack, void* Ret);
static void AddItemsHook(UObject* Context, FFrame& Stack, void* Ret); static void AddItemsHook(UObject* Context, FFrame& Stack, void* Ret); // Return value changes
static void AddItemHook(UObject* Context, FFrame& Stack, void* Ret); static void AddItemHook(UObject* Context, FFrame& Stack, void* Ret); // Return value changes
}; };

View File

@@ -336,6 +336,8 @@ void Offsets::FindAll()
Offsets::ReplicationFrame = 0x288; Offsets::ReplicationFrame = 0x288;
else if (Engine_Version == 419) else if (Engine_Version == 419)
Offsets::ReplicationFrame = 0xB2; Offsets::ReplicationFrame = 0xB2;
else if (Fortnite_Version == 2.5)
Offsets::ReplicationFrame = 0xCA;
} }
void Offsets::Print() void Offsets::Print()
@@ -381,7 +383,7 @@ std::vector<uint64> Addresses::GetFunctionsToNull()
{ {
std::vector<uint64> toNull; std::vector<uint64> toNull;
if (Engine_Version == 420) if (Fortnite_Version > 2.5 && Engine_Version == 420)
{ {
toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 57 48 81 EC ? ? ? ? 4C 8B 82 ? ? ? ? 48 8B F9 0F 29 70 E8 0F 29 78 D8").Get()); // Pawn Overlap toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 57 48 81 EC ? ? ? ? 4C 8B 82 ? ? ? ? 48 8B F9 0F 29 70 E8 0F 29 78 D8").Get()); // Pawn Overlap
// toNull.push_back(Memcury::Scanner::FindPattern("E8 ? ? ? ? EB 26 40 38 3D ? ? ? ?").RelativeOffset(1).Get()); // collectgarbage // toNull.push_back(Memcury::Scanner::FindPattern("E8 ? ? ? ? EB 26 40 38 3D ? ? ? ?").RelativeOffset(1).Get()); // collectgarbage

View File

@@ -87,6 +87,8 @@ DWORD WINAPI Main(LPVOID)
Addresses::Init(); Addresses::Init();
Addresses::Print(); Addresses::Print();
LOG_INFO(LogDev, "Version: {}", Fortnite_Version);
static auto GameModeDefault = FindObject<AFortGameModeAthena>(L"/Script/FortniteGame.Default__FortGameModeAthena"); static auto GameModeDefault = FindObject<AFortGameModeAthena>(L"/Script/FortniteGame.Default__FortGameModeAthena");
static auto FortPlayerControllerZoneDefault = FindObject<AFortPlayerController>(L"/Script/FortniteGame.Default__FortPlayerControllerZone"); static auto FortPlayerControllerZoneDefault = FindObject<AFortPlayerController>(L"/Script/FortniteGame.Default__FortPlayerControllerZone");
static auto FortPlayerControllerAthenaDefault = FindObject<AFortPlayerControllerAthena>(L"/Script/FortniteGame.Default__FortPlayerControllerAthena"); // FindObject<UClass>(L"/Game/Athena/Athena_PlayerController.Default__Athena_PlayerController_C"); static auto FortPlayerControllerAthenaDefault = FindObject<AFortPlayerControllerAthena>(L"/Script/FortniteGame.Default__FortPlayerControllerAthena"); // FindObject<UClass>(L"/Game/Athena/Athena_PlayerController.Default__Athena_PlayerController_C");
@@ -201,16 +203,22 @@ DWORD WINAPI Main(LPVOID)
AFortPlayerController::ServerAttemptInteractHook, (PVOID*)&AFortPlayerController::ServerAttemptInteractOriginal, false, true); AFortPlayerController::ServerAttemptInteractHook, (PVOID*)&AFortPlayerController::ServerAttemptInteractOriginal, false, true);
} }
static auto ServerRestartPlayerFn = FindObject<UFunction>(L"/Script/Engine.PlayerController.ServerRestartPlayer");
auto ZoneServerRestartPlayer = FortPlayerControllerZoneDefault->VFTable[GetFunctionIdxOrPtr(ServerRestartPlayerFn) / 8];
LOG_INFO(LogDev, "ZoneServerRestartPlayer: 0x{:x}", __int64(ZoneServerRestartPlayer) - __int64(GetModuleHandleW(0)));
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/Engine.PlayerController.ServerAcknowledgePossession"), Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/Engine.PlayerController.ServerAcknowledgePossession"),
AFortPlayerControllerAthena::ServerAcknowledgePossessionHook, nullptr, false); AFortPlayerControllerAthena::ServerAcknowledgePossessionHook, nullptr, false);
if (Engine_Version >= 424)
{
static auto ServerRestartPlayerFn = FindObject<UFunction>(L"/Script/Engine.PlayerController.ServerRestartPlayer");
auto ZoneServerRestartPlayer = FortPlayerControllerZoneDefault->VFTable[GetFunctionIdxOrPtr(ServerRestartPlayerFn) / 8];
LOG_INFO(LogDev, "ZoneServerRestartPlayer: 0x{:x}", __int64(ZoneServerRestartPlayer) - __int64(GetModuleHandleW(0)));
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, ServerRestartPlayerFn, Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, ServerRestartPlayerFn,
// ZoneServerRestartPlayer, // ZoneServerRestartPlayer,
AFortPlayerControllerAthena::ServerRestartPlayerHook, AFortPlayerControllerAthena::ServerRestartPlayerHook,
nullptr, false); nullptr, false);
}
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.ServerDropAllItems"), Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.ServerDropAllItems"),
AFortPlayerController::ServerDropAllItemsHook, nullptr, false); AFortPlayerController::ServerDropAllItemsHook, nullptr, false);
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.ServerAttemptInventoryDrop"), Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.ServerAttemptInventoryDrop"),
@@ -265,6 +273,10 @@ DWORD WINAPI Main(LPVOID)
UFortKismetLibrary::SpawnInstancedPickupInWorldHook, (PVOID*)&UFortKismetLibrary::SpawnInstancedPickupInWorldOriginal, false, true); UFortKismetLibrary::SpawnInstancedPickupInWorldHook, (PVOID*)&UFortKismetLibrary::SpawnInstancedPickupInWorldOriginal, false, true);
Hooking::MinHook::Hook(FortKismetLibraryDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortKismetLibrary.SpawnItemVariantPickupInWorld"), Hooking::MinHook::Hook(FortKismetLibraryDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortKismetLibrary.SpawnItemVariantPickupInWorld"),
UFortKismetLibrary::SpawnItemVariantPickupInWorldHook, (PVOID*)&UFortKismetLibrary::SpawnItemVariantPickupInWorldOriginal, false, true); UFortKismetLibrary::SpawnItemVariantPickupInWorldHook, (PVOID*)&UFortKismetLibrary::SpawnItemVariantPickupInWorldOriginal, false, true);
Hooking::MinHook::Hook(FortKismetLibraryDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortKismetLibrary.PickLootDropsWithNamedWeights"),
UFortKismetLibrary::PickLootDropsWithNamedWeightsHook, (PVOID*)&UFortKismetLibrary::PickLootDropsWithNamedWeightsOriginal, false, true);
// TODO Add RemoveItemFromInventoryOwner
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.DropSpecificItem"), Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.DropSpecificItem"),
AFortPlayerController::DropSpecificItemHook, (PVOID*)&AFortPlayerController::DropSpecificItemOriginal, false, true); AFortPlayerController::DropSpecificItemHook, (PVOID*)&AFortPlayerController::DropSpecificItemOriginal, false, true);
@@ -348,10 +360,13 @@ DWORD WINAPI Main(LPVOID)
AFortPlayerController::ServerAttemptAircraftJumpHook, nullptr, false); AFortPlayerController::ServerAttemptAircraftJumpHook, nullptr, false);
} }
/* Hooking::MinHook::Hook(AthenaMarkerComponentDefault, FindObject<UFunction>(L"/Script/FortniteGame.AthenaMarkerComponent.ServerAddMapMarker"), if (false)
{
Hooking::MinHook::Hook(AthenaMarkerComponentDefault, FindObject<UFunction>(L"/Script/FortniteGame.AthenaMarkerComponent.ServerAddMapMarker"),
UAthenaMarkerComponent::ServerAddMapMarkerHook, nullptr, false); UAthenaMarkerComponent::ServerAddMapMarkerHook, nullptr, false);
Hooking::MinHook::Hook(AthenaMarkerComponentDefault, FindObject<UFunction>(L"/Script/FortniteGame.AthenaMarkerComponent.ServerRemoveMapMarker"), Hooking::MinHook::Hook(AthenaMarkerComponentDefault, FindObject<UFunction>(L"/Script/FortniteGame.AthenaMarkerComponent.ServerRemoveMapMarker"),
UAthenaMarkerComponent::ServerRemoveMapMarkerHook, nullptr, false); */ UAthenaMarkerComponent::ServerRemoveMapMarkerHook, nullptr, false);
}
Hooking::MinHook::Hook((PVOID)Addresses::GetPlayerViewpoint, (PVOID)AFortPlayerControllerAthena::GetPlayerViewPointHook, (PVOID*)&AFortPlayerControllerAthena::GetPlayerViewPointOriginal); Hooking::MinHook::Hook((PVOID)Addresses::GetPlayerViewpoint, (PVOID)AFortPlayerControllerAthena::GetPlayerViewPointHook, (PVOID*)&AFortPlayerControllerAthena::GetPlayerViewPointOriginal);
Hooking::MinHook::Hook((PVOID)Addresses::TickFlush, (PVOID)UNetDriver::TickFlushHook, (PVOID*)&UNetDriver::TickFlushOriginal); Hooking::MinHook::Hook((PVOID)Addresses::TickFlush, (PVOID)UNetDriver::TickFlushHook, (PVOID*)&UNetDriver::TickFlushOriginal);

View File

@@ -217,6 +217,9 @@ static inline uint64 FindPauseBeaconRequests()
static inline uint64 FindOnRep_ZiplineState() static inline uint64 FindOnRep_ZiplineState()
{ {
if (Fortnite_Version < 7)
return 0;
static auto Addrr = Memcury::Scanner::FindStringRef(L"ZIPLINES!! Role(%s) AFortPlayerPawn::OnRep_ZiplineState ZiplineState.bIsZiplining=%d", false).Get(); static auto Addrr = Memcury::Scanner::FindStringRef(L"ZIPLINES!! Role(%s) AFortPlayerPawn::OnRep_ZiplineState ZiplineState.bIsZiplining=%d", false).Get();
if (!Addrr) if (!Addrr)
@@ -261,7 +264,7 @@ static inline uint64 FindGetMaxTickRate() // Uengine::getmaxtickrate
if (!stringRef.Get()) if (!stringRef.Get())
return 0; return 0;
return FindBytes(stringRef, { 0x48, 0x89, 0x5C }, 1000, 0, true); return FindBytes(stringRef, Fortnite_Version <= 2.5 ? std::vector<uint8_t>{ 0x40, 0x53 } : std::vector<uint8_t>{ 0x48, 0x89, 0x5C }, 1000, 0, true);
} }
static inline uint64 FindGetPlayerViewpoint() static inline uint64 FindGetPlayerViewpoint()
@@ -277,6 +280,7 @@ static inline uint64 FindGetPlayerViewpoint()
static inline uint64 FindSpawnActor() static inline uint64 FindSpawnActor()
{ {
if (Engine_Version >= 427) if (Engine_Version >= 427)
{ {
auto stat = Memcury::Scanner::FindStringRef(L"STAT_SpawnActorTime"); auto stat = Memcury::Scanner::FindStringRef(L"STAT_SpawnActorTime");
@@ -285,7 +289,7 @@ static inline uint64 FindSpawnActor()
auto Addr = Memcury::Scanner::FindStringRef(L"SpawnActor failed because no class was specified"); auto Addr = Memcury::Scanner::FindStringRef(L"SpawnActor failed because no class was specified");
if (Engine_Version >= 416 && Engine_Version <= 419) if (Engine_Version >= 416 && Fortnite_Version <= 2.5)
return FindBytes(Addr, { 0x40, 0x55 }, 3000, 0, true); return FindBytes(Addr, { 0x40, 0x55 }, 3000, 0, true);
return FindBytes(Addr, { 0x4C, 0x8B, 0xDC }, 3000, 0, true); return FindBytes(Addr, { 0x4C, 0x8B, 0xDC }, 3000, 0, true);
@@ -523,7 +527,9 @@ static inline uint64 FindActorGetNetMode()
auto AActorGetNetmodeStrRef = Memcury::Scanner::FindStringRef(L"STAT_ServerUpdateCamera", false); auto AActorGetNetmodeStrRef = Memcury::Scanner::FindStringRef(L"STAT_ServerUpdateCamera", false);
if (!AActorGetNetmodeStrRef.Get()) if (!AActorGetNetmodeStrRef.Get())
return 0; {
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 57 48 83 EC 20 48 8B 01 48 8B D9 FF 90 ? ? ? ? 4C 8B").Get();
}
return Memcury::Scanner(FindBytes(AActorGetNetmodeStrRef, { 0xE8 }, 255, 0, true)).RelativeOffset(1).Get(); return Memcury::Scanner(FindBytes(AActorGetNetmodeStrRef, { 0xE8 }, 255, 0, true)).RelativeOffset(1).Get();
} }
@@ -550,6 +556,15 @@ static inline uint64 FindTickFlush()
} }
auto Addr = Memcury::Scanner::FindStringRef(L"STAT_NetTickFlush"); auto Addr = Memcury::Scanner::FindStringRef(L"STAT_NetTickFlush");
if (!Addr.Get())
{
if (Engine_Version == 420) // 2.5
{
return Memcury::Scanner::FindPattern("4C 8B DC 55 49 8D AB ? ? ? ? 48 81 EC ? ? ? ? 45 0F 29 43 ? 45 0F 29 4B ? 48 8B 05 ? ? ? ? 48 33").Get();
}
}
return FindBytes(Addr, (Fortnite_Version < 18 ? std::vector<uint8_t>{ 0x4C, 0x8B } : std::vector<uint8_t>{ 0x48, 0x8B, 0xC4 }), 1000, 0, true); return FindBytes(Addr, (Fortnite_Version < 18 ? std::vector<uint8_t>{ 0x4C, 0x8B } : std::vector<uint8_t>{ 0x48, 0x8B, 0xC4 }), 1000, 0, true);
} }
@@ -619,6 +634,8 @@ static inline uint64 FindGIsServer()
// if (Fortnite_Version == 19.10) // if (Fortnite_Version == 19.10)
// return __int64(GetModuleHandleW(0)) + 0xB30CF9D; // return __int64(GetModuleHandleW(0)) + 0xB30CF9D;
if (Fortnite_Version == 2.5)
return __int64(GetModuleHandleW(0)) + 0x46AD735;
if (Fortnite_Version == 12.41) if (Fortnite_Version == 12.41)
return __int64(GetModuleHandleW(0)) + 0x804B65A; return __int64(GetModuleHandleW(0)) + 0x804B65A;
@@ -706,6 +723,9 @@ static inline uint64 FindChangeGameSessionId()
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 55 41 54 41 55 41 56 41 57 48 8B EC 48 83 EC 70 4C 8B FA 4C").Get(); return Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 55 41 54 41 55 41 56 41 57 48 8B EC 48 83 EC 70 4C 8B FA 4C").Get();
} }
if (Fortnite_Version == 2.5)
return Memcury::Scanner::FindPattern("40 55 56 41 56 48 8B EC 48 81 EC ? ? ? ? 48 8B 01 4C 8B F2").Get();
auto Addr = Memcury::Scanner::FindStringRef(L"Changing GameSessionId from '%s' to '%s'"); auto Addr = Memcury::Scanner::FindStringRef(L"Changing GameSessionId from '%s' to '%s'");
return FindBytes(Addr, { 0x40, 0x55 }, 2000, 0, true); return FindBytes(Addr, { 0x40, 0x55 }, 2000, 0, true);
} }
@@ -718,6 +738,8 @@ static inline uint64 FindDispatchRequest()
static inline uint64 FindGIsClient() static inline uint64 FindGIsClient()
{ {
if (Fortnite_Version == 2.5)
return __int64(GetModuleHandleW(0)) + 0x46AD734;
if (Fortnite_Version == 4.1) if (Fortnite_Version == 4.1)
return __int64(GetModuleHandleW(0)) + 0x4BF6F17; return __int64(GetModuleHandleW(0)) + 0x4BF6F17;
@@ -857,7 +879,7 @@ static inline uint64 FindPickTeam()
if (!Addr.Get()) if (!Addr.Get())
Addr = Memcury::Scanner::FindStringRef(L"PickTeam for [%s] used beacon value [%s]"); Addr = Memcury::Scanner::FindStringRef(L"PickTeam for [%s] used beacon value [%s]");
return FindBytes(Addr, { 0x40, 0x55 }, 1000, 0, true); return FindBytes(Addr, Fortnite_Version <= 2.5 ? std::vector<uint8_t>{ 0x48, 0x89, 0x6C } : std::vector<uint8_t>{ 0x40, 0x55 }, 1000, 0, true);
} }
static inline uint64 FindInternalTryActivateAbility() static inline uint64 FindInternalTryActivateAbility()
@@ -884,17 +906,14 @@ static inline uint64 FindInternalTryActivateAbility()
static inline uint64 FindFrameStep() static inline uint64 FindFrameStep()
{ {
return Memcury::Scanner::FindPattern("48 8B 41 20 4C 8B D2 48 8B D1 44 0F B6 08 48 FF").Get(); return Memcury::Scanner::FindPattern("48 8B 41 20 4C 8B D2 48 8B D1 44 0F B6 08 48 FF").Get();
if (Engine_Version == 423)
return Memcury::Scanner::FindPattern("48 8B 41 20 4C 8B D2 48 8B D1 44 0F B6 08 48 FF").Get();
if (Engine_Version == 426)
return Memcury::Scanner::FindPattern("48 8B 41 20 4C 8B D2 48 8B D1 44 0F B6 08 48 FF C0 48 89 41 20 41").Get();
return 0;
} }
static inline uint64 FindCanActivateAbility() static inline uint64 FindCanActivateAbility()
{ {
return 0;
// this doesn't work on like >2.5
if (Engine_Version == 421 || Engine_Version == 422) if (Engine_Version == 421 || Engine_Version == 422)
return Memcury::Scanner::FindPattern("4C 89 4C 24 20 55 56 57 41 56 48 8D 6C 24 D1").Get(); return Memcury::Scanner::FindPattern("4C 89 4C 24 20 55 56 57 41 56 48 8D 6C 24 D1").Get();
@@ -970,7 +989,7 @@ static inline uint64 FindReplaceBuildingActor()
static inline uint64 FindSendClientAdjustment() static inline uint64 FindSendClientAdjustment()
{ {
if (Engine_Version >= 416 && Engine_Version < 420) if (Fortnite_Version <= 2.5)
return Memcury::Scanner::FindPattern("40 53 48 83 EC 20 48 8B 99 ? ? ? ? 48 39 99 ? ? ? ? 74 0A 48 83 B9").Get(); return Memcury::Scanner::FindPattern("40 53 48 83 EC 20 48 8B 99 ? ? ? ? 48 39 99 ? ? ? ? 74 0A 48 83 B9").Get();
return 0; return 0;
@@ -980,7 +999,7 @@ static inline uint64 FindReplicateActor()
{ {
if (Engine_Version == 416) if (Engine_Version == 416)
return Memcury::Scanner::FindPattern("40 55 53 57 41 56 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 48 8D 59 68 4C 8B F1 48 8B").Get(); return Memcury::Scanner::FindPattern("40 55 53 57 41 56 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 48 8D 59 68 4C 8B F1 48 8B").Get();
if (Engine_Version == 419) if (Engine_Version >= 419 && Fortnite_Version <= 2.5)
return Memcury::Scanner::FindPattern("40 55 56 41 54 41 55 41 56 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 4C 8B E9 48 8B 49 68 48").Get(); return Memcury::Scanner::FindPattern("40 55 56 41 54 41 55 41 56 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 4C 8B E9 48 8B 49 68 48").Get();
return 0; return 0;
@@ -988,7 +1007,7 @@ static inline uint64 FindReplicateActor()
static inline uint64 FindCreateChannel() static inline uint64 FindCreateChannel()
{ {
if (Engine_Version == 416 && Engine_Version < 420) if (Fortnite_Version <= 2.5)
return Memcury::Scanner::FindPattern("40 56 57 41 54 41 55 41 57 48 83 EC 60 48 8B 01 41 8B F9 45 0F B6 E0").Get(); return Memcury::Scanner::FindPattern("40 56 57 41 54 41 55 41 57 48 83 EC 60 48 8B 01 41 8B F9 45 0F B6 E0").Get();
return 0; return 0;
@@ -998,7 +1017,7 @@ static inline uint64 FindSetChannelActor()
{ {
if (Engine_Version == 416) if (Engine_Version == 416)
return Memcury::Scanner::FindPattern("4C 8B DC 55 53 57 41 54 49 8D AB ? ? ? ? 48 81 EC ? ? ? ? 45 33").Get(); return Memcury::Scanner::FindPattern("4C 8B DC 55 53 57 41 54 49 8D AB ? ? ? ? 48 81 EC ? ? ? ? 45 33").Get();
if (Engine_Version == 419) if (Engine_Version >= 419 && Fortnite_Version <= 2.5)
return Memcury::Scanner::FindPattern("48 8B C4 55 53 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 48 89 70 E8 48 8B D9").Get(); return Memcury::Scanner::FindPattern("48 8B C4 55 53 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 48 89 70 E8 48 8B D9").Get();
return 0; return 0;
@@ -1010,6 +1029,8 @@ static inline uint64 FindCallPreReplication()
return Memcury::Scanner::FindPattern("48 85 D2 0F 84 ? ? ? ? 48 8B C4 55 57 41 57 48 8D 68 A1 48 81 EC").Get(); return Memcury::Scanner::FindPattern("48 85 D2 0F 84 ? ? ? ? 48 8B C4 55 57 41 57 48 8D 68 A1 48 81 EC").Get();
if (Engine_Version == 419) if (Engine_Version == 419)
return Memcury::Scanner::FindPattern("48 85 D2 0F 84 ? ? ? ? 48 8B C4 55 57 41 54 48 8D 68 A1 48 81 EC ? ? ? ? 48 89 58 08 4C").Get(); return Memcury::Scanner::FindPattern("48 85 D2 0F 84 ? ? ? ? 48 8B C4 55 57 41 54 48 8D 68 A1 48 81 EC ? ? ? ? 48 89 58 08 4C").Get();
if (Fortnite_Version == 2.5)
return Memcury::Scanner::FindPattern("48 85 D2 0F 84 ? ? ? ? 56 41 56 48 83 EC 38 4C 8B F2").Get();
return 0; return 0;
} }