mirror of
https://github.com/Milxnor/Project-Reboot-3.0.git
synced 2026-01-13 02:42:22 +01:00
Ima go get my popeyes
This commit is contained in:
@@ -8,7 +8,7 @@ void ABuildingFoundation::SetDynamicFoundationTransformHook(UObject* Context, FF
|
|||||||
|
|
||||||
auto BuildingFoundation = (ABuildingFoundation*)Context;
|
auto BuildingFoundation = (ABuildingFoundation*)Context;
|
||||||
|
|
||||||
LOG_INFO(LogDev, "Bruh: {}", BuildingFoundation->GetName());
|
LOG_INFO(LogDev, "SetDynamicFoundationTransformHook: {}", BuildingFoundation->GetName());
|
||||||
|
|
||||||
SetFoundationTransform(BuildingFoundation, NewTransform);
|
SetFoundationTransform(BuildingFoundation, NewTransform);
|
||||||
|
|
||||||
|
|||||||
@@ -797,6 +797,7 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game
|
|||||||
|
|
||||||
LOG_INFO(LogNet, "WorldLevel {}", GameState->GetWorldLevel());
|
LOG_INFO(LogNet, "WorldLevel {}", GameState->GetWorldLevel());
|
||||||
|
|
||||||
|
#ifndef ABOVE_S20
|
||||||
if (Globals::AmountOfListens == 1) // we only want to do this one time.
|
if (Globals::AmountOfListens == 1) // we only want to do this one time.
|
||||||
{
|
{
|
||||||
if (bEnableRebooting)
|
if (bEnableRebooting)
|
||||||
@@ -900,18 +901,11 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game
|
|||||||
|
|
||||||
AllRebootVans.Free();
|
AllRebootVans.Free();
|
||||||
|
|
||||||
if (Engine_Version >= 500)
|
|
||||||
{
|
|
||||||
GameState->Get<float>("DefaultParachuteDeployTraceForGroundDistance") = 10000;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (AmountOfBotsToSpawn != 0)
|
if (AmountOfBotsToSpawn != 0)
|
||||||
{
|
{
|
||||||
Bots::SpawnBotsAtPlayerStarts(AmountOfBotsToSpawn);
|
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)
|
if (std::floor(Fortnite_Version) == 5)
|
||||||
{
|
{
|
||||||
auto NewFn = FindObject<UFunction>(L"/Game/Athena/Prototype/Blueprints/Cube/CUBE.CUBE_C.New");
|
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
|
static auto ReplicationDriverOffset = GetWorld()->GetNetDriver()->GetOffset("ReplicationDriver", false); // If netdriver is null the world blows up
|
||||||
|
|
||||||
Globals::bShouldUseReplicationGraph = (!(ReplicationDriverOffset == -1 || Fortnite_Version >= 20))
|
Globals::bShouldUseReplicationGraph = (!(ReplicationDriverOffset == -1 || Fortnite_Version >= 20))
|
||||||
|
|||||||
@@ -120,7 +120,7 @@ APawn* AGameModeBase::SpawnDefaultPawnForHook(AGameModeBase* GameMode, AControll
|
|||||||
static auto DefaultPawnClassOffset = GameMode->GetOffset("DefaultPawnClass");
|
static auto DefaultPawnClassOffset = GameMode->GetOffset("DefaultPawnClass");
|
||||||
GameMode->Get<UClass*>(DefaultPawnClassOffset) = PawnClass;
|
GameMode->Get<UClass*>(DefaultPawnClassOffset) = PawnClass;
|
||||||
|
|
||||||
bool bUseSpawnActor = Fortnite_Version >= 20;
|
bool bUseSpawnActor = false;
|
||||||
|
|
||||||
static auto SpawnDefaultPawnAtTransformFn = FindObject<UFunction>(L"/Script/Engine.GameModeBase.SpawnDefaultPawnAtTransform");
|
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; }
|
struct { AController* NewPlayer; FTransform SpawnTransform; APawn* ReturnValue; }
|
||||||
AGameModeBase_SpawnDefaultPawnAtTransform_Params{ NewPlayer, SpawnTransform };
|
AGameModeBase_SpawnDefaultPawnAtTransform_Params{ NewPlayer, SpawnTransform };
|
||||||
|
|
||||||
|
LOG_INFO(LogDev, "Calling SpawnDefaultPawnAtTransformFn!");
|
||||||
|
|
||||||
GameMode->ProcessEvent(SpawnDefaultPawnAtTransformFn, &AGameModeBase_SpawnDefaultPawnAtTransform_Params);
|
GameMode->ProcessEvent(SpawnDefaultPawnAtTransformFn, &AGameModeBase_SpawnDefaultPawnAtTransform_Params);
|
||||||
|
|
||||||
|
LOG_INFO(LogDev, "Finished SpawnDefaultPawnAtTransformFn!");
|
||||||
|
|
||||||
NewPawn = AGameModeBase_SpawnDefaultPawnAtTransform_Params.ReturnValue;
|
NewPawn = AGameModeBase_SpawnDefaultPawnAtTransform_Params.ReturnValue;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -297,7 +301,7 @@ APawn* AGameModeBase::SpawnDefaultPawnForHook(AGameModeBase* GameMode, AControll
|
|||||||
bFirst = false;
|
bFirst = false;
|
||||||
Calendar::SetSnow(100);
|
Calendar::SetSnow(100);
|
||||||
}
|
}
|
||||||
// LOG_INFO(LogDev, "Finish SpawnDefaultPawnFor!");
|
LOG_INFO(LogDev, "Finish SpawnDefaultPawnFor!");
|
||||||
|
|
||||||
return NewPawn;
|
return NewPawn;
|
||||||
}
|
}
|
||||||
@@ -6,6 +6,7 @@ MS_ALIGN(16) struct FQuat
|
|||||||
{
|
{
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
#ifndef ABOVE_S20
|
||||||
/** The quaternion's X-component. */
|
/** The quaternion's X-component. */
|
||||||
float X;
|
float X;
|
||||||
|
|
||||||
@@ -17,6 +18,12 @@ public:
|
|||||||
|
|
||||||
/** The quaternion's W-component. */
|
/** The quaternion's W-component. */
|
||||||
float W;
|
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;
|
struct FRotator Rotator() const;
|
||||||
};
|
};
|
||||||
@@ -319,6 +319,9 @@ void Addresses::FindAll()
|
|||||||
LOG_INFO(LogDev, "Finding StartAircraftPhase");
|
LOG_INFO(LogDev, "Finding StartAircraftPhase");
|
||||||
Addresses::StartAircraftPhase = FindStartAircraftPhase();
|
Addresses::StartAircraftPhase = FindStartAircraftPhase();
|
||||||
|
|
||||||
|
LOG_INFO(LogDev, "Finding GIsClient");
|
||||||
|
Addresses::GIsClient = FindGIsClient();
|
||||||
|
|
||||||
// LOG_INFO(LogDev, "Finding GetSessionInterface");
|
// LOG_INFO(LogDev, "Finding GetSessionInterface");
|
||||||
// Addresses::GetSessionInterface = FindGetSessionInterface();
|
// 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
|
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)
|
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 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
|
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);
|
toNull.push_back(Addresses::ChangeGameSessionId);
|
||||||
|
|
||||||
return toNull;
|
return toNull;
|
||||||
|
|||||||
@@ -684,11 +684,15 @@ void ChangeLevels()
|
|||||||
|
|
||||||
LOG_INFO(LogDev, "Using {}.", bUseSwitchLevel ? Level.ToString() : LevelB.ToString());
|
LOG_INFO(LogDev, "Using {}.", bUseSwitchLevel ? Level.ToString() : LevelB.ToString());
|
||||||
|
|
||||||
|
auto LocalPC = GetLocalPlayerController();
|
||||||
|
|
||||||
|
LOG_INFO(LogDev, "Got PC: {}", __int64(LocalPC));
|
||||||
|
|
||||||
if (bUseSwitchLevel)
|
if (bUseSwitchLevel)
|
||||||
{
|
{
|
||||||
static auto SwitchLevel = FindObject<UFunction>(L"/Script/Engine.PlayerController.SwitchLevel");
|
static auto SwitchLevel = FindObject<UFunction>(L"/Script/Engine.PlayerController.SwitchLevel");
|
||||||
|
|
||||||
GetLocalPlayerController()->ProcessEvent(SwitchLevel, &Level);
|
LocalPC->ProcessEvent(SwitchLevel, &Level);
|
||||||
|
|
||||||
if (FindGIsServer())
|
if (FindGIsServer())
|
||||||
{
|
{
|
||||||
@@ -728,7 +732,7 @@ void ChangeLevels()
|
|||||||
}
|
}
|
||||||
else if (bUseRemovePlayer)
|
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)
|
DWORD WINAPI Main(LPVOID)
|
||||||
{
|
{
|
||||||
InitLogger();
|
InitLogger();
|
||||||
@@ -821,7 +865,6 @@ DWORD WINAPI Main(LPVOID)
|
|||||||
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 FortPlayerControllerDefault = FindObject<AFortPlayerController>(L"/Script/FortniteGame.Default__FortPlayerController");
|
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 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 FortAbilitySystemComponentAthenaDefault = FindObject<UObject>(L"/Script/FortniteGame.Default__FortAbilitySystemComponentAthena");
|
||||||
static auto FortPlayerStateAthenaDefault = FindObject<AFortPlayerStateAthena>(L"/Script/FortniteGame.Default__FortPlayerStateAthena");
|
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 AthenaMarkerComponentDefault = FindObject<UAthenaMarkerComponent>(L"/Script/FortniteGame.Default__AthenaMarkerComponent");
|
||||||
static auto FortWeaponDefault = FindObject<AFortWeapon>(L"/Script/FortniteGame.Default__FortWeapon");
|
static auto FortWeaponDefault = FindObject<AFortWeapon>(L"/Script/FortniteGame.Default__FortWeapon");
|
||||||
static auto FortOctopusVehicleDefault = FindObject<AFortOctopusVehicle>(L"/Script/FortniteGame.Default__FortOctopusVehicle");
|
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 LogNetPackageMap VeryVerbose", nullptr);
|
||||||
// UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogNetTraffic 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);
|
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"),
|
Hooking::MinHook::Hook(FindObject<ABuildingFoundation>(L"/Script/FortniteGame.Default__BuildingFoundation"),
|
||||||
FindObject<UFunction>(L"/Script/FortniteGame.BuildingFoundation.SetDynamicFoundationTransform"),
|
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)
|
if (Fortnite_Version == 6.21)
|
||||||
@@ -985,41 +1024,6 @@ DWORD WINAPI Main(LPVOID)
|
|||||||
|
|
||||||
LOG_INFO(LogDev, "Switch levels.");
|
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)
|
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();
|
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);
|
AFortPawn::NetMulticast_Athena_BatchedDamageCuesHook, (PVOID*)&AFortPawn::NetMulticast_Athena_BatchedDamageCuesOriginal, false, true);
|
||||||
Hooking::MinHook::Hook(FortPlayerPawnAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPawn.MovingEmoteStopped"),
|
Hooking::MinHook::Hook(FortPlayerPawnAthenaDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortPawn.MovingEmoteStopped"),
|
||||||
AFortPawn::MovingEmoteStoppedHook, (PVOID*)&AFortPawn::MovingEmoteStoppedOriginal, false, true);
|
AFortPawn::MovingEmoteStoppedHook, (PVOID*)&AFortPawn::MovingEmoteStoppedOriginal, false, true);
|
||||||
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"),
|
if (Fortnite_Version < 20) // todo
|
||||||
AFortPlayerPawnAthena::OnCapsuleBeginOverlapHook, (PVOID*)&AFortPlayerPawnAthena::OnCapsuleBeginOverlapOriginal, false, true);
|
{
|
||||||
|
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"),
|
Hooking::MinHook::Hook(FortKismetLibraryDefault, FindObject<UFunction>(L"/Script/FortniteGame.FortKismetLibrary.K2_RemoveFortItemFromPlayer"),
|
||||||
UFortKismetLibrary::K2_RemoveFortItemFromPlayerHook, (PVOID*)&UFortKismetLibrary::K2_RemoveFortItemFromPlayerOriginal, false, true);
|
UFortKismetLibrary::K2_RemoveFortItemFromPlayerHook, (PVOID*)&UFortKismetLibrary::K2_RemoveFortItemFromPlayerOriginal, false, true);
|
||||||
|
|||||||
@@ -641,7 +641,7 @@ static inline void LoadEvent(bool* bWereAllSuccessful = nullptr) // did i forget
|
|||||||
if (Fortnite_Version == 7.20)
|
if (Fortnite_Version == 7.20)
|
||||||
{
|
{
|
||||||
static auto LoadMooneyMapOffset = Loader->GetOffset("LoadMooneyMap");
|
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)
|
if (LoadMooneyMapOffset == -1 || !OnRep_LoadMooneyMapFn)
|
||||||
{
|
{
|
||||||
@@ -798,14 +798,14 @@ static inline void StartEvent()
|
|||||||
|
|
||||||
if (Fortnite_Version >= 17.30)
|
if (Fortnite_Version >= 17.30)
|
||||||
{
|
{
|
||||||
static auto OnRep_RootStartTimeFn = FindObject<UFunction>("/Script/SpecialEventGameplayRuntime.SpecialEventScriptMeshActor.OnRep_RootStartTime");
|
static auto OnRep_RootStartTimeFn = FindObject<UFunction>(L"/Script/SpecialEventGameplayRuntime.SpecialEventScriptMeshActor.OnRep_RootStartTime");
|
||||||
static auto MeshRootStartEventFn = FindObject<UFunction>("/Script/SpecialEventGameplayRuntime.SpecialEventScriptMeshActor.MeshRootStartEvent");
|
static auto MeshRootStartEventFn = FindObject<UFunction>(L"/Script/SpecialEventGameplayRuntime.SpecialEventScriptMeshActor.MeshRootStartEvent");
|
||||||
auto SpecialEventScriptMeshActorClass = FindObject<UClass>("/Script/SpecialEventGameplayRuntime.SpecialEventScriptMeshActor");
|
auto SpecialEventScriptMeshActorClass = FindObject<UClass>(L"/Script/SpecialEventGameplayRuntime.SpecialEventScriptMeshActor");
|
||||||
auto AllSpecialEventScriptMeshActors = UGameplayStatics::GetAllActorsOfClass(GetWorld(), SpecialEventScriptMeshActorClass);
|
auto AllSpecialEventScriptMeshActors = UGameplayStatics::GetAllActorsOfClass(GetWorld(), SpecialEventScriptMeshActorClass);
|
||||||
|
|
||||||
if (Fortnite_Version == 17.50)
|
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;
|
float SecondsSinceEventBegan = 0;
|
||||||
|
|
||||||
@@ -821,7 +821,7 @@ static inline void StartEvent()
|
|||||||
{
|
{
|
||||||
OnReadyParams.PlaylistContextTags = FGameplayTagContainer();
|
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);
|
Scripting->ProcessEvent(BB, &OnReadyParams);
|
||||||
|
|
||||||
auto eventscript = FindObject("/Kiwi/Levels/Kiwi_P.Kiwi_P:PersistentLevel.Kiwi_EventScript_2");
|
auto eventscript = FindObject("/Kiwi/Levels/Kiwi_P.Kiwi_P:PersistentLevel.Kiwi_EventScript_2");
|
||||||
|
|||||||
@@ -51,7 +51,7 @@ uint64 FindGIsClient()
|
|||||||
auto Addr = Memcury::Scanner::FindStringRef(L"AllowCommandletRendering");
|
auto Addr = Memcury::Scanner::FindStringRef(L"AllowCommandletRendering");
|
||||||
|
|
||||||
std::vector<std::vector<uint8_t>> BytesArray = {
|
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
|
{0xC6, 0x05}, // mov cs X // Checked on 1.11, 12.41
|
||||||
{0x88, 0x1D}, // mov cs bl // Checked on 17.50, 19.10
|
{0x88, 0x1D}, // mov cs bl // Checked on 17.50, 19.10
|
||||||
// {0x44, 0x88} // IDK WHAT VERSION This for but it scuffs older builds
|
// {0x44, 0x88} // IDK WHAT VERSION This for but it scuffs older builds
|
||||||
|
|||||||
@@ -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 };
|
WNDCLASSEX wc = { sizeof(WNDCLASSEX), CS_CLASSDC, WndProc, 0L, 0L, GetModuleHandle(NULL), NULL, NULL, NULL, NULL, L"RebootClass", NULL };
|
||||||
::RegisterClassEx(&wc);
|
::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
|
if (false) // idk why this dont work
|
||||||
{
|
{
|
||||||
|
|||||||
Reference in New Issue
Block a user