В вашем скрипте есть несколько проблем, которые могут препятствовать правильному добавлению 1 к значению intvalue energy:
1. Некорректное использование GetAttribute:
• Вы используете GetAttribute("en"), чтобы получить значение energy. Однако GetAttribute используется для получения строковых значений из Attributes.
• Для получения числовых значений из IntValue объектов, нужно использовать Value property.
2. Неоптимальный цикл while:
• Цикл while продолжает работать, пока plr.Character.energy.Value не станет 100, en не станет 0, и zanato не станет true.
• Это может привести к нежелательному поведению, если energy не может достичь 100, или если zanato становится false до достижения 100.
3. Отсутствие проверки ошибок:
• Скрипт не проверяет ошибки, такие как отсутствие plr.Character.energy или script.Parent.Parent.Parent:GetAttribute("en").
• Это может привести к сбоям в работе скрипта, если эти объекты недоступны.
Исправления:
1. Замените GetAttribute("en") на :FindFirst("en").Value для получения значения IntValue.
2. Добавьте проверку if перед изменением energy, чтобы убедиться, что plr.Character.energy существует.
3. Добавьте проверку if перед доступом к script.Parent.Parent.Parent:GetAttribute("en"), чтобы убедиться, что объект доступен.
4. Перепишите цикл while, чтобы он останавливался, когда energy достигает 100, zanato становится false, или en становится 0.
Пример исправленного скрипта:
Lua
bool = false
weld = 0
zanato = script.Parent.Parent.Parent.zanato
script.Parent.MouseClick:Connect(function(plr)
if bool == false then
bool = true
zanato = script.Parent.Parent.Parent.zanato
if zanato.Value == true then return end
zanato.Value = true
script.Parent.Parent.Position = plr.Character.zarpt.Position
script.Parent.Parent.Orientation = plr.Character.zarpt.Orientation
local energyObj = plr.Character:FindFirst("en")
if energyObj then
local en = energyObj.Value
while energyObj.Value ~= 100 and en > 0 and zanato == true do
wait(0.5)
en = en - 1
energyObj.Value = energyObj.Value + 1
end
end
elseif bool == true then
bool = false
weld:Remove()
zanato.Value = false
end
end)
Дополнительные советы:
• Используйте print statements для отладки скрипта, чтобы отслеживать значения переменных и ход выполнения кода.
• Изучите документацию Roblox по Luau scripting
https://create.roblox.com/docs/tutorials/scripting/basic-scripting/intro-to-scripting , чтобы узнать больше о доступных функциях и синтаксисе.
• Используйте Roblox Developer Forum
https://devforum.roblox.com/ для поиска помощи и советов от других разработчиков Roblox.