- 포션 시스템 구현 (PotionService, Potion 모델) - 포션 인벤토리 패널 위젯 - 활성 버프 패널 위젯 - 장비 스탯 패널 위젯 - 스킬 시스템 확장 - 일본어 번역 추가 - 전투 이벤트/상태 모델 개선
338 lines
8.7 KiB
Dart
338 lines
8.7 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,
|
|
);
|
|
|
|
// ============================================================================
|
|
// 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초마다 틱
|
|
);
|
|
|
|
// ============================================================================
|
|
// 회복 스킬
|
|
// ============================================================================
|
|
|
|
/// 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,
|
|
// DOT 스킬
|
|
memoryCorruption,
|
|
infiniteLoop,
|
|
thermalThrottle,
|
|
raceCondition,
|
|
system32Delete,
|
|
// 회복 스킬
|
|
quickFix,
|
|
hotReload,
|
|
garbageCollection,
|
|
// 버프 스킬
|
|
overclock,
|
|
safeMode,
|
|
firewall,
|
|
];
|
|
|
|
/// DOT 스킬 목록
|
|
static List<Skill> get dotSkills =>
|
|
allSkills.where((s) => s.isDot).toList();
|
|
|
|
/// 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();
|
|
}
|
|
}
|