From 44da536ac74242f7375c6db51f8f3076ac3bf508 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Fri, 30 Dec 2022 11:38:52 +0800 Subject: [PATCH] 1 --- server/gameserver/skill.cc | 67 +++++++++++++++++++++----------------- 1 file changed, 38 insertions(+), 29 deletions(-) diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 55324108..25012bb7 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -462,6 +462,42 @@ void Skill::ProcJSHX() void Skill::ProcSWZB() { + + struct _Nested + { + static void cb(CreatureWeakPtr sender, Entity* e, const mt::Skill* skill_meta) + { + if (sender.Get()) { + if (e->IsCreature(sender.Get()->room)) { + Creature* c = (Creature*)e; + if (c->IsInvincible()) { + return; + } + if (c->dead) { + return; + } + float dmg = SkillHelper::GetSwzbDmg(sender.Get(), skill_meta); + c->DecHP(dmg, + VP_Explosion, + "", + SkillHelper::GetSwzbEffect(skill_meta), + sender.Get()->GetUniId(), + sender.Get()->GetName()); + glm::vec3 dir = sender.Get()->GetAttackDir(); + if (!GlmHelper::IsZero(dir)) { + // 999 + glm::vec3 target_pos = c->GetPos().ToGlmVec3() + + dir * (float)(SkillHelper::GetSwzbPullDistance(skill_meta)); + c->PullTarget(target_pos); + } + int buff_id = SkillHelper::GetSwzbBuffId(skill_meta); + float buff_time = SkillHelper::GetSwzbBuffTime(skill_meta); + c->TryAddBuffAndSetTime(sender.Get(), buff_id, buff_time); + } + } + } + }; + owner->GetTrigger()->AddListener ( kPreDieEvent, @@ -478,35 +514,8 @@ void Skill::ProcSWZB() ( [sender, center, skill_meta] (const a8::Args& args) mutable { - if (sender.Get()) { - Entity* e = args.Get(0); - if (e->IsCreature(sender.Get()->room)) { - Creature* c = (Creature*)e; - if (c->IsInvincible()) { - return; - } - if (c->dead) { - return; - } - float dmg = SkillHelper::GetSwzbDmg(sender.Get(), skill_meta); - c->DecHP(dmg, - VP_Explosion, - "", - SkillHelper::GetSwzbEffect(skill_meta), - sender.Get()->GetUniId(), - sender.Get()->GetName()); - glm::vec3 dir = sender.Get()->GetAttackDir(); - if (!GlmHelper::IsZero(dir)) { - // 999 - glm::vec3 target_pos = c->GetPos().ToGlmVec3() + - dir * (float)(SkillHelper::GetSwzbPullDistance(skill_meta)); - c->PullTarget(target_pos); - } - int buff_id = SkillHelper::GetSwzbBuffId(skill_meta); - float buff_time = SkillHelper::GetSwzbBuffTime(skill_meta); - c->TryAddBuffAndSetTime(sender.Get(), buff_id, buff_time); - } - } + Entity* e = args.Get(0); + _Nested::cb(sender, e, skill_meta); } ); e->EnemyAndObstacleAttack