diff --git a/server/gameserver/creature.cc b/server/gameserver/creature.cc index c0fa56a7..049dfdac 100644 --- a/server/gameserver/creature.cc +++ b/server/gameserver/creature.cc @@ -1601,6 +1601,7 @@ void Creature::SetCurrWeapon(Weapon* weapon) room->xtimer.Delete(auto_switch_weapon_timer_); } if (curr_weapon_ != weapon) { + GetCurrWeapon()->CalcGraspBuffList(this); GetTrigger()->TakeonWeapon(curr_weapon_, weapon); } curr_weapon_ = weapon; diff --git a/server/gameserver/weapon.cc b/server/gameserver/weapon.cc index 43d683c3..8650a4d5 100644 --- a/server/gameserver/weapon.cc +++ b/server/gameserver/weapon.cc @@ -15,6 +15,7 @@ void Weapon::Clear() meta = nullptr; bullet_meta = nullptr; skill_meta = nullptr; + grasp_buff_list.clear(); } void Weapon::Recalc() @@ -48,3 +49,8 @@ int Weapon::GetReloadTime(Creature* c) return meta ? meta->reload_time() :0; } } + +void Weapon::CalcGraspBuffList(Creature* c) +{ + grasp_buff_list.clear(); +} diff --git a/server/gameserver/weapon.h b/server/gameserver/weapon.h index 3a1afacf..32211a4a 100644 --- a/server/gameserver/weapon.h +++ b/server/gameserver/weapon.h @@ -17,7 +17,7 @@ class Weapon const mt::Equip* meta = nullptr; const mt::Equip* bullet_meta = nullptr; const mt::Skill* skill_meta = nullptr; - std::vector grasp_list; + std::vector grasp_buff_list; void Clear(); void ToPB(Creature* c, cs::MFWeapon* pb_obj); @@ -25,6 +25,7 @@ class Weapon int GetClipVolume(Creature* c); int GetFireRate(Creature* c); int GetReloadTime(Creature* c); + void CalcGraspBuffList(Creature* c); friend class PBUtils; };