diff --git a/src/server/game/Entities/GameObject/GameObject.cpp b/src/server/game/Entities/GameObject/GameObject.cpp index 74a1ff170..5d19bce37 100644 --- a/src/server/game/Entities/GameObject/GameObject.cpp +++ b/src/server/game/Entities/GameObject/GameObject.cpp @@ -60,6 +60,7 @@ GameObject::GameObject() : WorldObject(false), MovableMapObject(), m_lootGenerationTime = 0; ResetLootMode(); // restore default loot mode + loot.sourceGameObject = this; m_stationaryPosition.Relocate(0.0f, 0.0f, 0.0f, 0.0f); } diff --git a/src/server/game/Groups/Group.cpp b/src/server/game/Groups/Group.cpp index f9ef31010..215cb3c5f 100644 --- a/src/server/game/Groups/Group.cpp +++ b/src/server/game/Groups/Group.cpp @@ -1494,6 +1494,15 @@ void Group::CountTheRoll(Rolls::iterator rollI, Map* allowedMap) item->is_blocked = false; } + { + Loot* loot = roll->getLoot(); + if (loot->isLooted() && loot->sourceGameObject != nullptr && loot->sourceGameObject->GetGOInfo()->type == GAMEOBJECT_TYPE_CHEST) + { + // Deactivate chest if the last item was rolled in group + loot->sourceGameObject->SetLootState(GO_JUST_DEACTIVATED); + } + } + RollId.erase(rollI); delete roll; } diff --git a/src/server/game/Loot/LootMgr.h b/src/server/game/Loot/LootMgr.h index 878759a66..1c35ba568 100644 --- a/src/server/game/Loot/LootMgr.h +++ b/src/server/game/Loot/LootMgr.h @@ -109,6 +109,7 @@ enum LootSlotType class Player; class LootStore; class ConditionMgr; +class GameObject; struct Loot; struct LootStoreItem @@ -311,6 +312,7 @@ struct Loot // GUIDLow of container that holds this loot (item_instance.entry), set for items that can be looted uint32 containerId{0}; + GameObject* sourceGameObject; Loot(uint32 _gold = 0) : gold(_gold) { } ~Loot() { clear(); }