using System; using UnityEngine; namespace TKS { /// /// 전투 이벤트 카운터(보물 조건 효과 cond_key · 시스템 기획 §8 · PD #1093 C) — 전투 코드는 Raise 1줄만 부르고 아웃게임(OutGameSession)이 구독해 세이브에 누적한다. /// 아군 행동만 센다(by = 행동 유닛 · 적군이면 무시). battles · boss_kills · gold_spent · patrols 는 아웃게임 쪽에서 직접 센다. /// public static class BattleEvents { public const string Battles = "battles"; public const string BossKills = "boss_kills"; public const string GoldSpent = "gold_spent"; public const string Patrols = "patrols"; public const string StrategistShots = "strategist_shots"; public const string ActiveUses = "active_uses"; public const string ArcherCrits = "archer_crits"; public const string Pushes = "pushes"; /// treasures.csv cond_key 로 쓸 수 있는 키(임포터 검증). public static readonly string[] Keys = { Battles, BossKills, GoldSpent, Patrols, StrategistShots, ActiveUses, ArcherCrits, Pushes }; public static event Action Raised; /// Play 진입마다 구독 해제(도메인 리로드를 끈 설정에서 이전 세션 구독이 남지 않게). [RuntimeInitializeOnLoadMethod(RuntimeInitializeLoadType.SubsystemRegistration)] static void ResetStatics() { Raised = null; } public static void Raise(string key, Unit by, int n = 1) { if (by != null && by.Faction != Faction.Player) return; Raise(key, n); } public static void Raise(string key, int n = 1) { if (n <= 0 || Raised == null || Sim.Active) return; // 가상 실행(적 AI 예측)은 세지 않는다 Raised(key, n); } } }