feat(game): 게임 시스템 전면 개편 및 다국어 지원 확장
## 스킬 시스템 개선 - skill_data.dart: 스킬 데이터 구조 전면 개편 (+1176 라인) - skill_service.dart: 스킬 발동 로직 확장 및 버프 시스템 연동 - skill.dart: 스킬 모델 개선, 쿨다운/효과 타입 추가 ## Canvas 애니메이션 리팩토링 - battle_composer.dart 삭제 (레거시 위젯 기반 렌더러) - monster_colors.dart 삭제 (AsciiCell 색상 시스템으로 통합) - canvas_battle_composer.dart: z-index 정렬 (몬스터 z=1, 캐릭터 z=2, 이펙트 z=3) - ascii_cell.dart, ascii_layer.dart: 코드 정리 ## UI/UX 개선 - hp_mp_bar.dart: l10n 적용, 몬스터 HP 바 컴팩트화 - death_overlay.dart: 사망 화면 개선 - equipment_stats_panel.dart: 장비 스탯 표시 확장 - active_buff_panel.dart: 버프 패널 개선 - notification_overlay.dart: 알림 시스템 개선 ## 다국어 지원 확장 - game_text_l10n.dart: 게임 텍스트 통합 (+758 라인) - 한국어/일본어/영어/중국어 번역 업데이트 - ARB 파일 동기화 ## 게임 로직 개선 - progress_service.dart: 진행 로직 리팩토링 - combat_calculator.dart: 전투 계산 로직 개선 - stat_calculator.dart: 스탯 계산 시스템 개선 - story_service.dart: 스토리 진행 로직 개선 ## 기타 - theme_preferences.dart 삭제 (미사용) - 테스트 파일 업데이트 - class_data.dart: 클래스 데이터 정리
This commit is contained in:
@@ -16,10 +16,7 @@ class ClassData {
|
||||
static const bugHunter = ClassTraits(
|
||||
classId: 'bug_hunter',
|
||||
name: 'Bug Hunter',
|
||||
statModifiers: {
|
||||
StatType.str: 2,
|
||||
StatType.intelligence: 1,
|
||||
},
|
||||
statModifiers: {StatType.str: 2, StatType.intelligence: 1},
|
||||
startingSkills: ['power_strike'],
|
||||
classSkills: ['power_strike', 'execute', 'bug_smash'],
|
||||
passives: [
|
||||
@@ -36,10 +33,7 @@ class ClassData {
|
||||
static const overflowWarrior = ClassTraits(
|
||||
classId: 'overflow_warrior',
|
||||
name: 'Overflow Warrior',
|
||||
statModifiers: {
|
||||
StatType.str: 2,
|
||||
StatType.con: 1,
|
||||
},
|
||||
statModifiers: {StatType.str: 2, StatType.con: 1},
|
||||
startingSkills: ['power_strike'],
|
||||
classSkills: ['power_strike', 'overflow_slash', 'buffer_break'],
|
||||
passives: [
|
||||
@@ -56,10 +50,7 @@ class ClassData {
|
||||
static const stackCrusher = ClassTraits(
|
||||
classId: 'stack_crusher',
|
||||
name: 'Stack Crusher',
|
||||
statModifiers: {
|
||||
StatType.str: 2,
|
||||
StatType.con: 1,
|
||||
},
|
||||
statModifiers: {StatType.str: 2, StatType.con: 1},
|
||||
startingSkills: ['power_strike'],
|
||||
classSkills: ['power_strike', 'stack_smash', 'heap_slam'],
|
||||
passives: [
|
||||
@@ -81,10 +72,7 @@ class ClassData {
|
||||
static const assertionKnight = ClassTraits(
|
||||
classId: 'assertion_knight',
|
||||
name: 'Assertion Knight',
|
||||
statModifiers: {
|
||||
StatType.str: 2,
|
||||
StatType.wis: 1,
|
||||
},
|
||||
statModifiers: {StatType.str: 2, StatType.wis: 1},
|
||||
startingSkills: ['shield_bash'],
|
||||
classSkills: ['shield_bash', 'assert_strike', 'validation_guard'],
|
||||
passives: [
|
||||
@@ -94,9 +82,7 @@ class ClassData {
|
||||
description: '방어력 +10%',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.heavy,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.heavy),
|
||||
);
|
||||
|
||||
// ==========================================================================
|
||||
@@ -107,10 +93,7 @@ class ClassData {
|
||||
static const debuggerPaladin = ClassTraits(
|
||||
classId: 'debugger_paladin',
|
||||
name: 'Debugger Paladin',
|
||||
statModifiers: {
|
||||
StatType.wis: 2,
|
||||
StatType.con: 1,
|
||||
},
|
||||
statModifiers: {StatType.wis: 2, StatType.con: 1},
|
||||
startingSkills: ['shield_bash'],
|
||||
classSkills: ['shield_bash', 'debug_heal', 'breakpoint_guard'],
|
||||
passives: [
|
||||
@@ -125,19 +108,14 @@ class ClassData {
|
||||
description: '회복력 +10%',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.heavy,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.heavy),
|
||||
);
|
||||
|
||||
/// Loop Breaker: CON + STR (스탯 합계: +3)
|
||||
static const loopBreaker = ClassTraits(
|
||||
classId: 'loop_breaker',
|
||||
name: 'Loop Breaker',
|
||||
statModifiers: {
|
||||
StatType.con: 2,
|
||||
StatType.str: 1,
|
||||
},
|
||||
statModifiers: {StatType.con: 2, StatType.str: 1},
|
||||
startingSkills: ['shield_bash'],
|
||||
classSkills: ['shield_bash', 'infinite_guard', 'break_stance'],
|
||||
passives: [
|
||||
@@ -147,19 +125,14 @@ class ClassData {
|
||||
description: 'HP +15%',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.heavy,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.heavy),
|
||||
);
|
||||
|
||||
/// Garbage Collector: CON + STR (스탯 합계: +3)
|
||||
static const garbageCollector = ClassTraits(
|
||||
classId: 'garbage_collector',
|
||||
name: 'Garbage Collector',
|
||||
statModifiers: {
|
||||
StatType.con: 2,
|
||||
StatType.str: 1,
|
||||
},
|
||||
statModifiers: {StatType.con: 2, StatType.str: 1},
|
||||
startingSkills: ['absorb'],
|
||||
classSkills: ['absorb', 'recycle', 'memory_sweep'],
|
||||
passives: [
|
||||
@@ -174,9 +147,7 @@ class ClassData {
|
||||
description: '전투 후 HP 5% 회복',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.heavy,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.heavy),
|
||||
);
|
||||
|
||||
// ==========================================================================
|
||||
@@ -187,10 +158,7 @@ class ClassData {
|
||||
static const compilerMage = ClassTraits(
|
||||
classId: 'compiler_mage',
|
||||
name: 'Compiler Mage',
|
||||
statModifiers: {
|
||||
StatType.intelligence: 2,
|
||||
StatType.wis: 1,
|
||||
},
|
||||
statModifiers: {StatType.intelligence: 2, StatType.wis: 1},
|
||||
startingSkills: ['fireball'],
|
||||
classSkills: ['fireball', 'compile_blast', 'syntax_storm'],
|
||||
passives: [
|
||||
@@ -200,19 +168,14 @@ class ClassData {
|
||||
description: '마법 데미지 +15%',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.light,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.light),
|
||||
);
|
||||
|
||||
/// Recursion Master: INT + DEX (스탯 합계: +3)
|
||||
static const recursionMaster = ClassTraits(
|
||||
classId: 'recursion_master',
|
||||
name: 'Recursion Master',
|
||||
statModifiers: {
|
||||
StatType.intelligence: 2,
|
||||
StatType.dex: 1,
|
||||
},
|
||||
statModifiers: {StatType.intelligence: 2, StatType.dex: 1},
|
||||
startingSkills: ['fireball'],
|
||||
classSkills: ['fireball', 'recursive_bolt', 'stack_overflow'],
|
||||
passives: [
|
||||
@@ -222,19 +185,14 @@ class ClassData {
|
||||
description: '마법 데미지 +20%',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.light,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.light),
|
||||
);
|
||||
|
||||
/// Memory Leaker: INT + WIS (스탯 합계: +3)
|
||||
static const memoryLeaker = ClassTraits(
|
||||
classId: 'memory_leaker',
|
||||
name: 'Memory Leaker',
|
||||
statModifiers: {
|
||||
StatType.intelligence: 2,
|
||||
StatType.wis: 1,
|
||||
},
|
||||
statModifiers: {StatType.intelligence: 2, StatType.wis: 1},
|
||||
startingSkills: ['fireball'],
|
||||
classSkills: ['fireball', 'leak_drain', 'memory_corrupt'],
|
||||
passives: [
|
||||
@@ -244,19 +202,14 @@ class ClassData {
|
||||
description: '마법 데미지 +10%',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.light,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.light),
|
||||
);
|
||||
|
||||
/// Type Caster: INT + CHA (스탯 합계: +3)
|
||||
static const typeCaster = ClassTraits(
|
||||
classId: 'type_caster',
|
||||
name: 'Type Caster',
|
||||
statModifiers: {
|
||||
StatType.intelligence: 2,
|
||||
StatType.cha: 1,
|
||||
},
|
||||
statModifiers: {StatType.intelligence: 2, StatType.cha: 1},
|
||||
startingSkills: ['fireball'],
|
||||
classSkills: ['fireball', 'type_coercion', 'cast_spell'],
|
||||
passives: [
|
||||
@@ -266,19 +219,14 @@ class ClassData {
|
||||
description: '마법 데미지 +10%',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.light,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.light),
|
||||
);
|
||||
|
||||
/// DevOps Shaman: CON + INT (스탯 합계: +3)
|
||||
static const devOpsShaman = ClassTraits(
|
||||
classId: 'devops_shaman',
|
||||
name: 'DevOps Shaman',
|
||||
statModifiers: {
|
||||
StatType.con: 1,
|
||||
StatType.intelligence: 2,
|
||||
},
|
||||
statModifiers: {StatType.con: 1, StatType.intelligence: 2},
|
||||
startingSkills: ['fireball'],
|
||||
classSkills: ['fireball', 'deploy_strike', 'ci_cd_flow'],
|
||||
passives: [
|
||||
@@ -293,9 +241,7 @@ class ClassData {
|
||||
description: 'HP +10%',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.light,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.light),
|
||||
);
|
||||
|
||||
// ==========================================================================
|
||||
@@ -306,10 +252,7 @@ class ClassData {
|
||||
static const refactorMonk = ClassTraits(
|
||||
classId: 'refactor_monk',
|
||||
name: 'Refactor Monk',
|
||||
statModifiers: {
|
||||
StatType.dex: 2,
|
||||
StatType.con: 1,
|
||||
},
|
||||
statModifiers: {StatType.dex: 2, StatType.con: 1},
|
||||
startingSkills: ['flurry'],
|
||||
classSkills: ['flurry', 'clean_code_strike', 'refactor_combo'],
|
||||
passives: [
|
||||
@@ -324,19 +267,14 @@ class ClassData {
|
||||
description: '연속 공격',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.light,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.light),
|
||||
);
|
||||
|
||||
/// Pointer Assassin: DEX + STR (스탯 합계: +3)
|
||||
static const pointerAssassin = ClassTraits(
|
||||
classId: 'pointer_assassin',
|
||||
name: 'Pointer Assassin',
|
||||
statModifiers: {
|
||||
StatType.dex: 2,
|
||||
StatType.str: 1,
|
||||
},
|
||||
statModifiers: {StatType.dex: 2, StatType.str: 1},
|
||||
startingSkills: ['backstab'],
|
||||
classSkills: ['backstab', 'null_strike', 'dereference_kill'],
|
||||
passives: [
|
||||
@@ -351,19 +289,14 @@ class ClassData {
|
||||
description: '첫 공격 1.5배',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.light,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.light),
|
||||
);
|
||||
|
||||
/// Callback Samurai: DEX + STR (스탯 합계: +3)
|
||||
static const callbackSamurai = ClassTraits(
|
||||
classId: 'callback_samurai',
|
||||
name: 'Callback Samurai',
|
||||
statModifiers: {
|
||||
StatType.dex: 2,
|
||||
StatType.str: 1,
|
||||
},
|
||||
statModifiers: {StatType.dex: 2, StatType.str: 1},
|
||||
startingSkills: ['power_strike'],
|
||||
classSkills: ['power_strike', 'async_slash', 'promise_blade'],
|
||||
passives: [
|
||||
@@ -385,10 +318,7 @@ class ClassData {
|
||||
static const testerJester = ClassTraits(
|
||||
classId: 'tester_jester',
|
||||
name: 'Tester Jester',
|
||||
statModifiers: {
|
||||
StatType.dex: 2,
|
||||
StatType.cha: 1,
|
||||
},
|
||||
statModifiers: {StatType.dex: 2, StatType.cha: 1},
|
||||
startingSkills: ['flurry'],
|
||||
classSkills: ['flurry', 'mock_strike', 'assert_fail'],
|
||||
passives: [
|
||||
@@ -403,9 +333,7 @@ class ClassData {
|
||||
description: '크리티컬 +5%',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.light,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.light),
|
||||
);
|
||||
|
||||
// ==========================================================================
|
||||
@@ -416,10 +344,7 @@ class ClassData {
|
||||
static const exceptionHandler = ClassTraits(
|
||||
classId: 'exception_handler',
|
||||
name: 'Exception Handler',
|
||||
statModifiers: {
|
||||
StatType.wis: 2,
|
||||
StatType.intelligence: 1,
|
||||
},
|
||||
statModifiers: {StatType.wis: 2, StatType.intelligence: 1},
|
||||
startingSkills: ['heal'],
|
||||
classSkills: ['heal', 'try_catch', 'finally_heal'],
|
||||
passives: [
|
||||
@@ -429,19 +354,14 @@ class ClassData {
|
||||
description: '회복력 +15%',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.light,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.light),
|
||||
);
|
||||
|
||||
/// Null Checker: WIS + INT (스탯 합계: +3)
|
||||
static const nullChecker = ClassTraits(
|
||||
classId: 'null_checker',
|
||||
name: 'Null Checker',
|
||||
statModifiers: {
|
||||
StatType.wis: 2,
|
||||
StatType.intelligence: 1,
|
||||
},
|
||||
statModifiers: {StatType.wis: 2, StatType.intelligence: 1},
|
||||
startingSkills: ['heal'],
|
||||
classSkills: ['heal', 'null_guard', 'safe_call'],
|
||||
passives: [
|
||||
@@ -456,9 +376,7 @@ class ClassData {
|
||||
description: '방어력 +5%',
|
||||
),
|
||||
],
|
||||
restriction: EquipmentRestriction(
|
||||
armorWeight: ArmorWeight.light,
|
||||
),
|
||||
restriction: EquipmentRestriction(armorWeight: ArmorWeight.light),
|
||||
);
|
||||
|
||||
/// 모든 클래스 목록 (18개)
|
||||
|
||||
Reference in New Issue
Block a user