Это старая версия документа!


Для начала повторим основное правило.

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

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

Комнаты всегда объявляются одинаковым образом. В самом простом виде это выглядит так:

room "pirate",
  dsc: """
    Капитан Блад улыбается и быстро вытаскивает саблю.

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

    * [Вмешаться](intervene)
    * [Наблюдать дальше](watch)
  """

Давайте разберём это объявление.

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

"pirate" - это ID комнаты. По этой строке вы можете обратиться к этой комнате. По умолчанию ID должен содержать только латинские буквы, символы _- и цифры. (Это меняется в ядре Salet через параметр salet.linkRe)

Например, код salet.getRoom("pirate") вернёт объект комнаты, код salet.goTo("pirate") перенесёт в неё игрока, а код salet.isVisited("pirate") расскажет, посещал ли уже игрок эту комнату.

dsc - это свойство комнаты. Вы можете объявить сколько угодно свойств; конкретно свойство dsc задаёт описание комнаты. Это тот текст, который видит игрок каждый раз, когда входит в комнату. Текст задан внутри тройных кавычек """ и обрабатывается в формате Markdown.

Текст dsc содержит ссылки, которые ведут на другие комнаты.

Если после клика на ссылку игрок переходит в другую комнату, то весь текст предыдущей комнаты стирается - игрок уже ушёл оттуда.

Вы можете запретить стирать текст предыдущей комнаты, указав у комнаты свойство clear: false

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

Также см. главу Действия, в которой описываются ссылки, действующие внутри текущей комнаты.

Ссылка не обрабатывается Salet, если у неё есть класс raw, например: <a href="out" class="raw">Наружу</a>.

Она не стирается при переходе в другую комнату, если у неё есть класс sticky.

Ссылка стирается после первого клика, если у неё есть класс once.

Вместо того, чтобы вручную писать HTML код каждый раз, когда вам нужна особая ссылка, вы можете сделать функцию CoffeeScript и вставлять её прямо в текст:

textlink = (content, ref) ->
  return "<a href='./_writer_#{ref}' class='once'>#{content}</a>"

...

dsc = "Привет #{textlink('всем', 'all')}"
room "milkroom",
  dsc: """
    ### Мраморный зал

    Вы находитесь в просторной комнате, выточенной внутри огромной горы молочного камня.
    Пол и стены замусорены подписями и знаками от предыдущих посетителей.
  """

С другой стороны, в Salet есть модель мира. И по этой модели, комната уже похожа на реальное строение из стен, пола и потолка.

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

Элементы задаются в свойстве units. Подробнее см. отдельную главу.

Пути - это особый вид ссылок, который введён для упрощения навигации. Вместо того, чтобы объявлять объект или делать ссылку, которая при нажатии будет вести в другую комнату, достаточно объявить свойство ways и добавить туда ID комнаты, в которую возможно выйти:

ways: ["plaza"]
title: "Мраморный зал"

Salet автоматически проходит по массиву ways и выводит ссылки на каждую комнату при помощи их свойств title. Так, если в комнате plaza задано свойство title: "Площадь", то вместо ID plaza будет выведено именно "Площадь". Названия комнат могут быть функцией, т.е. зависеть от текущего состояния игры.

  • ru/guide/rooms.1481273459.txt.gz
  • Последнее изменение: 2021/01/24 10:41
  • (внешнее изменение)