Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Ошибка в Roblox studio

Миша Лоскутов Ученик (140), на голосовании 1 неделю назад
ошибка:ServerScriptService.Modules.AttackHitboxes:35: attempt to perform arithmetic (add) on nil and number

скрипт:

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
Голосование за лучший ответ
дима заречный Мыслитель (7781) 1 месяц назад
Серьезная ошибка, уже нашел решение?
Светучка Антихелперия Мастер (1281) 1 месяц назад
Ошибка “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.
Миша ЛоскутовУченик (140) 1 месяц назад
у меня всё также
Рустам Абдрашитов Мыслитель (8546) 1 месяц назад
Ошибка "попытка выполнить арифметическую операцию (сложение) с nil и числом" обычно возникает, когда вы пытаетесь выполнить математическую операцию с переменной, которая равна nil. В вашем скрипте проблема, вероятно, заключается в строке:
 Profile.Data.leaderstats.Kills += 1 
Убедитесь, что Profile.Data.leaderstats.Kills инициализирована перед этой операцией. Если Kills равен nil, это вызовет ошибку. Вы можете добавить проверку, чтобы инициализировать его при необходимости:
 Profile.Data.leaderstats.Kills = Profile.Data.leaderstats.Kills or 0 
Это гарантирует, что Kills начнется с 0, если она еще не была установлена.
** Эгоист ** Знаток (483) 1 месяц назад
Ошибка, с которой вы столкнулись: attempt to perform arithmetic (add) on nil and number
указывает на то, что вы пытаетесь выполнить арифметическую операцию с переменной, которая равна nil. В вашем скрипте проблема может возникать в следующих строках: Humanoid.Health = math.max(0, Humanoid.Health - Damage) или Humanoid.Health = math.max(0, Humanoid - Damage)
Вот возможные причины:
Humanoid не был найден: Если у объекта Humanoid нет Health, то вы получите nil. Убедитесь, что Humanoid действительно существует и у него есть свойство Health.
Проблема в строке с math.max: Убедитесь, что Damage имеет значение и не равно nil.
Чтобы исправить это, добавьте проверки, чтобы убедиться, что все переменные определены:
if Humanoid and Humanoid.Health then
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
if Humanoid.Health then
Humanoid.Health = math.max(0, Humanoid.Health - Damage)
if Humanoid.Health == 0 then
Profile.Data.leaderstats.Kills += 1
end
end
end
end

Также проверьте, что Damage и другие переменные инициализируются корректно перед их использованием.
givemevoicchats givemevoicchats vvv Профи (533) 1 месяц назад
 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 ipairs(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.Value = Profile.Data.leaderstats.Kills.Value + 1
end
end
else
Humanoid.Health = math.max(0, Humanoid.Health - Damage)
if Humanoid.Health == 0 then
Profile.Data.leaderstats.Kills.Value = Profile.Data.leaderstats.Kills.Value + 1
end
end
end
end

task.delay(0.3, function()
Hitbox:Destroy()
end)
end

return module
Попробуйте этот исправленный код. Если ошибка все еще появляется, дайте знать, и мы посмотрим на это подробнее!
Похожие вопросы