mirror of
https://github.com/Milxnor/Project-Reboot-3.0.git
synced 2026-01-13 02:42:22 +01:00
fix pickup notifications, fix 1.11 crash, remove pickup notifications (to fix restarting and random crashes), fix s7 crash, add delay before switching level, fix some issues with gadgets, fix character parts being buggy.
502 lines
20 KiB
C++
502 lines
20 KiB
C++
#include "addresses.h"
|
|
|
|
#include "UObjectGlobals.h"
|
|
#include "World.h"
|
|
#include "NetDriver.h"
|
|
#include "GameSession.h"
|
|
|
|
#include "NetSerialization.h"
|
|
|
|
#include "Array.h"
|
|
#include "AbilitySystemComponent.h"
|
|
|
|
#include "finder.h"
|
|
#include <regex>
|
|
|
|
#include "ai.h"
|
|
#include "BuildingActor.h"
|
|
#include "FortPlaysetItemDefinition.h"
|
|
#include "FortGameModeAthena.h"
|
|
#include "UObjectArray.h"
|
|
|
|
void Addresses::SetupVersion()
|
|
{
|
|
static FString(*GetEngineVersion)() = decltype(GetEngineVersion)(Memcury::Scanner::FindPattern("40 53 48 83 EC 20 48 8B D9 E8 ? ? ? ? 48 8B C8 41 B8 04 ? ? ? 48 8B D3", false).Get());
|
|
|
|
std::string FullVersion;
|
|
FString toFree;
|
|
|
|
if (!GetEngineVersion)
|
|
{
|
|
auto VerStr = Memcury::Scanner::FindPattern("2B 2B 46 6F 72 74 6E 69 74 65 2B 52 65 6C 65 61 73 65 2D ? ? ? ?").Get();
|
|
|
|
// if (!VerStr)
|
|
|
|
FullVersion = decltype(FullVersion.c_str())(VerStr);
|
|
Engine_Version = 500;
|
|
}
|
|
|
|
else
|
|
{
|
|
toFree = GetEngineVersion();
|
|
FullVersion = toFree.ToString();
|
|
}
|
|
|
|
std::string FNVer = FullVersion;
|
|
std::string EngineVer = FullVersion;
|
|
std::string CLStr;
|
|
|
|
if (!FullVersion.contains("Live") && !FullVersion.contains(("Next")) && !FullVersion.contains(("Cert")))
|
|
{
|
|
if (GetEngineVersion)
|
|
{
|
|
FNVer.erase(0, FNVer.find_last_of(("-"), FNVer.length() - 1) + 1);
|
|
EngineVer.erase(EngineVer.find_first_of(("-"), FNVer.length() - 1), 40);
|
|
|
|
if (EngineVer.find_first_of(".") != EngineVer.find_last_of(".")) // this is for 4.21.0 and itll remove the .0
|
|
EngineVer.erase(EngineVer.find_last_of((".")), 2);
|
|
|
|
Engine_Version = std::stod(EngineVer) * 100;
|
|
}
|
|
|
|
else
|
|
{
|
|
const std::regex base_regex(("-([0-9.]*)-"));
|
|
std::cmatch base_match;
|
|
|
|
std::regex_search(FullVersion.c_str(), base_match, base_regex);
|
|
|
|
FNVer = base_match[1];
|
|
}
|
|
|
|
Fortnite_Version = std::stod(FNVer);
|
|
|
|
if (Fortnite_Version >= 16.00 && Fortnite_Version <= 18.40)
|
|
Engine_Version = 427; // 4.26.1;
|
|
}
|
|
|
|
else
|
|
{
|
|
// TODO
|
|
// Engine_Version = FullVersion.contains(("Next")) ? 419 : 416;
|
|
CLStr = FullVersion.substr(FullVersion.find_first_of('-') + 1);
|
|
CLStr = CLStr.substr(0, CLStr.find_first_of('+'));
|
|
Fortnite_CL = std::stoi(CLStr);
|
|
Engine_Version = Fortnite_CL <= 3775276 ? 416 : 419; // std::stoi(FullVersion.substr(0, FullVersion.find_first_of('-')));
|
|
Fortnite_Version = FullVersion.contains(("Next")) ? 2.4 : 1.8;
|
|
}
|
|
|
|
// Fortnite_Season = std::floor(Fortnite_Version);
|
|
|
|
FFastArraySerializer::bNewSerializer = Fortnite_Version >= 8.30;
|
|
|
|
if (Fortnite_CL == 3807424)
|
|
Fortnite_Version = 1.11;
|
|
if (Fortnite_CL == 3700114)
|
|
Fortnite_Version = 1.72;
|
|
if (Fortnite_CL == 3724489)
|
|
Fortnite_Version = 1.8;
|
|
if (Fortnite_CL == 3870737)
|
|
Fortnite_Version = 2.42;
|
|
}
|
|
|
|
void Addresses::FindAll()
|
|
{
|
|
auto Base = __int64(GetModuleHandleW(0));
|
|
|
|
LOG_INFO(LogDev, "Finding ProcessEvent");
|
|
Addresses::ProcessEvent = FindProcessEvent();
|
|
UObject::ProcessEventOriginal = decltype(UObject::ProcessEventOriginal)(ProcessEvent);
|
|
LOG_INFO(LogDev, "Finding StaticFindObject");
|
|
|
|
Addresses::StaticFindObject = FindStaticFindObject();
|
|
StaticFindObjectOriginal = decltype(StaticFindObjectOriginal)(StaticFindObject);
|
|
LOG_INFO(LogDev, "StaticFindObject: 0x{:x}", StaticFindObject - Base);
|
|
LOG_INFO(LogDev, "Finding GetPlayerViewpoint");
|
|
|
|
Addresses::GetPlayerViewpoint = FindGetPlayerViewpoint();
|
|
LOG_INFO(LogDev, "Finding CreateNetDriver");
|
|
|
|
Addresses::CreateNetDriver = FindCreateNetDriver();
|
|
LOG_INFO(LogDev, "Finding InitHost");
|
|
|
|
Addresses::InitHost = FindInitHost();
|
|
LOG_INFO(LogDev, "Finding PauseBeaconRequests");
|
|
|
|
Addresses::PauseBeaconRequests = FindPauseBeaconRequests();
|
|
LOG_INFO(LogDev, "Finding SpawnActor");
|
|
|
|
Addresses::SpawnActor = FindSpawnActor();
|
|
LOG_INFO(LogDev, "Finding InitListen");
|
|
|
|
Addresses::InitListen = FindInitListen();
|
|
LOG_INFO(LogDev, "Finding SetWorld");
|
|
|
|
Addresses::SetWorld = FindSetWorld();
|
|
LOG_INFO(LogDev, "Finding KickPlayer");
|
|
|
|
Addresses::KickPlayer = FindKickPlayer();
|
|
LOG_INFO(LogDev, "Finding TickFlush");
|
|
|
|
Addresses::TickFlush = FindTickFlush();
|
|
LOG_INFO(LogDev, "Finding GetNetMode");
|
|
|
|
Addresses::GetNetMode = FindGetNetMode();
|
|
LOG_INFO(LogDev, "Finding Realloc");
|
|
|
|
Addresses::Realloc = FindRealloc();
|
|
LOG_INFO(LogDev, "Finding CollectGarbage");
|
|
|
|
Addresses::CollectGarbage = FindCollectGarbage();
|
|
LOG_INFO(LogDev, "Finding NoMCP");
|
|
|
|
Addresses::NoMCP = FindNoMCP();
|
|
LOG_INFO(LogDev, "Finding PickTeam");
|
|
|
|
Addresses::PickTeam = FindPickTeam();
|
|
LOG_INFO(LogDev, "Finding InternalTryActivateAbility");
|
|
|
|
Addresses::InternalTryActivateAbility = FindInternalTryActivateAbility();
|
|
LOG_INFO(LogDev, "Finding GiveAbility");
|
|
|
|
Addresses::GiveAbility = FindGiveAbility();
|
|
LOG_INFO(LogDev, "Finding CantBuild");
|
|
|
|
Addresses::CantBuild = FindCantBuild();
|
|
LOG_INFO(LogDev, "Finding ReplaceBuildingActor");
|
|
|
|
Addresses::ReplaceBuildingActor = FindReplaceBuildingActor();
|
|
LOG_INFO(LogDev, "Finding GiveAbilityAndActivateOnce");
|
|
|
|
Addresses::GiveAbilityAndActivateOnce = FindGiveAbilityAndActivateOnce();
|
|
LOG_INFO(LogDev, "Finding OnDamageServer");
|
|
|
|
Addresses::OnDamageServer = FindOnDamageServer();
|
|
LOG_INFO(LogDev, "Finding StaticLoadObject");
|
|
|
|
Addresses::StaticLoadObject = FindStaticLoadObject();
|
|
LOG_INFO(LogDev, "Finding ActorGetNetMode");
|
|
|
|
Addresses::ActorGetNetMode = FindActorGetNetMode();
|
|
LOG_INFO(LogDev, "Finding ChangeGameSessionId");
|
|
|
|
Addresses::ChangeGameSessionId = FindChangeGameSessionId();
|
|
LOG_INFO(LogDev, "Finding DispatchRequest");
|
|
|
|
Addresses::DispatchRequest = FindDispatchRequest();
|
|
LOG_INFO(LogDev, "Finding AddNavigationSystemToWorld");
|
|
|
|
Addresses::AddNavigationSystemToWorld = FindAddNavigationSystemToWorld();
|
|
LOG_INFO(LogDev, "Finding NavSystemCleanUp");
|
|
|
|
Addresses::NavSystemCleanUp = FindNavSystemCleanUp();
|
|
LOG_INFO(LogDev, "Finding LoadPlayset");
|
|
|
|
Addresses::LoadPlayset = FindLoadPlayset();
|
|
LOG_INFO(LogDev, "Finding SetZoneToIndex");
|
|
|
|
Addresses::SetZoneToIndex = FindSetZoneToIndex();
|
|
LOG_INFO(LogDev, "Finding CompletePickupAnimation");
|
|
|
|
Addresses::CompletePickupAnimation = FindCompletePickupAnimation();
|
|
LOG_INFO(LogDev, "Finding CanActivateAbility");
|
|
|
|
Addresses::CanActivateAbility = FindCanActivateAbility();
|
|
LOG_INFO(LogDev, "Finding SpecConstructor");
|
|
|
|
Addresses::SpecConstructor = FindSpecConstructor();
|
|
LOG_INFO(LogDev, "Finding FrameStep");
|
|
|
|
Addresses::FrameStep = FindFrameStep();
|
|
LOG_INFO(LogDev, "Finding ObjectArray");
|
|
|
|
Addresses::ObjectArray = FindObjectArray();
|
|
LOG_INFO(LogDev, "Finding ReplicateActor");
|
|
|
|
Addresses::ReplicateActor = FindReplicateActor();
|
|
LOG_INFO(LogDev, "Finding SetChannelActor");
|
|
|
|
Addresses::SetChannelActor = FindSetChannelActor();
|
|
LOG_INFO(LogDev, "Finding SendClientAdjustment");
|
|
|
|
Addresses::SendClientAdjustment = FindSendClientAdjustment();
|
|
LOG_INFO(LogDev, "Finding CreateChannel");
|
|
|
|
Addresses::CreateChannel = FindCreateChannel();
|
|
LOG_INFO(LogDev, "Finding CallPreReplication");
|
|
|
|
Addresses::CallPreReplication = FindCallPreReplication();
|
|
LOG_INFO(LogDev, "Finding OnRep_ZiplineState");
|
|
|
|
Addresses::OnRep_ZiplineState = FindOnRep_ZiplineState();
|
|
LOG_INFO(LogDev, "Finding GetMaxTickRate");
|
|
|
|
Addresses::GetMaxTickRate = FindGetMaxTickRate();
|
|
|
|
LOG_INFO(LogDev, "Finding RemoveFromAlivePlayers");
|
|
Addresses::RemoveFromAlivePlayers = FindRemoveFromAlivePlayers();
|
|
|
|
LOG_INFO(LogDev, "Finding ActorChannelClose");
|
|
Addresses::ActorChannelClose = FindActorChannelClose();
|
|
|
|
LOG_INFO(LogDev, "Finding StepExplicitProperty");
|
|
Addresses::FrameStepExplicitProperty = FindStepExplicitProperty();
|
|
|
|
LOG_INFO(LogDev, "Finding Free");
|
|
Addresses::Free = FindFree();
|
|
|
|
LOG_INFO(LogDev, "Finding ClearAbility");
|
|
Addresses::ClearAbility = FindClearAbility();
|
|
|
|
LOG_INFO(LogDev, "Finding ApplyGadgetData");
|
|
Addresses::ApplyGadgetData = FindApplyGadgetData();
|
|
|
|
LOG_INFO(LogDev, "Finding RemoveGadgetData");
|
|
Addresses::RemoveGadgetData = FindRemoveGadgetData();
|
|
|
|
LOG_INFO(LogDev, "Finding GetInterfaceAddress");
|
|
Addresses::GetInterfaceAddress = FindGetInterfaceAddress();
|
|
|
|
LOG_INFO(LogDev, "Finding ApplyCharacterCustomization");
|
|
Addresses::ApplyCharacterCustomization = FindApplyCharacterCustomization();
|
|
|
|
LOG_INFO(LogDev, "Finished finding!");
|
|
}
|
|
|
|
void Addresses::Print()
|
|
{
|
|
auto Base = __int64(GetModuleHandleW(0));
|
|
|
|
LOG_INFO(LogDev, "Base: 0x{:x}", Base);
|
|
LOG_INFO(LogDev, "ProcessEvent: 0x{:x}", ProcessEvent - Base);
|
|
LOG_INFO(LogDev, "StaticFindObject: 0x{:x}", StaticFindObject - Base);
|
|
LOG_INFO(LogDev, "GetPlayerViewpoint: 0x{:x}", GetPlayerViewpoint - Base);
|
|
LOG_INFO(LogDev, "CreateNetDriver: 0x{:x}", CreateNetDriver - Base);
|
|
LOG_INFO(LogDev, "InitHost: 0x{:x}", InitHost - Base);
|
|
LOG_INFO(LogDev, "PauseBeaconRequests: 0x{:x}", PauseBeaconRequests - Base);
|
|
LOG_INFO(LogDev, "SpawnActor: 0x{:x}", SpawnActor - Base);
|
|
LOG_INFO(LogDev, "InitListen: 0x{:x}", InitListen - Base);
|
|
LOG_INFO(LogDev, "SetWorld: 0x{:x}", SetWorld - Base);
|
|
LOG_INFO(LogDev, "KickPlayer: 0x{:x}", KickPlayer - Base);
|
|
LOG_INFO(LogDev, "TickFlush: 0x{:x}", TickFlush - Base);
|
|
LOG_INFO(LogDev, "GetNetMode: 0x{:x}", GetNetMode - Base);
|
|
LOG_INFO(LogDev, "Realloc: 0x{:x}", Realloc - Base);
|
|
LOG_INFO(LogDev, "CollectGarbage: 0x{:x}", CollectGarbage - Base);
|
|
LOG_INFO(LogDev, "NoMCP: 0x{:x}", NoMCP - Base);
|
|
LOG_INFO(LogDev, "PickTeam: 0x{:x}", PickTeam - Base);
|
|
LOG_INFO(LogDev, "InternalTryActivateAbility: 0x{:x}", InternalTryActivateAbility - Base);
|
|
LOG_INFO(LogDev, "GiveAbility: 0x{:x}", GiveAbility - Base);
|
|
LOG_INFO(LogDev, "CantBuild: 0x{:x}", CantBuild - Base);
|
|
LOG_INFO(LogDev, "ReplaceBuildingActor: 0x{:x}", ReplaceBuildingActor - Base);
|
|
LOG_INFO(LogDev, "GiveAbilityAndActivateOnce: 0x{:x}", GiveAbilityAndActivateOnce - Base);
|
|
LOG_INFO(LogDev, "OnDamageServer: 0x{:x}", OnDamageServer - Base);
|
|
LOG_INFO(LogDev, "StaticLoadObject: 0x{:x}", StaticLoadObject - Base);
|
|
LOG_INFO(LogDev, "ActorGetNetMode: 0x{:x}", ActorGetNetMode - Base);
|
|
LOG_INFO(LogDev, "ChangeGameSessionId: 0x{:x}", ChangeGameSessionId - Base);
|
|
LOG_INFO(LogDev, "DispatchRequest: 0x{:x}", DispatchRequest - Base);
|
|
LOG_INFO(LogDev, "AddNavigationSystemToWorld: 0x{:x}", AddNavigationSystemToWorld - Base);
|
|
LOG_INFO(LogDev, "NavSystemCleanUp: 0x{:x}", NavSystemCleanUp - Base);
|
|
LOG_INFO(LogDev, "LoadPlayset: 0x{:x}", LoadPlayset - Base);
|
|
LOG_INFO(LogDev, "SetZoneToIndex: 0x{:x}", SetZoneToIndex - Base);
|
|
LOG_INFO(LogDev, "CompletePickupAnimation: 0x{:x}", CompletePickupAnimation - Base);
|
|
LOG_INFO(LogDev, "CanActivateAbility: 0x{:x}", CanActivateAbility - Base);
|
|
LOG_INFO(LogDev, "SpecConstructor: 0x{:x}", SpecConstructor - Base);
|
|
LOG_INFO(LogDev, "FrameStep: 0x{:x}", FrameStep - Base);
|
|
LOG_INFO(LogDev, "ObjectArray: 0x{:x}", ObjectArray - Base);
|
|
LOG_INFO(LogDev, "ReplicateActor: 0x{:x}", ReplicateActor - Base);
|
|
LOG_INFO(LogDev, "SetChannelActor: 0x{:x}", SetChannelActor - Base);
|
|
LOG_INFO(LogDev, "SendClientAdjustment: 0x{:x}", SendClientAdjustment - Base);
|
|
LOG_INFO(LogDev, "CreateChannel: 0x{:x}", CreateChannel - Base);
|
|
LOG_INFO(LogDev, "CallPreReplication: 0x{:x}", CallPreReplication - Base);
|
|
LOG_INFO(LogDev, "OnRep_ZiplineState: 0x{:x}", OnRep_ZiplineState - Base);
|
|
LOG_INFO(LogDev, "GetMaxTickRate: 0x{:x}", GetMaxTickRate - Base);
|
|
LOG_INFO(LogDev, "RemoveFromAlivePlayers: 0x{:x}", RemoveFromAlivePlayers - Base);
|
|
LOG_INFO(LogDev, "ActorChannelClose: 0x{:x}", ActorChannelClose - Base);
|
|
LOG_INFO(LogDev, "FrameStepExplicitProperty: 0x{:x}", FrameStepExplicitProperty - Base);
|
|
LOG_INFO(LogDev, "Free: 0x{:x}", Free - Base);
|
|
LOG_INFO(LogDev, "ClearAbility: 0x{:x}", ClearAbility - Base);
|
|
LOG_INFO(LogDev, "ApplyGadgetData: 0x{:x}", ApplyGadgetData - Base);
|
|
LOG_INFO(LogDev, "RemoveGadgetData: 0x{:x}", RemoveGadgetData - Base);
|
|
LOG_INFO(LogDev, "GetInterfaceAddress: 0x{:x}", GetInterfaceAddress - Base);
|
|
LOG_INFO(LogDev, "ApplyCharacterCustomization: 0x{:x}", ApplyCharacterCustomization - Base);
|
|
}
|
|
|
|
void Offsets::FindAll()
|
|
{
|
|
Offsets::Offset_Internal = Engine_Version >= 425 && std::floor(Fortnite_Version) < 20 ? 0x4C : 0x44;
|
|
Offsets::SuperStruct = Engine_Version >= 422 ? 0x40 : 0x30;
|
|
Offsets::Children = Engine_Version >= 425 ? 0x50 : Offsets::SuperStruct + 8;
|
|
Offsets::PropertiesSize = Offsets::Children + 8;
|
|
|
|
if (Engine_Version >= 416 && Engine_Version <= 421)
|
|
Offsets::Func = 0xB0;
|
|
else if (Engine_Version >= 422 && Engine_Version <= 424)
|
|
Offsets::Func = 0xC0;
|
|
else if (Engine_Version == 425)
|
|
Offsets::Func = 0xF0;
|
|
else if (Engine_Version >= 426)
|
|
Offsets::Func = 0xD8;
|
|
|
|
if (Engine_Version == 420)
|
|
Offsets::ServerReplicateActors = 0x53;
|
|
else if (Engine_Version == 421)
|
|
Offsets::ServerReplicateActors = std::floor(Fortnite_Version) == 5 ? 0x54 : 0x56;
|
|
else if (Engine_Version >= 422 && Engine_Version <= 424)
|
|
Offsets::ServerReplicateActors = Fortnite_Version >= 7.40 && Fortnite_Version < 8.40 ? 0x57 :
|
|
Engine_Version == 424 ? (Fortnite_Version >= 11.00 && Fortnite_Version <= 11.10 ? 0x57 :
|
|
(Fortnite_Version == 11.30 || Fortnite_Version == 11.31 ? 0x59 : 0x5A)) : 0x56;
|
|
|
|
// ^ I know this makes no sense, 7.40-8.40 is 0x57, other 7-10 is 0x56, 11.00-11.10 = 0x57, 11.30-11.31 = 0x59, other S11 is 0x5A
|
|
|
|
else if (std::floor(Fortnite_Version) == 12 || std::floor(Fortnite_Version) == 13)
|
|
Offsets::ServerReplicateActors = 0x5D;
|
|
else if (std::floor(Fortnite_Version) == 14 || Fortnite_Version <= 15.2) // never tested 15.2
|
|
Offsets::ServerReplicateActors = 0x5E;
|
|
else if (Fortnite_Version >= 15.3 && Engine_Version < 500) // 15.3-18 = 0x5F
|
|
Offsets::ServerReplicateActors = 0x5F;
|
|
else if (std::floor(Fortnite_Version) >= 19 && std::floor(Fortnite_Version) <= 20)
|
|
Offsets::ServerReplicateActors = 0x66;
|
|
else if (std::floor(Fortnite_Version) >= 21)
|
|
Offsets::ServerReplicateActors = 0x67; // checked onb 22.30
|
|
|
|
if (Engine_Version == 416) // checked on 1.7.2 & 1.8
|
|
{
|
|
Offsets::NetworkObjectList = 0x3F8;
|
|
Offsets::ReplicationFrame = 0x288;
|
|
}
|
|
if (Fortnite_Version == 2.42)
|
|
{
|
|
Offsets::ReplicationFrame = 0x2C8;
|
|
}
|
|
if (Fortnite_Version == 2.5)
|
|
{
|
|
Offsets::NetworkObjectList = 0x4F0;
|
|
Offsets::ReplicationFrame = 0x328;
|
|
}
|
|
if (Engine_Version == 419) // checked 2.4.2 & 1.11
|
|
{
|
|
Offsets::NetworkObjectList = 0x490;
|
|
Offsets::ReplicationFrame = 0x2C8;
|
|
}
|
|
|
|
Offsets::IsNetRelevantFor = FindIsNetRelevantForOffset();
|
|
}
|
|
|
|
void Offsets::Print()
|
|
{
|
|
LOG_INFO(LogDev, "Offset_Internal: 0x{:x}", Offset_Internal);
|
|
LOG_INFO(LogDev, "SuperStruct: 0x{:x}", SuperStruct);
|
|
LOG_INFO(LogDev, "Children: 0x{:x}", Children);
|
|
LOG_INFO(LogDev, "PropertiesSize: 0x{:x}", PropertiesSize);
|
|
LOG_INFO(LogDev, "Func: 0x{:x}", Func);
|
|
LOG_INFO(LogDev, "ServerReplicateActors: 0x{:x}", ServerReplicateActors);
|
|
LOG_INFO(LogDev, "ReplicationFrame: 0x{:x}", ReplicationFrame);
|
|
LOG_INFO(LogDev, "IsNetRelevantFor: 0x{:x}", IsNetRelevantFor);
|
|
}
|
|
|
|
void Addresses::Init()
|
|
{
|
|
// UObject::ProcessEventOriginal = decltype(UObject::ProcessEventOriginal)(ProcessEvent); // we do this in Addresses::FindAll()
|
|
// StaticFindObjectOriginal = decltype(StaticFindObjectOriginal)(StaticFindObject); // we do this in Addresses::FindAll()
|
|
UWorld::SpawnActorOriginal = decltype(UWorld::SpawnActorOriginal)(SpawnActor);
|
|
UNetDriver::InitListenOriginal = decltype(UNetDriver::InitListenOriginal)(InitListen);
|
|
AGameSession::KickPlayerOriginal = decltype(AGameSession::KickPlayerOriginal)(KickPlayer);
|
|
UNetDriver::TickFlushOriginal = decltype(UNetDriver::TickFlushOriginal)(TickFlush);
|
|
FMemory::Realloc = decltype(FMemory::Realloc)(Realloc);
|
|
UAbilitySystemComponent::GiveAbilityOriginal = decltype(UAbilitySystemComponent::GiveAbilityOriginal)(GiveAbility);
|
|
UAbilitySystemComponent::InternalTryActivateAbilityOriginal = decltype(UAbilitySystemComponent::InternalTryActivateAbilityOriginal)(InternalTryActivateAbility);
|
|
UAbilitySystemComponent::InternalTryActivateAbilityOriginal2 = decltype(UAbilitySystemComponent::InternalTryActivateAbilityOriginal2)(InternalTryActivateAbility);
|
|
ABuildingActor::OnDamageServerOriginal = decltype(ABuildingActor::OnDamageServerOriginal)(OnDamageServer);
|
|
StaticLoadObjectOriginal = decltype(StaticLoadObjectOriginal)(StaticLoadObject);
|
|
|
|
static auto DefaultNetDriver = FindObject("/Script/Engine.Default__NetDriver");
|
|
Addresses::SetWorld = Engine_Version < 426 ? Addresses::SetWorld : __int64(DefaultNetDriver->VFTable[Addresses::SetWorld]);
|
|
UNetDriver::SetWorldOriginal = decltype(UNetDriver::SetWorldOriginal)(SetWorld);
|
|
|
|
AddNavigationSystemToWorldOriginal = decltype(AddNavigationSystemToWorldOriginal)(AddNavigationSystemToWorld);
|
|
NavSystemCleanUpOriginal = decltype(NavSystemCleanUpOriginal)(Addresses::NavSystemCleanUp);
|
|
LoadPlaysetOriginal = decltype(LoadPlaysetOriginal)(Addresses::LoadPlayset);
|
|
AFortGameModeAthena::SetZoneToIndexOriginal = decltype(AFortGameModeAthena::SetZoneToIndexOriginal)(Addresses::SetZoneToIndex);
|
|
|
|
if (Engine_Version >= 421) ChunkedObjects = decltype(ChunkedObjects)(ObjectArray);
|
|
else UnchunkedObjects = decltype(UnchunkedObjects)(ObjectArray);
|
|
}
|
|
|
|
std::vector<uint64> Addresses::GetFunctionsToNull()
|
|
{
|
|
std::vector<uint64> toNull;
|
|
|
|
if (Fortnite_Version == 1.11)
|
|
{
|
|
toNull.push_back(Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 6C 24 ? 57 41 56 41 57 48 81 EC ? ? ? ? 48 8B 01 49 8B E9 45 0F B6 F8").Get()); // No Reserve
|
|
}
|
|
|
|
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("E8 ? ? ? ? EB 26 40 38 3D ? ? ? ?").RelativeOffset(1).Get()); // collectgarbage
|
|
}
|
|
|
|
if (Fortnite_Version == 4.1)
|
|
{
|
|
toNull.push_back(Memcury::Scanner::FindPattern("4C 8B DC 55 49 8D AB ? ? ? ? 48 81 EC ? ? ? ? 48 8B 05 ? ? ? ? 48 33 C4 48 89 85 ? ? ? ? 49 89 5B 10 48 8D 05 ? ? ? ? 48 8B 1D ? ? ? ? 49 89 73 18 33 F6 40").Get()); // grassupdate
|
|
}
|
|
|
|
if (Engine_Version == 421)
|
|
{
|
|
toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 48 89 58 08 48 89 70 10 57 48 81 EC ? ? ? ? 48 8B BA ? ? ? ? 48 8B DA 0F 29").Get()); // Pawn Overlap
|
|
toNull.push_back(Memcury::Scanner::FindStringRef(L"Widget Class %s - Running Initialize On Archetype, %s.").ScanFor({ 0x40, 0x55 }, false).Get()); // Widget class
|
|
}
|
|
|
|
if (Engine_Version == 422)
|
|
{
|
|
toNull.push_back(Memcury::Scanner::FindPattern("48 89 5C 24 ? 57 48 83 EC 30 48 8B 41 28 48 8B DA 48 8B F9 48 85 C0 74 34 48 8B 4B 08 48 8D").Get()); // widget class
|
|
}
|
|
|
|
if (Engine_Version == 425)
|
|
{
|
|
toNull.push_back(Memcury::Scanner::FindPattern("40 57 41 56 48 81 EC ? ? ? ? 80 3D ? ? ? ? ? 0F B6 FA 44 8B F1 74 3A 80 3D ? ? ? ? ? 0F 82").Get()); // collect garbage
|
|
}
|
|
|
|
if (Fortnite_Version == 12.41)
|
|
{
|
|
toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 48 89 58 08 48 89 68 10 48 89 70 18 48 89 78 20 41 54 41 56 41 57 48 83 EC 70 48 8B 35").Get()); // random travis crash
|
|
toNull.push_back(Memcury::Scanner::FindPattern("40 57 41 56 48 81 EC ? ? ? ? 80 3D ? ? ? ? ? 0F B6 FA 44 8B F1 74 3A 80 3D ? ? ? ? ? 0F").Get()); // collect garbage
|
|
}
|
|
|
|
if (Fortnite_Version == 12.61)
|
|
{
|
|
toNull.push_back(Memcury::Scanner::FindPattern("48 89 5C 24 ? 55 57 41 54 41 56 41 57 48 8D 6C 24 ? 48 81 EC ? ? ? ? 48 8B 05 ? ? ? ? 48 33 C4 48 89 45 20 4C 8B A5").Get()); // idfk
|
|
// toNull.push_back(Memcury::Scanner::FindPattern("48 89 4C 24 ? 55 56 57 41 56 48 81 EC ? ? ? ? 4C 8B B1 ? ? ? ? 33 F6 4C 89 B4 24 ? ? ? ? 48 8B").Get()); // fritter crash
|
|
}
|
|
|
|
if (Fortnite_Version == 14.60)
|
|
{
|
|
toNull.push_back(Memcury::Scanner::FindPattern("40 55 57 41 57 48 8D 6C 24 ? 48 81 EC ? ? ? ? 80 3D ? ? ? ? ? 0F B6 FA 44 8B F9 74 3B 80 3D ? ? ? ? ? 0F").Get());
|
|
}
|
|
|
|
if (Fortnite_Version == 16.50)
|
|
{
|
|
toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 48 89 58 08 48 89 70 10 48 89 78 18 4C 89 60 20 55 41 56 41 57 48 8B EC 48 83 EC 60 49 8B D9 45 8A F8 4C 8B F2 48").Get()); // no reservation in gakme
|
|
}
|
|
|
|
if (std::floor(Fortnite_Version) == 17)
|
|
{
|
|
// toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 48 89 70 08 48 89 78 10 55 41 54 41 55 41 56 41 57 48 8D 68 A1 48 81 EC ? ? ? ? 45 33 ED").Get()); // collectgarbage
|
|
}
|
|
|
|
if (Fortnite_Version == 17.50)
|
|
{
|
|
toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 48 89 58 08 48 89 70 10 48 89 78 18 4C 89 60 20 55 41 56 41 57 48 8B EC 48 83 EC 60 49 8B D9 45 8A").Get()); // no reservation in game
|
|
}
|
|
|
|
if (Engine_Version == 500)
|
|
{
|
|
// toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 55 53 56 57 41 54 41 55 41 56 41 57 48 8D 68 A1 48 81 EC ? ? ? ? 45 33 F6 0F 29 70 A8 44 38 35").Get()); // zone
|
|
// toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 48 89 58 08 55 56 57 41 54 41 55 41 56 41 57 48 8D 68 A8 48 81 EC ? ? ? ? 45 33 FF").Get()); // Garbage collection
|
|
}
|
|
|
|
toNull.push_back(Addresses::ChangeGameSessionId);
|
|
|
|
return toNull;
|
|
} |