Перейти к публикации

В ближайшее время постараюсь разобраться с картой сервера/ЛК/бб кодами

Внимание, с 14 февраля до 20 февраля могут проходить работы на сервере, где также находится лаунчсервер. В связи с этим авторизация в лаунчере может не работать

Вопрос

Всем привет. Такой вопрос: можно ли как-то сделать, чтобы комп активировал редстоун при приближении игрока к предмету. Допустим есть дверь напечатанная на принтере, радар и комп, и в момент приближения игрока радар посылал сигнал в комп и комп активировал ред, тем самым открывая дверь? Дверь отпечатана так, что при клике по ней или подаче сигнала, она меняет положение

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


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

52 ответа на этот вопрос

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

  • 0

В чистом моде 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 есть радар.

  • Like 1

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
29 минут назад, Totoro сказал:

В чистом моде 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 есть радар.

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

датчик движения есть

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
5 минут назад, Alexhotice сказал:

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

 

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

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

 

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

sensor.setSensitivity(число)

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

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


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

В качестве примера можно посмотреть мою старую прогу - SpiderEye.

Это система слежения на датчиках. Там вроде можно было делать и так чтобы дверь открывало.

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


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

Спасибо

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
9 минут назад, Alexhotice сказал:

а как на расстоянии подключить датчики к компу?

 

Кабелем.

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
16 минут назад, Totoro сказал:

В качестве примера можно посмотреть мою старую прогу - SpiderEye.

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
3 минуты назад, Alexhotice сказал:

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

 

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

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

pastebin get bTc7tJKv terminal.lua

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

terminal

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

 

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

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

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


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

image.png.2d133b28f424c4388a18a1aca1de1ea1.pngна всякий случай снес и загрузил заново

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
3 минуты назад, Alexhotice сказал:

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

 

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

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

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

 

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
16 минут назад, Totoro сказал:

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
21 минуту назад, Alexhotice сказал:

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

 

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

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

 

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
34 минуты назад, Totoro сказал:

 

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

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

 

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

Да, я видел. Там же уточнение про то что если стоит плата, значит с передней стороны идет сигнал, но поставив плату сигнал все равно не идет. Или это все же стоит в коде указать сторону света, в которую пойдет сигнал?

P.S. Я нашёл вроде свой косяк там в коде указана задняя сторона, исправил на нужную

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
1 час назад, Alexhotice сказал:

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

 

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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
4 минуты назад, Totoro сказал:

 

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

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

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

Я и исправил сразу на front

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


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

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

Видно я капец какой криворукий, что даже готовый код не работает  

А можно сделать, чтобы во все стороны подавал сигнал?

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
5 часов назад, Totoro сказал:

В чистом моде 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 есть радар.

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
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
})

 

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


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

на сколько я понял, код выглядит так?

local event = require('event')
local com = require('component')
local sensor = com.motion_sensor
local sides = require('sides')
local redstone = com.redstone
redstone.setOutput({
  [sides.front] = 5,
  [sides.back] = 5,
  [sides.left] = 5,
  [sides.right] = 5,
  [sides.top] = 5,
  [sides.bottom] = 5
})
  1.  

при запуске программы, выдает ошибкуimage.png.6c2598655e8ebe3d9dcbf6f0584d8226.png

получается в этом месте: local redstone = com.redstone.

 

p.s. достал карту на красном камне стала эта ошибка image.png.5fd8cec93e2ab4798e3543cfab329325.png

p.p.s вставил часть чтобы проверить работает ли и изменил на одну сторону

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

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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
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)

 

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


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

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

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

 

 

P.S. попробовал SpiderEye, тоже работает(да-да, я не там ред пускал), но там ред включается и выключается будто кто-то быстро дергает рычаг туда-сюда и задержка срабатывания 0.5-1 сек

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

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


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

всё верно здесь нет команды выключить сигнал, только включить

redstone.setOutput(sides.front, 15)

уровень 15

чтобы выключить поменяй на 0

redstone.setOutput(sides.front, 0)

и добавь задержку в секундах

os.sleep(3)

итого получим

local event = require('event')
local com = require('component')
local sensor = com.motion_sensor
local sides = require('sides')
local redstone = com.redstone
 
while true do
    local _, address, x, y, z, name = event.pull('motion')
    print(name)
    redstone.setOutput(sides.front, 15)
    os.sleep(3)
    redstone.setOutput(sides.front, 0)
end

 

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
8 минут назад, serafim сказал:

local event = require('event') local com = require('component') local sensor = com.motion_sensor local sides = require('sides') local redstone = com.redstone while true do local _, address, x, y, z, name = event.pull('motion') print(name) redstone.setOutput(sides.front, 15) os.sleep(3) redstone.setOutput(sides.front, 0) end

спасибо

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


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

Еще один вопрос, как можно подать редсигнал нескольким соседним блокам(выше/ниже), если rednet запрещен?

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
Только что, Alexhotice сказал:

Еще один вопрос, как можно подать редсигнал нескольким соседним блокам(выше/ниже), если rednet запрещен?

реднет, как я помню является сеть в компьютеркрафте

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


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

что за rednet  ?

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

 

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


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

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

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


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

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

 

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

посмотри SpiderEye Terminal: pastebin.com/bTc7tJKv в качестве примера

 

--список мобов
14  monsterlist = {"Spider", "Zombie", "Creeper", "Skeleton", "Enderman", "Sheep", "Cow", "Chicken"}

--перебор списка по строкам
311  for i=1, #monsterlist do
       if name == monsterlist[i] then 
         return true 
       end
     end

 

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


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

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

 

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

 

Ещё можно поставить не один красный контроллер, а несколько. Только тогда нужно будет устанавливать сигнал не только "главному" компоненту 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

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

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


Ссылка на сообщение
Поделиться на других сайтах
  • 0
3 минуты назад, serafim сказал:

посмотри SpiderEye Terminal

да, спасибо, я там и посмотрел этот кусок кода

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


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

Создайте аккаунт или войдите в него для комментирования

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

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас

×