From 68ae6d81cbf5d866e70d27a5fafb3db29494e399 Mon Sep 17 00:00:00 2001 From: Gray <84999745+Milxnor@users.noreply.github.com> Date: Sat, 23 Mar 2024 17:40:45 -0400 Subject: [PATCH] Bim bam boom --- .../FortAthenaMutator_InventoryOverride.h | 2 +- Project Reboot 3.0/FortPlayerController.cpp | 130 +++++++++--------- Project Reboot 3.0/GameModeBase.cpp | 29 ++-- Project Reboot 3.0/Map.h | 2 +- Project Reboot 3.0/ai.h | 2 +- Project Reboot 3.0/dllmain.cpp | 2 +- Project Reboot 3.0/globals.h | 1 + 7 files changed, 84 insertions(+), 84 deletions(-) diff --git a/Project Reboot 3.0/FortAthenaMutator_InventoryOverride.h b/Project Reboot 3.0/FortAthenaMutator_InventoryOverride.h index 324bfcb..3d128bf 100644 --- a/Project Reboot 3.0/FortAthenaMutator_InventoryOverride.h +++ b/Project Reboot 3.0/FortAthenaMutator_InventoryOverride.h @@ -125,7 +125,7 @@ public: static UClass* StaticClass() { - static auto Class = FindObject("/Script/FortniteGame.FortAthenaMutator_InventoryOverride"); + static auto Class = FindObject(L"/Script/FortniteGame.FortAthenaMutator_InventoryOverride"); return Class; } }; \ No newline at end of file diff --git a/Project Reboot 3.0/FortPlayerController.cpp b/Project Reboot 3.0/FortPlayerController.cpp index a37b366..4aef3b4 100644 --- a/Project Reboot 3.0/FortPlayerController.cpp +++ b/Project Reboot 3.0/FortPlayerController.cpp @@ -1439,78 +1439,80 @@ void AFortPlayerController::ClientOnPawnDiedHook(AFortPlayerController* PlayerCo bool bIsRespawningAllowed = GameState->IsRespawningAllowed(DeadPlayerState); - if (!bIsRespawningAllowed) - { - bool bDropInventory = true; + bool bDropInventory = true; - LoopMutators([&](AFortAthenaMutator* Mutator) - { - if (auto FortAthenaMutator_InventoryOverride = Cast(Mutator)) - { - if (FortAthenaMutator_InventoryOverride->GetDropAllItemsOverride(DeadPlayerState->GetTeamIndex()) == EAthenaLootDropOverride::ForceKeep) - { - bDropInventory = false; - } - } - } - ); - - if (bDropInventory) + LoopMutators([&](AFortAthenaMutator* Mutator) { - auto WorldInventory = PlayerController->GetWorldInventory(); - - if (WorldInventory) + if (auto FortAthenaMutator_InventoryOverride = Cast(Mutator)) { - auto& ItemInstances = WorldInventory->GetItemList().GetItemInstances(); - - std::vector> GuidAndCountsToRemove; - - for (int i = 0; i < ItemInstances.Num(); ++i) + if (FortAthenaMutator_InventoryOverride->GetDropAllItemsOverride(DeadPlayerState->GetTeamIndex()) == EAthenaLootDropOverride::ForceKeep) { - auto ItemInstance = ItemInstances.at(i); - - // LOG_INFO(LogDev, "[{}/{}] CurrentItemInstance {}", i, ItemInstances.Num(), __int64(ItemInstance)); - - if (!ItemInstance) - continue; - - auto ItemEntry = ItemInstance->GetItemEntry(); - auto WorldItemDefinition = Cast(ItemEntry->GetItemDefinition()); - - // LOG_INFO(LogDev, "[{}/{}] WorldItemDefinition {}", i, ItemInstances.Num(), WorldItemDefinition ? WorldItemDefinition->GetFullName() : "InvalidObject"); - - if (!WorldItemDefinition) - continue; - - auto ShouldBeDropped = WorldItemDefinition->CanBeDropped(); // WorldItemDefinition->ShouldDropOnDeath(); - - // LOG_INFO(LogDev, "[{}/{}] ShouldBeDropped {}", i, ItemInstances.Num(), ShouldBeDropped); - - if (!ShouldBeDropped) - continue; - - PickupCreateData CreateData; - CreateData.bToss = true; - CreateData.ItemEntry = ItemEntry; - CreateData.SourceType = EFortPickupSourceTypeFlag::GetPlayerValue(); - CreateData.Source = EFortPickupSpawnSource::GetPlayerEliminationValue(); - CreateData.SpawnLocation = DeathLocation; - - AFortPickup::SpawnPickup(CreateData); - - GuidAndCountsToRemove.push_back({ ItemEntry->GetItemGuid(), ItemEntry->GetCount() }); - // WorldInventory->RemoveItem(ItemEntry->GetItemGuid(), nullptr, ItemEntry->GetCount()); + bDropInventory = false; } - - for (auto& Pair : GuidAndCountsToRemove) - { - WorldInventory->RemoveItem(Pair.first, nullptr, Pair.second, true); - } - - WorldInventory->Update(); } } + ); + if (bDropInventory + && !bIsRespawningAllowed + ) + { + auto WorldInventory = PlayerController->GetWorldInventory(); + + if (WorldInventory) + { + auto& ItemInstances = WorldInventory->GetItemList().GetItemInstances(); + + std::vector> GuidAndCountsToRemove; + + for (int i = 0; i < ItemInstances.Num(); ++i) + { + auto ItemInstance = ItemInstances.at(i); + + // LOG_INFO(LogDev, "[{}/{}] CurrentItemInstance {}", i, ItemInstances.Num(), __int64(ItemInstance)); + + if (!ItemInstance) + continue; + + auto ItemEntry = ItemInstance->GetItemEntry(); + auto WorldItemDefinition = Cast(ItemEntry->GetItemDefinition()); + + // LOG_INFO(LogDev, "[{}/{}] WorldItemDefinition {}", i, ItemInstances.Num(), WorldItemDefinition ? WorldItemDefinition->GetFullName() : "InvalidObject"); + + if (!WorldItemDefinition) + continue; + + auto ShouldBeDropped = WorldItemDefinition->CanBeDropped(); // WorldItemDefinition->ShouldDropOnDeath(); + + // LOG_INFO(LogDev, "[{}/{}] ShouldBeDropped {}", i, ItemInstances.Num(), ShouldBeDropped); + + if (!ShouldBeDropped) + continue; + + PickupCreateData CreateData; + CreateData.bToss = true; + CreateData.ItemEntry = ItemEntry; + CreateData.SourceType = EFortPickupSourceTypeFlag::GetPlayerValue(); + CreateData.Source = EFortPickupSpawnSource::GetPlayerEliminationValue(); + CreateData.SpawnLocation = DeathLocation; + + AFortPickup::SpawnPickup(CreateData); + + GuidAndCountsToRemove.push_back({ ItemEntry->GetItemGuid(), ItemEntry->GetCount() }); + // WorldInventory->RemoveItem(ItemEntry->GetItemGuid(), nullptr, ItemEntry->GetCount()); + } + + for (auto& Pair : GuidAndCountsToRemove) + { + WorldInventory->RemoveItem(Pair.first, nullptr, Pair.second, true); + } + + WorldInventory->Update(); + } + } + + if (!bIsRespawningAllowed) + { auto GameMode = Cast(GetWorld()->GetGameMode()); LOG_INFO(LogDev, "PlayersLeft: {} IsDBNO: {}", GameState->GetPlayersLeft(), DeadPawn->IsDBNO()); diff --git a/Project Reboot 3.0/GameModeBase.cpp b/Project Reboot 3.0/GameModeBase.cpp index a9e6471..31be738 100644 --- a/Project Reboot 3.0/GameModeBase.cpp +++ b/Project Reboot 3.0/GameModeBase.cpp @@ -9,6 +9,7 @@ #include "FortAthenaMutator_GG.h" #include "FortAthenaMutator_InventoryOverride.h" #include "calendar.h" +#include "hooking.h" void AGameModeBase::RestartPlayerAtTransform(AController* NewPlayer, FTransform SpawnTransform) { @@ -120,33 +121,29 @@ APawn* AGameModeBase::SpawnDefaultPawnForHook(AGameModeBase* GameMode, AControll static auto DefaultPawnClassOffset = GameMode->GetOffset("DefaultPawnClass"); GameMode->Get(DefaultPawnClassOffset) = PawnClass; - bool bUseSpawnActor = false; - +#if 1 static auto SpawnDefaultPawnAtTransformFn = FindObject(L"/Script/Engine.GameModeBase.SpawnDefaultPawnAtTransform"); FTransform SpawnTransform = StartSpot->GetTransform(); - APawn* NewPawn = nullptr; - if (bUseSpawnActor) - { - NewPawn = GetWorld()->SpawnActor(PawnClass, SpawnTransform, CreateSpawnParameters(ESpawnActorCollisionHandlingMethod::AdjustIfPossibleButAlwaysSpawn)); - } - else - { - struct { AController* NewPlayer; FTransform SpawnTransform; APawn* ReturnValue; } - AGameModeBase_SpawnDefaultPawnAtTransform_Params{ NewPlayer, SpawnTransform }; + struct { AController* NewPlayer; FTransform SpawnTransform; APawn* ReturnValue; } + AGameModeBase_SpawnDefaultPawnAtTransform_Params{ NewPlayer, SpawnTransform }; - LOG_INFO(LogDev, "Calling SpawnDefaultPawnAtTransformFn!"); + LOG_INFO(LogDev, "Calling SpawnDefaultPawnAtTransformFn!"); - GameMode->ProcessEvent(SpawnDefaultPawnAtTransformFn, &AGameModeBase_SpawnDefaultPawnAtTransform_Params); + GameMode->ProcessEvent(SpawnDefaultPawnAtTransformFn, &AGameModeBase_SpawnDefaultPawnAtTransform_Params); - LOG_INFO(LogDev, "Finished SpawnDefaultPawnAtTransformFn!"); + LOG_INFO(LogDev, "Finished SpawnDefaultPawnAtTransformFn!"); - NewPawn = AGameModeBase_SpawnDefaultPawnAtTransform_Params.ReturnValue; - } + auto NewPawn = AGameModeBase_SpawnDefaultPawnAtTransform_Params.ReturnValue; +#else +#endif if (!NewPawn) + { + LOG_WARN(LogPlayer, "Failed to spawn pawn!"); return nullptr; + } bool bIsRespawning = false; // reel diff --git a/Project Reboot 3.0/Map.h b/Project Reboot 3.0/Map.h index 2209080..eeed056 100644 --- a/Project Reboot 3.0/Map.h +++ b/Project Reboot 3.0/Map.h @@ -137,7 +137,7 @@ public: } } - // LOG_INFO(LogDev, "Failed to find Key!!!"); + LOG_INFO(LogDev, "Failed to find Key!!!"); if (wasSuccessful) *wasSuccessful = false; diff --git a/Project Reboot 3.0/ai.h b/Project Reboot 3.0/ai.h index 10b3f5b..bf9164a 100644 --- a/Project Reboot 3.0/ai.h +++ b/Project Reboot 3.0/ai.h @@ -111,7 +111,7 @@ static inline AFortAthenaMutator_Bots* SpawnBotMutator() //sets up all the class auto GameMode = Cast(GetWorld()->GetGameMode()); static auto BGAClass = FindObject(L"/Script/Engine.BlueprintGeneratedClass"); - static auto PhoebeMutatorClass = LoadObject(L"/Game/Athena/AI/Phoebe/BP_Phoebe_Mutator.BP_Phoebe_Mutator_C", BGAClass); + auto PhoebeMutatorClass = LoadObject(L"/Game/Athena/AI/Phoebe/BP_Phoebe_Mutator.BP_Phoebe_Mutator_C", BGAClass); if (!PhoebeMutatorClass) { diff --git a/Project Reboot 3.0/dllmain.cpp b/Project Reboot 3.0/dllmain.cpp index b35323b..c5d4597 100644 --- a/Project Reboot 3.0/dllmain.cpp +++ b/Project Reboot 3.0/dllmain.cpp @@ -819,6 +819,7 @@ DWORD WINAPI Main(LPVOID) } LOG_INFO(LogInit, "Initializing Project Reboot!"); + LOG_INFO(LogDev, "Built on {} {}", __DATE__, __TIME__); Addresses::SetupVersion(); @@ -915,7 +916,6 @@ DWORD WINAPI Main(LPVOID) Hooking::MinHook::Hook((PVOID)Addresses::KickPlayer, (PVOID)AGameSession::KickPlayerHook, (PVOID*)&AGameSession::KickPlayerOriginal); - LOG_INFO(LogDev, "Built on {} {}", __DATE__, __TIME__); LOG_INFO(LogDev, "Size: 0x{:x}", sizeof(TMap)); Hooking::MinHook::Hook((PVOID)Addresses::ActorGetNetMode, (PVOID)GetNetModeHook2, nullptr); diff --git a/Project Reboot 3.0/globals.h b/Project Reboot 3.0/globals.h index bfda065..2fc785f 100644 --- a/Project Reboot 3.0/globals.h +++ b/Project Reboot 3.0/globals.h @@ -23,6 +23,7 @@ namespace Globals extern inline bool bStartedListening = false; extern inline bool bAutoRestart = false; // doesnt work fyi extern inline bool bFillVendingMachines = true; + extern inline bool bPrivateIPsAreOperator = true; extern inline int AmountOfListens = 0; // TODO: Switch to this for LastNum extern inline bool bDeveloperMode = false; }