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

Doob

Гуру
  • Публикации

    1 089
  • Зарегистрирован

  • Посещение

  • Победитель дней

    141

Все публикации пользователя Doob

  1. Надо сохранить файл с другим именем, redstone.lua это родная утилита управления редстоуном.
  2. local wlist = {['Lockry'] = true} local sleep = 10 local side = 1 local status local component = require('component') local computer = require('computer') local redstone = component.redstone local chat_box = component.chat_box local signal = computer.pullSignal function computer.pullSignal(...) local e = {signal(...)} if status and status+sleep*72 <= os.time() then redstone.setOutput(side, 0) status = nil end if e[1] == 'chat_message' and wlist[e[3]] then if e[4] == 'startmob' then status = os.time() redstone.setOutput(side, 15) end end return table.unpack(e) end Первая строка - белый список игроков, которым доступно управление.Вторая строка - задержка в секундах, т. е. на сколько времени активировать сигнал. Третья - сторона блока, на которую подавать сигнал.
  3. Стоимость для всех одинаковая, стартовый баланс = 0 Поэтому, чтобы что-нибудь купить, надо что-нибудь продать.
  4. Никакой. Вообще. Приходишь, сдаешь ресурсы, приобретаешь другие. Стоимость перерасчитывается после каждой операции, устанавливается в зависимости от спроса/предложения и редкости ресурса.
  5. Демонстрация автономного рынка на OpenComputers, т. к. на сервер заходит мало народу и почти никто не видел его в работе. Описание тут Является ответом на это, это и, частично на это и это
  6. https://pastebin.com/xPzTDkrB пример использования: gcam south 16
  7. Можно ловить событие redstone_changed. Но оно не работает с цветными кабелями.
  8. простой переключатель if message == 12345 then if redstone.getOutput(side) == 0 then -- если на выходе 0 redstone.setOutput(side, 15) -- подать 15 else -- иначе redstone.setOutput(side, 0) -- подать 0 end end мигание while true do redstone.setOutput(side, 15) os.sleep(1) -- задержка в секундах redstone.setOutput(side, 0) if [[условие]] then break -- выход из цикла end end
  9. Просто куда-то затерялась переменная 'slot', если ее вернуть, то никаких ошибок. А нужные функции, без проблем добавляются в таблицу 'commands'.
  10. local component = require("component") local robot = require("robot") local event = require("event") local port = 512 local modem if component.isAvailable("modem") then modem = component.modem else error("Этой программе требуется беспроводной модем для работы!") end modem.open(port) local commands = { forward = robot.forward, back = robot.back, turnRight = robot.turnRight, turnLeft = robot.turnLeft, up = robot.up, down = robot.down, suck = robot.suck, drop = function() -- создаем функцию дропа robot.drop() -- дропаем предмет вперед slot = (slot + 1)%robot.inventorySize() -- задаем номер следующего if slot == 0 then -- проверяем исключение slot = 1 -- назначаем, в случае исключения end robot.select(slot) -- выбираем end, } local function receive() while true do local e = {event.pull('modem_message')} if commands[e[7]] then -- если в списке есть такая команда commands[e[7]]() -- выполнить end end end receive()
  11. Если бы еще маленько дошло, то было бы понятно, что это копия системной либы и в ней все работает точно так же (кроме дополнительного функционала навигации).
  12. А можно скрин? У меня все нормально.
  13. заменить 'cmd' на 'commands' в строках 59, 60 и удалить все с 61 до 87 ну и поправить event.pull() на event.pull('modem_message')
  14. В общем, да, но в цикле два вызова event.pull, вторая часть не нужна, т. к. функционал дублируется и работает через раз.
  15. OpenComputers:item:45 - обычный OpenComputers:item:46 - золотой OpenComputers:item:40 - алмазный OpenComputers:item:69 - креативный OpenComputers:rack - серверная стойка
  16. собсна, нам надо послать команду с планшета для этого нужна примерно такая писанина: local component = require('component') -- подключаем компоненты local event = require('event') -- подключаем события local modem = component.modem -- даем название модему while true do -- запускаем бесконечный цикл local e = {event.pull('key_down')} -- захватываем события нажатий if e[4] == 34 then -- если код кнопки равен 'G' modem.broadcast(1, 'drop') -- послать сообщение elseif e[4] == 16 then -- если код кнопки равен 'Q' break -- выход из цикла end end дальше, робот должен ждать сообщение и выполнить указанные инструкции local component = require('component') -- подключаем компоненты local event = require('event') -- подключаем события local modem = component.modem -- даем название модему local robot = component.robot -- даем название роботу local slot = 1 -- задаем текущий слот local cmd = { -- создаем список команд drop = function() -- создаем функцию дропа robot.drop(3) -- дропаем предмет вперед slot = (slot + 1)%robot.inventorySize() -- задаем номер следующего слота if slot == 0 then -- проверяем исключение slot = 1 -- назначаем слот, в случае исключения end robot.select(slot) -- выбираем слот end } modem.open(1) -- открываем порт на модеме, чтобы слышать сообщения while true do -- запускаем бесконечный цикл local e = {event.pull('modem_message')} -- захватываем события модема if cmd[e[6]] then -- если в списке есть такая команда cmd[e[6]]() -- выполнить end end
  17. Не понял, почему нельзя использовать robot.inventorySize(), а в общем, программа простая, даже удивительно, как она может что-то копать. Можно сделать еще проще, засунуть все в EEPROM, но все-таки эффективность сомнительная, обычный карьер намного лучше.
  18. Такая программа давным-давно есть и не одна. Например. Есть еще [li]pastebin run CGs3u4Ck[/li], готовые алиасы: WASD, Q - вверх, E - вниз, F - забрать лут, G - юзать, H - дропать. (написано было под OOS 1.5) Функционал можно дописывать в боевом режиме, авторизация топорная, поэтому, если робот отвалится в привате, то его не вернуть.
  19. Без задней мысли. Берем и следим.6 или 7 слот, на выбор. Только смысла в этом не много, т. к. передаваемый объем данных слишком большой, а если использовать систему как обычный модем, то ресурсы используются не рационально. Проще объединить сеть связанными картами, кстати,тоже можно подключить любое количество компов, потому-что есть такая хитрая топология, называется "кольцо".
  20. Изначальная идея здравая, но реализация хромает. Предлагаю не занимать слоты эндерчета бессмысленной инфой. Берем несколько сундуков, закладываем в них 255 разных ресурсов. Для передачи информации, переносим ресурсы в эндерчест, по заранее созданной таблице соответствий (синхронизировать можно при старте). Получаем 53 байта за раз, следовательно, можно жать информацию, бить на блоки по 53 байта и передавать без особых извращений.
  21. Вообще-то, мы с тов. Томатом подразумеваем самый обычный бартер, который контролируется компьютером и все выпады на такой способ торговли идут в сторону бартера, который есть на абсолютно всех серверах. Программа более справедливо рассчитывает относительные цены "товар-товар" и никаких валют ей не требуется, т. к. товары сами-по себе самодостаточные валюты. Достаточно, просто осознать смысл денег. Деньги - это эквивалент стоимости, поэтому зачем вводить еще один ресурс и искусственно задавать его стоимость относительно других, когда мы можем рассчитать стоимость любого одного товара, относительно другого? Деньги нужны в реальном мире, где царит полный бардак, куча невидимых переменных и человеческие хотелки. Майнкрафт этого лишен, потому-что он кубический в вакууме и почти все можно предсказать (кроме багов и дюпов)
  22. http://minecraft-ru.gamepedia.com/OpenComputers/Component_API
  23. Библиотека довольно самодостаточная, в ней только самые нужные функции, но можно добавлять свои модули. Буферизацию можно выполнить в виде отдельного демона, который обновляет экран только после явной команды.
×
×
  • Создать...