From 2affb6157351ac8ced53e0366699f717d631200f Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 15 May 2020 10:54:15 +0800 Subject: [PATCH] =?UTF-8?q?=E7=A7=BB=E9=99=A4=E4=B8=8A=E5=B8=9D=E6=A8=A1?= =?UTF-8?q?=E5=BC=8Fbuff?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- server/gameserver/human.cc | 18 +++++++++++++++--- server/gameserver/human.h | 1 + 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 442bba9..7df89c6 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -883,9 +883,7 @@ void Human::BeKill(int killer_id, const std::string& killer_name, int weapon_id) if (HasBuffEffect(kBET_Camouflage)) { RemoveBuffByEffectId(kBET_Camouflage); } - if (GetBuffByEffectId(kBET_LordMode)) { - RemoveBuffByEffectId(kBET_LordMode); - } + ClearLordMode(); int max_revive_times = MetaMgr::Instance()->GetSysParamAsInt("max_revive_times", 1); if (weapon_id != VW_Spectate && dead_times <= max_revive_times && @@ -3146,3 +3144,17 @@ void Human::CancelRevive() FreeReviveTimer(); } } + +void Human::ClearLordMode() +{ + Buff* buff = GetBuffByEffectId(kBET_LordMode); + if (buff) { + std::vector strings; + a8::Split(buff->meta->i->buff_param1(), strings, ':'); + for (auto& str : strings) { + int buff_id = a8::XValue(str); + RemoveBuffById(buff_id); + } + RemoveBuffByEffectId(kBET_LordMode); + } +} diff --git a/server/gameserver/human.h b/server/gameserver/human.h index f6a3abf..7e74be5 100644 --- a/server/gameserver/human.h +++ b/server/gameserver/human.h @@ -270,6 +270,7 @@ private: void SendBattleReport(); void FindLocationWithTarget(Entity* target); void Revive(); + void ClearLordMode(); protected: long long last_shot_frameno_ = 0;