Для начала повторим основное правило.
Игрок всегда находится в какой-нибудь одной активной комнате. Если он выходит из этой комнаты, он попадает в другую.
> Вы всегда можете получить объект комнаты, в которой находится игрок, при помощи функции ''%%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%%''
Если вы запретите стирать, то текст останется, но все ссылки в нём исчезнут - станут обычным текстом, потому что игрок больше не может действовать в прошлом. Это поведение тоже можно изменить при помощи "клейких" ссылок.
Также см. главу [[ru:guide:actions|Действия]], в которой описываются ссылки, действующие внутри текущей комнаты.
==== Классы ссылок ====
Ссылка не обрабатывается Salet, если у неё есть класс ''%%raw%%'', например: ''%%Наружу%%''.
Она не стирается при переходе в другую комнату, если у неё есть класс ''%%sticky%%''.
Ссылка стирается после первого клика, если у неё есть класс ''%%once%%''.
Вместо того, чтобы вручную писать HTML код каждый раз, когда вам нужна особая ссылка, вы можете сделать функцию CoffeeScript и вставлять её прямо в текст:
textlink = (content, ref) ->
return "#{content}"
...
dsc = "Привет #{textlink('всем', 'all')}"
===== Комнаты как локации =====
room "milkroom",
dsc: """
### Мраморный зал
Вы находитесь в просторной комнате, выточенной внутри огромной горы молочного камня.
Пол и стены замусорены подписями и знаками от предыдущих посетителей.
"""
С другой стороны, в Salet есть модель мира. И по этой модели, комната уже похожа на реальное строение из стен, пола и потолка.
Комнаты связываются между собой //путями// и могут содержать //элементы.// Они следят за тем, когда игрок выходит и входит в них.
==== Элементы ====
Элементы задаются в свойстве ''%%units%%''. Подробнее см. [[ru:guide:units|отдельную главу.]]
==== Пути ====
Пути - это особый вид ссылок, который введён для упрощения навигации. Вместо того, чтобы объявлять объект или делать ссылку, которая при нажатии будет вести в другую комнату, достаточно объявить свойство ''%%ways%%'' и добавить туда ID комнаты, в которую возможно выйти:
ways: ["plaza"]
title: "Мраморный зал"
Salet автоматически проходит по массиву ''%%ways%%'' и выводит ссылки на каждую комнату при помощи их свойств ''%%title%%''. Так, если в комнате ''%%plaza%%'' задано свойство ''%%title: "Площадь"%%'', то вместо ID ''%%plaza%%'' будет выведено именно "Площадь". Названия комнат могут быть функцией, т.е. зависеть от текущего состояния игры.