From be2fc81942e66aad173ba05aef269453bd3844ef Mon Sep 17 00:00:00 2001 From: Gray <84999745+Milxnor@users.noreply.github.com> Date: Fri, 8 Mar 2024 18:16:32 -0500 Subject: [PATCH] blow up --- Project Reboot 3.0/Controller.cpp | 6 +++ Project Reboot 3.0/Controller.h | 1 + Project Reboot 3.0/FortAthenaVehicle.cpp | 2 + Project Reboot 3.0/FortGameModeAthena.cpp | 2 + Project Reboot 3.0/FortPlayerController.cpp | 50 +++++-------------- .../FortPlayerControllerAthena.cpp | 7 +++ Project Reboot 3.0/PlayerController.cpp | 7 +++ Project Reboot 3.0/PlayerController.h | 1 + Project Reboot 3.0/dllmain.cpp | 5 +- 9 files changed, 43 insertions(+), 38 deletions(-) diff --git a/Project Reboot 3.0/Controller.cpp b/Project Reboot 3.0/Controller.cpp index 7eedeab..267020b 100644 --- a/Project Reboot 3.0/Controller.cpp +++ b/Project Reboot 3.0/Controller.cpp @@ -14,4 +14,10 @@ void AController::Possess(class APawn* Pawn) { auto PossessFn = FindFunction("Possess"); this->ProcessEvent(PossessFn, &Pawn); +} + +void AController::UnPossess() +{ + auto UnPossessFn = FindFunction("UnPossess"); + this->ProcessEvent(UnPossessFn); } \ No newline at end of file diff --git a/Project Reboot 3.0/Controller.h b/Project Reboot 3.0/Controller.h index 52a1422..ec09160 100644 --- a/Project Reboot 3.0/Controller.h +++ b/Project Reboot 3.0/Controller.h @@ -7,6 +7,7 @@ class AController : public AActor public: AActor* GetViewTarget(); void Possess(class APawn* Pawn); + void UnPossess(); FName& GetStateName() { diff --git a/Project Reboot 3.0/FortAthenaVehicle.cpp b/Project Reboot 3.0/FortAthenaVehicle.cpp index d69505b..b0e7088 100644 --- a/Project Reboot 3.0/FortAthenaVehicle.cpp +++ b/Project Reboot 3.0/FortAthenaVehicle.cpp @@ -27,6 +27,8 @@ UFortWeaponItemDefinition* AFortAthenaVehicle::GetVehicleWeaponForSeat(int SeatI static auto WeaponSeatDefinitionsOffset = WeaponComponent->GetOffset("WeaponSeatDefinitions"); auto& WeaponSeatDefinitions = WeaponComponent->Get>(WeaponSeatDefinitionsOffset); + // VehicleWeaponDefinition = *(UFortWeaponItemDefinition**)(__int64(WeaponSeatDefinitions.at(SeatIdx)) + VehicleWeaponOffset); + for (int i = 0; i < WeaponSeatDefinitions.Num(); i++) { auto WeaponSeat = WeaponSeatDefinitions.AtPtr(i, WeaponSeatDefinitionStructSize); diff --git a/Project Reboot 3.0/FortGameModeAthena.cpp b/Project Reboot 3.0/FortGameModeAthena.cpp index 1eda51f..9065cb3 100644 --- a/Project Reboot 3.0/FortGameModeAthena.cpp +++ b/Project Reboot 3.0/FortGameModeAthena.cpp @@ -65,6 +65,8 @@ static UFortPlaylistAthena* GetPlaylistToUse() if (Globals::bCreative) Playlist = FindObject(L"/Game/Athena/Playlists/Creative/Playlist_PlaygroundV2.Playlist_PlaygroundV2"); + // Playlist = FindObject(L"/Game/Athena/Playlists/Respawn/Variants/Respawn_Vamp/Playlist_Respawn_Vamp_Solo.Playlist_Respawn_Vamp_Solo"); + return Playlist; } diff --git a/Project Reboot 3.0/FortPlayerController.cpp b/Project Reboot 3.0/FortPlayerController.cpp index b040ccc..3099d43 100644 --- a/Project Reboot 3.0/FortPlayerController.cpp +++ b/Project Reboot 3.0/FortPlayerController.cpp @@ -499,54 +499,30 @@ void AFortPlayerController::ServerAttemptInteractHook(UObject* Context, FFrame* if (!WorldInventory) return; - auto NewAndModifiedInstances = WorldInventory->AddItem(VehicleWeaponDefinition, nullptr); + auto NewAndModifiedInstances = WorldInventory->AddItem(VehicleWeaponDefinition, nullptr, 1, 9999); + auto NewVehicleInstance = NewAndModifiedInstances.first[0]; if (!NewVehicleInstance) return; - WorldInventory->Update(); + static auto FortItemEntrySize = FFortItemEntry::GetStructSize(); - auto VehicleWeapon = Pawn->EquipWeaponDefinition(VehicleWeaponDefinition, NewVehicleInstance->GetItemEntry()->GetItemGuid()); - // PlayerController->ServerExecuteInventoryItemHook(PlayerController, newitem->GetItemEntry()->GetItemGuid()); + auto& ReplicatedEntries = WorldInventory->GetItemList().GetReplicatedEntries(); - /* static auto GetSeatWeaponComponentFn = FindObject("/Script/FortniteGame.FortAthenaVehicle.GetSeatWeaponComponent"); - - if (GetSeatWeaponComponentFn) + for (int i = 0; i < ReplicatedEntries.Num(); i++) { - struct { int SeatIndex; UObject* ReturnValue; } AFortAthenaVehicle_GetSeatWeaponComponent_Params{}; + auto ReplicatedEntry = ReplicatedEntries.AtPtr(i, FortItemEntrySize); - Vehicle->ProcessEvent(GetSeatWeaponComponentFn, &AFortAthenaVehicle_GetSeatWeaponComponent_Params); - - UObject* WeaponComponent = AFortAthenaVehicle_GetSeatWeaponComponent_Params.ReturnValue; - - if (!WeaponComponent) - return; - - static auto WeaponSeatDefinitionStructSize = FindObject("/Script/FortniteGame.WeaponSeatDefinition")->GetPropertiesSize(); - static auto VehicleWeaponOffset = FindOffsetStruct("/Script/FortniteGame.WeaponSeatDefinition", "VehicleWeapon"); - static auto SeatIndexOffset = FindOffsetStruct("/Script/FortniteGame.WeaponSeatDefinition", "SeatIndex"); - static auto WeaponSeatDefinitionsOffset = WeaponComponent->GetOffset("WeaponSeatDefinitions"); - auto& WeaponSeatDefinitions = WeaponComponent->Get>(WeaponSeatDefinitionsOffset); - - for (int i = 0; i < WeaponSeatDefinitions.Num(); ++i) + if (ReplicatedEntry->GetItemGuid() == NewVehicleInstance->GetItemEntry()->GetItemGuid()) { - auto WeaponSeat = WeaponSeatDefinitions.AtPtr(i, WeaponSeatDefinitionStructSize); + WorldInventory->GetItemList().MarkItemDirty(ReplicatedEntry); + WorldInventory->GetItemList().MarkItemDirty(NewVehicleInstance->GetItemEntry()); + WorldInventory->HandleInventoryLocalUpdate(); - if (*(int*)(__int64(WeaponSeat) + SeatIndexOffset) != Vehicle->FindSeatIndex(Pawn)) - continue; - - auto VehicleGrantedWeaponItem = (TWeakObjectPtr*)(__int64(WeaponSeat) + 0x20); - - VehicleGrantedWeaponItem->ObjectIndex = NewVehicleInstance->InternalIndex; - VehicleGrantedWeaponItem->ObjectSerialNumber = GetItemByIndex(NewVehicleInstance->InternalIndex)->SerialNumber; - - static auto bWeaponEquippedOffset = WeaponComponent->GetOffset("bWeaponEquipped"); - WeaponComponent->Get(bWeaponEquippedOffset) = true; - - break; + PlayerController->ServerExecuteInventoryItemHook(PlayerController, NewVehicleInstance->GetItemEntry()->GetItemGuid()); } - } */ + } return; } @@ -776,7 +752,7 @@ void AFortPlayerController::ServerAttemptAircraftJumpHook(AFortPlayerController* { if (false) { - // honestly idk why this doesnt work + // honestly idk why this doesnt work ( ithink its suppsoed to be spectator) auto NAME_Inactive = UKismetStringLibrary::Conv_StringToName(L"NAME_Inactive"); diff --git a/Project Reboot 3.0/FortPlayerControllerAthena.cpp b/Project Reboot 3.0/FortPlayerControllerAthena.cpp index 0022705..bac31f0 100644 --- a/Project Reboot 3.0/FortPlayerControllerAthena.cpp +++ b/Project Reboot 3.0/FortPlayerControllerAthena.cpp @@ -334,6 +334,13 @@ void AFortPlayerControllerAthena::ServerRestartPlayerHook(AFortPlayerControllerA static auto ZoneServerRestartPlayer = __int64(FortPlayerControllerZoneDefault->VFTable[GetFunctionIdxOrPtr(ServerRestartPlayerFn) / 8]); static void (*ZoneServerRestartPlayerOriginal)(AFortPlayerController*) = decltype(ZoneServerRestartPlayerOriginal)(__int64(ZoneServerRestartPlayer)); + // auto NAME_Spectating = UKismetStringLibrary::Conv_StringToName(L"NAME_Spectating"); + + // LOG_INFO(LogDev, "ISplayerwaiting: {}", Controller->IsPlayerWaiting()); + + // Controller->GetStateName() = NAME_Spectating; + // Controller->SetPlayerIsWaiting(true); + LOG_INFO(LogDev, "ServerRestartPlayerHook Call 0x{:x} returning with 0x{:x}!", ZoneServerRestartPlayer - __int64(_ReturnAddress()), __int64(ZoneServerRestartPlayerOriginal) - __int64(GetModuleHandleW(0))); return ZoneServerRestartPlayerOriginal(Controller); } diff --git a/Project Reboot 3.0/PlayerController.cpp b/Project Reboot 3.0/PlayerController.cpp index 8993917..db2dfae 100644 --- a/Project Reboot 3.0/PlayerController.cpp +++ b/Project Reboot 3.0/PlayerController.cpp @@ -16,6 +16,13 @@ void APlayerController::SetPlayerIsWaiting(bool NewValue) this->SetBitfieldValue(bPlayerIsWaitingOffset, bPlayerIsWaitingFieldMask, NewValue); } +bool APlayerController::IsPlayerWaiting() +{ + static auto bPlayerIsWaitingOffset = GetOffset("bPlayerIsWaiting"); + static auto bPlayerIsWaitingFieldMask = GetFieldMask(this->GetProperty("bPlayerIsWaiting")); + return this->ReadBitfieldValue(bPlayerIsWaitingOffset, bPlayerIsWaitingFieldMask); +} + UCheatManager*& APlayerController::SpawnCheatManager(UClass* CheatManagerClass) { GetCheatManager() = UGameplayStatics::SpawnObject(CheatManagerClass, this, true); diff --git a/Project Reboot 3.0/PlayerController.h b/Project Reboot 3.0/PlayerController.h index 7625905..ae61bae 100644 --- a/Project Reboot 3.0/PlayerController.h +++ b/Project Reboot 3.0/PlayerController.h @@ -23,6 +23,7 @@ public: } void SetPlayerIsWaiting(bool NewValue); + bool IsPlayerWaiting(); void ServerChangeName(FString& S); UCheatManager*& SpawnCheatManager(UClass* CheatManagerClass); FRotator GetControlRotation(); diff --git a/Project Reboot 3.0/dllmain.cpp b/Project Reboot 3.0/dllmain.cpp index c3bf42c..2ff6591 100644 --- a/Project Reboot 3.0/dllmain.cpp +++ b/Project Reboot 3.0/dllmain.cpp @@ -79,6 +79,7 @@ static ENetMode GetNetModeHook2() { return NetMode; } static bool ReturnTrueHook() { return true; } static bool ReturnFalseHook() { return false; } static int Return2Hook() { return 2; } +static void EmptyHook() { return; } static bool NoMCPHook() { return Globals::bNoMCP; } static void CollectGarbageHook() { return; } @@ -305,7 +306,7 @@ void ActivatePhaseAtIndexHook(UObject* SpecialEventScript, int Index) auto WorldInventory = CurrentController->GetWorldInventory(); bool bShouldUpdate = false; - WorldInventory->AddItem(WID, &bShouldUpdate, 1); + WorldInventory->AddItem(WID, &bShouldUpdate, 1, 9999); if (bShouldUpdate) WorldInventory->Update(); @@ -808,6 +809,8 @@ DWORD WINAPI Main(LPVOID) if (Fortnite_Version == 17.30) // Rift Tour stuff { + auto busCrash = Hooking::MinHook::Hook(Memcury::Scanner::FindPattern("48 89 5C 24 ? 48 89 6C 24 ? 56 57 41 54 41 56 41 57 48 83 EC 40 48 8B 59 28 45 33 E4").GetAs(), (PVOID)EmptyHook); + Hooking::MinHook::Hook((PVOID)(__int64(GetModuleHandleW(0)) + 0x3E07910), (PVOID)GetMeshNetworkNodeTypeHook, nullptr); Hooking::MinHook::Hook((PVOID)(__int64(GetModuleHandleW(0)) + 0x3DED158), (PVOID)ReturnTrueHook, nullptr); // 7FF7E556D158 Hooking::MinHook::Hook((PVOID)(__int64(GetModuleHandleW(0)) + 0x3DECFC8), (PVOID)ReturnTrueHook, nullptr); // 7FF7E556CFC8