Как сохранить таблицы, созданные программой Lua в ComputerCraft - PullRequest
0 голосов
/ 23 декабря 2018

Я пытаюсь создать складскую систему хранения с использованием компьютерных черепах.Я хочу, чтобы черепаха могла определить, в каком блоке она находится, найти координаты сундука для этого предмета, затем перейти к этому сундуку и бросить предметы.Однако я не хочу вводить элемент и координаты для каждого элемента в игре.Я хочу, чтобы черепаха могла обнаружить, что есть предмет, которого у нее нет, положить предмет в неназначенный сундук и поместить этот предмет и новый сундук в свою таблицу предметов и координат.Я не могу понять, как получить таблицы, которые создает черепаха после обнаружения нового предмета, чтобы остаться после перезагрузки.Код все еще настроен для целей отладки.И если кто-нибудь может помочь мне составить программу, чтобы она могла определить разницу между такими вещами, как дуб и береза, я также хотел бы помочь с этим.Любая помощь будет оценена!Установка содержит черепаху, с входным сундуком перед ним, топливный сундук справа и склад сундуков позади него.

blockAmount = 3
highestVal = {2,0,3}
blockTypes = {
    cobblestone = {2,0,1};
    dirt = {2,0,2};
    log = {2,0,3};
}
pos = {0,0,0}
looking = 0
function fuel()
    if turtle.getFuelLevel() < 20 then
        turtle.select(16)
        turtle.refuel(1)
    end
end
function left()
    turtle.turnLeft()
    looking = looking - 1
    if looking < 0 then
        looking = 3
    end
end
function right()
    turtle.turnRight()
    looking = looking + 1
    if looking > 3 then
        looking = 0
    end
end
function forward()
    fuel()
        if turtle.forward() then
            if looking == 0 then
                pos[1] = pos[1] - 1
            elseif looking == 1 then
                pos[3] = pos[3] - 1 
            elseif looking == 2 then
                pos[1] = pos[1] + 1
            elseif looking == 3 then
                pos[3] = pos[3] + 1
            else
            end
        end

end
function up()
    fuel()
    turtle.up()
    pos[2] = pos[2] + 1
end
function down()
    fuel()
    turtle.down()
    pos[2] = pos[2] - 1
end
function goHome()
    while pos[3] > 0 do
        while  looking > 1 do
            left()
        end
        forward()
    end
    while  pos[2] > 0 do
        down()
    end
    while  pos[1] > 0 do
        while  looking > 0 do
            left()
        end
        forward()
    end
end
while true do
    turtle.select(1)
    while not turtle.suck() do
        sleep(1)
    end
    itemDetails = turtle.getItemDetail()
    name = itemDetails.name:match("^minecraft:(.+)$")
    local elem = blockTypes[name]
    right()
    turtle.select(16)
    turtle.suck(5)
    turtle.select(1)
    if elem then
        while looking < 2 or looking > 2 do
            right()
        end
        for i = pos[1],elem[1]-1 do
            forward()
        end
        while looking > 3 or looking < 3 do
            right()
        end
        for i = pos[3],elem[3]-1 do
            forward()
        end
        for i = pos[2],elem[2]-1 do
            up()
        end
        while looking < 2 or looking > 2 do
            left()
        end
        turtle.select(1)
        turtle.drop()
        goHome()
        right()
        turtle.select(16)
        turtle.drop()
        turtle.select(1)
        left()
    else
        blockAmount = blockAmount + 1
        highestVal[3] = highestVal[3] + 1
        if highestVal[3] > 5 then
            highestVal[3] = 1
            highestVal[2] = highestVal[2] + 1
        end
        if highestVal[2] > 4 then
            highestVal[2] = 0
            highestVal[1] = highestVal[1] + 2
        end
        print(name)
        blockTypes[blockAmount] = name
        blockTypes[name] = {highestVal[1],highestVal[2],highestVal[3]}
        print(blockTypes[blockAmount])
        print(blockTypes[name][1],blockTypes[name][2],blockTypes[name][3])
        local elem = blockTypes[name]
        left()
        turtle.drop()
    end
end

Я хочу, чтобы черепаха взяла предмет, например, sandstone, заметьте, что у него нет предмета, поместите предмет и координаты нового сундука для него в свою базу данных,и пусть он положит предмет в сундук.Эта база данных также должна оставаться обновленной после перезагрузки, так что я думаю о файле, который она читает и записывает, но я не смог выяснить, как успешно это сделать.РЕДАКТИРОВАТЬ: я выяснил, как заставить черепаху создавать подстолы для новых предметов и назначать им сундук.Тем не менее, он не может отличить такие вещи, как разные шерсти, такие как голубая и зеленая шерсть, разные бревна, такие как береза ​​и ель, и т. Д. Я также не знаю, как заставить вспомогательные таблицы оставаться после перезагрузки или когда явоссоединиться с миром.Опять же, любая помощь будет оценена!

...