From 30ad7e3337f8da32cb567489f4203c7eb35d17a4 Mon Sep 17 00:00:00 2001 From: Shauren Date: Tue, 13 Sep 2022 14:10:47 +0200 Subject: Core/Loot: Corrected loot release logic on leaving world and swapping bags --- src/server/game/Entities/Player/Player.cpp | 14 ++++++-------- src/server/game/Handlers/LootHandler.cpp | 3 ++- 2 files changed, 8 insertions(+), 9 deletions(-) (limited to 'src') diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 20c8f8805ce..9e5cf7b1371 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -1633,9 +1633,7 @@ void Player::RemoveFromWorld() StopCastingBindSight(); UnsummonPetTemporaryIfAny(); ClearComboPoints(); - ObjectGuid lootGuid = GetLootGUID(); - if (!lootGuid.IsEmpty()) - m_session->DoLootRelease(lootGuid); + m_session->DoLootReleaseAll(); sOutdoorPvPMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId); sBattlefieldMgr->HandlePlayerLeaveZone(this, m_zoneUpdateId); } @@ -13044,7 +13042,7 @@ void Player::SwapItem(uint16 src, uint16 dst) // if player is moving bags and is looting an item inside this bag // release the loot - if (!GetLootGUID().IsEmpty()) + if (!GetAELootView().empty()) { bool released = false; if (IsBagPos(src)) @@ -13054,9 +13052,9 @@ void Player::SwapItem(uint16 src, uint16 dst) { if (Item* bagItem = bag->GetItemByPos(i)) { - if (bagItem->GetGUID() == GetLootGUID()) + if (HasLootWorldObjectGUID(bagItem->GetGUID())) { - m_session->DoLootRelease(GetLootGUID()); + m_session->DoLootReleaseAll(); released = true; // so we don't need to look at dstBag break; } @@ -13071,9 +13069,9 @@ void Player::SwapItem(uint16 src, uint16 dst) { if (Item* bagItem = bag->GetItemByPos(i)) { - if (bagItem->GetGUID() == GetLootGUID()) + if (HasLootWorldObjectGUID(bagItem->GetGUID())) { - m_session->DoLootRelease(GetLootGUID()); + m_session->DoLootReleaseAll(); break; } } diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index 7978f4be74c..389e2e373dc 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -347,7 +347,8 @@ void WorldSession::DoLootRelease(ObjectGuid lguid) player->SendLootRelease(lguid); player->RemoveAELootedWorldObject(lguid); - player->RemoveUnitFlag(UNIT_FLAG_LOOTING); + if (player->GetAELootView().empty()) + player->RemoveUnitFlag(UNIT_FLAG_LOOTING); if (!player->IsInWorld()) return; -- cgit v1.2.3