mirror of
https://github.com/Milxnor/Project-Reboot-3.0.git
synced 2026-01-13 10:52:22 +01:00
s20-s23 much better
This commit is contained in:
@@ -178,8 +178,12 @@ bool AActor::IsActorBeingDestroyed()
|
|||||||
|
|
||||||
bool AActor::IsNetStartup()
|
bool AActor::IsNetStartup()
|
||||||
{
|
{
|
||||||
static auto bNetStartupOffset = GetOffset("bNetStartup");
|
static auto bNetStartupOffset = GetOffset("bNetStartup", false) == -1
|
||||||
static auto bNetStartupFieldMask = GetFieldMask(GetProperty("bNetStartup"));
|
? GetOffset("bNetTemporary") // same bitfield, needed because bNetStartup is unreflected later on
|
||||||
|
: GetOffset("bNetStartup");
|
||||||
|
static auto bNetStartupFieldMask = GetProperty("bNetStartup", false)
|
||||||
|
? GetFieldMask(GetProperty("bNetStartup"))
|
||||||
|
: GetFieldMask(GetProperty("bNetTemporary")) * 2; // get the next one
|
||||||
return ReadBitfieldValue(bNetStartupOffset, bNetStartupFieldMask);
|
return ReadBitfieldValue(bNetStartupOffset, bNetStartupFieldMask);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,8 +4,8 @@
|
|||||||
|
|
||||||
void AFortAthenaVehicleSpawner::SpawnVehicleHook(AFortAthenaVehicleSpawner* VehicleSpawner)
|
void AFortAthenaVehicleSpawner::SpawnVehicleHook(AFortAthenaVehicleSpawner* VehicleSpawner)
|
||||||
{
|
{
|
||||||
// literally doesnt get called!!!!
|
// literally doesnt get called!!!! (but on 22.30 it does!)
|
||||||
|
|
||||||
LOG_INFO(LogDev, "omgonmg call!!!!\n\n");
|
LOG_INFO(LogDev, "SpawnVehicleHook!!!!");
|
||||||
// SpawnVehicleFromSpawner(VehicleSpawner);
|
// SpawnVehicleFromSpawner(VehicleSpawner);
|
||||||
}
|
}
|
||||||
@@ -27,6 +27,7 @@ void CollectDataTablesRows(const std::vector<UDataTable*>& DataTables, LOOTING_M
|
|||||||
{
|
{
|
||||||
if (!Addresses::LoadAsset && !DataTable->IsValidLowLevel())
|
if (!Addresses::LoadAsset && !DataTable->IsValidLowLevel())
|
||||||
{
|
{
|
||||||
|
// LOG_INFO(LogDev, "INvalid table!");
|
||||||
continue; // Remove from vector?
|
continue; // Remove from vector?
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -627,7 +628,9 @@ std::vector<LootDrop> PickLootDrops(FName TierGroupName, int WorldLevel, int For
|
|||||||
{
|
{
|
||||||
if (Fortnite_Version <= 6
|
if (Fortnite_Version <= 6
|
||||||
|| std::floor(Fortnite_Version) == 9
|
|| std::floor(Fortnite_Version) == 9
|
||||||
|| Fortnite_Version == 10.00) // the tables unload!
|
|| Fortnite_Version == 10.00 // the tables unload!
|
||||||
|
// || Fortnite_Version >= 22
|
||||||
|
)
|
||||||
{
|
{
|
||||||
LTDTables.clear();
|
LTDTables.clear();
|
||||||
LPTables.clear();
|
LPTables.clear();
|
||||||
|
|||||||
@@ -417,6 +417,7 @@ void AFortPlayerControllerAthena::ServerTeleportToPlaygroundLobbyIslandHook(AFor
|
|||||||
|
|
||||||
void AFortPlayerControllerAthena::ServerAcknowledgePossessionHook(APlayerController* Controller, APawn* Pawn)
|
void AFortPlayerControllerAthena::ServerAcknowledgePossessionHook(APlayerController* Controller, APawn* Pawn)
|
||||||
{
|
{
|
||||||
|
LOG_INFO(LogDev, "ServerAcknowledgePossession!");
|
||||||
static auto AcknowledgedPawnOffset = Controller->GetOffset("AcknowledgedPawn");
|
static auto AcknowledgedPawnOffset = Controller->GetOffset("AcknowledgedPawn");
|
||||||
|
|
||||||
const APawn* OldAcknowledgedPawn = Controller->Get<APawn*>(AcknowledgedPawnOffset);
|
const APawn* OldAcknowledgedPawn = Controller->Get<APawn*>(AcknowledgedPawnOffset);
|
||||||
|
|||||||
@@ -339,7 +339,7 @@ void UNetDriver::ServerReplicateActors_BuildConsiderList(std::vector<FNetworkObj
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static UActorChannel* FindChannel(AActor * Actor, UNetConnection * Connection)
|
static UActorChannel* FindChannel(AActor* Actor, UNetConnection* Connection)
|
||||||
{
|
{
|
||||||
static auto OpenChannelsOffset = Connection->GetOffset("OpenChannels");
|
static auto OpenChannelsOffset = Connection->GetOffset("OpenChannels");
|
||||||
auto& OpenChannels = Connection->Get<TArray<UChannel*>>(OpenChannelsOffset);
|
auto& OpenChannels = Connection->Get<TArray<UChannel*>>(OpenChannelsOffset);
|
||||||
@@ -376,20 +376,16 @@ static UActorChannel* FindChannel(AActor * Actor, UNetConnection * Connection)
|
|||||||
return nullptr;
|
return nullptr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static bool IsActorRelevantToConnection(AActor * Actor, std::vector<FNetViewer>&ConnectionViewers)
|
static bool IsActorRelevantToConnection(AActor* Actor, std::vector<FNetViewer>&ConnectionViewers)
|
||||||
{
|
{
|
||||||
for (int32 viewerIdx = 0; viewerIdx < ConnectionViewers.size(); viewerIdx++)
|
for (int32 viewerIdx = 0; viewerIdx < ConnectionViewers.size(); ++viewerIdx)
|
||||||
{
|
{
|
||||||
if (!ConnectionViewers[viewerIdx].ViewTarget)
|
if (!ConnectionViewers[viewerIdx].ViewTarget)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
// static bool (*IsNetRelevantFor)(AActor*, AActor*, AActor*, FVector&) = decltype(IsNetRelevantFor)(__int64(GetModuleHandleW(0)) + 0x1ECC700);
|
|
||||||
|
|
||||||
static auto index = Offsets::IsNetRelevantFor;
|
|
||||||
|
|
||||||
// if (Actor->IsNetRelevantFor(ConnectionViewers[viewerIdx].InViewer, ConnectionViewers[viewerIdx].ViewTarget, ConnectionViewers[viewerIdx].ViewLocation))
|
// if (Actor->IsNetRelevantFor(ConnectionViewers[viewerIdx].InViewer, ConnectionViewers[viewerIdx].ViewTarget, ConnectionViewers[viewerIdx].ViewLocation))
|
||||||
// if (IsNetRelevantFor(Actor, ConnectionViewers[viewerIdx].InViewer, ConnectionViewers[viewerIdx].ViewTarget, ConnectionViewers[viewerIdx].ViewLocation))
|
// if (IsNetRelevantFor(Actor, ConnectionViewers[viewerIdx].InViewer, ConnectionViewers[viewerIdx].ViewTarget, ConnectionViewers[viewerIdx].ViewLocation))
|
||||||
if (reinterpret_cast<bool(*)(AActor*, AActor*, AActor*, FVector&)>(Actor->VFTable[index])(
|
if (reinterpret_cast<bool(*)(AActor*, AActor*, AActor*, const FVector&)>(Actor->VFTable[Offsets::IsNetRelevantFor])(
|
||||||
Actor, ConnectionViewers[viewerIdx].InViewer, ConnectionViewers[viewerIdx].ViewTarget, ConnectionViewers[viewerIdx].ViewLocation))
|
Actor, ConnectionViewers[viewerIdx].InViewer, ConnectionViewers[viewerIdx].ViewTarget, ConnectionViewers[viewerIdx].ViewLocation))
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
@@ -556,7 +552,7 @@ void SetChannelActorForDestroy(UActorChannel* Channel, FActorDestructionInfo* De
|
|||||||
|
|
||||||
using UPackageMap = UObject;
|
using UPackageMap = UObject;
|
||||||
|
|
||||||
reinterpret_cast<bool(*)(UPackageMap*, FArchive * Ar, UObject * InOuter,FNetworkGUID NetGUID, FString ObjName)>(Connection->GetPackageMap()->VFTable[0x238 / 8])(Connection->GetPackageMap(), &CloseBunch, DestructInfo->ObjOuter.Get(), DestructInfo->NetGUID, DestructInfo->PathName);
|
reinterpret_cast<bool(*)(UPackageMap*, FArchive* Ar, UObject* InOuter, FNetworkGUID NetGUID, FString ObjName)>(Connection->GetPackageMap()->VFTable[0x238 / 8])(Connection->GetPackageMap(), &CloseBunch, DestructInfo->ObjOuter.Get(), DestructInfo->NetGUID, DestructInfo->PathName);
|
||||||
|
|
||||||
// UE_LOG(LogNetTraffic, Log, TEXT("SetChannelActorForDestroy: Channel %d. NetGUID <%s> Path: %s. Bits: %d"), ChIndex, *DestructInfo->NetGUID.ToString(), *DestructInfo->PathName, CloseBunch.GetNumBits());
|
// UE_LOG(LogNetTraffic, Log, TEXT("SetChannelActorForDestroy: Channel %d. NetGUID <%s> Path: %s. Bits: %d"), ChIndex, *DestructInfo->NetGUID.ToString(), *DestructInfo->PathName, CloseBunch.GetNumBits());
|
||||||
// UE_LOG(LogNetDormancy, Verbose, TEXT("SetChannelActorForDestroy: Channel %d. NetGUID <%s> Path: %s. Bits: %d"), ChIndex, *DestructInfo->NetGUID.ToString(), *DestructInfo->PathName, CloseBunch.GetNumBits());
|
// UE_LOG(LogNetDormancy, Verbose, TEXT("SetChannelActorForDestroy: Channel %d. NetGUID <%s> Path: %s. Bits: %d"), ChIndex, *DestructInfo->NetGUID.ToString(), *DestructInfo->PathName, CloseBunch.GetNumBits());
|
||||||
@@ -606,9 +602,11 @@ int32 UNetDriver::ServerReplicateActors()
|
|||||||
// bCPUSaturated = DeltaSeconds > 1.2f * ServerTickTime;
|
// bCPUSaturated = DeltaSeconds > 1.2f * ServerTickTime;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool bUseNetworkObjectList = ShouldUseNetworkObjectList();
|
||||||
|
|
||||||
std::vector<FNetworkObjectInfo*> ConsiderList;
|
std::vector<FNetworkObjectInfo*> ConsiderList;
|
||||||
|
|
||||||
if (ShouldUseNetworkObjectList())
|
if (bUseNetworkObjectList)
|
||||||
ConsiderList.reserve(GetNetworkObjectList().ActiveNetworkObjects.Num());
|
ConsiderList.reserve(GetNetworkObjectList().ActiveNetworkObjects.Num());
|
||||||
|
|
||||||
auto World = GetWorld();
|
auto World = GetWorld();
|
||||||
@@ -619,11 +617,12 @@ int32 UNetDriver::ServerReplicateActors()
|
|||||||
|
|
||||||
static UChannel* (*CreateChannel)(UNetConnection*, int, bool, int32_t) = decltype(CreateChannel)(Addresses::CreateChannel);
|
static UChannel* (*CreateChannel)(UNetConnection*, int, bool, int32_t) = decltype(CreateChannel)(Addresses::CreateChannel);
|
||||||
static __int64 (*ReplicateActor)(UActorChannel*) = decltype(ReplicateActor)(Addresses::ReplicateActor);
|
static __int64 (*ReplicateActor)(UActorChannel*) = decltype(ReplicateActor)(Addresses::ReplicateActor);
|
||||||
static UObject* (*CreateChannelByName)(UNetConnection * Connection, FName * ChName, EChannelCreateFlags CreateFlags, int32_t ChannelIndex) = decltype(CreateChannelByName)(Addresses::CreateChannel);
|
static UObject* (*CreateChannelByName)(UNetConnection* Connection, FName* ChName, EChannelCreateFlags CreateFlags, int32_t ChannelIndex) = decltype(CreateChannelByName)(Addresses::CreateChannel);
|
||||||
static __int64 (*SetChannelActor)(UActorChannel*, AActor*) = decltype(SetChannelActor)(Addresses::SetChannelActor);
|
static __int64 (*SetChannelActor)(UActorChannel*, AActor*) = decltype(SetChannelActor)(Addresses::SetChannelActor);
|
||||||
static __int64 (*SetChannelActor2)(UActorChannel*, AActor*, ESetChannelActorFlags) = decltype(SetChannelActor2)(Addresses::SetChannelActor);
|
static __int64 (*SetChannelActor2)(UActorChannel*, AActor*, ESetChannelActorFlags) = decltype(SetChannelActor2)(Addresses::SetChannelActor);
|
||||||
|
static FName ActorName = UKismetStringLibrary::Conv_StringToName(L"Actor");
|
||||||
|
|
||||||
for (int32 i = 0; i < this->GetClientConnections().Num(); i++)
|
for (int32 i = 0; i < this->GetClientConnections().Num(); ++i)
|
||||||
{
|
{
|
||||||
UNetConnection* Connection = this->GetClientConnections().at(i);
|
UNetConnection* Connection = this->GetClientConnections().at(i);
|
||||||
|
|
||||||
@@ -694,7 +693,7 @@ int32 UNetDriver::ServerReplicateActors()
|
|||||||
|
|
||||||
for (FActorDestructionInfo* DeletionEntry : DeletionEntries)
|
for (FActorDestructionInfo* DeletionEntry : DeletionEntries)
|
||||||
{
|
{
|
||||||
LOG_INFO(LogDev, "AA: {}", DeletionEntry->PathName.Data.Data ? DeletionEntry->PathName.ToString() : "Null");
|
LOG_INFO(LogDev, "PathName: {}", DeletionEntry->PathName.Data.Data ? DeletionEntry->PathName.ToString() : "Null");
|
||||||
|
|
||||||
if (DeletionEntry->StreamingLevelName != -1)
|
if (DeletionEntry->StreamingLevelName != -1)
|
||||||
{
|
{
|
||||||
@@ -719,9 +718,6 @@ int32 UNetDriver::ServerReplicateActors()
|
|||||||
|
|
||||||
if (Engine_Version >= 422)
|
if (Engine_Version >= 422)
|
||||||
{
|
{
|
||||||
FString ActorStr = L"Actor";
|
|
||||||
FName ActorName = UKismetStringLibrary::Conv_StringToName(ActorStr);
|
|
||||||
|
|
||||||
int ChannelIndex = -1; // 4294967295
|
int ChannelIndex = -1; // 4294967295
|
||||||
Channel = (UActorChannel*)CreateChannelByName(Connection, &ActorName, EChannelCreateFlags::OpenedLocally, ChannelIndex);
|
Channel = (UActorChannel*)CreateChannelByName(Connection, &ActorName, EChannelCreateFlags::OpenedLocally, ChannelIndex);
|
||||||
}
|
}
|
||||||
@@ -807,7 +803,6 @@ int32 UNetDriver::ServerReplicateActors()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!Channel)
|
if (!Channel)
|
||||||
{
|
{
|
||||||
if (Actor->IsA(APlayerController::StaticClass()) && Actor != Connection->GetPlayerController()) // isnetrelevantfor should handle this iirc
|
if (Actor->IsA(APlayerController::StaticClass()) && Actor != Connection->GetPlayerController()) // isnetrelevantfor should handle this iirc
|
||||||
@@ -817,9 +812,6 @@ int32 UNetDriver::ServerReplicateActors()
|
|||||||
{
|
{
|
||||||
if (Engine_Version >= 422)
|
if (Engine_Version >= 422)
|
||||||
{
|
{
|
||||||
FString ActorStr = L"Actor";
|
|
||||||
FName ActorName = UKismetStringLibrary::Conv_StringToName(ActorStr);
|
|
||||||
|
|
||||||
int ChannelIndex = -1; // 4294967295
|
int ChannelIndex = -1; // 4294967295
|
||||||
Channel = (UActorChannel*)CreateChannelByName(Connection, &ActorName, EChannelCreateFlags::OpenedLocally, ChannelIndex);
|
Channel = (UActorChannel*)CreateChannelByName(Connection, &ActorName, EChannelCreateFlags::OpenedLocally, ChannelIndex);
|
||||||
}
|
}
|
||||||
@@ -845,9 +837,10 @@ int32 UNetDriver::ServerReplicateActors()
|
|||||||
|
|
||||||
if (Channel)
|
if (Channel)
|
||||||
{
|
{
|
||||||
|
// LOG_INFO(LogDev, "Actor: {}", Actor->GetFullName());
|
||||||
if (ReplicateActor(Channel))
|
if (ReplicateActor(Channel))
|
||||||
{
|
{
|
||||||
if (ShouldUseNetworkObjectList())
|
if (bUseNetworkObjectList)
|
||||||
{
|
{
|
||||||
// LOG_INFO(LogReplication, "Replicated Actor!");
|
// LOG_INFO(LogReplication, "Replicated Actor!");
|
||||||
auto TimeSeconds = UGameplayStatics::GetTimeSeconds(World);
|
auto TimeSeconds = UGameplayStatics::GetTimeSeconds(World);
|
||||||
@@ -864,6 +857,14 @@ int32 UNetDriver::ServerReplicateActors()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!bUseNetworkObjectList) // BOOM
|
||||||
|
{
|
||||||
|
for (auto info : ConsiderList)
|
||||||
|
{
|
||||||
|
delete info;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// shuffle the list of connections if not all connections were ticked
|
// shuffle the list of connections if not all connections were ticked
|
||||||
/*
|
/*
|
||||||
if (NumClientsToTick < NetDriver->ClientConnections.Num())
|
if (NumClientsToTick < NetDriver->ClientConnections.Num())
|
||||||
|
|||||||
@@ -514,6 +514,14 @@ void Offsets::FindAll()
|
|||||||
{
|
{
|
||||||
Offsets::ReplicationFrame = 0x3D8;
|
Offsets::ReplicationFrame = 0x3D8;
|
||||||
}
|
}
|
||||||
|
if (std::floor(Fortnite_Version) == 22)
|
||||||
|
{
|
||||||
|
Offsets::ReplicationFrame = 0x428; // checked only on 22.30
|
||||||
|
}
|
||||||
|
if (Fortnite_Version >= 23)
|
||||||
|
{
|
||||||
|
Offsets::ReplicationFrame = 0x440; // checked only on 23.40
|
||||||
|
}
|
||||||
|
|
||||||
Offsets::IsNetRelevantFor = FindIsNetRelevantForOffset();
|
Offsets::IsNetRelevantFor = FindIsNetRelevantForOffset();
|
||||||
Offsets::Script = Offsets::Children + 8 + 4 + 4;
|
Offsets::Script = Offsets::Children + 8 + 4 + 4;
|
||||||
|
|||||||
@@ -142,6 +142,8 @@ public:
|
|||||||
{
|
{
|
||||||
auto& StartingItem = StartingItems.at(i, FItemAndCount::GetStructSize());
|
auto& StartingItem = StartingItems.at(i, FItemAndCount::GetStructSize());
|
||||||
|
|
||||||
|
// TODO: Check if it is FortSmartBuildingItemDefinition
|
||||||
|
|
||||||
(*Inventory)->AddItem(StartingItem.GetItem(), nullptr, StartingItem.GetCount());
|
(*Inventory)->AddItem(StartingItem.GetItem(), nullptr, StartingItem.GetCount());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -674,12 +674,12 @@ void ChangeLevels()
|
|||||||
LOG_INFO(LogDev, "FindGIsClient(): 0x{:x}", FindGIsClient() - __int64(GetModuleHandleW(0)));
|
LOG_INFO(LogDev, "FindGIsClient(): 0x{:x}", FindGIsClient() - __int64(GetModuleHandleW(0)));
|
||||||
|
|
||||||
// auto bruh = std::wstring(CustomMapName.begin(), CustomMapName.end());
|
// auto bruh = std::wstring(CustomMapName.begin(), CustomMapName.end());
|
||||||
// auto bruhh = (L"open " + bruh);
|
// auto CustomMapOpenWStr = (L"open " + bruh);
|
||||||
|
|
||||||
bool bShouldUseMoleMap = PlaylistName == "/MoleGame/Playlists/Playlist_MoleGame.Playlist_MoleGame";
|
bool bShouldUseMoleMap = PlaylistName == "/MoleGame/Playlists/Playlist_MoleGame.Playlist_MoleGame";
|
||||||
|
|
||||||
FString LevelB = /* bUseCustomMap ? bruhh.c_str() : */ (Engine_Version < 424
|
FString LevelB = /* bUseCustomMap ? CustomMapOpenWStr.c_str() : */ (Engine_Version < 424
|
||||||
? L"open Athena_Terrain" : Engine_Version >= 500 ? Engine_Version >= 501
|
? L"open Athena_Terrain" : Engine_Version >= 500 ? Fortnite_Version >= 23
|
||||||
? L"open Asteria_Terrain"
|
? L"open Asteria_Terrain"
|
||||||
: Globals::bCreative ? L"open Creative_NoApollo_Terrain"
|
: Globals::bCreative ? L"open Creative_NoApollo_Terrain"
|
||||||
: L"open Artemis_Terrain"
|
: L"open Artemis_Terrain"
|
||||||
@@ -687,7 +687,7 @@ void ChangeLevels()
|
|||||||
: L"open Apollo_Terrain");
|
: L"open Apollo_Terrain");
|
||||||
|
|
||||||
FString Level = /* bUseCustomMap ? bruh.c_str() : */ (Engine_Version < 424
|
FString Level = /* bUseCustomMap ? bruh.c_str() : */ (Engine_Version < 424
|
||||||
? L"Athena_Terrain" : Engine_Version >= 500 ? Engine_Version >= 501
|
? L"Athena_Terrain" : Engine_Version >= 500 ? Fortnite_Version >= 23
|
||||||
? L"Asteria_Terrain"
|
? L"Asteria_Terrain"
|
||||||
: Globals::bCreative ? L"Creative_NoApollo_Terrain"
|
: Globals::bCreative ? L"Creative_NoApollo_Terrain"
|
||||||
: L"Artemis_Terrain"
|
: L"Artemis_Terrain"
|
||||||
@@ -780,8 +780,35 @@ void ChangeLevels()
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static inline char (*oFunc)(__int64) = nullptr;
|
||||||
|
static inline __int64 (*func2)(__int64) = nullptr;
|
||||||
|
char Func(__int64 a1)
|
||||||
|
{
|
||||||
|
if (auto r = func2(a1))
|
||||||
|
{
|
||||||
|
if (auto v5 = *(__int64*)(__int64(r) + 0x38))
|
||||||
|
{
|
||||||
|
auto persisntelevle = *(__int64*)(__int64(v5) + 0x98);
|
||||||
|
if (!persisntelevle)
|
||||||
|
{
|
||||||
|
LOG_INFO(LogDev, "tralaleo trallala");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return oFunc(a1);
|
||||||
|
}
|
||||||
|
|
||||||
void ApplyNullAndRetTrues()
|
void ApplyNullAndRetTrues()
|
||||||
{
|
{
|
||||||
|
if (Fortnite_Version >= 23)
|
||||||
|
{
|
||||||
|
auto sig = Memcury::Scanner::FindPattern("48 89 5C 24 ? 57 48 83 EC 20 48 8B D9 E8 ? ? ? ? 48 8B F8 48 8B 83 ? ? ? ? 48 85 C0").Get(); // 23.40
|
||||||
|
func2 = decltype(func2)(Memcury::Scanner::FindPattern("48 83 EC 28 BA ? ? ? ? 4C 8B C1 E8 ? ? ? ? 84 C0 74 04 33 C0 EB 04 49 8B 40 20").Get());
|
||||||
|
Hooking::MinHook::Hook((PVOID)sig, Func, (void**)&oFunc);
|
||||||
|
}
|
||||||
|
|
||||||
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");
|
||||||
|
|
||||||
auto AddressesToNull = Addresses::GetFunctionsToNull();
|
auto AddressesToNull = Addresses::GetFunctionsToNull();
|
||||||
@@ -859,6 +886,23 @@ DWORD WINAPI Main(LPVOID)
|
|||||||
LOG_INFO(LogDev, "Fortnite_Version: {}", Fortnite_Version);
|
LOG_INFO(LogDev, "Fortnite_Version: {}", Fortnite_Version);
|
||||||
LOG_INFO(LogDev, "Engine_Version: {}", Engine_Version);
|
LOG_INFO(LogDev, "Engine_Version: {}", Engine_Version);
|
||||||
|
|
||||||
|
#if 0 // CONSOLE ONLY (FOR CLIENT)
|
||||||
|
SetConsoleTitleA("Console");
|
||||||
|
|
||||||
|
// Spawn Console unreal engine Gameviewport
|
||||||
|
static UObject* Engine = GetEngine();
|
||||||
|
auto GameViewport = Engine->Get("GameViewport");
|
||||||
|
|
||||||
|
if (!GameViewport) return 0;
|
||||||
|
|
||||||
|
auto ViewportConsolePtr = GameViewport->GetPtr("ViewportConsole");
|
||||||
|
*ViewportConsolePtr = UGameplayStatics::SpawnObject(FindObject<UClass>(L"/Script/Engine.Console"), GameViewport);
|
||||||
|
|
||||||
|
LOG_INFO(LogDev, "Spawned Console! Exiting");
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
#endif
|
||||||
|
|
||||||
#ifdef ABOVE_S20
|
#ifdef ABOVE_S20
|
||||||
if (Fortnite_Version < 20)
|
if (Fortnite_Version < 20)
|
||||||
{
|
{
|
||||||
@@ -886,7 +930,9 @@ DWORD WINAPI Main(LPVOID)
|
|||||||
|
|
||||||
// Globals::bAutoRestart = IsRestartingSupported();
|
// Globals::bAutoRestart = IsRestartingSupported();
|
||||||
|
|
||||||
static auto GameModeDefault = FindObject<AFortGameModeAthena>(L"/Script/FortniteGame.Default__FortGameModeAthena");
|
static auto GameModeDefault = FindObject<AFortGameModeAthena>(L"/Script/FortniteGame.Default__FortGameModeBR")
|
||||||
|
? FindObject<AFortGameModeAthena>(L"/Script/FortniteGame.Default__FortGameModeBR") // 22.30 atleast
|
||||||
|
: 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 FortPlayerControllerDefault = FindObject<AFortPlayerController>(L"/Script/FortniteGame.Default__FortPlayerController");
|
static auto FortPlayerControllerDefault = FindObject<AFortPlayerController>(L"/Script/FortniteGame.Default__FortPlayerController");
|
||||||
static auto FortPlayerPawnAthenaDefault = FindObject<AFortPlayerPawn>(L"/Script/FortniteGame.Default__FortPlayerPawnAthena"); // FindObject<AFortPlayerPawn>(L"/Game/Athena/PlayerPawn_Athena.Default__PlayerPawn_Athena_C");
|
static auto FortPlayerPawnAthenaDefault = FindObject<AFortPlayerPawn>(L"/Script/FortniteGame.Default__FortPlayerPawnAthena"); // FindObject<AFortPlayerPawn>(L"/Game/Athena/PlayerPawn_Athena.Default__PlayerPawn_Athena_C");
|
||||||
@@ -913,8 +959,8 @@ DWORD WINAPI Main(LPVOID)
|
|||||||
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogFortTeams VeryVerbose", nullptr);
|
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogFortTeams VeryVerbose", nullptr);
|
||||||
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogFortAI VeryVerbose", nullptr);
|
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogFortAI VeryVerbose", nullptr);
|
||||||
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogFortAIDirector VeryVerbose", nullptr);
|
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogFortAIDirector VeryVerbose", nullptr);
|
||||||
|
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogFortUIDirector Fatal", nullptr); // Temporary
|
||||||
// UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogFortQuest VeryVerbose", nullptr);
|
// UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogFortQuest VeryVerbose", nullptr);
|
||||||
// UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogFortUIDirector NoLogging", nullptr);
|
|
||||||
// UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogAbilitySystem VeryVerbose", nullptr);
|
// UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogAbilitySystem VeryVerbose", nullptr);
|
||||||
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogDataTable VeryVerbose", nullptr);
|
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogDataTable VeryVerbose", nullptr);
|
||||||
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogMeshNetwork VeryVerbose", nullptr);
|
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogMeshNetwork VeryVerbose", nullptr);
|
||||||
@@ -1357,12 +1403,15 @@ DWORD WINAPI Main(LPVOID)
|
|||||||
AFortPlayerControllerAthena::ServerPlaySquadQuickChatMessageHook, nullptr, false);
|
AFortPlayerControllerAthena::ServerPlaySquadQuickChatMessageHook, nullptr, false);
|
||||||
}
|
}
|
||||||
|
|
||||||
auto ServerTeleportToPlaygroundIslandFn = FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerControllerAthena.ServerTeleportToPlaygroundLobbyIsland");
|
if (Fortnite_Version < 19) // jmp qword ptr idk why our dtc dont wrok
|
||||||
|
|
||||||
if (ServerTeleportToPlaygroundIslandFn)
|
|
||||||
{
|
{
|
||||||
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, ServerTeleportToPlaygroundIslandFn,
|
auto ServerTeleportToPlaygroundIslandFn = FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerControllerAthena.ServerTeleportToPlaygroundLobbyIsland");
|
||||||
AFortPlayerControllerAthena::ServerTeleportToPlaygroundLobbyIslandHook, nullptr, false);
|
|
||||||
|
if (ServerTeleportToPlaygroundIslandFn)
|
||||||
|
{
|
||||||
|
Hooking::MinHook::Hook(FortPlayerControllerAthenaDefault, ServerTeleportToPlaygroundIslandFn,
|
||||||
|
AFortPlayerControllerAthena::ServerTeleportToPlaygroundLobbyIslandHook, nullptr, false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Hooking::MinHook::Hook(FortPlayerStateAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerStateAthena.ServerSetInAircraft"),
|
// Hooking::MinHook::Hook(FortPlayerStateAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerStateAthena.ServerSetInAircraft"),
|
||||||
|
|||||||
@@ -50,6 +50,17 @@ uint64 FindGIsClient()
|
|||||||
|
|
||||||
auto Addr = Memcury::Scanner::FindStringRef(L"AllowCommandletRendering");
|
auto Addr = Memcury::Scanner::FindStringRef(L"AllowCommandletRendering");
|
||||||
|
|
||||||
|
if (!Addr.Get()) // pretty sure only 22+ since the string is split (we could maybe try just searching without the A?)
|
||||||
|
{
|
||||||
|
if (Fortnite_Version == 22.3)
|
||||||
|
{
|
||||||
|
// return __int64(GetModuleHandleW(0)) + 0xDCE9DFA;
|
||||||
|
}
|
||||||
|
|
||||||
|
LOG_ERROR(LogDev, "[FindGIsClient] Failed to find AllowCommandletRendering! Returning 0");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
std::vector<std::vector<uint8_t>> BytesArray = {
|
std::vector<std::vector<uint8_t>> BytesArray = {
|
||||||
{0x88, 0x05}, // 20.40 21.00
|
{0x88, 0x05}, // 20.40 21.00
|
||||||
{0xC6, 0x05}, // mov cs X // Checked on 1.11, 12.41, 15.10
|
{0xC6, 0x05}, // mov cs X // Checked on 1.11, 12.41, 15.10
|
||||||
@@ -181,6 +192,12 @@ uint64 FindGetPlayerViewpoint()
|
|||||||
|
|
||||||
auto FailedToSpawnPawnStrRefAddr = Memcury::Scanner::FindStringRef(L"%s failed to spawn a pawn", true, 0, Fortnite_Version >= 19).Get();
|
auto FailedToSpawnPawnStrRefAddr = Memcury::Scanner::FindStringRef(L"%s failed to spawn a pawn", true, 0, Fortnite_Version >= 19).Get();
|
||||||
|
|
||||||
|
if (!FailedToSpawnPawnStrRefAddr)
|
||||||
|
{
|
||||||
|
LOG_ERROR(LogFinder, "Failed to find FailedToSpawnPawnStrRefAddr! Report to Milxnor immediately.");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 1000; i++)
|
for (int i = 0; i < 1000; i++)
|
||||||
{
|
{
|
||||||
if (*(uint8_t*)(uint8_t*)(FailedToSpawnPawnStrRefAddr - i) == 0x40 && *(uint8_t*)(uint8_t*)(FailedToSpawnPawnStrRefAddr - i + 1) == 0x53)
|
if (*(uint8_t*)(uint8_t*)(FailedToSpawnPawnStrRefAddr - i) == 0x40 && *(uint8_t*)(uint8_t*)(FailedToSpawnPawnStrRefAddr - i + 1) == 0x53)
|
||||||
|
|||||||
@@ -69,6 +69,19 @@ static inline uint64 FindStaticFindObject(int StringSkip = 1)
|
|||||||
|
|
||||||
if (Engine_Version == 500)
|
if (Engine_Version == 500)
|
||||||
{
|
{
|
||||||
|
if (Fortnite_Version >= 22) // string ref is functionized + real func is chunked gg
|
||||||
|
{
|
||||||
|
auto addr = Memcury::Scanner::FindPattern("40 55 53 56 57 41 54 41 55 41 56 41 57 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 48 8B 05 ? ? ? ? 48 33 C4 48 89 85 ? ? ? ? 33 F6 4C 8B E1 48 83 CB", false).Get(); // 22.30
|
||||||
|
|
||||||
|
if (!addr) // super functionized
|
||||||
|
addr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 55 57 41 56 48 8B EC 48 83 EC 60 33 DB 4C 8B F1 48 8D 4D E8 41 8A F1", false).Get(); // 23.40
|
||||||
|
|
||||||
|
if (!addr)
|
||||||
|
addr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 55 41 56 41 57 48 8B EC 48 83 EC 60 33 DB 4C 8B F9 48 8D 4D E8 45").Get(); // 24.40
|
||||||
|
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
auto addr = Memcury::Scanner::FindPattern("40 55 53 56 57 41 54 41 55 41 56 41 57 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 48 8B 05 ? ? ? ? 48 33 C4 48 89 85 ? ? ? ? 45 33 F6 4C 8B E1 45 0F B6 E9 49 8B F8 41 8B C6", false).Get();
|
auto addr = Memcury::Scanner::FindPattern("40 55 53 56 57 41 54 41 55 41 56 41 57 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 48 8B 05 ? ? ? ? 48 33 C4 48 89 85 ? ? ? ? 45 33 F6 4C 8B E1 45 0F B6 E9 49 8B F8 41 8B C6", false).Get();
|
||||||
|
|
||||||
if (!addr)
|
if (!addr)
|
||||||
@@ -106,8 +119,9 @@ static inline uint64 FindStaticFindObject(int StringSkip = 1)
|
|||||||
return iasdfk;
|
return iasdfk;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// this never gets ran fyi
|
||||||
auto Addr = Memcury::Scanner::FindStringRef(L"Illegal call to StaticFindObject() while serializing object data!", true, StringSkip, Engine_Version >= 427);
|
auto Addr = Memcury::Scanner::FindStringRef(L"Illegal call to StaticFindObject() while serializing object data!", true, StringSkip, Engine_Version >= 427);
|
||||||
auto Final = FindBytes(Addr, { 0x48, 0x89, 0x5C }, 255, 0, true, 0, false); // Addr.ScanFor(bytes, false).Get();
|
auto Final = FindBytes(Addr, { 0x48, 0x89, 0x5C }, 255, 0, true, 0, false);
|
||||||
|
|
||||||
return Final;
|
return Final;
|
||||||
}
|
}
|
||||||
@@ -535,17 +549,35 @@ static inline uint64 FindStepExplicitProperty()
|
|||||||
|
|
||||||
static inline uint64 FindIsNetRelevantForOffset()
|
static inline uint64 FindIsNetRelevantForOffset()
|
||||||
{
|
{
|
||||||
if (Engine_Version == 416 || Fortnite_Version == 3.3) // checked on 1.7.2, 1.8, 3.3
|
if (Engine_Version == 416 || Fortnite_Version == 3.3) // checked 1.7.2, 1.8, 3.3
|
||||||
return 0x420 / 8;
|
return 0x420 / 8;
|
||||||
if (Fortnite_Version == 1.10 || Fortnite_Version == 1.11 || (Fortnite_Version >= 2.42 && Fortnite_Version <= 3.2)) // checked 1.10, 1.11, 2.4.2, 2.5, 3.0, 3.1, 3.2
|
if (Fortnite_Version == 1.10 || Fortnite_Version == 1.11 || (Fortnite_Version >= 2.42 && Fortnite_Version <= 3.2)) // checked 1.10, 1.11, 2.4.2, 2.5, 3.0, 3.1, 3.2
|
||||||
return 0x418 / 8;
|
return 0x418 / 8;
|
||||||
|
if (std::floor(Fortnite_Version) == 20)
|
||||||
|
return 0x4C8 / 8; // checked 20.40
|
||||||
|
if (std::floor(Fortnite_Version) == 21)
|
||||||
|
return 0x4D0 / 8; // checked 21.00
|
||||||
|
if (std::floor(Fortnite_Version) == 22)
|
||||||
|
return 0x4D8 / 8; // checked 22.30
|
||||||
|
if (Fortnite_Version >= 23)
|
||||||
|
return 0x4E0 / 8; // checked 23.40
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint64 FindActorChannelClose()
|
static inline uint64 FindActorChannelClose()
|
||||||
{
|
{
|
||||||
auto StringRef = Memcury::Scanner::FindStringRef(L"UActorChannel::Close: ChIndex: %d, Actor: %s");
|
auto StringRef = Memcury::Scanner::FindStringRef(L"UActorChannel::Close: ChIndex: %d, Actor: %s", false);
|
||||||
|
|
||||||
|
if (!StringRef.Get()) // 22.30 atleast (it just changed but also functionized im too lazy rn)
|
||||||
|
{
|
||||||
|
auto addr = Memcury::Scanner::FindPattern("40 55 53 56 57 41 56 48 8B EC 48 83 EC 40 4C 8B 41 68 40 8A F2 48 8B 51 28 48 8B D9 48 8D 4D 48 E8 ? ? ? ? 80").Get(); // 20.40
|
||||||
|
|
||||||
|
if (!addr) // TODO: Check 48 89 5C 24 ? 55 56 57 48 83 EC ? 4C 8B 41 ? 40 8A F2 48 8B 51 ? 48 8B
|
||||||
|
addr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 55 56 57 48 83 EC ? 4C 8B 41 ? 40 8A F2 48 8B 51 ? 48 8B ? 48 8D 4C 24 ? E8").Get(); // 22.30 + 23.40
|
||||||
|
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
return FindBytes(StringRef, { 0x48, 0x89, 0x5C }, 1000, 0, true);
|
return FindBytes(StringRef, { 0x48, 0x89, 0x5C }, 1000, 0, true);
|
||||||
}
|
}
|
||||||
@@ -592,6 +624,13 @@ static inline uint64 FindSetWorld()
|
|||||||
SetWorldIndex = 0x7B;
|
SetWorldIndex = 0x7B;
|
||||||
if (Fortnite_Season == 21)
|
if (Fortnite_Season == 21)
|
||||||
SetWorldIndex = 0x7C; // 21.00
|
SetWorldIndex = 0x7C; // 21.00
|
||||||
|
if (Fortnite_Season == 22 || Fortnite_Season == 23)
|
||||||
|
SetWorldIndex = 0x7B; // 22.30 & 23.50
|
||||||
|
|
||||||
|
if (!SetWorldIndex)
|
||||||
|
{
|
||||||
|
MessageBoxA(0, "SetWorldIndex 0", "Error", MB_ICONERROR);
|
||||||
|
}
|
||||||
|
|
||||||
// static auto DefaultNetDriver = FindObject("/Script/Engine.Default__NetDriver");
|
// static auto DefaultNetDriver = FindObject("/Script/Engine.Default__NetDriver");
|
||||||
return SetWorldIndex;
|
return SetWorldIndex;
|
||||||
@@ -612,7 +651,14 @@ static inline uint64 FindInitListen()
|
|||||||
static inline uint64 FindOnDamageServer()
|
static inline uint64 FindOnDamageServer()
|
||||||
{
|
{
|
||||||
if (Fortnite_Version >= 20) // 8B 15 on name ref???
|
if (Fortnite_Version >= 20) // 8B 15 on name ref???
|
||||||
return Memcury::Scanner::FindPattern("E8 ? ? ? ? 41 39 B4 24").RelativeOffset(1).Get(); // 20.40 (not 21.00)
|
{
|
||||||
|
auto addr = Memcury::Scanner::FindPattern("E8 ? ? ? ? 41 39 B4 24").RelativeOffset(1).Get(); // 20.40 (not 21.00)
|
||||||
|
|
||||||
|
if (!addr)
|
||||||
|
addr = Memcury::Scanner::FindPattern("E8 ? ? ? ? 4C 8D 96 ? ? ? ? 49 8B CA E8 ? ? ? ? 45 33 E4").RelativeOffset(1).Get(); // 22.3
|
||||||
|
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
auto Addr = FindFunctionCall(L"OnDamageServer",
|
auto Addr = FindFunctionCall(L"OnDamageServer",
|
||||||
Engine_Version == 416 ? std::vector<uint8_t>{ 0x4C, 0x89, 0x4C } :
|
Engine_Version == 416 ? std::vector<uint8_t>{ 0x4C, 0x89, 0x4C } :
|
||||||
@@ -862,9 +908,9 @@ static inline uint64 FindNoMCP()
|
|||||||
if (std::floor(Fortnite_Version) == 5)
|
if (std::floor(Fortnite_Version) == 5)
|
||||||
return Memcury::Scanner::FindPattern("E8 ? ? ? ? 84 C0 75 CE").RelativeOffset(1).Get();
|
return Memcury::Scanner::FindPattern("E8 ? ? ? ? 84 C0 75 CE").RelativeOffset(1).Get();
|
||||||
|
|
||||||
LOG_INFO(LogDev, "finding it");
|
LOG_INFO(LogDev, "Finding Func IsRunningNoMCP");
|
||||||
auto fn = FindObject<UFunction>(L"/Script/FortniteGame.FortKismetLibrary.IsRunningNoMCP");
|
auto fn = FindObject<UFunction>(L"/Script/FortniteGame.FortKismetLibrary.IsRunningNoMCP");
|
||||||
LOG_INFO(LogDev, "fn: {}", __int64(fn));
|
LOG_INFO(LogDev, "IsRunningNoMCP: {}", __int64(fn));
|
||||||
|
|
||||||
if (!fn)
|
if (!fn)
|
||||||
return 0;
|
return 0;
|
||||||
@@ -1474,7 +1520,10 @@ static inline uint64 FindDispatchRequest()
|
|||||||
|
|
||||||
if (!Addrr)
|
if (!Addrr)
|
||||||
{
|
{
|
||||||
return 0;
|
Addrr = Memcury::Scanner::FindStringRef(L"MCP-Profile: Dispatching request to %s - ContextCredentials: %s", false, 0, Fortnite_Version >= 19).Get();
|
||||||
|
|
||||||
|
if (!Addrr)
|
||||||
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int i = 0; i < 1000; i++)
|
for (int i = 0; i < 1000; i++)
|
||||||
@@ -1733,7 +1782,14 @@ static inline uint64 FindGiveAbility()
|
|||||||
if (Engine_Version == 421)
|
if (Engine_Version == 421)
|
||||||
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 6C 24 ? 48 89 7C 24 ? 41 56 48 83 EC 20 83 B9 ? ? ? ? ? 49 8B E8 4C 8B F2").Get();
|
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 6C 24 ? 48 89 7C 24 ? 41 56 48 83 EC 20 83 B9 ? ? ? ? ? 49 8B E8 4C 8B F2").Get();
|
||||||
if (Engine_Version == 500)
|
if (Engine_Version == 500)
|
||||||
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 6C 24 ? 56 57 41 56 48 83 EC 20 8B 81 ? ? ? ? 49 8B E8 4C").Get(); // idk why finder doesnt work
|
{
|
||||||
|
auto addr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 6C 24 ? 56 57 41 56 48 83 EC 20 8B 81 ? ? ? ? 49 8B E8 4C", false).Get(); // idk why finder doesnt work
|
||||||
|
|
||||||
|
if (!addr)
|
||||||
|
addr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 55 56 57 41 56 41 57 48 8B EC 48 83 EC ? 49 8B 40").Get(); // 22.3
|
||||||
|
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
// auto Addr = Memcury::Scanner::FindStringRef(L"GiveAbilityAndActivateOnce called on ability %s on the client, not allowed!"); // has 2 refs for some reason on some versions
|
// auto Addr = Memcury::Scanner::FindStringRef(L"GiveAbilityAndActivateOnce called on ability %s on the client, not allowed!"); // has 2 refs for some reason on some versions
|
||||||
// auto realGiveAbility = Memcury::Scanner(FindBytes(Addr, { 0xE8 }, 500, 0, false, 0, true)).RelativeOffset(1).Get();
|
// auto realGiveAbility = Memcury::Scanner(FindBytes(Addr, { 0xE8 }, 500, 0, false, 0, true)).RelativeOffset(1).Get();
|
||||||
@@ -1787,7 +1843,15 @@ static inline uint64 FindReplaceBuildingActor()
|
|||||||
|
|
||||||
static inline uint64 FindSendClientAdjustment()
|
static inline uint64 FindSendClientAdjustment()
|
||||||
{
|
{
|
||||||
return Memcury::Scanner::FindPattern("40 53 48 83 EC 20 48 8B 99 ? ? ? ? 48 39 99 ? ? ? ? 74 0A 48 83 B9", false).Get();
|
auto addr = Memcury::Scanner::FindPattern("40 53 48 83 EC 20 48 8B 99 ? ? ? ? 48 39 99 ? ? ? ? 74 0A 48 83 B9", false).Get();
|
||||||
|
|
||||||
|
if (!addr)
|
||||||
|
addr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC ? 8B 91 ? ? ? ? 48 8B D9 83 FA", false).Get(); // 22.3 (this was painful to find)
|
||||||
|
|
||||||
|
if (!addr)
|
||||||
|
addr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 83 3D ? ? ? ? ? 48 8B D9 75 57 8B 91").Get();
|
||||||
|
|
||||||
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline uint64 FindReplicateActor()
|
static inline uint64 FindReplicateActor()
|
||||||
@@ -1806,10 +1870,21 @@ static inline uint64 FindReplicateActor()
|
|||||||
return addr;
|
return addr;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// STAT_NetReplicateActorTime
|
||||||
if (std::floor(Fortnite_Version) == 20)
|
if (std::floor(Fortnite_Version) == 20)
|
||||||
return Memcury::Scanner::FindPattern("48 8B C4 48 89 58 10 48 89 70 18 48 89 78 20 55 41 54 41 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 48 8B 05 ? ? ? ? 48 33 C4 48 89 85 ? ? ? ? 4C 8D 69 68").Get();
|
return Memcury::Scanner::FindPattern("48 8B C4 48 89 58 10 48 89 70 18 48 89 78 20 55 41 54 41 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 48 8B 05 ? ? ? ? 48 33 C4 48 89 85 ? ? ? ? 4C 8D 69 68").Get();
|
||||||
if (Fortnite_Version >= 21) // 21.00
|
if (Fortnite_Version >= 21)
|
||||||
return Memcury::Scanner::FindPattern("48 8B C4 48 89 58 10 48 89 70 18 48 89 78 20 55 41 54 41 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 48 8B 05 ? ? ? ? 48 33 C4 48 89 85 ? ? ? ? 45 33 FF 4C 8D 69 68 44 38 3D").Get();
|
{
|
||||||
|
auto addr = Memcury::Scanner::FindPattern("48 8B C4 48 89 58 10 48 89 70 18 48 89 78 20 55 41 54 41 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 48 8B 05 ? ? ? ? 48 33 C4 48 89 85 ? ? ? ? 45 33 FF 4C 8D 69 68 44 38 3D", false).Get();
|
||||||
|
|
||||||
|
if (!addr)
|
||||||
|
addr = Memcury::Scanner::FindPattern("48 8B C4 48 89 58 ? 48 89 70 ? 48 89 78 ? 55 41 54 41 55 41 56 41 57 48 8D A8 ? ? ? ? 48 81 EC ? ? ? ? 48 8B 05 ? ? ? ? 48 33 C4 48 89 85 ? ? ? ? 45 33 FF 4C 8D 61 ? 44 38 3D ? ? ? ? 48 8D 05 ? ? ? ? 48 8B", false).Get(); // 22.30
|
||||||
|
|
||||||
|
if (!addr)
|
||||||
|
addr = Memcury::Scanner::FindPattern("40 55 41 54 41 55 41 56 41 57 48 81 EC ? ? ? ? 48 8D 6C 24 ? 48 89 9D ? ? ? ? 48 89 B5 ? ? ? ? 48 89 BD ? ? ? ? 48 8B 05 ? ? ? ? 48 33 C5 48 89 85 ? ? ? ? 45 33 E4 4C 8D 69 68 44 38 25 ? ? ? ? 48 8D 05 ? ? ? ? 48 8B F9 49 8B 4D").Get(); // 23.40
|
||||||
|
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -1845,7 +1920,14 @@ static inline uint64 FindSetChannelActor()
|
|||||||
if (std::floor(Fortnite_Version) == 20)
|
if (std::floor(Fortnite_Version) == 20)
|
||||||
return Memcury::Scanner::FindPattern("40 55 53 56 57 41 54 41 56 41 57 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 45 33 E4 48 8D 3D ? ? ? ? 44 89 A5").Get();
|
return Memcury::Scanner::FindPattern("40 55 53 56 57 41 54 41 56 41 57 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 45 33 E4 48 8D 3D ? ? ? ? 44 89 A5").Get();
|
||||||
if (Fortnite_Version >= 21)
|
if (Fortnite_Version >= 21)
|
||||||
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 55 56 57 41 54 41 55 41 56 41 57 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 33 FF 4C 8D 35 ? ? ? ? 89 BD").Get();
|
{
|
||||||
|
auto addr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 55 56 57 41 54 41 55 41 56 41 57 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 33 FF 4C 8D 35 ? ? ? ? 89 BD", false).Get();
|
||||||
|
|
||||||
|
if (!addr)
|
||||||
|
addr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 55 56 57 41 56 41 57 48 8D AC 24 ? ? ? ? 48 81 EC ? ? ? ? 45 33 F6 48 8D").Get(); // 22.30 & 23.40
|
||||||
|
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
@@ -1861,7 +1943,17 @@ static inline uint64 FindCallPreReplication()
|
|||||||
if (std::floor(Fortnite_Version) == 20)
|
if (std::floor(Fortnite_Version) == 20)
|
||||||
return Memcury::Scanner::FindPattern("48 85 D2 0F 84 ? ? ? ? 48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC 40 F6 41 58 30 48 8B EA 48 8B D9 40 B6 01").Get();
|
return Memcury::Scanner::FindPattern("48 85 D2 0F 84 ? ? ? ? 48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC 40 F6 41 58 30 48 8B EA 48 8B D9 40 B6 01").Get();
|
||||||
if (Fortnite_Version >= 21)
|
if (Fortnite_Version >= 21)
|
||||||
return Memcury::Scanner::FindPattern("48 85 D2 0F 84 ? ? ? ? 48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC 40 F6 41 58 30 4C 8B F2").Get();
|
{
|
||||||
|
auto addr = Memcury::Scanner::FindPattern("48 85 D2 0F 84 ? ? ? ? 48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 56 41 57 48 83 EC 40 F6 41 58 30 4C 8B F2", false).Get();
|
||||||
|
|
||||||
|
if (!addr)
|
||||||
|
addr = Memcury::Scanner::FindPattern("48 85 D2 0F 84 ? ? ? ? 48 8B C4 48 89 58 ? 48 89 70 ? 48 89 78 ? 4C 89 60 ? 55 41 56 41 57 48 8B EC 48 83 EC ? F6 41 ? ? 4C 8B FA 48 8B", false).Get(); // 22.30
|
||||||
|
|
||||||
|
if (!addr)
|
||||||
|
addr = Memcury::Scanner::FindPattern("48 85 D2 0F 84 ? ? ? ? 48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 55 41 56 41 57 48 8B EC 48 83 EC 40 F6 41 58 30").Get(); // 23.40
|
||||||
|
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -124,7 +124,7 @@ static inline void Restart() // todo move?
|
|||||||
InitBotNames();
|
InitBotNames();
|
||||||
|
|
||||||
FString LevelA = Engine_Version < 424
|
FString LevelA = Engine_Version < 424
|
||||||
? L"open Athena_Terrain" : Engine_Version >= 500 ? Engine_Version >= 501
|
? L"open Athena_Terrain" : Engine_Version >= 500 ? Fortnite_Version >= 23
|
||||||
? L"open Asteria_Terrain"
|
? L"open Asteria_Terrain"
|
||||||
: Globals::bCreative ? L"open Creative_NoApollo_Terrain"
|
: Globals::bCreative ? L"open Creative_NoApollo_Terrain"
|
||||||
: L"open Artemis_Terrain"
|
: L"open Artemis_Terrain"
|
||||||
|
|||||||
@@ -21,7 +21,7 @@ extern inline double Fortnite_Version = 0; // For example, 4.1, 6.21, etc. // Pr
|
|||||||
extern inline int Fortnite_CL = 0;
|
extern inline int Fortnite_CL = 0;
|
||||||
|
|
||||||
// #define PROD // this doesnt do anything besides remove processeventhook and some assert stuff
|
// #define PROD // this doesnt do anything besides remove processeventhook and some assert stuff
|
||||||
// DEPRACTERD ^^^ (see Globals::bDeveloperMode)
|
// DEPRECATED ^^^ (see Globals::bDeveloperMode)
|
||||||
|
|
||||||
// #define ABOVE_S20
|
// #define ABOVE_S20
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user