// События, которыми модули сообщают друг другу о случившемся. // Событие -- это факт в прошедшем времени ("ресурс изменился"), а не просьба что-то сделать. // Добавляя событие, впиши его в документ модуля-отправителя (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; } // Расчёт игры (модуль Населения: добыча, еда, прирост) дошёл до момента UnixNow (04.11). // Приходит в начале каждого шага расчёта (раз в 10 игровых минут офлайна) и в конце каждого Tick. // Всё, что должно случиться по времени (стройка закончилась), применяется здесь -- тогда следующий шаг // уже считается с новым городом, и добыча идёт ровно с момента завершения, а не с начала офлайна. public struct GameTimeSimulatedEvent { 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) } // Раненые вылечены и вернулись в город. Один раз на группу лечения (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 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; } public struct ArmyIdentifiedEvent // владелец чужой армии опознан { public string EventId; public string ArmyId; public string OwnerId; public long TimeMs; }