diff options
| -rw-r--r-- | src/server/game/Entities/Player/Player.cpp | 27 | ||||
| -rw-r--r-- | src/server/game/Entities/Player/Player.h | 2 | 
2 files changed, 9 insertions, 20 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index 13ea11cdc1e..7f1306665e0 100644 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -12586,36 +12586,25 @@ void Player::TradeCancel(bool sendback)  void Player::UpdateSoulboundTradeItems()  { -    if (m_itemSoulboundTradeable.empty()) -        return; -      // also checks for garbage data -    for (ItemDurationList::iterator itr = m_itemSoulboundTradeable.begin(); itr != m_itemSoulboundTradeable.end();) +    for (GuidUnorderedSet::iterator itr = m_itemSoulboundTradeable.begin(); itr != m_itemSoulboundTradeable.end();)      { -        ASSERT(*itr); -        if ((*itr)->GetOwnerGUID() != GetGUID()) -        { -            m_itemSoulboundTradeable.erase(itr++); -            continue; -        } -        if ((*itr)->CheckSoulboundTradeExpire()) -        { -            m_itemSoulboundTradeable.erase(itr++); -            continue; -        } -        ++itr; +        Item* item = GetItemByGuid(*itr); +        if (!item || item->GetOwnerGUID() != GetGUID() || item->CheckSoulboundTradeExpire()) +            itr = m_itemSoulboundTradeable.erase(itr); +        else +            ++itr;      }  }  void Player::AddTradeableItem(Item* item)  { -    m_itemSoulboundTradeable.push_back(item); +    m_itemSoulboundTradeable.insert(item->GetGUID());  } -/// @todo should never allow an item to be added to m_itemSoulboundTradeable twice  void Player::RemoveTradeableItem(Item* item)  { -    m_itemSoulboundTradeable.remove(item); +    m_itemSoulboundTradeable.erase(item->GetGUID());  }  void Player::UpdateItemDuration(uint32 time, bool realtimeonly) diff --git a/src/server/game/Entities/Player/Player.h b/src/server/game/Entities/Player/Player.h index 93a8db6a523..d28d870a777 100644 --- a/src/server/game/Entities/Player/Player.h +++ b/src/server/game/Entities/Player/Player.h @@ -2673,7 +2673,7 @@ class Player : public Unit, public GridObject<Player>          EnchantDurationList m_enchantDuration;          ItemDurationList m_itemDuration; -        ItemDurationList m_itemSoulboundTradeable; +        GuidUnorderedSet m_itemSoulboundTradeable;          void ResetTimeSync();          void SendTimeSync();  | 
