Нужна помощь с кодом roblox studio
Привет. Недавно начал интересоваться языком lua и движком роблокса в частности. В процессе обучения роблокс студии возник странный баг, об который я долго ломал голову. Не знаю, подходящее ли это место для подобных вопросов, но процесс "получения членства" роблокс форума такооой затянутый, что решил спросить здесь. Ниже мой код:
game.ReplicatedStorage.RemoteEvents.Weapons.Cross.Cross_hit1.OnServerEvent:Connect(function(player) --если пойман сигнал ремоут ивента
task.wait(0.15)
local hitbox = Instance.new("Part")
hitbox.Massless = true
hitbox.Anchored = false
hitbox.Transparency = 0.7
hitbox.Color = Color3.new(1, 0, 0)
hitbox.CanCollide = false
hitbox.CastShadow = false
hitbox.Size = Vector3.new(6, 4.5, 6)
hitbox.Parent = workspace
hitbox.CFrame = player.Character.HumanoidRootPart.CFrame * CFrame.new(0, -0.5,-2.2) --CFrame хитбокса = CFrame главного парта игрока, но координата Z смещена но -2.2, Y смещена на -0.5 (вниз) (относительно главного парта персонажа)
local hit = false
local weld = Instance.new("WeldConstraint")
weld.Part0 = player.Character.HumanoidRootPart
weld.Part1 = hitbox
weld.Parent = hitbox
task.wait(0.01)
local function hitboxHandler()
while wait(0) and hitbox ~= nil do
local partsInRegion = workspace:GetPartsInPart(hitbox) --возвращаем все объекты, которые находятся в hitbox
for index, part in pairs(partsInRegion) do
local enemy = part.Parent
if enemy and enemy:FindFirstChild("Humanoid") and enemy.Name ~= player.Name and enemy.Humanoid.Health > 0 then
if hit then return end --hit = true если объект был ударен, следовательно если так то енд
if hitbox then
enemy:FindFirstChild("Humanoid"):TakeDamage(40)
hit = true
end
end
end
end
end
task.spawn(function()
wait(0.27)
game.Debris:AddItem(hitbox, 0.01) --функция удаляет парт с задержкой 0.01
hitbox = nil
end)
hitboxHandler()
end)Код ловит сигнал ремоут ивента и создает "хитбокс" атаки игрока (для этой цели я выбрал создавать обычный парт и соединять его с персонажем с помощью weld). В коде прописано, что урон наносится один раз и только тому объекту, который находится внутри хитбокса (который парт). Наличие этого объекта постоянно проверяется, пока хитбокс не исчезает (цикл while wait(0) and hitbox ~= nil do). Собственно, со статичными объектами все работает отлично, но когда я протестировал оружие на движущемся противнике, столкнулся с этим:
https://cloud.mail.ru/public/hEoj/kaMaJV9cy
Красный куб, что возникает при ударе - хитбокс. И, как отчетливо видно на видео, враг, который меня преследует, ни разу ни находится в его приделах. Тем не менее, враг все равно получает урон. Странно... Тут же и демонстрация работы оружия на статичном противнике:
https://cloud.mail.ru/public/UFEw/3NGj8VH3M
Как видите, никаких странностей. Враг получает урон только тогда, когда находится внутри хитбокса атаки, или когда хитбокс атаки задевает его при повороте камеры игрока. (Большой полупрозрачный объект, что проваливается сквозь пол при смерти врага - сделан в качестве "индикации", и на проблему никак не влияет.)
Прошу прощения за качество видео, заранее спасибо за потенциальную помощь. Я еще совсем новичок в кодинге и подобных вещах, поэтому мог допустить некоторые ошибки. И, если же я все же ошибся в выборе платформы для своего вопроса, прошу вас сильно не ругаться.)