diff options
author | Shauren <shauren.trinity@gmail.com> | 2022-09-13 14:10:47 +0200 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2022-09-13 14:10:47 +0200 |
commit | 30ad7e3337f8da32cb567489f4203c7eb35d17a4 (patch) | |
tree | 5b32d0367965e0671ede5accd470f11708cdb297 | |
parent | e9d083a2ee59d297271b04f3b7fb63808f7f0c8c (diff) |
Core/Loot: Corrected loot release logic on leaving world and swapping bags
-rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 14 | ||||
-rw-r--r-- | src/server/game/Handlers/LootHandler.cpp | 3 |
2 files changed, 8 insertions, 9 deletions
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; |