В этом разделе:
local code = fs.open("disk/passcode.lua", "r").readAll() --(1)
if code == nil then
local code = 0 --(2)
else
local code = tonumber(code) --(3)
end
Сначала создается новая локальная переменная с local code = ...
.В новом блоке, который вы создаете с помощью if
, вы также создаете новые локальные переменные с помощью local code = ...
.Поскольку у него то же имя, что и у локального, он «маскирует» его, запрещая доступ к первому code
в оставшейся части блока.Значение, которое вы присваиваете 0, не является той же самой переменной вне if
, поэтому первое code
не изменяется.В else
блок для второго code
заканчивается, и то же самое происходит между else
и end
, когда условие ложно.Чтобы не назначать значения 0
или tonumber(code)
новым переменным, необходимо удалить local
из local code = ...
.Итак, вот что должно быть:
local level = 3 -- Required access level
local sideIn = "bottom" -- Keycard Input Side
local sideOut = "right" -- Redstone output side
local rsTime = 3 -- Redstone time
while true do
if disk.isPresent(sideIn) then
term.clear()
term.setCursorPos(1,1)
local code = fs.open("disk/passcode.lua", "r").readAll()
if code == nil then
code = 0
else
code = tonumber(code)
end
if code >= level then
print("> Access Granted")
disk.eject(sideIn)
rs.setOutput(sideOut,true)
sleep(rsTime)
rs.setOutput(sideOut,false)
else
print("> Permission Denied")
disk.eject(sideIn)
end
end
end