danshat
-
Публикации
39 -
Зарегистрирован
-
Посещение
Сообщения, опубликованные пользователем danshat
-
-
Как вариант: http://computercraft.ru/topic/1129-programmnaia-navigatciia-dlia-robota/ (хотя, я этим убожеством никогда не пользовался, привык все писать с нуля)
А чтобы определить, является ли блок сундуком: inventory_controller.getInventorySize(сторона)
Вот это вещь! Ее реально будет прикрутить. Особенно тогда, когда все написано за тебя)
-
Чорт! Мои глаза!
А геолайзер там зачем?
А как ты предлагаешь различать землю и руду с камнем?
-
Программа, которая заставляет робота копать 3x3.
Скриншоты работы:







TODO:
- Движение робота к сундуку наверху, если инвентарь заполнен
- Исправить сбивания программы, наладить проверку блоков и смену инструмента
- Опциональная передача данных и состояния на планшет/компьютер/очки
Программа заставляет робота копать слоями 3х3 и выбирать подходящий инструмент при вскопке.
Скачать прототип можно вот где-то тут
ЖУКАМИ НЕ КИДАТЬ! ТАПКАМИ ТОЖЕ!
Что думаете?
-
Есть программа, которая заставляет копать робота 3х3 "змейкой".
Нужно сделать автоматическую выкладку ресурсов в сундук на самом верху дырки, если инвентарь заполнен ресурсами.
Как это сделать? Нужно знать же положение робота относительно сундука? Или просто принудительно довести его до угла дыры и поднять вверх? А может принудительно поднять и проверять каждый блок геолайзером (сундук ли это
)? -
Великолепная библиотека. Просто класс. Наверное лучшая, по простоте и вообще кастомизабельности таких не найти для меня. Пускай тру-мега-прогеры юзают forms или сами пишут, но я буду юзать сею либу.
-
1
-
-
Класс. Программа сделана на отлично. Ну и при скане окружающих блоков мобы и игроки - по версии робота тоже блоки))
-
Сначала я хотел расписать тебе полностью как этим пользоваться, но вдруг понял что моя речь слишком слаба чтобы это сделать.
Так что вот держи http://pastebin.com/bvxyh7fX
Это код моей бета версии игры Open Clicker
Просто промотай вниз и увидишь строку
event.listen('touch', touch)Я привязал функцию touch к событию "touch" которая реагирует на клик экрана.
Далее смотри функцию touch()
Разберёшься - молодец.
P.S. Скрины к игре не отображаются, потому что доступ к хостингу картинок нет. Сайт недоступен.
Ну как я и предполагал, передаются в функцию и отбрасываем нижними подчеркиваниями. Спасибо. Завтра проверю на деле.
-
event.listen (событие, фунуция) привязывает к событию функцию - при получении указанного события функция выполнится.
Не понял, как пользоваться. В гугле очень туманные ответы на этот вопрос на зарубежном говоре. Если можно привязать функцию, как ей передать параметры от события? или они сами передаются? и отсеивать в самой функции эти параметры знаками "_" ?
-
Вынеси своё имя в переменную, например так local name = "danshat"
Ты его и так часто используешь, а так другие игроки, да и ты сам сможешь легко менять ник в одном месте, не бегая по коду.
Смысл от функции render(timearg) если она всегда выводит true и ничего не делает?
В добавок можешь сократить написание local note = lrequire("note").play
В начале программы можешь очистить экран командой require("term").clear
И в окончание скажу что return true не обязательно писать. Можно просто return, или в случае с render(timearg) вообще не писать return
Спасибо за уточнения, кодер то я такой быдлокодер)
event.pull() ожидает какого либо события (нажатия клавиши, сообщения в чате и т.д.)
Т.е. программа дальше не пойдет пока событие не случится. Ожидание можно прервать по тайм-ауту если сделать например так event.pull(3)
В этом случае, если события нет, цикл продолжит свою работу через три секунды.
Интересно, я видел же порт вашей библиотеки thread.lua, а можно как-то разделить рендер и ожидание события используя потоки? Чтобы одно в одном, другое в другом и друг другу не мешали?
-
Есть следующий код:
local component = require("component") local debug = component.debug local note = require("note") local event = require("event") local glass = component.glasses local chatbox = component.chat_box local isrender = 0 print("Скрипт запущен") local _,_,plr,msg = event.pull("chat_message") function render(timearg) return true end while true do timefunc = os.date("%H:%M:%S", os.time()) glass.removeAll() rect = glass.addRect() text = glass.addTextLabel() rect.setPosition(1,1) rect.setSize(50,100) rect.setColor(0.5,0.5,0.5) rect.setAlpha(0.3) text.setPosition(1,1) text.setText(timefunc) text.setAlpha(1) text.setColor(0,1,0) if plr == "danshat" and msg == "$$stop" then isrender = 0 glass.removeAll() end if plr == "danshat" and msg == "$$start" then isrender = 1 end if plr == "danshat" and msg == "$$quit" then glass.removeAll() print("Остановка..") return true end if debug.getWorld().isRaining() == true or debug.getWorld().isThundering() == true then debug.getWorld().setRaining(false) debug.getWorld().setThundering(false) print("Дождь отключен") note.play(90,0.5) end if debug.getPlayer("danshat").getHealth() <= 4 then debug.getPlayer("danshat").setHealth(20) print("Здоровье восстановлено") note.play(90,0.5) end endСобственно, небольшая программка на отдельном сервере по остановке дождя, восстановлению ХП и выводом времени на очки OpenGlasses. Дело в том, что при запуске рендер компонентов на OpenGlasses происходит один раз.. И больше никогда. Путем отсеивания выяснил, что проблема в event.pull(). Когда его нет, часы работают как часы. Но когда он есть, цикл while true do проворачивается один раз и останавливается.
Возможное решение существует?
-
Добавь еще _
local plr,_,_,msg = event.pull("glasses_chat_command") или local plr,_,_,_,msg = event.pull("glasses_chat_command")Спасибо, все сработало, стоило подвинуть лишь plr на место второй _.
-
Событие, скорее всего работает нормально. Просто оно возвращает несколько параметров, в том числе адрес чат-бокса. Попробуй запустить утилиту dmesg и проанализировать все параметры.
Все равно не получается выудить сообщение и имя.
local plr,_,msg = event.pull("glasses_chat_command") print(msg) print(plr)И в терминал идет не сообщение и имя отправившего, а адрес терминала очков, по всему видимому.

-
У меня есть мод OpenPeripheral.
Я пытался сделать обработку событий glasses_chat_message. Видел, как в некоторых программах используют $$команда (команда очков). Вроде ошибок не кидает, но вместо сообщения в терминал выводит какой-то адрес.
Если это событие не работает в OpenComputers (а есть такое подозрение), то есть какие-то аналоги приема сообщений из чата (без Computronics)?
А если нету и выход - использовать только Chat Box из Computronics, то как обработать ивент там?

Кишковая бурилка (копалка 3х3)
в Роботы
Опубликовано:
Дак ты же не будешь лопатой алмазы копать. А землю киркой.