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

События, таблицы лидеров и достижения на одном экране. Обратный отсчёт активного события идёт по времени сервера, а не по часам клиента, — именно это не даёт игроку закончить событие досрочно, изменив системную дату.
Обзор архитектуры
| Класс | Файл | Ответственность |
|---|---|---|
EventService | Persistence/PersistenceAndSystems.cs | Управление сезонными/временными событиями |
LeaderboardService | Persistence/PersistenceAndSystems.cs | Ранжированные таблицы лидеров с отправкой очков |
AchievementService | Persistence/PersistenceAndSystems.cs | Отслеживание достижений и система разблокировки |
CloudSaveService | Persistence/PersistenceAndSystems.cs | Загрузка/скачивание облачных сохранений с обнаружением конфликтов |
BackupScheduler | AntiCheat/AntiCheatManager.cs | Автоматическое периодическое облачное резервное копирование |
ModLoader | Persistence/PersistenceAndSystems.cs | Загрузка модов сообщества во время выполнения |
Доступ через NakamaManager.Instance:
var events = NakamaManager.Instance.Events;
var leaderboards = NakamaManager.Instance.Leaderboards;
var achievements = NakamaManager.Instance.Achievements;
var cloudSave = NakamaManager.Instance.CloudSave;
var mods = NakamaManager.Instance.Mods;
Сервис событий
EventService управляет временными живыми событиями (дни сообщества, сезонный контент, особые встречи).
Получение активных событий
List<LiveEvent> activeEvents = await events.GetActiveEventsAsync();
foreach (var evt in activeEvents)
{
// evt.Id -- уникальный ID события
// evt.Name -- отображаемое имя
// evt.Description -- детали события
// evt.StartTime -- временная метка Unix (мс) начала
// evt.EndTime -- временная метка Unix (мс) окончания
// evt.RewardData -- JSON-кодированная конфигурация награды
}
Жизненный цикл события
events.OnEventStarted += (LiveEvent evt) =>
{
Debug.Log($"Event started: {evt.Name}");
// Показать баннер события, включить особые встречи и т.д.
};
events.OnEventEnded += (string eventId) =>
{
Debug.Log($"Event ended: {eventId}");
// Удалить контент события, раздать награды за участие
};
Модель данных LiveEvent
| Поле | Тип | Описание |
|---|---|---|
Id | string | Уникальный идентификатор события |
Name | string | Отображаемое имя |
Description | string | Текст описания события |
StartTime | long | Временная метка начала (Unix мс) |
EndTime | long | Временная метка окончания (Unix мс) |
RewardData | string | JSON-кодированная конфигурация награды |
События настраиваются на стороне сервера через консоль Nakama. Клиент опрашивает активные события и реагирует на уведомления о начале/окончании.
Сервис таблиц лидеров
LeaderboardService предоставляет ранжированные таблицы лидеров с о тправкой очков и запросами рейтинга.
Отправка очков
await leaderboards.SubmitScoreAsync(
boardId: "pvp_season_1",
score: 1850);
await leaderboards.SubmitScoreAsync(
boardId: "dex_completion",
score: 151);
Запрос рейтингов
// Получить лучших игроков
List<LeaderboardEntry> top100 = await leaderboards.GetTopPlayersAsync(
boardId: "pvp_season_1",
limit: 100);
foreach (var entry in top100)
{
// entry.Rank, entry.DisplayName, entry.Score, entry.UserId
}
// Получить мой рейтинг
LeaderboardEntry myRank = await leaderboards.GetMyRankAsync("pvp_season_1");
Обновление данных
await leaderboards.RefreshAsync();