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;