Перейти к содержимому
HeroBrine1st

Продвинутый робот-шахтер по мотивам астрономического шахтера из GalactiCraft 3

Рекомендуемые сообщения

Делал для себя - сделал почти эталон).

 

Робот копает шахту НЕ по прямой, часто делает круги (ибо рандом), но не тупит. Поворот каждые 10 блоков, настраивается. Как только робот обнаруживает, что последний слот занят (а поскольку размер инвентаря можно узнать только через контроллер инвентаря, вам надо самим его указать, это все в переменной, почему в переменной - объясню позже), он возвращается на базу (есть защита от дурака - робота с пути не сломить) и выгружает все в сундук под ним, потом ждет полной зарядки и перезагружается. Перезагрузка для освобождения переменной записи движений робота, поэтому надо ставить программу в авторан, по этой же причине все параметры программы в переменных.

 
Когда ставите робота, сундук ставьте под робота, сбоку зарядное устройство (желательно справа, меньше шанс что робот сломает зарядник, хотя я это тоже предусмотрел), зарядник запитываете редстоуном и энергией.
 
Установка:
1. Устанавливаете программную навигацию для робота - pastebin get -f Hb32aQeR /lib/robot.lua (http://computercraft.ru/topic/1129-programmnaia-navigatciia-dlia-robota/)
2. Устанавливаете саму программу - pastebin get -f PZGzqbdk /autorun.lua 
3.Заходите в код, ищете 2 переменные - OTMI и inventorySize. Первая переменная отвечает за поворот каждые n блоков. Вместо n подставляется значение этой переменной. Не рекомендую ставить больше 25. По умолчанию 10. inventorySize отвечает за количество слотов в инвентаре. Если вам лень считать, берете количество улучшений инвентаря и умножаете их число на 16, полученное значение подставляете в переменную inventorySize.
3.1. Для чайников в lua:
Переменные OTMI и inventorySize находятся на 14й и 15й строке.
Если вы снова не поняли, куда подставлять, подставляйте числа вместо чисел, которые стояли до вашей настройки
4. Перезагружаете (кирку обязательно, хотя лучше молот из тинкера из какого нибудь прочного материала, например бедрокия (бедрокий из магических модов))
5. Робот начинает копать.
 
Что скажу по конфигурации:
 
1. Чанклоадер ОБЯЗАТЕЛЬНО
2.  Для установки чанклоадера нужен процессор 3го уровня, так что ставьте его
3. ОЗУ на свое усмотрение, рекомендую 3го уровня
4. как минимум 2 улучшения инвентаря
5. батареек как можно больше
 
Если отловите баг, напишите в комментарии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хорошо, что проги пишутся. Я так прошерстил этот топик немного, есть непонятки.

 

 

 

Перезагрузка для освобождения переменной записи движений робота
 

Какой костыльный костыль зафигачил. Почему нельзя перезаписать переменную с таблицей этих действий? Так же гораздо проще.

 

 

 

Для установки чанклоадера нужен процессор 3го уровня, так что ставьте его
 

Корпус третьего уровня нужен, да. Процессор? Там второго или даже первого уровня хватит.

 

Ещё есть кнопка сверху для списков. Нумерованный и с маркерами. Не нужно выдумывать шедевры. Какой-то шрифт интересный тоже.

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
а поскольку размер инвентаря можно узнать только через контроллер инвентаря, вам надо самим его указать, это все в переменной, почему в переменной - объясню позже...

Заходите в код, ищете 2 переменные - OTMI и inventorySize. ...

inventorySize отвечает за количество слотов в инвентаре. Если вам лень считать, берете количество улучшений инвентаря и умножаете их число на 16, полученное значение подставляете в переменную inventorySize.

 

Так как неверный индекс слота возвращает ошибку, то есть способ получить размер инвентаря робота и без контроллера. Достаточно обработать ошибку (предполагается, что хотя бы один апгрейд инвентаря есть по определению и этот момент мы не проверяем):

local robot = require("robot")
local invSize = 16

for i = 32, 128, 16 do
  stat, _ = pcall(robot.select, i)
  if not stat then 
    invSize = i - 16
    robot.select(1) 
    break
  end
end

print(invSize)
3.Заходите в код, ищете 2 переменные - OTMI и inventorySize. ...

Для чайников в lua: Переменные OTMI и inventorySize находятся на 14й и 15й строке.

 

И так как любая программа, это, как правило, диалог человека с компуктером, то "частоту зигзагов" черепашки лучше и проще, наверное, спросить у пользователя, а именно при старте программы перед копкой ямки. Представь себе ситуацию, что разрабы из Близзард или Юбисофт говорят тебе, что мол если хотите поиграть за расу гномов или берсерков с сектоидами, "лезете в код" и меняете  такой-то и такой-то параметр на 5067-й и 8965-й строчке, а для чайников еще и отдельное приложение предлагается скачать с сайта для редактирования.

Ты бы, наверно, да и не только ты, на стуле на околоземную орбиту улетел тотчас же :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не понял, почему нельзя использовать robot.inventorySize(), а в общем, программа простая, даже удивительно, как она может что-то копать.

Можно сделать еще проще, засунуть все в EEPROM, но все-таки эффективность сомнительная, обычный карьер намного лучше.

Изменено пользователем Doob

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Хорошо, что проги пишутся. Я так прошерстил этот топик немного, есть непонятки.

 

 

Какой костыльный костыль зафигачил. Почему нельзя перезаписать переменную с таблицей этих действий? Так же гораздо проще.

 

 

Корпус третьего уровня нужен, да. Процессор? Там второго или даже первого уровня хватит.

 

Ещё есть кнопка сверху для списков. Нумерованный и с маркерами. Не нужно выдумывать шедевры. Какой-то шрифт интересный тоже.

 

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

 

 

Я не имею доступа к переменной, поэтому спасает только ребут. А выкладывать прогу на гитхаб, знаете ли, плагиатом называется.

А шрифт и отсутствие списков из-за того, что я сначала написал в группу вк, а оттуда потом скопировал и вставил сюда

 

А, да. Его продвинутость - не сбиваемость. Есть защита от дурака, поэтому он настолько продвинутый. И он походу не ломает зарядник, я это не тестил, но предусмотрел.

Насчет процессора - на моей конфигурации там сложность 31/32, все из-за инвентарей и батареек.

Изменено пользователем HeroBrine1st

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Не понял, почему нельзя использовать robot.inventorySize(), а в общем, программа простая, даже удивительно, как она может что-то копать.

Можно сделать еще проще, засунуть все в EEPROM, но все-таки эффективность сомнительная, обычный карьер намного лучше.

 

Потому что на сервере, на котором я играю, запрещен контроллер инвентаря, и я решил сделать прожку без него, ибо аналоги требуют контроллер инвентаря

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Так как неверный индекс слота возвращает ошибку, то есть способ получить размер инвентаря робота и без контроллера. Достаточно обработать ошибку (предполагается, что хотя бы один апгрейд инвентаря есть по определению и этот момент мы не проверяем):

local robot = require("robot")
local invSize = 16

for i = 32, 128, 16 do
  stat, _ = pcall(robot.select, i)
  if not stat then 
    invSize = i - 16
    robot.select(1) 
    break
  end
end

print(invSize)

 

И так как любая программа, это, как правило, диалог человека с компуктером, то "частоту зигзагов" черепашки лучше и проще, наверное, спросить у пользователя, а именно при старте программы перед копкой ямки. Представь себе ситуацию, что разрабы из Близзард или Юбисофт говорят тебе, что мол если хотите поиграть за расу гномов или берсерков с сектоидами, "лезете в код" и меняете  такой-то и такой-то параметр на 5067-й и 8965-й строчке, а для чайников еще и отдельное приложение предлагается скачать с сайта для редактирования.

Ты бы, наверно, да и не только ты, на стуле на околоземную орбиту улетел тотчас же :)

 

Если бы прожку сделали, я б скачал, отредачил. За методтполучения размера инвентаря без контроллера спасибо.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

При чем тут контроллер, если это метод робота?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
При чем тут контроллер, если это метод робота?

 

Я проверял, не работает.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я проверял, не работает.

В десятках программ используется этот метод. С чего б ему не работать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В десятках программ используется этот метод. С чего б ему не работать?

Возможно на сервере, на котором я играю и тестирую эту прожку, это не работает. Главное - робот копает неограниченное расстояние (из-за кругов по уже вырытым туннелям), а значит ресурсы станут практически бесконечными

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Возможно на сервере, на котором я играю и тестирую эту прожку, это не работает. Главное - робот копает неограниченное расстояние (из-за кругов по уже вырытым туннелям), а значит ресурсы станут практически бесконечными

До меня дошло.

 

Подвело решение не просто запихнуть свою либу в папку /lib вместо /usr/lib, но ещё и под тем же именем, что и стандартная либа "robot". Нельзя допускать конфликтов либ со стандартными. Нельзя класть несистемные либы в папку /lib. Ни-ког-да.

 

Чтобы починить, нужно:

  1. Перетащить свою либу в другое место.
  2. Переустановить системную библиотеку "robot".
  3. В программе использовать новое имя библиотеки.
Изменено пользователем Fingercomp

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

До меня дошло.

Если бы еще маленько дошло, то было бы понятно, что это копия системной либы и в ней все работает точно так же (кроме дополнительного функционала навигации).

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если бы еще маленько дошло, то было бы понятно, что это копия системной либы и в ней все работает точно так же (кроме дополнительного функционала навигации).

О как. И правда.

 

Тогда остаётся вариант очепятки.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Не понял, почему нельзя использовать robot.inventorySize(), а в общем, программа простая, даже удивительно, как она может что-то копать.

Можно сделать еще проще, засунуть все в EEPROM, но все-таки эффективность сомнительная, обычный карьер намного лучше.

Насчет эффективности: я вдохновился астрошахтером, а он упускает руду частенько. Я сделал также, пользователь может ходить по шахтам и выкапывать руду, если тот упустил. А еще это плюс для новичков - если пользователь забывает подчищать за роботом, новички на сервере могут выкапывать руды в шахтах.

 

И в конце концов, робот копает шахты, а не карьер.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

[ok=Обновлено][/ok]

 

Я убрал большинство костылей, но добавил 1 из-за особенностей библиотеки - импорт библиотеки находится в цикле и импортируется с помощью dofile

Также:

 

Программа узнает количество слотов в инвентаре сама

Спрашивает "частоту зигзагов"

Спрашивает положение робота на базе

 

Установка все та же - pastebin get -f PZGzqbdk /miner.lua

 

Так же, если вставить в робота и в комп связанные платы, можно установить pastebin get PZGzqbdk /controller.lua в компьютер

Это альфа-версия программы контроллирования робота, но она уже успешно показывает координаты

Изменено пользователем HeroBrine1st

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

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

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...