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

Totoro

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

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

  • Посещение

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

    289

Все публикации пользователя Totoro

  1. Там ничего нет пока по сути. Только скопипащенные кнопочки и псевдографика. Группы кнопок - это я для удобства сделал. Чтобы можно было легко управлять кнопками в сложном, многоэкранном интернфейсе. Кнопки группируются в таблички, а затем уже функции отрисовки экранов рисуют и проверяют на клики только свои группы кнопок. Кроме того можно произвести "тематическую" разбивку. Например функция создания диалогового окна будет создавать свою группу кнопок - "ОК", "Применить" и "Отмена" и отрабатывать только ее, не затрагивая остальной интерфейс, когда диалог открыт. В будущем вероятно заменю группы на "родительский элемент".
  2. Нет, сеть городить не надо. Сервера в одной стойке умеют общаться друг с другом. Для этого достаточно проводной сетевой карты. В интерфейсе серверной стойки есть переключатель External/Internal который определяет поведение серверов при получении и передаче сетевых пакетов. Для примера, пусть у нас есть четыре сервера в стойке - A, B, C и D. Сервера A, B и C привязаны к левой, правой и нижней сторонам. Сервер D не привязан к стороне стойки. В режиме External, сообщение пришедшее извне на левую сторону стойки получит сервер A. Сообщение будет передано им на другие стороны стойки. И уйдет по проводам, подключенным к этим сторонам. Таким образом сервера B и C тоже получат его. Сервер D не получит сообщения. Если сервер А пошлет сообщение от себя, все будет работать по той же логике. Если сообщение пошлет сервер D - его не получит никто (потому что он не связан с конкретной стороной стойки). В режиме Internal, сообщение пришедшее на левую сторону стойки также получит сервер А. Сообщение будет передано всем серверам в стойке, т.е. B, C и D, но не будет передано на стороны стойки и провода, подключенные к этим сторонам. Если сервер А отправит сообщение, оно будет передано на все другие сервера в стойке а также на левую сторону (и подключенный к ней провод). Но не будет передано другим сторонам блока. Если сервер D отправит сообщение - оно будет передано только другим серверам в стойке (A, B и C). Таким образом при помощи серверной стойки и нескольких серверов в ней, можно фильтровать сетевые сообщения как угодно.
  3. Собственно компонент - это некое устройство, подключаемое через Component API. =) Вот списочек: http://ocdoc.cil.li/component Это и внешние девайсы, и платы, и апгрейды и прочее. Любой девайс, обладающий набором своих функций - это компонент (даже файловые системы). Мы подключаем компонент: local com = require('component') local device = com.device И в переменной device у нас оказывается так называемый "прокси" объекта. Это табличка с переменными и методами девайса. Как библиотека, по сути. Команда com.device возвращает ГЛАВНЫЙ компонент. Обычно - это первый в списке одинаковых. Если же у нас их много, одинаковых, (пять связных плат, например), то мы можем получить их все используя метод com.list('type'): (Подробнее о методах Component API: http://ocdoc.cil.li/api:component) for address, componentType in component.list('device') do ... end А в случае например получения сообщения от связной платы, и необходимости отпределить от какой именно, можно использовать адрес отправителя, который обязательно присутствует в пойманном эвенте: modem_message (receiverAddress: string, senderAddress: string, port: number, distance: number, ...) (Подробнее об эвентах компонентов: http://ocdoc.cil.li/component:signals)
  4. В тоже время это все еще сервер Minecraft. А Minecraft - это копание ресурсов и крафт, как ни крути. =) Если убрать добычу ресурсов, станут бессмысленными целый раздел программ майнеров/карьеров. Именно поэтому есть (ДОЛЖЕН быть) кит для программистов. Кому интересно программировать и он то подтвердил какими-то разработками на форуме - выдается железо, остальные комают и крафтят. Всем интересно. Дешевые компьютеры это тоже зло. Потому что некоторые "недо-джедаи" начинают их использовать для создания всяких идиотских лагозаводов. И вред от этого всем - и программистам и игрокам.
  5. Шины расширяот количество компонентов, подерживаемое сервером. К сожалению, количество слотов в интерфейсе при этом не растет =) Сервер может сколько угодно (в рамках лимита на компоненты) связных плат поддерживать. Но физически их поместится не очень много. Придется поставить еще один сервер/компьютер.
  6. Totoro

    3D-Принтер

    Поправочка: используя лутовскую дискету с программкой oppm можно выкачать программу print3d из интернета. И скачается она как раз из репозитория OpenProgramms на GitHub. =)
  7. Этот скрин выше напоминает мне почему-то построение на плацу. Черепаха-сержант строит свой взвод черепашек-рядовых, а один черепахен на флаг побежал
  8. Ну прав же! Железная логика. Разнообразие появляется как результат программирования, а программирование - скука и однообразие.
  9. Можно повесить сирену на стену, и встать рядом с планшетом из ОС. Если в нем есть редстоун плата он сможет дать на сирену сигнал. Правда у планшета могут разрядиться аккумуляторы. =)
  10. Неплохо. Кстати, OpenComputers полностью поддерживает Юникод, поэтому очень советую писать комментарии не транслитом а на русском.
  11. Тут такое дело, понимаешь ли, что поддержки графических форматов "из коробки" нигде нет. Надо парсить бинарный формат PNG (или JPEG), разбирать его по полочкам, где палитры, где параметры, где пиксели и т.п. А учитывая что несмотря на простоту формата там дофига ньюансов (типа черезстрочной развертки или сжатия данных алгоритмом deflate), дело это специфическое, и муторное. И включать это в мод никто не собирается. Однако, в мире есть добрые люди, которые все уже написали за нас. И распаковщик сжатых данных, и генератор хешей, и парсер графического формата (PNG). По той ссылке, что кинул тебе Фингер, как раз содержится полный пакет программ, специально для ОС, который позволит без особых проблем (почти =)) отобразить тебе на экране картинку. Пруф:
  12. Если я правильно понял, это и есть глобальная сеть, которую делает NEO. Узлы - "роутеры" которые обмениваются информацией между собой и составляют основу сети, и компьютеры - "клиенты" которые общаются друг с другом через цепочку промежуточных роутеров.
  13. Это лирическо-философская картина под названием "Банк. Бесконечность" Чанк с дальней стеной не прогрузился =)
  14. Механика работы кабинки такова: Клиент пришел. - Нажал "Логин". - Двери кабинки закрылись. - Игрок что-то делает. - Игрок нажал "Выход". - Двери кабинки открылись. - Клиент ушел. Если игрок не нажмет "Выход" - двери не откроются и он не уйдет. Но допустим, что он телепортнулся домой, или покинул игру. Тогда кабинка останется стоять ЗАКРЫТОЙ. Никто туда понабежать не сможет. Через 3 минуты, сработает таймер бездействия, разлогинит текущую сессию и после этого откроет кабину для следующих посетителей.
  15. Если клиент бездействует более N минут (3 по умолчанию), то терминал выкидывает его в логин. Насчет зачарки пустых слотов - да, наверное предупреждение стоит повесить.
  16. Totoro

    3D-Принтер

    Не слушай ее, она врет. =) Длина стороны куба - 16. Координаты параллелепипедов устанавливаются не по центру "вокселей", а в "узлах сетки". То есть 0, 1, 2, 3, 4, ... , 14, 15, 16. Где 0 - это самая левая грань куба, а 16 - сама правая.
  17. Totoro

    3D-Принтер

    Трехмерная печать в Minecraft (инструкции для самых маленьких) Начиная с версии 1.5.4, в OpenComputers появляется интересный девайс - трехмерный принтер. Он дает возможность печатать декоративные блоки любой формы и цвета. Причем не только статичные блоки, но и двери/люки, кнопки и рычаги! Давайте рассмотрим, для чего он может пригодиться, и как именно с ним работать. 1. Цель Как и в предыдущих гайдах, первым делом поставим себе цель. Мы будем создавать стенную плитку со сквозным орнаментом, в виде морды крипера. Я не буду приводить в этом гайде рецепты предметов, так как их легко найти в NEI, или в статьях на gamepedia. 2. Обзор принтера 3D-принтер - это периферическое устройство, которое должно быть подключено к работающему компьютеру. Оно представляет собой блок, с двумя внутренними слотами: Верхний слот предназначен для специальной печатной массы (изготовляется из редстоуна, гравия, древесного угля и воды). Принтер вмещает два стека печатной массы (256 000 ед). Нижний слот занимает картридж с красителями. Объем внутреннего хранилища - два картриджа краски (100 000 ед). По команде от компьютера, принтер берет немного печатной массы и краски и "распечатывает" в крайний правый слот запрограммированную модель. На модель из этого гайда, состоящую из 21 фигуры, принтер потратил 424 единицы массы и 314 единиц краски. 3. Отпечатанный блок Модель для печати задается в виде списка "фигур" - параллелепипедов. Каждая фигура отмечена координатами противоположных углов. Она имеет свою текстуру, цвет оттенка (если необходимо) а также состояние (true/false). Максимальное количество фигур в модели - 24, по умолчанию. Координаты блока тремя числами (X, Y, Z) в пределах от 0 до 16. Блок может переключать свое состояние, когда игрок кликает по нему правой кнопкой мыши, или на блок подается сигнал редстоуна. По умолчанию блок имеет форму, заданную блоками с состоянием false, и сменяет ее на форму из блоков с состоянием true, при активации. Кроме того блок имеет несколько дополнительных общих флагов, которые определяют его название, описание и некоторые другие параметры. 4. Программирование принтера Есть два способа распечатать свою модель. Через компонент принтера и прямое управление, либо при помощи стардартной программки print3d от Сангара. 4.1 Компонент принтера Подключение принтера ничем не отличается от подключения любого другого устройства: local com = require('component')local printer = com.printer3d Компонент предоставляет набор функций для управления: reset() - сброс настроек и остановка печати setLabel(value:string) - задаем название будущего блока getLabel():string - получаем текущее название setTooltip(value:string) - задаем описание блока getTooltip():string - получаем описание setRedstoneEmitter(value:boolean) - определяет, излучает ли блок сигнал редстоуна в активированном состоянии isRedstoneEmitter():boolean - возвращает true, если блок излучает сигнал в активном состоянии setButtonMode(value:boolean) - определяем поведение блока при активации. Если true, то блок автоматически возвращается в неактивное состояние через несколько секунд после активации (как кнопка) isButtonMode():boolean - возвращает true, если блок находится в режиме "кнопки" addShape(minX:number, minY:number, minZ:number, maxX:number, maxY:number, maxZ:number, texture:string[, state:boolean=false][,tint:number]) - добавляет новую "фигуру" к форме блока. Фигура задана координатами. texture - название текстуры, state - для какого состояния фигура предназначена, tint - цвет оттенка фигуры getShapeCount():number - возвращает количество фигур в модели getMaxShapeCount():number - возвращает максимально возможное количество фигур commit([count:number]) - посылает принтеру текущую конфигурацию и начинает печать (count - количество копий, если не задано - равно 1) status(): string, number or boolean - возвращает состояние принтера - "buzy" и процент готовности, или "idle" и готовность предмета (true/false). 4.2 Программа print3d Код программы не включен в мод по умолчанию, поэтому его надо скачать из интернета. Последнюю версию можно найти на ГитХабе автора: https://github.com/OpenPrograms/Sangar-Programs/blob/master/print3d.lua Либо скачать с Pastebin: http://pastebin.com/b5rD8KcY (поставьте интернет-плату, и наберите в консоли компьютера команду pastebin get b5rD8KcY print3d) Эта программа по сути, читает параметры модели из текстового файла и передает принтеру. Формат вызова программы: print3d FILE [count] Где FILE - название файла с моделью, а необязательный параметр count - количество копий модели. Модели имеют простой формат - все параметры записываются в таблицу, по аналогии с Луа. Вот образец файла с моделью. { -- Это - название модели. Т.е. название будущего блока, которое будет видно -- в инвентаре и подсказке Waila. Название по умолчанию - "3D Print" label = "Example Model", -- Это описание предмета, такое, как будет видно в инвентаре. Если не задано, -- предмет не будет иметь описания tooltip = "Это демонстрационная модель, показывающая все возможности", emitRedstone = false, --[[ Если этот параметр равен false, блок работает как дверь, сменяя свое состояние при сигнале редстоуна. Если параметр равен true, блок работает как кнопка или рычаг - излучая сигнал при смене состояния. При этом блок не реагирует на сторонний сигнал. По умолчанию параметр равен false. ]] buttonMode = false, --[[ Если этот параметр равен false, модель работает как дверь или рычаг - то есть остается в том состоянии, в которое установлен игроком. Если параметр равен true, модель автоматически возвращается в неактивное состояние через несколько секунд после активации. По умолчанию параметр равен false. ]] -- Это список фигур модели, которые определяют, как она выглядит. -- Модель должна содержать как минимум одну фигуру (параллелепипед) -- в неактивном состоянии. -- Фигуры не могут быть "плоскими" т.е. не иметь объема. -- Каждая фигура задана шестью числами: minX, minY, minZ, maxX, maxY, maxZ. -- (Координаты двух противоположных углов.) -- Если смотреть спереди, ось X направлена вправо, ось Y - вверх и ось Z - вглубь. -- Дополнительно, каждая фигура длолжна обладать текстурой. Для того чтобы -- определить название текстуры, вы можете воспользоваться Определителем Текстуры -- (Texture Picker), кликнув им по нужному блоку. -- -- Модель имеет два состояния - неактивное (false, состояние по-умолчанию) -- и активное (true, состояние после активации блока). shapes = { -- Фигура идет от точки <0, 0, 0> (левый нижний угол) до <8, 8, 8> (середина), -- и имеет текстуру блока лазурита. { 0, 0, 0, 8, 8, 8, texture = "lapis_block" }, -- Фигура идет из точки <8, 8, 8> (середина) в <16, 16, 16> (правый верхний угол), -- и закрашена текстурой дубовой листвы. Фигура принадлежит активному состоянию -- модели и имеет светло-зеленый оттенок. { 8, 8, 8, 16, 16, 16, texture = "leaves_oak", state = true, tint = 0x48B518 } }} Т.е. описание модели просто содержит перечень всех тех параметров, которые задаются при помощи компонента, и список фигур из которых модель состоит. Набор тестовых моделей для изучения, можно найти здесь: https://github.com/OpenPrograms/Sangar-Programs/tree/master/models 5. Проектирование модели Разобьем мысленно рисунок запланированной модели на параллелепипеды. Она будет представлять собой тонкую плитку посередине блока, наподобие стекла или решетки. Руководствуясь сеткой координат и образцом выше, составим описание модели для текстового файла: { label = "Плитка 'Морда крипера'", emitRedstone = true, buttonMode = false, tooltip = "Секретный рычаг в виде головы крипера" shapes={ {0,14,7, 16,16,9, texture="quartz_block_side", tint=0x8eb200}, {0,2,7, 2,14,9, texture="quartz_block_side", tint=0x8eb200}, {6,10,7, 10,14,9, texture="quartz_block_side", tint=0x8eb200}, {14,2,7, 16,14,9, texture="quartz_block_side", tint=0x8eb200}, {2,2,7, 4,10,9, texture="quartz_block_side", tint=0x8eb200}, {4,8,7, 6,10,9, texture="quartz_block_side", tint=0x8eb200}, {10,8,7, 12,10,9, texture="quartz_block_side", tint=0x8eb200}, {12,2,7, 14,10,9, texture="quartz_block_side", tint=0x8eb200}, {6,2,7, 10,4,9, texture="quartz_block_side", tint=0x8eb200}, {0,0,7, 16,2,9, texture="quartz_block_side", tint=0x8eb200}, {0,14,7, 16,16,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {0,2,7, 2,14,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {6,10,7, 10,14,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {14,2,7, 16,14,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {2,2,7, 4,10,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {4,8,7, 6,10,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {10,8,7, 12,10,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {12,2,7, 14,10,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {6,2,7, 10,4,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {0,0,7, 16,2,9, texture="quartz_block_side", tint=0x8eb200, state=true}, {2,2,8, 14,14,9, texture="quartz_block_side", tint=0xe0301e, state=true}}} Итак, наша плитка имеет двойной набор фигур - для двух состояний, окрашенных в текстуру кварца с зеленым оттенком. Кнопка будет работать как рычаг, испуская сигнал в активном состоянии. Откройте файл командой open creeper. Скопируйте код плитки выше и вставьте в файл кнопкой [insert]. Затем сохраните ([Ctrl]+) и покиньте редактор ([Ctrl]+[W]). 6. Печать Все готово, принтер заправлен, модель спроектирована. Отправляем ее на печать! print3d creeper 7. Итоги Enjoy!
  18. Советую запилить под это дело отдельную тему, а в ней создать открытое голосование. Чтобы не флудить и не смешивать разработку с уже готовым проектом в этой теме.
  19. Через пару дней может =)
  20. Сангар продолжает радовать.
  21. Рад, что ты оценил. Наркоманский слайдбар пришлось приберечь для другого случая. Но я его обязательно куда-нибудь приделаю.
  22. Можно и писать, в принципе. Парсер поймет. Просто это лишнее.
×
×
  • Создать...