Режим разработки игр в формате мультиплеера теперь доступен всем пользователям, его можно переключить на странице разработки игры.
Рассмотрим Аперо 2.0-лок (с доступом к другим игрокам в пределах места)
В Аперо 2.0 хранение данных и доступ к ним организованы особым образом.
Персональные переменные объявляются и используются также, как и в Аперо 1.0.
\(жизнь=100)
В этом случае переменная была присвоена конкретным игроком, и относится только к нему. Используется для изменения состояний игрока, его характеристик, этапов прохождения и т.д.
Для текущего игрока, переменная доступна как \(жизнь), а для всех остальных игроков, переменная доступна в массиве данных \(МП.игроки). (МП от МультиПлеер) Структура этого массива следующая:
\(МП.игроки.количество=5)
Здесь 5 - это количество игроков, доступных в этом месте (или в этом регионе для Аперо 2.0-рег, про места и регионы отдельно ниже)
\(МП.игроки.номер1=Вася_Пупкин)
Массив с названиями ключей, в которых хранятся данные игроков. Почти совпадает с именем профиля в Аперо, с разницей лишь в том, что все пробелы и прочие потенциально опасные символы заменены на _
\(МП.игроки.Вася_Пупкин.жизнь=100)
Массив переменных одного из доступных игроков в этом месте.
То есть, когда Вася_Пупкин, запустил игру и выполнил \(жизнь=100), то для текущего игрока, находящегося в том же месте, эта же переменная будет выглядеть как \(МП.игроки.Вася_Пупкин.жизнь=100)
В массиве данных \(МП.игроки) доступны все игроки в том же месте, что и сам игрок, запустивший игру (но за исключением его самого).
\(МП.игроки.Вася_Пупкин.АПЕРО.гг.имя)
Имя - это служебная переменная обновляется автоматически при каждом переходе, содержит имя профиля Аперо.
\(МП.игроки.Вася_Пупкин.АПЕРО.гг.афк)
Афк - это служебная переменная обновляется автоматически при каждом переходе, содержит количество секунд с момента последнего действия игрока.
\(МП.игроки.Вася_Пупкин.АПЕРО.гг.пол)
Пол - это служебная переменная обновляется автоматически при каждом переходе, содержит пол игрока, заполненный в профиле Аперо, принимает значения 1 или 2, где 1 - мужской род, 2 - женский род.
Чтобы объявить Общие переменные, переменная должна начинаться с МП.
\(МП.погода="Солнечно")
В этом случае переменная была присвоена конкретным игроком, но доступна всем и везде. Используется для изменения состояний мира, его объектов, предметов в местах и т.д. Важно, чтобы эти изменения проходили контролируемо конкретным игроком (по условиям), а не постоянно неконтролируемо менялись каждым игроком.
\(жизнь=100)
Переменные, доступные везде.
\(Ч.сила босса=50)
Переменные, доступные в пределах части.
\(РЕГ.погода в регионе="солнечно")
Переменные, доступные в пределах региона.
\(ЛОК.видел сундук=1)
Переменные, доступные в пределах места.
Доступность определяется местом игрока, в котором он находится.
Под местом понимается нечто большее, чем локация в коде игры. Здесь игрок перемещается по игровому миру, если переходит по кнопке на локацию вида
\ч1.дом.гостиная
Назовем эту локацию "позиционная". В этом случае, игрок переместится в часть "1", в регион "дом", в место "гостиная".
При переходе на позиционную локацию также будут изменены служебные переменные \(Ч), \(РЕГ) и \(ЛОК), которые и определяют позицию игрока. В этом случае Ч будет равно 1, РЕГ будет равно "дом", а ЛОК будет равно "гостиная".
Платформа понимает, что игрок меняет свою позицию, если в названии локации, на которую он переходил по кнопке, первая буква "ч" (от часть), потом идет натуральное положительное число(номер части), потом точка(конец узла переменной) потом имя региона и места через точку. Имя локации может содержать более 3-х узлов через точки, в таком случае весь хвост будет относиться к месту. Например если перейти на \ч1.дом.гостиная.кровать то игрок переместится в часть "1", в регион "дом", в место "гостиная.кровать" (ЛОК будет равно "гостиная.кровать").
Если вы не хотите, чтобы игрок менял свою позицию, то для перехода по кнопке можно использовать любые другие имена локаций, кроме позиционных, например \Предметы.кровать
Если, находясь в позиции \ч1.дом.гостиная, присвоить \(ЛОК.видел сундук=1), то мы изменим переменную "видел сундук", относящуюся к месту "гостиная" в регионе "дом" части 1. Если после этого перейти по кнопке \(ч1.дом.коридор,Идти в коридор) и запросить значение \(ЛОК.видел сундук), то результат будет 0, так как мы запрашиваем локальную переменную из места "коридор", которая еще не была объявлена. Если опять вернуться по кнопке \(ч1.дом.гостиная,Идти в гостинную) и запросить значение \(ЛОК.видел сундук), то результат будет 1. Тем самым используя в начале имени переменной "ЛОК." мы используем только локальные переменные этого места, которые сохраняются в пределах текущего места.
Аналогично, можно использовать \(РЕГ.был в гостинной). Для примера, находясь в позиции \ч1.дом.гостиная можно присвоить \(РЕГ.был в гостинной=1), относящуюся к региону "дом" части 1. Если после этого перейти по кнопке \(ч1.дом.коридор,Идти в коридор) и запросить значение \(РЕГ.был в гостинной), то результат будет также 1.
Но если изменить позицию вместе с регионом, перейдя по кнопке \(ч1.улица.около подъезда,Выйти на улицу) и запросить значение \(РЕГ.был в гостинной), то результат будет 0, так как мы запрашиваем региональную переменную из региона "улица", которая еще не была объявлена.
Аналогично, можно использовать \(Ч.переменная доступная в пределах части).
Если имя переменной не начинается ни с "Ч.", ни с "РЕГ.", ни с "ЛОК.", например \(жизнь=100), то эта переменная будет доступна во всех частях регионах и местах.
Использование Общих переменных можно (и нужно) использовать одновременно с разделением по доступности.
Для объявления общей переменной, доступной в пределах места использовать \(МП.ЛОК.сундук открыт=1), для общей переменной, доступной в пределах региона использовать \(МП.РЕГ.температура в доме=25), а для общей переменной, доступной в пределах части использовать \(МП.Ч.жизнь босса=1).
Использование переменных через Ч, РЕГ и ЛОК напрямую влияет на ускорение работы игры. Не используйте имя переменной \(МП.открыт сундук=1), если эта переменная используется только в конкретном месте, и нигде больше не будет использоваться. Тем самым платформа будет зря подгружать эту переменную постоянно во всех других местах. Вместо этого используйте \(МП.ЛОК.открыт сундук=1). Даже если в другом месте будет другой сундук, эти два сундука никак не будут связаны между собой.
\(МП.рестарт,Начать сначала)
Если перейти по этой кнопке, то произойдет обнуление всех персональных переменных игрока и затрется позиция игрока.
\(МП.перезагрузка,Перезагрузить игру)
Если перейти по этой кнопке, то произойдет обнуление всех персональных переменных игрока и затрется позиция игрока, а также удалятся все общие переменные. Работает только в режиме разработки(сняв с публикации).
\МП.переход
Если выполнить переход на позиционную локацию, например \(ч1.дом.гостиная,Идти в гостинную), но локация \ч1.дом.гостиная не объявлена, то будет совершено перенаправление на локацию \МП.переход с тремя виртуальными параметрами \(Ч=1), \(РЕГ="дом") и \(ЛОК="гостиная") и позиция игрока будет изменена. В таком случае, кнопка была бы эквивалентна \(МП.переход(1;"дом";"гостиная"),Идти в гостинную).
Если перейти по кнопке МП.переход с 4-мя параметрами или более, например \(МП.переход(1;"дом";"гостиная";"минимализм"),Идти в гостинную), то для смены позиции игрока таким образом нужно будет объявить локацию с одним параметром или более, например \МП.переход(стиль).
Переменные, начинающиеся с % не сохраняются в БД. Удобно использовать для временных переменных или перебора массивов, чтобы не захламлять БД. А если объявлять через точку, например \(%.тмп) они еще и в режиме разработке не будут мозолить глаза в списке переменных.
К основной документации