feat(game): 포션 시스템 및 UI 패널 추가

- 포션 시스템 구현 (PotionService, Potion 모델)
- 포션 인벤토리 패널 위젯
- 활성 버프 패널 위젯
- 장비 스탯 패널 위젯
- 스킬 시스템 확장
- 일본어 번역 추가
- 전투 이벤트/상태 모델 개선
This commit is contained in:
JiWoong Sul
2025-12-21 23:53:27 +09:00
parent eb71d2a199
commit 7cd8be88df
25 changed files with 5174 additions and 261 deletions

View File

@@ -78,6 +78,100 @@ class SkillData {
damageMultiplier: 1.8,
);
// ============================================================================
// DOT (지속 피해) 스킬
// ============================================================================
/// Memory Corruption - 기본 DOT 스킬
///
/// INT → 틱당 데미지 보정, WIS → 틱 간격 보정
static const memoryCorruption = Skill(
id: 'memory_corruption',
name: 'Memory Corruption',
type: SkillType.attack,
mpCost: 20,
cooldownMs: 10000, // 10초
power: 0,
damageMultiplier: 0,
element: SkillElement.memory,
attackMode: AttackMode.dot,
baseDotDamage: 8, // 틱당 8 데미지 (INT 보정 전)
baseDotDurationMs: 6000, // 6초 지속
baseDotTickMs: 1000, // 1초마다 틱
);
/// Infinite Loop - 장시간 DOT
///
/// 오래 지속되는 중급 DOT
static const infiniteLoop = Skill(
id: 'infinite_loop',
name: 'Infinite Loop',
type: SkillType.attack,
mpCost: 35,
cooldownMs: 18000, // 18초
power: 0,
damageMultiplier: 0,
element: SkillElement.memory,
attackMode: AttackMode.dot,
baseDotDamage: 12, // 틱당 12 데미지
baseDotDurationMs: 10000, // 10초 지속
baseDotTickMs: 1000, // 1초마다 틱
);
/// Thermal Throttle - 화염 DOT
///
/// 빠른 틱, 짧은 지속시간
static const thermalThrottle = Skill(
id: 'thermal_throttle',
name: 'Thermal Throttle',
type: SkillType.attack,
mpCost: 30,
cooldownMs: 12000, // 12초
power: 0,
damageMultiplier: 0,
element: SkillElement.fire,
attackMode: AttackMode.dot,
baseDotDamage: 15, // 틱당 15 데미지
baseDotDurationMs: 4000, // 4초 지속
baseDotTickMs: 500, // 0.5초마다 틱
);
/// Race Condition - 빠른 DOT
///
/// 매우 빠른 틱의 번개 DOT
static const raceCondition = Skill(
id: 'race_condition',
name: 'Race Condition',
type: SkillType.attack,
mpCost: 45,
cooldownMs: 15000, // 15초
power: 0,
damageMultiplier: 0,
element: SkillElement.lightning,
attackMode: AttackMode.dot,
baseDotDamage: 6, // 틱당 6 데미지
baseDotDurationMs: 5000, // 5초 지속
baseDotTickMs: 300, // 0.3초마다 틱
);
/// System32 Delete - 강력한 DOT
///
/// 높은 틱 데미지의 공허 DOT
static const system32Delete = Skill(
id: 'system32_delete',
name: 'System32 Delete',
type: SkillType.attack,
mpCost: 70,
cooldownMs: 30000, // 30초
power: 0,
damageMultiplier: 0,
element: SkillElement.voidElement,
attackMode: AttackMode.dot,
baseDotDamage: 25, // 틱당 25 데미지
baseDotDurationMs: 8000, // 8초 지속
baseDotTickMs: 1000, // 1초마다 틱
);
// ============================================================================
// 회복 스킬
// ============================================================================
@@ -175,13 +269,19 @@ class SkillData {
/// 모든 스킬 목록
static const List<Skill> allSkills = [
// 공격 스킬
// 공격 스킬 (단발성)
debugStrike,
nullPointer,
memoryLeak,
stackOverflow,
coreDump,
kernelPanic,
// DOT 스킬
memoryCorruption,
infiniteLoop,
thermalThrottle,
raceCondition,
system32Delete,
// 회복 스킬
quickFix,
hotReload,
@@ -192,6 +292,10 @@ class SkillData {
firewall,
];
/// DOT 스킬 목록
static List<Skill> get dotSkills =>
allSkills.where((s) => s.isDot).toList();
/// ID로 스킬 찾기
static Skill? getSkillById(String id) {
for (final skill in allSkills) {