diff --git a/server/gameserver/buff/callfunc.cc b/server/gameserver/buff/callfunc.cc index 36ca090d..887b33de 100644 --- a/server/gameserver/buff/callfunc.cc +++ b/server/gameserver/buff/callfunc.cc @@ -65,6 +65,7 @@ void CallFuncBuff::Activate() break; case BuffCallFunc_e::kFlashMove: { + hold_param2_ = meta->GetBuffParam2(this); ProcFlashMove(); } break; @@ -193,18 +194,25 @@ void CallFuncBuff::ProcFlashMove() { float distance = owner->context_pos.Distance2D2(owner->GetPos()); if (distance > 0.00001f) { - glm::vec3 move_dir = owner->context_pos.CalcDir(owner->GetPos()); + glm::vec3 move_dir = owner->GetPos().CalcDir(owner->context_pos); + GlmHelper::Normalize(move_dir); float move_distance = std::min(distance, hold_param2_); glm::vec3 hit_point = glm::vec3(0.0f, 0.0f, 0.0f); bool hit_result = false; + glm::vec3 start = owner->GetPos().ToGlmVec3(); + glm::vec3 end = owner->GetPos().ToGlmVec3() + move_dir * move_distance; + owner->room->map_instance->Scale(start); + owner->room->map_instance->Scale(end); + bool ret = owner->room->map_instance->Raycast ( - owner->GetPos().ToGlmVec3(), - move_dir * move_distance, + start, + end, hit_point, hit_result); if (ret) { + owner->room->map_instance->UnScale(hit_point); owner->GetMovement()->ClearPath(); owner->context_real_pos = hit_point;