- SkillData 조정 - CombatCalculator 개선 - ItemService 업데이트 - ProgressService 개선 - SkillService 정리
1132 lines
26 KiB
Dart
1132 lines
26 KiB
Dart
import 'package:asciineverdie/src/core/model/skill.dart';
|
|
|
|
/// 게임 내 스킬 정의
|
|
///
|
|
/// PQ 스펠 70개를 전투 스킬로 매핑
|
|
/// 스펠 이름(영문)으로 스킬 조회 가능
|
|
class SkillData {
|
|
SkillData._();
|
|
|
|
// ============================================================================
|
|
// 공격 스킬 (Attack) - 18개
|
|
// ============================================================================
|
|
|
|
/// Stack Trace - 기본 공격 (빠른 쿨타임)
|
|
static const stackTrace = Skill(
|
|
id: 'stack_trace',
|
|
name: 'Stack Trace',
|
|
type: SkillType.attack,
|
|
mpCost: 10,
|
|
cooldownMs: 3000,
|
|
power: 15,
|
|
damageMultiplier: 2.0,
|
|
);
|
|
|
|
/// Core Dump - 중급 공격
|
|
static const coreDump = Skill(
|
|
id: 'core_dump',
|
|
name: 'Core Dump',
|
|
type: SkillType.attack,
|
|
mpCost: 35,
|
|
cooldownMs: 12000,
|
|
power: 30,
|
|
damageMultiplier: 3.0,
|
|
);
|
|
|
|
/// Memory Dump - DOT 공격
|
|
static const memoryDump = Skill(
|
|
id: 'memory_dump',
|
|
name: 'Memory Dump',
|
|
type: SkillType.attack,
|
|
mpCost: 25,
|
|
cooldownMs: 15000,
|
|
power: 0,
|
|
element: SkillElement.memory,
|
|
attackMode: AttackMode.dot,
|
|
baseDotDamage: 10,
|
|
baseDotDurationMs: 6000,
|
|
baseDotTickMs: 1000,
|
|
);
|
|
|
|
/// Kernel Panic - 최강 공격 (자해 데미지)
|
|
static const kernelPanic = Skill(
|
|
id: 'kernel_panic',
|
|
name: 'Kernel Panic',
|
|
type: SkillType.attack,
|
|
mpCost: 80,
|
|
cooldownMs: 45000,
|
|
power: 60,
|
|
damageMultiplier: 4.0,
|
|
selfDamagePercent: 0.1,
|
|
);
|
|
|
|
/// Blue Screen - 강력 공격 (긴 쿨타임)
|
|
static const blueScreen = Skill(
|
|
id: 'blue_screen',
|
|
name: 'Blue Screen',
|
|
type: SkillType.attack,
|
|
mpCost: 60,
|
|
cooldownMs: 30000,
|
|
power: 50,
|
|
damageMultiplier: 3.5,
|
|
);
|
|
|
|
/// Inject Code - 방어 무시 공격
|
|
static const injectCode = Skill(
|
|
id: 'inject_code',
|
|
name: 'Inject Code',
|
|
type: SkillType.attack,
|
|
mpCost: 40,
|
|
cooldownMs: 18000,
|
|
power: 35,
|
|
damageMultiplier: 2.5,
|
|
targetDefReduction: 0.5,
|
|
);
|
|
|
|
/// Spawn Shell - 3연타 공격
|
|
static const spawnShell = Skill(
|
|
id: 'spawn_shell',
|
|
name: 'Spawn Shell',
|
|
type: SkillType.attack,
|
|
mpCost: 30,
|
|
cooldownMs: 10000,
|
|
power: 12,
|
|
damageMultiplier: 2.0,
|
|
hitCount: 3,
|
|
);
|
|
|
|
/// Thread Pool - 5연타 공격
|
|
static const threadPool = Skill(
|
|
id: 'thread_pool',
|
|
name: 'Thread Pool',
|
|
type: SkillType.attack,
|
|
mpCost: 45,
|
|
cooldownMs: 15000,
|
|
power: 10,
|
|
damageMultiplier: 2.0,
|
|
hitCount: 5,
|
|
);
|
|
|
|
/// Exfiltrate Data - HP 흡수 공격
|
|
static const exfiltrateData = Skill(
|
|
id: 'exfiltrate_data',
|
|
name: 'Exfiltrate Data',
|
|
type: SkillType.attack,
|
|
mpCost: 35,
|
|
cooldownMs: 12000,
|
|
power: 25,
|
|
damageMultiplier: 2.0,
|
|
lifestealPercent: 0.3,
|
|
);
|
|
|
|
/// Fuzzing - 랜덤 데미지 공격
|
|
static const fuzzing = Skill(
|
|
id: 'fuzzing',
|
|
name: 'Fuzzing',
|
|
type: SkillType.attack,
|
|
mpCost: 20,
|
|
cooldownMs: 8000,
|
|
power: 20,
|
|
damageMultiplier: 2.0,
|
|
element: SkillElement.chaos,
|
|
);
|
|
|
|
/// Chaos Monkey - 랜덤 효과 공격
|
|
static const chaosMonkey = Skill(
|
|
id: 'chaos_monkey',
|
|
name: 'Chaos Monkey',
|
|
type: SkillType.attack,
|
|
mpCost: 50,
|
|
cooldownMs: 25000,
|
|
power: 40,
|
|
damageMultiplier: 3.2,
|
|
element: SkillElement.chaos,
|
|
);
|
|
|
|
/// Saga Pattern - 3회 연속 공격
|
|
static const sagaPattern = Skill(
|
|
id: 'saga_pattern',
|
|
name: 'Saga Pattern',
|
|
type: SkillType.attack,
|
|
mpCost: 55,
|
|
cooldownMs: 20000,
|
|
power: 18,
|
|
damageMultiplier: 2.2,
|
|
hitCount: 3,
|
|
);
|
|
|
|
/// Event Store - 차지 공격 (DOT로 표현)
|
|
static const eventStore = Skill(
|
|
id: 'event_store',
|
|
name: 'Event Store',
|
|
type: SkillType.attack,
|
|
mpCost: 40,
|
|
cooldownMs: 18000,
|
|
power: 0,
|
|
element: SkillElement.logic,
|
|
attackMode: AttackMode.dot,
|
|
baseDotDamage: 20,
|
|
baseDotDurationMs: 3000,
|
|
baseDotTickMs: 3000,
|
|
);
|
|
|
|
/// Auto Scale - HP비례 공격
|
|
static const autoScale = Skill(
|
|
id: 'auto_scale',
|
|
name: 'Auto Scale',
|
|
type: SkillType.attack,
|
|
mpCost: 45,
|
|
cooldownMs: 20000,
|
|
power: 30,
|
|
damageMultiplier: 2.5,
|
|
);
|
|
|
|
/// Disassemble - 방어감소+공격
|
|
static const disassemble = Skill(
|
|
id: 'disassemble',
|
|
name: 'Disassemble',
|
|
type: SkillType.attack,
|
|
mpCost: 30,
|
|
cooldownMs: 12000,
|
|
power: 22,
|
|
damageMultiplier: 2.0,
|
|
targetDefReduction: 0.3,
|
|
);
|
|
|
|
/// Decompile - 약점 공격 (높은 크리)
|
|
static const decompile = Skill(
|
|
id: 'decompile',
|
|
name: 'Decompile',
|
|
type: SkillType.attack,
|
|
mpCost: 25,
|
|
cooldownMs: 10000,
|
|
power: 20,
|
|
damageMultiplier: 2.2,
|
|
);
|
|
|
|
/// Canary Release - 테스트 공격
|
|
static const canaryRelease = Skill(
|
|
id: 'canary_release',
|
|
name: 'Canary Release',
|
|
type: SkillType.attack,
|
|
mpCost: 15,
|
|
cooldownMs: 6000,
|
|
power: 12,
|
|
damageMultiplier: 2.0,
|
|
);
|
|
|
|
/// A/B Test - 이중 공격
|
|
static const abTest = Skill(
|
|
id: 'ab_test',
|
|
name: 'A/B Test',
|
|
type: SkillType.attack,
|
|
mpCost: 35,
|
|
cooldownMs: 12000,
|
|
power: 15,
|
|
damageMultiplier: 2.0,
|
|
hitCount: 2,
|
|
);
|
|
|
|
/// Pivot Network - 네트워크 공격
|
|
static const pivotNetwork = Skill(
|
|
id: 'pivot_network',
|
|
name: 'Pivot Network',
|
|
type: SkillType.attack,
|
|
mpCost: 30,
|
|
cooldownMs: 10000,
|
|
power: 25,
|
|
damageMultiplier: 2.2,
|
|
element: SkillElement.network,
|
|
);
|
|
|
|
/// Async Await - 딜레이 공격
|
|
static const asyncAwait = Skill(
|
|
id: 'async_await',
|
|
name: 'Async Await',
|
|
type: SkillType.attack,
|
|
mpCost: 35,
|
|
cooldownMs: 14000,
|
|
power: 35,
|
|
damageMultiplier: 3.0,
|
|
);
|
|
|
|
/// Event Source - DOT 공격
|
|
static const eventSource = Skill(
|
|
id: 'event_source',
|
|
name: 'Event Source',
|
|
type: SkillType.attack,
|
|
mpCost: 30,
|
|
cooldownMs: 12000,
|
|
power: 0,
|
|
element: SkillElement.memory,
|
|
attackMode: AttackMode.dot,
|
|
baseDotDamage: 8,
|
|
baseDotDurationMs: 8000,
|
|
baseDotTickMs: 800,
|
|
);
|
|
|
|
/// CQRS Split - 분리 공격
|
|
static const cqrsSplit = Skill(
|
|
id: 'cqrs_split',
|
|
name: 'CQRS Split',
|
|
type: SkillType.attack,
|
|
mpCost: 40,
|
|
cooldownMs: 15000,
|
|
power: 20,
|
|
damageMultiplier: 2.0,
|
|
hitCount: 2,
|
|
);
|
|
|
|
// ============================================================================
|
|
// 회복 스킬 (Heal) - 12개
|
|
// ============================================================================
|
|
|
|
/// Garbage Collection - 기본 HP 회복
|
|
static const garbageCollection = Skill(
|
|
id: 'garbage_collection',
|
|
name: 'Garbage Collection',
|
|
type: SkillType.heal,
|
|
mpCost: 25,
|
|
cooldownMs: 15000,
|
|
power: 0,
|
|
healPercent: 0.3,
|
|
);
|
|
|
|
/// Hot Reload - 즉시 회복 (짧은 쿨타임)
|
|
static const hotReload = Skill(
|
|
id: 'hot_reload',
|
|
name: 'Hot Reload',
|
|
type: SkillType.heal,
|
|
mpCost: 15,
|
|
cooldownMs: 8000,
|
|
power: 0,
|
|
healAmount: 30,
|
|
);
|
|
|
|
/// Rollback - HP 회복
|
|
static const rollback = Skill(
|
|
id: 'rollback',
|
|
name: 'Rollback',
|
|
type: SkillType.heal,
|
|
mpCost: 30,
|
|
cooldownMs: 18000,
|
|
power: 0,
|
|
healPercent: 0.35,
|
|
);
|
|
|
|
/// Hotfix - 긴급 회복 (낮은 MP)
|
|
static const hotfix = Skill(
|
|
id: 'hotfix',
|
|
name: 'Hotfix',
|
|
type: SkillType.heal,
|
|
mpCost: 10,
|
|
cooldownMs: 6000,
|
|
power: 0,
|
|
healAmount: 20,
|
|
);
|
|
|
|
/// Snapshot Restore - 대량 회복 (50% HP)
|
|
static const snapshotRestore = Skill(
|
|
id: 'snapshot_restore',
|
|
name: 'Snapshot Restore',
|
|
type: SkillType.heal,
|
|
mpCost: 50,
|
|
cooldownMs: 30000,
|
|
power: 0,
|
|
healPercent: 0.5,
|
|
);
|
|
|
|
/// Patch Binary - 회복+버프 (HP + DEF)
|
|
static const patchBinary = Skill(
|
|
id: 'patch_binary',
|
|
name: 'Patch Binary',
|
|
type: SkillType.heal,
|
|
mpCost: 35,
|
|
cooldownMs: 20000,
|
|
power: 0,
|
|
healPercent: 0.25,
|
|
buff: BuffEffect(
|
|
id: 'patch_binary_buff',
|
|
name: 'Patched',
|
|
durationMs: 8000,
|
|
defModifier: 0.2,
|
|
),
|
|
);
|
|
|
|
/// Git Commit - HP 저장/회복
|
|
static const gitCommit = Skill(
|
|
id: 'git_commit',
|
|
name: 'Git Commit',
|
|
type: SkillType.heal,
|
|
mpCost: 20,
|
|
cooldownMs: 12000,
|
|
power: 0,
|
|
healPercent: 0.2,
|
|
);
|
|
|
|
/// Git Push - HP 복원
|
|
static const gitPush = Skill(
|
|
id: 'git_push',
|
|
name: 'Git Push',
|
|
type: SkillType.heal,
|
|
mpCost: 25,
|
|
cooldownMs: 15000,
|
|
power: 0,
|
|
healPercent: 0.25,
|
|
);
|
|
|
|
/// Connection Pool - MP 회복
|
|
static const connectionPool = Skill(
|
|
id: 'connection_pool',
|
|
name: 'Connection Pool',
|
|
type: SkillType.heal,
|
|
mpCost: 0,
|
|
cooldownMs: 20000,
|
|
power: 0,
|
|
mpHealAmount: 30,
|
|
);
|
|
|
|
/// Load Balance - HP/MP 균등화 (HP 회복)
|
|
static const loadBalance = Skill(
|
|
id: 'load_balance',
|
|
name: 'Load Balance',
|
|
type: SkillType.heal,
|
|
mpCost: 20,
|
|
cooldownMs: 15000,
|
|
power: 0,
|
|
healPercent: 0.2,
|
|
mpHealAmount: 15,
|
|
);
|
|
|
|
/// Blue Green Deploy - HP/MP 스왑
|
|
static const blueGreenDeploy = Skill(
|
|
id: 'blue_green_deploy',
|
|
name: 'Blue Green Deploy',
|
|
type: SkillType.heal,
|
|
mpCost: 30,
|
|
cooldownMs: 25000,
|
|
power: 0,
|
|
healPercent: 0.3,
|
|
);
|
|
|
|
/// Cache Invalidate - 디버프 해제 (클렌즈)
|
|
static const cacheInvalidate = Skill(
|
|
id: 'cache_invalidate',
|
|
name: 'Cache Invalidate',
|
|
type: SkillType.heal,
|
|
mpCost: 25,
|
|
cooldownMs: 18000,
|
|
power: 0,
|
|
healAmount: 15,
|
|
);
|
|
|
|
// ============================================================================
|
|
// 버프 스킬 (Buff) - 20개
|
|
// ============================================================================
|
|
|
|
/// Debug Mode - ATK +25%
|
|
static const debugMode = Skill(
|
|
id: 'debug_mode',
|
|
name: 'Debug Mode',
|
|
type: SkillType.buff,
|
|
mpCost: 20,
|
|
cooldownMs: 20000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'debug_mode_buff',
|
|
name: 'Debug Mode',
|
|
durationMs: 10000,
|
|
atkModifier: 0.25,
|
|
),
|
|
);
|
|
|
|
/// Safe Mode - DEF +30%
|
|
static const safeMode = Skill(
|
|
id: 'safe_mode',
|
|
name: 'Safe Mode',
|
|
type: SkillType.buff,
|
|
mpCost: 25,
|
|
cooldownMs: 25000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'safe_mode_buff',
|
|
name: 'Safe Mode',
|
|
durationMs: 10000,
|
|
defModifier: 0.3,
|
|
),
|
|
);
|
|
|
|
/// Memory Optimization - 전스탯 +10%
|
|
static const memoryOptimization = Skill(
|
|
id: 'memory_optimization',
|
|
name: 'Memory Optimization',
|
|
type: SkillType.buff,
|
|
mpCost: 30,
|
|
cooldownMs: 30000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'memory_optimization_buff',
|
|
name: 'Optimized',
|
|
durationMs: 15000,
|
|
atkModifier: 0.1,
|
|
defModifier: 0.1,
|
|
criRateModifier: 0.05,
|
|
evasionModifier: 0.05,
|
|
),
|
|
);
|
|
|
|
/// Breakpoint - 다음 공격 크리티컬
|
|
static const breakpoint = Skill(
|
|
id: 'breakpoint',
|
|
name: 'Breakpoint',
|
|
type: SkillType.buff,
|
|
mpCost: 15,
|
|
cooldownMs: 12000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'breakpoint_buff',
|
|
name: 'Breakpoint',
|
|
durationMs: 5000,
|
|
criRateModifier: 0.5,
|
|
),
|
|
);
|
|
|
|
/// Watch Variable - 회피율 +20%
|
|
static const watchVariable = Skill(
|
|
id: 'watch_variable',
|
|
name: 'Watch Variable',
|
|
type: SkillType.buff,
|
|
mpCost: 18,
|
|
cooldownMs: 15000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'watch_variable_buff',
|
|
name: 'Watching',
|
|
durationMs: 8000,
|
|
evasionModifier: 0.2,
|
|
),
|
|
);
|
|
|
|
/// Step Into - 공격속도 +30% (ATK 버프로 표현)
|
|
static const stepInto = Skill(
|
|
id: 'step_into',
|
|
name: 'Step Into',
|
|
type: SkillType.buff,
|
|
mpCost: 15,
|
|
cooldownMs: 12000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'step_into_buff',
|
|
name: 'Step Into',
|
|
durationMs: 6000,
|
|
atkModifier: 0.2,
|
|
),
|
|
);
|
|
|
|
/// Profile Run - 크리율 +30%
|
|
static const profileRun = Skill(
|
|
id: 'profile_run',
|
|
name: 'Profile Run',
|
|
type: SkillType.buff,
|
|
mpCost: 20,
|
|
cooldownMs: 18000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'profile_run_buff',
|
|
name: 'Profiling',
|
|
durationMs: 8000,
|
|
criRateModifier: 0.3,
|
|
),
|
|
);
|
|
|
|
/// Benchmark - 데미지 +40%
|
|
static const benchmark = Skill(
|
|
id: 'benchmark',
|
|
name: 'Benchmark',
|
|
type: SkillType.buff,
|
|
mpCost: 25,
|
|
cooldownMs: 20000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'benchmark_buff',
|
|
name: 'Benchmarking',
|
|
durationMs: 5000,
|
|
atkModifier: 0.4,
|
|
),
|
|
);
|
|
|
|
/// Elevate Privilege - 전스탯 +20%
|
|
static const elevatePrivilege = Skill(
|
|
id: 'elevate_privilege',
|
|
name: 'Elevate Privilege',
|
|
type: SkillType.buff,
|
|
mpCost: 40,
|
|
cooldownMs: 35000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'elevate_privilege_buff',
|
|
name: 'Elevated',
|
|
durationMs: 8000,
|
|
atkModifier: 0.2,
|
|
defModifier: 0.2,
|
|
criRateModifier: 0.1,
|
|
evasionModifier: 0.1,
|
|
),
|
|
);
|
|
|
|
/// Scale Up - ATK +50%
|
|
static const scaleUp = Skill(
|
|
id: 'scale_up',
|
|
name: 'Scale Up',
|
|
type: SkillType.buff,
|
|
mpCost: 35,
|
|
cooldownMs: 30000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'scale_up_buff',
|
|
name: 'Scaled Up',
|
|
durationMs: 6000,
|
|
atkModifier: 0.5,
|
|
),
|
|
);
|
|
|
|
/// Failover - 치명타 방지 (DEF 증가로 표현)
|
|
static const failover = Skill(
|
|
id: 'failover',
|
|
name: 'Failover',
|
|
type: SkillType.buff,
|
|
mpCost: 30,
|
|
cooldownMs: 45000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'failover_buff',
|
|
name: 'Failover Ready',
|
|
durationMs: 30000,
|
|
defModifier: 0.4,
|
|
),
|
|
);
|
|
|
|
/// Containerize - 방어막 (DEF 증가)
|
|
static const containerize = Skill(
|
|
id: 'containerize',
|
|
name: 'Containerize',
|
|
type: SkillType.buff,
|
|
mpCost: 25,
|
|
cooldownMs: 20000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'containerize_buff',
|
|
name: 'Containerized',
|
|
durationMs: 12000,
|
|
defModifier: 0.35,
|
|
),
|
|
);
|
|
|
|
/// Orchestrate - 복합 버프
|
|
static const orchestrate = Skill(
|
|
id: 'orchestrate',
|
|
name: 'Orchestrate',
|
|
type: SkillType.buff,
|
|
mpCost: 45,
|
|
cooldownMs: 40000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'orchestrate_buff',
|
|
name: 'Orchestrated',
|
|
durationMs: 10000,
|
|
atkModifier: 0.15,
|
|
defModifier: 0.15,
|
|
criRateModifier: 0.1,
|
|
),
|
|
);
|
|
|
|
/// Promise Resolve - 버프 즉시 발동
|
|
static const promiseResolve = Skill(
|
|
id: 'promise_resolve',
|
|
name: 'Promise Resolve',
|
|
type: SkillType.buff,
|
|
mpCost: 20,
|
|
cooldownMs: 15000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'promise_resolve_buff',
|
|
name: 'Resolved',
|
|
durationMs: 8000,
|
|
atkModifier: 0.25,
|
|
),
|
|
);
|
|
|
|
/// Feature Toggle - 버프 on/off
|
|
static const featureToggle = Skill(
|
|
id: 'feature_toggle',
|
|
name: 'Feature Toggle',
|
|
type: SkillType.buff,
|
|
mpCost: 15,
|
|
cooldownMs: 10000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'feature_toggle_buff',
|
|
name: 'Toggled',
|
|
durationMs: 12000,
|
|
atkModifier: 0.15,
|
|
defModifier: 0.15,
|
|
),
|
|
);
|
|
|
|
/// Dark Launch - 은신 (회피+100% → 50%로 조정)
|
|
static const darkLaunch = Skill(
|
|
id: 'dark_launch',
|
|
name: 'Dark Launch',
|
|
type: SkillType.buff,
|
|
mpCost: 35,
|
|
cooldownMs: 30000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'dark_launch_buff',
|
|
name: 'Hidden',
|
|
durationMs: 3000,
|
|
evasionModifier: 0.5,
|
|
),
|
|
);
|
|
|
|
/// Static Analysis - 적 스탯 확인 (크리 증가)
|
|
static const staticAnalysis = Skill(
|
|
id: 'static_analysis',
|
|
name: 'Static Analysis',
|
|
type: SkillType.buff,
|
|
mpCost: 15,
|
|
cooldownMs: 12000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'static_analysis_buff',
|
|
name: 'Analyzed',
|
|
durationMs: 10000,
|
|
criRateModifier: 0.15,
|
|
),
|
|
);
|
|
|
|
/// Dynamic Analysis - 크리+회피
|
|
static const dynamicAnalysis = Skill(
|
|
id: 'dynamic_analysis',
|
|
name: 'Dynamic Analysis',
|
|
type: SkillType.buff,
|
|
mpCost: 25,
|
|
cooldownMs: 18000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'dynamic_analysis_buff',
|
|
name: 'Dynamic',
|
|
durationMs: 8000,
|
|
criRateModifier: 0.15,
|
|
evasionModifier: 0.15,
|
|
),
|
|
);
|
|
|
|
/// Reverse Engineer - ATK 증가
|
|
static const reverseEngineer = Skill(
|
|
id: 'reverse_engineer',
|
|
name: 'Reverse Engineer',
|
|
type: SkillType.buff,
|
|
mpCost: 30,
|
|
cooldownMs: 25000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'reverse_engineer_buff',
|
|
name: 'Reversed',
|
|
durationMs: 10000,
|
|
atkModifier: 0.3,
|
|
),
|
|
);
|
|
|
|
/// Cover Tracks - 회피 증가
|
|
static const coverTracks = Skill(
|
|
id: 'cover_tracks',
|
|
name: 'Cover Tracks',
|
|
type: SkillType.buff,
|
|
mpCost: 20,
|
|
cooldownMs: 15000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'cover_tracks_buff',
|
|
name: 'Covered',
|
|
durationMs: 5000,
|
|
evasionModifier: 0.25,
|
|
),
|
|
);
|
|
|
|
/// Deploy - 분신 소환 (ATK 증가로 표현)
|
|
static const deploy = Skill(
|
|
id: 'deploy',
|
|
name: 'Deploy',
|
|
type: SkillType.buff,
|
|
mpCost: 35,
|
|
cooldownMs: 30000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'deploy_buff',
|
|
name: 'Deployed',
|
|
durationMs: 12000,
|
|
atkModifier: 0.35,
|
|
),
|
|
);
|
|
|
|
/// Retry Logic - 미스 방지 (크리 증가로 표현)
|
|
static const retryLogic = Skill(
|
|
id: 'retry_logic',
|
|
name: 'Retry Logic',
|
|
type: SkillType.buff,
|
|
mpCost: 20,
|
|
cooldownMs: 15000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'retry_logic_buff',
|
|
name: 'Retrying',
|
|
durationMs: 10000,
|
|
criRateModifier: 0.2,
|
|
),
|
|
);
|
|
|
|
/// State Machine - 상태 전이 (복합 버프)
|
|
static const stateMachine = Skill(
|
|
id: 'state_machine',
|
|
name: 'State Machine',
|
|
type: SkillType.buff,
|
|
mpCost: 30,
|
|
cooldownMs: 25000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'state_machine_buff',
|
|
name: 'State Active',
|
|
durationMs: 15000,
|
|
atkModifier: 0.1,
|
|
defModifier: 0.1,
|
|
),
|
|
);
|
|
|
|
// ============================================================================
|
|
// 디버프 스킬 (Debuff) - 12개
|
|
// ============================================================================
|
|
|
|
/// Step Over - 적 속도 -30% (적 ATK 감소로 표현)
|
|
static const stepOver = Skill(
|
|
id: 'step_over',
|
|
name: 'Step Over',
|
|
type: SkillType.debuff,
|
|
mpCost: 20,
|
|
cooldownMs: 15000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'step_over_debuff',
|
|
name: 'Slowed',
|
|
durationMs: 5000,
|
|
atkModifier: -0.3,
|
|
),
|
|
);
|
|
|
|
/// Cold Boot - 적 동결 (2초 스턴 → DEF 감소로 표현)
|
|
static const coldBoot = Skill(
|
|
id: 'cold_boot',
|
|
name: 'Cold Boot',
|
|
type: SkillType.debuff,
|
|
mpCost: 30,
|
|
cooldownMs: 25000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'cold_boot_debuff',
|
|
name: 'Frozen',
|
|
durationMs: 3000,
|
|
defModifier: -0.5,
|
|
atkModifier: -0.5,
|
|
),
|
|
);
|
|
|
|
/// Heap Analysis - 적 DEF -20%
|
|
static const heapAnalysis = Skill(
|
|
id: 'heap_analysis',
|
|
name: 'Heap Analysis',
|
|
type: SkillType.debuff,
|
|
mpCost: 25,
|
|
cooldownMs: 18000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'heap_analysis_debuff',
|
|
name: 'Analyzed',
|
|
durationMs: 8000,
|
|
defModifier: -0.2,
|
|
),
|
|
);
|
|
|
|
/// Unit Test - 버그 발견 (취약)
|
|
static const unitTest = Skill(
|
|
id: 'unit_test',
|
|
name: 'Unit Test',
|
|
type: SkillType.debuff,
|
|
mpCost: 20,
|
|
cooldownMs: 15000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'unit_test_debuff',
|
|
name: 'Bug Found',
|
|
durationMs: 10000,
|
|
defModifier: -0.15,
|
|
),
|
|
);
|
|
|
|
/// Integration Test - 연계 취약점
|
|
static const integrationTest = Skill(
|
|
id: 'integration_test',
|
|
name: 'Integration Test',
|
|
type: SkillType.debuff,
|
|
mpCost: 25,
|
|
cooldownMs: 18000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'integration_test_debuff',
|
|
name: 'Integration Bug',
|
|
durationMs: 8000,
|
|
defModifier: -0.2,
|
|
atkModifier: -0.1,
|
|
),
|
|
);
|
|
|
|
/// Sanitizer - 적 버프 해제 (ATK/DEF 감소로 표현)
|
|
static const sanitizer = Skill(
|
|
id: 'sanitizer',
|
|
name: 'Sanitizer',
|
|
type: SkillType.debuff,
|
|
mpCost: 30,
|
|
cooldownMs: 20000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'sanitizer_debuff',
|
|
name: 'Sanitized',
|
|
durationMs: 6000,
|
|
atkModifier: -0.25,
|
|
defModifier: -0.25,
|
|
),
|
|
);
|
|
|
|
/// Hook Function - 다음 공격 반사 (DEF 증가로 표현)
|
|
static const hookFunction = Skill(
|
|
id: 'hook_function',
|
|
name: 'Hook Function',
|
|
type: SkillType.debuff,
|
|
mpCost: 25,
|
|
cooldownMs: 22000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'hook_function_debuff',
|
|
name: 'Hooked',
|
|
durationMs: 5000,
|
|
atkModifier: -0.3,
|
|
),
|
|
);
|
|
|
|
/// Rate Limit - 적 공격속도 -50%
|
|
static const rateLimit = Skill(
|
|
id: 'rate_limit',
|
|
name: 'Rate Limit',
|
|
type: SkillType.debuff,
|
|
mpCost: 30,
|
|
cooldownMs: 25000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'rate_limit_debuff',
|
|
name: 'Rate Limited',
|
|
durationMs: 6000,
|
|
atkModifier: -0.4,
|
|
),
|
|
);
|
|
|
|
/// Circuit Break - 적 스킬 봉인 (ATK 대폭 감소)
|
|
static const circuitBreak = Skill(
|
|
id: 'circuit_break',
|
|
name: 'Circuit Break',
|
|
type: SkillType.debuff,
|
|
mpCost: 35,
|
|
cooldownMs: 30000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'circuit_break_debuff',
|
|
name: 'Circuit Broken',
|
|
durationMs: 5000,
|
|
atkModifier: -0.5,
|
|
),
|
|
);
|
|
|
|
/// Backpressure - 데미지 반사 30% (적 ATK 감소로 표현)
|
|
static const backpressure = Skill(
|
|
id: 'backpressure',
|
|
name: 'Backpressure',
|
|
type: SkillType.debuff,
|
|
mpCost: 25,
|
|
cooldownMs: 20000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'backpressure_debuff',
|
|
name: 'Pressured',
|
|
durationMs: 10000,
|
|
atkModifier: -0.2,
|
|
),
|
|
);
|
|
|
|
/// Git Merge - 충돌 유발 (혼란)
|
|
static const gitMerge = Skill(
|
|
id: 'git_merge',
|
|
name: 'Git Merge',
|
|
type: SkillType.debuff,
|
|
mpCost: 20,
|
|
cooldownMs: 15000,
|
|
power: 0,
|
|
buff: BuffEffect(
|
|
id: 'git_merge_debuff',
|
|
name: 'Merge Conflict',
|
|
durationMs: 3000,
|
|
atkModifier: -0.3,
|
|
defModifier: -0.2,
|
|
),
|
|
);
|
|
|
|
// ============================================================================
|
|
// 스펠 이름 → 스킬 매핑
|
|
// ============================================================================
|
|
|
|
/// PQ 스펠 이름으로 스킬 조회
|
|
///
|
|
/// 스펠 이름(영문)을 키로 사용하여 해당 전투 스킬을 반환
|
|
static const Map<String, Skill> spellNameToSkill = {
|
|
// 공격 스킬
|
|
'Stack Trace': stackTrace,
|
|
'Core Dump': coreDump,
|
|
'Memory Dump': memoryDump,
|
|
'Kernel Panic': kernelPanic,
|
|
'Blue Screen': blueScreen,
|
|
'Inject Code': injectCode,
|
|
'Spawn Shell': spawnShell,
|
|
'Thread Pool': threadPool,
|
|
'Exfiltrate Data': exfiltrateData,
|
|
'Fuzzing': fuzzing,
|
|
'Chaos Monkey': chaosMonkey,
|
|
'Saga Pattern': sagaPattern,
|
|
'Event Store': eventStore,
|
|
'Auto Scale': autoScale,
|
|
'Disassemble': disassemble,
|
|
'Decompile': decompile,
|
|
'Canary Release': canaryRelease,
|
|
'A/B Test': abTest,
|
|
'Pivot Network': pivotNetwork,
|
|
'Async Await': asyncAwait,
|
|
'Event Source': eventSource,
|
|
'CQRS Split': cqrsSplit,
|
|
|
|
// 회복 스킬
|
|
'Garbage Collection': garbageCollection,
|
|
'Hot Reload': hotReload,
|
|
'Rollback': rollback,
|
|
'Hotfix': hotfix,
|
|
'Snapshot Restore': snapshotRestore,
|
|
'Patch Binary': patchBinary,
|
|
'Git Commit': gitCommit,
|
|
'Git Push': gitPush,
|
|
'Connection Pool': connectionPool,
|
|
'Load Balance': loadBalance,
|
|
'Blue Green Deploy': blueGreenDeploy,
|
|
'Cache Invalidate': cacheInvalidate,
|
|
|
|
// 버프 스킬
|
|
'Debug Mode': debugMode,
|
|
'Safe Mode': safeMode,
|
|
'Memory Optimization': memoryOptimization,
|
|
'Breakpoint': breakpoint,
|
|
'Watch Variable': watchVariable,
|
|
'Step Into': stepInto,
|
|
'Profile Run': profileRun,
|
|
'Benchmark': benchmark,
|
|
'Elevate Privilege': elevatePrivilege,
|
|
'Scale Up': scaleUp,
|
|
'Failover': failover,
|
|
'Containerize': containerize,
|
|
'Orchestrate': orchestrate,
|
|
'Promise Resolve': promiseResolve,
|
|
'Feature Toggle': featureToggle,
|
|
'Dark Launch': darkLaunch,
|
|
'Static Analysis': staticAnalysis,
|
|
'Dynamic Analysis': dynamicAnalysis,
|
|
'Reverse Engineer': reverseEngineer,
|
|
'Cover Tracks': coverTracks,
|
|
'Deploy': deploy,
|
|
'Retry Logic': retryLogic,
|
|
'State Machine': stateMachine,
|
|
|
|
// 디버프 스킬
|
|
'Step Over': stepOver,
|
|
'Cold Boot': coldBoot,
|
|
'Heap Analysis': heapAnalysis,
|
|
'Unit Test': unitTest,
|
|
'Integration Test': integrationTest,
|
|
'Sanitizer': sanitizer,
|
|
'Hook Function': hookFunction,
|
|
'Rate Limit': rateLimit,
|
|
'Circuit Break': circuitBreak,
|
|
'Backpressure': backpressure,
|
|
'Git Merge': gitMerge,
|
|
};
|
|
|
|
// ============================================================================
|
|
// 스킬 목록
|
|
// ============================================================================
|
|
|
|
/// 모든 스킬 목록
|
|
static List<Skill> get allSkills => spellNameToSkill.values.toList();
|
|
|
|
/// 기본 스킬 ID 목록 (SpellBook이 비어있을 때 사용)
|
|
static List<String> get defaultSkillIds => const [
|
|
'stack_trace', // 기본 공격
|
|
'garbage_collection', // 기본 회복
|
|
];
|
|
|
|
/// 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 Skill? getSkillBySpellName(String spellName) {
|
|
return spellNameToSkill[spellName];
|
|
}
|
|
|
|
/// 타입별 스킬 목록
|
|
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<Skill> get debuffSkills => getSkillsByType(SkillType.debuff);
|
|
|
|
/// MP 비용 이하의 사용 가능한 공격 스킬
|
|
static List<Skill> getAffordableAttackSkills(int currentMp) {
|
|
return getSkillsByType(
|
|
SkillType.attack,
|
|
).where((s) => s.mpCost <= currentMp).toList();
|
|
}
|
|
}
|