# 32. 적 장비 시스템 (Enemy Equipment System) ## 1. 배경 (Background) 현재 플레이어는 장비를 통해 스탯 보너스와 특수 효과(출혈, 스턴 등)를 얻습니다. 적(Enemy) 또한 동일한 `Character` 클래스를 사용하므로, 적에게도 장비를 부여하여 다양한 전투 패턴과 난이도를 구현하고자 합니다. ## 2. 목표 (Objective) - **적 데이터 구조 변경:** `enemies.json`에 `equipment` 필드 추가. - **적 생성 로직 변경:** `EnemyTemplate`에서 적 생성 시, 정의된 장비 아이템을 인벤토리에 추가하고 장착. - **전투 로직 확인:** 적이 공격할 때 장착된 아이템의 효과(상태이상 등)가 플레이어에게 적용되는지 확인. ## 3. 작업 상세 (Implementation Details) ### A. 데이터 파일 수정 (`assets/data/enemies.json`) - 적 정의에 `equipment` 필드(List - Item ID) 추가. - 예시: ```json { "name": "Goblin", "baseHp": 20, "baseAtk": 5, "baseDefense": 5, "image": "assets/images/enemies/goblin.png", "equipment": ["dagger_001"] // Dagger for bleed effect } ``` ### B. `lib/game/data/enemy_table.dart` 수정 - `EnemyTemplate` 클래스에 `List equipmentIds` 필드 추가. - `fromJson` 메서드에서 `equipment` 필드 파싱. - `createCharacter` 메서드 수정: - `ItemTable.get(id)`를 사용하여 아이템 인스턴스 생성. - 생성된 아이템을 적의 인벤토리에 추가(`addToInventory`)하고 장착(`equip`). - _Note: `ItemTable`에 ID로 아이템을 찾는 기능이 없다면 추가 필요._ ### C. `lib/game/data/item_table.dart` 확인 및 수정 - 아이템을 ID로 조회하는 기능(`getItem(String id)`)이 있는지 확인하고, 없다면 구현. - 현재 `items.json`에는 ID 필드가 명시적으로 없을 수 있으므로, `id` 필드를 추가하거나 기존 `name`을 ID로 사용할지 결정 필요 (ID 필드 추가 권장). ### D. `lib/providers/battle_provider.dart` 검증 - `_tryApplyStatusEffects` 메서드가 `attacker.equipment`를 순회하므로, 적이 공격할 때도 로직이 정상 동작하는지 확인. - 별도의 코드 수정은 필요 없을 것으로 예상되나, 테스트를 통해 검증. ## 4. 검증 (Verification) - **데이터 로드 테스트:** 앱 실행 시 `enemies.json` 파싱 에러가 없는지 확인. - **전투 테스트:** - 특정 장비(예: 출혈 단검)를 가진 적(예: 고블린)과 전투. - 적의 공격 성공 시, 플레이어에게 출혈(Bleed) 효과가 적용되는지 로그 및 UI로 확인. - 적 정보 창(구현되어 있다면) 또는 로그를 통해 적이 장비를 착용하고 있는지 확인.