- 121KB 단일 문서를 22개 태스크 문서로 분리 - 메인 인덱스 문서 (game-system-overhaul-index.md) 생성 - Phase 1-10 태스크 문서 10개 분리 - 추가 시스템 태스크 문서 10개 분리 - 재미 요소 설계 문서 1개 분리 - 기존 문서는 archive/ 폴더로 이동
317 lines
10 KiB
Markdown
317 lines
10 KiB
Markdown
# 아이템 확장: 세트/강화/인벤토리/물약
|
|
|
|
> 메인 문서: [game-system-overhaul-index.md](game-system-overhaul-index.md)
|
|
|
|
---
|
|
|
|
## 1. 세트 아이템
|
|
|
|
### 1.1 세트 아이템 구조
|
|
|
|
```dart
|
|
class ItemSet {
|
|
final String id;
|
|
final String name;
|
|
final List<String> itemIds; // 세트 구성 아이템
|
|
final Map<int, SetBonus> bonuses; // 착용 개수별 보너스
|
|
}
|
|
|
|
class SetBonus {
|
|
final int requiredCount; // 필요 착용 개수
|
|
final String description; // "2세트: 공격력 +10%"
|
|
final Map<StatType, double> statBonuses;
|
|
final PassiveEffect? passiveEffect;
|
|
}
|
|
```
|
|
|
|
### 1.2 세트 목록 예시
|
|
|
|
| 세트명 | 부위 | 2세트 | 4세트 | 6세트 |
|
|
|--------|------|-------|-------|-------|
|
|
| **디버거의 유산** | 무기, 방어구, 투구, 장갑, 부츠, 반지 | 공격력 +10% | 크리티컬 +15% | 스킬 데미지 +25% |
|
|
| **널 가드** | 방패, 방어구, 투구, 장갑, 부츠, 목걸이 | 방어력 +15% | 블록률 +10% | 피해 반사 10% |
|
|
| **컴파일러의 지혜** | 지팡이, 로브, 모자, 장갑, 부츠, 반지 | MP +20% | 마법 데미지 +15% | 스킬 쿨타임 -20% |
|
|
| **가비지 컬렉터** | 무기, 중갑, 투구, 장갑, 부츠, 벨트 | HP +20% | 전투 후 HP 5% 회복 | 사망 시 50% 확률로 생존 |
|
|
|
|
### 1.3 세트 UI
|
|
|
|
```
|
|
┌─ 장착 장비 ─────────────────────────┐
|
|
│ │
|
|
│ 디버거의 유산 [4/6] ✨ │
|
|
│ ├─ 디버거의 검 ☑ │
|
|
│ ├─ 디버거의 갑옷 ☑ │
|
|
│ ├─ 디버거의 투구 ☑ │
|
|
│ ├─ 디버거의 장갑 ☑ │
|
|
│ ├─ 디버거의 부츠 ☐ │
|
|
│ └─ 디버거의 반지 ☐ │
|
|
│ │
|
|
│ 세트 효과: │
|
|
│ ✓ 2세트: 공격력 +10% │
|
|
│ ✓ 4세트: 크리티컬 +15% │
|
|
│ ○ 6세트: 스킬 데미지 +25% │
|
|
│ │
|
|
└─────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 2. 강화/합성 시스템
|
|
|
|
### 2.1 아이템 강화
|
|
|
|
```dart
|
|
class EnhancementSystem {
|
|
/// 강화 시도
|
|
EnhanceResult enhance(Equipment item, int gold) {
|
|
final successRate = getSuccessRate(item.enhanceLevel);
|
|
final success = random() < successRate;
|
|
|
|
if (success) {
|
|
return EnhanceResult.success(
|
|
item.copyWith(enhanceLevel: item.enhanceLevel + 1),
|
|
);
|
|
} else {
|
|
// 실패 시 강화 레벨 유지 (파괴 없음)
|
|
return EnhanceResult.failure();
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### 2.2 강화 단계
|
|
|
|
| 강화 레벨 | 성공률 | 비용 배율 | 스탯 증가 |
|
|
|----------|--------|----------|----------|
|
|
| +1 | 90% | 1x | +5% |
|
|
| +2 | 80% | 2x | +10% |
|
|
| +3 | 70% | 3x | +15% |
|
|
| +4 | 60% | 4x | +20% |
|
|
| +5 | 50% | 5x | +30% |
|
|
| +6 | 40% | 7x | +40% |
|
|
| +7 | 30% | 10x | +50% |
|
|
| +8 | 20% | 15x | +65% |
|
|
| +9 | 10% | 20x | +80% |
|
|
| +10 | 5% | 30x | +100% |
|
|
|
|
### 2.3 아이템 합성
|
|
|
|
```dart
|
|
class SynthesisSystem {
|
|
/// 동일 아이템 3개 → 상위 희귀도 1개
|
|
Equipment? synthesize(List<Equipment> items) {
|
|
if (items.length != 3) return null;
|
|
if (!_isSameItem(items)) return null;
|
|
|
|
final baseItem = items.first;
|
|
final nextRarity = _getNextRarity(baseItem.rarity);
|
|
|
|
if (nextRarity == null) return null; // 이미 최고 희귀도
|
|
|
|
return baseItem.copyWith(rarity: nextRarity);
|
|
}
|
|
}
|
|
```
|
|
|
|
### 2.4 합성 규칙
|
|
|
|
```
|
|
Common x3 → Uncommon x1
|
|
Uncommon x3 → Rare x1
|
|
Rare x3 → Epic x1
|
|
Epic x3 → Legendary x1
|
|
Legendary → 합성 불가
|
|
```
|
|
|
|
### 2.5 강화/합성 UI
|
|
|
|
```
|
|
┌─ 대장간 ────────────────────────────┐
|
|
│ │
|
|
│ [강화] [합성] │
|
|
│ │
|
|
│ ┌───────────────────────────────┐ │
|
|
│ │ 디버거의 검 +3 │ │
|
|
│ │ 공격력: 45 (+15%) │ │
|
|
│ │ 희귀도: Rare │ │
|
|
│ └───────────────────────────────┘ │
|
|
│ │
|
|
│ 강화 정보: │
|
|
│ 현재: +3 → +4 │
|
|
│ 성공률: 60% │
|
|
│ 비용: 2,000 골드 │
|
|
│ 스탯 증가: +15% → +20% │
|
|
│ │
|
|
│ [ 강화하기 ] │
|
|
│ │
|
|
└─────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 3. 인벤토리 관리
|
|
|
|
### 3.1 인벤토리 구조
|
|
|
|
```dart
|
|
class Inventory {
|
|
final int maxSlots; // 최대 슬롯 수
|
|
final List<InventoryItem> items;
|
|
|
|
int get usedSlots => items.length;
|
|
int get freeSlots => maxSlots - usedSlots;
|
|
bool get isFull => freeSlots <= 0;
|
|
}
|
|
```
|
|
|
|
### 3.2 인벤토리 크기
|
|
|
|
| 레벨 | 기본 슬롯 | 확장 가능 |
|
|
|------|----------|----------|
|
|
| 1-20 | 30 | +10 (골드) |
|
|
| 21-50 | 40 | +15 (골드) |
|
|
| 51-80 | 55 | +20 (골드) |
|
|
| 81-100 | 75 | +25 (골드) |
|
|
| 최대 | 100 | - |
|
|
|
|
### 3.3 정렬 옵션
|
|
|
|
| 정렬 기준 | 설명 |
|
|
|----------|------|
|
|
| 최근 획득 | 획득 시간 내림차순 |
|
|
| 희귀도 | 전설 > 에픽 > 레어 > ... |
|
|
| 레벨 | 아이템 레벨 내림차순 |
|
|
| 이름 | 가나다/ABC 순 |
|
|
| 슬롯 | 무기 → 방어구 → 악세서리 |
|
|
| 가중치 | 높은 가중치 우선 |
|
|
|
|
### 3.4 필터 옵션
|
|
|
|
| 필터 | 옵션 |
|
|
|------|------|
|
|
| 슬롯 | 전체, 무기, 방어구, 악세서리 등 |
|
|
| 희귀도 | 전체, Common ~ Legendary |
|
|
| 장착 가능 | 현재 레벨에서 장착 가능한 것만 |
|
|
| 세트 | 세트 아이템만 |
|
|
|
|
### 3.5 자동 정리
|
|
|
|
```dart
|
|
class InventoryAutoClean {
|
|
/// 인벤토리 자동 정리
|
|
void autoClean(Inventory inventory, AutoCleanSettings settings) {
|
|
if (settings.sellCommon) {
|
|
_sellByRarity(ItemRarity.common);
|
|
}
|
|
if (settings.sellBelowLevel) {
|
|
_sellBelowLevel(settings.minLevel);
|
|
}
|
|
if (settings.keepBestPerSlot) {
|
|
_keepBestPerSlot(settings.keepCount);
|
|
}
|
|
}
|
|
}
|
|
```
|
|
|
|
### 3.6 인벤토리 UI
|
|
|
|
```
|
|
┌─ 인벤토리 [45/50] ──────────────────┐
|
|
│ │
|
|
│ [정렬: 희귀도 ▼] [필터: 전체 ▼] │
|
|
│ │
|
|
│ ┌───┐ ┌───┐ ┌───┐ ┌───┐ ┌───┐ │
|
|
│ │ ★ │ │ ★ │ │ ◆ │ │ ◆ │ │ ○ │ ... │
|
|
│ │검 │ │갑 │ │방 │ │투 │ │단 │ │
|
|
│ └───┘ └───┘ └───┘ └───┘ └───┘ │
|
|
│ │
|
|
│ 선택: 디버거의 검 +3 │
|
|
│ 공격력 +45, 크리티컬 +5% │
|
|
│ │
|
|
│ [장착] [판매] [강화] [분해] │
|
|
│ │
|
|
│ ───────────────────────────────── │
|
|
│ [ 자동 정리 ] [ 일괄 판매 ] │
|
|
└─────────────────────────────────────┘
|
|
```
|
|
|
|
---
|
|
|
|
## 4. 물약/소모품 시스템
|
|
|
|
### 4.1 소모품 종류
|
|
|
|
| 카테고리 | 아이템 | 효과 | 획득 방법 |
|
|
|----------|--------|------|----------|
|
|
| **HP 물약** | 소형 HP 물약 | HP +100 | 상점, 드롭 |
|
|
| | 중형 HP 물약 | HP +300 | 상점, 드롭 |
|
|
| | 대형 HP 물약 | HP +500 | 상점, 드롭 |
|
|
| | 최상급 HP 물약 | HP 100% 회복 | 보스 드롭, 제작 |
|
|
| **MP 물약** | 소형 MP 물약 | MP +50 | 상점, 드롭 |
|
|
| | 중형 MP 물약 | MP +150 | 상점, 드롭 |
|
|
| | 대형 MP 물약 | MP +300 | 상점, 드롭 |
|
|
| | 최상급 MP 물약 | MP 100% 회복 | 보스 드롭, 제작 |
|
|
| **버프 물약** | 공격력 물약 | ATK +20%, 5분 | 상점, 제작 |
|
|
| | 방어력 물약 | DEF +20%, 5분 | 상점, 제작 |
|
|
| | 경험치 물약 | EXP +50%, 5분 | 이벤트, 퀘스트 |
|
|
| | 골드 물약 | GOLD +50%, 5분 | 이벤트, 퀘스트 |
|
|
| | 행운 물약 | 드롭률 +30%, 5분 | 희귀 드롭 |
|
|
| **특수 소모품** | 귀환 스크롤 | 마을로 즉시 이동 | 상점 |
|
|
| | 부활의 부적 | 사망 시 장비 1개 보존 | 보스 드롭 |
|
|
| | 감정 스크롤 | 미감정 아이템 감정 | 상점 |
|
|
|
|
### 4.2 소모품 데이터 구조
|
|
|
|
```dart
|
|
class Consumable {
|
|
final String id;
|
|
final String name;
|
|
final ConsumableType type; // hp, mp, buff, special
|
|
final int value; // 회복량 또는 효과 수치
|
|
final Duration? duration; // 버프 지속 시간
|
|
final int maxStack; // 최대 중첩 수 (인벤토리)
|
|
final int buyPrice;
|
|
final int sellPrice;
|
|
}
|
|
|
|
class ConsumableInventory {
|
|
final Map<String, int> items; // id -> 수량
|
|
|
|
void use(String id);
|
|
void add(String id, int amount);
|
|
bool has(String id) => (items[id] ?? 0) > 0;
|
|
}
|
|
```
|
|
|
|
### 4.3 자동 사용 설정
|
|
|
|
```
|
|
┌─ 물약 자동 사용 설정 ───────────────┐
|
|
│ │
|
|
│ HP 물약 자동 사용 │
|
|
│ ● 켜기 ○ 끄기 │
|
|
│ HP가 [30]% 이하일 때 사용 │
|
|
│ 사용 우선순위: [소형 > 중형 > 대형]│
|
|
│ │
|
|
│ MP 물약 자동 사용 │
|
|
│ ● 켜기 ○ 끄기 │
|
|
│ MP가 [20]% 이하일 때 사용 │
|
|
│ │
|
|
│ 버프 물약 자동 사용 │
|
|
│ ○ 켜기 ● 끄기 │
|
|
│ (보스전에서만 자동 사용) │
|
|
│ │
|
|
└─────────────────────────────────────┘
|
|
```
|
|
|
|
### 4.4 물약 쿨타임
|
|
|
|
| 물약 종류 | 쿨타임 |
|
|
|----------|--------|
|
|
| HP 물약 | 3초 |
|
|
| MP 물약 | 3초 |
|
|
| 버프 물약 | 60초 |
|
|
| 특수 소모품 | 없음 |
|
|
|
|
---
|