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

danshat

Пользователи
  • Публикации

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

  • Посещение

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


  1. Как вариант: http://computercraft.ru/topic/1129-programmnaia-navigatciia-dlia-robota/ (хотя, я этим убожеством никогда не пользовался, привык все писать с нуля)

    А чтобы определить, является ли блок сундуком: inventory_controller.getInventorySize(сторона)

    Вот это вещь! Ее реально будет прикрутить. Особенно тогда, когда все написано за тебя)


  2. Программа, которая заставляет робота копать 3x3. 

     

    Скриншоты работы:

     

    2016040218_6435162_21379639.png
    2016040218_5096760_21379640.png
    2016040218_4371125_21379641.png
    2016040218_4252634_21379642.png
    2016040218_1639627_21379643.png
    2016040218_5689913_21379644.png
    2016040218_1007338_21379645.png

     

     

    TODO:

     

     

    • Движение робота к сундуку наверху, если инвентарь заполнен
    • Исправить сбивания программы, наладить проверку блоков и смену инструмента
    • Опциональная передача данных и состояния на планшет/компьютер/очки

     

     

     

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

     

    Скачать прототип можно вот где-то тут

     

     

    ЖУКАМИ НЕ КИДАТЬ! ТАПКАМИ ТОЖЕ!

     

     

    Что думаете?


  3. Есть программа, которая заставляет копать робота 3х3 "змейкой".

    Нужно сделать автоматическую выкладку ресурсов в сундук на самом верху дырки, если инвентарь заполнен ресурсами.

    Как это сделать? Нужно знать же положение робота относительно сундука? Или просто принудительно довести его до угла дыры и поднять вверх? А может принудительно поднять и проверять каждый блок геолайзером (сундук ли это :D)?


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

    Так что вот держи http://pastebin.com/bvxyh7fX

    Это код моей бета версии игры Open Clicker

    Просто промотай вниз и увидишь строку 

    event.listen('touch', touch)
    

    Я привязал функцию touch к событию "touch" которая реагирует на клик экрана.

    Далее смотри функцию touch()

    Разберёшься - молодец.

     

    P.S. Скрины к игре не отображаются, потому что доступ к хостингу картинок нет. Сайт недоступен.

    Ну как я и предполагал, передаются в функцию и отбрасываем нижними подчеркиваниями. Спасибо. Завтра проверю на деле.


  5. event.listen (событие, фунуция) привязывает к событию функцию - при получении указанного события функция выполнится.

    Не понял, как пользоваться. В гугле очень туманные ответы на этот вопрос на зарубежном говоре. Если можно привязать функцию, как ей передать параметры от события? или они сами передаются? и отсеивать в самой функции эти параметры знаками "_" ?


  6. Вынеси своё имя в переменную, например так 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, а можно как-то разделить рендер и ожидание события используя потоки? Чтобы одно в одном, другое в другом и друг другу не мешали?


  7. Есть следующий код:

    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 проворачивается один раз и останавливается.

    Возможное решение существует?


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

    Все равно не получается выудить сообщение и имя.

    local plr,_,msg = event.pull("glasses_chat_command")
      print(msg)
      print(plr)
    
    
    
    
    

    И в терминал идет не сообщение и имя отправившего, а адрес терминала очков, по всему видимому.

    f71b3252a12a4462b84da997fe549b19.png


  9. У меня есть мод OpenPeripheral.

    Я пытался сделать обработку событий glasses_chat_message. Видел, как в некоторых программах используют $$команда (команда очков). Вроде ошибок не кидает, но вместо сообщения в терминал выводит какой-то адрес.

    Если это событие не работает в OpenComputers (а есть такое подозрение), то есть какие-то аналоги приема сообщений из чата (без Computronics)?

    А если нету и выход - использовать только Chat Box из Computronics, то как обработать ивент там?

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