diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 16 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | ||||
| -rw-r--r-- | src/server/game/Handlers/LootHandler.cpp | 5 | 
3 files changed, 14 insertions, 9 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 21a3d787310..917fb3f362d 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -8645,9 +8645,14 @@ ObjectGuid Player::GetLootWorldObjectGUID(ObjectGuid const& lootObjectGuid) cons      return ObjectGuid::Empty;  } -void Player::RemoveAELootedObject(ObjectGuid const& lootObjectGuid) +void Player::RemoveAELootedWorldObject(ObjectGuid const& lootWorldObjectGuid)  { -    m_AELootView.erase(lootObjectGuid); +    auto itr = std::find_if(m_AELootView.begin(), m_AELootView.end(), [&lootWorldObjectGuid](std::pair<ObjectGuid const, ObjectGuid> const& lootView) +    { +        return lootView.second == lootWorldObjectGuid; +    }); +    if (itr != m_AELootView.end()) +        m_AELootView.erase(itr);  }  bool Player::HasLootWorldObjectGUID(ObjectGuid const& lootWorldObjectGuid) const @@ -8707,9 +8712,8 @@ void Player::SendLootReleaseAll() const  void Player::SendLoot(ObjectGuid guid, LootType loot_type, bool aeLooting/* = false*/)  { -    ObjectGuid currentLootGuid = GetLootGUID(); -    if (!currentLootGuid.IsEmpty() && !aeLooting) -        m_session->DoLootRelease(currentLootGuid); +    if (!GetLootGUID().IsEmpty() && !aeLooting) +        m_session->DoLootReleaseAll();      Loot* loot;      PermissionTypes permission = ALL_PERMISSION; @@ -26515,7 +26519,7 @@ void Player::StoreLootItem(uint8 lootSlot, Loot* loot, AELootResult* aeResult/*      // dont allow protected item to be looted by someone else      if (!item->rollWinnerGUID.IsEmpty() && item->rollWinnerGUID != GetGUID())      { -        SendLootRelease(GetLootGUID()); +        SendLootReleaseAll();          return;      } diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 8124399b1f3..13114628a13 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -1877,7 +1877,7 @@ class TC_GAME_API Player : public Unit, public GridObject<Player>          ObjectGuid const& GetLootGUID() const { return m_playerData->LootTargetGUID; }          void SetLootGUID(ObjectGuid const& guid) { SetUpdateFieldValue(m_values.ModifyValue(&Player::m_playerData).ModifyValue(&UF::PlayerData::LootTargetGUID), guid); }          ObjectGuid GetLootWorldObjectGUID(ObjectGuid const& lootObjectGuid) const; -        void RemoveAELootedObject(ObjectGuid const& lootObjectGuid); +        void RemoveAELootedWorldObject(ObjectGuid const& lootWorldObjectGuid);          bool HasLootWorldObjectGUID(ObjectGuid const& lootWorldObjectGuid) const;          std::unordered_map<ObjectGuid, ObjectGuid> const& GetAELootView() const { return m_AELootView; } diff --git a/src/server/game/Handlers/LootHandler.cpp b/src/server/game/Handlers/LootHandler.cpp index 111cfd892a8..c9404dc1be2 100644 --- a/src/server/game/Handlers/LootHandler.cpp +++ b/src/server/game/Handlers/LootHandler.cpp @@ -314,7 +314,9 @@ void WorldSession::DoLootRelease(ObjectGuid lguid)      if (player->GetLootGUID() == lguid)          player->SetLootGUID(ObjectGuid::Empty); +      player->SendLootRelease(lguid); +    player->RemoveAELootedWorldObject(lguid);      player->RemoveUnitFlag(UNIT_FLAG_LOOTING); @@ -384,7 +386,7 @@ void WorldSession::DoLootRelease(ObjectGuid lguid)          ItemTemplate const* proto = pItem->GetTemplate();          // destroy only 5 items from stack in case prospecting and milling -        if (proto->GetFlags() & (ITEM_FLAG_IS_PROSPECTABLE | ITEM_FLAG_IS_MILLABLE)) +        if (pItem->loot.loot_type == LOOT_PROSPECTING || pItem->loot.loot_type == LOOT_MILLING)          {              pItem->m_lootGenerated = false;              pItem->loot.clear(); @@ -441,7 +443,6 @@ void WorldSession::DoLootRelease(ObjectGuid lguid)      //Player is not looking at loot list, he doesn't need to see updates on the loot list      loot->RemoveLooter(player->GetGUID()); -    player->RemoveAELootedObject(loot->GetGUID());  }  void WorldSession::DoLootReleaseAll()  | 
