using System; using System.Collections.Generic; using UnityEngine; namespace TKS.OutGame { /// /// 영웅 31 + 병사 유닛 15 정의(heroes.csv) + 승급 단계별 요구 장비 6칸(hero_gear.csv). SOT = Assets/Data/OutGame/*.csv → /// 메뉴 TKS/Import OutGame Data(직접 고치면 다음 임포트에 덮임). 기존 BalanceConfig.heroes[] 를 대체한다(2026-11-05 #1093). /// public class HeroDb : ScriptableObject { [Serializable] public class Hero { public string id; public string nameKo; public string hanja; [Tooltip("shu|wei|wu|other")] public string faction; public UnitType type; [Tooltip("희귀도 1~3 = ★ · 영웅 초기 ★ = 희귀도")] public int rarity = 1; public float hpMult = 1f; public float atkMult = 1f; public float defMult = 1f; [Tooltip("Resources/Units// · 없으면 도형")] public string art; public string skillActive; public string skillPassive; [Tooltip("병사 유닛 = 승급·진화 없음 · 중복 = 골드")] public bool isSoldier; public string firstStage; [Tooltip("m|f — 스킬 조건(남성·여성 영웅 · 2026-11-10 #1112)")] public string gender = "m"; public bool Female { get { return gender == "f"; } } public List gear = new List(); } /// 승급 전 등급 grade 에서 채워야 하는 장비 6칸(slot 1~6 → slots[0~5]). [Serializable] public class GearSet { public string grade; public List slots = new List(); } public List heroes = new List(); Dictionary index; public Hero Get(string id) { if (string.IsNullOrEmpty(id)) return null; if (index == null || index.Count != heroes.Count) { index = new Dictionary(); foreach (var h in heroes) index[h.id] = h; } Hero res; return index.TryGetValue(id, out res) ? res : null; } /// 등급 grade 의 요구 장비 6칸(없으면 null = 최고 등급 · 병사). public List GearFor(Hero h, string grade) { if (h == null) return null; foreach (var g in h.gear) if (g.grade == grade) return g.slots; return null; } public void InvalidateIndex() { index = null; } } }