mirror of
https://github.com/Milxnor/Project-Reboot-3.0.git
synced 2026-01-13 02:42:22 +01:00
a bit
Fixed MCP on 1.8, Fixed some buildings not showing up on 1.7.2 and 1.8, fixed listplayers crashing on some versions
This commit is contained in:
@@ -1321,7 +1321,10 @@ void AFortPlayerController::ClientOnPawnDiedHook(AFortPlayerController* PlayerCo
|
||||
}
|
||||
}
|
||||
|
||||
if (GameState->GetGamePhase() == EAthenaGamePhase::EndGame)
|
||||
LOG_INFO(LogDev, "KillerPlayerState->Place: {}", KillerPlayerState ? KillerPlayerState->GetPlace() : -1);
|
||||
|
||||
// if (GameState->GetGamePhase() == EAthenaGamePhase::EndGame)
|
||||
if (false)
|
||||
{
|
||||
CreateThread(0, 0, RestartThread, 0, 0, 0);
|
||||
}
|
||||
|
||||
@@ -93,7 +93,7 @@ static bool ApplyCID(AFortPlayerPawn* Pawn, UObject* CID, bool bUseServerChooseP
|
||||
|
||||
return true; */
|
||||
|
||||
if (Engine_Version == 416)
|
||||
if (Fortnite_Version == 1.72)
|
||||
return false;
|
||||
|
||||
static auto HeroDefinitionOffset = CID->GetOffset("HeroDefinition");
|
||||
|
||||
@@ -20,12 +20,10 @@ public:
|
||||
return Get<uint8>(TeamIndexOffset);
|
||||
}
|
||||
|
||||
FString GetPlayerName()
|
||||
int& GetPlace()
|
||||
{
|
||||
static auto GetPlayerNameFn = FindObject<UFunction>("/Script/Engine.PlayerState.GetPlayerName");
|
||||
FString PlayerName;
|
||||
this->ProcessEvent(GetPlayerNameFn, &PlayerName);
|
||||
return PlayerName;
|
||||
static auto PlaceOffset = GetOffset("Place");
|
||||
return Get<int>(PlaceOffset);
|
||||
}
|
||||
|
||||
void ClientReportKill(AFortPlayerStateAthena* Player)
|
||||
|
||||
@@ -1,8 +1,18 @@
|
||||
#include "NetConnection.h"
|
||||
|
||||
bool UNetConnection::ClientHasInitializedLevelFor(const AActor* TestActor) const {
|
||||
// return true;
|
||||
static auto ClientHasInitializedLevelForAddr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B 5A 20 48 8B F1 4C 8B C3").Get();
|
||||
bool UNetConnection::ClientHasInitializedLevelFor(const AActor* TestActor) const
|
||||
{
|
||||
static auto ClientHasInitializedLevelForAddr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B 5A 20 48 8B F1 4C 8B C3", false).Get();
|
||||
|
||||
if (!ClientHasInitializedLevelForAddr)
|
||||
{
|
||||
ClientHasInitializedLevelForAddr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B 5A 20 48 8B F1 4C 8B C3 48 8D", false).Get(); // 1.8
|
||||
|
||||
if (!ClientHasInitializedLevelForAddr)
|
||||
{
|
||||
ClientHasInitializedLevelForAddr = Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 57 48 83 EC 20 48 8B F9 48 85 D2 74 35 48").Get(); // 1.7.2
|
||||
}
|
||||
}
|
||||
|
||||
if (!ClientHasInitializedLevelForAddr)
|
||||
return true;
|
||||
|
||||
@@ -7,6 +7,7 @@
|
||||
#include "GameplayStatics.h"
|
||||
#include "KismetMathLibrary.h"
|
||||
#include <random>
|
||||
#include "Package.h"S
|
||||
#include "AssertionMacros.h"
|
||||
|
||||
FNetworkObjectList& UNetDriver::GetNetworkObjectList()
|
||||
@@ -348,15 +349,18 @@ bool UNetDriver::IsLevelInitializedForActor(const AActor* InActor, const UNetCon
|
||||
return true;
|
||||
}
|
||||
|
||||
/* #if !(UE_BUILD_SHIPPING || UE_BUILD_TEST)
|
||||
/* #if !(UE_BUILD_SHIPPING || UE_BUILD_TEST) // (Milxnor) This is on some ue versions and others not.
|
||||
if (!InActor || !InConnection)
|
||||
return false;
|
||||
|
||||
// check(World == InActor->GetWorld());
|
||||
#endif */
|
||||
|
||||
// return true; // damn
|
||||
const bool bCorrectWorld = (InConnection->GetClientWorldPackageName() == GetWorldPackage()->NamePrivate && InConnection->ClientHasInitializedLevelFor(InActor));
|
||||
bool bFirstWorldCheck = Engine_Version == 416
|
||||
? (InConnection->GetClientWorldPackageName() == GetWorld()->GetOutermost()->GetFName())
|
||||
: (InConnection->GetClientWorldPackageName() == GetWorldPackage()->NamePrivate);
|
||||
|
||||
const bool bCorrectWorld = (bFirstWorldCheck && InConnection->ClientHasInitializedLevelFor(InActor));
|
||||
const bool bIsConnectionPC = (InActor == InConnection->GetPlayerController());
|
||||
return bCorrectWorld || bIsConnectionPC;
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "Class.h"
|
||||
#include "KismetSystemLibrary.h"
|
||||
#include "UObjectArray.h"
|
||||
#include "Package.h"
|
||||
|
||||
FName* getFNameOfProp(void* Property)
|
||||
{
|
||||
@@ -140,6 +141,20 @@ std::string UObject::GetFullName()
|
||||
return ClassPrivate ? ClassPrivate->GetName() + " " + UKismetSystemLibrary::GetPathName(this).ToString() : "NoClassPrivate";
|
||||
}
|
||||
|
||||
UPackage* UObject::GetOutermost() const
|
||||
{
|
||||
UObject* Top = (UObject*)this;
|
||||
for (;;)
|
||||
{
|
||||
UObject* CurrentOuter = Top->GetOuter();
|
||||
if (!CurrentOuter)
|
||||
{
|
||||
return Cast<UPackage>(Top);
|
||||
}
|
||||
Top = CurrentOuter;
|
||||
}
|
||||
}
|
||||
|
||||
bool UObject::IsA(UClass* otherClass)
|
||||
{
|
||||
UClass* super = ClassPrivate;
|
||||
|
||||
@@ -53,7 +53,10 @@ public:
|
||||
std::string GetName() { return NamePrivate.ToString(); }
|
||||
std::string GetPathName();
|
||||
std::string GetFullName();
|
||||
UObject* GetOuter() const { return OuterPrivate; }
|
||||
FName GetFName() const { return NamePrivate; }
|
||||
|
||||
class UPackage* GetOutermost() const;
|
||||
bool IsA(UClass* Other);
|
||||
class UFunction* FindFunction(const std::string& ShortFunctionName);
|
||||
|
||||
|
||||
9
Project Reboot 3.0/Package.h
Normal file
9
Project Reboot 3.0/Package.h
Normal file
@@ -0,0 +1,9 @@
|
||||
#pragma once
|
||||
|
||||
#include "Object.h"
|
||||
|
||||
class UPackage : public UObject
|
||||
{
|
||||
public:
|
||||
static UClass* StaticClass();
|
||||
};
|
||||
@@ -2,6 +2,21 @@
|
||||
|
||||
#include "reboot.h"
|
||||
|
||||
FString APlayerState::GetPlayerName()
|
||||
{
|
||||
static auto GetPlayerNameFn = FindObject<UFunction>("/Script/Engine.PlayerState.GetPlayerName");
|
||||
|
||||
if (GetPlayerNameFn)
|
||||
{
|
||||
FString PlayerName;
|
||||
this->ProcessEvent(GetPlayerNameFn, &PlayerName);
|
||||
return PlayerName;
|
||||
}
|
||||
|
||||
static auto PlayerNameOffset = GetOffset("PlayerName");
|
||||
return Get<FString>(PlayerNameOffset);
|
||||
}
|
||||
|
||||
int& APlayerState::GetPlayerID()
|
||||
{
|
||||
static auto PlayerIDOffset = FindOffsetStruct("/Script/Engine.PlayerState", "PlayerID", false);
|
||||
|
||||
@@ -2,8 +2,11 @@
|
||||
|
||||
#include "Actor.h"
|
||||
|
||||
#include "UnrealString.h"
|
||||
|
||||
class APlayerState : public AActor
|
||||
{
|
||||
public:
|
||||
FString GetPlayerName();
|
||||
int& GetPlayerID(); // for future me to deal with (this is a short on some versions).
|
||||
};
|
||||
@@ -245,6 +245,7 @@
|
||||
<ClCompile Include="Object.cpp" />
|
||||
<ClCompile Include="PlayerController.cpp" />
|
||||
<ClCompile Include="PlayerState.cpp" />
|
||||
<ClCompile Include="SavePackage.cpp" />
|
||||
<ClCompile Include="UnrealMath.cpp" />
|
||||
<ClCompile Include="UnrealNames.cpp" />
|
||||
<ClCompile Include="UObjectGlobals.cpp" />
|
||||
@@ -398,6 +399,7 @@
|
||||
<ClInclude Include="ObjectMacros.h" />
|
||||
<ClInclude Include="OnlineReplStructs.h" />
|
||||
<ClInclude Include="OutputDevice.h" />
|
||||
<ClInclude Include="Package.h" />
|
||||
<ClInclude Include="Pawn.h" />
|
||||
<ClInclude Include="PersistentObjectPtr.h" />
|
||||
<ClInclude Include="Player.h" />
|
||||
|
||||
@@ -256,6 +256,9 @@
|
||||
<ClCompile Include="dllmain.cpp">
|
||||
<Filter>Reboot\Public</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="SavePackage.cpp">
|
||||
<Filter>Engine\Source\Runtime\CoreUObject\Private</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="log.h" />
|
||||
@@ -324,9 +327,6 @@
|
||||
<ClInclude Include="Transform.h">
|
||||
<Filter>Engine\Source\Runtime\Core\Public\Math</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Vector.h">
|
||||
<Filter>Engine\Source\Runtime\Core\Public\Math</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Quat.h">
|
||||
<Filter>Engine\Source\Runtime\Core\Public\Math</Filter>
|
||||
</ClInclude>
|
||||
@@ -820,6 +820,12 @@
|
||||
<ClInclude Include="FortAthenaMapInfo.h">
|
||||
<Filter>FortniteGame\Source\FortniteGame\Public</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Package.h">
|
||||
<Filter>Engine\Source\Runtime\CoreUObject\Public\UObject</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Vector.h">
|
||||
<Filter>Engine\Source\Runtime\Core\Public\Misc</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<Filter Include="Engine">
|
||||
|
||||
9
Project Reboot 3.0/SavePackage.cpp
Normal file
9
Project Reboot 3.0/SavePackage.cpp
Normal file
@@ -0,0 +1,9 @@
|
||||
#include "Package.h"
|
||||
|
||||
#include "reboot.h"
|
||||
|
||||
UClass* UPackage::StaticClass()
|
||||
{
|
||||
static auto Class = FindObject<UClass>("/Script/CoreUObject.Package");
|
||||
return Class;
|
||||
}
|
||||
@@ -34,7 +34,6 @@ namespace Builder
|
||||
|
||||
if (!Class)
|
||||
{
|
||||
std::cout << "Invalid Class!\n";
|
||||
continue;
|
||||
}
|
||||
|
||||
|
||||
@@ -208,6 +208,12 @@ void ServerCheatHook(AFortPlayerControllerAthena* PlayerController, FString Msg)
|
||||
return;
|
||||
}
|
||||
|
||||
if (Fortnite_Version < 3) // Idk why but emptyslot kicks the player because of the validate.
|
||||
{
|
||||
SendMessageToConsole(PlayerController, L"Not supported on this version!");
|
||||
return;
|
||||
}
|
||||
|
||||
auto WorldInventory = ReceivingController->GetWorldInventory();
|
||||
|
||||
if (!WorldInventory)
|
||||
@@ -357,7 +363,7 @@ void ServerCheatHook(AFortPlayerControllerAthena* PlayerController, FString Msg)
|
||||
|
||||
auto CurrentPlayerState = Cast<AFortPlayerStateAthena>(CurrentPlayerController->GetPlayerState());
|
||||
|
||||
if (!CurrentPlayerState)
|
||||
if (!CurrentPlayerState->IsValidLowLevel())
|
||||
continue;
|
||||
|
||||
PlayerNames += "\"" + CurrentPlayerState->GetPlayerName().ToString() + "\" ";
|
||||
|
||||
@@ -261,7 +261,10 @@ static int playerTabTab = MAIN_PLAYERTAB;
|
||||
|
||||
static inline void StaticUI()
|
||||
{
|
||||
ImGui::Checkbox("Auto Restart", &Globals::bAutoRestart);
|
||||
if (IsRestartingSupported())
|
||||
{
|
||||
// ImGui::Checkbox("Auto Restart", &Globals::bAutoRestart);
|
||||
}
|
||||
|
||||
#ifndef PROD
|
||||
ImGui::Checkbox("Log ProcessEvent", &Globals::bLogProcessEvent);
|
||||
|
||||
Reference in New Issue
Block a user