Doob
-
Публикации
1 089 -
Зарегистрирован
-
Посещение
-
Победитель дней
141
Сообщения, опубликованные пользователем Doob
-
-
Первый же пример выдал
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, что сжать еще, не знаю))
-
Зачем для разных ферм писать разные программы?
При помощи двух функций, я теперь могу сделать ферму crops и кактусов с минимумом изменений.
Работает на любой длине и ширине поля, на любом роботе с инвентарем, пока робот висит у сундука, можно расширить грядку (не забыв при этом обновить границу из твердых блоков)
Код библиотеки: pastebin get 3fYPKZ8v /lib/farmer.lua
Настройки на строках 8 и 9
Ставим робота так, чтобы он стоял задом к сундуку, закидываем в первый слот сундук, чтобы робот мог найти отправную точку, делаем бордюр вокруг поля из любого твердого блока (уткнувшись в него, робот переходит на следующую линию)
Примеры использования:
Ферма кактусов
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
Ферма на жердочках еще проще:

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
-
-
Всё работает, но вопрос прежний. Как это число, которое получается из os.time('%T') Округлить до целых?
math.floor(os.time('%T')) округление вниз
math.ceil(os.time('%T')) округление вверх
-
>Кстати, твой код всё еще можно уменьшить не изменив функционал.
А вот здесь поподробней пожалуйста.
Например, 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
-
-
Реализовать связь.
И так есть связь, к примеру, прикрутить к чату и можно читать сообщения не смотря на монитор. А набивать текст морзянкой на qwerty клавиатуре, как минимум - глупо.
-
Оригинально... А я все на роботах катаюсь.
-
А обратно?
А смысл?
-
1
-
-
Воспользуйся библиотекой "unicode": unicode.sub(), unicode.upper()/lower(), unicode.len() и т. д.
Спасибо за совет, обновил.
-
Хм... Русские буквы не видит, перед тем как закинул на пастбин, работало

Надо сделать проверку по string.byte
-
Примитивная либа, которая конвертирует текст в код Морзе и пикает при помощи computer.beep()
Пример использования: txt_to_morse('ЛЕНИН МИР СССР', true)
Конвертируется русский и английский текст, цифры и символы [=.,:;'"/_=+-?!@], которые кодируются по английской системе. Второй параметр отвечает за вывод символа с его кодом на экран.
Собственно, код: http://pastebin.com/cYZL6Pz3
-
6
-
-
Нормально же пишет)) Я тоже так писал, когда учился, а когда начал писать что-то более двадцати строк, то понял зачем нужен стиль и комментарии))
А вообще, ни на кого не жалуюсь - скопировал в notepad++, включил подсветку, отформатировал и читаю себе на здоровье.
-
1
-
-
Вот в чем печаль, в общем, если делать прыжок командой "/clone" (MC 1.8), то придется делать промежуточные прыжки между стартом и финишем, чтобы переносить игрока, передвигать корабль на крайний загруженный чанк и опять переносить игрока.
А если делать тупо "world.getBlockId(), world.getMetadata() + /setblock", то ни о каком копировании не может быть и речи, ибо многие параметры блоков слетают.
Можно, конечно копировать креативного робота с чанклоадером на место финиша, но при копировании включенных компьютеров проявляется некая квантовая нестабильность, их глючит неимоверно, чанклоадер может просто и не включится...
-
А вообще, слипы помогают, особенно если перезапустить майн, а лучше в конфиге на все действия сделать задержки подольше.
-
Можно сделать адаптацию под самые минимальные характеристики робота, прикрутить удаленный интерпретатор lua, чтобы расширить функционал.
К примеру, на планшете сделать визуальное программирование маршрута со всякими редстоунами и табличками (поблочно, как в программе для рисования голограмм), потом, можно сделать запись лога действий и воспроизведения их в обратном порядке (чтобы быстро и точно вернуть робота). Вывод пройденного пути в виде мини-карты тоже бы не помешал.
Прикрутить еще GUI, чтобы сделать все на кнопках-триггерах с выбором скорости движения - нажимаешь кнопку "loop" и выбираешь скорость, к примеру, для движения вперед и тогда робот в цикле прет, пока не упрется в блок.
В общем, фонтан идей, я как взялся, но удобного GUI, как в компутеркрафте не нашел (чтобы с кучей перетаскиваемых окон и перенастройкой интерфейса на лету) Жаль, что свободного времени маловато, я текстурпак для OC уже вторую неделю рисую))
-
Создаём файл /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То, что надо! Ща затестим...
-
Что довольно странно, но делал программки на MC 1.8 с последним OC и встретил этот баг, решил проверить на 1.7.10 - аналогично.
К примеру в этом коде:robot.swingDown() robot.down() robot.swingDown() robot.up()
стабильно игнорится вторая строчка, при чем другие движения/взаимодействия работают довольно четко, но в паре с функцией swing происходят ошибки (иногда даже путает слоты инвентаря). Слипы не помогают, что делать?
Переписать robot API? -
Пока придумывал программы для Локи, до меня наконец дошло, что все корабли управляться должны одной машиной.
Сделать ЦУП, который будет связанными платами общаться с кораблями, обрабатывать запросы на прыжки и следить, чтобы координаты финишей были корректны.
Единственное, что мне не до конца ясно, можно ли управлять плагином привата от имени игрока.
-
Круто! Ландшафт бы еще адовый, а то он будто мимо проходил и замер))
И жертвенник по-атмосферней.
-
Все это круто, а как у системы с энерго-лаго эффективностью? Надо же еще кроме охраны дома что-то делать, а то прошел какой-нибудь %playername% мимо твоего дома, система всю энергию выжрала, а ты прилетаешь срочно передробить стак стаков руды и сидишь АФКшишь, пока энергия не восполнится.
-
Готовое брать - не по мне. А если и беру - то через некоторое время выброшу и начну писать свое (С)Проверено временем.
Дефолтный ответ дефолтного программиста))
-
А чего бы не взять готовый IRC, как на computercraft.info?
-
Вся беда в том, что черепахи отсутствуют на серверах или запрещены вообще. И гриферить ними нет никакой возможности по причине их отсутсвия=) Разве что себя в одиночке.
И не надо там пушех. Серверов почти нет, где взрывы разрешены, и просто прогой-карьером дом разриферить в 100 раз быстрее, чем динамитом плеваться.
Я думаю, что через пол-годика или год при темпах развития ОС про КК все забудут постепенно, он будет жить только в мире сингла, как простой и удобный мод для изучения программирования на Луа, если Ден не примет срочных мер по его модернизации, введению фейковой системы и не ограничит моду потребление ресурсов неконтролируемо. (ограничение ОЗУ на один ПК и введение низко приоритетных потоков)
П.С. Черепаха - это не грифер с пушкой. Черепаха - это просто грифер, при чем "грязный" грифер
Она грифит всю карту сервера без разбора и ОЗУ сервера.Да, все так)) С роботами можно целый танк сделать, только агнельский апгрейд догороват для грифера.
-
https://www.youtube.com/watch?v=0H3kYbfTzqQ
Начинающему гриферу теперь необходимы две жемчужины и три алмаза (и х3 TNT, конечно), и всякий мусор для крафта черепахи и кпк.
-
Мод WarpDrive. Корабли из
говгрязи, лазерные лифты, лазерные майнеры, космос.Ну и "туннели из бедрока" - джампгейты в гиперспейс.
Не, это бредовый мод))

Робот-фермер
в Роботы
Опубликовано:
Зато универсально, мне большего и не надо.