From 131e494cef4041a14724622ab8548aaf2b2362f1 Mon Sep 17 00:00:00 2001 From: Gray <84999745+Milxnor@users.noreply.github.com> Date: Tue, 15 Jul 2025 19:58:13 -0400 Subject: [PATCH] fix soem cbgas --- Project Reboot 3.0/BGA.h | 40 ++++++++++++++++++++------ Project Reboot 3.0/FortLootPackage.cpp | 2 +- 2 files changed, 33 insertions(+), 9 deletions(-) diff --git a/Project Reboot 3.0/BGA.h b/Project Reboot 3.0/BGA.h index 6a08899..df2cbcf 100644 --- a/Project Reboot 3.0/BGA.h +++ b/Project Reboot 3.0/BGA.h @@ -15,6 +15,7 @@ static inline void SpawnBGAs() // hahah not "proper", there's a function that we return; auto GameState = Cast(GetWorld()->GetGameState()); + auto MapInfo = GameState->GetMapInfo(); auto AllBGAConsumableSpawners = UGameplayStatics::GetAllActorsOfClass(GetWorld(), BGAConsumableSpawnerClass); @@ -36,16 +37,38 @@ static inline void SpawnBGAs() // hahah not "proper", there's a function that we if (FBuildingGameplayActorSpawnDetails::GetStruct()) { // todo handle? - - auto MapInfo = GameState->GetMapInfo(); } + bool bDeferConstruction = true; // hm? + static auto SpawnLootTierGroupOffset = BGAConsumableSpawner->GetOffset("SpawnLootTierGroup"); auto& SpawnLootTierGroup = BGAConsumableSpawner->Get(SpawnLootTierGroupOffset); - auto LootDrops = PickLootDrops(SpawnLootTierGroup, GameState->GetWorldLevel()); + std::vector LootDrops; - for (int z = 0; z < LootDrops.size(); z++) + if (SpawnLootTierGroup.ToString() == "Loot_ForagedItem_GravityRocks") // on 4.0 atleast, LootPackageCategoryMinArray contains all 0s + { + LootDrop GravityRockDrop{}; + auto Class = FindObject("/Script/FortniteGame.BGAConsumableWrapperItemDefinition"); + auto LowGravItemDef = LoadObject(L"/Game/Athena/Items/ForagedItems/LowGravity/Athena_Foraged_LowGravity.Athena_Foraged_LowGravity", Class); + if (!LowGravItemDef) + { + LOG_ERROR(LogDev, "Failed to load LowGravity ItemDefinition!"); + continue; + } + GravityRockDrop.ItemEntry = FFortItemEntry::MakeItemEntry(LowGravItemDef); + LootDrops.push_back(GravityRockDrop); + + bDeferConstruction = false; + } + else + { + LootDrops = PickLootDrops(SpawnLootTierGroup, GameState->GetWorldLevel()); + } + + LOG_INFO(LogDev, "LootDrops: {} SpawnLootTierGroup: {}", LootDrops.size(), SpawnLootTierGroup.ToString()); + + for (int z = 0; z < LootDrops.size(); ++z) { auto& LootDrop = LootDrops.at(z); @@ -57,12 +80,10 @@ static inline void SpawnBGAs() // hahah not "proper", there's a function that we if (!StrongConsumableClass) { - LOG_INFO(LogDev, "Invalid consumable class!"); + LOG_INFO(LogDev, "Unable to get consumable class!"); continue; } - bool bDeferConstruction = true; // hm? - auto ConsumableActor = GetWorld()->SpawnActor(StrongConsumableClass, SpawnTransform, CreateSpawnParameters(ESpawnActorCollisionHandlingMethod::AdjustIfPossibleButAlwaysSpawn, bDeferConstruction)); if (ConsumableActor) @@ -111,9 +132,12 @@ static inline void SpawnBGAs() // hahah not "proper", there's a function that we if (bDeferConstruction) UGameplayStatics::FinishSpawningActor(ConsumableActor, FinalSpawnTransform); + ConsumableActor->ForceNetUpdate(); + ConsumableActor->SetNetDormancy(ENetDormancy::DORM_Awake); + // ConsumableActor->InitializeBuildingActor(nullptr, nullptr, true); // idk UFortKismetLibrary::SpawnBuildingGameplayActor does this - LOG_INFO(LogDev, "[{}/{}] Spawned BGA {} at {} {} {}", z, LootDrops.size(), ConsumableActor->GetName(), FinalSpawnTransform.Translation.X, FinalSpawnTransform.Translation.Y, FinalSpawnTransform.Translation.Z); + LOG_INFO(LogDev, "[{}/{}] Spawned BGA {} at {} {} {}", z + 1, LootDrops.size(), ConsumableActor->GetName(), FinalSpawnTransform.Translation.X, FinalSpawnTransform.Translation.Y, FinalSpawnTransform.Translation.Z); break; // ? } } diff --git a/Project Reboot 3.0/FortLootPackage.cpp b/Project Reboot 3.0/FortLootPackage.cpp index a4647d0..12e8307 100644 --- a/Project Reboot 3.0/FortLootPackage.cpp +++ b/Project Reboot 3.0/FortLootPackage.cpp @@ -394,7 +394,7 @@ std::vector PickLootDrops(FName TierGroupName, int WorldLevel, int For LTDTables.clear(); LPTables.clear(); - if (Fortnite_Version == 12.00) + if (Fortnite_Version == 12.00) // TODO return LootDrops; bool bFoundPlaylistTable = false;