mirror of
https://github.com/Milxnor/Project-Reboot-3.0.git
synced 2026-01-13 02:42:22 +01:00
marker stuff + vehicle stuff + fix 3.5
This commit is contained in:
145
Project Reboot 3.0/AthenaMarkerComponent.cpp
Normal file
145
Project Reboot 3.0/AthenaMarkerComponent.cpp
Normal file
@@ -0,0 +1,145 @@
|
||||
#include "AthenaMarkerComponent.h"
|
||||
#include "FortPlayerControllerAthena.h"
|
||||
|
||||
void UAthenaMarkerComponent::ServerAddMapMarkerHook(UAthenaMarkerComponent* MarkerComponent, FFortClientMarkerRequest MarkerRequest)
|
||||
{
|
||||
auto Owner = MarkerComponent->GetOwner();
|
||||
|
||||
AFortPlayerControllerAthena* PlayerController = Cast<AFortPlayerControllerAthena>(Owner);
|
||||
|
||||
if (!PlayerController)
|
||||
return;
|
||||
|
||||
AFortPlayerStateAthena* PlayerState = Cast<AFortPlayerStateAthena>(PlayerController->GetPlayerState());
|
||||
|
||||
if (!PlayerState)
|
||||
return;
|
||||
|
||||
auto MarkerRequestPtr = &MarkerRequest;
|
||||
|
||||
static auto FortWorldMarkerDataStruct = FindObject<UStruct>("/Script/FortniteGame.FortWorldMarkerData");
|
||||
static auto FortWorldMarkerDataSize = FortWorldMarkerDataStruct->GetPropertiesSize();
|
||||
|
||||
auto MarkerData = Alloc<FFortWorldMarkerData>(FortWorldMarkerDataSize);
|
||||
|
||||
static auto IconOffset = FindOffsetStruct("/Script/FortniteGame.MarkedActorDisplayInfo", "Icon");
|
||||
static auto WorldPositionOffset = FindOffsetStruct("/Script/FortniteGame.FortWorldMarkerData", "WorldPosition", false);
|
||||
static auto WorldPositionOffsetOffset = FindOffsetStruct("/Script/FortniteGame.FortWorldMarkerData", "WorldPositionOffset", false);
|
||||
|
||||
FMarkerID MarkerID{};
|
||||
MarkerID.PlayerID = PlayerState->GetPlayerID();
|
||||
MarkerID.InstanceID = MarkerRequestPtr->GetInstanceID();
|
||||
|
||||
MarkerData->GetMarkerType() = MarkerRequestPtr->GetMarkerType();
|
||||
MarkerData->GetOwner() = PlayerState;
|
||||
MarkerData->GetWorldNormal() = MarkerRequestPtr->GetWorldNormal();
|
||||
if (WorldPositionOffset != 0)
|
||||
MarkerData->GetWorldPosition() = MarkerRequestPtr->GetWorldPosition();
|
||||
if (WorldPositionOffset != 0)
|
||||
MarkerData->GetWorldPositionOffset() = MarkerRequestPtr->GetWorldPositionOffset();
|
||||
MarkerData->GetMarkerID() = MarkerID;
|
||||
MarkerData->GetMarkedActorClass().SoftObjectPtr.WeakPtr.ObjectIndex = -1;
|
||||
MarkerData->GetMarkedActorClass().SoftObjectPtr.TagAtLastTest = -1;
|
||||
MarkerData->GetMarkedActorClass().SoftObjectPtr.WeakPtr.ObjectSerialNumber = 0;
|
||||
MarkerData->GetMarkedActor().SoftObjectPtr.WeakPtr.ObjectIndex = -1;
|
||||
MarkerData->GetMarkedActor().SoftObjectPtr.TagAtLastTest = -1;
|
||||
MarkerData->GetMarkedActor().SoftObjectPtr.WeakPtr.ObjectSerialNumber = 0;
|
||||
((TSoftObjectPtr<UObject>*)(__int64(MarkerData->GetCustomDisplayInfo()) + IconOffset))->SoftObjectPtr.WeakPtr.ObjectIndex = -1;
|
||||
((TSoftObjectPtr<UObject>*)(__int64(MarkerData->GetCustomDisplayInfo()) + IconOffset))->SoftObjectPtr.TagAtLastTest = -1;
|
||||
((TSoftObjectPtr<UObject>*)(__int64(MarkerData->GetCustomDisplayInfo()) + IconOffset))->SoftObjectPtr.WeakPtr.ObjectSerialNumber = 0;
|
||||
|
||||
/* if (MarkerRequest.MarkedActor)
|
||||
{
|
||||
MarkerData.MarkedActor.WeakPtr.ObjectIndex = MarkerRequest.MarkedActor->InternalIndex;
|
||||
MarkerData.MarkedActor.WeakPtr.ObjectSerialNumber = 0;
|
||||
|
||||
MarkerData.MarkedActorClass.WeakPtr.ObjectIndex = MarkerRequest.MarkedActor->Class->InternalIndex;
|
||||
MarkerData.MarkedActorClass.WeakPtr.ObjectSerialNumber = 0;
|
||||
|
||||
char (*WtfSkidda)(UAthenaMarkerComponent * a1, AActor * a2, FFortWorldMarkerData & MarkerData) = decltype(WtfSkidda)(__int64(GetModuleHandleW(0)) + 0x1297E00);
|
||||
(int)WtfSkidda(PlayerController->MarkerComponent, MarkerRequest.MarkedActor, MarkerData);
|
||||
// std::cout << "WtfSkidda: " << (int)WtfSkidda(PlayerController->MarkerComponent, MarkerRequest.MarkedActor, MarkerData) << '\n';
|
||||
}
|
||||
|
||||
if (MarkerData.MarkerType == EFortWorldMarkerType::Item)
|
||||
{
|
||||
if (auto Pickup = Cast<AFortPickup>(MarkerRequest.MarkedActor))
|
||||
{
|
||||
MarkerData.ItemDefinition = Pickup->PrimaryPickupItemEntry.ItemDefinition;
|
||||
MarkerData.ItemCount = Pickup->PrimaryPickupItemEntry.Count;
|
||||
}
|
||||
} */
|
||||
|
||||
// static void (*Idk)(UAthenaMarkerComponent* MarkerComponent, FFortWorldMarkerData MarkerData) = decltype(Idk)(__int64(GetModuleHandleW(0)) + 0x12A8990);
|
||||
|
||||
static auto PlayerTeamOffset = PlayerState->GetOffset("PlayerTeam");
|
||||
auto PlayerTeam = PlayerState->Get<UObject*>(PlayerTeamOffset);
|
||||
|
||||
if (!PlayerTeam)
|
||||
return;
|
||||
|
||||
static auto TeamMembersOffset = PlayerTeam->GetOffset("TeamMembers");
|
||||
auto& TeamMembers = PlayerTeam->Get<TArray<AController*>>(TeamMembersOffset);
|
||||
|
||||
for (int i = 0; i < TeamMembers.Num(); i++)
|
||||
{
|
||||
if (TeamMembers.at(i) == PlayerController)
|
||||
continue;
|
||||
|
||||
auto CurrentTeamMemberPC = Cast<AFortPlayerControllerAthena>(TeamMembers.at(i));
|
||||
|
||||
if (!CurrentTeamMemberPC)
|
||||
continue;
|
||||
|
||||
auto CurrentTeamMemberMarkerComponent = CurrentTeamMemberPC->GetMarkerComponent();// (UAthenaMarkerComponent*)CurrentTeamMemberPC->GetComponentByClass(UAthenaMarkerComponent::StaticClass());
|
||||
|
||||
if (!CurrentTeamMemberMarkerComponent)
|
||||
continue;
|
||||
|
||||
static auto ClientAddMarkerFn = FindObject<UFunction>("/Script/FortniteGame.AthenaMarkerComponent.ClientAddMarker");
|
||||
CurrentTeamMemberMarkerComponent->ProcessEvent(ClientAddMarkerFn, MarkerData);
|
||||
}
|
||||
}
|
||||
|
||||
void UAthenaMarkerComponent::ServerRemoveMapMarkerHook(UAthenaMarkerComponent* MarkerComponent, FMarkerID MarkerID, uint8_t CancelReason)
|
||||
{
|
||||
auto Owner = MarkerComponent->GetOwner();
|
||||
|
||||
AFortPlayerControllerAthena* PlayerController = Cast<AFortPlayerControllerAthena>(Owner);
|
||||
|
||||
if (!PlayerController)
|
||||
return;
|
||||
|
||||
AFortPlayerStateAthena* PlayerState = Cast<AFortPlayerStateAthena>(PlayerController->GetPlayerState());
|
||||
|
||||
if (!PlayerState)
|
||||
return;
|
||||
|
||||
static auto PlayerTeamOffset = PlayerState->GetOffset("PlayerTeam");
|
||||
auto PlayerTeam = PlayerState->Get<UObject*>(PlayerTeamOffset);
|
||||
|
||||
if (!PlayerTeam)
|
||||
return;
|
||||
|
||||
static auto TeamMembersOffset = PlayerTeam->GetOffset("TeamMembers");
|
||||
auto& TeamMembers = PlayerTeam->Get<TArray<AController*>>(TeamMembersOffset);
|
||||
|
||||
for (int i = 0; i < TeamMembers.Num(); i++)
|
||||
{
|
||||
if (TeamMembers.at(i) == PlayerController)
|
||||
continue;
|
||||
|
||||
auto CurrentTeamMemberPC = Cast<AFortPlayerControllerAthena>(TeamMembers.at(i));
|
||||
|
||||
if (!CurrentTeamMemberPC)
|
||||
continue;
|
||||
|
||||
auto CurrentTeamMemberMarkerComponent = CurrentTeamMemberPC->GetMarkerComponent();
|
||||
|
||||
if (!CurrentTeamMemberMarkerComponent)
|
||||
continue;
|
||||
|
||||
static auto ClientCancelMarkerFn = FindObject<UFunction>("/Script/FortniteGame.AthenaMarkerComponent.ClientCancelMarker");
|
||||
CurrentTeamMemberMarkerComponent->ProcessEvent(ClientCancelMarkerFn, &MarkerID);
|
||||
}
|
||||
}
|
||||
@@ -1,9 +1,105 @@
|
||||
#pragma once
|
||||
|
||||
#include "ActorComponent.h"
|
||||
#include "Vector.h"
|
||||
#include "SoftObjectPtr.h"
|
||||
#include "FortPlayerState.h"
|
||||
|
||||
struct FMarkerID { int PlayerID; int InstanceID; };
|
||||
|
||||
struct FFortClientMarkerRequest
|
||||
{
|
||||
int& GetInstanceID()
|
||||
{
|
||||
static auto InstanceIDOffset = FindOffsetStruct("/Script/FortniteGame.FortClientMarkerRequest", "InstanceID");
|
||||
return *(int*)(__int64(this) + InstanceIDOffset);
|
||||
}
|
||||
|
||||
FVector& GetWorldPosition()
|
||||
{
|
||||
static auto WorldPositionOffset = FindOffsetStruct("/Script/FortniteGame.FortClientMarkerRequest", "WorldPosition");
|
||||
return *(FVector*)(__int64(this) + WorldPositionOffset);
|
||||
}
|
||||
|
||||
uint8_t& GetMarkerType()
|
||||
{
|
||||
static auto MarkerTypeOffset = FindOffsetStruct("/Script/FortniteGame.FortClientMarkerRequest", "MarkerType");
|
||||
return *(uint8_t*)(__int64(this) + MarkerTypeOffset);
|
||||
}
|
||||
|
||||
FVector& GetWorldPositionOffset()
|
||||
{
|
||||
static auto WorldPositionOffsetOffset = FindOffsetStruct("/Script/FortniteGame.FortClientMarkerRequest", "WorldPositionOffset");
|
||||
return *(FVector*)(__int64(this) + WorldPositionOffsetOffset);
|
||||
}
|
||||
|
||||
FVector& GetWorldNormal()
|
||||
{
|
||||
static auto WorldNormalOffset = FindOffsetStruct("/Script/FortniteGame.FortClientMarkerRequest", "WorldNormal");
|
||||
return *(FVector*)(__int64(this) + WorldNormalOffset);
|
||||
}
|
||||
};
|
||||
|
||||
struct FFortWorldMarkerData
|
||||
{
|
||||
FMarkerID& GetMarkerID()
|
||||
{
|
||||
static auto MarkerIDOffset = FindOffsetStruct("/Script/FortniteGame.FortWorldMarkerData", "MarkerID");
|
||||
return *(FMarkerID*)(__int64(this) + MarkerIDOffset);
|
||||
}
|
||||
|
||||
FVector& GetWorldPosition()
|
||||
{
|
||||
static auto WorldPositionOffset = FindOffsetStruct("/Script/FortniteGame.FortWorldMarkerData", "WorldPosition");
|
||||
return *(FVector*)(__int64(this) + WorldPositionOffset);
|
||||
}
|
||||
|
||||
FVector& GetWorldPositionOffset()
|
||||
{
|
||||
static auto WorldPositionOffsetOffset = FindOffsetStruct("/Script/FortniteGame.FortWorldMarkerData", "WorldPositionOffset");
|
||||
return *(FVector*)(__int64(this) + WorldPositionOffsetOffset);
|
||||
}
|
||||
|
||||
FVector& GetWorldNormal()
|
||||
{
|
||||
static auto WorldNormalOffset = FindOffsetStruct("/Script/FortniteGame.FortWorldMarkerData", "WorldNormal");
|
||||
return *(FVector*)(__int64(this) + WorldNormalOffset);
|
||||
}
|
||||
|
||||
TSoftObjectPtr<AActor>& GetMarkedActor()
|
||||
{
|
||||
static auto MarkedActorOffset = FindOffsetStruct("/Script/FortniteGame.FortWorldMarkerData", "MarkedActor");
|
||||
return *(TSoftObjectPtr<AActor>*)(__int64(this) + MarkedActorOffset);
|
||||
}
|
||||
|
||||
uint8_t& GetMarkerType()
|
||||
{
|
||||
static auto MarkerTypeOffset = FindOffsetStruct("/Script/FortniteGame.FortWorldMarkerData", "MarkerType");
|
||||
return *(uint8_t*)(__int64(this) + MarkerTypeOffset);
|
||||
}
|
||||
|
||||
TSoftObjectPtr<UClass>& GetMarkedActorClass()
|
||||
{
|
||||
static auto MarkedActorClassOffset = FindOffsetStruct("/Script/FortniteGame.FortWorldMarkerData", "MarkedActorClass");
|
||||
return *(TSoftObjectPtr<UClass>*)(__int64(this) + MarkedActorClassOffset);
|
||||
}
|
||||
|
||||
AFortPlayerState*& GetOwner()
|
||||
{
|
||||
static auto OwnerOffset = FindOffsetStruct("/Script/FortniteGame.FortWorldMarkerData", "Owner");
|
||||
return *(AFortPlayerState**)(__int64(this) + OwnerOffset);
|
||||
}
|
||||
|
||||
void* GetCustomDisplayInfo()
|
||||
{
|
||||
static auto CustomDisplayInfoOffset = FindOffsetStruct("/Script/FortniteGame.FortWorldMarkerData", "CustomDisplayInfo");
|
||||
return (void*)(__int64(this) + CustomDisplayInfoOffset);
|
||||
}
|
||||
};
|
||||
|
||||
class UAthenaMarkerComponent : public UActorComponent
|
||||
{
|
||||
public:
|
||||
|
||||
static void ServerAddMapMarkerHook(UAthenaMarkerComponent* MarkerComponent, FFortClientMarkerRequest MarkerRequest);
|
||||
static void ServerRemoveMapMarkerHook(UAthenaMarkerComponent* MarkerComponent, FMarkerID MarkerID, uint8_t CancelReason);
|
||||
};
|
||||
@@ -154,6 +154,20 @@ FName AFortGameModeAthena::RedirectLootTier(const FName& LootTier)
|
||||
return LootTier;
|
||||
}
|
||||
|
||||
UClass* AFortGameModeAthena::GetVehicleClassOverride(UClass* DefaultClass)
|
||||
{
|
||||
static auto GetVehicleClassOverrideFn = FindObject<UFunction>("/Script/FortniteGame.FortGameModeAthena.GetVehicleClassOverride");
|
||||
|
||||
if (!GetVehicleClassOverrideFn)
|
||||
return DefaultClass;
|
||||
|
||||
struct { UClass* DefaultClass; UClass* ReturnValue; } GetVehicleClassOverride_Params{DefaultClass};
|
||||
|
||||
this->ProcessEvent(GetVehicleClassOverrideFn, &GetVehicleClassOverride_Params);
|
||||
|
||||
return GetVehicleClassOverride_Params.ReturnValue;
|
||||
}
|
||||
|
||||
bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* GameMode)
|
||||
{
|
||||
auto GameState = GameMode->GetGameStateAthena();
|
||||
@@ -224,7 +238,7 @@ bool AFortGameModeAthena::Athena_ReadyToStartMatchHook(AFortGameModeAthena* Game
|
||||
}
|
||||
else
|
||||
{
|
||||
SetPlaylist(PlaylistToUse, true);
|
||||
// SetPlaylist(PlaylistToUse, true);
|
||||
LOG_INFO(LogDev, "Set playlist!");
|
||||
}
|
||||
|
||||
@@ -734,6 +748,7 @@ void AFortGameModeAthena::Athena_HandleStartingNewPlayerHook(AFortGameModeAthena
|
||||
PlayerStateAthena->ProcessEvent(OnRep_bHasStartedPlayingFn);
|
||||
|
||||
LOG_INFO(LogDev, "Old ID: {}", PlayerStateAthena->GetWorldPlayerId());
|
||||
LOG_INFO(LogDev, "PlayerID: {}", PlayerStateAthena->GetPlayerID());
|
||||
|
||||
// if (PlayerStateAthena->GetWorldPlayerId() == -1)
|
||||
{
|
||||
|
||||
@@ -17,6 +17,7 @@ public:
|
||||
}
|
||||
|
||||
FName RedirectLootTier(const FName& LootTier);
|
||||
UClass* GetVehicleClassOverride(UClass* DefaultClass);
|
||||
|
||||
static bool Athena_ReadyToStartMatchHook(AFortGameModeAthena* GameMode);
|
||||
static int Athena_PickTeamHook(AFortGameModeAthena* GameMode, uint8 preferredTeam, AActor* Controller);
|
||||
|
||||
@@ -55,6 +55,10 @@ int AFortGameStateAthena::GetAircraftIndex(AFortPlayerState* PlayerState)
|
||||
bool AFortGameStateAthena::IsRespawningAllowed(AFortPlayerState* PlayerState) // actually in zone
|
||||
{
|
||||
static auto IsRespawningAllowedFn = FindObject<UFunction>("/Script/FortniteGame.FortGameStateZone.IsRespawningAllowed");
|
||||
|
||||
if (!IsRespawningAllowedFn)
|
||||
return false;
|
||||
|
||||
struct { AFortPlayerState* PlayerState; bool ReturnValue; } AFortGameStateZone_IsRespawningAllowed_Params{PlayerState};
|
||||
this->ProcessEvent(IsRespawningAllowedFn, &AFortGameStateZone_IsRespawningAllowed_Params);
|
||||
|
||||
|
||||
@@ -167,6 +167,16 @@ std::vector<LootDrop> PickLootDrops(FName TierGroupName, bool bPrint, int recurs
|
||||
|
||||
LTDTables.push_back(LoadObject<UDataTable>(L"/Game/Items/Datatables/AthenaLootTierData_Client.AthenaLootTierData_Client"));
|
||||
LPTables.push_back(LoadObject<UDataTable>(L"/Game/Items/Datatables/AthenaLootPackages_Client.AthenaLootPackages_Client"));
|
||||
|
||||
for (int i = 0; i < LTDTables.size(); i++)
|
||||
{
|
||||
LOG_INFO(LogDev, "[{}] LTD {}", LTDTables.at(i)->GetFullName());
|
||||
}
|
||||
|
||||
for (int i = 0; i < LPTables.size(); i++)
|
||||
{
|
||||
LOG_INFO(LogDev, "[{}] LP {}", LPTables.at(i)->GetFullName());
|
||||
}
|
||||
}
|
||||
|
||||
std::vector<FFortLootTierData*> TierGroupLTDs;
|
||||
@@ -193,11 +203,7 @@ std::vector<LootDrop> PickLootDrops(FName TierGroupName, bool bPrint, int recurs
|
||||
if (IsBadReadPtr(TierData, 8))
|
||||
continue;
|
||||
|
||||
// auto TierDataGroupStr = TierData->TierGroup.ToString();
|
||||
|
||||
// std::cout << "TierData->TierGroup.ToString(): " << TierDataGroupStr << '\n';
|
||||
|
||||
if (TierGroupName == TierData->GetTierGroup() /* TierDataGroupStr == TierGroupNameStr */ && TierData->GetWeight() != 0)
|
||||
if (TierGroupName == TierData->GetTierGroup() && TierData->GetWeight() != 0)
|
||||
{
|
||||
TierGroupLTDs.push_back(TierData);
|
||||
}
|
||||
|
||||
@@ -5,6 +5,7 @@
|
||||
#include "FortPlayerPawn.h"
|
||||
#include "SoftObjectPtr.h"
|
||||
#include "FortKismetLibrary.h"
|
||||
#include "AthenaMarkerComponent.h"
|
||||
|
||||
static void ApplyCID(AFortPlayerPawn* Pawn, UObject* CID)
|
||||
{
|
||||
@@ -62,6 +63,12 @@ public:
|
||||
return (AFortPlayerStateAthena*)GetPlayerState();
|
||||
}
|
||||
|
||||
UAthenaMarkerComponent* GetMarkerComponent()
|
||||
{
|
||||
static auto MarkerComponentOffset = GetOffset("MarkerComponent");
|
||||
return Get<UAthenaMarkerComponent*>(MarkerComponentOffset);
|
||||
}
|
||||
|
||||
static void ServerRestartPlayerHook(AFortPlayerControllerAthena* Controller);
|
||||
static void ServerGiveCreativeItemHook(AFortPlayerControllerAthena* Controller, FFortItemEntry CreativeItem);
|
||||
static void ServerTeleportToPlaygroundLobbyIslandHook(AFortPlayerControllerAthena* Controller);
|
||||
|
||||
9
Project Reboot 3.0/PlayerState.cpp
Normal file
9
Project Reboot 3.0/PlayerState.cpp
Normal file
@@ -0,0 +1,9 @@
|
||||
#include "PlayerState.h"
|
||||
|
||||
#include "reboot.h"
|
||||
|
||||
int& APlayerState::GetPlayerID()
|
||||
{
|
||||
static auto PlayerIDOffset = FindOffsetStruct("/Script/Engine.PlayerState", "PlayerID");
|
||||
return Get<int>(PlayerIDOffset);
|
||||
}
|
||||
@@ -5,4 +5,5 @@
|
||||
class APlayerState : public AActor
|
||||
{
|
||||
public:
|
||||
int& GetPlayerID();
|
||||
};
|
||||
@@ -168,6 +168,7 @@
|
||||
<ClCompile Include="Actor.cpp" />
|
||||
<ClCompile Include="ActorComponent.cpp" />
|
||||
<ClCompile Include="addresses.cpp" />
|
||||
<ClCompile Include="AthenaMarkerComponent.cpp" />
|
||||
<ClCompile Include="BuildingActor.cpp" />
|
||||
<ClCompile Include="BuildingSMActor.cpp" />
|
||||
<ClCompile Include="BuildingTrap.cpp" />
|
||||
@@ -211,6 +212,7 @@
|
||||
<ClCompile Include="NetDriver.cpp" />
|
||||
<ClCompile Include="Object.cpp" />
|
||||
<ClCompile Include="PlayerController.cpp" />
|
||||
<ClCompile Include="PlayerState.cpp" />
|
||||
<ClCompile Include="UnrealMath.cpp" />
|
||||
<ClCompile Include="UnrealNames.cpp" />
|
||||
<ClCompile Include="UObjectGlobals.cpp" />
|
||||
|
||||
@@ -152,6 +152,12 @@
|
||||
<ClCompile Include="FortGameMode.cpp">
|
||||
<Filter>FortniteGame\Source\FortniteGame\Private</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="AthenaMarkerComponent.cpp">
|
||||
<Filter>FortniteGame\Source\FortniteGame\Private</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="PlayerState.cpp">
|
||||
<Filter>Engine\Source\Runtime\Engine\Private</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="log.h" />
|
||||
|
||||
@@ -75,12 +75,13 @@ DWORD WINAPI Main(LPVOID)
|
||||
Addresses::Init();
|
||||
Addresses::Print();
|
||||
|
||||
static auto GameModeDefault = FindObject<UClass>(L"/Script/FortniteGame.Default__FortGameModeAthena");
|
||||
static auto FortPlayerControllerZoneDefault = FindObject<UClass>(L"/Script/FortniteGame.Default__FortPlayerControllerZone");
|
||||
static auto FortPlayerControllerAthenaDefault = FindObject<UClass>(L"/Script/FortniteGame.Default__FortPlayerControllerAthena"); // FindObject<UClass>(L"/Game/Athena/Athena_PlayerController.Default__Athena_PlayerController_C");
|
||||
static auto FortPlayerPawnAthenaDefault = FindObject<UClass>(L"/Game/Athena/PlayerPawn_Athena.Default__PlayerPawn_Athena_C");
|
||||
static auto FortAbilitySystemComponentAthenaDefault = FindObject<UClass>(L"/Script/FortniteGame.Default__FortAbilitySystemComponentAthena");
|
||||
static auto FortKismetLibraryDefault = FindObject<UClass>(L"/Script/FortniteGame.Default__FortKismetLibrary");
|
||||
static auto GameModeDefault = FindObject<AFortGameModeAthena>(L"/Script/FortniteGame.Default__FortGameModeAthena");
|
||||
static auto FortPlayerControllerZoneDefault = FindObject<AFortPlayerController>(L"/Script/FortniteGame.Default__FortPlayerControllerZone");
|
||||
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"/Game/Athena/PlayerPawn_Athena.Default__PlayerPawn_Athena_C");
|
||||
static auto FortAbilitySystemComponentAthenaDefault = FindObject<UObject>(L"/Script/FortniteGame.Default__FortAbilitySystemComponentAthena");
|
||||
static auto FortKismetLibraryDefault = FindObject<UFortKismetLibrary>(L"/Script/FortniteGame.Default__FortKismetLibrary");
|
||||
static auto AthenaMarkerComponentDefault = FindObject<UAthenaMarkerComponent>(L"/Script/FortniteGame.Default__AthenaMarkerComponent");
|
||||
|
||||
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogAbilitySystem VeryVerbose", nullptr);
|
||||
UKismetSystemLibrary::ExecuteConsoleCommand(GetWorld(), L"log LogFort VeryVerbose", nullptr);
|
||||
@@ -308,6 +309,11 @@ DWORD WINAPI Main(LPVOID)
|
||||
AFortPlayerController::ServerAttemptAircraftJumpHook, nullptr, false);
|
||||
}
|
||||
|
||||
/* Hooking::MinHook::Hook(AthenaMarkerComponentDefault, FindObject<UFunction>(L"/Script/FortniteGame.AthenaMarkerComponent.ServerAddMapMarker"),
|
||||
UAthenaMarkerComponent::ServerAddMapMarkerHook, nullptr, false);
|
||||
Hooking::MinHook::Hook(AthenaMarkerComponentDefault, FindObject<UFunction>(L"/Script/FortniteGame.AthenaMarkerComponent.ServerRemoveMapMarker"),
|
||||
UAthenaMarkerComponent::ServerRemoveMapMarkerHook, nullptr, false); */
|
||||
|
||||
Hooking::MinHook::Hook((PVOID)Addresses::GetPlayerViewpoint, (PVOID)AFortPlayerControllerAthena::GetPlayerViewPointHook, (PVOID*)&AFortPlayerControllerAthena::GetPlayerViewPointOriginal);
|
||||
Hooking::MinHook::Hook((PVOID)Addresses::TickFlush, (PVOID)UNetDriver::TickFlushHook, (PVOID*)&UNetDriver::TickFlushOriginal);
|
||||
|
||||
@@ -321,6 +327,8 @@ DWORD WINAPI Main(LPVOID)
|
||||
Hooking::MinHook::Hook((PVOID)Addresses::CompletePickupAnimation, (PVOID)AFortPickup::CompletePickupAnimationHook, (PVOID*)&AFortPickup::CompletePickupAnimationOriginal);
|
||||
Hooking::MinHook::Hook((PVOID)Addresses::CanActivateAbility, ReturnTrueHook); // ahhh wtf
|
||||
// Hooking::MinHook::Hook((PVOID)FindFunctionCall(L"ServerRemoveInventoryItem"), UFortInventoryInterface::RemoveInventoryItemHook);
|
||||
|
||||
if (Fortnite_Version >= 13)
|
||||
Hooking::MinHook::Hook((PVOID)Addresses::SetZoneToIndex, (PVOID)SetZoneToIndexHook, (PVOID*)&SetZoneToIndexOriginal);
|
||||
|
||||
Hooking::MinHook::Hook((PVOID)Addresses::ProcessEvent, ProcessEventHook, (PVOID*)&UObject::ProcessEventOriginal);
|
||||
|
||||
@@ -266,10 +266,10 @@ static inline uint64 FindGetMaxTickRate() // Uengine::getmaxtickrate
|
||||
|
||||
static inline uint64 FindGetPlayerViewpoint()
|
||||
{
|
||||
// return Memcury::Scanner::FindPattern("40 55 56 57 41 57 48 8B EC 48 83 EC 48 48 8B 81 ? ? ? ? 4D 8B F8 48 8B").Get(); // 12.41
|
||||
// return Memcury::Scanner::FindPattern("40 55 53 57 41 56 41 57 48 8B EC 48 83 EC 40 48 8B 81 ? ? ? ? 4D").Get(); // 14.60
|
||||
if (Engine_Version == 420)
|
||||
return Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 74 24 ? 55 41 56 41 57 48 8B EC 48 83 EC 50").Get(); // idk why finder doesnt work and cba to debug
|
||||
|
||||
auto Addr = Memcury::Scanner::FindStringRef(L"APlayerController::GetPlayerViewPoint: out_Location, ViewTarget=%s", true);
|
||||
auto Addr = Memcury::Scanner::FindStringRef(L"APlayerController::GetPlayerViewPoint: out_Location, ViewTarget=%s");
|
||||
// return FindBytes(Addr, { 0x48, 0x89 /*, 0x5C */}, 2000, 0, true, 1);
|
||||
auto add = FindBytes(Addr, { 0x40, 0x55 }, 1000, 0, true);
|
||||
return add ? add : FindBytes(Addr, { 0x48, 0x89, 0x5C }, 2000, 0, true);
|
||||
@@ -431,7 +431,7 @@ static inline uint64 FindNoMCP()
|
||||
} */
|
||||
|
||||
if (std::floor(Fortnite_Version) == 3)
|
||||
return Memcury::Scanner::FindPattern("E8 ? ? ? ? 83 A7 ? ? ? ? ? 48 8D 4C 24 ?").Get();
|
||||
return Memcury::Scanner::FindPattern("E8 ? ? ? ? 83 A7 ? ? ? ? ? 48 8D 4C 24 ?").RelativeOffset(1).Get();
|
||||
|
||||
if (std::floor(Fortnite_Version) == 4)
|
||||
return Memcury::Scanner::FindPattern("E8 ? ? ? ? 83 A7 ? ? ? ? ? 83 E0 01").RelativeOffset(1).Get();
|
||||
|
||||
@@ -73,6 +73,7 @@ inline void InitLogger()
|
||||
MakeLogger("LogCreative");
|
||||
MakeLogger("LogZone");
|
||||
MakeLogger("LogReplication");
|
||||
MakeLogger("LogVehicles");
|
||||
}
|
||||
|
||||
#define LOG_DEBUG(loggerName, ...) \
|
||||
|
||||
@@ -340,7 +340,7 @@ static UObject* GetPlaylistToUse()
|
||||
}
|
||||
*/
|
||||
|
||||
Playlist = FindObject("/Game/Athena/Playlists/Playground/Playlist_Playground.Playlist_Playground");
|
||||
// Playlist = FindObject("/Game/Athena/Playlists/Playground/Playlist_Playground.Playlist_Playground");
|
||||
|
||||
// Playlist = FindObject("/MoleGame/Playlists/Playlist_MoleGame.Playlist_MoleGame");
|
||||
// Playlist = FindObject("/Game/Athena/Playlists/DADBRO/Playlist_DADBRO_Squads_8.Playlist_DADBRO_Squads_8");
|
||||
|
||||
@@ -18,11 +18,16 @@ static inline void ServerVehicleUpdate(UObject* Context, FFrame& Stack, void* Re
|
||||
|
||||
FTransform Transform{};
|
||||
|
||||
static std::string StateStructName = FindObject("/Script/FortniteGame.ReplicatedPhysicsPawnState") ? "/Script/FortniteGame.ReplicatedPhysicsPawnState" : "";
|
||||
static std::string StateStructName = FindObject("/Script/FortniteGame.ReplicatedPhysicsPawnState") ? "/Script/FortniteGame.ReplicatedPhysicsPawnState" : "Script/FortniteGame.ReplicatedAthenaVehiclePhysicsState";
|
||||
|
||||
if (StateStructName.empty())
|
||||
return;
|
||||
|
||||
auto StateStruct = FindObject(StateStructName);
|
||||
|
||||
if (!StateStruct)
|
||||
return;
|
||||
|
||||
auto State = (void*)(__int64(Params) + 0);
|
||||
|
||||
static auto RotationOffset = FindOffsetStruct(StateStructName, "Rotation");
|
||||
@@ -42,6 +47,12 @@ static inline void ServerVehicleUpdate(UObject* Context, FFrame& Stack, void* Re
|
||||
|
||||
Transform.Rotation = *Rotation;
|
||||
}
|
||||
else
|
||||
{
|
||||
auto Rotation = (FQuat*)(__int64(State) + RotationOffset);
|
||||
|
||||
Transform.Rotation = *Rotation;
|
||||
}
|
||||
|
||||
Transform.Translation = *(FVector*)(__int64(State) + TranslationOffset);
|
||||
Transform.Scale3D = FVector{ 1, 1, 1 };
|
||||
@@ -91,6 +102,7 @@ static inline void ServerVehicleUpdate(UObject* Context, FFrame& Stack, void* Re
|
||||
|
||||
static inline void AddVehicleHook()
|
||||
{
|
||||
static auto FortAthenaVehicleDefault = FindObject("/Script/FortniteGame.Default__FortAthenaVehicle");
|
||||
static auto FortPhysicsPawnDefault = FindObject("/Script/FortniteGame.Default__FortPhysicsPawn");
|
||||
|
||||
if (FortPhysicsPawnDefault)
|
||||
@@ -99,10 +111,17 @@ static inline void AddVehicleHook()
|
||||
FindObject<UFunction>("/Script/FortniteGame.FortPhysicsPawn.ServerMove") : FindObject<UFunction>("/Script/FortniteGame.FortPhysicsPawn.ServerUpdatePhysicsParams"),
|
||||
ServerVehicleUpdate, nullptr, false, true);
|
||||
}
|
||||
else
|
||||
{
|
||||
Hooking::MinHook::Hook(FortAthenaVehicleDefault, FindObject<UFunction>("/Script/FortniteGame.FortAthenaVehicle.ServerUpdatePhysicsParams"),
|
||||
ServerVehicleUpdate, nullptr, false, true);
|
||||
}
|
||||
}
|
||||
|
||||
static inline AActor* SpawnVehicleFromSpawner(AActor* VehicleSpawner)
|
||||
{
|
||||
auto GameMode = Cast<AFortGameModeAthena>(GetWorld()->GetGameMode());
|
||||
|
||||
FTransform SpawnTransform{};
|
||||
SpawnTransform.Translation = VehicleSpawner->GetActorLocation();
|
||||
SpawnTransform.Rotation = VehicleSpawner->GetActorRotation().Quaternion();
|
||||
@@ -112,13 +131,46 @@ static inline AActor* SpawnVehicleFromSpawner(AActor* VehicleSpawner)
|
||||
|
||||
if (VehicleClassOffset != 0) // 10.40 and below?
|
||||
{
|
||||
auto VehicleClass = VehicleSpawner->Get<UClass*>(VehicleClassOffset);
|
||||
auto& SoftVehicleClass = VehicleSpawner->Get<TSoftObjectPtr<UClass>>(VehicleClassOffset);
|
||||
auto StrongVehicleClass = SoftVehicleClass.Get();
|
||||
|
||||
if (!VehicleClass)
|
||||
if (!StrongVehicleClass)
|
||||
{
|
||||
std::string VehicleClassObjectName = SoftVehicleClass.SoftObjectPtr.ObjectID.AssetPathName.ComparisonIndex.Value == 0 ? "InvalidName" : SoftVehicleClass.SoftObjectPtr.ObjectID.AssetPathName.ToString();
|
||||
LOG_WARN(LogVehicles, "Failed to load vehicle class: {}", VehicleClassObjectName);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return GetWorld()->SpawnActor<AActor>(StrongVehicleClass, SpawnTransform);
|
||||
}
|
||||
|
||||
static auto FortVehicleItemDefOffset = VehicleSpawner->GetOffset("FortVehicleItemDef");
|
||||
|
||||
if (FortVehicleItemDefOffset == 0)
|
||||
return nullptr;
|
||||
|
||||
return GetWorld()->SpawnActor<AActor>(VehicleClass, SpawnTransform);
|
||||
auto& SoftFortVehicleItemDef = VehicleSpawner->Get<TSoftObjectPtr<UFortItemDefinition>>(FortVehicleItemDefOffset);
|
||||
auto StrongFortVehicleItemDef = SoftFortVehicleItemDef.Get();
|
||||
|
||||
if (!StrongFortVehicleItemDef)
|
||||
{
|
||||
std::string FortVehicleItemDefObjectName = SoftFortVehicleItemDef.SoftObjectPtr.ObjectID.AssetPathName.ComparisonIndex.Value == 0 ? "InvalidName" : SoftFortVehicleItemDef.SoftObjectPtr.ObjectID.AssetPathName.ToString();
|
||||
LOG_WARN(LogVehicles, "Failed to load vehicle item definition: {}", FortVehicleItemDefObjectName);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
static auto VehicleActorClassOffset = StrongFortVehicleItemDef->GetOffset("VehicleActorClass");
|
||||
auto& SoftVehicleActorClass = StrongFortVehicleItemDef->Get<TSoftObjectPtr<UClass>>(VehicleActorClassOffset);
|
||||
auto StrongVehicleActorClass = SoftVehicleActorClass.Get();
|
||||
|
||||
if (!StrongVehicleActorClass)
|
||||
{
|
||||
std::string VehicleActorClassObjectName = SoftVehicleActorClass.SoftObjectPtr.ObjectID.AssetPathName.ComparisonIndex.Value == 0 ? "InvalidName" : SoftVehicleActorClass.SoftObjectPtr.ObjectID.AssetPathName.ToString();
|
||||
LOG_WARN(LogVehicles, "Failed to load vehicle actor class: {}", VehicleActorClassObjectName);
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
return GetWorld()->SpawnActor<AActor>(StrongVehicleActorClass, SpawnTransform);
|
||||
}
|
||||
|
||||
static inline void SpawnVehicles2()
|
||||
|
||||
Reference in New Issue
Block a user