From ccd5f340e075c9894313fabe0eec7ab717a21e95 Mon Sep 17 00:00:00 2001 From: aozhiwei Date: Mon, 2 Jan 2023 13:52:55 +0800 Subject: [PATCH] 1 --- server/gameserver/skill.cc | 87 ++++++++++++++++++++------------------ 1 file changed, 45 insertions(+), 42 deletions(-) diff --git a/server/gameserver/skill.cc b/server/gameserver/skill.cc index 12bb31eb..35bfea84 100644 --- a/server/gameserver/skill.cc +++ b/server/gameserver/skill.cc @@ -1066,57 +1066,60 @@ void Skill::ProcShotPhase(const mt::SkillPhase* phase) void Skill::ProcForthBackJumpPhase(const mt::SkillPhase* phase) { + if (GetMinorType() != SMT_NONE) { + return; + } + glm::vec3 old_dir = owner->GetMoveDir(); Position old_pos = owner->GetPos(); - if (GetMinorType() == SMT_NONE) { - int buff_id1 = phase->param3_ints.size() > 0 ? phase->param3_ints[0] : 0; - int buff_id2 = phase->param3_ints.size() > 1 ? phase->param3_ints[1] : 0; - int buff_id3 = phase->param3_ints.size() > 2 ? phase->param3_ints[2] : 0; - const mt::Skill* skill_meta = meta; - owner->TryAddBuff(owner, buff_id1); - int land_effect_buff_uniid = owner->TryAddBuffAndSetTime - (owner, - buff_id3, - skill_meta->_number_meta->_float_time * 1000); + + int buff_id1 = phase->param3_ints.size() > 0 ? phase->param3_ints[0] : 0; + int buff_id2 = phase->param3_ints.size() > 1 ? phase->param3_ints[1] : 0; + int buff_id3 = phase->param3_ints.size() > 2 ? phase->param3_ints[2] : 0; + const mt::Skill* skill_meta = meta; + owner->TryAddBuff(owner, buff_id1); + int land_effect_buff_uniid = owner->TryAddBuffAndSetTime + (owner, + buff_id3, + skill_meta->_number_meta->_float_time * 1000); #ifdef DEBUG - a8::XPrintf("old_pos:%f,%f\n", {owner->GetPos().x, owner->GetPos().y}); + a8::XPrintf("old_pos:%f,%f\n", {owner->GetPos().x, owner->GetPos().y}); #endif - owner->ForwardMove(SkillHelper::GetSjydhxForthDistance(meta)); - float recover_hp = SkillHelper::GetSjydhxRecoverHp(owner, meta); - owner->AddHp(recover_hp); - glm::vec3 pre_dir = old_dir; - Position pre_pos = old_pos; + owner->ForwardMove(SkillHelper::GetSjydhxForthDistance(meta)); + float recover_hp = SkillHelper::GetSjydhxRecoverHp(owner, meta); + owner->AddHp(recover_hp); + glm::vec3 pre_dir = old_dir; + Position pre_pos = old_pos; #ifdef DEBUG - a8::XPrintf("new_pos:%f,%f", {owner->GetPos().x, owner->GetPos().y}); + a8::XPrintf("new_pos:%f,%f", {owner->GetPos().x, owner->GetPos().y}); #endif - AddMinorMode - ( - SMT_BLINK, + AddMinorMode + ( + SMT_BLINK, #if 1 - skill_meta->_number_meta->_float_time * 1000, + skill_meta->_number_meta->_float_time * 1000, #else - phase->param2.GetInt() * 1000, + phase->param2.GetInt() * 1000, #endif - [this, pre_pos, pre_dir, buff_id1, buff_id2, buff_id3, land_effect_buff_uniid, - skill_meta] () { - glm::vec3 old_dir = owner->GetMoveDir(); - Position old_pos = owner->GetPos(); - float distance = owner->GetPos().Distance2D2(pre_pos); - owner->RemoveBuffByUniId(land_effect_buff_uniid); - if (distance > 0.0001f) { - glm::vec3 new_dir = owner->GetPos().CalcDir(pre_pos); - GlmHelper::Normalize(new_dir); - owner->SetMoveDir(new_dir); - owner->TryAddBuff(owner, buff_id2); - owner->ForwardMove(distance); - } - owner->SetMoveDir(old_dir); - owner->TryAddBuffAndSetTime(owner, - skill_meta->_number_meta->buff_id(), - skill_meta->_number_meta->buff_time() * 1000, - skill_meta); + [this, pre_pos, pre_dir, buff_id1, buff_id2, buff_id3, land_effect_buff_uniid, + skill_meta] () { + glm::vec3 old_dir = owner->GetMoveDir(); + Position old_pos = owner->GetPos(); + float distance = owner->GetPos().Distance2D2(pre_pos); + owner->RemoveBuffByUniId(land_effect_buff_uniid); + if (distance > 0.0001f) { + glm::vec3 new_dir = owner->GetPos().CalcDir(pre_pos); + GlmHelper::Normalize(new_dir); + owner->SetMoveDir(new_dir); + owner->TryAddBuff(owner, buff_id2); + owner->ForwardMove(distance); } - ); - } + owner->SetMoveDir(old_dir); + owner->TryAddBuffAndSetTime(owner, + skill_meta->_number_meta->buff_id(), + skill_meta->_number_meta->buff_time() * 1000, + skill_meta); + } + ); owner->SetMoveDir(old_dir); }