#include "mod_quest_loot_share.h" #include "Config.h" #include "LootMgr.h" #include "Player.h" #include "ScriptMgr.h" void QuestLootShare::LoadConfig() { _enabled = sConfigMgr->GetOption("QuestLootShare.Enable", true); } class QuestLootShare_Player : public PlayerScript { public: QuestLootShare_Player() : PlayerScript("QuestLootShare_Player", { PLAYERHOOK_ON_BEFORE_FILL_QUEST_LOOT_ITEM }) { } // Fires once per group member as the corpse's quest loot is filled for them. // Forcing freeforall makes the core treat the item the same way it treats // ITEM_FLAG_MULTI_DROP items: looting it only consumes that player's own // copy, so every other qualifying member still finds it on the corpse. void OnPlayerBeforeFillQuestLootItem(Player* /*player*/, LootItem& item) override { if (!sQuestLootShare->IsEnabled()) return; item.freeforall = true; } }; class QuestLootShare_World : public WorldScript { public: QuestLootShare_World() : WorldScript("QuestLootShare_World") { } void OnBeforeConfigLoad(bool /*reload*/) override { sQuestLootShare->LoadConfig(); } }; void AddSC_mod_quest_loot_share() { new QuestLootShare_Player(); new QuestLootShare_World(); }