Вверх ↑
2019-09-22 503
Предметы 
Вещи с ивентов - MCGL 9

MCGL 9
Описание

   Позволяет исполнять текст программы для отображения анимационных надписей в проекторе или воспроизведения тех или иных звуковых эффектов.
Написание программы
   Для того, чтобы в проекторе отобразился текст отличный от текста по умолчанию (надпись MCGL 9), необходимо написать программу на языке JavaScript, которая этот текст отобразит. Программы пишутся в обычном блокноте
, который вставляется в MCGL9, а тот уже вставляется в проектор.



   Игроки, которые знакомы с разработкой на JavaScript, могут воспользоваться шаблоном программы. Шаблон добавляет автодополнение в редакторе кода для стандартных объектов mcgl9, позволяет собирать скрипт из нескольких модулей, использовать дополнительные функции, которых нет в mcgl9 изначально (например, setTimeout, Promise). Подробнее можно прочитать по ссылке.
Структура программы
   Программы должна содержать две основные функции:

function init() {
// код инициализации
}

function update(time) {
// обновление состояния элементов или перерисовка всего экрана
// time - текущее время в миллисекундах
}

В программе могут использоваться все стандартные конструкции JavaScript. Доступ же к специальным функциям реализуется через отдельные объекты и их методы.
Объект display
Содержит следующие методы:

size(width, height) - определяет размер виртуального экрана, могут принимать значения от 1 до 3 блоков. Текст и иконки, которых выходят за пределы экрана будут обрезаны.

orientation(mode) - ориентация текстовых элементов: 0 - направление в сторону установки проектора, 1 - всегда направлены на игрока. При mode = 1 виртуальный экран меняется с плоскости заданного размера на куб со сторонами в 5 блоков и центом в точке установки проектора.

depth(value) - позиция по z координате от 0 до 16 (нужно выставлять, если перед проектором стоят блоки)

clear() - очистка всего вывода

print(text) - печать текста с текущим цветом, масштабом и координатами, смещает текущую координату курсора X на длину текста, возвращает объект Operation

cursor(x, y) - передвинуть текущие координаты курсора (0-15 - текущий блок, 16-31 следующий и т.д.)

offset(x, y) - тоже самое что и cursor только добавляет к уже установленной позиции курсора новые значения

color(value) - цвет текста

log(text) - вывод текста в консоль (использовать для отладки) заменен на sys.log

font(type) - тип шрифта от 0 до 3 (большой, маленький, нормальный и терминал)

icon(slot) - отображает иконку предмета из слота с индексом slot из контейнера, который стоит над проектором (работать будет только с контейнерами, чье содержимое грузится на клиент, например, проектор), возвращает объект Operation

voxel(x, y, z, color) - отображает воксель заданного цвета в указанных координатах
Объект Operation
Этот объект возвращают методы print, icon и voxel объекта display. Содержит поля, которые можно менять в любое время:

cursorX - координата X на экране

cursorY - координата Y на экране

cursorZ - координата Z на экране (глубина)

scale - масштаб

color - цвет

text - текст надписи

Методы:

move (x, y, z) - устанавливает значения всех трех координат cursorXXX

offset (x, y, z) - смещает значения всех трех координат cursorXXX

remove () - удаляет текущий элемент (удаление происходит не сразу, а после завершения текущего цикла отрисовки элементов)
Объект key
press(code) - возвращает true, если нажата клавиша с кодом code и false в противном случае

Коды клавиш
ESCAPE = 1;
1 = 2;
2 = 3;
3 = 4;
4 = 5;
5 = 6;
6 = 7;
7 = 8;
8 = 9;
9 = 10;
0 = 11;
MINUS = 12;
EQUALS = 13;
BACK = 14;
TAB = 15;
Q = 16;
W = 17;
E = 18;
R = 19;
T = 20;
Y = 21;
U = 22;
I = 23;
O = 24;
P = 25;
LBRACKET = 26;
RBRACKET = 27;
RETURN = 28;
LCONTROL = 29;
A = 30;
S = 31;
D = 32;
F = 33;
G = 34;
H = 35;
J = 36;
K = 37;
L = 38;
SEMICOLON = 39;
APOSTROPHE = 40;
GRAVE = 41;
LSHIFT = 42;
BACKSLASH = 43;
Z = 44;
X = 45;
C = 46;
V = 47;
B = 48;
N = 49;
M = 50;
COMMA = 51;
PERIOD = 52;
SLASH = 53;
RSHIFT = 54;
MULTIPLY = 55;
LMENU = 56;
SPACE = 57;
CAPITAL = 58;
F1 = 59;
F2 = 60;
F3 = 61;
F4 = 62;
F5 = 63;
F6 = 64;
F7 = 65;
F8 = 66;
F9 = 67;
F10 = 68;
NUMLOCK = 69;
SCROLL = 70;
NUMPAD7 = 71;
NUMPAD8 = 72;
NUMPAD9 = 73;
SUBTRACT = 74;
NUMPAD4 = 75;
NUMPAD5 = 76;
NUMPAD6 = 77;
ADD = 78;
NUMPAD1 = 79;
NUMPAD2 = 80;
NUMPAD3 = 81;
NUMPAD0 = 82;
DECIMAL = 83;
F11 = 87;
F12 = 88;
F13 = 100;
F14 = 101;
F15 = 102;
F16 = 103;
F17 = 104;
F18 = 105;
KANA = 112;
F19 = 113;
CONVERT = 121;
NOCONVERT = 123;
YEN = 125;
NUMPADEQUALS = 141;
CIRCUMFLEX = 144;
AT = 145;
COLON = 146;
UNDERLINE = 147;
KANJI = 148;
STOP = 149;
AX = 150;
UNLABELED = 151;
NUMPADENTER = 156;
RCONTROL = 157;
SECTION = 167;
NUMPADCOMMA = 179;
DIVIDE = 181;
SYSRQ = 183;
RMENU = 184;
FUNCTION = 196;
PAUSE = 197;
HOME = 199;
UP = 200;
PRIOR = 201;
LEFT = 203;
RIGHT = 205;
END = 207;
DOWN = 208;
NEXT = 209;
INSERT = 210;
DELETE = 211;
CLEAR = 218;
LMETA = 219;
Объект sound
play(sound) - воспроизводит стандартный звук, например mob.cow (соответствует имени пути в папке resources/newsound)
Примеры программ
Игра змейка


var iam = [];
var dir = 0;
var kx = [1,0,-1,0];
var ky = [0,1,0,-1];
var lifeCounter = 0;
var apple;

function genApple() {
apple.cursorX = Math.round(Math.random() * 15);
apple.cursorY = Math.round(Math.random() * 15);
}

function createApple() {
display.color(0xff);
apple = display.print("@");
genApple();
}

function createPlayer() {
display.color(0);
display.cursor(8, 8);
iam = [display.print("*")];
}

function eat() {
sound.play("mob.pig");
display.color(0);
display.cursor(apple.cursorX, apple.cursorY);
iam.push(display.print("*"));
genApple();
}

function init() {
createPlayer();
createApple();
}

function isEqual(o1, o2) {
return o1.cursorX == o2.cursorX && o1.cursorY == o2.cursorY;
}

function selfCross() {
for(var i = 1; i ‹ iam.length; i++) {
if(isEqual(iam[0], iam[i])) {
return true;
}
}
return false;
}

function update(time) {
lifeCounter++;
if(lifeCounter == 10) {
lifeCounter = 0;
for(var i = iam.length-1; i › 0; i--) {
iam[i].cursorX = iam[i-1].cursorX;
iam[i].cursorY = iam[i-1].cursorY;
}
iam[0].cursorX += kx[dir];
iam[0].cursorY += ky[dir];
if(iam[0].cursorX ‹ 0) iam[0].cursorX += 16;
if(iam[0].cursorY ‹ 0) iam[0].cursorY += 16;
if(iam[0].cursorX › 15) iam[0].cursorX -= 16;
if(iam[0].cursorY › 15) iam[0].cursorY -= 16;

if(selfCross()) {
sound.play("random.explode");
display.clear();
createPlayer();
createApple();
}
else if(isEqual(iam[0], apple))
eat();
}

if(key.press(200)) dir = 3;
else if(key.press(208)) dir = 1;
else if(key.press(203)) dir = 2;
else if(key.press(205)) dir = 0;
}

Объект color
Используется для формирования цвета по его компонентам:

rgb (r, g, b) - возвращает код цвета по трем компонентам и с alpha = 0xff, компоненты должны иметь значения от 0 до 255 (0 - 0xff)

rgba (r, g, b, a) - возвращает код цвета по всем 4м компонентам (аналогично rgb)

rgbf (r, g, b) - тоже самое, что rgb, только компоненты цвета должны быть заданы в float числами от 0 до 1

rgbaf (r, g, b, a) - аналогично rgba, только компоненты цвета должны быть заданы в float числами от 0 до 1
Объект user
Предоставляет доступ к некоторым параметрам игрока

name () - ник

x () - позиция X относительно проектора, в котором выполняется программа (нулевая точка это центр проектора)

y () - позиция Y относительно проектора

z () - позиция Z относительно проектора
Объект sys
log(text) - выводит в консоль указанную строку

use(filename) - загружает и выполняет код из указанного файла, причем filename это файл, который ищется от корня папки plugins с добавленным расширением js, т.е. если вызвать так: sys.use("script/prog"), то клиент попытается загрузить скрипт по адресу {папка репозиториев}/mgclient/plugins/script/prog.js

Метод use позволяет полностью перенести редактирование скриптов во внешний редактор. Достаточно в блокнот вставить одну строку:



Именно с указанием @ в начале имени файла, тогда клиент будет сам следить за изменениями в скрипте и автоматически перезагружать его. Текст подключаемого скрипта при этом это обычная программа для MCGL9.
Советы по написанию эффективного кода
   Программа в проекторе выполняется в отдельном потоке и никак не влияет на скорость рендера за исключением двух операций: добавление новой сущности методом print/icon/voxel и их очистка методом clear. Эти методы не могут одновременно выполняться с отрисовкой элементов на экране, поэтому пока элемент добавляется или очищается список, отрисовка будет ждать и соответственно наоборот: пока происходит отрисовка текущего кадра программа при попытке добавить новый элемент или очистить вывод будет ждать своей очереди. Чтобы такого не происходило не рекомендуется добавлять новые элементы или очищать их из метода update.
Вещи с ивентов
  Категория предметов, которые могут быть получены во время проведения некоторых праздничных событий или уже после них путем крафта составляющих компонентов. Каждую неделю Черный торговец выставляет случайный предмет на торги.
Список вещей с ивентов
Новый год 
День Святого Валентина 
День защитника Отечества 
8 марта 
1 апреля 
Пасха 
Хэллоуин 
День рождения MCGL 

(для просмотра списка предметов кликните на любую категорию)


BB-code статьи для вставки
Всего комментариев: 14
Th3rsh1fter2019-09-23 17:31:11
Хорошая вещь
OCTOPUS2019-09-25 08:46:51
Тут уже нужно видео с гайдами как пользоваться. И вообще - это не опасно, а то специалисты сейчас накалякают вредоносные проги.
admin2019-09-25 17:59:51
OCTOPUS писал(а):
И вообще - это не опасно, а то специалисты сейчас накалякают вредоносные проги.

По умолчанию скрипт выполняется только в доверенных зонах (в тех, где прописан игрок и в системных). Не рекомендуется менять эту настройку без явной необходимости.
Paddles_Redstone2019-09-27 16:41:25
А как вставить блокнов в МСГЛ 9 лет?
Shumiha2019-09-27 21:17:06
Paddles_Redstone писал(а):
А как вставить блокнов в МСГЛ 9 лет?

Press F (не рофл)
OCTOPUS2019-09-30 12:14:19
admin писал(а):
OCTOPUS писал(а):
И вообще - это не опасно, а то специалисты сейчас накалякают вредоносные проги.

По умолчанию скрипт выполняется только в доверенных зонах (в тех, где прописан игрок и в системных). Не рекомендуется менять эту настройку без явной необходимости.



Ну фиг знает, мало ли чего придумают. Лучше сделать какую то систему проверки кодов, допустим игрок пишет код и тестирует его где нибудь на Build, а после проверки получает его на нужном сервере.
Bone_Andrews2019-10-08 21:46:30
Сложновато...Действительно, гайд бы надо, либо инструкция пошаговая попроще.
Avdoss2019-10-17 08:41:51
Было бы здорово иметь метод, позволяющий использовать блок проектора в качестве источника сигнала (для ред. схем).
admin2019-10-30 17:47:54
Avdoss писал(а):
Было бы здорово иметь метод, позволяющий использовать блок проектора в качестве источника сигнала (для ред. схем).

Максимум, что возможно, это чтение сигнала, но никак не его генерация, т.к. программы выполняются только на стороне клиента.
Sucashi2019-10-31 10:57:52
Мне вообще почему-то не пришла мсгл 9 смотрю в бендер а её нету(
fzt2019-11-12 06:23:15
Будет добавлена возможность писать на джаве? Убогий синтаксис говно-скрипт хоть вешайся
fzt2019-11-14 05:52:45
Было бы здорово добавить соединение между экранами
Пример - игра для нескольких игроков
Pere3arpy3ka2021-06-15 10:02:59
А где информация про золотой?
Vano4ok2021-06-15 10:38:47
Pere3arpy3ka писал(а):
А где информация про золотой?

Ждемс
Комментарий
...