diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 2c63e81..321bb9c 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -2811,6 +2811,10 @@ void Human::AddItem(int item_id, int item_num) if (room->frame_no > join_frameno) { room->frame_event.AddItemChg(this, item_id, items_[item_id]); + } else { + if (item_num <= 0) { + battling_items_.insert(item_id); + } } } @@ -2821,7 +2825,9 @@ void Human::DecItem(int item_id, int item_num) itr->second -= item_num; room->frame_event.AddItemChg(this, item_id, std::max(0, itr->second)); if (itr->second <= 0) { - items_.erase(itr); + if (battling_items_.find(item_id) == battling_items_.end()) { + items_.erase(itr); + } } } } diff --git a/server/gameserver/human.h b/server/gameserver/human.h index eef2f7e..c744f4f 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -312,6 +312,7 @@ private: long long last_sync_gas_frameno = 0; std::list buff_list_; std::map items_; + std::set battling_items_; std::array buff_effect_ = {}; std::array buff_attr_abs_ = {};