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

Doob

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

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

  • Посещение

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

    141

Сообщения, опубликованные пользователем Doob


  1. Изображение с экрана пропадает, потому-что на него подается сигнал, об этом даже сказано в ачивке при крафте монитора. Лучше отделить монитор или редстоун I/O кабелем от других блоков.

    Если проблема с определением стороны, то можно подать сигнал на все.

    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
    
    local function switch(value)
      for side = 0, 5 do
        redstone.setOutput(side, value)
      end
    end
    
    function computer.pullSignal(...)
      local e = {signal(...)}
      if status and status+sleep*72 <= os.time() then
        switch(0)
        status = nil
      end
      if e[1] == 'chat_message' and wlist[e[3]] then
        if e[4] == 'startmob' then
          status = os.time()
          switch(15)
        end
      end
      return table.unpack(e)
    end
    

  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
    
    Первая строка - белый список игроков, которым доступно управление.

    Вторая строка - задержка в секундах, т. е. на сколько времени активировать сигнал.

    Третья - сторона блока, на которую подавать сигнал.

    • Нравится 2

  3. простой переключатель

    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
    
    • Нравится 1


  4. 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()

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

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

    • Нравится 2

  6. собсна, нам надо послать команду с планшета

    для этого нужна примерно такая писанина:

    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
    

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

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


  8. Такая программа давным-давно есть и не одна.
    Например. Есть еще [li]pastebin run CGs3u4Ck[/li], готовые алиасы: WASD, Q - вверх, E - вниз, F - забрать лут, G - юзать, H - дропать. (написано было под OOS 1.5)

    Функционал можно дописывать в боевом режиме, авторизация топорная, поэтому, если робот отвалится в привате, то его не вернуть.


  9. Без задней мысли. Берем и следим.6 или 7 слот, на выбор.

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

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

    • Нравится 1

  10. Изначальная идея здравая, но реализация хромает.

    Предлагаю не занимать слоты эндерчета бессмысленной инфой.

    Берем несколько сундуков, закладываем в них 255 разных ресурсов.

    Для передачи информации, переносим ресурсы в эндерчест, по заранее созданной таблице соответствий (синхронизировать можно при старте).

    Получаем 53 байта за раз, следовательно, можно жать информацию, бить на блоки по 53 байта и передавать без особых извращений.


  11. Вообще-то, мы с тов. Томатом подразумеваем самый обычный бартер, который контролируется компьютером и все выпады на такой способ торговли идут в сторону бартера, который есть на абсолютно всех серверах.

    Программа более справедливо рассчитывает относительные цены "товар-товар" и никаких валют ей не требуется, т. к. товары сами-по себе самодостаточные валюты.

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

    Деньги нужны в реальном мире, где царит полный бардак, куча невидимых переменных и человеческие хотелки. Майнкрафт этого лишен, потому-что он кубический в вакууме и почти все можно предсказать (кроме багов и дюпов)

    • Нравится 1
×
×
  • Создать...