# Trading — торговцы и окно торговли Trading добавляет в игру лавки. Лавка — это данные: что торговец продаёт, что скупает и по каким ценам. Открывает её сценарий, а торгуется игрок в окне с двумя инвентарями: слева товары торговца, справа сумка игрока. Деньги — обычный предмет, золотая монета: она лежит в сумке, сохраняется вместе с ней и выдаётся сценарием как любой другой предмет. В RPG Plus так торгует деревенский торговец: поговорите с ним — окно откроется. ## Покупка Выберите товар слева. В середине показаны предмет, его цена, ваш кошелёк, ползунок количества с кнопками **−**, **+** и **Все**, а также итог. **Купить** завершает сделку: ![Окно "Merchant's shop": слева товары торговца с ценниками (эликсир 10 c, железный меч 30 c, кинжал 18 c, посох 24 c, кожаный доспех 20 c, мантия 16 c, серебряное кольцо 22 c, тоник силы 40 c, смола 4 c, гриб 3 c, ветки 2 c), в середине выбран эликсир (price 10, wallet 15, quantity 1/1, Total: 10 coins, Buy) и сообщение "Bought: Elixir ×1 for 10 coins", справа — сумка с тремя волчьими шкурами и эликсиром; кошелёк справа вверху показывает 15.](assets/trade-buy.jpg) Герой пришёл с 25 монетами; эликсир стоил 10, поэтому в кошельке 15, а эликсир лежит в сумке. Ползунок поднимается только на те деньги, что есть, — сейчас это 1. ## Продажа Выберите предмет в своей сумке. На предметах, которые торговец скупает, стоит ценник; остальные здесь продать нельзя. Кнопка **Все** ставит количество на всё, что у вас есть: ![Из сумки выбрана Silver wolf fur: Yours, price 4, you have 3, quantity 3/3, Total: 12 coins, Sell.](assets/trade-sell.jpg) ![После продажи: "Sold: Silver wolf fur ×3 for 12 coins", в сумке остался только эликсир, кошелёк показывает 27.](assets/trade-sold.jpg) 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` ни одной лавки; лог назовёт её.