Files
asciinevrdie/lib/data/skill_data.dart
JiWoong Sul 517bf54a56 feat(skill): Phase 3 MP 기반 스킬 시스템 구현
- Skill, SkillType, BuffEffect, SkillState, SkillUseResult 클래스 정의 (skill.dart)
- SkillSystemState를 GameState에 통합 (activeBuffs, skillStates, elapsedMs)
- 프로그래밍 테마 스킬 데이터 정의 (skill_data.dart)
  - 공격: Debug Strike, Memory Leak, Core Dump, Kernel Panic 등
  - 회복: Hot Reload, Garbage Collection, Quick Fix
  - 버프: Safe Mode, Overclock, Firewall
- SkillService 구현 (skill_service.dart)
  - 스킬 사용 가능 여부 확인 (MP, 쿨타임)
  - 공격/회복/버프 스킬 사용 로직
  - 자동 스킬 선택 (HP < 30% → 회복, 보스전 → 강력한 공격, 일반 → MP 효율)
  - MP 자연 회복 (비전투: 50ms당 1, 전투: WIS 기반)
- progress_service.dart에 스킬 시스템 통합
  - tick()에서 스킬 시간 업데이트 및 버프 만료 처리
  - _processCombatTickWithSkills()로 전투 중 자동 스킬 사용
2025-12-17 17:05:48 +09:00

234 lines
5.8 KiB
Dart

import 'package:askiineverdie/src/core/model/skill.dart';
/// 게임 내 스킬 정의
///
/// 프로그래밍 테마에 맞춘 스킬 목록
class SkillData {
SkillData._();
// ============================================================================
// 공격 스킬
// ============================================================================
/// Debug Strike - 기본 공격 스킬
static const debugStrike = Skill(
id: 'debug_strike',
name: 'Debug Strike',
type: SkillType.attack,
mpCost: 10,
cooldownMs: 3000, // 3초
power: 15,
damageMultiplier: 1.5,
);
/// Memory Leak - 방어력 감소 효과
static const memoryLeak = Skill(
id: 'memory_leak',
name: 'Memory Leak',
type: SkillType.attack,
mpCost: 25,
cooldownMs: 8000, // 8초
power: 25,
damageMultiplier: 2.5,
targetDefReduction: 0.2, // 적 방어력 -20%
);
/// Core Dump - 강력한 공격
static const coreDump = Skill(
id: 'core_dump',
name: 'Core Dump',
type: SkillType.attack,
mpCost: 50,
cooldownMs: 20000, // 20초
power: 40,
damageMultiplier: 4.0,
);
/// Kernel Panic - 최강 공격 (자해 데미지)
static const kernelPanic = Skill(
id: 'kernel_panic',
name: 'Kernel Panic',
type: SkillType.attack,
mpCost: 100,
cooldownMs: 60000, // 60초
power: 80,
damageMultiplier: 8.0,
selfDamagePercent: 0.1, // 자신 HP -10%
);
/// Stack Overflow - 중급 공격
static const stackOverflow = Skill(
id: 'stack_overflow',
name: 'Stack Overflow',
type: SkillType.attack,
mpCost: 35,
cooldownMs: 12000, // 12초
power: 30,
damageMultiplier: 3.0,
);
/// Null Pointer - 빠른 공격
static const nullPointer = Skill(
id: 'null_pointer',
name: 'Null Pointer',
type: SkillType.attack,
mpCost: 15,
cooldownMs: 4000, // 4초
power: 18,
damageMultiplier: 1.8,
);
// ============================================================================
// 회복 스킬
// ============================================================================
/// Hot Reload - HP 회복
static const hotReload = Skill(
id: 'hot_reload',
name: 'Hot Reload',
type: SkillType.heal,
mpCost: 20,
cooldownMs: 10000, // 10초
power: 0,
healPercent: 0.3, // HP 30% 회복
);
/// Garbage Collection - 대량 회복
static const garbageCollection = Skill(
id: 'garbage_collection',
name: 'Garbage Collection',
type: SkillType.heal,
mpCost: 45,
cooldownMs: 25000, // 25초
power: 0,
healPercent: 0.5, // HP 50% 회복
);
/// Quick Fix - 빠른 소량 회복
static const quickFix = Skill(
id: 'quick_fix',
name: 'Quick Fix',
type: SkillType.heal,
mpCost: 10,
cooldownMs: 5000, // 5초
power: 0,
healAmount: 20, // 고정 20 회복
);
// ============================================================================
// 버프 스킬
// ============================================================================
/// Safe Mode - 방어 버프
static const safeMode = Skill(
id: 'safe_mode',
name: 'Safe Mode',
type: SkillType.buff,
mpCost: 30,
cooldownMs: 30000, // 30초
power: 0,
buff: BuffEffect(
id: 'safe_mode_buff',
name: 'Safe Mode',
durationMs: 10000, // 10초 지속
defModifier: 0.5, // 방어력 +50%
),
);
/// Overclock - 공격 버프
static const overclock = Skill(
id: 'overclock',
name: 'Overclock',
type: SkillType.buff,
mpCost: 25,
cooldownMs: 25000, // 25초
power: 0,
buff: BuffEffect(
id: 'overclock_buff',
name: 'Overclock',
durationMs: 8000, // 8초 지속
atkModifier: 0.4, // 공격력 +40%
criRateModifier: 0.1, // 크리티컬 +10%
),
);
/// Firewall - 회피 버프
static const firewall = Skill(
id: 'firewall',
name: 'Firewall',
type: SkillType.buff,
mpCost: 20,
cooldownMs: 20000, // 20초
power: 0,
buff: BuffEffect(
id: 'firewall_buff',
name: 'Firewall',
durationMs: 12000, // 12초 지속
evasionModifier: 0.15, // 회피율 +15%
defModifier: 0.2, // 방어력 +20%
),
);
// ============================================================================
// 스킬 목록
// ============================================================================
/// 모든 스킬 목록
static const List<Skill> allSkills = [
// 공격 스킬
debugStrike,
nullPointer,
memoryLeak,
stackOverflow,
coreDump,
kernelPanic,
// 회복 스킬
quickFix,
hotReload,
garbageCollection,
// 버프 스킬
overclock,
safeMode,
firewall,
];
/// ID로 스킬 찾기
static Skill? getSkillById(String id) {
for (final skill in allSkills) {
if (skill.id == id) return skill;
}
return null;
}
/// 타입별 스킬 목록
static List<Skill> getSkillsByType(SkillType type) {
return allSkills.where((s) => s.type == type).toList();
}
/// 공격 스킬 목록 (MP 효율순 정렬)
static List<Skill> get attackSkillsByEfficiency {
final attacks = getSkillsByType(SkillType.attack);
attacks.sort((a, b) => b.mpEfficiency.compareTo(a.mpEfficiency));
return attacks;
}
/// 회복 스킬 목록
static List<Skill> get healSkills => getSkillsByType(SkillType.heal);
/// 버프 스킬 목록
static List<Skill> get buffSkills => getSkillsByType(SkillType.buff);
/// 기본 스킬 세트 (새 캐릭터용)
static List<String> get defaultSkillIds => [
debugStrike.id,
quickFix.id,
];
/// MP 비용 이하의 사용 가능한 공격 스킬
static List<Skill> getAffordableAttackSkills(int currentMp) {
return getSkillsByType(SkillType.attack)
.where((s) => s.mpCost <= currentMp)
.toList();
}
}