jammer312 45 Опубликовано: 30 июля, 2014 Небольшая программа, позволяющая активировать сигнал красного камня, когда видит указанных игроков. Конкретно в моем случае это дверь в мои апартаменты. Принцип работы: Если замечает движение, проверяет, есть ли ник ( если он есть) среди указанных в таблице( по умолчанию реагирует на меня и двд), если есть, то открывает дверь и ждет, пока не пройдет 5 секунд либо игрок не окажется по другую сторону двери. После этого ожидает 5 секунд, перед тем как начать регистрировать новые движения. Также программа выдает различную информацию о своей работе: Стоит заметить, что данный вариант программы допускает лишь возможность, что игрок проходит через дверь с севера на юг либо с юга на север. Для того, чтобы изменить список игроков, у которых есть доступ пройти, достаточно изменить таблицу, являющуюся первой строкой кода. Также(не уверен) можно записать одно поле как nil(без кавычек), тогда, возможно, дверь будет пропускать мобов. abletopass={"jammer312","dvd406"} function check(cnick) for k,v in pairs(abletopass) do if cnick==v then return true end end return false end sensor = require("component").motion_sensor red=require("component").redstone while true do local event=require("event") while true do type,addr,x,y,z,prnick = event.pull() if type=="motion" and check(prnick) then wait = true print("motion of "..prnick.." at " .. x ..y .. z) pass=(z>0) event.timer(5,function () wait=false end) red.setOutput(require("sides").top,15) print("open") while wait do type,addr,x,y,z,nick=event.pull() if type=="motion" and nick==prnick and pass==(z<0) then wait=false;print("passed at "..x..y..z) end end print("closing") red.setOutput(require("sides").top,0) os.sleep(5) break end end end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
1Ridav 1 049 Опубликовано: 30 июля, 2014 Программки выкладывайте в прямо в теме, чтобы не было проблем со сбором программ в последствии Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MorfSD 102 Опубликовано: 11 декабря, 2014 эм а что бы в ней поменять чтоб с запада на восток работало? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 541 Опубликовано: 11 декабря, 2014 простенько. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Zer0Galaxy 2 187 Опубликовано: 11 декабря, 2014 Подозреваю, нужно существенно переделать код программы. А именно заменить z>0, z<0 на x>0, x<0 соответственно 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Aex 86 Опубликовано: 12 декабря, 2014 Проблема в том, что как только ты подошёл к двери, она сама открывается без дальнейших действий с твоей стороны. В этом есть плюсы, но есть и очевидные минусы. Подошёл к двери посмотреть, кто там... Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
GravityFolls 21 Опубликовано: 14 декабря, 2014 Проблема в том, что как только ты подошёл к двери, она сама открывается без дальнейших действий с твоей стороны. В этом есть плюсы, но есть и очевидные минусы. Подошёл к двери посмотреть, кто там... Можно на КК сделать мониторинг кто возле твоей территории. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MorfSD 102 Опубликовано: 22 декабря, 2014 (изменено) был странный баг(дверь открывалась не на нужное время а на доли секунды затем открывалась и закрывалась(цыкл))) в виду того что я незнаю луа, методом научного исключения части кода удалил часть кода и баг прекратился, хотя есть подозрение что надо было просто os.sleep(5) поменять на другое значение. Изменено 22 декабря, 2014 пользователем MorfSD 2 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 22 декабря, 2014 был странный баг(дверь открывалась не на нужное время а на доли секунды затем открывалась и закрывалась(цыкл))) в виду того что я незнаю луа, методом научного исключения части кода удалил часть кода и баг прекратился, хотя есть подозрение что надо было просто os.sleep(5) поменять на другое значение. Методом научного тыка не зная Луа удалил часть кода и баг прекратился Поднял настроение!!! Разобрал телевизор, чего-то там перепаял, собрал все назад - телевизор начал работать и еще детали лишние остались 1 Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MorfSD 102 Опубликовано: 22 декабря, 2014 В итоге получилось вот это. abletopass={"MorfSD","Zeus"}function check(cnick)for k,v in pairs(abletopass) doif cnick==v then return true endendreturn falseendsensor = require("component").motion_sensorred=require("component").redstonewhile true dolocal event=require("event")while true dotype,addr,x,y,z,prnick = event.pull()if type=="motion" and check(prnick) thenwait = trueprint("motion of "..prnick.." at " .. x ..y .. z)pass=(x>0)event.timer(5,function () wait=false end)red.setOutput(require("sides").top,15)print("Дверь_открыта")while wait dotype,addr,x,y,z,nick=event.pull()endred.setOutput(require("sides").top,0)breakos.sleep(99)endend end Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro 3 563 Опубликовано: 22 декабря, 2014 (изменено) В итоге получилось вот это: Ты удалил строки if type=="motion" and nick==prnick and pass==(z<0) then wait=false; print("passed at "..x..y..z) end которые закрывали дверь раньше, чем истекут 5 секунд, если игрок уже прошел через нее. И поменял местами строки break os.sleep(5) В результате команду os.sleep() программа пропускает и нет задержки в 5 сек. после того как кто-то прошел. Странный баг был из-за того, что ты поменял условие на pass=(x>0) в одном месте, в в другом (тот кусок, который ты потом вырезал) - не поменял. PS. Я бы выкинул все "реквайры" в начало программы, и добавил бы брейк таймера в условие преждевременного выхода. :P Изменено 22 декабря, 2014 пользователем Totoro Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
MorfSD 102 Опубликовано: 23 декабря, 2014 (изменено) так проблема в том что когда я прохожу через дверь я попадаю в слепую зону датчика, дверь открывается датчиком только с улицы, из помещения дверь открывается нажимными плитами, общая толщина двери 3 блока Изменено 23 декабря, 2014 пользователем MorfSD Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах