Xytabich
-
Публикации
143 -
Зарегистрирован
-
Посещение
-
Победитель дней
25
Сообщения, опубликованные пользователем Xytabich
-
-
В общем конкретно я не встречал подобного, хотя играл много где и на загруженных серверах, в основном. Там дают ~1-3 чанка радиусом грузить, так что перерывы в работе или выгрука чанка были частыми.
-
6 часов назад, Alex сказал:п.с. И робот же сбивался когда-то и без выгрузки чанков, а может и сейчас(не знаю, 100 лет не играл в роботов) Было так, что если бахнуть ему цикл for на 10 движений вперед без слипа, или даже со слипом, но без вайл проверки на тру, что он успел таки совершить мув, в итоге могло получиться не 10 мувов вперед, а например 9 или даже 8.
Так случается в результате отсутствия доступа к главному потоку майна во время исполнения проги, чтоб такое избежать, функции робота возвращают false - т.е. доступ к майну не удался, операция не выполнена, потому надо в цикле крутить до тех пор, пока не вернет true, т.е. операция исполнена. Я с этим часто сталкивался на
всяких мцскиллахсерверах, потому уже в привычку вошло писать бесконечные циклы на поворот/движение и прочими взаимодействиями с окружением. -
-
-
@Alex лаги конечно бывают, но поменьше чем на других проектах, по крайней мере блоки не возвращаются на место) Лаги зависят от присутствия сильных мира сего, а они там 24/7 грузят базы (лагодромы).
А, но реакторы ic'шные, например, не поставить на самообеспечение - они имеют тенденцию взрываться чуть какой пролаг. -
-
-
-
-
@Alex сейчас играюсь.
Приватов 2, 3*3 чанка
Под предметами есть подписи сколько можно ставить на чанк, если ставятся лишние - не дает, насколько помню.
16 мобов на чанк.
Прилетает модер, с острым мечом.
Контроль лагодрома жесточайший - есть спец счётчики загруженности чанка, и кто его грузит, и в случае чего наиболее грузящие блоки уничтожаются.-
1
-
-
OpenPeripheral предоставляет мощный функционал по созданию собственных интерфейсов в виде очков дополненной реальности "Terminal Glasses". К сожалению, полного списка функционала и всех нюансов по работе с этими очками не найти. Присутствуют некоторые отрывки, небольшие видео с результатами работы и прочие поделки. Но! Спустя пару бессонных ночей, декомпилированного кода и трёх литров чая, удалось описать полный функционал этих очков.
Основные возможности очков и периферии:
- Отображение геометрических объектов различной сложности и цветовой гаммы.
- Отображение текста.
- Отображение жидкостей и предметов.
- Взаимодействие с мышью/клавиатурой.
- Чтение сообщений чата.
- Специальные команды чата, не отображающиеся в нем.
- Возможность индивидуальной работы с каждым пользователем терминала.
- Установка очков в любой шлем.
Возможности данных очков я опишу по разделам, в лучших традициях вики
Для начала, определю некоторые понятия.
Система терминальных очков состоит из трёх предметов: терминала, очков, беспроводной клавиатуры.
Терминал является центром всей системы, через него происходит общение между компьютером и очками. Также он хранит все данные интерфейса и пользователей.
На очки выводится вся графическая информация, а сами очки передают сообщения или команды чата на терминал.
Беспроводная клавиатура позволяет дополнить всю систему, своей возможностью контроля элементов при помощи клавиатуры и мыши.
Как выводить информацию на очки:
local com = require("component") local opb = com.openperipheral_bridge -- Построение интерфейса происходит во внутреннем буффере терминала (он же мост). local text = opb.addText(10, 10, "", 0xffef7f) -- Создаем компонент "Текст". -- Его нужно создать только один раз, в остальное время можно обращаться по ссылке и изменять любой параметр. local counter = 0 while true do -- В качестве примера будет выводится счетчик секунд. text.setText(tostring(counter)) -- Обновляем текста компонента. opb.sync() -- Для отображения графики на экране, необходимо отправить буффер на очки. os.sleep(1) -- Ждем секунду и прибавляем счетчик. counter = counter+1 end
API
Перед тем как перейти к API, нужно знать:
Color:number -- Число в формате TrueColor RGB (по умолчанию 0xffffff). Opacity:number -- Прозрачность, число от 0.0 до 1.0 (по умолчанию 1). Знак '?' -- Опциональный параметр/функция.
События
Скрытый текстВсе события имеют несколько одинаковых параметров, остальные описываются индивидуально:
componentAddress:string, userName:string, userUUID:string
Сами события:
glasses_key_down(keyCode:number, char:string, isRepeat:boolean) -- Событие нажатия или удержания(isRepeat = true) кнопки клавиатуры. glasses_key_up(keyCode:number) -- Событие отпускания кнопки клавиатуры. glasses_mouse_scroll(value:number) -- Событие поворота колесика мыши. glasses_mouse_down(button:number) -- Событие нажатия кнопки мыши. glasses_mouse_up(button:number) -- Событие отпускания кнопки мыши. glasses_component_mouse_wheel(id:number, private:boolean, x:number, y:number, value:number) -- Событие поворота колесика мыши над интерактивным элементом. -- Параметр id является идентификатором объекта, над которым сработало событие. -- Позиции x,y относительно позиции объекта. -- Поле private устанавливается если элемент находится в интерфейсе отдельного пользователя. glasses_component_mouse_down(id:number, private:boolean, x:number, y:number, button:number) -- Событие нажатия кнопки мыши над интерактивным элементом. -- Параметр id является идентификатором объекта, над которым сработало событие. -- Позиции x,y относительно позиции объекта. glasses_component_mouse_up(id:number, private:boolean, x:number, y:number, button:number) -- Событие отпускания кнопки мыши над интерактивным элементом. -- Параметр id является идентификатором объекта, над которым сработало событие. -- Позиции x,y относительно позиции объекта. glasses_mouse_drag(deltaX:number, deltaY:number) -- Событие перетаскивания мышью (движение с зажатой клавишей мыши). glasses_attach -- Событие экипировки очков. glasses_detach -- Событие снятия очков. glasses_capture -- Событие входа в режим захвата. glasses_release -- Событие выхода из режима захвата. glasses_chat_message(msg:string) -- Пользователь отправил сообщение в чат. glasses_chat_command(command:string) -- Пользователь отправил команду. -- Командой является сообщение в чат, начинающееся с символов '$$'
Строковые константы
VerticalAlignment:[TOP, MIDDLE, BOTTOM] HorizontalAlignment:[LEFT, MIDDLE, RIGHT] GuiElement:[OVERLAY, PORTAL, HOTBAR, CROSSHAIRS, BOSS_HEALTH, HEALTH, ARMOR, FOOD, MOUNT_HEALTH, AIR, EXPERIENCE, JUMP_BAR, OBJECTIVES]
Структуры данных
SimpleBox, ColoredPoint, Coord, User
Скрытый текстСтруктура таблиц, возвращаемых или задаваемых функциям.
SimpleBox -- Содержит информацию о положении и размере области. top:number left:number width:number height:number ColoredPoint -- Содержит информацию о вершине: её положение и цвет. x:number y:number rgb:Color? opacity:Opacity? Coord -- Содержит информацию о координатах объекта. x:number y:number User: -- Содержит информацию о пользователе терминала. name:string -- Имя игрока. uuid:string -- Уникальный идентификатор игрока в терминале.
Абстрактные объекты
Drawable, BoundedShape, Box
Скрытый текстЗдесь я описал базовый функционал некоторых типов объектов, наследники которых реализуют этот функционал.
Drawable -- Базовый интерфейс всех отображаемых объектов getId():number -- Получить идентификатор объекта в терминале. delete() -- Удалить объект из терминала. getType():string -- Получить тип объекта. get/setVisible():boolean -- Получить или установить видимость объекта. get/setClickable():boolean -- Получить или установить интерактивность объекта. get/setRotation():number -- Получить или установить текущий поворот объекта (в градусах). get/setUserdata():object -- Получить или установить кастомные данные. Могут быть любого типа, -- используются для хранения данных/ссылок и т.п. (при необходимости). get/setZ():number -- Получить или установить положение объекта по оси 'Z'. -- Принимаются значения от -32768 до 32767 (short), но отображаться будут только в пределах [-999, 1000]. -- Чем больше значение - тем "ближе" объект. setScreenAnchor(horizontal:HorizontalAlignment, vertical:VerticalAlignment) -- Установить начальную точку отсчета. -- Т.е. позицию {x:0,y:0} относительно экрана. setObjectAnchor(horizontal:HorizontalAlignment, vertical:VerticalAlignment) -- Установить конечную точку отсчета. -- Т.е. сдвигает координаты {x:0,y:0} объекта на ширину и/или высоту объекта. -- Также является осью поворота объекта. setAlignment(horizontal:HorizontalAlignment, vertical:VerticalAlignment) -- Устанавливает начальную и конечную точку отсчета одновременно. BoundedShape:Drawable -- Базовый объект для объектов с произвольным набором вершин(точек). getBoundingBox():SimpleBox -- Возвращает экранную позицию и размер объекта. Box:Drawable -- Базовый объект для прямоугольников. get/setX():number get/setY():number get/setWidth():number get/setHeight():number
Графические объекты
Скрытый текстИмеют расширенные возможности по представлению изображения на экране.
Point:Drawable -- Точка на экране. get/setCoord():Coord -- Экранные координаты точки. get/setSize():number -- Размер точки (по умолчанию 1). get/setColor():Color get/setOpacity():Opacity SolidLine:BoundedShape -- Закрашенная линия. get/setWidth():number -- Ширина линии (по умолчанию 1). get/setP1():Coord -- Первая точка линии. get/setP2():Coord -- Вторая точка линии. get/setColor():Color get/setOpacity():Opacity GradientLine:BoundedShape -- Линия с градиентным переходом. get/setWidth():number -- Ширина линии (по умолчанию 1). get/setP1():ColoredPoint -- Первая точка линии. get/setP2():ColoredPoint -- Вторая точка линии. SolidLineStrip:BoundedShape -- Закрашенная произвольная линия. get/setWidth():number -- Ширина линии (по умолчанию 1). get/setPoints():Coord[] -- Получить или установить вершины линии. ?getPoints(index:number):Coord -- Получить вершину по индексу. ?setPoints(point:Coord, index:number) -- Установить вершину по индексу. get/setColor():Color get/setOpacity():Opacity GradientLineStrip:BoundedShape -- Произвольная линия с градиентным переходом. get/setWidth():number -- Ширина линии (по умолчанию 1). get/setPoints():ColoredPoint[] -- Получить или установить вершины линии. ?getPoints(index:number):ColoredPoint -- Получить вершину по индексу. ?setPoints(point:ColoredPoint, index:number) -- Установить вершину по индексу. SolidBox:Box -- Закрашенный прямоугольник. get/setColor():Color get/setOpacity():Opacity GradientBox:Box -- Прямоугольник с градиентным переходом. get/setColor1():Color get/setOpacity1():Opacity get/setColor2():Color get/setOpacity2():Opacity get/setGradient():number -- Направление градиента, 1 - снизу/вверх, остальные значения - справа/налево. SolidTriangle:BoundedShape -- Закрашенный треугольник. get/setP1():Coord get/setP2():Coord get/setP3():Coord get/setColor():Color get/setOpacity():Opacity GradientTriangle:BoundedShape -- Треугольник с градиентным переходом. get/setP1():ColoredPoint get/setP2():ColoredPoint get/setP3():ColoredPoint SolidQuad:BoundedShape -- Закрашенный четырёхугольник. get/setP1():Coord get/setP2():Coord get/setP3():Coord get/setP4():Coord get/setColor():Color get/setOpacity():Opacity GradientQuad:BoundedShape -- Четырёхугольник с градиентным переходом. get/setP1():ColoredPoint get/setP2():ColoredPoint get/setP3():ColoredPoint get/setP4():ColoredPoint SolidPolygon:BoundedShape -- Закрашенная произвольная фигура. get/setPoints():Coord[] -- Получить или установить вершины фигуры. ?getPoints(index:number):Coord -- Получить вершину по индексу. ?setPoints(point:Coord, index:number) -- Установить вершину по индексу. get/setColor():Color get/setOpacity():Opacity GradientPolygon:BoundedShape -- Произвольная фигура с градиентным переходом. get/setPoints():ColoredPoint[] -- Получить или установить вершины фигуры. ?getPoints(index:number):ColoredPoint -- Получить вершину по индексу. ?setPoints(point:ColoredPoint, index:number) -- Установить вершину по индексу. ItemIcon:Drawable -- Иконка предмета с размерами 16х16 get/setX():number get/setY():number get/setScale():number -- Размер иконки (по умолчанию 1). get/setItemId():string -- Полный id предмета. get/setMeta():number -- Метаданные объекта (поворот и т.п.). get/setDamageBar():number -- Полоска прочности объекта. -- 0.0 - полоса отсутствует, 1.0 - полоса пустая (закончилась прочность). get/setLabel():string -- Текст с информацией о количестве. -- Тем не менее, может принимать и отображать любой текст. LiquidIcon:Box -- Прямоугольник с текустурой жидкости. get/setFluid():string -- Имя жидкости (не id блока). get/setAlpha():Opacity Text:Drawable -- Текстовое поле. get/setX():number get/setY():number get/setText():string -- Отображаемый текст. get/setScale():number -- Размер текста (по умолчанию 1). get/setColor():Color get/setAlpha():Opacity
Управление графическими объектами
DrawableFactory, DrawableContainerСкрытый текстDrawableFactory -- Фабрика отображаемых объектов. Созданный объект автоматически добавляется в контейнер. addPoint(coord:Coord, color:Color?, opacity:Opacity?):Point -- Создать объект Point - точку. addLine(p1:Coord, p2:Coord, color:Color?, opacity:Opacity?):SolidLine -- Создать объект SolidLine - цветную линию. addGradientLine(p1:ColoredPoint, p2:ColoredPoint):GradientLine -- Создать объект GradientLine - линию с градиентным переходом. addLineList(color:Color?, opacity:Opacity?, point1:Coord, point2...):SolidLineStrip -- Создать объект SolidLineStrip - произвольную цветную линию. addGradientLineList(point1:ColoredPoint, point2...):GradientLineStrip -- Создать объект GradientLineStrip - произвольную линию с градиентным переходом. addBox(x:number, y:number, width:number, height:number, color:Color?, opacity:Opacity?):SolidBox -- Создать объект SolidBox - цветной прямоугольник. addGradientBox(x:number, y:number, width:number, height:number, color:Color?, opacity:Opacity?, color2:Color?, opacity2:Opacity?, gradient:number):GradientBox -- Создать объект GradientBox - прямоугольник с градиентным переходом. -- Параметр gradient определяет направление градиента, 1 - вертикальный, 2 - горизонтальный. -- Если gradient установлен в 0, color2 и opacity2 игнорируются - получается цветной прямоугольник. addTriangle(p1:Coord, p2:Coord, p3:Coord, color:Color?, opacity:Opacity?):SolidTriangle -- Создать объект SolidTriangle - цветной треугольник. addGradientTriangle(p1:ColoredPoint, p2:ColoredPoint, p3:ColoredPoint):GradientTriangle -- Создать объект GradientTriangle - треугольник с градиентным переходом. addQuad(p1:Coord, p2:Coord, p3:Coord, p4:Coord, color:Color?, opacity:Opacity?):SolidQuad -- Создать объект SolidQuad - цветной четырёхугольник. addGradientQuad(p1:ColoredPoint, p2:ColoredPoint, p3:ColoredPoint, p4:ColoredPoint):GradientQuad -- Создать объект GradientQuad - четырёхугольник с градиентным переходом. addPolygon(color:Color?, opacity:Opacity?, point1:Coord, point2...):SolidPolygon -- Создать объект SolidPolygon - произвольную цветную фигуру. addGradientPolygon(point1:ColoredPoint, point2...):GradientPolygon -- Создать объект GradientPolygon - произвольную фигуру с градиентным переходом. addIcon(x:number, y:number, id:string, meta:number?):ItemIcon -- Создать объект ItemIcon - иконку предмета с размерами 16*16. addFluid/addLiquid(x:number, y:number, width:number, height:number, liquid:string):LiquidIcon -- Создать объект LiquidIcon - прямоугольник с текстурой жидкости. addText(x:number, y:number, text:string, color:Color?):Text -- Создать объект Text - цветной текст. DrawableContainer -- Хранит отображаемые объекты. getById/getObjectById(id:number):Drawable -- Получить объект по идентификатору. getAllIds():number[] -- Получить идентификаторы хранящихся объектов. getAllObjects():{id:number, obj:Drawable} -- Получить таблицу хранящихся объектов. clear() -- Удалить все объекты.
Управление терминалом
Скрытый текстОбъекты обеспечивающие взаимодействие с терминалом и пользователями.
UserSurface:DrawableContainer, DrawableFactory -- Контролирует интерфейс отдельно взятого пользователя. CaptureControl -- Предоставляет управление "режимом захвата" во время использования "Беспроводной клавиатуры". stopCapturing() -- Остановить захват. setBackground(color:Color, alpha:Opacity?) -- Установить цвет и прозрачность фона. setKeyRepeat(repeat:boolean) -- Включить/отключить периодический повтор события "glasses_key_down" (по умолчанию false). setDragParameters(distance:number, delay:number) -- Установить минимальную дистанцию для возникновения события "glasses_mouse_drag" -- и минимальное время между срабатываниями (в тиках). -- По умолчанию distance=5, delay=10, эти значения также являются минимальными. toggleGuiElements({element:GuiElement, value:boolean}) -- Установить видмость стандартных графических элементов. TerminalGlassesBridge:DrawableContainer, DrawableFactory -- Управляет интерфейсами и хранит данные пользователей. getGuid():string -- Получить уникальный идентификатор терминала. sync() -- Отправить графические данные на очки всех пользователей. getUsers():User[] -- Получить всех пользователей терминала. getSurfaceByName(username:string):UserSurface -- Получить холст по имени игрока. getSurfaceByUUID(uuid:string):UserSurface -- Получить холст по уникальному идентификатору игрока. getCaptureControl(uuid:string):CaptureControl -- Получить контроллер режима захвата.
Вот такая шпаргалка по очкам, надеюсь пригодится
-
4
-
2
-
7
-
-
19 минут назад, LeshaInc сказал:Так врагов еще даже нет.
Так квадратики это самые хитроумные и неприметный враги, они уже строят свои планы по покорению мира...
ЗЫ: Раньше заметил, что от коллизии шары красными становятся, но они так же и между собой коллизию устраивают. Внутренние разборки между шарами? -
49 минут назад, LeshaInc сказал:Понты
Не хватает пинание врагов физическими снарядами, с последующей потерей снарядом энергии и улетом в другую сторону.
-
3 часа назад, LeshaInc сказал:Добавил хроматическую аберрацию в меню.
Осталось синхронизировать её с музыкой)
-
Только что, Totoro сказал:Ну в таких играх все таки геймплей важнее сюжета. )
Сюжет это просто способ придать логики происходящему. Он не должен быть в ущерб интересности игры.
Таки да, я лишь предлагал возможную идею) А так можно множество различных интересных вещей реализовать.
-
Только что, Seryoga сказал:А почему тогда игру, может что-нибудь другое. Например нормальный lua-plugin для sublime или что-то такое?
Если я правильно понимаю, то в играх основное --- это дизайн игры и рисование, а не программирование.В больших игровых компаниях давят на "графооооон", типа он самый важный, и не особо уделяют время на интересные игровые механики, в результате чего игровой процесс становится унылым. Но зато "графон" на высоте.
-
-
Только что, Totoro сказал:Вообще скролл шутер - один из вариантов. Просто и без затей. И простор для усложнения бесконечный.
Единственное что хочу поправить - если корабль не имеет возможности поворачиваться, и летит только вверх, как на картинке + стрейфит в бока - не стоит делать подлетающих к кораблю сбоку или по диагонали противников. Это будет сильно бесить. )
Все летит сверху, но гравитацией может затянуть и сзади) Обошел метеор, а он раз и притягивается позади. Для этого в принципе можно сделать несколько плазмометов, на все четыре стороны) Точнее четыре штуки на 2 стороны.
-
1 минуту назад, Seryoga сказал:Уже есть: FTL: Faster Than Light
Подобных аркад множество есть, тут стоит вопрос в том, что-бы такого интересного сделать своими руками.
-
По идее собрал некоторые пожелания в идею, туда же можно добавить автоматическое уклонение при помощи своего кода и компонента-радара, который надо собрать из ресурсов выпадающих из астероидов. Улучшение корабля. Ну и прочие подобные вещи, если будет желание развивать идею.
-
Жаль не могу принять участие, но если нужна идея - что-то наклевалось.
Раньше были популярны различные стрелялки аркадной тематики, но сейчас как-то забыли про них...
Так вот, одна идея ко мне прицепилась, и не хочет отстать)
(картинка делалась пара минут, так что качество соответствующее)
Классический, можно сказать, аркадный спейс-шутер...?
Небольшая история для объяснения ситуации:
На корабле одного космического путешественника вышла из строя система контроля двигателя обратной гравитации (надо вовремя софт обновлять, что уж тут). В результате этого, корабль стал постоянно двигаться вперед, и остановить его невозможно. К счастью, коррекционными двигателями ещё возможно управлять, что позволит обходить некоторые препятствия. Но к сожалению, двигатель обратной гравитации является мощным источником гравитационных сил, в результате чего космические объекты притягиваются к кораблю, и намереваются облепить его со всех сторон. В борьбе с ними должны помочь бортовые плазменные установки , которые разрушают весь космический мусор в пыль, и он уже не сможет с такой яростью преследовать корабль.
"Когда-нибудь энергия для подпитки реактора закончится (или нет
), и корабль остановится, но до того момента остается надеяться на свою сноровку." - цитата персонажа.
Помимо космического мусора к кораблю могут притягиваться бедные инопланетяне, многие из них будут разгневаны подобными обстоятельствами, и намерены уничтожить корабль. Ну а нам что? Тоже надо как-то выживать.
Ну и соответственно некоторые механики которые тут могут быть реализованы:
- Движение объектов с постоянной скоростью к кораблю.
- Гравитационная сила, действующая на объекты, в зависимости от их "массы"(чем меньше объект - тем сильнее притяжение).
- Маневры корабля влево-вправо.
- Также, для фана можно добавить удары слева/справа по абстрактному "автомату", в результате чего кораблю резко сдвинется с места.
- Стрельба и разрушение объектов, чем больше объект - тем больше выстрелов необходимо на уничтожение.
- Коллизия с космическими объектами. При столкновении с большими объектами - уничтожение корабля. Маленькие объекты могут блокировать двигатель маневрирования или плазмомет на некоторое время, а также нанесение некоторого урона кораблю.
- Марс атакует! Оружие инопланетных злых соседей.
- Ну и соответственно всякие плюшки, типа "круговая оборона"(щит, разрушающий мелкие объекты), или больше плазменных пушек, и т.п.
Фух, ну теперь я спокоен)
-
1
-
-
10 часов назад, 1Ridav сказал:Без опыта новинку все равно не сделаем. Сейчас геймдев это клоны клонов с небольшими отличиями.
Вот и предлагаю сделать что-то, что мы все будем понимать. клон или не клон, опыт есть опыт
Сейчас геймдев это "Надо высосать побольше денег с игроков, неважно какая у нас игра, главное надавать игрокам всякого хлама, в надежде что он станет покупать такой же хлам за реал.", ну это в общих чертах отражает многие игры компаний. Естественно не все, но те что рекламируются везде и всюду - в основном(опять же, не все) придерживаются подобной идеологии.
-
Я чую тут шедевр наклевывается?



Предметный сканер сундучка
в Выполненные заказы
Опубликовано: · Изменено пользователем Xytabich
Нуу ээ... мне стало скучно и я решил забить прогу под завязку:
Использование: прога инвентарь путь_файла
инвентарь - название компонента, или кусок адреса компонента подключенного к адаптеру. Либо можно использовать транспозер, тогда надо указать на какой из его сторон стоит инвентарь (up, down, west, east, south, north).
https://pastebin.com/AJzcFu1M
P.S. комп с программой только что взорвал реактор, потому скриншотов нет, хотя там просто консолька.