Ima go get my popeyes

This commit is contained in:
Gray
2024-03-17 11:24:42 -04:00
parent 07a6569f4a
commit 05dfca656a
9 changed files with 112 additions and 68 deletions

View File

@@ -8,7 +8,7 @@ void ABuildingFoundation::SetDynamicFoundationTransformHook(UObject* Context, FF
auto BuildingFoundation = (ABuildingFoundation*)Context;
LOG_INFO(LogDev, "Bruh: {}", BuildingFoundation->GetName());
LOG_INFO(LogDev, "SetDynamicFoundationTransformHook: {}", BuildingFoundation->GetName());
SetFoundationTransform(BuildingFoundation, NewTransform);

View File

@@ -797,6 +797,7 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game
LOG_INFO(LogNet, "WorldLevel {}", GameState->GetWorldLevel());
#ifndef ABOVE_S20
if (Globals::AmountOfListens == 1) // we only want to do this one time.
{
if (bEnableRebooting)
@@ -900,18 +901,11 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game
AllRebootVans.Free();
if (Engine_Version >= 500)
{
GameState->Get<float>("DefaultParachuteDeployTraceForGroundDistance") = 10000;
}
if (AmountOfBotsToSpawn != 0)
{
Bots::SpawnBotsAtPlayerStarts(AmountOfBotsToSpawn);
}
UptimeWebHook.send_message(std::format("Server up! {} {}", Fortnite_Version, PlaylistName)); // PlaylistName sometimes isn't always what we use!
if (std::floor(Fortnite_Version) == 5)
{
auto NewFn = FindObject<UFunction>(L"/Game/Athena/Prototype/Blueprints/Cube/CUBE.CUBE_C.New");
@@ -979,6 +973,14 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game
}
}
#endif
if (Engine_Version >= 500)
{
GameState->Get<float>("DefaultParachuteDeployTraceForGroundDistance") = 10000;
}
UptimeWebHook.send_message(std::format("Server up! {} {}", Fortnite_Version, PlaylistName)); // PlaylistName sometimes isn't always what we use!
static auto ReplicationDriverOffset = GetWorld()->GetNetDriver()->GetOffset("ReplicationDriver", false); // If netdriver is null the world blows up
Globals::bShouldUseReplicationGraph = (!(ReplicationDriverOffset == -1 || Fortnite_Version >= 20))

View File

@@ -120,7 +120,7 @@ APawn* AGameModeBase::SpawnDefaultPawnForHook(AGameModeBase* GameMode, AControll
static auto DefaultPawnClassOffset = GameMode->GetOffset("DefaultPawnClass");
GameMode->Get<UClass*>(DefaultPawnClassOffset) = PawnClass;
bool bUseSpawnActor = Fortnite_Version >= 20;
bool bUseSpawnActor = false;
static auto SpawnDefaultPawnAtTransformFn = FindObject<UFunction>(L"/Script/Engine.GameModeBase.SpawnDefaultPawnAtTransform");
@@ -136,8 +136,12 @@ APawn* AGameModeBase::SpawnDefaultPawnForHook(AGameModeBase* GameMode, AControll
struct { AController* NewPlayer; FTransform SpawnTransform; APawn* ReturnValue; }
AGameModeBase_SpawnDefaultPawnAtTransform_Params{ NewPlayer, SpawnTransform };
LOG_INFO(LogDev, "Calling SpawnDefaultPawnAtTransformFn!");
GameMode->ProcessEvent(SpawnDefaultPawnAtTransformFn, &AGameModeBase_SpawnDefaultPawnAtTransform_Params);
LOG_INFO(LogDev, "Finished SpawnDefaultPawnAtTransformFn!");
NewPawn = AGameModeBase_SpawnDefaultPawnAtTransform_Params.ReturnValue;
}
@@ -297,7 +301,7 @@ APawn* AGameModeBase::SpawnDefaultPawnForHook(AGameModeBase* GameMode, AControll
bFirst = false;
Calendar::SetSnow(100);
}
// LOG_INFO(LogDev, "Finish SpawnDefaultPawnFor!");
LOG_INFO(LogDev, "Finish SpawnDefaultPawnFor!");
return NewPawn;
}

View File

@@ -6,6 +6,7 @@ MS_ALIGN(16) struct FQuat
{
public:
#ifndef ABOVE_S20
/** The quaternion's X-component. */
float X;
@@ -17,6 +18,12 @@ public:
/** The quaternion's W-component. */
float W;
#else
double X; // 0x0000(0x0008)(Edit, ZeroConstructor, SaveGame, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
double Y; // 0x0008(0x0008)(Edit, ZeroConstructor, SaveGame, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
double Z; // 0x0010(0x0008)(Edit, ZeroConstructor, SaveGame, IsPlainOldData, NoDestructor, HasGetValueTypeHash, NativeAccessSpecifierPublic)
double W;
#endif
struct FRotator Rotator() const;
};

View File

@@ -319,6 +319,9 @@ void Addresses::FindAll()
LOG_INFO(LogDev, "Finding StartAircraftPhase");
Addresses::StartAircraftPhase = FindStartAircraftPhase();
LOG_INFO(LogDev, "Finding GIsClient");
Addresses::GIsClient = FindGIsClient();
// LOG_INFO(LogDev, "Finding GetSessionInterface");
// Addresses::GetSessionInterface = FindGetSessionInterface();
@@ -644,6 +647,11 @@ std::vector<uint64> Addresses::GetFunctionsToNull()
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)
{
toNull.push_back(Memcury::Scanner::FindPattern("48 89 5C 24 10 48 89 6C 24 20 56 57 41 54 41 56 41 57 48 81 EC ? ? ? ? 65 48 8B 04 25 ? ? ? ? 4C 8B F9").Get()); // Crash after 5 mins
}
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
@@ -652,6 +660,21 @@ std::vector<uint64> Addresses::GetFunctionsToNull()
toNull.push_back(Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 48 89 7C 24 ? 55 41 55 41 56 48 8B EC 48 83 EC 50 83 65 28 00 40 B6 05 40 38 35 ? ? ? ? 4C").Get()); // InitializeUI
}
if (Fortnite_Version >= 20)
{
if (Addresses::GIsClient)
{
// all from 20.40
// 99% of these are renderer crashes
// toNull.push_back(Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 55 57 41 56 48 8B EC 48 83 EC 50 83 65 28 00 40 B6 05 40 38 35").Get()); // InitializeUI
toNull.push_back(Memcury::Scanner::FindPattern("48 8B C4 48 89 58 08 4C 89 40 18 48 89 50 10 55 56 57 41 54 41 55 41 56 41 57 48 8D 68 98 48 81 EC ? ? ? ? 49 8B 48 20 45 33").Get()); // Calls func below
toNull.push_back(Memcury::Scanner::FindPattern("48 89 5C 24 ? 57 48 83 EC 20 48 8B 41 20 48 8B FA 48 8B D9 BA ? ? ? ? 83 78 08 03 0F 8D").Get()); // some constructor crash
toNull.push_back(Memcury::Scanner::FindPattern("4C 89 44 24 ? 53 55 56 57 41 54 41 55 41 56 41 57 48 83 EC 68 48 8D 05 ? ? ? ? 0F").Get()); // soem constructor crash (gets called by ^)
toNull.push_back(Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 48 83 EC 30 48 8B F9 48 8B CA E8").Get());
toNull.push_back(Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 6C 24 ? 48 89 74 24 ? 57 41 55 41 56 48 83 EC 60 45 33 F6 4C 8D 2D ? ? ? ? 48 8B DA 48 8B E9 48 85").Get());
}
}
toNull.push_back(Addresses::ChangeGameSessionId);
return toNull;

View File

@@ -684,11 +684,15 @@ void ChangeLevels()
LOG_INFO(LogDev, "Using {}.", bUseSwitchLevel ? Level.ToString() : LevelB.ToString());
auto LocalPC = GetLocalPlayerController();
LOG_INFO(LogDev, "Got PC: {}", __int64(LocalPC));
if (bUseSwitchLevel)
{
static auto SwitchLevel = FindObject<UFunction>(L"/Script/Engine.PlayerController.SwitchLevel");
GetLocalPlayerController()->ProcessEvent(SwitchLevel, &Level);
LocalPC->ProcessEvent(SwitchLevel, &Level);
if (FindGIsServer())
{
@@ -728,7 +732,7 @@ void ChangeLevels()
}
else if (bUseRemovePlayer)
{
UGameplayStatics::RemovePlayer((APlayerController*)GetLocalPlayerController(), true);
UGameplayStatics::RemovePlayer((APlayerController*)LocalPC, true);
}
}
@@ -755,6 +759,46 @@ void ChangeLevels()
}
}
void ApplyNullAndRetTrues()
{
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();
const auto AddressesToReturnTrue = Addresses::GetFunctionsToReturnTrue();
auto ServerCheatAllIndex = GetFunctionIdxOrPtr(FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.ServerCheatAll"));
if (ServerCheatAllIndex)
AddressesToNull.push_back(__int64(FortPlayerControllerAthenaDefault->VFTable[ServerCheatAllIndex / 8]));
for (auto func : AddressesToNull)
{
if (func == 0)
continue;
LOG_INFO(LogDev, "Nulling 0x{:x}", func - __int64(GetModuleHandleW(0)));
DWORD dwProtection;
VirtualProtect((PVOID)func, 1, PAGE_EXECUTE_READWRITE, &dwProtection);
*(uint8_t*)func = 0xC3;
DWORD dwTemp;
VirtualProtect((PVOID)func, 1, dwProtection, &dwTemp);
}
for (auto func : AddressesToReturnTrue)
{
if (func == 0)
continue;
LOG_INFO(LogDev, "Forcing return true on 0x{:x}", func - __int64(GetModuleHandleW(0)));
MH_CreateHook((PVOID)func, ReturnTrueHook, nullptr);
MH_EnableHook((PVOID)func);
}
}
DWORD WINAPI Main(LPVOID)
{
InitLogger();
@@ -821,7 +865,6 @@ DWORD WINAPI Main(LPVOID)
static auto GameModeDefault = FindObject<AFortGameModeAthena>(L"/Script/FortniteGame.Default__FortGameModeAthena");
static auto FortPlayerControllerZoneDefault = FindObject<AFortPlayerController>(L"/Script/FortniteGame.Default__FortPlayerControllerZone");
static auto FortPlayerControllerDefault = FindObject<AFortPlayerController>(L"/Script/FortniteGame.Default__FortPlayerController");
static auto FortPlayerControllerAthenaDefault = FindObject<AFortPlayerControllerAthena>(L"/Script/FortniteGame.Default__FortPlayerControllerAthena"); // FindObject<UClass>(L"/Game/Athena/Athena_PlayerController.Default__Athena_PlayerController_C");
static auto FortPlayerPawnAthenaDefault = FindObject<AFortPlayerPawn>(L"/Script/FortniteGame.Default__FortPlayerPawnAthena"); // FindObject<AFortPlayerPawn>(L"/Game/Athena/PlayerPawn_Athena.Default__PlayerPawn_Athena_C");
static auto FortAbilitySystemComponentAthenaDefault = FindObject<UObject>(L"/Script/FortniteGame.Default__FortAbilitySystemComponentAthena");
static auto FortPlayerStateAthenaDefault = FindObject<AFortPlayerStateAthena>(L"/Script/FortniteGame.Default__FortPlayerStateAthena");
@@ -829,6 +872,9 @@ DWORD WINAPI Main(LPVOID)
static auto AthenaMarkerComponentDefault = FindObject<UAthenaMarkerComponent>(L"/Script/FortniteGame.Default__AthenaMarkerComponent");
static auto FortWeaponDefault = FindObject<AFortWeapon>(L"/Script/FortniteGame.Default__FortWeapon");
static auto FortOctopusVehicleDefault = FindObject<AFortOctopusVehicle>(L"/Script/FortniteGame.Default__FortOctopusVehicle");
static auto FortPlayerControllerAthenaDefault = FindObject<AFortPlayerControllerAthena>(L"/Script/FortniteGame.Default__FortPlayerControllerAthena"); // FindObject<UClass>(L"/Game/Athena/Athena_PlayerController.Default__Athena_PlayerController_C");
ApplyNullAndRetTrues();
// UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogNetPackageMap VeryVerbose", nullptr);
// UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogNetTraffic VeryVerbose", nullptr);
@@ -870,7 +916,9 @@ DWORD WINAPI Main(LPVOID)
Hooking::MinHook::Hook((PVOID)Addresses::ActorGetNetMode, (PVOID)GetNetModeHook2, nullptr);
if (Fortnite_Version > 13) // ermm
if (Fortnite_Version > 13 && // ermm
Fortnite_Version < 20
)
{
Hooking::MinHook::Hook(FindObject<ABuildingFoundation>(L"/Script/FortniteGame.Default__BuildingFoundation"),
FindObject<UFunction>(L"/Script/FortniteGame.BuildingFoundation.SetDynamicFoundationTransform"),
@@ -961,15 +1009,6 @@ DWORD WINAPI Main(LPVOID)
}
}
if (Fortnite_Version >= 17.00) // Fixes random crash that happens a couple minutes after server starts for s17+
{
uintptr_t ServerCrashFix = Memcury::Scanner::FindPattern("48 89 5C 24 10 48 89 6C 24 20 56 57 41 54 41 56 41 57 48 81 EC ? ? ? ? 65 48 8B 04 25 ? ? ? ? 4C 8B F9").Get();
LOG_INFO(LogDev, "ServerCrashFix: 0x{:x}", ServerCrashFix);
Hooking::MinHook::Hook((PVOID)ServerCrashFix, (PVOID)ReturnFalseHook, nullptr);
}
/*
if (Fortnite_Version == 6.21)
@@ -985,41 +1024,6 @@ DWORD WINAPI Main(LPVOID)
LOG_INFO(LogDev, "Switch levels.");
auto AddressesToNull = Addresses::GetFunctionsToNull();
const auto AddressesToReturnTrue = Addresses::GetFunctionsToReturnTrue();
auto ServerCheatAllIndex = GetFunctionIdxOrPtr(FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerController.ServerCheatAll"));
if (ServerCheatAllIndex)
AddressesToNull.push_back(__int64(FortPlayerControllerAthenaDefault->VFTable[ServerCheatAllIndex / 8]));
for (auto func : AddressesToNull)
{
if (func == 0)
continue;
LOG_INFO(LogDev, "Nulling 0x{:x}", func - __int64(GetModuleHandleW(0)));
DWORD dwProtection;
VirtualProtect((PVOID)func, 1, PAGE_EXECUTE_READWRITE, &dwProtection);
*(uint8_t*)func = 0xC3;
DWORD dwTemp;
VirtualProtect((PVOID)func, 1, dwProtection, &dwTemp);
}
for (auto func : AddressesToReturnTrue)
{
if (func == 0)
continue;
LOG_INFO(LogDev, "Forcing return true on 0x{:x}", func - __int64(GetModuleHandleW(0)));
MH_CreateHook((PVOID)func, ReturnTrueHook, nullptr);
MH_EnableHook((PVOID)func);
}
if (Fortnite_Version != 22.4)
{
auto matchmaking = Memcury::Scanner::FindPattern("83 BD ? ? ? ? 01 7F 18 49 8D 4D D8 48 8B D6 E8 ? ? ? ? 48", false).Get();
@@ -1325,8 +1329,12 @@ DWORD WINAPI Main(LPVOID)
AFortPawn::NetMulticast_Athena_BatchedDamageCuesHook, (PVOID*)&AFortPawn::NetMulticast_Athena_BatchedDamageCuesOriginal, false, true);
Hooking::MinHook::Hook(FortPlayerPawnAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPawn.MovingEmoteStopped"),
AFortPawn::MovingEmoteStoppedHook, (PVOID*)&AFortPawn::MovingEmoteStoppedOriginal, false, true);
if (Fortnite_Version < 20) // todo
{
Hooking::MinHook::Hook(FortPlayerPawnAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerPawnAthena.OnCapsuleBeginOverlap") ? FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerPawnAthena.OnCapsuleBeginOverlap") : FindObject<UFunction>(L"/Script/FortniteGame.FortPlayerPawn.OnCapsuleBeginOverlap"),
AFortPlayerPawnAthena::OnCapsuleBeginOverlapHook, (PVOID*)&AFortPlayerPawnAthena::OnCapsuleBeginOverlapOriginal, false, true);
}
Hooking::MinHook::Hook(FortKismetLibraryDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortKismetLibrary.K2_RemoveFortItemFromPlayer"),
UFortKismetLibrary::K2_RemoveFortItemFromPlayerHook, (PVOID*)&UFortKismetLibrary::K2_RemoveFortItemFromPlayerOriginal, false, true);

View File

@@ -641,7 +641,7 @@ static inline void LoadEvent(bool* bWereAllSuccessful = nullptr) // did i forget
if (Fortnite_Version == 7.20)
{
static auto LoadMooneyMapOffset = Loader->GetOffset("LoadMooneyMap");
static auto OnRep_LoadMooneyMapFn = FindObject<UFunction>("/Game/Athena/Prototype/Blueprints/Mooney/BP_MooneyLoader.BP_MooneyLoader_C.OnRep_LoadMooneyMap");
static auto OnRep_LoadMooneyMapFn = FindObject<UFunction>(L"/Game/Athena/Prototype/Blueprints/Mooney/BP_MooneyLoader.BP_MooneyLoader_C.OnRep_LoadMooneyMap");
if (LoadMooneyMapOffset == -1 || !OnRep_LoadMooneyMapFn)
{
@@ -798,14 +798,14 @@ static inline void StartEvent()
if (Fortnite_Version >= 17.30)
{
static auto OnRep_RootStartTimeFn = FindObject<UFunction>("/Script/SpecialEventGameplayRuntime.SpecialEventScriptMeshActor.OnRep_RootStartTime");
static auto MeshRootStartEventFn = FindObject<UFunction>("/Script/SpecialEventGameplayRuntime.SpecialEventScriptMeshActor.MeshRootStartEvent");
auto SpecialEventScriptMeshActorClass = FindObject<UClass>("/Script/SpecialEventGameplayRuntime.SpecialEventScriptMeshActor");
static auto OnRep_RootStartTimeFn = FindObject<UFunction>(L"/Script/SpecialEventGameplayRuntime.SpecialEventScriptMeshActor.OnRep_RootStartTime");
static auto MeshRootStartEventFn = FindObject<UFunction>(L"/Script/SpecialEventGameplayRuntime.SpecialEventScriptMeshActor.MeshRootStartEvent");
auto SpecialEventScriptMeshActorClass = FindObject<UClass>(L"/Script/SpecialEventGameplayRuntime.SpecialEventScriptMeshActor");
auto AllSpecialEventScriptMeshActors = UGameplayStatics::GetAllActorsOfClass(GetWorld(), SpecialEventScriptMeshActorClass);
if (Fortnite_Version == 17.50)
{
auto Scripting = FindObject<UObject>("/Kiwi/Levels/Kiwi_P.Kiwi_P:PersistentLevel.BP_Kiwi_Master_Scripting_2");
auto Scripting = FindObject<UObject>(L"/Kiwi/Levels/Kiwi_P.Kiwi_P:PersistentLevel.BP_Kiwi_Master_Scripting_2");
float SecondsSinceEventBegan = 0;
@@ -821,7 +821,7 @@ static inline void StartEvent()
{
OnReadyParams.PlaylistContextTags = FGameplayTagContainer();
}
auto BB = FindObject<UFunction>("/Kiwi/Gameplay/BP_Kiwi_Master_Scripting.BP_Kiwi_Master_Scripting_C.OnReady_F1A32853487CB7603278E6847A5F2625");
auto BB = FindObject<UFunction>(L"/Kiwi/Gameplay/BP_Kiwi_Master_Scripting.BP_Kiwi_Master_Scripting_C.OnReady_F1A32853487CB7603278E6847A5F2625");
Scripting->ProcessEvent(BB, &OnReadyParams);
auto eventscript = FindObject("/Kiwi/Levels/Kiwi_P.Kiwi_P:PersistentLevel.Kiwi_EventScript_2");

View File

@@ -51,7 +51,7 @@ uint64 FindGIsClient()
auto Addr = Memcury::Scanner::FindStringRef(L"AllowCommandletRendering");
std::vector<std::vector<uint8_t>> BytesArray = {
// {0x88, 0x05}, // Idk what version this is
{0x88, 0x05}, // 20.40
{0xC6, 0x05}, // mov cs X // Checked on 1.11, 12.41
{0x88, 0x1D}, // mov cs bl // Checked on 17.50, 19.10
// {0x44, 0x88} // IDK WHAT VERSION This for but it scuffs older builds

View File

@@ -1456,7 +1456,7 @@ static inline DWORD WINAPI GuiThread(LPVOID)
{
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L"RebootClass", NULL };
::RegisterClassEx(&wc);
HWND hwnd = ::CreateWindowExW(0L, wc.lpszClassName, L"Project Reboot", (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX), 100, 100, Width, Height, NULL, NULL, wc.hInstance, NULL);
HWND hwnd = ::CreateWindowExW(0L, wc.lpszClassName, (L"Project Reboot " + std::to_wstring(Fortnite_Version)).c_str(), (WS_OVERLAPPED | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX | WS_MAXIMIZEBOX), 100, 100, Width, Height, NULL, NULL, wc.hInstance, NULL);
if (false) // idk why this dont work
{