Отряд идёт маршем, наблюдает 2/4 (поселение, лагерь) или 3/6 (замок) игровых часов, отчёт на конец наблюдения, потом домой. Уровень II -- точные войска, герой, стены; III -- плюс защита и ресурсы ±15%. Один отчёт на операцию, сохранение. Карта: кнопки «Разведка II/III», окно отчёта, «Отчёты», прогноз по отчёту вне обзора. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
225 lines
9.0 KiB
C#
225 lines
9.0 KiB
C#
// События, которыми модули сообщают друг другу о случившемся.
|
|
// Событие -- это факт в прошедшем времени ("ресурс изменился"), а не просьба что-то сделать.
|
|
// Добавляя событие, впиши его в документ модуля-отправителя (Docs/Modules).
|
|
|
|
// ---------------- Экономика ----------------
|
|
public struct ResourceChangedEvent
|
|
{
|
|
public ResourceType Type;
|
|
public float Value;
|
|
}
|
|
|
|
// ---------------- Поселение ----------------
|
|
public struct BuildingPlacedEvent
|
|
{
|
|
public string BuildingName;
|
|
}
|
|
|
|
public struct TownHallLevelChangedEvent
|
|
{
|
|
public int Level;
|
|
}
|
|
|
|
// Поселение начинает восстанавливать здания из сохранения: самое время добавить в список стройки
|
|
// здания, которые появляются кодом (например, Казармы)
|
|
public struct SettlementRestoringEvent { }
|
|
|
|
// ---------------- Время ----------------
|
|
// Время игры промотано вперёд (отладочная панель). Модули досчитывают прошедшее время.
|
|
public struct GameTimeAdvancedEvent
|
|
{
|
|
public long Seconds;
|
|
public long UnixNow;
|
|
}
|
|
|
|
// ---------------- Население ----------------
|
|
// Число людей изменилось (прирост, загрузка, сброс, изменение войска)
|
|
public struct PopulationChangedEvent
|
|
{
|
|
public int Total;
|
|
public int Civilians;
|
|
public int Soldiers;
|
|
public int HousingCap;
|
|
}
|
|
|
|
// Рабочих переставили (окно "Рабочие", автоматическое заполнение новых мест)
|
|
public struct WorkersChangedEvent
|
|
{
|
|
public int Workers;
|
|
public int FreeWorkers;
|
|
}
|
|
|
|
// Голод начался (IsStarving = true) или закончился
|
|
public struct StarvationChangedEvent
|
|
{
|
|
public bool IsStarving;
|
|
}
|
|
|
|
// ---------------- Армия ----------------
|
|
// Число воинов изменилось (обучение, потери, поход, возвращение, загрузка)
|
|
public struct TroopsChangedEvent
|
|
{
|
|
public int AtHome;
|
|
public int InMarches;
|
|
public int Garrison; // из AtHome -- в гарнизоне
|
|
public int Wounded; // раненые: в госпитале или ждут места (не в AtHome)
|
|
public int Missing; // пропавшие без вести: занимают места в населении, но не едят и не воюют
|
|
}
|
|
|
|
// Пропавшие без вести вернулись (часть группы боя): здоровые -- в город, раненые -- в госпиталь. Один раз на группу
|
|
public struct MissingReturnedEvent
|
|
{
|
|
public int MissingId;
|
|
public int Group;
|
|
public int Healthy;
|
|
public int Wounded;
|
|
public long TimeMs;
|
|
}
|
|
|
|
// Окно возвращения кончилось: кто не вернулся -- списан, места в населении освобождены
|
|
public struct MissingWrittenOffEvent
|
|
{
|
|
public int MissingId;
|
|
public int Count;
|
|
public long TimeMs;
|
|
}
|
|
|
|
// Раненые вылечены и вернулись в город. Один раз на группу лечения (BatchId), TimeMs -- когда закончили
|
|
public struct SoldiersHealedEvent
|
|
{
|
|
public int BatchId;
|
|
public int Type;
|
|
public int Count;
|
|
public long TimeMs;
|
|
}
|
|
|
|
// Заказ обучения закончен: воины уже в Армии. Приходит один раз на заказ (OrderId), TimeMs -- когда был готов
|
|
public struct TroopsTrainedEvent
|
|
{
|
|
public int OrderId;
|
|
public int Type;
|
|
public int Count;
|
|
public long TimeMs;
|
|
}
|
|
|
|
// ---------------- Глобальный мир ----------------
|
|
// У событий похода -- номер похода и точное время по часам игры (документ 02 комплекта от 29.10.2026):
|
|
// TimeMs -- когда это случилось, а не когда игра это заметила (после офлайна это разные моменты).
|
|
public struct MarchStartedEvent
|
|
{
|
|
public int MarchId;
|
|
public long TimeMs; // выступление
|
|
public string TargetId;
|
|
public int Soldiers;
|
|
public bool IsScout; // поход «Разведка»: без боя и добычи
|
|
}
|
|
|
|
public struct MarchBattleResolvedEvent
|
|
{
|
|
public int MarchId;
|
|
public long BattleId; // номер боя (= Seed): по нему бой можно перепроверить
|
|
public long TimeMs; // приход к цели и бой
|
|
public string TargetId;
|
|
public bool Victory;
|
|
public int Soldiers;
|
|
public int Survivors;
|
|
}
|
|
|
|
public struct MarchReturnedEvent
|
|
{
|
|
public int MarchId;
|
|
public long TimeMs; // возвращение домой
|
|
public bool Victory;
|
|
public int Survivors;
|
|
public int Sent; // сколько воинов уходило в поход
|
|
public bool TargetEmpty; // лагерь уже был разбит / ресурсной точки уже не было: боя и сбора не было, вернулись все
|
|
public bool IsGather; // поход на ресурсную точку (сбор, а не бой)
|
|
public bool IsScout; // поход «Разведка»: дошли до цели и вернулись, боя и добычи нет
|
|
public int Wounded; // раненых привезли домой -- они в госпитале (или ждут места)
|
|
public int Missing; // пропали без вести в бою -- могут вернуться сами
|
|
public string TargetName; // куда ходили ("Замок Змея Горыныча", имя соседа)
|
|
public string LootText; // добыча текстом: "+20 золота, +40 еды" или "нет"
|
|
}
|
|
|
|
// ---------------- Чат ----------------
|
|
// Новое сообщение в любом канале (своё или чужое)
|
|
public struct ChatMessageReceivedEvent
|
|
{
|
|
public ChatMessage Message;
|
|
}
|
|
|
|
// ---------------- Круг ----------------
|
|
// Игрок вступил в Круг или создал свой
|
|
public struct CircleJoinedEvent
|
|
{
|
|
public string CircleId;
|
|
public string CircleName;
|
|
public bool Created;
|
|
}
|
|
|
|
// Игрок вышел из Круга (Disbanded -- Круг распущен, игрок был в нём один)
|
|
public struct CircleLeftEvent
|
|
{
|
|
public string CircleId;
|
|
public string CircleName;
|
|
public bool Disbanded;
|
|
}
|
|
|
|
// ---------------- Сохранения ----------------
|
|
public struct GameLoadedEvent { }
|
|
// Файла сохранения нет -- это первая игра на устройстве (стартовые ресурсы, стартовое войско)
|
|
public struct NewGameStartedEvent { }
|
|
public struct GameSavedEvent { }
|
|
// Сохранения сброшены, все модули уже в состоянии новой игры
|
|
public struct GameResetEvent { }
|
|
|
|
// ---------------- Мир -> Разведка ----------------
|
|
// Мир сейчас продвинет время до ToMs: разведка успевает досчитать наблюдение по армиям, которые ещё на карте
|
|
// (после продвижения вернувшиеся походы исчезают). Публикует MarchManager перед каждым расчётом мира.
|
|
public struct WorldAdvancingEvent
|
|
{
|
|
public long ToMs;
|
|
}
|
|
|
|
// ---------------- Разведка ----------------
|
|
// У всех событий -- устойчивый номер события (армия + номер наблюдения) и время по часам игры (ТЗ разведки, раздел 10)
|
|
public struct ArmySpottedEvent // чужая армия вошла в зону обзора
|
|
{
|
|
public string EventId;
|
|
public string ArmyId;
|
|
public long TimeMs;
|
|
public int ApproxMin, ApproxMax;
|
|
}
|
|
|
|
public struct ArmyLostContactEvent // чужая армия вышла из зоны обзора -- остаётся метка последнего контакта
|
|
{
|
|
public string EventId;
|
|
public string ArmyId;
|
|
public long TimeMs;
|
|
}
|
|
|
|
// Разведка М2: отряд вышел на разведку с отчётом / отчёт готов (ТЗ разведки, раздел 10)
|
|
public struct ReconStartedEvent
|
|
{
|
|
public string EventId; // "recon_<номер похода>"
|
|
public string TargetId;
|
|
public int Level;
|
|
public long TimeMs;
|
|
}
|
|
|
|
public struct ReconCompletedEvent
|
|
{
|
|
public string EventId; // = id отчёта
|
|
public string TargetId;
|
|
public int Level;
|
|
public long TimeMs;
|
|
}
|
|
|
|
public struct ArmyIdentifiedEvent // владелец чужой армии опознан
|
|
{
|
|
public string EventId;
|
|
public string ArmyId;
|
|
public string OwnerId;
|
|
public long TimeMs;
|
|
}
|