Add mod documentation in seven languages
This commit is contained in:
1 parent
617e82bcba
commit
89ff9ee99a
18 files changed
+540
-8
No files matched your search
Binary file not shown.
|
After Width: | Height: | Size: 58 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 31 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 15 KiB |
+76
@@ -0,0 +1,76 @@
|
||||
# Trading — merchants and the trade window
|
||||
|
||||
Trading adds shops to a game. A shop is data: what the merchant sells, what they buy back, and at which prices. A scenario opens it, and the player trades in a window with two inventories — the merchant's goods on the left, the player's bag on the right. Money is an ordinary item, the gold coin, so it lies in the bag, is saved with it and can be given by a scenario like any other item.
|
||||
|
||||
In RPG Plus the village merchant trades this way: talk to him and the window opens.
|
||||
|
||||
## Buying
|
||||
|
||||
Pick goods on the left. The middle shows the item, its price, your wallet, a quantity slider with **−**, **+** and **All**, and the total. **Buy** completes the deal:
|
||||
|
||||

|
||||
|
||||
The hero came with 25 coins; the elixir cost 10, so the wallet shows 15 and the elixir is in the bag. The slider only goes as far as the money allows — now 1.
|
||||
|
||||
## Selling
|
||||
|
||||
Pick an item in your bag. Items the merchant buys have a price tag; the others cannot be sold here. **All** sets the quantity to everything you have:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
15 + 3 × 4 = **27** coins. Esc or the cross closes the window.
|
||||
|
||||
The merchant's stock never runs out, and what you sell is not offered back: a shop has no state of its own, only your bag changes.
|
||||
|
||||
## A shop in data
|
||||
|
||||
Shops are entities of kind `shop`, in a mod's `shops/` folder. The village merchant as RPG Demo defines it:
|
||||
|
||||
```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` — the translation key of the window title.
|
||||
- `Sells` — what the player can buy, in this order, with the price of one.
|
||||
- `Buys` — what the merchant pays for; anything else is refused.
|
||||
- `Currency` (optional) — the money item; the default is `money/coin`, the gold coin of this mod.
|
||||
- A price below 1 is ignored: a free item is a gift and belongs in a scenario.
|
||||
|
||||
RPG Plus adds its gear and goods to the same merchant without touching RPG Demo's file, with a patch in its own `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 } ] } ] }
|
||||
```
|
||||
|
||||
## Opening a shop
|
||||
|
||||
```scenario
|
||||
text "Oh, a customer! Elixirs, fresh, almost no sediment." key=rpg_demo/merchant/line1
|
||||
action trade.open shop=rpg_demo/village_merchant
|
||||
end
|
||||
```
|
||||
|
||||
The merchant's map event runs this scenario. Any scenario can open a shop the same way — a dialog answer, a click on an interactive object.
|
||||
|
||||
## If something goes wrong
|
||||
|
||||
1. **An item in the bag cannot be sold.** It is not in the shop's `Buys`.
|
||||
2. **Buy does nothing.** Not enough coins for one; the window says so.
|
||||
3. **The window does not open.** The `shop=` id does not match a shop's `Id`; the log names it.
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
# Trading — mercaderes y la ventana de comercio
|
||||
|
||||
Trading añade tiendas a un juego. Una tienda son datos: qué vende el mercader, qué compra de vuelta y a qué precios. La abre un escenario, y el jugador comercia en una ventana con dos inventarios: los artículos del mercader a la izquierda, la bolsa del jugador a la derecha. El dinero es un objeto corriente, la moneda de oro: descansa en la bolsa, se guarda con ella y un escenario puede entregarla como cualquier otro objeto.
|
||||
|
||||
En RPG Plus comercia así el mercader del pueblo: háblale y se abre la ventana.
|
||||
|
||||
## Comprar
|
||||
|
||||
Elige artículos a la izquierda. El centro muestra el objeto, su precio, tu monedero, un deslizador de cantidad con **−**, **+** y **Todo**, y el total. **Comprar** cierra el trato:
|
||||
|
||||

|
||||
|
||||
El héroe llegó con 25 monedas; el elixir costó 10, así que el monedero marca 15 y el elixir está en la bolsa. El deslizador solo llega hasta donde el dinero alcanza — ahora 1.
|
||||
|
||||
## Vender
|
||||
|
||||
Elige un objeto de tu bolsa. Los objetos que el mercader compra llevan etiqueta de precio; los demás no se pueden vender aquí. **Todo** pone la cantidad en todo lo que tienes:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
15 + 3 × 4 = **27** monedas. La ventana se cierra con Esc o con la cruz.
|
||||
|
||||
El surtido del mercader nunca se agota, y lo que vendes no vuelve a ofrecerse: una tienda no tiene estado propio, solo cambia tu bolsa.
|
||||
|
||||
## Una tienda en datos
|
||||
|
||||
Las tiendas son entidades de tipo `shop`, en la carpeta `shops/` de un mod. El mercader del pueblo tal como lo define 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` — la clave de traducción del título de la ventana.
|
||||
- `Sells` — lo que el jugador puede comprar, en ese orden, con el precio de una unidad.
|
||||
- `Buys` — por lo que el mercader paga; todo lo demás lo rechaza.
|
||||
- `Currency` (opcional) — el objeto de dinero; por defecto es `money/coin`, la moneda de oro de este mod.
|
||||
- Un precio menor que 1 se ignora: un objeto gratis es un regalo, y los regalos son cosa del escenario.
|
||||
|
||||
RPG Plus añade su equipo y sus mercancías al mismo mercader sin tocar el archivo de RPG Demo, con un parche en su propio `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 } ] } ] }
|
||||
```
|
||||
|
||||
## Abrir una tienda
|
||||
|
||||
```scenario
|
||||
text "¡Oh, un cliente! Elixires frescos, casi sin poso." key=rpg_demo/merchant/line1
|
||||
action trade.open shop=rpg_demo/village_merchant
|
||||
end
|
||||
```
|
||||
|
||||
El evento de mapa del mercader ejecuta este escenario. Cualquier escenario puede abrir una tienda igual — una respuesta de diálogo, un clic en un objeto interactivo.
|
||||
|
||||
## Si algo falla
|
||||
|
||||
1. **Un objeto de la bolsa no se puede vender.** No está en el `Buys` de la tienda.
|
||||
2. **Comprar no hace nada.** No alcanzan las monedas ni para uno; la ventana lo dice.
|
||||
3. **La ventana no se abre.** El id de `shop=` no coincide con el `Id` de ninguna tienda; el log dice cuál.
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
# 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` とも一致しません。ログが名前を挙げます。
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
# Trading — 상인과 거래 창
|
||||
|
||||
Trading은 게임에 가게를 추가합니다. 가게는 데이터입니다: 상인이 무엇을 파는지, 무엇을 사들이는지, 얼마에 파는지. 가게를 여는 것은 시나리오이고, 플레이어는 두 인벤토리를 가진 창에서 거래합니다 — 왼쪽에는 상인의 물건, 오른쪽에는 플레이어의 가방이 있습니다. 돈은 평범한 아이템인 금화입니다: 가방에 들어 있고 가방과 함께 저장되며, 시나리오가 다른 아이템처럼 줄 수도 있습니다.
|
||||
|
||||
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` — 플레이어가 살 수 있는 물건. 이 순서대로, 하나 가격과 함께.
|
||||
- `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. **사기가 아무것도 하지 않습니다.** 한 개 살 돈도 부족합니다. 창이 그렇게 말해 줍니다.
|
||||
3. **창이 열리지 않습니다.** `shop=`의 id가 어느 가게의 `Id`와도 일치하지 않습니다. 로그가 이름을 알려 줍니다.
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
# Trading — торговцы и окно торговли
|
||||
|
||||
Trading добавляет в игру лавки. Лавка — это данные: что торговец продаёт, что скупает и по каким ценам. Открывает её сценарий, а торгуется игрок в окне с двумя инвентарями: слева товары торговца, справа сумка игрока. Деньги — обычный предмет, золотая монета: она лежит в сумке, сохраняется вместе с ней и выдаётся сценарием как любой другой предмет.
|
||||
|
||||
В RPG Plus так торгует деревенский торговец: поговорите с ним — окно откроется.
|
||||
|
||||
## Покупка
|
||||
|
||||
Выберите товар слева. В середине показаны предмет, его цена, ваш кошелёк, ползунок количества с кнопками **−**, **+** и **Все**, а также итог. **Купить** завершает сделку:
|
||||
|
||||

|
||||
|
||||
Герой пришёл с 25 монетами; эликсир стоил 10, поэтому в кошельке 15, а эликсир лежит в сумке. Ползунок поднимается только на те деньги, что есть, — сейчас это 1.
|
||||
|
||||
## Продажа
|
||||
|
||||
Выберите предмет в своей сумке. На предметах, которые торговец скупает, стоит ценник; остальные здесь продать нельзя. Кнопка **Все** ставит количество на всё, что у вас есть:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
15 + 3 × 4 = **27** монет. Окно закрывают Esc или крестик.
|
||||
|
||||
Товар у торговца не кончается, а проданное обратно не предлагается: у лавки нет собственного состояния, меняется только ваша сумка.
|
||||
|
||||
## Лавка в данных
|
||||
|
||||
Лавки — это сущности вида `shop`, лежат в папке `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` — что может купить игрок, в этом порядке, по цене за штуку.
|
||||
- `Buys` — за что торговец платит; всё остальное он брать отказывается.
|
||||
- `Currency` (необязательно) — денежный предмет; по умолчанию это `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. **«Купить» ничего не делает.** Не хватает монет даже на одну штуку — окно так и пишет.
|
||||
3. **Окно не открывается.** id в `shop=` не совпадает с `Id` ни одной лавки; лог назовёт её.
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
# Trading — thương nhân và cửa sổ giao dịch
|
||||
|
||||
Trading thêm các cửa hàng vào trò chơi. Một cửa hàng là dữ liệu: thương nhân bán gì, mua lại gì, và giá bao nhiêu. Kịch bản mở cửa hàng ra, và người chơi giao dịch trong một cửa sổ có hai túi đồ — hàng của thương nhân bên trái, túi của người chơi bên phải. Tiền là một vật phẩm bình thường, đồng vàng: nó nằm trong túi đồ, được lưu cùng túi, và kịch bản có thể trao nó như mọi vật phẩm khác.
|
||||
|
||||
Trong RPG Plus, thương nhân làng giao dịch thế này: hãy nói chuyện với ông ấy, cửa sổ sẽ mở ra.
|
||||
|
||||
## Mua
|
||||
|
||||
Chọn hàng bên trái. Phía giữa hiển thị vật phẩm, giá của nó, túi tiền của bạn, một thanh trượt số lượng với **−**, **+** và **Tất cả**, cùng tổng cộng. **Mua** chốt cuộc mua bán:
|
||||
|
||||

|
||||
|
||||
Anh hùng đến với 25 đồng; thuốc tiên giá 10, nên túi tiền còn 15 và thuốc tiên nằm trong túi đồ. Thanh trượt chỉ kéo tới mức tiền cho phép — hiện là 1.
|
||||
|
||||
## Bán
|
||||
|
||||
Chọn một vật phẩm trong túi đồ. Những vật phẩm thương nhân mua lại có gắn giá; những cái khác không bán được ở đây. **Tất cả** đặt số lượng bằng tất cả những gì bạn có:
|
||||
|
||||

|
||||
|
||||

|
||||
|
||||
15 + 3 × 4 = **27** đồng. Esc hay dấu × đều đóng cửa sổ.
|
||||
|
||||
Hàng của thương nhân không bao giờ cạn, và thứ bạn bán không được bày ra lại: cửa hàng không có trạng thái riêng, chỉ có túi đồ của bạn thay đổi.
|
||||
|
||||
## Cửa hàng dưới dạng dữ liệu
|
||||
|
||||
Cửa hàng là thực thể loại `shop`, nằm trong thư mục `shops/` của một mod. Thương nhân làng được RPG Demo định nghĩa như sau:
|
||||
|
||||
```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` — khóa dịch của tiêu đề cửa sổ.
|
||||
- `Sells` — những gì người chơi có thể mua, theo đúng thứ tự này, kèm giá của một món.
|
||||
- `Buys` — những gì thương nhân trả tiền; thứ khác đều bị từ chối.
|
||||
- `Currency` (không bắt buộc) — vật phẩm tiền tệ; mặc định là `money/coin`, đồng vàng của mod này.
|
||||
- Giá nhỏ hơn 1 bị bỏ qua: vật phẩm miễn phí là món quà, và quà tặng là việc của kịch bản.
|
||||
|
||||
RPG Plus thêm trang bị và hàng hóa của mình vào cùng thương nhân mà không đụng tới tệp của RPG Demo, bằng một bản vá trong `patches/shop.json` của nó:
|
||||
|
||||
```json
|
||||
{ "Items": [ { "Id": "rpg_demo/village_merchant",
|
||||
"Sells$add": [ { "Item": "classic/iron_sword", "Price": 30 } ],
|
||||
"Buys$add": [ { "Item": "rpg_plus/wolf_pelt", "Price": 4 } ] } ] }
|
||||
```
|
||||
|
||||
## Mở một cửa hàng
|
||||
|
||||
```scenario
|
||||
text "Ồ, có khách! Thuốc tiên mới, hầu như không cặn." key=rpg_demo/merchant/line1
|
||||
action trade.open shop=rpg_demo/village_merchant
|
||||
end
|
||||
```
|
||||
|
||||
Sự kiện bản đồ của thương nhân chạy kịch bản này. Kịch bản nào cũng có thể mở cửa hàng theo cách đó — một lựa chọn đối thoại, một cú bấm vào vật thể tương tác.
|
||||
|
||||
## Khi có gì đó không ổn
|
||||
|
||||
1. **Một vật phẩm trong túi đồ không bán được.** Nó không có trong `Buys` của cửa hàng.
|
||||
2. **Mua không làm gì cả.** Không đủ tiền mua một món; cửa sổ nói điều đó.
|
||||
3. **Cửa sổ không mở.** id trong `shop=` không khớp `Id` của cửa hàng nào; log sẽ nêu tên.
|
||||
+76
@@ -0,0 +1,76 @@
|
||||
# Trading——商人与交易窗口
|
||||
|
||||
Trading 给游戏添加商店。商店就是数据:商人卖什么、回收什么、价格多少。打开商店的是一个剧本,玩家在一个有两个背包的窗口里交易——左边是商人的货物,右边是玩家的背包。钱是一种普通物品——金币:它放在背包里、随背包一起存档,也能像其他物品一样由剧本发给你。
|
||||
|
||||
在 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`——玩家能买的东西,按此顺序排列,价格是一份的价钱。
|
||||
- `Buys`——商人付钱回收的东西;其余一概不收。
|
||||
- `Currency`(可选)——货币物品;默认是 `money/coin`,本 mod 的金币。
|
||||
- 低于 1 的价格会被忽略:免费的物品是礼物,而礼物属于剧本。
|
||||
|
||||
RPG Plus 用自己 `patches/shop.json` 里的补丁,把它的装备和货物加到同一个商人身上,不去动 RPG Demo 的文件:
|
||||
|
||||
```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. **购买没有反应。** 金币连买一份都不够;窗口会这么说。
|
||||
3. **窗口打不开。** `shop=` 的 id 和任何商店的 `Id` 都对不上;日志里会写明。
|
||||
Reference in new issue
Block a user