diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index 1f2e979..0348a5e 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -417,6 +417,7 @@ void Car::BeKill(int killer_id, const std::string& killer_name, int weapon_id) meta->i->atk() ); room->NotifyUiUpdate(); + GetTrigger()->Die(); } void Car::GetAabbBox(AabbCollider& aabb_box) diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc index b7af85f..34a5d9b 100644 --- a/server/gameserver/hero.cc +++ b/server/gameserver/hero.cc @@ -278,6 +278,7 @@ void Hero::BeKill(int killer_id, const std::string& killer_name, int weapon_id) } }, &xtimer_attacher.timer_list_); + GetTrigger()->Die(); } void Hero::OnAddToTargetPartObject(Entity* target) diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index bde88a2..7ce6588 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -192,6 +192,20 @@ void Trigger::ReceiveDmg() void Trigger::Die() { + { + std::vector list; + owner_->TraverseBuff + ( + [&list] (Buff* buff, bool& stop) + { + if (buff->meta->i->dead_remove()) { + list.push_back(buff->buff_uniid); + } + }); + for (int buff_uniid : list) { + owner_->RemoveBuffByUniId(buff_uniid); + } + } TriggeCondBuffAll(kCondBuffDid); } diff --git a/server/tools/protobuild/metatable.proto b/server/tools/protobuild/metatable.proto index e3c2492..2bb3737 100755 --- a/server/tools/protobuild/metatable.proto +++ b/server/tools/protobuild/metatable.proto @@ -293,6 +293,7 @@ message Buff optional int32 post_battle_valid = 26; optional string only_spec_race = 27; optional string exclude_spec_race = 28; + optional int32 dead_remove = 29; } message Drop