Jump to content

Робот-шахтёр на "минималках"


Recommended Posts

Привет всем! 

Буровые установки и шахтерские лазеры - звучит здорово, но для их создания и поддержки работы нужно относительно много ресурсов и времени, из-за чего первую неделю игры на сервере вам точно придется жить в шахте. Чтобы этого избежать, я наконец-то решил сделать максимально продуктивного робота, который будет копать подземную комнату, при чем размер комнаты вы выбираете сами!

Робот максимально эффективен, так как работает от угля, который сам и копает, если повезёт, может выкопать огромную комнату, даже не разрядившись! Так же робот практически без проблем сохраняет добытые ресурсы, при том не сбивает свою траекторию копания, потому что, когда у него заканчивается место в инвентаре, он ставит под собой сундук и скидывает туда все, кроме угля и сундуков.

1. Что нужно для робота:

Спойлер

Чтоб собрать робота, потребуются следующие комплектующие:

  • Системный блок 3 уровня
  • Видеокарта 1 уровня
  • Монитор 1 уровня
  • Клавиатура
  • ЦП 2 уровня
  • ОЗУ 2 уровня
  • Жёсткий диск 1 уровня (у меня 2 уровень, просто потому что он стоит на автокрафте)
  • Eeprom LUA Bios
  • Улучшение "Опыт"
  • Улучшение "Ёмкость"
  • Улучшение "Ангельское улучшение"
  • Улучшение "Генератор"
  • Улучшение "Парение 2"

Screenshot_100.png.8da9fa28af489fc5e903cc298ccb1019.png

Важный момент, перед сборкой, диск нужно "прошить", то есть установить на него операционную систему OpenOS. Не буду писать ещё раз о том, как это сделать, я уже писал об этом неоднократно, да и гайдов в интернете тоже много, ссылку на свой оставлю ниже.

Все это нужно засунуть в сборщик: сначала системный блок, потом все остальное.

Возле кнопки создания есть поле "сложность". Чем больше компонентов и улучшений вы выставите, тем больше сложность, если вы превысите лимит, робота создать не выйдет, тут все просто. Ну и да, чем круче системник вы используете для робота, тем больше вам доступно компонентов.

У меня используется 22/26, использую системник по максимуму, но все эти компоненты обязательны для работы робота, по этому вы вряд ли сможете сильно поэкспериментировать.
После установки всех компонентов нажимайте кнопку пуск и просто ждите, пока создаётся ваш новый друг :)

Screenshot_102.thumb.png.39e00b892025bcc21c5da6bfedffee72.png

(обсуждают восстание машин)

2. Настройка робота

Спойлер

Дальше мы ставим робота, запускаем его и нас встречает тот же интерфейс, как и в обычном компе.

Алгоритм дальше почти тот же, что и в обычном компе: пишем edit mine (или любое ваше название), вставляем программу, приведённую ниже, настраиваем начальные переменные и сохраняем.

Для настройки у нас всего 3 переменные local x_size, local y_size, local z_size, отвечающие за размеры комнаты, которую выкопает ваш новый друг. Важно указывать именно нечетные числа, при этом робот сделает комнату на 1 блок больше, например, ставите ему комнату 3х3х3, а он сделает 4х4х4. Не очень удобно, костыльно, сам себя за это корю.

Перед запуском программы нужно поставить в 15 слот сундуки, в 16 слот уголь, а в слот с гаечным ключом любую кирку.

Screenshot_103.png.52274227c9b2fd940abb9a1026a72643.png

Вот сам код программы:

--перед запуском робота обязательно добавьте себя в свой приват в качестве учасника
--/rg addmember <ваш_приват> <ваш_ник>

local comp = require("component")
local robot_lib = require("robot")
local g = comp.generator

--размеры комнаты (обязательно четные!)
local x_size = 3
local y_size = 3
local z_size = 3

function eat()
    local selectedSlot = robot_lib.select()
    robot_lib.select(16)
    while robot_lib.count() < 1 do
        os.sleep(1)
        print("Нет топлива, хочу кушать!")
    end

    if g.count() < 2 then
        g.insert(8)
        robot_lib.select(selectedSlot)
    end
end

function fillChest()
    local selectedSlot = robot_lib.select()
    robot_lib.select(15)
    robot_lib.placeDown()
    for k = 1, 14 do
        robot_lib.select(k)
        robot_lib.dropDown()
    end
    robot_lib.select(selectedSlot)
end
  
function checkInv()
    if robot_lib.count(14) > 0 then
        fillChest()
    end
end

function run()
    repeat
        robot_lib.swing()
    until not robot_lib.detect()
    robot_lib.forward()
end

function rotate()
    if c % 2 == 0 then
        robot_lib.turnRight()
        run()
        robot_lib.turnRight()
    else
        robot_lib.turnLeft()
        run()
        robot_lib.turnLeft()
    end
end

function rotate_end()
    robot_lib.turnRight()
    for i = 0, y_size - 1 do        
        run()
    end
    robot_lib.turnRight()
end

function move_up()
    repeat
        robot_lib.swingUp()
    until not robot_lib.detectUp()
    robot_lib.up()
end

function main()
    c = 0
    for z = 0, z_size - 1 do
        for y = 0, y_size do
            for x = 0, x_size - 1 do
                run()
                checkInv()
                eat()
            end
            if y ~= y_size then
                rotate()
            else
                rotate_end()
            end   
            c = c + 1   
        end
        move_up()
    end
end

main()

Почти готово, при запуске программы, робот будет двигаться, но ломать блоки он не сможет. Из-за того, что я не знал, в чем дело, я больше года думал, что роботы выключены на всех серверах :/.. Чтоб наш друг копал, нужно его добавить в приват, прикиньте)

Пишем одну из двух команд, какая сработает, на каждом сервере по разному:
/rg addmember ваш_приват ваш_ник-robot
/rg addmember ваш_приват ваш_ник

На сколько я помню, вы обязательно должны быть в списке участников привата, даже если вы владелец привата, по этому обязательно добавьте себя в приват как участника. Теперь робот пойдет работать!

Я постарался учесть как можно больше нюансов, например, если у робота заканчивается уголь, он стоит на месте и ждёт, когда вы его покормите. Это нужно для того, чтобы программа не сбилась, если он разрядится. Так же, совершенно случайно выяснилось, что если кирка ломается, он так же ждёт, когда вы заметите ему её.

Известно так же несколько проблем:

  • Робот отлично чувствует себя в лаве, но он не ставит под собой сундук, когда находится в ней. Так же, если он остановится из-за нехватки угля в озере лавы, это будут ваши проблемы, как его достать)
  • На первом слое копания, робот не ставит сундуки, а просто сбрасывает все вещи на пол. Фиксится это одной дополнительной строчкой кода, но это я изменю в апнутой версии робота, о ней чуть позже)
  • Если вы не грузите чанки, в которых работает робот, его программа сбивается и он идет гулять, куда захочет. Что самое страшное - он может оставлять после себя своих "фантомов". Это блоки робота, которые сами по себе невидимые, сломать их нельзя, пройти через них тоже нельзя, появляются случайным образом. Тут уже пахнет багами самого мода, так что предотвратить это нельзя, но в данной ситуации, как говорится, клин клином вышибают. Если запустить робота по траектории, где находятся фантомы, он их собой уничтожает.

Вроде бы все моменты указал, если что упустил, спрашивайте в комментариях, постараюсь ответить)

По поводу названия гайда, а именно того, что робот на минималках. Для меня это больше робот для раскопки базы, чем робот шахтер, так что я подумал, а что если улучшить этот проект на столько, что он будет не только копать подземную базу, но и сразу ее обустраивать? Если в его инвентаре достаточно ресурсов, он крафтит что-то из своего списка механизмов и расставляет их в нужных местах? Пока что проект только в стадии разработки и работы ещё чрезвычайно много, надеюсь, меня хватит, чтоб добить это дело)

А на этом у меня все, удачи всем!

  • Love 1
Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...