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

Doob

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

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

  • Посещение

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

    141

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


  1. Первый же пример выдал

    bios:338: [string "test"]:7: '=' expected
    

    Нет в Minecraft-Lua безусловных переходов, похоже. (тестировалось под КК)

     

    В OpenComputers все работает

    Вызов функции это тоже безусловный переход

     

     

    На английском, но с примерами есть тут:

    http://lua-users.org/wiki/GotoStatement

     

     

     

    >>здесь главное форма реализации,

    >>Мой код умеет так же, но он намного более компактный

    Можно вопрос - а зачем? Зачем тебе такой компактный код? В биосе 4к места, почему бы им не воспользоваться?

     

     

     

    >>А вот здесь поподробней пожалуйста.

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

     

    • Твой код написан хорошо, и абсолютно без изменения функционала удалось сжать его всего на 4-10 символов.
    • С небольшими изменениями, которые не отразятся на условиях работы программы при 90% случаев, можно сжать 230 вариант примерно до 150 байт

      В принципе можно остановиться на этом варианте, но я пошел дальше.

    • Если отказаться от входных параметров, которые не нужны, так как их можно реализовать в клиентской программе, можно сжать первый вариант до 130 байт
    • Если добавить еще небольших условностей, типа без проверки на сигнал модема, можно сжать код до 107 байт
    • Если отказаться от отсылки сообщений об ошибках обратно, которые можно и так определить первым сообщением, код получается 92 байта

     

     

    Да ты маг, у меня только 108, что сжать еще, не знаю))


  2. Зачем для разных ферм писать разные программы?
    При помощи двух функций, я теперь могу сделать ферму crops и кактусов с минимумом изменений.
    Работает на любой длине и ширине поля, на любом роботе с инвентарем, пока робот висит у сундука, можно расширить грядку (не забыв при этом обновить границу из твердых блоков)
     
    Код библиотеки: pastebin get 3fYPKZ8v /lib/farmer.lua

    Настройки на строках 8 и 9
     
    Ставим робота так, чтобы он стоял задом к сундуку, закидываем в первый слот сундук, чтобы робот мог найти отправную точку, делаем бордюр вокруг поля из любого твердого блока (уткнувшись в него, робот переходит на следующую линию)
     
    Примеры использования:
     
    Ферма кактусов



    3un7lr4.png
     

    local computer = require('computer')
    local robot = require('robot')
    local farmer = require('farmer')
    
    local function dig()--содрать два верхних блока кактуса/тростника
      if robot.detectDown() then
        robot.swingDown()os.sleep(0.4)
        robot.down() os.sleep(0.4)
        robot.swingDown() os.sleep(0.4)
        robot.up()
      end
    end
    
    while true do
      energy = computer.energy()/computer.maxEnergy()
      if energy <= 0.1 then --  если энергии меньше 10%
        print('Уровень энергии менее 10%')
        os.sleep(300) -- спим 5 минут
      else
        dig()
        robot.forward() --идем вперед
        if robot.detect() then --уперлись в блок
          dig()
          if farmer.turn() then -- поворачиваем, если есть блок - включаем поиск сундука
            if farmer.findChest() then -- проверяем есть ли сундук
              for i= 2, robot.inventorySize() do -- сбрасываем урожай
                robot.select(i)
                robot.drop()
              end
              robot.turnAround() -- разворачиваемся на старт
              robot.select(1)        
              os.sleep(300) -- спим 5 минут
            end
          end
        end    
      end
    end
    

     


     
    Ферма на жердочках еще проще:


     
    7aTdrP5.png

    local computer = require('computer')
    local robot = require('robot')
    local farmer = require('farmer')
    
    while true do
      energy = computer.energy()/computer.maxEnergy()
      if energy <= 0.1 then --  если энергии меньше 10%
        print('Уровень энергии менее 10%')
        os.sleep(300) -- спим 5 минут
      else
        robot.useDown()
        robot.forward()
        if robot.detect() then
          robot.useDown()
          if farmer.turn() then
            if farmer.findChest() then
              for i= 2, robot.inventorySize() do
                robot.select(i)
                robot.drop()
              end
              robot.turnAround()
              robot.select(1)        
              os.sleep(300)
            end
          end
        end    
      end
    end
    

     

     

    • Нравится 2

  3. Всё работает, но вопрос прежний. Как это число, которое получается из os.time('%T') Округлить до целых?

    math.floor(os.time('%T')) округление вниз

    math.ceil(os.time('%T')) округление вверх


  4. >Кстати, твой код всё еще можно уменьшить не изменив функционал.

    А вот здесь поподробней пожалуйста.

     

    Например, 157 байт

    m=component.proxy(component.list('modem')()) m.open(42) while true do e,_,_,_,_,cmd=computer.pullSignal() if e=='modem_message' then pcall(load(cmd)) end end
    
    • В шоке 1

  5. Примитивная либа, которая конвертирует текст в код Морзе и пикает при помощи computer.beep()

    Пример использования: txt_to_morse('ЛЕНИН МИР СССР', true)

     

    Конвертируется русский и английский текст, цифры и символы [=.,:;'"/_=+-?!@], которые кодируются по английской системе. Второй параметр отвечает за вывод символа с его кодом на экран.

     

    Собственно, код: http://pastebin.com/cYZL6Pz3

    • Нравится 6

  6. Нормально же пишет)) Я тоже так писал, когда учился, а когда начал писать что-то более двадцати строк, то понял зачем нужен стиль и комментарии))

    А вообще, ни на кого не жалуюсь - скопировал в notepad++, включил подсветку, отформатировал и читаю себе на здоровье.

    • Нравится 1

  7. Вот в чем печаль, в общем, если делать прыжок командой "/clone" (MC 1.8), то придется делать промежуточные прыжки между стартом и финишем, чтобы переносить игрока, передвигать корабль на крайний загруженный чанк и опять переносить игрока.

     

    А если делать тупо "world.getBlockId(), world.getMetadata() + /setblock", то ни о каком копировании не может быть и речи, ибо многие параметры блоков слетают.

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


  8. Можно сделать адаптацию под самые минимальные характеристики робота, прикрутить удаленный интерпретатор lua, чтобы расширить функционал.

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

    Прикрутить еще GUI, чтобы сделать все на кнопках-триггерах с выбором скорости движения - нажимаешь кнопку "loop" и выбираешь скорость, к примеру, для движения вперед и тогда робот в цикле прет, пока не упрется в блок.

     

    В общем, фонтан идей, я как взялся, но удобного GUI, как в компутеркрафте не нашел (чтобы с кучей перетаскиваемых окон и перенастройкой интерфейса на лету) Жаль, что свободного времени маловато, я текстурпак для OC уже вторую неделю рисую))


  9.  

    Создаём файл /lib/robo.lua, например, и пишем что-то типа этого (не тестил, будет ли работать):

    local robot = require("robot")
    local attempts = 5 -- Указыавет, сколько следует сделать попыток выполнить данное действие
    
    
    local function tryToDo(func)
      local success = false
      for i = 1, attempts, 1 do
        if not func() == true then
          os.sleep(0.5)
        else
          success = true
          break
        end
      end
      return success
    end
    
    local funcsToOverride = {"down", "up", "turnLeft", "turnRight", "forward", "swing"} -- просто заполняем список функциями для перезаписи на стабильные версии
    for i = 1, #funcsToOverride, 1 do
      robot[funcsToOverride[i]] = function()
          local success = false
          for i = 1, attempts, 1 do
            if not robot[funcsToOverride[i]]() == true then
            os.sleep(0.5)
          else
            success = true
            break
          end
        end
      return success
    
    
        end
    end
    return robot
    

    То, что надо! Ща затестим...


  10. Что довольно странно, но делал программки на MC 1.8 с последним OC и встретил этот баг, решил проверить на 1.7.10 - аналогично.
    К примеру в этом коде:

    robot.swingDown()
    robot.down()
    robot.swingDown()
    robot.up()
    

    стабильно игнорится вторая строчка, при чем другие движения/взаимодействия работают довольно четко, но в паре с функцией swing происходят ошибки (иногда даже путает слоты инвентаря). Слипы не помогают, что делать?  :smile14:  Переписать robot API?


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

    Сделать ЦУП, который будет связанными платами общаться с кораблями, обрабатывать запросы на прыжки и следить, чтобы координаты финишей были корректны.

    Единственное, что мне не до конца ясно, можно ли управлять плагином привата от имени игрока.


  12. Все это круто, а как у системы с энерго-лаго эффективностью? Надо же еще кроме охраны дома что-то делать, а то прошел какой-нибудь %playername%  мимо твоего дома, система всю энергию выжрала, а ты прилетаешь срочно передробить стак стаков руды и сидишь АФКшишь, пока энергия не восполнится.


  13. Вся беда в том, что черепахи отсутствуют на серверах  или запрещены вообще. И гриферить ними нет  никакой возможности по причине их отсутсвия=) Разве что себя в одиночке.

     

    И не надо там пушех. Серверов почти нет, где взрывы разрешены, и просто прогой-карьером дом  разриферить в 100 раз быстрее, чем динамитом плеваться.

     

    Я думаю, что через пол-годика или год при темпах развития ОС про КК все забудут постепенно, он будет жить только в мире сингла, как простой и удобный мод для изучения программирования на Луа, если Ден не примет срочных мер по его модернизации, введению фейковой системы и не ограничит моду потребление ресурсов неконтролируемо. (ограничение ОЗУ на один ПК и введение низко приоритетных потоков)

     

    П.С. Черепаха - это не грифер с пушкой. Черепаха - это просто грифер, при чем "грязный" грифер :) Она грифит всю карту сервера без разбора и ОЗУ сервера.

     

    Да, все так)) С роботами можно целый танк сделать, только агнельский апгрейд догороват для грифера.

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