Перейти к содержимому

Магазин покупки и продажи

Магазин в стиле торговца, где каждая плитка позволяет купить ИЛИ продать один и тот же предмет, в зависимости от того, какой кнопкой мыши кликнули. Цена покупки выше цены продажи (торговец берёт наценку). Демонстрирует разделение по типу клика в одном и том же слоте.

  • click { left { ... } right { ... } } для разного поведения по типу кнопки
  • Связку правила money с действием takeMoney для покупки
  • Связку правила inventoryItems с действиями itemRemove + giveMoney для продажи
  • Несимметричное ценообразование (купить за 20, продать за 15)

Блок click {} может содержать несколько подблоков, по одному на тип кнопки мыши:

click {
left { rules { money: 20 }, actions { takeMoney: 20, itemAdd { ... } } }
right { rules { inventoryItems: [...] }, actions { itemRemove: [...], giveMoney: 15 } }
}

При левом клике игрока выполняется только подблок left. При правом - только right. Это отличается от плоского click { rules: ..., actions: ... }, который срабатывает на любой тип клика.

Доступные типы кликов: left, right, shift_left, shift_right, drop. Добавляйте больше подблоков для большего числа кнопок - типичный паттерн: left под основное действие, shift_left под “сделать x8” или “продвинутый вариант”.

Плагины-торговцы обычно покупают предметы у игроков дешевле, чем продают. Разница (купить 20 - продать 15 = 5 наценки) - это доля торговца. Не даёт игрокам бесконечно прокручивать предметы через магазин ради прибыли.

Чтобы магазин был защищён от арбитража:

  • buy_price > sell_price (всегда)
  • buy_price > sell_price для любой цепочки и через другие магазины тоже

Если хотите “честную цену” в UI без наценки - ставьте обе одинаковыми.

Обработчик правого клика использует правило inventoryItems, чтобы проверить, есть ли у игрока предмет на продажу:

right {
rules { inventoryItems: [{ material: WHEAT, count: 16 }] }
actions {
itemRemove: [{ material: WHEAT, count: 16 }]
giveMoney: 15
}
}

Если у игрока нет 16 пшеницы - правило не проходит, действия не срабатывают, и вместо них локальный denyActions показывает сообщение “У вас недостаточно для продажи”.

  1. Закиньте бандл в plugins/AbstractMenus/menus/example/.
  2. /am reload.
  3. /eco give <вы> 1000.
  4. Введите /ame_buysell в игре.
  5. Левый клик по пшенице - купить. Правый - продать обратно.