Ошибка “attempt to perform arithmetic (add) on nil and number” означает, что вы пытаетесь сложить число с nil (пустым значением). В вашем коде проблема находится в строке:
Humanoid.Health = math.max(0, Humanoid - Damage)
Ошибка происходит потому, что Humanoid в этом случае является nil. Это значит, что Humanoid не был найден FindFirstChild в вашем коде.
Решение:
Проверьте, что Humanoid не nil перед использованием его в арифметической операции. Вот как можно исправить код:
if Humanoid and Humanoid.Parent ~= Character and not Debounces[Humanoid] and
Humanoid.Health >0 then
Debounces[Humanoid] = true
if Blockable then
if not Humanoid.Parent:FindFirstChild("Blocking") then
Humanoid.Health = math.max(0,
Humanoid.Health - Damage)
if
Humanoid.Health == 0 then
Profile.Data.leaderstats.Kills += 1
end
end
else
-- Проверка на nil:
if Humanoid then
Humanoid.Health = math.max(0,
Humanoid.Health - Damage)
if
Humanoid.Health == 0 then
Profile.Data.leaderstats.Kills += 1
end
end
end
end
Объяснение:
if Humanoid then: Эта строка проверяет, что Humanoid не равен nil. Если Humanoid существует, код выполняет вычитание урона из здоровья. Если Humanoid равен nil, то код не выполняет вычитание урона, чтобы избежать ошибки.
Дополнительные советы:
Проверьте логику кода: Убедитесь, что ваш код правильно ищет Humanoid и что он должен быть найден в этом месте.
Используйте отладку: Используйте отладчик Roblox Studio, чтобы проверить значение переменной Humanoid в момент ошибки. Это поможет вам лучше понять, почему Humanoid равен nil.
скрипт:
local Players = game:GetService("Players")
local ServerScriptService = game:GetService("ServerScriptService")
local ProfileManager = require( ServerScriptService.Services .ProfileManager)
local module = {}
function module.CreateHitbox(Character, HitboxSize, Damage, Blockable)
local Player = Players:GetPlayerFromCharacter(Character)
local Profile = ProfileManager.Profiles[Player]
local Hitbox = Instance.new ("Part")
Hitbox.Transparency = 1
Hitbox.BrickColor = BrickColor.Red ()
Hitbox.CanCollide = false
Hitbox.Anchored = true
Hitbox.Size = HitboxSize
Hitbox.CFrame = Character.HumanoidRootPart.CFrame * CFrame.new (0, 0, -4)
Hitbox.Parent = workspace
local PartsInHitbox = workspace:GetPartsInPart(Hitbox)
local Debounces = {}
for _, v in PartsInHitbox do
local Humanoid = v.Parent:FindFirstChild("Humanoid") or v.Parent.Parent:FindFirstChild("Humanoid")
if Humanoid and Humanoid.Parent ~= Character and not Debounces[Humanoid] and Humanoid.Health >0 then
Debounces[Humanoid] = true
if Blockable then
if not Humanoid.Parent:FindFirstChild("Blocking") then
Humanoid.Health = math.max(0, Humanoid.Health - Damage)
if Humanoid.Health == 0 then
Profile.Data.leaderstats.Kills += 1
end
end
else
Humanoid.Health = math.max(0, Humanoid - Damage)
if Humanoid.Health == 0 then
Profile.Data.leaderstats.Kills += 1
end
end
end
end
task.delay(0.3, function()
Hitbox:Destroy()
end)
end
return module