eu_tomat
Модераторы-
Публикации
2 666 -
Зарегистрирован
-
Посещение
-
Победитель дней
331
Тип публикации
Блоги
Профили
Форум
Багтрекер
Магазин
Все публикации пользователя eu_tomat
-
Какие требования клана требуют перенастройки? Если шрифт не меняется, то нужны всего 10 картинок для 10 цифр. Далее на скриншоте ищем все цифры с их позициями. Имея значения цифр и их позиции на скриншоте, вычисляем составленные из цифр числа с их позициями на скриншоте. По значению числа определяем нужное действие. И если галочки-крестики всегда находятся на одинаковом смещении от чисел, то и позиции кликов тоже вычисляем, просто добавляя смещение. При изменении требований клана достаточно изменить одно число, задающее порог вхождения. Или о какой рутине идёт речь? Выше уже предлагалось использовать библиотеку OpenCV. Также существуют описания удачных попыток научить ботов видеть "именно числа". Например: Python + OpenCV + Keras: делаем распознавалку текста за полчаса.
-
Почитать можно здесь: Как я писал графического бота и во что это превратилось. PengueeBot
-
На каком экране? На экране компьютера OpenComputers? Или экране реального компьютера? И что делать, если скрипт увидел число в диапазоне [0-50] и одновременно другое число в диапазоне [51-90] или наоборот, не увидел нечего похожего на числа из обозначенных диапазонов?
-
А что такое автоподстановка компонентов? Куда подставляются компоненты и по какому алгоритму?
-
Профилируем программы под OC
eu_tomat прокомментировал Fingercomp запись в блоге в Fingercomp's Playground
Ясно. Похоже, как и с чанком, который мы уже привыкли транслитерировать. Хотя, и то и другое означает кусок, часть, фрагмент.- 3 комментария
-
- opencomputers
- lua
-
(и ещё 3 )
Теги:
-
Профилируем программы под OC
eu_tomat прокомментировал Fingercomp запись в блоге в Fingercomp's Playground
Спасибо за описание именно такой норкомагии. Мне было очень интересно читать. И заняться чем-то подобным в перспективе я тоже планировал. И, хвала небесам, у меня есть нормальная ось. Вот здесь не понял: Что такое ханк? Хак?- 3 комментария
-
- opencomputers
- lua
-
(и ещё 3 )
Теги:
-
Я провёл эксперимент, вводя символы в io.read() с помощью автонажатий. С двумя планками памяти T3.5 пришлось ждать несколько часов, но я таки дождался переполнения памяти. Значит, может дождаться и хакер. Для противодействия хакерам можно вызывать io.read через pcall, но лучше, наверное, написать свою функцию для безопасного ввода текста.
-
Да, переполнение ОЗУ теоретически возможно. При нехватке ОЗУ программа вылетит с ошибкой в консоль. Компьютер не выключится.
-
А какие требуются признаки? Функция io.read() никакого поля ввода не отображает. Просто ждёт ввода.
-
Простое решение для дистрибутивов, основанных на Debain:
-
В Ubuntu, Debaian и других подобных системах для запуска лаунчеров Майнкрафта требуется установить JavaFX: # apt install openjfx Больше ничего не требуется. JRE подтянется через зависимости.
- 2 ответа
-
- 1
-
-
Первые шаги в освоении моддинга Задача: Найти исходник простейшего мода для Minecraft 1.7.10, скомпилировать его, проверить в работе, внести какие-нибудь правки в код и так же проверить в работе. Мой путь к решению: Формулировка задачи полностью скопирована из предыдущей. Но теперь я пойду немного иным путём. Буду искать не шаблон, а готовый мод. Желательно, чтобы его код был простым для изучения. Для поиска буду использовать фразу «1.7.10 simple mod site:github.com». Насколько найденные моды окажутся простыми, я не знаю. Буду читать код и пытаться разобраться. Первой меня заинтересовала ссылка на мод https://github.com/BlayzerQ/MacrosMod. Не знаю, что это такое, вроде бы код для клавиатурных макросов. Инструкции по установке нет, но теперь я использую опыт решения предыдущей задачи. Запускаю уже привычные команды, лишь подставляя в них лишь требуемые сейчас ссылки, имена каталогов и файлов: $ git clone https://github.com/BlayzerQ/MacrosMod.git $ cd MacrosMod $ gradle setupCiWorkspace $ gradle build $ ls ./build/libs MacroMod-1.0.jar $ cp ./build/libs/MacroMod-1.0.jar ~/.minecraft/mods/AAA2.jar Майнкрафт успешно запустился, показал в списке модов MacroMod 1.0, и загрузил сохранение игры. Теперь настало время почитать код этого мода. Насколько я понял, мод позволяет создавать клавиатурные макросы для быстрого набора в чате. Скудненько. Скучненько. Нужно что-то поинтереснее, с какими-нибудь крафтами, например. Пробежав по другим ссылкам, почитав описания и полистав коды, я решил исследовать мод на игровые деньги: https://github.com/Ionaru/Currency. Снова запускаю привычные команды: $ git clone https://github.com/Ionaru/Currency.git $ cd Currency $ gradle setupCiWorkspace $ gradle build $ ls ./build/libs currency-1.7.10 - 1.2.jar $ cp './build/libs/currency-1.7.10 - 1.2.jar' ~/.minecraft/mods/AAA3.jar Майнкрафт видит мод, в креативном режиме появилась вкладка валют. Похоже, это те самые деньги, что были у нас на EvilCraft! Количество строк кода небольшое. Можно использовать как учебное пособие. Настало время попробовать внести в код мода свои правки. Как насчёт смены названий? Например, изменить Penny на Penny1, а DoublePenny на DoublePenny2? Это оказалось легко. Я просто открыл файл Currency.java и заменил в нём соответствующие строки. Правда, потом пришлось соответственно переименовать и файлы с текстурами. Это я выяснил уже после первого пробного запуска откомпилированного мода. Для проверки результа изменений в коде я последовательно выполняю две команды для компиляции и копирования файла мода в папку Майнкрафта: $ gradle build $ cp './build/libs/currency-1.7.10 - 1.2.jar' ~/.minecraft/mods/AAA3.jar Что дальше? Попробовать изменить крафт? Легко! Теперь из монеты в два пенни можно скрафтить три монеты в один пенни. Для этого я просто чуть изменил строку, регистрирующую крафт: GameRegistry.addShapelessRecipe(new ItemStack(Penny, 3), DoublePennyStack); Теперь я попробую усложнить задачу. Добавлю крафт яблока из монеты в один пенни. Но как это сделать? В каком классе искать это яблоко? Поиск по фразе «GameRegistry.addShapelessRecipe apple» приводит меня к простому решению: GameRegistry.addShapelessRecipe(new ItemStack(Items.apple, 2), Penny ); Компилятор ругнулся на неизвестный ему класс Items, и я добавлю его по аналогии с уже использующимся классом Item: import net.minecraft.item.Item; import net.minecraft.init.Items; Это сработало. Но это тоже было слишком просто. Для наработки практики требуется что-то посложнее. Что ещё можно попробовать? А пусть монеты в один пенни будут служить топливом в обычной печке! Фраза «minecraft modding furnace fuel» привела меня к наброскам решения, но я не сразу понял, как их правильно применить. Пришлось вникать в неизвестные мне нюансы Java и Forge. Очень загадочным мне показался символ «@», и поисковики тоже не сразу поняли, какую я от них требую информацию. В конечном итоге я пришёл к фразе «java at sign». Так я узнал про аннтоации в Java. Вот код, позволяющий сжигать монету в печи: public class FuelHandler implements IFuelHandler { @Override public int getBurnTime(ItemStack fuel) { if(fuel.getItem() == Currency.Penny) //return 24*60*60*20; //return 0xFFFF; return 0x7FFF; return 0; } } Эксперименты с новым топливом привели меня к неожиданному открытию. Как видно по коду, сначала я пытался задать время горения монеты равным реальным суткам. Но после первого же выхода из игры и повторного входа я узнал, что остаток времени горения уже подожжённого в печи топлива резко уменьшился. Я предположил, что проблема связана с низкой разрядностью хранимого числа. Указав время горения равным 0xFFFF, и скомпилировав мод, я загрузил печь топливом, сделал сохранение игры, вышел и загрузил сохранение. Время горения в печи стало отрицательным. Теперь я, кажется, понял. Время горения топлива можно задать очень большим, в пределах числового типа int. И топливо, скорее всего, будет гореть всё положенное ему время, если не произойдёт перезагрузка сервера. То ли во время сохранения, то ли при загрузке сохранения остаток времени горения уже подожжённого топлива будет обрезан до типа short с максимальным значением 0x7FFF. Можно ли этим управлять, я пока не знаю. Скорее всего, нет. Полагаю, это очередная особенность Майнкрафта, с которой придётся как-то жить, и учитывать её при создании модов. Результат: Я смог внести изменения в уже готовый мод и успешно использовать их в игре. Я углубил своё знание Java и чуть-чуть познакомился с устройством Forge и Minecraft. Также я узнал о неочевидной механике горения топлива в печах, о которой невозможно узнать просто играя. Теперь я чувствую свою готовность писать простейшие моды или переходить к изучению устройства более сложных. Разумеется, пользуясь помощью Интернета. Во время решения этой задачи я временами ощущал нехватку возможностей простых текстовых редакторов. Похоже, приходит время установить IDE, сконцентрировав все необходимые для разработки инструменты в одном месте.
-
Первые шаги в Gradle Задача: Найти исходник простейшего мода для Minecraft 1.7.10, скомпилировать его, проверить в работе, внести какие-нибудь правки в код и так же проверить в работе. Мой путь к решению: Поисковая фраза «minecraft mod 1.7.10 template» приводит меня к репозиторию https://github.com/RoBrit/Mod-Template Удача! В описании есть подробная инструкция. Автор кривовато сверстал внутренние ссылки в оглавлении документа, но чтению это не помешает. Тексты на английском я читаю поверхностно, не пытаясь понять смысл каждого слова. Просто выхватываю знакомые слова и угадываю общий смысл. Если смысл я не понимаю, то использую гуглоперевод, сравниваю оригинал с переводом, уточняю варианты перевода тех или иных слов, постепенно пополняя словарный запас. Такой способ чтения несовершенен, но для понимания смысла несложных текстов вполне применим. Первые три пункта инструкции, связанные с установкой JDK, я уже выполнил, решая предыдущую задачу. Далее следует установка gradle и проверка его работоспособности: # apt install gradle $ gradle ... Welcome to Gradle 2.10. ... Чтобы мои действия не превратились в полное шаманство, я почитал, что такое Gradle (https://ru.wikipedia.org/wiki/Gradle). Как я понял, это некий аналог классического make, но значительно более функциональный. Похоже, именно Gradle будет управлять сборкой мода. Самой полезной на данный момент мне показалась команда gradle tasks, упростившая моё первое знакомство с Gradle. Далее инструкция предлагает установить Git, скачав его. Я пойду чуть иным путём, установив его из репозитория Linux: # apt install git Git – это система контроля версий. Скоро пригодится нам для клонирования репозитория, но самое интересное начнётся при решении последующих задач. Следуя инструкции, я создаю каталог для своих экспериментов, и, находясь в нём, клонирую репозиторий и сразу перехожу во вновь созданный каталог с локальным репозиторием: $ git clone https://github.com/TheRoBrit/Mod-Template.git $ cd Mod-Template Инструкция предлагает взглянуть на получившуюся структуру каталогов клонированного репозитория, и я воспользовался командой tree. Результат оказался идентичным приведённому в инструкции. А теперь самое интересное. Если я верно понял документацию, следующая команда подготавливает минимальное окружение для сборки мода. Не совсем ясно, что такое «CI Servers». Вероятно, это сервера, выполняющие сборку проектов автоматически. $ gradle setupCiWorkspace ... BUILD SUCCESSFUL А эта команда, похоже и выполняет, собственно, сборку мода. И, если верить документации, то и тестирует. $ gradle build ... BUILD SUCCESSFUL Придерживаясь инструкции, я нахожу собранный файл в каталоге ./build/libs/ $ ls ./build/libs ModTemplate-1.8-1.5.07.29a-deobf.jar ModTemplate-1.8-1.5.07.29a.jar ModTemplate-1.8-1.5.07.29a-source.jar Копирую файл только что собранного мода в папку с модами Майнкрафта: $ cp ./build/libs/ModTemplate-1.8-1.5.07.29a.jar ~/.minecraft/mods/AAA.jar Я специально дал файлу мода такое имя, чтобы потом не ломать голову, что же это за непонятное чудо делает в моей сборке. Такое название не даст ему затеряться среди других файлов. Запускаю Minecraft, нажимаю кнопочку Mods, листаю список модов, но не нахожу ничего похожего на ModTemplate или AAA. Проверяю загрузку старого сохранения – работает. Но следов нового мода я не вижу. Проверяю, оставил ли этот мод какие-либо следы в логах Майнкрафта: $ grep --include=*.log -lire ModTemplate ~/.minecraft ... пусто $ grep --include=*.log -lir AAA ~/.minecraft ... есть какие-то логи Теперь проверяю более подробно в наиболее интересном для меня логе: $ grep -A10 -B10 AAA ~/.minecraft/logs/fml-client-latest.log Так как смысла многих сообщений в логе я не понимаю, сравниваю найденные сообщения с аналогичными сообщениями для других модов. Самом интересным мне показалось такое сообщение: FML has found a non-mod file AAA.jar in your mods directory. It will now be injected into your classpath. This could severe stability issues, it should be removed if possible. Майнкрафт не считает этот файл модом. С другой стороны, в логе присутствует аналогичное сообщение и для CodeChickenLib-1.7.10-1.1.3.138-universal.jar, что не помешало ему оказаться в списке модов. Что могло пойти не так? Скорее всего, этот шаблон мода не содержит даже минимального контента. А значит, этот контент требуется создать. А может быть, причина в чём-то ещё. На всякий случай я подведу промежуточный итог и возьму паузу. Промежуточный результат: Я смог найти шаблон мода и скомпилировать его. Майнкрафт не воспринял его как мод, но я смог получить первый опыт работы с Gradle. Ближайшие направления для работы: Узнать, как добавить в мод одиночный предмет, даже без крафта, без текстуры и особых свойств. Найти готовые исходники простого мода и скомпилировать их. Первое направление даст мне больший опыт, а второе поможет быстрее двигаться между промежуточными целями. Скорее всего, я выберу скорость. А в нюансах разберусь потом.
-
Похоже на отсылку к моему же посту: Да, хорошее напоминание, во что может выродиться эта тема, если я потеряю мотивацию продолжать этот путь. Я не смогу съесть этого мамонта за один раз целиком, поэтому продолжу придерживаться простой тактики: я выбираю микрозадачу, выполняю её и фиксирую результат. Задачу выбираю не слишком крупную, чтобы во-первых, не терять мотивацию во время её решения, а во-вторых, чтобы детали решения успели сохраниться в памяти к моменту отчёта о проделанной работе. Также задача должна быть и не слишком мелкой, чтобы во-первых, я мог прочувствовать удовлетворение достигнутым результатом, а во-вторых, чтобы не плодить крошечные отчёты по малейшему поводу. IntelliJ IDEA я установлю обязательно. Мне эту IDE первым рекомендовал @Fingercomp в приватной беседе. А теперь @NEO и @Totoro. @Totoro вообще отлично всё расписал. Но мне казалось, что сначала следовало убедиться в том, что я в принципе могу компилировать и запускать программы на Java, и лишь затем думать об удобствах. Что мне даст IDE на текущем этапе, я пока не знаю. И мне кажется, что начав с изучения IDE, я рискую не почувствовать никаких преимуществ от проделанной работы и потерять мотивацию. Сейчас я вижу две ближайшие задачи, для решения которых IDE не требуется: Найти готовые исходники какого-то простого мода на Java, без всяких там Scala и Lua, собрать его по инструкции и запустить. Вникнуть в азы Scala и также скомпилировать какой-нибудь хелоуворлд и поиграться в нём с конструкциями языка. Скорее всего, я сначала поищу готовый шаблон для мода, и когда его модификация в обычном текстовом редакторе начнёт меня обременять, приступлю к изучению IDE. Такая последовательность должна помочь мне стабилизировать мотивацию. Или я неправильно понимаю процесс разработки?
-
Задача: Исполнить какой-нибудь простой код, написанный на Java. Мой путь к решению: В первом попавшемся поисковике я набираю фразу «java helloworld» и почти сразу нахожу какой-то код: class HelloWorld { public static void main(String[] args) { System.out.println("Hello World!"); } } Отвечаю себе на вопрос, что делает каждая из строк, не нахожу ничего подозрительного, что могло бы навредить мне при запуске этого скрипта, и копирую этот код в файл HelloWorld.java. В тех же статьях про хелоуворлды обычно говорится, как этот код скомпилировать и запустить. Если в найденной статье об этом не сказано, поможет поисковой запрос «java compilation command». Также ничто не мешает совершать поисковые запросы и на русском или любом другом языке, например «запустить первую программу на java». Как правило, базовые знания доступны на множестве разных языков. При запуске javac я получил ошибку об отсутствии такого приложения, а также информацию о том, в каких пакетах его можно найти. Не мучаясь выбором, произвожу установку пакета по умолчанию: # apt install default-jdk Теперь javac успешно запускается, и я перехожу к компиляции кода: $ javac HelloWorld.java По итогу компиляции в рабочей директории появился файл HelloWorld.class. Теперь я запускаю скомпилированную программу: $ java HelloWorld Hello World! Программа успешно отработала, и теперь я могу себе позволить разные эксперименты с кодом, добавив в него какие-нибудь ветвления, циклы, чисто для практики. Но для решения поставленной задачи это необязательно. Результат: Я смог скомпилировать и запустить на выполнение свой первый код, написанный на Java. Дверь в разработку на Java открыта.
-
Да, удобно. Считать можно и так, если к результатам расчётов добавлять слово "приблизительно". Для отображения поля символов размером 160x50 требуется приблизительно 445 проекторов, а точнее — 459.
-
Эта тема посвящена описанию моего будущего опыта разработки мода OpenComputers. Моя цель: Усовершенствовать механизм управления нагрузкой, создаваемой пользовательскими Lua-скриптами, сделав мод OpenComputers ещё более дружественным к серверу. Программа максимум: протолкнуть своё предложение по изменению репозитория OpenComputers. Что я имею: Неплохо понимаю и нахожу алгоритмы. Пробовал кодить на куче языков, хотя опыт и небольшой. Улавливаю смысл кода на распространённых языках программирования без детального изучения их синтаксиса. В целом я освоил Lua. Пролистал книгу «Java за 21 минуту». Почитал документацию git. Несколько раз читал исходники OpenComputers и даже смог найти ответы на интересующие меня вопросы. Есть желание получить новый опыт. Чего я не имею на данный момент: Я ещё не привык к синтаксису Java. Синтаксис Scala я вообще не изучал, и понимаю не все конструкции кода. Я никогда не использовал корутины в Lua. Я не знаю полностью всего процесса сборки OpenComputers из исходников. Как отлаживать моды – я вообще не знаю. Я ничего не знаю о протоколах общения с разработчиками. Я с трудом (и с гуглопереводчиком) пишу по-английски. В чём смысл этой темы? @NEO в чате предложил мне описать опыт решения одной задачки. Не само решение, а именно опыт решения, развитие мысли. Но задача к тому моменту была уже решена, и описание моего пути к решению потеряло былую живость, и вряд ли теперь будет интересно читателям. Поэтому я предлагаю альтернативу. У меня есть довольно объёмная задача, но значительная часть необходимых для её решения навыков у меня отсутствует. Зато есть желание научиться чему-то новому. Дедлайн назначать я не буду, т. к. слабо представляю, сколько времени у меня займёт та или иная задача, и пока не знаю, как мне удастся совмещать их решение с другими занятиями, не имеющими отношения к данной теме. Алгоритм обсуждения предлагаю такой: Я поднимаю очередную микрозадачу, пытаюсь её решить, выкладываю решение независимо от его качества, выслушиваю мнение экспертов, корректирую решение, и мы переходим на следующую итерацию обсуждения. Если эксперты в целом удовлетворены решением, я перехожу к следующей микрозадаче, постепенно приближаясь к цели. Надеюсь, что эта тема поможет влиться в ряды разработчиков OpenComputers не только мне, но и другим желающим, которые, как и я сейчас, не знают с чего начать.
-
Вернее будет говорить не о количестве проекторов на один символ, а о количестве символов, отображаемых одним проектором. Размер обычного символа на мониторе OC составляет 8x16, а проектор обеспечивает разрешение до 48x48. Получается, что один проектор может вывести поле символов размером 6x3. А для символов двойной ширины (встречаются и такие) поле будет иметь размер 3x3.
-
OpenPeripheral: Integration #4 Генетика Forestry
eu_tomat прокомментировал Xytabich запись в блоге в Путешествия Xytabich'а
Я как-то в одной песне услышал слова "я раскрашивал небо, как мог". Так я тоже заинтересовался и насторожился сначала. Но потом пришлось срочно разынтересовываться и расстораживаться, т.к. бабочки там ничего не крашили, а красили всего лишь.- 10 комментариев
-
- openperipheral
- forestry
-
(и ещё 2 )
Теги:
-
OpenPeripheral: Integration #4 Генетика Forestry
eu_tomat прокомментировал Xytabich запись в блоге в Путешествия Xytabich'а
Я надеялся на доставку товаров бабочками-курьерами.- 10 комментариев
-
- 2
-
-
-
- openperipheral
- forestry
-
(и ещё 2 )
Теги:
-
OpenPeripheral: Integration #4 Генетика Forestry
eu_tomat прокомментировал Xytabich запись в блоге в Путешествия Xytabich'а
Что такое "торговая бабочковая сеть"?- 10 комментариев
-
- 1
-
-
- openperipheral
- forestry
-
(и ещё 2 )
Теги:
-
Итак: теперь мне почти всё понятно в этой теме. Да, способ оказался и в самом деле простым. Не знаю, как на сервере, но в одиночной игре возможен дюп чего угодно независимо от сборки модов. Но правила форума не позволяют обсуждать способы дюпа, да это и не потребуется, т.к. сам способ не относится к обсуждаемой теме. Вот что я обнаружил: дюп возможен благодаря тому, что при некоторых манипуляциях данные об инвентаре игрока сохраняются, а данные о последних изменениях в чанке теряются. Ничего удивительного, если свежеустановленный робот может исчезнуть, а свежеснятый – продублироваться. А теперь самое главное: при откатах чанков мои тестовые компьютеры фиксировали точно такие же артефакты времени, что и при обычной выгрузке-загрузке чанков с помощью управляемого чанклодера. При этом на провокацию откатов чанков мне приходится тратить своё время, а чанклодер переключается в полностью автоматическом режиме. Откат чанка я успешно выполнил три раза из примерно десятка попыток, а чанклодер уже загрузил и выгрузил чанк несколько сотен раз. И за все эти попытки мои скрипты ни разу не зафиксировали каких-либо предпосылок для сбоя программной навигации. Я оставлю скрипты работать на ночь, и если вдруг получу какие-то неожиданные результаты, то обязательно дам вам знать. А пока вывод такой: откаты чанка вряд ли могут помешать программной навигации роботов в одиночной игре. На сервере, скорее всего, тоже, но это надо проверять.
-
До запуска сервера я приостанавливаю эксперименты по поиску артефактов течения времени при выгрузке и загрузке чанков. В сингле у меня никаких сбоев в программной навигации не возникает, не смотря на периодическую выгрузку и загрузку чанков. На сервере в штатном режиме я, скорее всего, также не обнаружу проблем. Для возникновения проблемы нужна нештатная выгрузка чанка, и я пока не знаю, как её воспроизвести. Пока что я наблюдаю лишь незначительные артефакты времени, а точнее – микролаги. Остановлюсь на ранее озвученной мысли: @Alex, планируются ли на TechCraft размещать приваты в шахтёрских мирах? Я не настаиваю на этом и даже не прошу, а просто уточняю, чтобы знать, к чему готовиться. С приватами можно будет использовать более дорогие компоненты и упростить кодинг. Но и отсутствие приватов тоже не создаст особых трудностей.
-
OpenPeripheral: Integration #1 Ванилла (и Чокола)
eu_tomat прокомментировал Xytabich запись в блоге в Путешествия Xytabich'а
Да, точно же! Я почему-то думал, что нет у него исходников. Просто я иногда пытался что-то из модов декомпилировать, и не всегда получалось.- 11 комментариев
-
- openperipheral
- api
-
(и ещё 1 )
Теги:
