mirror of
https://github.com/Milxnor/Project-Reboot-3.0.git
synced 2026-01-13 02:42:22 +01:00
Bim bam boom
This commit is contained in:
@@ -125,7 +125,7 @@ public:
|
||||
|
||||
static UClass* StaticClass()
|
||||
{
|
||||
static auto Class = FindObject<UClass>("/Script/FortniteGame.FortAthenaMutator_InventoryOverride");
|
||||
static auto Class = FindObject<UClass>(L"/Script/FortniteGame.FortAthenaMutator_InventoryOverride");
|
||||
return Class;
|
||||
}
|
||||
};
|
||||
@@ -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<AFortAthenaMutator_InventoryOverride>(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<AFortAthenaMutator_InventoryOverride>(Mutator))
|
||||
{
|
||||
auto& ItemInstances = WorldInventory->GetItemList().GetItemInstances();
|
||||
|
||||
std::vector<std::pair<FGuid, int>> 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<UFortWorldItemDefinition>(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<std::pair<FGuid, int>> 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<UFortWorldItemDefinition>(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<AFortGameModeAthena>(GetWorld()->GetGameMode());
|
||||
|
||||
LOG_INFO(LogDev, "PlayersLeft: {} IsDBNO: {}", GameState->GetPlayersLeft(), DeadPawn->IsDBNO());
|
||||
|
||||
@@ -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<UClass*>(DefaultPawnClassOffset) = PawnClass;
|
||||
|
||||
bool bUseSpawnActor = false;
|
||||
|
||||
#if 1
|
||||
static auto SpawnDefaultPawnAtTransformFn = FindObject<UFunction>(L"/Script/Engine.GameModeBase.SpawnDefaultPawnAtTransform");
|
||||
|
||||
FTransform SpawnTransform = StartSpot->GetTransform();
|
||||
APawn* NewPawn = nullptr;
|
||||
|
||||
if (bUseSpawnActor)
|
||||
{
|
||||
NewPawn = GetWorld()->SpawnActor<APawn>(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
|
||||
|
||||
|
||||
@@ -137,7 +137,7 @@ public:
|
||||
}
|
||||
}
|
||||
|
||||
// LOG_INFO(LogDev, "Failed to find Key!!!");
|
||||
LOG_INFO(LogDev, "Failed to find Key!!!");
|
||||
|
||||
if (wasSuccessful)
|
||||
*wasSuccessful = false;
|
||||
|
||||
@@ -111,7 +111,7 @@ static inline AFortAthenaMutator_Bots* SpawnBotMutator() //sets up all the class
|
||||
auto GameMode = Cast<AFortGameModeAthena>(GetWorld()->GetGameMode());
|
||||
|
||||
static auto BGAClass = FindObject<UClass>(L"/Script/Engine.BlueprintGeneratedClass");
|
||||
static auto PhoebeMutatorClass = LoadObject<UClass>(L"/Game/Athena/AI/Phoebe/BP_Phoebe_Mutator.BP_Phoebe_Mutator_C", BGAClass);
|
||||
auto PhoebeMutatorClass = LoadObject<UClass>(L"/Game/Athena/AI/Phoebe/BP_Phoebe_Mutator.BP_Phoebe_Mutator_C", BGAClass);
|
||||
|
||||
if (!PhoebeMutatorClass)
|
||||
{
|
||||
|
||||
@@ -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<FName, void*>));
|
||||
|
||||
Hooking::MinHook::Hook((PVOID)Addresses::ActorGetNetMode, (PVOID)GetNetModeHook2, nullptr);
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user