# 아이템 확장: 세트/강화/인벤토리/물약 > 메인 문서: [game-system-overhaul-index.md](game-system-overhaul-index.md) --- ## 1. 세트 아이템 ### 1.1 세트 아이템 구조 ```dart class ItemSet { final String id; final String name; final List itemIds; // 세트 구성 아이템 final Map bonuses; // 착용 개수별 보너스 } class SetBonus { final int requiredCount; // 필요 착용 개수 final String description; // "2세트: 공격력 +10%" final Map 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 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 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 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초 | | 특수 소모품 | 없음 | ---