77 lines
4.5 KiB
Markdown
77 lines
4.5 KiB
Markdown
# Trading——商人と取引ウィンドウ
|
||
|
||
Trading はゲームに店を追加します。店はデータです: 商人が何を売り、何を買い取り、いくらか。開くのはシナリオで、プレイヤーは 2 つのインベントリを持つウィンドウで取引します — 左に商人の品物、右にプレイヤーのかばん。お金は普通のアイテム、金貨です: かばんの中にあり、かばんと一緒にセーブされ、シナリオはほかのアイテムと同じように渡せます。
|
||
|
||
RPG Plus では村の商人がこうして取引します: 彼に話しかければウィンドウが開きます。
|
||
|
||
## 買う
|
||
|
||
左で品物を選びます。中央にはアイテム、価格、あなたの財布、**−** と **+** と **すべて** の付いた数量スライダー、合計が出ます。**買う** で取引が成立します:
|
||
|
||

|
||
|
||
主人公は 25 枚を持ってきて、エリクサーに 10 枚払ったので、財布には 15 枚残り、エリクサーはかばんの中です。スライダーはお金のあるところまでしか動きません — 今は 1 まで。
|
||
|
||
## 売る
|
||
|
||
かばんでアイテムを選びます。商人が買い取るアイテムには値札が付き、ほかはここでは売れません。**すべて** は数量を所持数いっぱいにします:
|
||
|
||

|
||
|
||

|
||
|
||
15 + 3 × 4 = **27** 枚。Esc か × でウィンドウを閉じます。
|
||
|
||
商人の在庫は減らず、売ったものが店に戻ることもありません: 店には自分の状態がなく、変わるのはあなたのかばんだけです。
|
||
|
||
## データとしての店
|
||
|
||
店は `shop` 種類のエンティティで、mod の `shops/` フォルダに入ります。村の商人を RPG Demo はこう定義します:
|
||
|
||
```json
|
||
{
|
||
"Kind": "shop",
|
||
"Items": [
|
||
{
|
||
"Id": "rpg_demo/village_merchant",
|
||
"Name": "rpg_demo/shop/village_merchant",
|
||
"Sells": [ { "Item": "rpg_demo/elixir", "Price": 10 } ],
|
||
"Buys": [
|
||
{ "Item": "rpg_demo/branches", "Price": 1 },
|
||
{ "Item": "rpg_demo/stones", "Price": 2 }
|
||
]
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
- `Name` — ウィンドウ見出しの翻訳キー。
|
||
- `Sells` — プレイヤーが買えるもの。この順で、1 個の値段付き。
|
||
- `Buys` — 商人がお金を払うもの。それ以外は拒否します。
|
||
- `Currency`(省略可)— お金のアイテム。既定はこの mod の金貨 `money/coin`。
|
||
- 1 未満の値段は無視されます: 無料のアイテムは贈り物で、贈り物はシナリオの仕事です。
|
||
|
||
RPG Plus は、RPG Demo のファイルを触らずに、自分の `patches/shop.json` のパッチで同じ商人に装備と品物を追加します:
|
||
|
||
```json
|
||
{ "Items": [ { "Id": "rpg_demo/village_merchant",
|
||
"Sells$add": [ { "Item": "classic/iron_sword", "Price": 30 } ],
|
||
"Buys$add": [ { "Item": "rpg_plus/wolf_pelt", "Price": 4 } ] } ] }
|
||
```
|
||
|
||
## 店を開く
|
||
|
||
```scenario
|
||
text "おや、お客さんだ! エリクサーは新鮮、沈殿もほとんどなし。" key=rpg_demo/merchant/line1
|
||
action trade.open shop=rpg_demo/village_merchant
|
||
end
|
||
```
|
||
|
||
商人のマップイベントがこのシナリオを実行します。どんなシナリオでも同じ方法で店を開けられます — ダイアログの選択肢からでも、インタラクティブなオブジェクトのクリックからでも。
|
||
|
||
## うまくいかないとき
|
||
|
||
1. **かばんのアイテムが売れない。** 店の `Buys` にありません。
|
||
2. **買うが何もしない。** 1 個も買えるお金がありません。ウィンドウがそう言ってくれます。
|
||
3. **ウィンドウが開かない。** `shop=` の id がどの店の `Id` とも一致しません。ログが名前を挙げます。
|