7.0 KiB
종족/클래스 패시브 미반영 수정 계획
1. 현황 분석
반영되는 패시브 (전투 스탯 계산에 적용됨)
- HP/MP 보너스, 물리/마법 데미지 보너스, 방어력/회피율/크리티컬 보너스
미반영 패시브 (정의만 있고 실제 로직에서 미사용)
| 패시브 | 영향받는 종족/클래스 | 수정 위치 |
|---|---|---|
expMultiplier |
Byte Human (+5%), Callback Seraph (+3%) | progress_service.dart:387 |
firstStrikeBonus |
Pointer Assassin (1.5배) | combat_tick_service.dart |
multiAttack |
Refactor Monk | combat_tick_service.dart |
postCombatHeal |
Garbage Collector (+5%) | progress_service.dart:279 |
healingBonus |
Debugger Paladin, Exception Handler, Null Checker | potion_service.dart, skill_service.dart |
deathEquipmentPreserve |
Coredump Undead | 특성 변경 필요 |
2. 수정 내용
2.1 경험치 배율 (expMultiplier)
파일: lib/src/core/engine/progress_service.dart
위치: 384-387줄
현재 코드:
if (gain && nextState.traits.level < 100 && monsterExpReward > 0) {
final newExpPos = progress.exp.position + monsterExpReward;
수정 후:
if (gain && nextState.traits.level < 100 && monsterExpReward > 0) {
// 종족 경험치 배율 적용 (예: Byte Human +5%)
final race = RaceData.findById(nextState.traits.raceId);
final expMultiplier = race?.expMultiplier ?? 1.0;
final adjustedExp = (monsterExpReward * expMultiplier).round();
final newExpPos = progress.exp.position + adjustedExp;
2.2 첫 공격 배율 (firstStrikeBonus)
파일: lib/src/core/engine/combat_tick_service.dart
설계:
- 전투 시작 시 첫 공격인지 추적하는 플래그 필요
- 첫 공격 시
firstStrikeBonus배율 적용
수정 방안:
CombatState에isFirstAttack플래그 추가CombatTickService에서 첫 플레이어 공격 시 배율 적용:
var damage = result.damage;
if (isFirstPlayerAttack && firstStrikeBonus > 1.0) {
damage = (damage * firstStrikeBonus).round();
isFirstPlayerAttack = false;
}
2.3 연속 공격 (multiAttack)
파일: lib/src/core/engine/combat_tick_service.dart
설계:
hasMultiAttack패시브가 있으면 일정 확률로 추가 공격- 예: 30% 확률로 연속 공격 (2타)
수정 방안:
// 플레이어 공격 후
if (hasMultiAttack && rng.nextDouble() < 0.3) {
// 추가 공격 실행
final extraAttack = calculator.playerAttackMonster(...);
// 결과 합산
}
2.4 전투 후 HP 회복 (postCombatHeal)
파일: lib/src/core/engine/progress_service.dart
위치: 276-280줄
현재 코드:
// 전투 승리 시 HP 회복 (50% + CON/2)
final conBonus = nextState.stats.con ~/ 2;
final healAmount = (maxHp * 0.5).round() + conBonus;
수정 후:
// 전투 승리 시 HP 회복 (50% + CON/2 + 클래스 패시브)
final conBonus = nextState.stats.con ~/ 2;
var healAmount = (maxHp * 0.5).round() + conBonus;
// 클래스 패시브: 전투 후 HP 회복 (Garbage Collector +5%)
final klass = ClassData.findById(nextState.traits.classId);
if (klass != null) {
final postCombatHealRate = klass.getPassiveValue(ClassPassiveType.postCombatHeal);
if (postCombatHealRate > 0) {
healAmount += (maxHp * postCombatHealRate).round();
}
}
2.5 회복력 보너스 (healingBonus)
물약/스킬 사용 시 추가 회복 적용
2.5.1 물약 회복
파일: lib/src/core/engine/potion_service.dart
수정 위치: usePotion() 메서드 (73-81줄)
현재 코드:
if (potion.isHpPotion) {
healedAmount = potion.calculateHeal(maxHp);
newHp = (currentHp + healedAmount).clamp(0, maxHp);
수정 후:
if (potion.isHpPotion) {
var baseHeal = potion.calculateHeal(maxHp);
// 회복력 보너스 적용 (클래스 패시브)
baseHeal = (baseHeal * healingMultiplier).round();
newHp = (currentHp + baseHeal).clamp(0, maxHp);
healedAmount = newHp - currentHp;
참고: PotionService에 healingMultiplier 파라미터 추가 필요
2.5.2 스킬 회복
파일: lib/src/core/engine/skill_service.dart
수정 위치: useHealSkill() 메서드 (125-132줄)
현재 코드:
int healAmount = skill.healAmount;
if (skill.healPercent > 0) {
healAmount += (player.hpMax * skill.healPercent).round();
}
수정 후:
int healAmount = skill.healAmount;
if (skill.healPercent > 0) {
healAmount += (player.hpMax * skill.healPercent).round();
}
// 회복력 보너스 적용 (클래스 패시브)
healAmount = (healAmount * healingMultiplier).round();
참고: SkillService에 healingMultiplier 파라미터 추가 필요
2.6 Coredump Undead 특성 변경
현재 특성: deathEquipmentPreserve (사망 시 장비 1개 유지) - BM 침해
대체 특성 제안 (언데드 콘셉트에 어울리는 것):
| 옵션 | 설명 | 장점 |
|---|---|---|
| 방어력 +10% | 언데드는 고통을 느끼지 않아 피해 감소 | 구현 간단, CON+2와 시너지 |
| HP +8% | 불사의 육체 | 구현 간단, 생존형 콘셉트 유지 |
| HP +5% + 방어력 +5% | 복합 생존 특화 | 다른 종족과 차별화 |
추천: defenseBonus: 0.10 (방어력 +10%)
- 이유: 언데드의 "고통을 느끼지 않는" 콘셉트와 어울림
- 기존 CON+2, STR+1 스탯과 탱커형 시너지
파일: lib/data/race_data.dart
수정:
static const coredumpUndead = RaceTraits(
raceId: 'coredump_undead',
name: 'Coredump Undead',
statModifiers: {
StatType.con: 2,
StatType.str: 1,
StatType.cha: -2,
StatType.dex: -1,
},
passives: [
PassiveAbility(
type: PassiveType.defenseBonus, // 변경
value: 0.10, // 변경
description: '방어력 +10%', // 변경
),
],
);
3. 수정 순서
- Coredump Undead 특성 변경 - 단순 데이터 수정
- 경험치 배율 - 간단한 로직 추가
- 전투 후 HP 회복 - 간단한 로직 추가
- 회복력 보너스 - 서비스 파라미터 수정 필요
- 첫 공격 배율 - 전투 상태 추적 필요
- 연속 공격 - 전투 로직 수정 필요
4. 검증 방법
flutter analyze통과- 각 패시브가 적용된 종족/클래스로 캐릭터 생성
- 실제 게임 플레이로 효과 확인:
- Byte Human: 경험치 +5% (레벨업 속도)
- Pointer Assassin: 첫 공격 1.5배 (전투 시작 데미지)
- Refactor Monk: 연속 공격 (추가 타격)
- Garbage Collector: 전투 후 +5% HP 회복
- Debugger Paladin: 물약/스킬 회복량 +10%
- Coredump Undead: 방어력 +10%
5. 삭제할 코드
파일: lib/src/core/model/race_traits.dart
PassiveType.deathEquipmentPreserve enum 삭제 (사용되지 않음)
파일: lib/src/core/engine/stat_calculator.dart
calculateDeathEquipmentPreserve() 메서드 삭제 (사용되지 않음)