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

Лидеры


Популярный контент

Показан контент с высокой репутацией 09.05.2020 во всех областях

  1. 3 балла
    Расширение для работы с minecraft. Если вы ещё не прочитали вступительную статью - рекомендуется сделать это сейчас, так как описания данных предметов/жидкостей/сущностей здесь нет. Содержание: Адаптеры блоков Инвентарь - предоставляет возможность управлять внутренними ячейками любого инвентаря. Идентификатор: inventory getInventoryName():string - название инвентаря getInventorySize():string - количество ячеек в инвентаре getStackInSlot(slotNumber:number[, proxy:bool]):object - получить предмет в ячейке, если proxy не задан или false - возвращает всю информацию о предмете destroyStack(slotNumber:number) - уничтожить стек в ячейке expandStack(stack:table):object - узнать всю информацию о предмете (о любом предмете, даже если такого нет в инвентаре), необходимо передать id и мету swapStacks(fromSlot:number, intoSlot:number[, fromDirection:string[, toDirection:string]]) - поменять местами предметы в слотах -- fromDirection и toDirection используются для инвентарей, с которыми можно взаимодействовать через стороны, например - печь. -- Если передать в эти параметры сторону, то можно расширить поведение подобных инвентарей. -- Например печь swapStacks(1,2) без использования сторон, можно менять верхний и нижние слоты, если в них находится что-то горючее. -- Если передать вторым параметром "DOWN" swapStacks(1,2,nil,"DOWN") - то вынуть топливо уже не возможно. -- Но если в этом слоте есть пустое ведро (от лавы), то поменять слоты становится возможным. condenseItems() - собрать в кучу разбросанные в инвентаре предметы -- использовать с ОСТОРОЖНОСТЬЮ - если первые ячейки инвентаря не смогут принять предмет - он уничтожится Инвентарь в мире - предоставляет возможность взаимодействовать с соседними блоками-инвентарями. Идентификатор: inventory-world pullItem|pullItemIntoSlot(direction:string, slot:number[, maxAmount[, intoSlot]]):number - забрать предмет из соседнего инвентаря. Возвращает количество перемещенных предметов. pushItem|pushItemIntoSlot(direction:string, slot:number[, maxAmount[, intoSlot]]):number - поместить предмет в соседний инвентарь. Возвращает количество перемещенных предметов. Жидкостный бак - можно получить информацию о жидкости в баке. Идентификатор: fluid_tank getInfo():table - информация о хранилище жидкости Жидкостный контроллер - можно получить информацию о жидкостных хранилищах в блоке. Идентификатор: fluid_handler getTankInfo([direction]):table[] - информация о всех хранилищах жидкостей, можно передать конкретную сторону для получения бака Датчик дневного света - позволяет узнать информацию о небе и солнце. Идентификатор: vanilla_daylight_sensor hasSky():bool - имеется ли небо в этом биоме (его нет в энде, например) getSkyLight():number - освещенность неба, 0-15 (работает только в биомах с небом) getBlockLight():number - получить освещенность датчика, 0-15 getCelestialAngle():number - получить угол солнца, 0 это зенит, 0.0-360.0 Табличка - предоставляет управление табличкой. Идентификатор: vanilla_sign getText():string - получить текст таблички setText(text:string) - установить текст getLines():string[] - получить линии таблички setLines(lines:string[]) - установить линии таблички getLine(line:number):string - получить линию таблички setLine(line:number, text:string) - установить линию таблички Нотный блок - предоставляет управление нотным блоком. Идентификатор: vanilla_note getNote():number - получить текущую ноту setPitch(note):bool - установить ноту, 0-25 triggerNote() - проиграть текущую ноту incrementPitch() - увеличить текущую ноту на единицу playSound(sound:string, pitch:number, volume:number[, x:number, y:number, z:number]) - проигрывает ЛЮБОЙ звук из игры -- pitch и volume 0.0-1.0 -- x,y,z - относительно нотного блока -- список основных звуков можно узнать тут - https://minecraft-ru.gamepedia.com/Sounds.json Маяк - можно получить информацию о маяке и эффектах, но выставить необходимый эффект невозможно. Идентификатор: vanilla_beacon getPrimaryEffect():string - имя основного эффекта getSecondaryEffect():string - имя дополнительного эффекта int getLevels():number - количество уровней маяка Варочная стойка - можно получить информацию о времени варки. Для автоматической варки можно воспользоваться методами инвентаря. Идентификатор: vanilla_brewing getBrewTime():number - оставшееся время варки в тиках Компаратор - можно узнать уровень исходящего сигнала... и всё. Идентификатор: vanilla_comparator getOutputSignal():number - сила сигнала, 0-15 Цветочный горшок - можно узнать что в нём. Идентификатор: flower_pot getContents():table - получить информацию о предмете в горшке Печь - информация о состоянии печи. Идентификатор: vanilla_furnace getBurnTime():number - оставшееся время горения, в тиках getCookTime():number - сколько тиков прошло с момента начала обжарки предмета, в тиках getCurrentItemBurnTime():number - полное время обжарки предмета, в тиках isBurning():bool - активна ли печь Спавнер мобов - информация о мобе. Идентификатор: vanilla_spawner getSpawningMobName():string - имя моба Проигрыватель пластинок - можно узнать текущую пластинку. Идентификатор: vanilla_player getRecord():string - получить текущую пластинку Череп/голова - получить информацию о черепе или голове. Идентификатор: skull getType():string - тип головы/черепа getPlayer():string, string - информация о игроке: уникальный идентификатор и имя Провайдеры предметов Ore Dictionary Ключ: ore_dict Значение: table {имя_ore_dict=true} Хэш-сумма всех nbt-данных предмета Ключ: nbt_hash Значение: string Контейнер жидкости - информация о хранилище жидкости Ключ: fluid_container Значение: table Зачарованная книга - список зачарований на книге Ключ: enchanted_book Значение: table - name:string - имя зачарования - level:number - уровень зачарования - fullName:string - название зачарования, зависит от языка сервера Зачарованный предмет - список зачарований на предмете Ключ: ench Значение: table - name:string - имя зачарования - level:number - уровень зачарования - fullName:string - название зачарования, зависит от языка сервера Класс инструмента Ключ: tool_class Значение: table {тип_инструмента=уровень_добычи:number} Зелье Ключ: potion Значение: table - splash:bool - взрывное ли зелье - effects:table - список эффектов зелья - duration:number - длительность эффекта - amplifier:number - сила эффекта - effect - информация о эффекте, структура: - name:string - имя эффекта - instant:bool - моментальный ли эффект от зелья - color:number - цвет частиц зелья, 0xRRGGBB Броня Ключ: armor Значение: table - material:string - материал брони - type:string - тип части брони - color:number? - цвет окрашенной брони, 0xRRGGBB Меч Ключ: sword Значение: table - material:string - материал меча Инструмент Ключ: tool Значение: table - material:string - материал инструмента Время горения предмета в тиках Ключ: burn_time Значение: number Провайдеры сущностей Список предметов в инвентаре сущности Ключ: inventory|inventory-provider Значение: table[] - список proxy Информация о живом существе - огромное количество данных, может съесть память Ключ: living Значение: table - health:number - текущее здоровье - maxHealth:number - максимальное здоровье - yaw:number - поворот тела, вертикальная ось, -360 - 360 - yawHead:number - поворот головы, вертикальная ось, -360 - 360 - pitch:number - поворот головы, поперечная ось, -360 - 360 - heldItem:table - предмет в руке - armor:table - броня сущности - boots:table - предмет ботинок - leggings:table - предмет поножей - chestplate:table - предмет нагрудника - helmet:table - предмет шлема - potionEffects:string[] - список имён действующих эффектов - potion_effects:table[] - подробный список действующих эффектов - duration:number - длительность эффекта, в секундах - amplifier:number - сила эффекта - is_ambient:bool - эффект области, например в зоне действия маяка - effect:table - информация о эффекте - name:string - имя эффекта - instant:bool - моментальный ли эффект от зелья - color:number - цвет частиц зелья, 0xRRGGBB - lookingAt:table - на что смотрит существо - type:string - block или entity - id:number? - индекс сущности, для типа entity - position:number? - абсолютная или относительная(не относительно существа, а относительно сканера, например) позиция блока, для типа block - isAirborne:bool - существо находится в воздухе, т.е. летает или падает - isBurning:bool - существо горит - isAlive:bool - существо живо - isDead:bool - существо мертво, если было сохранено proxy существа - то при смерти значение выставится в true - isInWater:bool - существо в воде - isOnLadder:bool - существо на лестнице - isSleeping:bool - игрок спит - isRiding:bool - существо оседлало другую сущность - isSneaking:bool - существо приседает - isSprinting:bool - существо бежит - isWet:bool - существо мокрое, например после нахождения в воде - isChild:bool - существо-ребёнок Полоска здоровья босса Ключ: boss Значение: table - name:string - имя босса - health:number - текущее здоровье босса - maxHealth:number - максимальное здоровье босса Рамка для предметов Ключ: item_frame Значение: table - item:table - информация о предмете - rotation:number - поворота предмета, 0-3 Картина Ключ: painting Значение: table - title:string - название картины - width:number - ширина картины в блоках - height:number - высота картины в блоках Предмет на земле Ключ: item Значение: table - stack:table - информация о предмете - age:number - какое время предмет находится на земле, в тиках - lifespan:number - общее время "жизни" предмета, в тиках Приручаемое существо, например оцелот Ключ: tameable Значение: table - isTamed:bool - приручено ли существо - isSitting:bool? - сидит ли существо - ownerUUID:string? - uuid игрока, приручившего существо Индивидуальные провайдеры существ Игрок Ключ: player Значение: table - inventory:table[] - список proxy предметов инвентаре - isAirBorne:bool - находится ли в воздухе - isBlocking:bool - блок мечом - profile:table - профиль игрока - foodLevel:number - уровень сытости - isCreativeMode:bool - находится ли в креативе - experience:table - информация о опыте - level:number - уровень игрока - levelProgress:number - прогресс уровня, 0.0-1.0 - nextLevelXp:number - общее количество опыта до следующего уровня Летучая мышь Ключ: bat Значение: table - isHanging:bool - висит ли мышь Крипер Ключ: creeper Значение: table - isCharged:bool - заряженный ли крипер Лошадь, осёл или мул Ключ: horse Значение: table - eatingHaystack:bool - лошать ест сено - hasReproduced:bool - имеет ли потомство, не используется, всегда false - bred:bool - возможно ли размножение - horseType:number - тип лошади, 0-4 - horseVariant:number - раскраска лошади: текстура - первые 8 бит, пятна - следующие 8 бит - horseTemper:number - характер лошади, 0-100, чем больше значение - тем быстрее приручается - horseTame:bool - приручена ли лошадь - ownerUUID:string - uuid владельца лошади - chestedHorse:bool - если сундук на осле/муле - chest:table[]? - список proxy предметов в сундуке Свинья Ключ: pig Значение: table - isSaddled:bool - есть ли седло на свинье Овца Ключ: sheep Значение: table - sheepColor:number - цвет овцы, индекс 0-15 - isSheared:bool - пострижена ли овца Житель Ключ: villager Значение: table - profession:number - профессия жителя, 0-4 - isMating:bool - житель размножается - isPlaying:bool - ребёнок жителя играет - isTrading:bool - сейчас торгует с игроком - customer:table? - профиль игрока-покупателя Ведьма Ключ: witch Значение: table - isAggressive:bool - агрессивна ли ведьма Волк Ключ: wolf Значение: table - isShaking:bool - волк отряхивается - isAngry:bool - волк злой - collarColor:bool - цвет ошейника, индекс 0-15 Зомби Ключ: zombie Значение: table - isVillagerZombie:bool - является ли зомби-жителем - convertingToVillager:bool - сейчас превращается в жителя На этом функционал ванилы окончен.
  2. 2 балла
    На повестке дня аддон для OpenComputers и ComputerCraft всех времён и народов, реализующий большое количество функционала для работы с миром Minecraft'а и его модификациями. Но поговорим только о версии для OpenComputers (она несколько обрезана, по сравнению с СС). Жизнь без этого мода оказалась тем ещё кошмаром, особенно при попытке играть на серверах более поздних версий майнкрафта. Но что это был за кошмар, удалось узнать только недавно - OpenPeripheral не только добавлял удобные способы взаимодействия со всем миром, но и дополнял функционал OpenComputers'а при работе со многими модификациями. Итак, аддон состоит из 3х модулей, которые будут описываться отдельно: - Core - собственно, ядро аддона, реализует некоторые базовые функции - Integration - расширенное взаимодействие с майнкрафтом и модами - Addons - дополнительная периферия для пк Информация актуальная для версии Minecraft 1.7.10. В этой части разговор пойдет о ядре аддона, так как его функционал является основополагающим для остальных модулей. Итак, в моде реализована система адаптеров - интерфейсов lua-minecraft (он-же драйвер), предоставляющих функционал для взаимодействия с объектами. У каждого адаптера есть свой идентификатор, и этот идентификатор используется для определения "владельца" функционала. В ядре, есть только адаптер для отображения документации объекта. В будущих же статьях будут описаны адаптеры в модуле, и предоставляемый ими функционал. Документация функций Ядро реализует неплохую систему документации всех своих функций, которую можно просмотреть через lua: listMethods([filterSource]):string - возвращает строчку со всеми методами методов. filterSource - идентификатор адаптера Пример: listMethods():"doc(method), getAdvancedMethodsData(method?), listMethods(filterSource?), listSources()" listSources():table - возвращает таблицу {name=true} со всеми адаптерами. Пример: listSources():{["<meta>"]=true, skull=true} - список адаптеров черепа, <meta> - адаптер ядра, skull - адаптер черепов/голов doc(method):string - возвращает текстовое описание метода. Пример: doc("doc"):"function(method:string):string -- Brief description of method" getAdvancedMethodsData([method]):table - возвращает полную информацию о методе, или всех методах. возвращаемая структура: - description:string - текстовое описание - source:string - идентификатор адаптера - returnTypes:string - строчка с возвращаемым типом(типами) данных - args:table - аргументы функции: - name:string - type:string - тип аргумента, но есть баг - отображается java-тип - description:string - nullable:bool? - принимает ли значение nil - optional:bool? - является ли необязательным аргументом - vararg:bool? - переменное кол-во аргументов (или ...) Предметы и сущности Одной из интересных особенностей OpenPeripheral является система доступа к метаданным предметов или сущностей, а именно - прокси (proxy, он же - паттерн "заместитель"). Прокси является неким контейнером, содержащем прямую ссылку на java-объект, что позволяет получать актуальную информацию о предмете или сущности, до тех пор пока прокси или объект не выгрузится из памяти. Многие методы OpenPeripheral, возвращающие данные о предметах или сущностях, могут вернуть прокси. Это позволяет экономить память в условиях огромного объема обрабатываемой информации, например - получение всех предметов ME сети, или наоборот - при малом объеме памяти на пк. Но есть и серьезный минус при работе с прокси - любая попытка доступа к данным будет занимать один игровой тик. Прокси предметов или сущностей возвращают некоторую базовую информацию, например идентификатор, позиция и т.п. Но для более подробной информации используются провайдер - интерфейс, предоставляющий специфичные данные, записанные, например, в NBT. У объекта может быть несколько провайдеров, по этому у провайдера есть идентификатор, или ключ, под которым записаны данные конкретного провайдера в объекте. Прокси реализует доступ как к отдельным провайдерам, так и сразу ко всей информации. Для предметов и сущностей структура прокси одинакова: basic():table - базовая информация об объекте, содержит фиксированные поля. Данные зависят от реализации. all():table - содержит информацию из basic(), а также предоставляемую провайдерами информацию. keys():table - возвращает таблицу {name=true} со всеми провайдерами. single(key):object - возвращает информацию, предоставляемую провайдером. select(keys...):object - возвращает информацию, предоставляемую всеми переданными провайдерами. Примечание: прокси выгруженных объектов, при обращении к функциям, будут возвращать nil. Провайдеры добавляются отдельными модулями OpenPeripheral, а в ядре содержится только базовая информация, возвращаемая функцией base(). Базовая информация предмета: id:string - полный идентификатор предмета mod:name name:string - идентификатор предмета в модификации mod_id:string - идентификатор модификации display_name:string - отображаемое имя, зависит от языка сервера, и назначенного на наковальне имени raw_name:string - имя предмета для локализации, в нижнем регистре qty:number - кол-во предметов в стаке dmg:number - мета, или прочность предмета health_bar:number? - отображаемое в полоске прочности значение, 0.0-1.0 max_dmg:number - максимальная прочность предмета max_size:number - максимальный размер стака Базовая информация сущности: position:table {x,y,z} - относительная или абсолютная позиция сущности name:string - имя сущности id:number - номер сущности (по порядку появления в мире) uuid:string - уникальный идентификатор сущности (идентификатор в базе данных) riddenBy:number? - номер сущности, оседлавшей это существо ridingEntity:number? - номер сущности, которую оседлало это существо Жидкости Информация о жидкости: amount:number - объем жидкости id:number - идентификатор жидкости name:string? - имя жидкости rawName:string? - название жидкости - зависит от языка сервера Информация о хранилище жидкости: capacity:number - общий объем хранилища contents:table - содержащаяся жидкость Игровой профиль Информация о игроке: name:string - имя игрока uuid:string - уникальный идентификатор игрока Если у вас есть мысли, что может дополнить статью - был бы рад услышать.
  3. 2 балла
    Это "кто". Слева Чокола, справа Ванилла.
  4. 1 балл
    У меня есть такая идея: игроком надо прогружать чанк, в котором находится робот с чанклоадером, но не соседний, где будет находиться тестовый робот. Тогда сигнал гарантированно будет доходить. Да, хорошая идея, и я уже воплотил её в немного ином виде. В момент написания того поста я считал, что чанклодер OC загружает область 1x1 чанк. Вроде бы так и было раньше. Не знаю, когда это изменилось. Но один из проведённых мной экспериментов показал, что чанклодер OC загружает область 3x3, чему я позже нашёл подтверждение и в коде OC. Поэтому озвученная мной проблема потеряла свою актуальность, и вместо игрока я стал использовать ещё одного неуправляемого робота с чанклодером, который постоянно держит загруженным чанк с управляемым роботом. А от загрузки чанков игроком я в своих экспериментах решил пока отказаться, чтобы не усложнять интерпретацию результатов, и без того неожиданных. Мой эксперимент выглядел так. На границе чанка установлен компьютер с целевым скриптом. В 16 блоках от него в другом чанке стоит робот с управляемым чанклодером, а 16 блоках от него (и в 32 блоках от целевого) стоит неуправляемый робот с постоянно включенным чанклодером, который служит для постоянной загрузи чанка с управляемым роботом. Это практически предложенная тобой схема, в которой вместо игрока задействован ещё один робот. Игроку остаётся лишь отбежать подальше и с планшета подавать сигналы управляемому роботу на включение и выключение чанклодера. Именно в ходе того эксперимента мной и был обнаружен эффект блуждающей загрузки чанка, который по моему разумению вообще не должен был входить в зону загрузки неуправляемого чанклодера. Я сначала думал, что виноват управляемый робот, который по каким-то причинам не хочет отключать чанклодер. В конечном итоге я вообще удалил его с карты, тогда и оказалось, что управляемый робот вообще не при чём. К эксперименту с двумя чакнлодерами я планирую вернуться позже с немного другой расстановкой роботов по чанкам. Но сначала хочу ещё немного поиграть с блуждающей загрузкой чанков.
  5. 1 балл
    У меня есть такая идея: игроком надо прогружать чанк, в котором находится робот с чанклоадером, но не соседний, где будет находиться тестовый робот. Тогда сигнал гарантированно будет доходить. Насчёт дюпов и исчезновений роботов (важно: /me не читал код, только делает предположения): возможно, чанк сохраняется на диск в тот момент, когда он попадает в очередь на выгрузку, но продолжает просчитываться дальше. Если робот выезжает из выгружаемого в прогруженный чанк, то робот дюпается; если въезжает внутрь, то исчезает.
  6. 1 балл
    К тому что "рандомное" время выгрузки зависит от скорости той самой выгрузки, в майне работает балансировщик выгрузки.
  7. 1 балл
    Некоторое время назад я публиковал программку - интернет-мост Stem. Он очень простой в использовании, но к сожалению пока не лишен некоторых глюков. А кроме того, у него есть недокументированные возможности. Предлагаю сейчас поиграться с одной такой тайной фичей. Это будет интересно тем, кто немного знаком с HTML/CSS/JavaScript. В чём суть? Всё просто. У Stem есть веб-клиент. То есть если вы зайдете по адресу https://stem.fomalhaut.me (например), вы увидите окно, которое пригласит вас ввести ID канала и початиться прямо с сайта. После ввода ID канала, вас перекинет на страничку с "чатом", где вы сможете посылать сообщения вашему компьютеру/роботу в майнкрафте. Адрес этой странички будет выглядеть примерно так: https://stem.fomalhaut.me/channel?id=test Где test это ID вашего канала. Когда робот будет вам отвечать, это будет видно в логе. Примерно так: А теперь - тайная фича. Находясь на страничке канала, как на скриншоте, вы можете приписать к адресу дополнительный флаг: &render=true. Полный адрес станет выглядеть примерно так: https://stem.fomalhaut.me/channel?id=test&render=true И начиная с этого момента, все входящие сообщения от компьютера в OpenComputers будут не отрисовываться в лог, а попадать в JS функцию eval(...). Что это значит? Те кто имел дело с JS уже наверное поняли все последствия. Но я поясню. Это значит, что компьютер OpenComputers может прислать сообщение с JS кодом, и сайт Stem этот код выполнит. А это значит, что вы можете творить на сайте вообще всё что угодно. Вы можете удалить интерфейс, показать вместо него новый, скачать что-то с инета, запустить игрушку... да хоть майнить крипту. Поиграем Ничего вредоносного мы делать конечно сейчас не будем. Вместо этого, традиционно, попробуем сделать так, что сайт Stem превратится в сайт для управления светом в нашем доме в Майнкрафте. Шаг первый. Подготовим дом. Тут всё просто - стандартный компьютер, с интернет картой, от него кабель к I/O блоку, а на блоке - подопытная лампа. На компьютер ставим Stem. Например, ставим HPM такой командой, pastebin run vf6upeAN И потом пишем: hpm install stem Нажимаем Enter и готово. Шаг второй. Нам нужен сайт. Усложнять не будем, и наш революционный дизайн будет выглядеть так: Что нам нужно сделать, чтобы сайт Stem превратился в то что нам надо? Методом тыка, через консоль браузера определяем, что достаточно выполнить такой код: document.body.innerHTML = " <style>button:active { background: #fac700; }</style> <button onclick=\"sendMessage(\'toggle\')\">Toggle Light</button> "; document.body.style.alignItems = "center"; Первой строкой мы просто заменяем всё содержимое тега <body> на то что нам надо. Я добавил еще немного косметики в виде стиля для кнопки. Вторая строка - тоже косметика, я просто поправил стиль на теге <body> чтобы кнопочка была посередине. Один важный ньюанс - на кнопке повешено свойство onclick с кодом sendMessage("toggle"). Таким образом, когда пользователь тыкнет по кнопке, мы отправим сообщение обратно в OpenComputers. Функцию sendMessage нам дает веб-клиент Stem. Ей можно безвозмездно пользоваться в своих целях. Шаг третий. Соединяем это все вместе. Теперь надо набросать программку для нашего компьютера в Майнкрафте, чтобы он выслал подготовленную JS-"бомбу" по нашему сигналу. Эники, беники... выходит что-то такое: local event = require('event') local stem = require('stem') local side = require('sides') local com = require('component') local redstone = com.isAvailable('redstone') and com.redstone or nil local channel = "test" local layout = [===[ document.body.innerHTML = "\ <style>button:active { background: #fac700; }</style>\ <button onclick=\"sendMessage(\'toggle\')\">Toggle Light</button>\ "; document.body.style.alignItems = "center"; ]===] local lampSide = side.top local lampTurnedOn = false print("Connecting to the #" .. channel .. " STEM channel...") local server = stem.connect('stem.fomalhaut.me') server:subscribe(channel) print("Done.") print("Press [q] to quit.") while true do local name, a, b = event.pull() if name == "stem_message" then local message = b if message == "connect" then print("Someone wants to connect - sending the layout...") server:send(channel, layout) elseif message == "toggle" then if redstone ~= nil then if not lampTurnedOn then redstone.setOutput(lampSide, 16) lampTurnedOn = true else redstone.setOutput(lampSide, 0) lampTurnedOn = false end end end elseif name == "key_down" then local char = b if char == 113 then break end end end server:disconnect() Я думаю тут большая часть очевидна и понятна. Мы подключаемся к серверу Stem, подписываемся на нужный канал и внимательно слушаем входящие сообщения. Когда пользователь присылает сообщение connect, мы отправляем ему подготовленный код, который мирно лежит в переменной layout. Этот код прилетит к пользователю, и, если пользователь смотрит страницу с включенной опцией render=true, код сработает и перерисует страницу. Если опция будет отключена - он просто увидит код в логе, как простое сообщение. Шаг четвертый. Тестируем. Откроем наш канал по ссылке: https://stem.fomalhaut.me/channel?id=test&render=true Появится пустой лог. Запустим программу в OpenComputers. Она отрисует наше приветствие, что-то вроде: Сonnecting to the #test STEM channel... Done. Press [q] to quit. Теперь пишем на сайте команду connect. Если мы все сделали правильно, и Stem не заглючил, интерфейс сайта исчез, и вместо него появилась наша кнопка. Нажимаем её. Вуаля! Дома зажегся свет. Постскриптум Это конечно же недокументированная хакерская фича, которую можно считать альфа-версией. Кроме того в Stem сейчас есть неуловимый баг, из за которого сообщения иногда не доходят. Не пугайтесь. Если кто-нибудь предоставит мне сценарий (прямо по шагам), при котором 100% срабатывает баг - буду очень рад и пофиксить его будет легче. С помощью описанной фишки можно придумать много хрени. Я показал самое простое что пришло в голову. Уверен, ваша фантазия будет покруче моей ) Пишите баг-репорты или пожелания по фиче, да и просто комменты в эту тему, либо мне в любой канал связи, где я онлайн.
  8. 1 балл
    Недавно наткнулся на просто гениальный мод под майнкрафт 1.12.2. Эту версию майнкрафта я считаю оптимальной для игры на новых версиях майна. Под неё достаточно модов. В том числе новых. Есть опенкомпы, очки и секуритикрафт уже на этой версии. В общем 50% от аддонов к компам уже на 1.12.2 И вот сталкиваюсь с модом, который добавляет возможность строить свой корабль и на нём путешествовать. Сразу скажу, на версию 1.7.10 его нет. Но он имеет открытый исходный код и немного сырой. Что его отличает от подобных модов: Вот был мод Warp Drive, позволял строить из блоков корабли и организовывал их передвижение как телепортацию блоков на нужное значение. Работал только на версию майнкрафта 1.7.10 и управлялся только компами из опенкомпов и комьютеркрафта. Был мод Davincis Vessels, потестил его на 1.12.2, багов не заметил. Он просто позволяет скреплять блоки и использовать их как сущность. После транспортировки назад разбирать на блоки. При этом все процессы что происходили, например процент от создания земли из саженцев в бочке из мода нихило, всё останавливается при переходе в режим сущности и продолжает свою работу с того места на котором было при обратной транспортации в блок. Что же предлагает мод Valkyrien Warfare: Он предлагает физику. Создать корабль из блоков. На котором можно в отличии от Davincis Vessels, только летать. Про плаванье как-то речи не идёт. Зато во время движения мы видим не сущность. Это всё те же блоки и их работоспособность сохраняется. В игре есть кресло сидя в котором мы напрямую управляем кораблём. Двигатели даже для этого не нужны. Но можно так же управлять пассивно, двигателями, которые разворачивают, толкают корабль в нужную сторону. То есть можно его направить в одну сторону и по пути что-то делать. Ту же руду просеивать из мода нихило. Ничто не мешает. Можно и в компе рыться из опенкомпов. Как это реализуется: Реализуется это так. Мы ставим блоки - они ставятся на самом деле на дальних координатах майна куда не попасть. А мы видим их как призрачные блоки в мире, которые могут поворачиваться как угодно, по законам физики. Корабль можно достраивать в движении. При этом центр массы меняется. Учитывается масса каждого блока. Мощность двигателей для подъема корабля, как повернуты двигатели (пропеллеры). Из-за чего двигаться можно не только по прямой, но и с небольшим поворотом. И да, физика жидкостей работает только визуально. Утонуть в жидкости на корабле и поплавать у вас не получится. Как и реакторы из IC2 не будут бить радиацией. Ведь корабль - это только проекция блоков. В моде даже есть два блока для работы с компами. Это gps блок - предоставляющий возможность узнать координаты корабля в мире. И блок, цель которого я не особо понял. Но как я понял, он нужен для управления им. (хотя полное управление было бы от движков работающих от редстоуна, но и тут я особо не понял как подводить редстоун чтобы их активизировать. У меня только от прямого контакта с рычагом работали) Но это не важно. Сам по себе мод вроде как работает нормально, но с компами у него явно есть проблемки. Начнём с того, что при заходе в игру опенкомпы в чат выдают сообщение, что произошла ошибка с классами. И это после создания нового мира только. Когда мы ничего не строили. Далее после строительства на корабле можно спокойно кататься, но стоит поставить комп, блоки для работы с компом и попытаться с этим работать. Так можно легко словить краш. Зависание корабля, он просто висит без физики и не понятно как его оживить. В общем, единственная проблемка такого шикарного мода в том, что он не работает с компами нормально. Хотя для работы серверов неплохо собран. Есть конфиг, где можно отключить физику столкновений, дать возможность игрокам создавать не более одного корабля или указать этот предел. Вроде как, без компов на борту я не ловил крашей. Так что вот. Знайте, что есть такой крутой мод. Но он сырой пока и с компами не дружит. А когда начнёт дружить представляете как будет круто? Летать, сбрасывать динамит, расстреливать турелями из мода OpenModularTurrets. Можно было бы неплохой военный сервер собрать. Поставить Flans оружие. Отключить приваты. И летай по серверу, воюй с другими. Прячь корабль когда выходишь с сервера. Было бы идеально, на такой мобильной базе передвигаться.
  9. 1 балл
    И не говори. Программисты вечно всё усложняют.
  10. 1 балл
    Дратути! Программисты такие программисты Скопировать Hello World! в буфер, запустить цомпутер в майне и прямо в командной строке 10 раз нажать инсерт. Фомально условия ТЗ выполнены, т.к. ОС на Луа обрабатывает ввод/вывод. Можно еще с echo извратиться. Как в древней бородатой задачке. ЗЫ Есть еще медитативно-хаотический метод для истинных гуру, выводить в поток рандомные символы. Рано или поздно фраза Hello World! будет выведена 10 раз, и дзен результат будет достигнут.
  11. 1 балл
    Некоторые помнят мою передавалку чисел по рэдстоуну... Но чисел мало... Но теперь скорость настолько большая,что можно передавать даже файлы! Зато изменились протокол передачи и программа) Краткая характеристика: Поддержка юникода + Скорость передачи байта от 0,1 до 0,3 секунд Посмотреть код:
  12. 1 балл
    local str = 'hello world' local str_len = #str for i = 1, 10 do local matches = 0 local now_ch = string.sub(str, 1, 1) while matches <= str_len do local ch = string.char(math.random(1, 255)) if ch == now_ch then io.write(ch) matches = matches + 1 now_ch = string.sub(str, matches + 1, matches + 1) end end print() end
  13. 1 балл
    print('Hello World! Десять раз')
  14. 1 балл
    «Job well done» — Engineer Вы — инженер? Всем вокруг что-то надо? Скаут надоедает вам своим "Need a dispenser here!" ? Выход есть! Постройте раздатчик! Раздатчик — это: Эстетично. Больше никаких каменных плюющихся кубов. Красиво. Посмотрите на него. Он прекрасен. Эффективно. Нажимная плита заедает, а кнопка выглядит коряво? Поставьте Раздатчик! Теперь вам всего лишь нужно нажать на его дисплей! Модели: «Dispense-O-Matic 9000 Раздатчик автоматический». Теперь в Minecraft. Предупреждение! Раздатчик можетиспользоваться для запуска стрел и/или огненных шаров, а также других опасных предметов. Компания "Гравийные шахты MineUbuntu" не несёт ответственности за причинённый раздатчиком ущерб.
  15. 1 балл
    Обрадовался что на сервере разрешили печатать 3д модели и побежал в одиночку делать всякие прикольные штуковины. Но когда зашел на сервер и узнал сколько стоит напечатать, очумел. Так что не видать мне на сервере принтов. Но вот что получилось в одиночке: Сегодняшняя первая проба - футуристичная дверь из 4х частей: А за ней следовали стержни в корпусе: Код стержней:
  16. 1 балл
    Помню на нашем старом сервере C&S 1.6.4 народ стонал и очень просил столик Enchanting Plus (мод), где можно было зачарить предмет на желаемое свойство. В ванильном столике не совсем понятно, что там чарится. Эффект неожиданности, это конечно хорошо и интересно, но не то, чего бы хотелось. Родилась у меня мысль сделать на сервере ИТ на подобии "подарковыдавалки" за голоса еще одну схемку, которая за UU-тугрики будет чарить ваши любимые кирочки, буры и квантовые труселя В чем фича? Берете в руку труселя, и пишите в чат "Защита 4". Программка перехватывает чат, ник, и чарит предмет командой через комблок /enchant AlexCC 0 4 (enchant [уровень]) Вот и все, и уже Алекс бегает по серверу в волшебных панталонах. Вот зачарки, которая предлагает Вика. Важный момент. Программульку сделаю на каком нибудь чатбоксе админском или еще там чём-то, чтобы не флудило в чате. Там вроде пишешь $$Защита 4 и сообщение в чате не отображается. Так же все квитанции о успешном выполнении зачарки или нехватки жидких UU-голосов программка пишет в личку. Но и это не главное. Может кто помнит, как ГивелЛП (GiveLP, игрок такой у нас был, все не нравилось ему) орал, что ему ком. блок гивнул подарки за заходы, но так как у него в инвентаре валялось куча коблы, грязи и какашек - он подарки профукал. И он нас пытался обвинять Так вот. Если вы в руку возьмете ведро и наберете команду, программа вам попытается зачарить это ведро, UU-тугрики снимет, но сами понимаете, что ведро не зачарится. То же касается несовместимых зачарок и прочего. Так что нужно быть внимательным при зачарках. Как-то можно вроде проверять командным блоком, что в руке, но пока с этим повременим. Думаю, ума хватит у игроков не чарить кактусы Цены адовые ставить не буду. Например уровень зачарки сделаю 10 тугриков или типа того. Главное, это наличие компьютерной зачарки на ИТ сервере. Да и профит сайту очевиден. Еще больше будет смысла проголосовать за проект, на мой взгляд. Пока у нас нет Клана Магов и маны(не понятно, как им ее выдавать и сколько, а самое главное, кто у нас будет Магами на ИТ), такое решение имеет место быть, я считаю. Кому это не безразлично, прошу проголосовать, а также высказаться с предложениями о технических моментах и ценах на зачарки,
  17. 0 баллов
    Речь шла о чанках за пределами области 3x3 с роботом в центре. И, как оказалось далее, роботу вообще не обязательно двигаться. Находящийся рядом чанк случайным образом загржается и выгружается. При этом игрок находится далеко и не двигается.
Эта таблица лидеров рассчитана в Москва/GMT+03:00
×
×
  • Создать...