74 lines
4.8 KiB
Markdown
74 lines
4.8 KiB
Markdown
# Items Base — 아이템, 인벤토리, 아이템 사용
|
|
|
|
Items Base는 게임에 아이템과 그것을 담을 가방을 줍니다. 아이템이 무엇인지(이름, 그림, 가격, 종류, 사용하면 무슨 일이 일어나는지)를 정의하고, **인벤토리** 패널을 보여 주고, 플레이어가 지닌 것을 저장하며, 시나리오가 아이템을 주고 빼고 확인할 수 있게 합니다. 거래, 요리, 제작, 장비, RPG 맵이 모두 이 위에 세워집니다.
|
|
|
|
## 인벤토리 패널
|
|
|
|
툴바의 가방 아이콘으로 엽니다. 왼쪽에서 아이템을 클릭하면 오른쪽에 자세한 정보가 나옵니다.
|
|
|
|

|
|
|
|
- 위쪽의 **탭**은 종류로 걸러 줍니다(음식, 자원, 레시피, 퀘스트). 검색창과 정렬 목록이 격자를 좁혀 줍니다.
|
|
- **세부 정보**에는 이름, 종류 배지, 가격, 설명, 묶음 크기, id, 그리고 아이템 고유의 속성이 나옵니다.
|
|
- **액션 버튼**의 이름은 아이템이 정합니다. **사용**, 음식이라면 **먹기**, **대상에게 사용**, **레시피 익히기**, 혹은 아이템이 정한 동사(버섯은 `verb` 때문에 **먹기**로 나옵니다).
|
|
- **대상 지정 아이템**은 누구에게 쓸지 물어봅니다. 파티원을 고르거나 **취소**하세요.
|
|
- **버리기**는 확인 후 묶음을 버립니다. 중요한 아이템은 버릴 수 없습니다.
|
|
- 전투 중에는 사용이나 버리기마다 행동 중인 캐릭터의 액션 포인트가 1씩 듭니다. 전투 밖에서는 공짜입니다.
|
|
|
|

|
|
|
|
액션이 불가능할 때 — 예를 들어 대상의 체력이 이미 가득 찼을 때 — 아이템은 소모되지 않고, 패널이 이유를 알려 줍니다.
|
|
|
|
## 아이템 정의
|
|
|
|
아이템은 mod의 `items/` 폴더에 있는 kind `item` JSON 파일이고, 그림은 그 옆에 둡니다. 위 사진의 버섯(RPG Demo 것)입니다.
|
|
|
|
```json
|
|
{
|
|
"Kind": "item",
|
|
"Items": [
|
|
{
|
|
"Id": "rpg_demo/mushroom",
|
|
"Name": "rpg_demo/item/mushroom/name",
|
|
"Description": "rpg_demo/item/mushroom/desc",
|
|
"Cost": 2,
|
|
"Sprite": "rpg_demo/forest_mushroom",
|
|
"ItemType": "Food,TargetUsed",
|
|
"ItemAction": "action/heal",
|
|
"heal": 5,
|
|
"verb": "ui/inventory/verb_eat"
|
|
}
|
|
]
|
|
}
|
|
```
|
|
|
|
- `Name`, `Description` — 번역 키. 세부 정보에 표시됩니다.
|
|
- `Cost` — 가격. 상점이 사용합니다.
|
|
- `Sprite` — 그림 `items/rpg_demo/forest_mushroom.png`.
|
|
- `ItemType` — 하나 이상의 종류를 쉼표로 나열합니다. `Food`, `Resource`, `Quest`, `Recipe`, `Used`(대상 없이 사용), `TargetUsed`(파티원에게 사용), `CantDrop`.
|
|
- `ItemAction` — 사용하면 무엇을 하는지. `action/heal`은 아이템의 `heal` 값만큼 체력을 회복합니다. 최대치를 넘지 않고, 쓰러진 캐릭터에게는 결코 쓰이지 않습니다. 다른 mod도 액션을 추가합니다. 예를 들어 equipment의 `action/equip`.
|
|
- 그 밖의 키(`heal`, `verb`)는 아이템 속성입니다. 액션이 읽고 세부 정보에도 나열됩니다. `verb`는 액션 버튼의 이름을 정합니다.
|
|
|
|
## 시나리오 속 아이템
|
|
|
|
```scenario
|
|
action item.add id=rpg_demo/mushroom count=2
|
|
when "item('rpg_demo/mushroom') >= 2" -> :enough
|
|
action item.remove id=rpg_demo/mushroom count=2
|
|
```
|
|
|
|
- `item.add`는 아이템을 가방에 넣습니다(상자, 선물, 맵의 줍기 아이템). `count`의 기본값은 1입니다.
|
|
- `item('id')`는 플레이어가 몇 개 가졌는지 비교합니다. `when`, 선택지 조건, 퀘스트, 맵 이벤트에서 작동합니다.
|
|
- `item.remove`는 아이템을 거둡니다. 부족하면 거부하므로, 먼저 `item('id')`로 확인하세요.
|
|
|
|
## 레시피
|
|
|
|
레시피(kind `recipe`)는 `Input`과 `Output` 아이템과 수량을 나열합니다. 플레이어가 어떤 레시피를 알고 있는지는 이 모드가 기억하며, 요리와 제작이 사용합니다.
|
|
|
|
## 문제가 생겼을 때
|
|
|
|
1. **아이템이 이름 대신 id를 보여 줍니다.** `Name` 키를 mod의 `locale` 파일에 추가하세요.
|
|
2. **액션 버튼이 없습니다.** 아이템에는 `ItemType`의 `Used`나 `TargetUsed`와 `ItemAction`이 필요합니다.
|
|
3. **사용해도 아무 일 없고 아이템이 그대로입니다.** 액션이 거부했습니다. 회복이라면 대상의 체력이 가득 찼거나 쓰러진 경우입니다.
|
|
4. **`item.add`가 아무것도 추가하지 않습니다.** id를 알 수 없습니다. 아이템 파일의 `Id`를 확인하세요.
|