From 1fa5c3c4f6ef516759b97e13069ef3c0176501b1 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Thu, 10 Nov 2022 19:59:08 +0800 Subject: [PATCH] 1 --- server/gameserver/car.cc | 2 +- server/gameserver/hero.cc | 2 +- server/gameserver/human.cc | 2 +- server/gameserver/skill.cc | 11 ++++++++++- server/gameserver/trigger.cc | 4 ++-- server/gameserver/trigger.h | 2 +- 6 files changed, 16 insertions(+), 7 deletions(-) diff --git a/server/gameserver/car.cc b/server/gameserver/car.cc index 9b30a6c8..c9d7c9df 100644 --- a/server/gameserver/car.cc +++ b/server/gameserver/car.cc @@ -434,7 +434,7 @@ void Car::BeKill(int killer_id, const std::string& killer_name, int weapon_id) ); room->NotifyUiUpdate(); room->frame_event.AddDead(GetWeakPtrRef(), 0); - GetTrigger()->Die(); + GetTrigger()->Die(killer_id, weapon_id); } void Car::GetAabbBox(AabbCollider& aabb_box) diff --git a/server/gameserver/hero.cc b/server/gameserver/hero.cc index 6f4b92b6..7bce8b50 100644 --- a/server/gameserver/hero.cc +++ b/server/gameserver/hero.cc @@ -286,7 +286,7 @@ void Hero::BeKill(int killer_id, const std::string& killer_name, int weapon_id) room->pve_data.OnBeKill(this); room->NotifyUiUpdate(); } - GetTrigger()->Die(); + GetTrigger()->Die(killer_id, weapon_id); } void Hero::OnAddToTargetPartObject(Entity* target) diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 244448b5..53ea6911 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -4395,7 +4395,7 @@ void Human::InternalBeKill(int killer_id, const std::string& killer_name, int we downed = false; SetHP(0.0f); dead_frameno = room->GetFrameNo(); - GetTrigger()->Die(); + GetTrigger()->Die(killer_id, weapon_id); OnDie(); KillMgr::Instance()->OnHumanDead(this, &info); room->frame_event.AddDead(GetWeakPtrRef(), 0); diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 5f757e04..a17505b0 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -471,6 +471,7 @@ void Skill::ProcSWZB() kPreDieEvent, [this] (const std::vector& params) { + int killer_id = std::any_cast(params.at(0)); CreatureWeakPtr sender = owner->GetWeakPtrRef(); MetaData::Skill* skill_meta = meta; a8::Vec2 center = owner->GetPos(); @@ -516,7 +517,8 @@ void Skill::ProcSWZB() SkillHelper::GetSwzbEffect(meta), 0 ); - if (!meta->raw_phases.empty()) { + Entity* killer = owner->room->GetEntityByUniId(killer_id); + if (killer && !meta->raw_phases.empty()) { owner->over_delay_time = meta->raw_phases.at(0).param1; } #ifdef DEBUG @@ -537,6 +539,13 @@ void Skill::ProcSWZB() #endif } ); + owner->GetTrigger()->AddListener + ( + kDieEvent, + [this] (const std::vector& params) + { + + }); } void Skill::ProcCMXD() diff --git a/server/gameserver/trigger.cc b/server/gameserver/trigger.cc index 69f6dc6c..e75be0e7 100644 --- a/server/gameserver/trigger.cc +++ b/server/gameserver/trigger.cc @@ -237,7 +237,7 @@ void Trigger::PreDie(int killer_id, int weapon_id) DispatchEvent(kPreDieEvent, {killer_id, weapon_id}); } -void Trigger::Die() +void Trigger::Die(int killer_id, int weapon_id) { { std::vector list; @@ -254,7 +254,7 @@ void Trigger::Die() } } TriggeCondBuffAll(kCondBuffDid); - DispatchEvent(kDieEvent, {}); + DispatchEvent(kDieEvent, {killer_id, weapon_id}); } void Trigger::TraverseCondBuffs(int cond, std::function func) diff --git a/server/gameserver/trigger.h b/server/gameserver/trigger.h index 96990490..55debf90 100644 --- a/server/gameserver/trigger.h +++ b/server/gameserver/trigger.h @@ -64,7 +64,7 @@ public: void HpChg(); void ReceiveDmg(); void PreDie(int killer_id, int weapon_id); - void Die(); + void Die(int killer_id, int weapon_id); void ActiveBuff(MetaData::Buff* buff_meta); void DeactiveBuff(MetaData::Buff* buff_meta); void BulletHit(IBullet* bullet, Creature* target);