diff --git a/server/gameserver/human.cc b/server/gameserver/human.cc index 605da54..2073691 100644 --- a/server/gameserver/human.cc +++ b/server/gameserver/human.cc @@ -3050,15 +3050,20 @@ void Human::ProcBuffEffect(Buff* buff) { Entity* entity = room->GetEntityByUniId(skill_target_id); if (entity) { - if (entity->GetPos().Distance(GetPos()) <= 0.000001f) { + float target_distance = entity->GetPos().Distance(GetPos()); + if (target_distance <= 0.000001f) { SetPos(entity->GetPos()); skill_target_pos = entity->GetPos(); } else { - move_dir = entity->GetPos() - GetPos(); - move_dir.Normalize(); - skill_target_pos = entity->GetPos(); - skill_dir = skill_target_pos - GetPos(); - skill_dir.Normalize(); + if (target_distance <= buff->meta->param3) { + SetPos(entity->GetPos()); + skill_target_pos = entity->GetPos(); + } else { + move_dir = entity->GetPos() - GetPos(); + move_dir.Normalize(); + skill_dir = move_dir; + skill_target_pos = GetPos() + move_dir * (target_distance - buff->meta->param3); + } } } }