Files
evening_detective_server/internal/modules/storytelling/interface.go
T
2026-09-01 01:01:37 +07:00

111 lines
4.0 KiB
Go

package storytelling
type IStory interface {
GetStory(scenario *Story, codes []string) *Story
}
// История - это введение, набор точек и вопросы дела
type Story struct {
// Введение - то, что игрок получает в начале игры
Introduction *Introduction `json:"introduction,omitempty"`
// Список точек
Places []*Place `json:"places"`
// Вопросы дела - список вопросов, на которые команда должна ответить
Questions []*Question `json:"questions,omitempty"`
}
// Вопрос дела - вопрос, который автор сценария добавляет вместе с
// правильным ответом; команда отвечает на вопросы в конце игры
type Question struct {
// Код - идентификатор вопроса, используется при отправке ответов
Code string `json:"code"`
// Текст вопроса
Text string `json:"text"`
// Правильный ответ - виден только автору и организаторам,
// команде не передаётся
Answer string `json:"answer"`
}
// Введение - текст и аудио, которые игрок получает в начале игры
type Introduction struct {
// Текст введения
Text string `json:"text"`
// Аудио введения
Audio string `json:"audio,omitempty"`
}
// Точка - что-то куда можно сходить
// Это может быть место - аптека, остановка, площадь...
// Это может быть персонаж - пострадавший, продавец, полицейский...
// Это может быть описание действия игрока - ответ на вопрос, реакция на выбитую дверь...
type Place struct {
// Код - то что вбивает игрок
Code string `json:"code"`
// Название места, имя персонажа, заданный игроком вопрос...
Name string `json:"name"`
// Текст - получаемая текстовая информация
Text string `json:"text"`
// Картинка - получаемая визуальная информация
Image string `json:"image"`
// Признак скрытой карточки - некоторые места изначально не доступны
Hidden bool `json:"hidden"`
// Приложения - получаемые улики
Applications []*Application `json:"applications,omitempty"`
// Двери к другим точкам - действия или диалоги, открывающие другие точки
Doors []*Door `json:"doors"`
// Получаемые ключи - ключи используются для получения доступа к скрытым дверям
Keys []*Key `json:"keys"`
}
// Приложение - улика
// Это может быть оружие, отпечатки, фотография...
type Application struct {
// Название улики
Name string `json:"name"`
// Картинка
Image string `json:"image"`
// Тип файла улики: image | pdf | audio.
FileType string `json:"file_type,omitempty"`
}
// Дверь - действие или диалог
type Door struct {
// Код
Code string `json:"code"`
// Название - заданный вопрос, проделанное действие...
Name string `json:"name"`
// Некоторые двери изначально не доступны
// Ключи требуемые для получения доступа к скрытым дверям
// Если указаны ключи то дверь считается скрытой
Keys []*Key `json:"keys"`
}
// Аналог карт допуска в "Тайны Аркхема"
type Key struct {
// Название
Name string `json:"name"`
}