From ccc083593af16f505263f889712f46f9382bb588 Mon Sep 17 00:00:00 2001 From: Ovahlord Date: Tue, 23 Jan 2024 00:55:57 +0100 Subject: [PATCH] Core/Loot: implemented a custom server config setting to enable or disable AE loot (#29602) This config primarily serves as a means to reduce potential code differences between the master and classic branches as now we no longer have to meddle with code --- src/server/game/Handlers/LootHandler.cpp | 9 +++++++-- src/server/game/World/World.cpp | 3 +++ src/server/game/World/World.h | 1 + src/server/worldserver/worldserver.conf.dist | 8 ++++++++ 4 files changed, 19 insertions(+), 2 deletions(-) diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index 6e7b417a5b5..1ce22cf173d 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -36,6 +36,7 @@ #include "ObjectMgr.h" #include "Player.h" #include "SpellMgr.h" +#include "World.h" class AELootCreatureCheck { @@ -232,9 +233,13 @@ void WorldSession::HandleLootOpcode(WorldPackets::Loot::LootUnit& packet) GetPlayer()->RemoveAurasWithInterruptFlags(SpellAuraInterruptFlags::Looting); + bool const aeLootEnabled = sWorld->getBoolConfig(CONFIG_ENABLE_AE_LOOT); std::vector corpses; - Trinity::CreatureListSearcher searcher(_player, corpses, check); - Cell::VisitGridObjects(_player, searcher, AELootCreatureCheck::LootDistance); + if (aeLootEnabled) + { + Trinity::CreatureListSearcher searcher(_player, corpses, check); + Cell::VisitGridObjects(_player, searcher, AELootCreatureCheck::LootDistance); + } if (!corpses.empty()) SendPacket(WorldPackets::Loot::AELootTargets(uint32(corpses.size() + 1)).Write()); diff --git a/src/server/game/World/World.cpp b/src/server/game/World/World.cpp index bb55881deaa..0274fb484f7 100644 --- a/src/server/game/World/World.cpp +++ b/src/server/game/World/World.cpp @@ -1721,6 +1721,9 @@ void World::LoadConfigSettings(bool reload) // Specifies if IP addresses can be logged to the database m_bool_configs[CONFIG_ALLOW_LOGGING_IP_ADDRESSES_IN_DATABASE] = sConfigMgr->GetBoolDefault("AllowLoggingIPAddressesInDatabase", true, true); + // Enable AE loot + m_bool_configs[CONFIG_ENABLE_AE_LOOT] = sConfigMgr->GetBoolDefault("Loot.EnableAELoot", true); + // call ScriptMgr if we're reloading the configuration if (reload) sScriptMgr->OnConfigLoad(reload); diff --git a/src/server/game/World/World.h b/src/server/game/World/World.h index ce513f6570b..7c7dcbb5cfc 100644 --- a/src/server/game/World/World.h +++ b/src/server/game/World/World.h @@ -197,6 +197,7 @@ enum WorldBoolConfigs CONFIG_ALLOW_LOGGING_IP_ADDRESSES_IN_DATABASE, CONFIG_CHARACTER_CREATING_DISABLE_ALLIED_RACE_ACHIEVEMENT_REQUIREMENT, CONFIG_BATTLEGROUNDMAP_LOAD_GRIDS, + CONFIG_ENABLE_AE_LOOT, BOOL_CONFIG_VALUE_COUNT }; diff --git a/src/server/worldserver/worldserver.conf.dist b/src/server/worldserver/worldserver.conf.dist index d239a0857b5..0be8888f1b4 100644 --- a/src/server/worldserver/worldserver.conf.dist +++ b/src/server/worldserver/worldserver.conf.dist @@ -3554,6 +3554,14 @@ Creature.CheckInvalidPosition = 0 GameObject.CheckInvalidPosition = 0 +# +# Loot.EnableAELoot +# Description: Enables AE loot which will allow looting all creatures within a 30 yards radius at once +# Default: 1 - (AE loot enabled) +# 0 - (AE loot disabled) + +Loot.EnableAELoot = 1 + # ###################################################################################################