feat(core): 몬스터 등급 시스템 추가
- MonsterGrade 열거형 및 색상 정의 - GameState/ItemStats 확장 - pq_logic 유틸리티 함수 추가 - ASCII 색상 상수 추가
This commit is contained in:
@@ -4,6 +4,7 @@ import 'dart:math' as math;
|
||||
import 'package:asciineverdie/data/game_text_l10n.dart' as l10n;
|
||||
import 'package:asciineverdie/src/core/model/equipment_slot.dart';
|
||||
import 'package:asciineverdie/src/core/model/game_state.dart';
|
||||
import 'package:asciineverdie/src/core/model/monster_grade.dart';
|
||||
import 'package:asciineverdie/src/core/model/pq_config.dart';
|
||||
import 'package:asciineverdie/src/core/util/deterministic_random.dart';
|
||||
import 'package:asciineverdie/src/core/util/roman.dart';
|
||||
@@ -483,6 +484,25 @@ Stats winStat(Stats stats, DeterministicRandom rng) {
|
||||
}
|
||||
}
|
||||
|
||||
/// 몬스터 등급 결정 (Normal 85%, Elite 12%, Boss 3%)
|
||||
/// 몬스터 레벨이 플레이어 레벨보다 높으면 상위 등급 확률 증가
|
||||
MonsterGrade _determineGrade(
|
||||
int monsterLevel,
|
||||
int playerLevel,
|
||||
DeterministicRandom rng,
|
||||
) {
|
||||
// 기본 확률: Normal 85%, Elite 12%, Boss 3%
|
||||
// 레벨 차이에 따른 보정
|
||||
final levelDiff = monsterLevel - playerLevel;
|
||||
final eliteBonus = (levelDiff * 2).clamp(0, 10); // 최대 +10%
|
||||
final bossBonus = (levelDiff * 0.5).clamp(0, 3).toInt(); // 최대 +3%
|
||||
|
||||
final roll = rng.nextInt(100);
|
||||
if (roll < 3 + bossBonus) return MonsterGrade.boss;
|
||||
if (roll < 15 + eliteBonus) return MonsterGrade.elite;
|
||||
return MonsterGrade.normal;
|
||||
}
|
||||
|
||||
MonsterTaskResult monsterTask(
|
||||
PqConfig config,
|
||||
DeterministicRandom rng,
|
||||
@@ -592,11 +612,15 @@ MonsterTaskResult monsterTask(
|
||||
name = l10n.indefiniteL10n(name, qty);
|
||||
}
|
||||
|
||||
// 몬스터 등급 결정 (level = 플레이어 레벨)
|
||||
final grade = _determineGrade(monsterLevel, level, rng);
|
||||
|
||||
return MonsterTaskResult(
|
||||
displayName: name,
|
||||
baseName: baseName,
|
||||
level: monsterLevel * qty,
|
||||
part: part,
|
||||
grade: grade,
|
||||
);
|
||||
}
|
||||
|
||||
@@ -607,6 +631,7 @@ class MonsterTaskResult {
|
||||
required this.baseName,
|
||||
required this.level,
|
||||
required this.part,
|
||||
required this.grade,
|
||||
});
|
||||
|
||||
/// 화면에 표시할 몬스터 이름 (형용사 포함, 예: "a sick Goblin")
|
||||
@@ -620,6 +645,9 @@ class MonsterTaskResult {
|
||||
|
||||
/// 전리품 부위 (예: "claw", "tail", "*"는 WinItem 호출)
|
||||
final String part;
|
||||
|
||||
/// 몬스터 등급 (Normal/Elite/Boss)
|
||||
final MonsterGrade grade;
|
||||
}
|
||||
|
||||
enum RewardKind { spell, equip, stat, item }
|
||||
|
||||
Reference in New Issue
Block a user