feat(game): 포션 시스템 및 UI 패널 추가
- 포션 시스템 구현 (PotionService, Potion 모델) - 포션 인벤토리 패널 위젯 - 활성 버프 패널 위젯 - 장비 스탯 패널 위젯 - 스킬 시스템 확장 - 일본어 번역 추가 - 전투 이벤트/상태 모델 개선
This commit is contained in:
@@ -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) {
|
||||
|
||||
Reference in New Issue
Block a user