- 종족: 7개 → 21개 (pq_config_data.dart 기준) - 클래스: 6개 → 18개 (pq_config_data.dart 기준) - 각 종족/클래스에 적절한 스탯 보정 및 패시브 추가
414 lines
9.4 KiB
Dart
414 lines
9.4 KiB
Dart
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<RaceTraits> 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;
|
|
}
|
|
}
|