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

Totoro

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

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

  • Посещение

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

    289

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


  1. 30 минут назад, Alexhotice сказал:

    изменил я на эту часть,

    и

    после того как, первый раз засекла выбило ошибку

     

    Возможно это только в последних версиях добавили. Или оно для блоков не работает.

    Значит придется по отдельности на каждую сторону сетить.


  2. Блок:

    if not monsters then
      ...
    end

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

    Это же проверка имени того, на кого "сагрился" датчик.

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

     

    Ты можешь оформить проверку как функцию (и тогда ее можно будет как раз оставить в начале программы):

    function isMonster(name)
      for i=1, #monsterlist do
        if name == monsterlist[i] then return true end
      end
      return false
    end

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

    while true do
        local _, address, x, y, z, name = event.pull('motion')
        if isMonster(name) then
          print("Это был моб...")
        else
          print("Кто-то ломится в дом!")
        end
    end

     

    • Нравится 1
    • Спасибо 1

  3. Для удобной прокладки редстоуна придется повозиться с ванильной пылью.

     

    Когда мы строили банк, мы использовали мод на липкий редстоун.

     

    Ещё можно поставить не один красный контроллер, а несколько. Только тогда нужно будет устанавливать сигнал не только "главному" компоненту redstone, но и остальным.

    Например так:

    local sides = require('sides')
    local com = require('component')
    
    -- получаем список всех компонентов 'redstone'
    local redstone = component.list('redstone')
    
    -- когда нужно - изменяем на них на всех уровень сигнала
    for address, _ in pairs(redstone) do
      com.invoke(address, "setOutput", sides.front, 15)
    end

    Или что-нибудь в таком духе.


  4. 3 часа назад, Alexhotice сказал:

    заработало, ошибки перестало выдавать, но ред сигнал все равно не пускает 

     

    Надо логику программы поправить.

    У тебя есть основной цикл:

    while true do
      ...
    end

    Он повторяется бесконечно.

    Всю обработку имеет смысл делать внутри него, чтобы бесконечно обрабатывать сигналы от сенсора.

     

    Первая строка ловит сигналы от сенсора и сохраняет в переменные:

    local _, address, x, y, z, name = event.pull('motion')

    Далее можно проверить, что сигнал действительно пришел, и это не сбой:

    if name ~= nil then
      ...
    end

    Можно еще проверить, что name тут - это ник нужного игрока и т.п.

    Ну и внутри этой проверки можно уже пускать сигнал редстоуна:

    redstone.setOutput(sides.front, 5)

     


  5. 3 часа назад, Alexhotice сказал:

    вот этот код работает нормально, а как добавить функцию подачи сигнала?

     

    Для того чтобы подавать сигнал, надо использовать редстоун плату, или редстоун контроллер.

    У них у обоих одинаковый интерфейс, и компонент называется "redstone".

     

    Для того чтобы подать сигнал редстоуном, надо выбрать сторону и уровень сигнала (от 0 до 16).

    Например:

    local sides = require('sides')
    local com = require('component')
    local redstone = com.redstone
    
    redstone.setOutput(sides.top, 5)

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

    либо передать функции таблицу:

    redstone.setOutput({
      [sides.front] = 5,
      [sides.back] = 5,
      [sides.left] = 5,
      [sides.right] = 5,
      [sides.top] = 5,
      [sides.bottom] = 5
    })

     


  6. 1 час назад, Alexhotice сказал:

    Там же уточнение про то что если стоит плата, значит с передней стороны идет сигнал,

     

    Не не. Не "с передней", а "относительно передней". Там просто прикол в том, что у системника "юг" не на юге находится, а на передней стороне.

    То есть ориентироваться надо не по реальным сторонам света, а как комп стоит.

    Ну или писать не "south", "north", "west", "east", a "front", "back", "right", "left".


  7. 21 минуту назад, Alexhotice сказал:

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

     

    Там в топике о программе написано как настроить программу.

    Надо указать сторону блока на которую будет подан сигнал.

     

    Если на дисплее алерт появился - то на блоке на какой-то стороне тоже должен сигнал появиться.


  8. 3 минуты назад, Alexhotice сказал:

    на всякий случай снес и загрузил заново

     

    Ну вот теперь оно явно корректно скачалось.

    OpenOS пишет тебе ошибку - "no primary 'redstone' available".

    Это значит нет доступных компонентов "redstone".

     

    Подсоедини Redstone I/O (красный контроллер, блок такой из OpenComputers). Кабелем к компу.

    Этот блок будет выдавать сигнал редстоуна. К нему в принципе можно двери и прицепить.


  9. 3 минуты назад, Alexhotice сказал:

     попытался запустить вашу старую прогу, выбило ошибку. похоже я криворукий

     

    А точно правильно скачалось / скопировалось?

    Я вот прямо сейчас попробовал сделать:

    pastebin get bTc7tJKv terminal.lua

    И потом просто:

    terminal

    И оно запустилось нормально.

     

    P.S. Запускал из OpenOS, не из MineOS.

    P.P.S. Можно и на ты, я не обижусь. 😛


  10. 17 минут назад, kaka888 сказал:

    Благодарю. Жаль, что я пока не знаю, что такое паттерн, "%" и "$" :((

     

    Паттерны, они же шаблоны. Они же аналог "регексов" для Луа.

     

    Вот тут про паттерны на английском: http://lua-users.org/wiki/PatternsTutorial

    Тут - на русском: http://bot4sale.ru/blog-menu/qlua/265-lua-patterns.html

     

    Ну и вообще погуглить можно.

    • Нравится 1

  11. 5 минут назад, Alexhotice сказал:

    да, радар есть, а как именно настроить чувствительность, а то не шарю(только начинаю разбираться в моде)

     

    Датчик движения имеет радиус действия 8 блоков, и он не должен быть заслонен другими блоками (можно прятаться от него за стенкой).

    Чувствительность - это порог скорости с которой должна двигаться цель, чтобы датчик ее "засёк".

     

    Я не помню какие там числа, но можно поиграться и посмотреть. Задается чувствительность так:

    sensor.setSensitivity(число)

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


  12. В чистом моде OpenComputers (без дополнений) есть такая хрень - датчик движения.

     

    Юзается примерно так:

    local event = require('event')
    local com = require('component')
    local sensor = com.motion_sensor
    
    while true do
      local _, address, x, y, z, name = event.pull('motion')
      print(name)
    end

    Чувствительность настраивается.

     

    В дополнении OpenSecurity или Computronics есть радар.

    • Нравится 1

  13. На случай если кто-то будет искать ответ - проблема решилась.

    Исходный текст был не в кодировке UTF-8, а в кодировке Windows-1251 (кодировка менялась при заливке файла, или неверно интерпретировалась железякой), и после смены чарсета все заработало.

     

    1209106399_Screenshotfrom2019-01-1715-38-11.png.6fc8df9d1b26afe470025c1304ccdfbb.png

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