Документация по синтаксису и командам для создания текстовых игр на Аперо.

Не зарегистрирован?
Тебе сюда!
Регистрация!

Войди без регистрации
через соц. сеть!

ИЛИ
После входа тебе будут доступны дополнительные текстовые онлайн игры, активно взаимодействующие с игроком, а так же многопользовательские текстовые квесты.
Сейчас в онлайне только 3 гостя.

В игре или на сайте ошибка?
Выдели текст и жми сюда или Ctrl+Enter
Разработчики скажут спасибо :)
Топ Разработка игр

Документация по синтаксису и командам для создания текстовых игр на Аперо.

Осторожно, Бета :)

Сейчас существует 2 режима разработки текстовых игр:

Основной режим Аперо 1.0, новичкам и малоопытным разработчикам рекомендуется использовать его. Создание игр для одного или нескольких игроков, данные о прохождении хранятся в отдельных сессиях конкретного игрока. Доступны сохранения, один игрок может иметь несколько веток прохождения.

Расширенный режим Аперо 2.0(в двух вариантах "лок" и "рег"). Режим разработки игр в формате мультиплеера, данные о прохождении всех игроков хранятся в одной базе данных. Общие данные доступны везде, а личные данные игрока могут быть доступны другим игрокам в пределах ЛОКАЦИИ или РЕГИОНА. Сохранения в общем понимании отсутствуют, все изменения и ходы игроков сохраняются в режиме реального времени и не пропадают при выходе из игры. Аперо 2.0-рег более ресурсоемкий вариант, рекомендуется использовать только в случае, если использование Аперо 2.0-лок не позволяет решить поставленную задачу.

Подробно о всех возможностях и синтаксису Аперо 2.0 на странице расширенной документации.

В документации могут встречаться пометки *Аперо 1.0 или *Аперо 2.0. Это означает, что данные функции доступны долько в том или ином режиме.

Обучение: Урок 1 Создание новой текстовой игры Список текстовых игр в разработке

Развернуть все Свернуть все


Локации должны иметь свои уникальные названия, то есть названия локаций не должны повторяться в пределах кода игры.

\имя локации

Название локаций не будет видно пользователю в процессе игры, это служебная информация для автора.

Названием локации может быть сочетание(эти же правила относится к именам переменных):

  • кириллических или латинских символов,
  • знаков нижнего подчеркивания,
  • цифр,
  • пробелов и точек.

Название локации должно содержать хотя бы один кириллический или латинский символ в нижнем регистре или знак нижнего подчеркивания.

В названии локации не рекомендуется использовать зарезервированные команды в верхнем регистре, такие как СТОП(end), КНОПКА(btn), ЕСЛИ(if), ТО(then), ИНАЧЕ(else), КАРТИНКА(image), ССЫЛКА(link), МУЗЫКА(music), ЗВУК(play) и д.р.

Примеры правильного объявления локаций(канонический вид):

\конструктор
\онлайн конструктор игр
\конструктор12
\конструктор_12
\конструктор.игр_12
\конструктор игр_12
\онлайн конструктор.игр_12

Удвоенные пробелы, знаки нижнего подчеркивания или точки распознаются как одиночные.

Пробелы или точки в начале и в конце названия локации отбрасываются.

Если в названии локации присутствуют точки:

  • Пробелы, примыкающие к точкам отбрасываются.
  • Каждая часть между точками должна содержать хотя бы один кириллический или латинский символ в нижнем регистре или знак нижнего подчеркивания
  • Каждая часть между пробелами должна содержать хотя бы один кириллический или латинский символ в нижнем регистре или знак нижнего подчеркивания

Регистр символов на уникальность имени локации не влияет, но нельзя использовать только ВЕРХНИЙ регистр.

Примеры объявления локаций, приводимых к каноническому:

\КоНсТрУКтор.игр_12
\ конструктор . игр_12
\конструктор.игр____12
\конструктор....игр_12
\конструктор   .игр_12
\  .. конструктор.   ..  .игр___12  ....  

будут приведены к

\конструктор.игр_12

Примеры ошибочного объявления локаций:

\12

Название локации должно содержать хотя бы один кириллический или латинский символ в нижнем регистре или знак нижнего подчеркивания.

\КОНСТРУКТОР

Название локации должно содержать хотя бы один кириллический или латинский символ в нижнем регистре или знак нижнего подчеркивания.

\конструктор.12

Каждая часть между точками должна содержать хотя бы один кириллический или латинский символ в нижнем регистре или знак нижнего подчеркивания

\конструктор 12

Каждая часть между пробелами должна содержать хотя бы один кириллический или латинский символ в нижнем регистре или знак нижнего подчеркивания

\конструктор-12
\конструктор+12
\конструктор№12

Названием локации может быть сочетание кириллических или латинских символов, знаков нижнего подчеркивания, цифр, пробелов и точек.

\ч1.гостиная
\ч1.гостиная.стол
\ч1.гостиная.выход
\ч1.коридор
\ч2.лес

Для обобщения локаций в древовидную структуру следует использовать точки в имени локации. Например, группировать локации в пределах областей и/или частей игры. Тем самым в списке локаций справа от редактора кода не будет длинного списка локаций.

СТОП (синоним "end") - зарезервированное слово

Чтобы остановить выполнение кода нужно написать так:

\СТОП

Обрати внимание на первый символ в строке "\" - это косая черта, наклоненная влево. Ее так же называют "обратный слэш".

Это специальный символ для платформы, чтобы она понимала, что это команда, а не обычный текст. Если слово "СТОП" в коде было бы написано без обратного слэша, то платформа просто вывела бы его пользователю на экран как обычный текст.

Чтобы понять, как работает команда стоп, выполним следующий пример:

Этот текст будет показан игроку.
\СТОП
А текст после команды стоп - нет.

Посмотрите на результат выполнения. Платформа показывает игроку первую строчку, потом встречает команду СТОП и прекращает выполнение. Все просто.

Само слово стоп тоже не будет видно пользователю в процессе игры, это служебная информация.

\СТОП(имя локации)

Выполнение текущей локации будет остановлено, но будет запущено выполнение локации "имя локации" (аналог goto в urql)

КНОПКА (синоним "btn") - зарезервированное слово

\КНОПКА(имя локации,Текст кнопки)

Будет выведена кнопка при нажатии на которую будет совершен переход на локацию "имя локации"(левая часть до первой "," в скобках), с текстом "Текст кнопки"(правая часть после первой "," в скобках),

\(имя локации,Текст кнопки)

Зарезервированное слово КНОПКА(btn) можно опустить. Кнопка будет функционировать по прежнему. (Рекомендованный способ использования)

Оформление: применяется ко всем кнопкам сразу. По отдельности пользуйтесь bb-кодами \(кнопка,[color=red]текст[/color])

\(АПЕРО.кнопка.полужирный=1)

Делает текст кнопок полужирным.

\(АПЕРО.кнопка.курсив=1)

Начертание текст кнопок курсивом.

\(АПЕРО.кнопка.цвет текста="#ff8800")

Меняет цвет текста кнопки, используются все виды цветового обозначения, такие как "rgb(12,12,12)", в 16-ричном виде "#000000", "#F00" и обычные "red","black".

\(АПЕРО.кнопка.цвет="red")

Меняет цвет фона кнопки, используются все виды цветового обозначения, такие как "rgb(12,12,12)", в 16-ричном виде "#000000", "#F00" и обычные "red","black".

\(АПЕРО.кнопка.шрифт="sans-serif")

Изменяет шрифт кнопок. Доступны sans-serif, serif, cursive, fantasy и unset(по умолчанию)

\(АПЕРО.кнопка.без подчеркивания=1)

Таким образом ваш текст в кнопке не будет подчеркиваться.

\(АПЕРО.кнопка.прозрачность=0.25)>

Делает текст прозрачным. Применяется от 0 до 1, где 0 это видимый 0.5 полупрозрачный а 1 невидимый.

\(АПЕРО.кнопка.высота текста=24)

Высота текста кнопок в пикселях (рекомендуемый диапазон от 12 до 32)

\(АПЕРО.кнопка.высота строки=30)

Высота строки в пикселях (рекомендуемый диапазон от 16 до 36)

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

\(имя переменной=2)

К именам переменных должны выполняться те же правила, что и для именам локаций

Будет объявлена переменная "имя переменной"(левая часть до "=" в скобках) и ей будет присвоено значение "2"(правая часть после "=" в скобках)

\(имя переменной для текста="текстовое значение")

Переменные могут содержать текстовые значения, для этого правую часть после "=" надо взять в кавычки.

Будет объявлена переменная "имя переменной для текста" и ей будет присвоено значение "текстовое значение"

\(пример=10-5*(3-2))

При присвоении значения можно использовать арифметические действия + - * /, использовать скобки.

Будет объявлена переменная "пример" и ей будет присвоено значение "5"(результат выполнения арифметических действий)

\(текстовая="строка")
\(пример="Составная "+текстовая)

Текстовые строки можно только складывать, тем самым в результате переменная "пример" получит значение "Составная строка"

\(переменная=3)
\(пример=10-5*(переменная-2))

Можно пользоваться уже объявленными переменными. (Любая не объявленная или удаленная переменная имеет значение по умолчанию 0.)

Если переменная не объявлена, то идет проверка, есть ли локация с таким именем. Если найдена, то содержимое этой локации будет выполнено, а результатом будет возвращена последняя выведенная строка.

Будет объявлена переменная "пример" и ей будет присвоено значение "5"(результат выполнения арифметических действий)

\(переменная=3)
\(пример\(переменная)=10-5*(переменная-2)

Можно использовать другие переменные и в имени новых переменных.

Будет объявлена переменная "пример3" (обратите на тройку в конце имени переменной) и ей будет присвоено значение "5"

\(пример=3)
\(пример=пример+1)

Можно пользоваться уже объявленными переменными.

Будет объявлена переменная "пример" и ей будет присвоено значение "4" (результат сложения "3 + 1")

\(переменная=0)

Для удаления переменной нужно присвоить ей значение 0 или "". При удалении переменной удалятся также все ее дочерние переменные(через точку). Например, удалив \(переменная=0), удалятся любые \(переменная.подуровень1) или \(переменная.подуровень1.что угодно) и подобные. Новое! К исключениям этого правила относится инвенатарь. Если переменная начинается с "_" то при ее удалении дочерние переменные удалены не будут.

\(КОНСТАНТА=5)
\(КОНСТАНТА=3)

Если имя переменной написано в ВЕРХНЕМ регистре - то это константа. Значение константы присваивается один раз во время объявления и не может быть изменено или удалено в дальнейшем.

Будет объявлена константа "КОНСТАНТА" и ей будет присвоено значение "5"

\(переменная.вложенная1=5)
\(переменная.вложенная2=2)
\(переменная.вложенная2.еще один уровень=4)

Для обобщения переменных в древовидную структуру следует использовать точки в имени переменной. Например, группировать переменные в пределах локаций и/или частей игры. Тем самым в режиме разработки при тестировании игры не будет длинного списка переменных.

Кроме того, есть одна особенность вложенных переменных. Если обнулить родительскую переменную, то обнулятся и все внутренние.

\(переменная=1)
\(переменная.вложенная2=2)
\(переменная.вложенная2.еще один уровень=4)
\(переменная.вложенная2=0)

После выполнения этого кода будет объявлена только "переменная=1", а "переменная.вложенная2" и, на что следует обратить внимание, "переменная.вложенная2.еще один уровень" будут равны 0!

Инвентарь это личные вещи игрока, которые он может получить или использовать в течение игры.

Отображается в правом верхнем углу окна браузера и может настраиваться.

Если имя переменной начинается со знака нижнего подчеркивания - то это инвентарь. Инвентарь и его количество отображается пользователю

\(_Молот Тора=1)

Таким образом вы создаете одну(1) единицу Молота Тора. Которая будет отображена просто как [ Молот Тора ], в правом верхнем углу экрана.

\(_Спички=5)

Все тоже самое но вы создали предмет в инвентаре в количестве 5 штук и без пробела, что будет отображено как [ Спички (5) ].

Инвентарными переменными можно пользоваться так же, как и обычными.

\(_Спички=_Спички+10)

К имеющимся спичкам будет добавлено еще 10 спичек.

\(_Жизнь.с единицей=1)

Это условие дает возможность отображать количество в инвентаре, даже если оно равно 1. Будет отображено как [ Жизнь (1) ].

Будьте внимательны при доведении его количества до нуля, ведь вместе с ней удалятся все дочерние переменные, такие как \(_Жизнь.с единицей=1)

Напомним, что все, что в количестве не равном одному будет отображаться с количеством АВТОМАТИЧЕСКИ.

Новое!
\(АПЕРО.инвентарь.название="Рюкзак:")

Вместо надписи "Инвентарь:" в начале списке инвентаря можно поставить собственную.

Новое!
\(АПЕРО.инвентарь.обработчик="Инвентарь.обработчик")

Если переменная объявлена, то весь инвентарь будет активным, при клике на любой будет осуществлен переход на локацию, в данном случае на "Инвентарь.обработчик" с одним(!) параметром, содержащий имя предмета.

\(_Топор=1)
\СТОП

\Инвентарь.обработчик(предмет)
Выбран инвентарь \(предмет).
\СТОП

При нажатии на топор в списке инвентаря будет совершен переход на Инвентарь.обработчик(предмет) и выведено "Выбран инвентарь Топор."

\(_Перчатка Мидаса.локация="Описание Перчатка Мидаса")

Таким образом предмет "Перчатка Мидаса" становится кнопкой и направляет на локацию -> "Описание Перчатка Мидаса". В этой комнате можно написать описание предмета или его предназначение, все зависит от вашей фантазии.

При взаимодействии с инвентарем через переменную "_{имя предмета}.локация", для добавления кнопки возврата в игру на локацию, откуда было вызвано действие, удобно использовать шаблон "Назад в инвентаре". Там же инструкция по его установке и пример использования.

\(_Тупой Нож.название="Острый Нож")

Таким образом вы поменяете название предмета в инвентаре на другое, с "Тупой Нож" на "Острый Нож".

\(_Золото.картинка="apero.ru/public/img/kartinka_zolota.png")

Это выражение даст вам возможность отобразить картинку слева от предмета в инвентаре, пример: Золото

Адрес указаевается аналогично адресу обычной картинки, то есть начиная с имени домена без http или https

Новое!

Если картинка отображается и игрок по ней кликнет, то позиция клика будет записана в переменные \(_Золото.сверху) и \(_Золото.слева)

\(_Золото.картинка.только=1)

Это даст вам возможность отображать только картинку предмета без текста справа.

\(_Предмет.инверсия=1)

Написав это количество предметов в инвентаре будет расположено слева от предмета.

\(_Фонарь.слева=" [")
\(_Фонарь.справа="] ")

Рассмотрим поподробнее:

\(_Фонарь=2)
\(_Фонарь.слева=" [")
\(_Фонарь.справа="] ")

- этот способ оформления инвентаря даст вам возможность писать слева, или справа, от количества предметов любые символы или буквы. До применения: Фонарь (2). После: Фонарь [2]

\(АПЕРО.инвентарь.слева=" [")
\(АПЕРО.инвентарь.справа="] ")

Приставка АПЕРО.инвентарь вместо названия предмета инвентаря присвоит значение ко всему инвентарю.

\(АПЕРО.инвентарь.скрыть=1)

Если объявлена эта переменная, то весь инвентарь будет скрыт от пользователя. Если удалить переменную \(АПЕРО.инвентарь.скрыть=0), то инвентарь будет снова показан.

\(АПЕРО.инвентарь)

Массив содержащий элементы с именами переменных инвентаря. Доступ к каждому по "АПЕРО.инвентарь.номерX", где X натуральное число от 1 до "АПЕРО.инвентарь.количество"


Как это все применить?

Для начала объявите предмет:

\(_Предмет=1)

Теперь можно приступить к оформлению:

\запуск
Ты взял патроны.
\(_Патроны=2)
\(_Патроны.слева=" [")
\(_Патроны.справа="] ")
\(_Патроны.картинка="patroni.png")
\(_Патроны.картинка.только=1)
\(_Патроны.инверсия=1)
\(_Патроны.локация="Осмотр патронов")
\СТОП

\Осмотр патронов
Патроны для дробовика. Осталось \(_Патроны) шт.
\(АПЕРО.режим вывода="добавить")
\СТОП

Скопируй и посмотри что получится. Ты поймешь, о чем идет речь.

Для отображения значений переменных или выполнения локаций:

\(переменная или локация)

На экран будет выведено значение переменной "переменная или локация". Обрати внимание, если переменная не была объявлена(или была удалена), будет совершено выполнение локации с именем "переменная или локация", после чего выполнение продолжается с позиции в текущей строке.

\(переменная=5)
Значение переменной = \(переменная). Продолжение текста.

Будет выведено "Значение переменной = 5. Продолжение текста."

Значение локации = \(локация). Продолжение текста.
\СТОП

\локация
текст из процедурной локации
\СТОП

Будет выведено "Значение переменной = текст из процедурной локации. Продолжение текста."

\(переменная или локация=5)
Значение переменной, а не локации = \(переменная или локация). Продолжение текста.
\СТОП

\переменная или локация
текст из процедурной локации
\СТОП

Если существует и переменная и локация, то будет получено значение переменной, локация выполняться не будет.

Будет выведено "Значение переменной, а не локации = 5. Продолжение текста."

\(переменная=локация)
\СТОП

\локация
текст из процедурной локации
\СТОП

Значениям переменных можно присваивать и результат выполнения локаций. Обрати внимание, переменной присваивается только последняя строчка из локации. Если в результате выполнения строчек в локации выведено больше одной, то все они, кроме последней, будут отображены пользователю, а только последняя будет использована как значение для переменной.

Будет объявлена переменная "переменная" и ей будет присвоено значение "текст из процедурной локации" (результат сложения "3 + 1")

ЕСЛИ (синоним "if") - зарезервированное слово

ТО (синоним "then") - зарезервированное слово

ИНАЧЕ (синоним "else") - зарезервированное слово

И (синоним "and") - зарезервированное слово

ИЛИ (синоним "or") - зарезервированное слово

\ЕСЛИ(_Спички>0) \ТО У тебя есть спички! \ИНАЧЕ У тебя нет спичек!

Проверка выполнения условия в скобках (_Спички>0), и если оно выполняется, то выполняется и код после условия(или после \ТО если не опущено) до конца строки или до команды \ИНАЧЕ. Если условие в скобках не выполняется, и есть команда \ИНАЧЕ, то выполнятся код после \ИНАЧЕ до конца строки.

\ЕСЛИ(_Спички>0) У тебя есть спички!

В однострочных условиях, если условие используется без "ИНАЧЕ", то зарезервированное слово \ТО можно опустить (но только в однострочных условиях, в многострочных указывать обязательно!)

\ЕСЛИ(_Спички>0 И бумага=1) У тебя есть спички и бумага!
\ЕСЛИ(_Спички=0 ИЛИ бумага=0) У тебя чего-то не хватает!

Условия можно объединять в логические связки с помощью И(and), ИЛИ(or) и пользоваться скобками

Между собой можно сравнивать как числа так и переменные. Операторы сравнения двух переменных:

= равно; > больше; < меньше; >= больше или равно;  <= меньше или равно; <> или != не равно
\ЕСЛИ(_Спички>0) \ТО (У тебя есть спички!
Строка2
Строка3
\) \ИНАЧЕ (У тебя нет спичек!
Строка2
Строка3
\)

Чтобы выполнить код из нескольких строк при прохождении условия, после \ТО (в многострочных условиях \ТО надо писать обязательно) надо поставить открывающуюся скобку, при том она должна быть на той же строчке: "\ТО (". В этом случае код будет выполняться до тех пор, пока не будет найдено "\)" (обратный слэш с закрывающейся скобкой).

Несколько строчек после \ИНАЧЕ будут выполнены аналогичны при НЕпрохождении условия, начиная c "(" и так же до "\)"

ВНИМАНИЕ, \ИНАЧЕ должно быть на одной строке с предыдущей закрывающей скобкой и новой откывающей: "\) \ИНАЧЕ ("

 \(массив=(1;-0.46;"Текст"))

Объявление массива: эквивалентно \(массив.номер1=1) \(массив.номер2=-0.46) \(массив.номер3="Текст") \(массив.количество=3)

\(массив(5)=7)

Объявление элемента массива: эквивалентно \(массив.номер5=7), на переменную \(массив.количество) не влияет.

ЦИКЛ (синоним "while") - зарезервированное слово

СДЕЛАТЬ (синоним "do") - зарезервированное слово

\ЦИКЛ (икс<5) \СДЕЛАТЬ \(икс)\(икс=икс+1)

Проверка выполнения условия в скобках "(икс<5)", и если оно выполняется, то выполняется код после \СДЕЛАТЬ (если не опущено) до конца строки, а после выполнения, будет заново проверка условия "(икс<5)", и опять, если оно выполняется, то выполняется код после \СДЕЛАТЬ. Таким образом код после \СДЕЛАТЬ будет выполняться до тех пор, пока выполняентся условие цикла "(икс<5)".

ВАЖНО: чтобы цикл не был бесконечным (что приведет к ошибке выполнения), после определенного количества повторов, условие должно прекратить выполняться. В данном примере после слова \СДЕЛАТЬ я с каждым повтором вывожу значение "икс" на экран, а затем увеличиваю значение переменной "икс" на 1. А это означает, когда после пяти итераций(повторов) значение переменной "икс" станет равным пяти, условие цикла "(икс<5)" не будет выполняться (5 < 5 не верно), и выполнение цикла на этом остановится. В результате этого кода будет написано в одну строку: 1234

\ЦИКЛ (икс<5) \(икс)\(икс=икс+1)

В однострочных циклах зарезервированное слово \СДЕЛАТЬ можно опустить

\ЦИКЛ (икс<5) \(икс)\(икс=икс+1)[br]

Для разрыва строк между итерациями (чтобы каждая цифра была написана в отдельной строке) в конце цикла следует написать ББ-код "[br]"

\ЦИКЛ (н<массив.количество) \(н=н+1)элемент\(н)=\(массив(н))[br]

Перебор элементов массива в цикле - если н не задано, то выполняется от 1 до массив.количество, при этом выводит с каждой новой строки элемент\(н) = (значение элемента).

Новое!
\(АПЕРО.массив.содержит("е";"а";"г"))

Первый параметр - элемент для поиска. Второй и далее имена массивов.

Возвращает имя первого массива, содержащий элемент для поиска (полное совпадение). Понятнее в примере ниже:

\(а=("б";"е"))
\(г=("д";"е"))
\(АПЕРО.массив.содержит("е";"а";"г"))

В этом примере вернет "а" - имя массива, в котором содержится первый параметр ("е").

Новое!
\(АПЕРО.массив.заменить("что";"чем";1))

Заменить массив с именем первого параметра, массивом с именем второго параметра. Третий параметр не обязателен. Если существует, то копируются ВСЕ дочерние переменные(через точку), а не только массивные. Если нужно заменить только массив.номерХ и массив.количество, не используйте третий параметр.

Возвращает ""(ничего). Понятнее в примере ниже:

\(а=("б";"е";"ж"))
\(г=("д";"в"))
\(г.доп=1)
\(г.номер5="текст")
\(АПЕРО.массив.заменить("а";"г"))

В результате массив "а" будет заменен на "г", а именно останется \(а.номер1="д") \(а.номер2="в") \(а.количество=2). Заменяемый массив "а" может быть и не объявлен. А если объявлен, то лишние элементы будут удалены.

\(г=("д";"в"))
\(г=44)
\(г.доп.переменная=1)
\(г.номер5="текст")
\(АПЕРО.массив.заменить("а";"г";1))

Так как третий параметр существует, в результате в переменную "а" будут скопированы все дочерние переменные "г", а именно \(а.номер1="д") \(а.номер2="в") \(а.количество=2) \(а=44) \(а.доп.переменная=1) \(а.номер5="текст").

Новое!
\(АПЕРО.массив.сортировать("имя массива";0))

Сортирует массив. Если второй параметр 0 или на задан, сортирует по возрастанию, если второй параметр равен 1, то сортирует по убыванию. Переменная "имя массива.количество" должно быть больше 0 и равна количеству элементов в массиве.

Возвращает ""(ничего). Понятнее в примерах ниже:

\(а=("2";"1";"-3";"5"))
\(АПЕРО.массив.сортировать("а"))

В результате массив будет таким: а.номер1=-3; а.номер2=3; а.номер3=2; а.номер4=5;

\(а=("2";"1";"-3";"5"))
\(АПЕРО.массив.сортировать("а";1))

В результате массив будет таким: а.номер1=5; а.номер2=2; а.номер3=1; а.номер4=-3;

\ЦИКЛ(икс<3) \СДЕЛАТЬ (
В начале итерации икс=\(икс)
\(икс=икс+1)
В конце итерации икс=\(икс)
[br]
\)

Аналогично многострочным условиям, в циклах чтобы выполнить код из нескольких строк, после \СДЕЛАТЬ (в многострочных циклах \СДЕЛАТЬ нельзя опускать) надо поставить открывающуюся скобку. В этом случае код будет выполняться до тех пор, пока не будет найдено "\)" (обратный слэш с закрывающейся скобкой), после чего вернется в начало цикла на первую строчку строчку "\ЦИКЛ(икс<5) \СДЕЛАТЬ (" для повторной проверки выполнения условия.

Результатом выполнения этого кода будет выполнено 3 итерации и написано 6 строк:

В начале итерации икс=
В конце итерации икс=1
В начале итерации икс=1
В конце итерации икс=2
В начале итерации икс=2
В конце итерации икс=3
\определить скорость(дистанция; время)
\(дистанция/время)
\СТОП

Кроме обычных локаций(локаций без параметров), можно создавать локации с параметрами. В данном примере я объявил локацию с именем "определить скорость" с двумя параметрами "дистанция" и "время".Количество параметров может быть любым, но не рекомендуется более 10. Параметры перечисляются после имени локации в скобках через ";" (через точку с запятой). Эти параметры можно использовать для чтения как локальные переменные; (тоесть они доступны только в пределах этой локации, и вызванных этой локацией внутренних)

Теперь, переходя на эту локацию, нужно передавать также значения для 2-х параметров, которые можно использовать для чтения как локальные переменные. Делается это так:

\(определить скорость(12;3))

Результатом выполнения этого кода будет число 4. Как это получилось? Здесь идет вызов локации "определить скорость" с двумя значениями для параметров: первое 12 и второе 3, которые написаны в скобках через точку с запятой. Далее движок находит объявленную локацию с двумя параметрами "\определить скорость(дистанция; время)", и последовательно объявляет локальные переменные "дистанция=12" и "время=3". далее выполнятся код локации "\(дистанция/время)" где дистанция(12) делится на время(3) и выводит ответ 4.

Обрати внимание, если количество параметров в вызываемой и объявленной локациях будут различаться, то движок выведет пустой результат!

Пользоваться локациями с параметрами можно и через кнопки

\(определить скорость(12;3),Какая скорость?)

В этом случае на экран будет выведена кнопка с текстом "Какая скорость?", при нажатии на которую пользователь попадет на локацию "определить скорость" с двумя значениями для параметров 12 и 3.

Обрати внимание, если количество параметров в вызываемой и объявленной локациях будут различаться, то движок выведет, что локация не найдена!

Поддерживаются некоторые BB-коды:

(ж)Жирный(/ж) или [b]Жирный[/b]

Текст будет выведен так: Жирный

(к)Курсив(/к) или [i]Курсив[/i]

Текст будет выведен так: Курсив

(п)Подчеркнутый(/п) или [u]Подчеркнутый[/u]

Текст будет выведен так: Подчеркнутый

(з)Зачеркнутый(/з) или [c]Зачеркнутый[/c]

Текст будет выведен так: Зачеркнутый

Новое!
(иконка=smile-o) или [icon=smile-o]

Будет выведена иконка Font Awesome (такие как в меню сайта). Список доступных иконок здесь: https://fontawesome.ru/all-icons/

(цвет=красный)Красный(/цвет) или [color=red]Красный[/color] [color=#FF8800]Оранжевый[/color] [color=rgba(0,0,255,0.5)]Полупрозрачный синий[/color]

Текст будет соответственно Красный Оранжевый Полупрозрачный синий Среди стандартных цветов поддерживаются следующие имена (если тебе не подходит не один из этих цветов, пользуйся 16-ричными кодами #FF8800): red красный, orange оранжевый, yellow желтый, green зеленый, blue голубой, indigo синий, violet сиреневый, purple фиолетовый, pink розовый, silver серебряный, gold золотой, beige бежевый, brown коричневый, gray серый, black черный и white белый.

(шрифт=sans-serif)Шрифт(/шрифт) или [font=sans-serif]Шрифт[/font]

Текст будет выведен так: Шрифт

(размер=26)Размер(/размер) или [size=26]Размер[/size]

Текст будет выведен так: Размер

(таблица)
(строка)
(столбец)Строка 1 Столбец 1(/столбец)(столбец)Строка 1 Столбец 2(/столбец)(столбец)Строка 1 Столбец 3(/столбец)
(/строка)
(строка)
(столбец)Строка 2 Столбец 1(/столбец)(столбец)Строка 2 Столбец 2(/столбец)(столбец)Строка 2 Столбец 3(/столбец)
(/строка)
(строка)
(столбец)Строка 3 Столбец 1(/столбец)(столбец)Строка 3 Столбец 2(/столбец)(столбец)Строка 3 Столбец 3(/столбец)
(/строка)
(/таблица)
или
[table]
[tr]
[td]Строка 1 Столбец 1[/td][td]Строка 1 Столбец 2[/td][td]Строка 1 Столбец 3[/td]
[/tr]
[tr]
[td]Строка 2 Столбец 1[/td][td]Строка 2 Столбец 2[/td][td]Строка 2 Столбец 3[/td]
[/tr]
[tr]
[td]Строка 3 Столбец 1[/td][td]Строка 3 Столбец 2[/td][td]Строка 3 Столбец 3[/td]
[/tr]
[/table]

Таблица. Будет выглядеть так:

Строка 1 Столбец 1Строка 1 Столбец 2Строка 1 Столбец 3
Строка 2 Столбец 1Строка 2 Столбец 2Строка 2 Столбец 3
Строка 3 Столбец 1Строка 3 Столбец 2Строка 3 Столбец 3

Внимание, если в конструкции \ЕСЛИ (условие) после \ТО идет открывающаяся скобка, то движок воспринимает это как многострочное условие, поэтому вместо(таблица)(строка)(столбец) лучше в этом случае использовать аналоги [table][tr][td]

Всегда проверяйте, закрыты ли ли все таблица строки и столбцы! Особенно, если хотите задать вопрос, почему все поехало, почему не загружается сохраненная игра(на локации где не закрыта таблица), почему не отрабатывают другие функции.

Если вы не хотите, чтобы таблица растягивалась на 100% ширины экрана вместо [table][/table] используйте коды [tab][/tab]

Можно отобразить таблицу с границами. Для этого надо указать толщину границы, например 3 пикселя, тогда в первой строчке вместо (таблица) или [table] надо написать (таблица=3) или [table=3].

Можно задать фиксированную ширину столбца в пикселях. Для этого вместо (столбец) или [td] надо написать (столбец=100) или [td=100]

Можно задать цвет фона столбца. Для этого вместо (столбец) или [td] надо написать (столбец #ff9999) или [td #ff9999]. Можно использовать любые цвета, как описано выше. Если требуется одновременно задать и ширину столбца, и его цвет, то надо написать (столбец=100 #ff9999) или [td=100 #ff9999]

Можно некоторые столбцы сделать заголовками. Для этого вместо (столбец) или [td] надо написать (заголовок) или [th]. Эти заголовки аналогичны обычным столбцам, только различаются по цвету фона.

Можно задать фиксированную высоту строки в пикселях. Для этого вместо (строка) или [tr] надо написать (строка=150) или [tr=150]

Можно задать цвет фона всей строки. Для этого вместо (строка) или [tr] надо написать (строка #ff9999) или [tr #ff9999]. Можно использовать любые цвета, как описано выше. Если требуется одновременно задать и высоту строки, и ее цвет, то надо написать (строка=150 #ff9999) или [tr=150 #ff9999]

(таблица=3)
(строка)
(заголовок=100)Строка 1 Столбец 1(/заголовок)(заголовок)Строка 1 Столбец 2(/заголовок)(заголовок)Строка 1 Столбец 3(/заголовок)
(/строка)
(строка)
(столбец)Строка 2 Столбец 1(/столбец)(столбец)Строка 2 Столбец 2(/столбец)(столбец #9999ff)Строка 2 Столбец 3(/столбец)
(/строка)
(строка=150 #ff9999)
(столбец)Строка 3 Столбец 1(/столбец)(столбец)Строка 3 Столбец 2(/столбец)(столбец)Строка 3 Столбец 3(/столбец)
(/строка)
(/таблица)
или
[table=3]
[tr]
[th=100]Строка 1 Столбец 1[/th][th]Строка 1 Столбец 2[/th][th]Строка 1 Столбец 3[/th]
[/tr]
[tr]
[td]Строка 2 Столбец 1[/td][td]Строка 2 Столбец 2[/td][td #9999ff]Строка 2 Столбец 3[/td]
[/tr]
[tr=150 #ff9999]
[td]Строка 3 Столбец 1[/td][td]Строка 3 Столбец 2[/td][td]Строка 3 Столбец 3[/td]
[/tr]
[/table]

Таблица с границами толщиной 3, с заголовками в первой строке, с фиксированной шириной 100 для первого столбца, фиксированной высотой 150 и светлокрасным цветом фона для третьей строки и светлосиним цветом фона для третьего столбца второй строки будет выглядеть так:

Строка 1 Столбец 1Строка 1 Столбец 2Строка 1 Столбец 3
Строка 2 Столбец 1Строка 2 Столбец 2Строка 2 Столбец 3
Строка 3 Столбец 1Строка 3 Столбец 2Строка 3 Столбец 3
(линия) или [hr]

Горизонтальная линия. Будет выглядеть так:


Можно задать фиксированную толщину линии в пикселях. Для этого вместо (линия) или [hr] надо написать (линия=4) или [hr=4]

Можно задать цвет линии. Для этого вместо (линия) или [hr] надо написать (линия #ff9999) или [hr #ff9999]. Можно использовать любые цвета, как описано выше. Если требуется одновременно задать и толщину линии, и ее цвет, то надо написать (линия=4 #ff9999) или [hr=4 #ff9999]

(разрыв) или [br]

Разрыв строки. Несколько [br] подряд будут работать как один, так как пустые строки пропускаются. Если же пользоваться \(АПЕРО.блок.отступ.снизу=100) лень, то можно схитрить, вставив между разрывами секретный непечатаемый символ &nbsp;

(пробел) или [s]

Пробел

(пусто) или []

Строка нулевой длины (пусто)

Для того, чтобы не запутаться в собственном коде игры, нужно комментировать свой код:

//комментарий до конца строки

Если в тексте поставить два слэша подряд, то это однострочный комментарий до конца строки. Все что написано после - видно только автору.

/* Комментарий
в несколько
строк */

Комментарий в несколько строк или многострочный комментарий. Все, что заключено между /* и */ будет игнорироваться платформой, и видно только автору. Таким образом можно комментировать целые участки кода или скрывать локации в разработке.

\(текстовая="строка")
\(пример="Составная "+текстовая)

Текстовые строки можно только складывать, тем самым в результате переменная "пример" получит значение "Составная строка"

Для работы с текстовыми переменными доступны следующие функции

\(АПЕРО.строка.регулярка("Угадай слово!";"/дАй/ui"))

Регулярное выражение строки на "/дАй/ui", вернет 1; если не указывать i в конце, отвечающую за регистронезависимость, то результат уже будет 0. Подробнее о регулярных выражениях здесь. Если указать третий параметр, например \(АПЕРО.строка.регулярка("Угадай слово!";"/a/ui";1)), то вернет количество вхождений.

\(АПЕРО.строка.длина("Угадай слово!"))

Определить длину строки, вернет 13

\(АПЕРО.строка.часть("Угадай слово!";8))

Получить часть строки начиная с 8-го символа, вернет "слово!"

\(АПЕРО.строка.часть("Угадай слово!";2;3))

Получить часть строки начиная с 2-го символа, не больше 3-х, вернет "гад"

\(АПЕРО.строка.позиция("Угадай слово!";"слово"))

Определить позицию "слово" в строке, вернет 8

Новое!
\АПЕРО.строка.шлейф("строка ";3) = строка строка строка

Возвращает строку, содержащую символы или слова(первый параметр), повторяемые необходимое количество раз(второй параметр).

Новое!
\(АПЕРО.строка.регистр("теКСт";0))

Меняет регистр текстовой переменной в первом параметре. Если второй параметр равен 0 или отсутствует, то преобразует в нижний регистр (выведет "текст"). Если второй параметр равен 1, то преобразует в верхний регистр (выведет "ТЕКСТ"). Если второй параметр равен 2, то первую букву преобразует в нижний регистр (выведет "теКСт"). Если второй параметр равен 3, то первую букву преобразует в верхний регистр (выведет "ТеКСт").

Новое!
\(АПЕРО.словоформы.глагол.првр("ходил");2)

Преобразовать глагол прошедшего времени в соотвествии с родом и числом. 1-й входной параметр - глагол в прошедшем времени в единственном числе мужского рода. 2-й параметр число от 1 до 4, где 1 - мужской род, 2 - женский род, 3 - средний род, 4 - множественное число. 2-й параметр не обязателен, в этом случае будет подставлено значение из АПЕРО.гг.пол. (это значение автоматически заполняется значением из профиля участника). Если \(АПЕРО.гг.пол) не объявлена, будет использовано значение 1(мужской род).

Новое!
\(АПЕРО.словоформы.род("должен";"должна"))

Выбирает один из параметров, в зависмости от рода. 1-й параметр - если АПЕРО.гг.пол=1; 2-й параметр - если АПЕРО.гг.пол=2; 3-й параметр - если АПЕРО.гг.пол=3; 4-й параметр - если АПЕРО.гг.пол=4.

Новое!
\(АПЕРО.словоформы.числа(21;"год";"года";"лет"))

Выбирает 2-й, 3-й или 4-й параметр, в зависмости от числа. 1-й параметр - само число; 2-й параметр - слово в склонении чисел заканчивающихся на 1 (кроме второго десятка); 3-й параметр - слово в склонении чисел заканчивающихся на 2-4 (кроме второго десятка); 4-й параметр - слово в склонении чисел заканчивающихся на 5-9,0 + второй десяток.

\ВВОД(Имя)

Конструкция для ввода пользователем текстового значения, которое будет записано в переменную Имя при следующем переходе.

\ВВОД(Имя,"Вася")

Конструкция для ввода пользователем текстового значения, которое будет записано в переменную Имя при следующем переходе, по умолчанию будет записан текст из второго параметра.

\(АПЕРО.ввод.подсказка="Введите имя")

Если объявлена, то в поле \ВВОД будет добавлена подложка(placeholder) и подсказка при наведении.

\(АПЕРО.ввод.локация="локация")

Если объявлена, то к полю \ВВОД будет добавлена кнопка с галочкой V, при нажатии на которую будет совершен переход на указанную локацию. Также переход будет совершен при нажатии Enter в этом поле.

\(АПЕРО.режим вывода="добавить")

Изменят режим вывода информации при переходах по кнопкам и в \АПЕРО.события. Переменная не хранится, а обнуляется после выполнения. То есть используется только для текущего одноразового выполнения.

"добавить" - добавляет результат выполнения в конец контейнера для вывода текста. Старый текст не затирается, все кнопки(кроме той, по которой кликнули) остаются активными. Кнопка, по которой кликнули становится не доступной, текст кнопки закрывается [квадратными скобками].

"повторить" - добавляет результат выполнения в конец контейнера для вывода текста. Старый текст не затирается, все кнопки(включая ту, по которой кликнули) остаются активными.

"выполнить" - после выполнения локации не изменяет содержимого контейнера для вывода текста. Остается висеть иконка вечной загрузки, хотя другие кнопки доступны. Используется для изменения переменных, на которые, например, могут реагировать АПЕРО.события. Также, при объявлении в локации \АПЕРО.события запрещает выводить текст. Осторожно, может ввести в недоумение игрока)

"развернуть" - заменяет кнопку результатом выполнения. Обратите внимание, что при типе блоков \(АПЕРО.блок.тип="параграф") (по умолчанию) блок P будет вложен внутрь существующего, что создает непредвиденный эффект "пустых строк" вокруг вставленного текста при наведении. Для устранения этих проблем попробуйте поменять АПЕРО.блок.тип, например, на контейнер. В АПЕРО.события не работает.

"динамичный"("динамичный.до") - если динамичный контейнер еще не был добавлен, то добавляет результат выполнения в конец(в начало) контейнера для вывода текста. Если динамичный контейнер уже был добавлен, то заменяется его содержимое. Старый текст не затирается, все кнопки(включая ту, по которой кликнули) остаются активными.

\АПЕРО.до

Локация, которая выполняется каждый раз перед выполнением локации, нажатой по кнопке пользователем.

\АПЕРО.после

Локация, которая выполняется каждый раз после остановки выполнения кода, перед ожиданием действий от пользователя.

\АПЕРО.события

Локация, которая выполняется в режиме реального времени. Автоматический переход совершается примерно раз в секунду.

Используется для срабатывания таймеров, проверки условий для вывода статичной информации. Если игрок не был активен более 5 минут или покинул игру, выполнение останавливается.

Если ты хочешь создать в игре таймер, после срабатывания которого будет совершен переход на другую локацию, то можно воспользоваться шаблоном "Таймер". Там же инструкция по его установке и пример использования.

\(АПЕРО.локация.выбранная)

Переменная содержит имя локации, выбранной пользователем при последнем нажатии на кнопку. То, что содержится в первой части кнопки до запятой. Не меняется при внутренних переходах через \(локация). Например:

\(город,Идти в город)
\(лес,Идти в лес)
\СТОП

\город
\(АПЕРО.локация.выбранная)
\СТОП

\лес
\(АПЕРО.локация.выбранная)
\СТОП

Результатом выполнения будет текст "город" или "лес", в зависимости от того, что выбрал пользователь.

\(АПЕРО.локация.возврат)

Переменная содержит имя локации, выбранной пользователем при ПРЕДпоследнем нажатии на кнопку. Не меняется при внутренних переходах через \(локация). Удобно использовать в кнопках для возврата на предыдущую локацию или в локациях описания инвентаря(об этом ниже). Например:

\(горы,Идти в горы)
\(лес,Идти в лес)
\СТОП

\лес
Ты в лесу. \(горы,Идти в горы)
\(ничего нет,Заглянуть в кусты)
\СТОП

\горы
Ты в горах. \(лес,Идти в лес)
\(ничего нет,Заглянуть в пещеру)
\СТОП

\ничего нет
Здесь ничего нет.
\(\(АПЕРО.локация.возврат),Назад)
\СТОП

Рассмотрим строку "\(\(АПЕРО.локация.возврат),Назад)" - это создание кнопки с текстом "Назад", а при нажатии на нее мы попадем на локацию, которая содержится в переменной "АПЕРО.локация.возврат"; тоесть в лес или горы, в зависимости от того, где была нажата кнопка.

\(АПЕРО.локация.текущая)
\(АПЕРО.локация.предыдущая)

Переменные содержат имя локации, на которую был совершен последний и ПРЕДпоследний переход. Например:

\(лес,Идти в лес)
\СТОП

\лес
Ты в лесу.
Текущая локация1: "\(АПЕРО.локация.текущая)"
Предыдущая локация1: "\(АПЕРО.локация.предыдущая)"
\(горы)
Ты опять в лесу.
Текущая локация3: "\(АПЕРО.локация.текущая)"
Предыдущая локация3: "\(АПЕРО.локация.предыдущая)"
\СТОП

\горы
Ты в горах.
Текущая локация2: "\(АПЕРО.локация.текущая)"
Предыдущая локация2: "\(АПЕРО.локация.предыдущая)"
\СТОП

В результате будет выведено:

Ты в лесу.
Текущая локация1: «лес»
Предыдущая локация1: «»
Ты в горах.
Текущая локация2: «горы»
Предыдущая локация2: «лес»
Ты опять в лесу.
Текущая локация3: «лес»
Предыдущая локация3: «горы»

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

\(АПЕРО.конец=1)

Эта переменная объявляется в той локации в игре, где игрок доходит до логической концовки (победа или поражение). Вместе с выводом текста локации интерфейс сайта объявит игроку об окончании игры и предложит игроку оставить комментарий об игре.

Переменная автоматически обнуляется после остановки выполнения кода. Используется для сбора статистики.

\(АПЕРО.очки)

Числовая переменная от 0 до 99 999 999

Начислять за успешное выполнение или отнимать за плохие действия со стороны игрока. Используется для сбора статистики.

\(АПЕРО.прохождение)

Числовая переменная от 0 до 100

Процент прохождения игры. Увеличивать по мере прохождения игры таким образом, чтобы к последней локации набрать 100%. Используется для сбора статистики.

\(АПЕРО.стиль="ночь")

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

\(АПЕРО.фон="#FFDDB4")

Смена цвета фона на произвольный. Не противоречит стилям "АПЕРО.стиль", тоесть можно сменить стиль на ночной и выбрать цвет отличный от черного (но какой-то темный, чтобы текст читался)

\(АПЕРО.блок.абзац=30)

Отступ первой строки абзаца в пикселях. Если указать "нет", то будет установлен нулевой отступ.

\(АПЕРО.блок.скругление=30)

Радиус скругления границ блока в пикселях. Если указать "нет", то будет скругление будет выключено.

\(АПЕРО.блок.шаблон="картинка")

Вывод следующего блока(только следующего!) будет в соответствии с шаблоном "картинка" (по центру, отступы, выключена подсветка при наведении на блок и отступ первой строки) Пока поддерживается только шаблон "картинка". Если хочешь продолжать вывод дальше по шаблону, объяви переменную "АПЕРО.блок.шаблон.закрепить"

Переменная автоматически обнуляется после вывода первого блока, если не объявлена переменная "АПЕРО.блок.шаблон.закрепить"

\(АПЕРО.блок.шаблон.закрепить=1)

Вывод всех блоков будет в соответствии с шаблоном, пока объявлена эта переменная.

\(АПЕРО.блок.тип="контейнер")

Если тип блока - контейнер, то не будет подсветки при наведении, отступа первой строки. Доступны "контейнер"(div), "в строку"(span) , "выключить"(без добавления оформляющих тэгов) и "параграф"(p)(по умолчанию)

\(АПЕРО.блок.выравнивание текста="по правому краю")

Выравнивание текста(и картинок) внутри блока. Доступны "по ширине", "по правому краю", "по левому краю" и "по центру"(по умолчанию).

\(АПЕРО.блок.цвет текста="red")

Задать цвет для текста. Доступны стандартные именные "red","black" и т.д., в 16-ричном виде "#000000", "#FF0000" и т.д., и в "rgba(255,255,255,0.7)"

\(АПЕРО.блок.шрифт="sans-serif")

Изменяет шрифт блока. Доступны sans-serif, serif, cursive, fantasy и unset(по умолчанию)

\(АПЕРО.блок.высота текста=22)

Высота текста в пикселях (рекомендуемый диапазон от 12 до 32)

\(АПЕРО.блок.высота строки=24)

Высота строки в пикселях (рекомендуемый диапазон от 12 до 32)

\(АПЕРО.блок.ширина=80)

Ширина блока. Если объявлена переменная "АПЕРО.блок.ширина.в процентах", то ширина от 0 до 100 и измеряется в процентах, если не объявлена, то ширина в пикселях.

\(АПЕРО.минимальная ширина=400)

Можно задать минимальную ширину в пикселях контейнера с игрой. Полезно при использовании изображений, размер которых не должен адаптивно уменьшаться при запуске на мобильных устройствах с малой шириной экрана. Аналогично можно использовать \(АПЕРО.минимальная высота=600)

\(АПЕРО.блок.скрыть=1)

Скрыть блок. Если переменная объявлена, блок не будет отображен пользователю.

\(АПЕРО.блок.позиция="относительная")

Позиция блока. Доступны "относительная", "абсолютная", "фиксированная" и "статичная"(по умолчанию).

\(АПЕРО.блок.слева=320)

Позиция блока слева(зависит от АПЕРО.блок.позиция). Если объявлена переменная "АПЕРО.блок.слева.в процентах", то позиция слева от 0 до 100 и измеряется в процентах, если не объявлена, то позиция слева в пикселях. Если это значение установлено, а значение "АПЕРО.блок.позиция" не установлено, то "АПЕРО.блок.позиция" используется как "относительная".

\(АПЕРО.блок.сверху=90)

Позиция блока сверху(зависит от АПЕРО.блок.позиция). Если объявлена переменная "АПЕРО.блок.слева.в процентах", то позиция сверху от 0 до 100 и измеряется в процентах, если не объявлена, то позиция сверху в пикселях. Если это значение установлено, а значение "АПЕРО.блок.позиция" не установлено, то "АПЕРО.блок.позиция" используется как "относительная".

\(АПЕРО.блок.выравнивание блока="по правому краю")

Выравнивание блока по краю при ширине блока менее 100%. Доступны "по правому краю", "выключить" и "по левому краю"(по умолчанию).

\(АПЕРО.блок.обтекание="заново")

Обтекание текущего блока относительно предыдущих блоков с "шириной" менее 100% и установленным значением "выравнивание блока". Если "заново", то отменить обтекание текущего блока относительно предыдущих. Если "включено", то обтекание в стандартном режиме(по умолчанию).

\(АПЕРО.блок.отступ.общий=5)

Отступ блока со всех строн на заданное количество пикселей.

\(АПЕРО.блок.отступ.слева=5)
\(АПЕРО.блок.отступ.справа=5)
\(АПЕРО.блок.отступ.сверху=5)
\(АПЕРО.блок.отступ.снизу=5)

Отступ блока с соответствующей сторны на заданное количество пикселей. Игнорируется, если объявлена переменная "АПЕРО.блок.отступ.общий".

\(АПЕРО.блок.внутренний отступ.общий=5)

Внутренний отступ блока со всех строн на заданное количество пикселей.

\(АПЕРО.блок.внутренний отступ.слева=5)
\(АПЕРО.блок.внутренний отступ.справа=5)
\(АПЕРО.блок.внутренний отступ.сверху=5)
\(АПЕРО.блок.внутренний отступ.снизу=5)

Внутренний отступ блока с соответствующей сторны на заданное количество пикселей. Игнорируется, если объявлена переменная "АПЕРО.блок.внутренний отступ.общий".

Для использования анимаций, сначала надо полноценно научиться управлять блоками из предыдущего пункта.

\(АПЕРО.анимация=0)

Очистить переменную для следующих анимаций

АПЕРО.анимация.номер{N}

Массив анимаций где {N} {1,2,...,АПЕРО.анимация.количество}

\(АПЕРО.анимация.количество=3)

Не забывайте после создания массива указывать его размерность

\(АПЕРО.анимация.повтор=2000)

Включить анимацию заново через указанное количество мс (не может быть меньше 50мс)

\(АПЕРО.анимация.пауза=2000)

Отложить запуск анимации на указанное количество мс

\(АПЕРО.анимация.пауза.в очередь=1)

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

\(АПЕРО.анимация.номер1.прозрачность=0.9)

Добавить прозрачность 90% (в диапазоне от "нет", 0.001 до 1)

\(АПЕРО.анимация.номер1.прозрачность.время=1500)

Время анимации в мс (по умолчанию время выполнения анимации 1000мс или 1 секунда)

Список доступных для анимации свойств: прозрачность, высота, высота текста, высота строки, ширина, отступ.общий(если не объявлен, то доступны отступ.слева, отступ.справа, отступ.сверху, отступ.снизу)

Внимание, для примера, как использовать многие из этих штук, открыт исходный код игры Демонстрация и скачать исходный код

Таймер в Аперо, это динамический элемент, отображающий изменяющееся со временем числовое или текстовое значение, не обращаясь к серверу. Также позволяет осуществлять переход на локацию, не дожидаясь действий игрока.

С помощью таймера также можно осуществить переход на локацию по истечении определенного времени.

Максимальное время работы таймеров 5 минут, после чего таймеры выключаются, так как игрок более 5 минут не совершал никаких действий, а соотвественно считается что он не онлайн.

Вызывается служебной командой \ТАЙМЕР и может иметь от 1 до 7 параметров, первые три из которых могут быть текстовыми.

\ТАЙМЕР(7)

Первый параметр - начальное значение, с которого идет отсчет.

Таймер от 7 до 0.

\ТАЙМЕР(7,15)

Второй параметр - конечное значение, до которого идет отсчет. Может быть меньше начального, тогда отсчет будет в обратную сторону. По умолчанию равен 0.

Таймер от 7 до 15

\ТАЙМЕР("день", "ночь") 

Если начальное или конечное значение это текст, а не число, то происходит смена с начального значения на конечное и обратно.

Сменяемые значения день/ночь

\ТАЙМЕР(7,15,"локация")

Таймер при превышении конечного значения переходит на указанную в третьем параметре локацию, если это текстовое значение.

\ТАЙМЕР(7,15,"СТОП")
Таймер при превышении конечного значения останавливается, если в третьем параметре указано текстовое значение с служебным словом "СТОП".
\ТАЙМЕР(7,15,3)

Таймер при превышении конечного значения "обнуляет" на числовое значение в третьем параметре и продолжает работать. Значение обнуления(третий параметр) и начальное значение(первый параметр) должны быть или оба больше, или оба меньше конечного значения(второй парметр), иначе значение обнуления будет игнорировано.

\ТАЙМЕР(7,15,3,2)

4-й параметр - определяет шаг, с которым меняется значение. Натуральное положительное число, по умолчанию 1. Здесь будет выведен таймер с шагом 2, то есть будет счетчик 7-9-11...

\ТАЙМЕР(7,15,3,2,3)

5-й параметр - определяет минимальное число разрядов, из которого состоит число, и если не хватает, то дополняет нулями. Натуральное положительное, по умолчанию 1. Здесь будет выведен таймер с минимальным числом разрядов 3, то есть будет счетчик 007-009-011...

\ТАЙМЕР(7,15,3,2,3,2500)

6-й параметр - если больше или равно 50, то интервал в миллисекундах через которое будет обновляться таймер. Натуральное положительное число, по умолчанию интервал обновления 1000. Здесь будет выведен таймер обновляющийся каждые 2,5 секунд.

\ТАЙМЕР(7,15,3,2,3,4)

6-й параметр - если от 1-го до 49-ти, то это номер таймера, который не обновляется сам по времени, а ждет пока его обновит по номеру другой таймер. По умолчанию не определено. Здесь будет выведен таймер, ожидающий обновления по его номеру 4.

\ТАЙМЕР(7,15,3,2,3,2500,4)

7-й параметр - при превышении конечного значения обновляет другой таймер под этим номером. Натуральное положительное число от 1-го до 49-ти. По умолчанию не определено. Здесь будет выведен таймер, который, при превышении значения 15 обновит таймер под номером 4. С помощью связки параметров 6 и 7 можно добиться обновления таймеров каскадом.

Новое!
\ТАЙМЕР(7,15,3,2,3,2500,4,1)

8-й параметр — скрыть таймер. Если объявлен и не 0, то все действия будут происходить, но сами цифры не будут отображаться.

\ТАЙМЕР(2,0,"локация2",1,2,5):\ТАЙМЕР(20,0,59,1,2,1000,5)

Обратный отсчет 2 минуты 20 секунд с переходом на "локация2"

\ТАЙМЕР(31,31,1,1,1,13,14) \ТАЙМЕР("мая", "июня", "СТОП", 1, 1, 14), время \ТАЙМЕР(23,23,0,1,2,12,13):\ТАЙМЕР(55,59,0,1,2,1000,12)

4 зависимые таймера, увеличивают соседний при превышении конечного значения, после 31 мая, время 23:59 отобразится 1 июня, время 00:00

ТАЙМЕР(31,31,1,1,1,13,14) :таймер №13(6-й параметр) - 31 день в месяце, при превышении конечного значения вызывает таймер №14(7-й параметр), а сам обнуляется на 1(3-й параметр)

ТАЙМЕР("мая", "июня", "СТОП", 1, 1, 14) :таймер №14 - месяц мая/июня, при превышении конечного значения ни кого не вызывает, а сам останавливается (3-й параметр)

\ТАЙМЕР(23,23,0,1,2,12,13) :таймер №12 - часы, при превышении конечного значения вызывает таймер №13(7-й параметр), а сам обнуляется на 0(3-й параметр)

\ТАЙМЕР(55,59,0,1,2,1000,12) :таймер без номера(6-й параметр 1000>=50, поэтому обновляется сам каждые 1000мс) - часы, при превышении конечного значения вызывает таймер №12(7-й параметр), а сам обнуляется на 0(3-й параметр)

Внимание, для примера, как использовать многие из этих штук, посмотри демонстрацию таймера с открытым исходным кодом Демонстрация и скачай исходный код

\(АПЕРО.время)

Переменная содержит количество секунд с 1 декабря 2014 (Открытие общего доступа Аперо для создания текстовых онлайн по Московскому времени)

Переменная обновляется каждую секунду и доступна только для чтения. Используется для установки пауз, создания таймеров, определение времени суток, дня недели

Если первый входной параметр - числовое значение от 1 до 6 - различные форматы вывода текущей даты.

\(АПЕРО.время(1)) 2017-08-13 18:03:02
\(АПЕРО.время(2)) 2017-08-13
\(АПЕРО.время(3)) 18:03:02
\(АПЕРО.время(4)) 13/08 18:03
\(АПЕРО.время(5)) сегодня
\(АПЕРО.время(6)) сегодня 18:03:02

Если первый входной параметр - текстовая строка - задает формат вывода.

\(АПЕРО.время("Y/m/d H i s")) 2017/08/13 18 03 02

Если во второй параметр передать количество секунд с 1 декабря 2014, то будет выведено не текущее, а заданное время (в заданном формате)

\(АПЕРО.время(1;85055032)) 2017-08-11 10:23:52
\(АПЕРО.время(2;85055032)) 2017-08-11
\(АПЕРО.время(3;85055032)) 10:23:52
\(АПЕРО.время(4;85055032)) 11/08 10:23
\(АПЕРО.время(5;85055032)) 11 августа 2017
\(АПЕРО.время(6;85055032)) 11 августа 2017 10:23:52
\(АПЕРО.время("Y/m/d H i s";85055032)) 2017/08/11 10 23 52
\(АПЕРО.случайно)

Переменная содержит случайное дробное значение от 0 до 0.99999 (дробные числа через точку)

Переменная выдает новое значение при каждом вызове. Используется для создания случайных событий в игре.

\(АПЕРО.случайно(3))

Функция возвращает случайное целое значение от 1 до 3 включительно (1, 2 или 3)

\(АПЕРО.случайно(5;8))

Функция возвращает случайное целое значение от 5 до 8 включительно (5, 6, 7 или 8)

\(АПЕРО.модуль(-5.83))

Функция возвращает модуль числа; тоесть положительное значение. (5.83)

Новое!
\(АПЕРО.лог(1000))

Функция возвращает десятичный логарифм числа. (3)

Новое!
\(АПЕРО.лог(256;2))

Функция возвращает натуральный логарифм числа 256 по основанию 2. (8)

Новое!
\(АПЕРО.син(0.5)) = 0.479425538604
\(АПЕРО.асин(0.5)) = 0.523598775598
\(АПЕРО.кос(0.5))= 0.87758256189
\(АПЕРО.акос(0.5)) = 1.0471975512
\(АПЕРО.тан(0.5)) = 0.546302489844
\(АПЕРО.атан(0.5)) = 0.463647609001

Тригонометрические функции синус, арксинус, косинус, арккосинус, тангенс арктангенс. Некоторые функции в результате могут вернуть строку "NAN", что означет, что входящий параметр не входит в Область Определения (ОО).

Новое!
\(АПЕРО.синх(0.5)) = 0.521095305494
\(АПЕРО.асинх(0.5)) = 0.48121182506
\(АПЕРО.косх(0.5))= 1.12762596521
\(АПЕРО.акосх(0.5)) = NAN
\(АПЕРО.танх(0.5)) = 0.46211715726
\(АПЕРО.атанх(0.5)) = 0.549306144334

Гиперболические версии функций синус, арксинус, косинус, арккосинус, тангенс арктангенс. Некоторые функции в результате могут вернуть строку "NAN", что означет, что входящий параметр не входит в Область Определения (ОО).

Функция возвращает десятичный логарифм числа. (3)

\(АПЕРО.округлить(5.83))

Функция возвращает значение, округленное до целого (6)

\(АПЕРО.округлить(5.83;1))

Функция возвращает значение, округленное с точностью 1 знаков после запятой (5.8)

\(АПЕРО.отбросить(5.83))

Функция возвращает значение, округленное до целого в меньшую сторону (5)

\(АПЕРО.отбросить(5.83;1))

Функция возвращает значение, округленное в меньшую сторону с точностью 1 знаков после запятой (5.8)

\(АПЕРО.дополнить(5.83))

Функция возвращает значение, округленное до целого в большую сторону (6)

\(АПЕРО.дополнить(5.83;1))

Функция возвращает значение, округленное в большую сторону с точностью 1 знаков после запятой (5.9)

\(АПЕРО.остаток(5;3))

Функция возвращает целочисленный остаток от деления 5 на 3 (2).

\(АПЕРО.степень(2;3))

Возведение числа 2 в степень 3, вернет 8

\(АПЕРО.корень(9))

Квадратный корень числа 9, вернет 3

\(АПЕРО.сохранить="Опушка леса")

*Аперо 1.0 Будет сохранено текущее состояние игры. Значение переменной - имя метки для сохранения, которое так же будет видно игроку. Всего для сохранения 3 слота.

\(АПЕРО.сохранение.скрыть=1)

*Аперо 1.0 Пока переменная существует, не доступно "Пользовательское сохранение", игрок не может сохраниться сам, не отображается кнопка сохранения над игрой. На сохранение через АПЕРО.сохранить никак не влияет.

Новое!
\(АПЕРО.гг.пол)

Значение автоматически заполняется значением из профиля участника в стандартном Аперо(если участник заполнил эту информацию в профиле). Один раз при запуске в *Аперо 1.0 или каждый ход в *Аперо 2.0.

\(АПЕРО.мультиплеер="открыт")

*Аперо 1.0 Если переменная объявлена и равно "открыт", то мультиплеер включен и разрешено присоединяться к созданным сессиям. Если Объявлена, но НЕ равно "открыт" (например АПЕРО.мультиплеер="закрыт"), то мультиплеер включен, и присоединившиеся посетители могут продолжить игру, но присоединение новых будет закрыто.

\(АПЕРО.посетители)

*Аперо 1.0 Массив пользователей, запустивших игру(для игры или просмотра за игрой). Доступ к каждому по "АПЕРО.посетители.номерX", где X натуральное число от 1 до АПЕРО.посетители.количество

\(АПЕРО.посетители.номер1.имя)

*Аперо 1.0 Имя пользователя, запустившего игру.

\(АПЕРО.посетители.номер1.ключ)

*Аперо 1.0 Уникальный ключ посетителя Аперо, запустившего игру.

\(АПЕРО.посетители.номер1.создатель)

*Аперо 1.0 Если объявлено, то пользователь, запустивший игру, является создателем текущей сессии игры(создатель комнаты).

\(АПЕРО.посетители.номер1.участник)

*Аперо 1.0 Если объявлена, то пользователь, запустивший игру, зарегистрирован на Аперо и активировал свой е-майл

\(АПЕРО.игрок)

*Аперо 1.0 Переменная для получения и сохранения переменных текущего конкретного игрока в мультиплеере. Используется как часть более конкретной переменной(пример ниже).

\(АПЕРО.игрок.номер)

*Аперо 1.0 Переменная текущего конкретного игрока в мультиплеере содержащая порядковый номер текущего посетителя игры. Доступна только для чтения. Значением может быть натуральное число от 1 до АПЕРО.посетители.количество

\(АПЕРО.игрок.открыл дверь=1)

*Аперо 1.0 Будет объявлена переменная для текущего конкретного игрока, которая сохранится в массиве АПЕРО.посетители как \(АПЕРО.посетители.номерХ.открыл дверь=1) где Х порядковый номер текущего посетителя игры. Переменные внутри \(АПЕРО.игрок) доступны как для записи, так и для чтения.

\КАРТИНКА("apero.ru/public/img/games/34/mech.png")

Отображение картинки с именем "apero.ru/public/img/games/34/mech.png". Протокол

\КАРТИНКА("apero.ru/public/img/games/34/mech.png", "http")

Подгрузка картинок доступна с любого стороннего сайта по абсолютному пути (без http://), это же работает для изображений инвентаря. Максимальные размеры 2500х2000px, если адрес картинки находится по https укажите это во втором парамтре.

Новое!
\КАРТИНКА("внешний_урл", "Описание", позХ, позУ )

Если игроком был совершен клик на картинке, то его координаты последнего запишутся в переменные позХ и позУ

Вторая переменная "Описание" не обязательна, \КАРТИНКА("внешний_урл", позХ, позУ ) так тоже будет работать

Чит-код для ускорения загрузки локаций с картинками:

\КАРТИНКА("внешний_урл", "http", позХ, позУ )

Если указать явно протокол адреса http или https картники будет загрузка существенно быстрее

Если хотите указать и протокол, и описание, то второй парметр формируется через |, например:

\КАРТИНКА("внешний_урл", "http|Описание", позХ, позУ )

Если во второй парметр также добавить "без отметок", то при нажатии на кликабельную картинку не будет отмечено место клика:

\КАРТИНКА("внешний_урл", "http|без отметок|Описание", позХ, позУ )

Можно на одной локации добавлять несколько разных картинок с разными переменными, соответственно после обработки каждая из этих переменных получит свои значения если по ним был совершен клик; или обнулится, если клика не было.

\ФЛАЖОК(переменная, "Кликабельный текст", 1)

Добавляет "флажок" (жарг. "чекбокс"): элемент управления, нажав на который появляется или снимается "галочка". Начальное состояние зависит от значения "переменная", если она объявлена, то галочка будет выделена. Эта же переменная обновится после перехода на следующую локацию. Если галочка была выделена игроком, значение переменной будет равно 1, иначе переменная обнулится.

Второй параметр (не обязательный) задает флажку текст, нажав на который можно также изменить его состояние.

Третий параметр (не обязательный) если объявлен и не равен 0, то флажок будет неактивным для выделения.

\(АПЕРО.флажок.размер=1.5)

Если объявлена, изменяет размер флажков. Можно использовать дробное значение, во сколько раз больше исходного. (Или меньше, если число меньше 1)

\ПЕРЕКЛЮЧАТЕЛЬ(переменная, "Значение при выборе", "Кликабельный текст", 1)

Добавляет "переключатель" (жарг. "радиокнопка"): элемент управления, нажав на который появляется один из группы переключателей. Начальное состояние зависит от значения "переменная", если она объявлена и совпадает со значением(второй параметр), то переключатель будет выбран. Эта же переменная обновится после перехода на следующую локацию, получив значение выбранного переключателя(второй параметр). В пределах одной локации можно использовать несколько групп переключателей, используя разные имена переменных в первом параметре.

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

Третий параметр (не обязательный) задает переключателю текст, нажав на который можно также изменить его состояние.

Четвертый параметр (не обязательный) если объявлен и не равен 0, то переключатель будет неактивным для выделения.

\(АПЕРО.переключатель.размер=1.5)

Если объявлена, изменяет размер переключателей. Можно использовать дробное значение, во сколько раз больше исходного. (Или меньше, если число меньше 1)

\ЗВУК("файл_звук.mp3")

Проигрывание звука с именем "файл_звук.jpg". Чтобы зациклить звук надо добавить параметр 1: \ЗВУК("файл_звук.mp3", 1)

Для загрузки файлов на сайт напиши в сообщения ВК, написав название игры, в которую залить звук, а также ссылку для скачивания.

\ССЫЛКА("apero.ru","Текстовые игры онлайн")

Добавить внешнюю ссылку "apero.ru" с текстом "Текстовые игры онлайн". Второй параметр не обязателен.

Развернуть все Свернуть все

Новинка: Ознакомься с Шаблонами! Наработки кода для обеспечения часто используемого функционала в текстовых квестах

Обучение: Урок 1 Создание новой текстовой игры Список текстовых игр в разработке

Песочница - это категория игр, которые не соответствуют минимальным требования:

  • Игра должна быть игрой, содержать сюжет и быть законченной (иметь смысловую концовку).
  • Недоделки, дэмки, ремейки, пародии или завязки к играм попадают в песочницу. Во вступительной части игры должна быть прямо или косвенно сформирована цель, одна или несколько, цели могут меняться, но в процессе игры должно быть понятно, к чему в конечном итоге должен прийти игрок для победы.
  • Игра должна быть проходимой.
  • Локации не должны быть тупиковыми. Либо локациия должна иметь кнопки, с помощью которых можно закончить игру. Либо локация должна быть концовкой. Если локация является концовкой, она должна выполнять строчку \(АПЕРО.конец=1)
  • В игре должны отсутствовать(или быть минимальными) орфографические и путакционные ошибки.
  • Перед отправкой игры проверьте свои тексты на орфографию, например здесь. Игры с большим количеством ошибок попадают в песочницу.
  • У игры должна быть обложка, связанная по смыслу с игрой.
  • Текст, по возможности, должен быть литературным!
  • Плюсом будет наличие возможности сохранений в игре.
  • Игра может быть переведена из каталога в песочницу, если после публикации будет набран отрицательный рейтинг.
  • Игра может быть переведена из каталога в песочницу, если в процессе доработки игра перестанет соответствовать минимальным требованиям.

Создай свою текстовую игру онлайн на Apero.ru