Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
15 changes: 15 additions & 0 deletions docs/modules/ROOT/nav.adoc
Original file line number Diff line number Diff line change
@@ -1,14 +1,29 @@
* xref:technical-task.adoc[Техническое задание]
* Игроку
** xref:player/auth.adoc[Вход]
** xref:player/join_team.adoc[Как вступить в команду]
** xref:player/leave_team.adoc[Как выйти из команды]
** xref:player/play.adoc[Как играть]
** xref:player/promotion.adoc[Аппрув]
* Капитану
** xref:setup_team/create_chat.adoc[Создать чат]
** xref:setup_team/group2sg.adoc[Преобразовать чат в супергруппу]
** xref:setup_team/check_is_sg.adoc[Проверить чат]
** xref:setup_team/create_team.adoc[Создание команды]
** xref:setup_team/add_players.adoc[Добавить игроков]
** xref:setup_team/manage_team.adoc[Управление командой]
** xref:setup_team/permissions.adoc[Полномочия в команде]
** xref:setup_team/waivers.adoc[Вейверы]
** xref:setup_team/move_chat.adoc[Перенести команду в другой чат]
** xref:setup_team/captain_faq.adoc[Частые вопросы капитана]
* Автору
** xref:author/game-create.adoc[Как создать игру]
** xref:author/level-create.adoc[Как написать уровень]
** xref:author/game-levels.adoc[Как добавить уровни в игру]
** xref:author/game-schedule.adoc[Как запланировать игру]
** xref:author/game-orgs.adoc[Организаторы игры]
** xref:author/author-check-list.adoc[Чек-лист для автора перед игрой]
** xref:author/level-concept.adoc[Введение в описание уровня]
** xref:author/level-howto.adoc[Как использовать]
* Организатору
** xref:org/spy.adoc[Как шпионить за игрой]
120 changes: 120 additions & 0 deletions docs/modules/ROOT/pages/author/game-create.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,120 @@
= Как создать игру

Писать игры может игрок с xref:player/promotion.adoc[аппрувом].

Порядок один и тот же в обеих версиях: сначала пишутся уровни, потом из них
собирается игра, потом игра планируется на дату и время.

TIP: Игру можно начать в боте, а дописать на сайте (и наоборот) — данные общие.

== В боте

=== Шаг 1. Написать уровни

`/new_level` — бот проведёт по всем шагам создания уровня. Подробно:
xref:author/level-create.adoc[Как написать уровень].

Уровень, не привязанный ни к какой игре, называется "свободным" — именно
из свободных уровней и собирается новая игра.

=== Шаг 2. Собрать игру

`/new_game` (или главное меню -> "🗂Мои игры" -> "✍Написать игру")

.Список своих игр: тут же кнопки "Написать игру", "Написать уровень" и "Уровни"
image::{attachmentsdir}/author/tg-my-games.png[]

1. Бот попросит название игры. Его увидят все схватчики во время игры
и в статистике, так что выбирай мудро
+
.Выбор названия игры
image::{attachmentsdir}/author/tg-new-game-name.png[]
+
2. Дальше — список свободных уровней с галочками. Отметь те, что войдут в игру
+
.Выбор уровней для новой игры
image::{attachmentsdir}/author/tg-new-game-levels.png[]
+
3. Нажми "Сохранить"

WARNING: Название игры и ID уровней попадают в лог-файлы, которые читает
системный администратор. Не пиши в них ключи, локации и прочие спойлеры.

=== Шаг 3. Проверить

Главное меню -> "🗂Мои игры" -> выбрать игру. В карточке игры видно статус,
количество уровней и время старта. Если уровней нет, бот прямо предупредит:
"❗️В игре ещё нет ни одного уровня!❗️".

.Карточка игры
image::{attachmentsdir}/author/tg-game-menu.png[]

.Что можно сделать из карточки игры
* "📜Сценарий" — посмотреть и изменить состав уровней
* "👥Организаторы" — xref:author/game-orgs.adoc[добавить оргов и настроить им полномочия]
* "✏Переименовать" — сменить название
* "📆Запланировать игру" — xref:author/game-schedule.adoc[назначить дату и время]
* "📝Начать сборку вейверов" — открыть сбор заявок
* "📦zip-сценарий" — выгрузить игру файлом
* "🔑🧾Все ключи в xlsx" — таблица со всеми ключами игры
* "🔀Переходы" — схема переходов между уровнями

=== Загрузить готовую игру из zip

Если игра уже есть в виде zip-сценария (например, выгружена из другой игры
или подготовлена заранее): `/new_game` -> "Загрузить из zip" -> прислать файл.

== На сайте

=== Создать игру

Раздел "Черновики" (`/games/constructor`) -> поле "Название новой игры"
-> "Создать". Игра появится в списке черновиков.

=== Редактировать игру

Клик по игре в списке черновиков открывает полноценный редактор, где
на одной странице собрано всё:

* название и планируемый старт
* автор игры
* уровни: добавление, порядок (стрелки вверх/вниз), удаление
* внутри уровня — ключи, ключи с эффектами, таймеры с эффектами,
подсказки по времени
* файлы игры (картинки, видео, аудио) с загрузкой и переименованием
* организаторы и их полномочия
* блок "Ошибки проверки" — что мешает сохранить игру

Не забывай нажимать "Сохранить".

=== Запустить

В шапке редактора есть кнопки "Начать сбор вейверов" и "Опубликовать игру" —
они переводят игру в соответствующий статус.

== Статусы игры

в процессе создания (`underconstruction`)::
Черновик, можно менять всё.

полностью готова (`ready`)::
Игра собрана и ждёт своего часа.

сбор вейверов (`getting_waivers`)::
Команды подают заявки. Сценарий ещё можно править,
но лучше этого уже не делать.

началась (`started`)::
Идёт игра. Все редакторы заблокированы.

все команды финишировали (`finished`)::
Игра сыграна, доступны результаты и лог ключей.

завершена (`complete`)::
Игра опубликована и уехала в архив прошедших игр.

== Перед игрой

Обязательно пройдись по
xref:author/author-check-list.adoc[чек-листу автора] — он короткий и спасает
от самых обидных ошибок.
57 changes: 57 additions & 0 deletions docs/modules/ROOT/pages/author/game-levels.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,57 @@
= Как добавить уровни в игру

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

== В боте

Главное меню -> "🗂Мои игры" -> выбрать игру -> "📜Сценарий".

Откроется список уровней игры:

.Сценарий игры: список уровней в порядке прохождения
image::{attachmentsdir}/author/tg-game-levels.png[]

.Что можно делать
📑Добавить уровень::
Показывает список свободных уровней. Клик по уровню — и он в конце игры.
+
.Список свободных уровней, которые можно добавить в игру
image::{attachmentsdir}/author/tg-game-add-level.png[]
+
NOTE: Уровень встаёт в конец списка. Чтобы поменять порядок, придётся убрать
уровни из игры и добавить заново в нужной последовательности — или
воспользоваться веб-редактором, где есть стрелки.

Клик по уровню в списке::
Открывает меню уровня: посмотреть ("📂Показать"), отредактировать,
протестировать, "🗑Убрать из игры".

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

TIP: Кнопка "📜Сценарий" доступна, только пока игру можно редактировать —
то есть до старта.

== На сайте

"Черновики" -> открыть игру -> блок "Уровни".

* "+ Уровень" — добавить уровень
* ⬆ и ⬇ у каждого уровня — переставить его в нужное место
* 🗑 — убрать уровень из игры

Номер уровня в игре = его позиция в этом списке. После перестановок
нажми "Сохранить".

== Проверка перед игрой

* Убедись, что уровни идут в правильном порядке
* По кнопке "📂Показать" проверь, что уровень выходит целиком и все медиафайлы
отправляются как надо
* Уровни, написанные на сайте, проверь через бота, а написанные в боте —
через сайт: отображение может отличаться
* Если в игре есть переходы между уровнями, посмотри кнопку "🔀Переходы" —
там схема, кто куда может попасть, и `🔑🧾Все ключи в xlsx` со всеми ключами игры

Полный список проверок — в xref:author/author-check-list.adoc[чек-листе автора],
а про нелинейные схемы — в xref:author/level-howto.adoc[способах использования].
97 changes: 97 additions & 0 deletions docs/modules/ROOT/pages/author/game-orgs.adoc
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
= Организаторы игры и их полномочия

Автор игры — всегда главный организатор: у него все полномочия и снять их
нельзя. Остальных оргов автор добавляет сам.

IMPORTANT: Согласившись стать организатором, игрок теряет возможность сыграть
в эту игру. Бот честно предупреждает об этом в приглашении.

== Как добавить организатора в боте

1. Главное меню -> "🗂Мои игры" -> выбрать игру -> "👥Организаторы"
2. Нажать "👋Добавить организатора"
3. Выбрать чат личных сообщений с нужным человеком
4. В чате с ним, над окном ввода, выбрать "Добавить в организаторы"

Ему придёт сообщение "Стать со-организатором игры `название`? В случае согласия
будет невозможно сыграть в эту игру." с кнопками. Как только он согласится,
всем оргам придёт уведомление "На игру `название` добавлен новый орг `имя`".

NOTE: Приглашение живёт недолго. Если человек увидел "‼️Приглашение просрочено,
попросите отправить его ещё раз‼️" — отправь заново.

.Список организаторов игры
image::{attachmentsdir}/author/tg-orgs-list.png[]

== Как добавить организатора на сайте

"Черновики" -> открыть игру -> блок "Организаторы".

* Найди игрока в поиске по имени и нажми "Пригласить в организаторы" —
он получит заявку в уведомлениях и в telegram
* Если человек точно не против, можно поставить галочку "Добавить сразу,
без подтверждения игроком"
* Игроков из своей команды можно добавить в один клик — они показаны
отдельными кнопками над поиском

== Полномочия

По умолчанию у нового орга *нет ни одного полномочия* — их нужно выдать явно.

В боте: "👥Организаторы" -> выбрать орга -> кнопки-переключатели.
На сайте: галочки в карточке орга в блоке "Организаторы".

.Полномочия организатора: ✅ выдано, 🚫 нет
image::{attachmentsdir}/author/tg-org-perms.png[]

Шпионить (`can_spy`)::
Видит, какая команда на каком уровне, и получает в личку уведомления о том,
что команда перешла на следующий уровень. Без этого полномочия меню шпиона
почти пустое. См. xref:org/spy.adoc[Как шпионить за игрой].

Смотреть лог ключей (`can_see_log_keys`)::
Видит все введённые командами ключи — и во время игры, и после.

Смотреть сценарий (`view_scenario`)::
Может открыть сценарий игры: уровни, ключи, подсказки, граф переходов.

Принимать вейверы (`can_validate_waivers`)::
Работа с заявками команд на игру.

TIP: Организатору, который будет только следить за ходом игры, обычно достаточно
"Шпионить" + "Смотреть лог ключей". Тому, кто помогает писать игру, нужен
"Просмотр сценария".

== Удалить организатора

В боте: "👥Организаторы" -> выбрать орга -> "🗑Удалить". Рядом с именем
появится 🗑, а самого орга можно потом "🗑Восстановить".

На сайте: корзина в карточке организатора.

Удалённый орг увидит в главном меню бота: "Тебя удалили из организаторов.
К сожалению, ты не сможешь ни играть ни участвовать в организации."

== Тестирование уровней оргами

Организаторов удобно привлекать к проверке игры:

1. Главное меню -> "🗂Мои игры" -> "🗂Уровни" -> выбрать уровень
2. "🧩Отправить на тестирование" -> выбрать орга из списка

NOTE: В списке только организаторы этой игры. Чтобы кто-то там появился,
сначала добавь его в организаторы.

.Выбор орга, которому отправить уровень на тестирование
image::{attachmentsdir}/author/tg-level-send-test.png[]

Орг получит приглашение, пройдёт уровень в личке с ботом, а тебе придёт отчёт:
сколько времени ушло и какие ключи вводились.

== Перед игрой

Из xref:author/author-check-list.adoc[чек-листа автора]:

* проверь, что все, кого хотели — добавлены в оргов
* проверь, что у всех оргов нужные полномочия (по умолчанию полномочий нет)
* организаторам желательно до начала игры ткнуть в старт в боте
Loading