Files
evening_detective_server/internal/modules/storytelling/interface.go
T
2026-10-01 16:42:39 +07:00

99 lines
3.5 KiB
Go

package storytelling
type IStory interface {
GetStory(scenario *Story, codes []string) *Story
}
// История - это введение, набор точек и вопросы дела
type Story struct {
Background string `json:"background,omitempty"`
Introduction *Introduction `json:"introduction,omitempty"`
// Закрывашка доступна в редакторе сценария, игрокам не передаётся.
Conclusion *Conclusion `json:"conclusion,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 Conclusion struct {
Text string `json:"text"`
Video string `json:"video,omitempty"`
}
// Введение - текст и аудио, которые игрок получает в начале игры.
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"`
}