import 'package:askiineverdie/src/core/model/race_traits.dart'; /// 종족 데이터 정의 (race data) /// /// 프로그래밍 테마의 21가지 종족 정의 /// pq_config_data.dart의 Races 데이터 기반 class RaceData { RaceData._(); // ========================================================================== // 기본 종족 (HP/밸런스형) // ========================================================================== /// Byte Human: HP 보너스 static const byteHuman = RaceTraits( raceId: 'byte_human', name: 'Byte Human', statModifiers: {}, passives: [ PassiveAbility( type: PassiveType.hpBonus, value: 0.10, description: 'HP +10%', ), ], ); /// Kernel Giant: STR + HP 보너스 static const kernelGiant = RaceTraits( raceId: 'kernel_giant', name: 'Kernel Giant', statModifiers: { StatType.str: 3, StatType.dex: -2, }, passives: [ PassiveAbility( type: PassiveType.hpBonus, value: 0.15, description: 'HP +15%', ), ], ); // ========================================================================== // 지혜 종족 (WIS 기반) // ========================================================================== /// Null Elf: WIS 보너스 static const nullElf = RaceTraits( raceId: 'null_elf', name: 'Null Elf', statModifiers: { StatType.wis: 2, StatType.con: -1, }, passives: [ PassiveAbility( type: PassiveType.magicDamageBonus, value: 0.10, description: '마법 데미지 +10%', ), ], ); /// Recursive Sage: WIS + INT 보너스 static const recursiveSage = RaceTraits( raceId: 'recursive_sage', name: 'Recursive Sage', statModifiers: { StatType.wis: 2, StatType.intelligence: 2, StatType.str: -2, }, passives: [ PassiveAbility( type: PassiveType.mpBonus, value: 0.10, description: 'MP +10%', ), ], ); /// Callback Priest: WIS + CHA 보너스 static const callbackPriest = RaceTraits( raceId: 'callback_priest', name: 'Callback Priest', statModifiers: { StatType.wis: 2, StatType.cha: 2, StatType.str: -1, StatType.dex: -1, }, passives: [], ); // ========================================================================== // 체력 종족 (CON 기반) // ========================================================================== /// Buffer Dwarf: CON 보너스 static const bufferDwarf = RaceTraits( raceId: 'buffer_dwarf', name: 'Buffer Dwarf', statModifiers: { StatType.con: 2, StatType.dex: -1, }, passives: [ PassiveAbility( type: PassiveType.defenseBonus, value: 0.05, description: '방어력 +5%', ), ], ); /// Coredump Undead: CON 보너스 static const coredumpUndead = RaceTraits( raceId: 'coredump_undead', name: 'Coredump Undead', statModifiers: { StatType.con: 2, StatType.cha: -2, }, passives: [ PassiveAbility( type: PassiveType.deathEquipmentPreserve, value: 1.0, description: '사망 시 장비 1개 유지', ), ], ); // ========================================================================== // 민첩 종족 (DEX 기반) // ========================================================================== /// Bit Halfling: DEX 보너스 static const bitHalfling = RaceTraits( raceId: 'bit_halfling', name: 'Bit Halfling', statModifiers: { StatType.dex: 2, StatType.str: -1, }, passives: [ PassiveAbility( type: PassiveType.criticalBonus, value: 0.03, description: '크리티컬 +3%', ), ], ); /// Cache Imp: DEX 보너스 static const cacheImp = RaceTraits( raceId: 'cache_imp', name: 'Cache Imp', statModifiers: { StatType.dex: 2, StatType.con: -1, }, passives: [], ); /// Iterator Rogue: DEX 보너스 static const iteratorRogue = RaceTraits( raceId: 'iterator_rogue', name: 'Iterator Rogue', statModifiers: { StatType.dex: 2, StatType.wis: -1, }, passives: [ PassiveAbility( type: PassiveType.criticalBonus, value: 0.05, description: '크리티컬 +5%', ), ], ); // ========================================================================== // 힘 종족 (STR 기반) // ========================================================================== /// Array Orc: STR 보너스 static const arrayOrc = RaceTraits( raceId: 'array_orc', name: 'Array Orc', statModifiers: { StatType.str: 2, StatType.intelligence: -1, }, passives: [], ); /// Flag Knight: CHA + STR 보너스 static const flagKnight = RaceTraits( raceId: 'flag_knight', name: 'Flag Knight', statModifiers: { StatType.cha: 2, StatType.str: 2, StatType.intelligence: -2, }, passives: [], ); /// Protocol Paladin: STR + CHA 보너스 static const protocolPaladin = RaceTraits( raceId: 'protocol_paladin', name: 'Protocol Paladin', statModifiers: { StatType.str: 2, StatType.cha: 2, StatType.dex: -2, }, passives: [ PassiveAbility( type: PassiveType.defenseBonus, value: 0.05, description: '방어력 +5%', ), ], ); // ========================================================================== // 복합 스탯 종족 // ========================================================================== /// Stack Goblin: DEX + CON 보너스 static const stackGoblin = RaceTraits( raceId: 'stack_goblin', name: 'Stack Goblin', statModifiers: { StatType.dex: 2, StatType.con: 1, StatType.cha: -2, }, passives: [], ); /// Heap Troll: CON + STR 보너스 static const heapTroll = RaceTraits( raceId: 'heap_troll', name: 'Heap Troll', statModifiers: { StatType.con: 2, StatType.str: 2, StatType.intelligence: -2, StatType.dex: -1, }, passives: [ PassiveAbility( type: PassiveType.hpBonus, value: 0.10, description: 'HP +10%', ), ], ); /// Index Ranger: DEX + CON 보너스 static const indexRanger = RaceTraits( raceId: 'index_ranger', name: 'Index Ranger', statModifiers: { StatType.dex: 2, StatType.con: 1, StatType.intelligence: -1, }, passives: [], ); // ========================================================================== // 마법 종족 (MP/INT 기반) // ========================================================================== /// Pointer Fairy: MP Max + WIS 보너스 static const pointerFairy = RaceTraits( raceId: 'pointer_fairy', name: 'Pointer Fairy', statModifiers: { StatType.wis: 2, StatType.str: -2, }, passives: [ PassiveAbility( type: PassiveType.mpBonus, value: 0.15, description: 'MP +15%', ), ], ); /// Register Gnome: INT 보너스 static const registerGnome = RaceTraits( raceId: 'register_gnome', name: 'Register Gnome', statModifiers: { StatType.intelligence: 2, StatType.str: -1, }, passives: [], ); /// Thread Spirit: MP Max 보너스 static const threadSpirit = RaceTraits( raceId: 'thread_spirit', name: 'Thread Spirit', statModifiers: { StatType.con: -1, }, passives: [ PassiveAbility( type: PassiveType.mpBonus, value: 0.20, description: 'MP +20%', ), ], ); /// Loop Wizard: INT + MP Max 보너스 static const loopWizard = RaceTraits( raceId: 'loop_wizard', name: 'Loop Wizard', statModifiers: { StatType.intelligence: 2, StatType.str: -1, StatType.con: -1, }, passives: [ PassiveAbility( type: PassiveType.mpBonus, value: 0.10, description: 'MP +10%', ), PassiveAbility( type: PassiveType.magicDamageBonus, value: 0.05, description: '마법 데미지 +5%', ), ], ); /// Lambda Druid: INT + WIS 보너스 static const lambdaDruid = RaceTraits( raceId: 'lambda_druid', name: 'Lambda Druid', statModifiers: { StatType.intelligence: 2, StatType.wis: 2, StatType.str: -2, StatType.con: -1, }, passives: [ PassiveAbility( type: PassiveType.magicDamageBonus, value: 0.10, description: '마법 데미지 +10%', ), ], ); /// 모든 종족 목록 (21개) static const List all = [ // 기본/HP형 byteHuman, kernelGiant, // 지혜형 nullElf, recursiveSage, callbackPriest, // 체력형 bufferDwarf, coredumpUndead, // 민첩형 bitHalfling, cacheImp, iteratorRogue, // 힘형 arrayOrc, flagKnight, protocolPaladin, // 복합형 stackGoblin, heapTroll, indexRanger, // 마법형 pointerFairy, registerGnome, threadSpirit, loopWizard, lambdaDruid, ]; /// ID로 종족 찾기 static RaceTraits? findById(String raceId) { for (final race in all) { if (race.raceId == raceId) return race; } return null; } /// 이름으로 종족 찾기 static RaceTraits? findByName(String name) { for (final race in all) { if (race.name == name) return race; } return null; } }