Для большинства выживательных серверов на Paper ответ такой: QuickShop-Hikari, если нужны магазины, которые новичок создаст без чтения инструкций, и ChestShop, если вам нужен явный, компактный и трудно читаемый неверно формат таблички. Таблички магазинов EssentialsX подходят для спавн-магазина от администрации и слабо подходят в роли рынка игроков. Всем трём нужны Vault и ровно один провайдер экономики под ним. Выбор плагина важен меньше, чем три решения вокруг него: что покупает сам сервер, как защищены сундуки магазинов и вытекает ли с каждой продажей немного денег из экономики. Если решить это правильно, цены игроки выставят сами; если неправильно, чья-нибудь ферма сахарного тростника станет центральным банком.
Сам слой экономики - Vault, балансы EssentialsX, worth.yml, стоимость команд и провайдеры на базе баз данных - разобран в статье Экономика Minecraft с EssentialsX и Vault. Здесь мы начинаем с того места, где она заканчивается: с магазинов.
Три вида магазинов и как выбрать#
Плагины магазинов отличаются не столько возможностями, сколько тем, как игрок создаёт магазин и как покупатель его читает.
| ChestShop | QuickShop-Hikari | |
|---|---|---|
| Создание магазина | Написать четыре строки на табличке | Ударить по сундуку предметом и ввести цену |
| Что видит покупатель | Текст на табличке | Парящий предмет и информационная панель в чате |
| Хранение | Таблички и сундуки в мире | База данных (по умолчанию локальный файл) |
| Порог входа | Игроки должны выучить формат | Почти нет |
| Админ-магазины | Admin Shop в строке 1 | /qs unlimited на магазине |
EssentialsX стоит в другой категории. Его таблички [Buy] и [Sell] - это серверные магазины с бесконечным запасом, а табличка [Trade] - игровой магазин вообще без сундука: запас хранится прямо внутри таблички. Поэтому таблички Essentials хороши для нескольких магазинов администрации на спавне и неудобны для рынка из пятидесяти игровых лавок.
Практическое правило: выберите один плагин игровых магазинов и держитесь его. ChestShop и QuickShop рядом работают технически, но тогда игрокам приходится знать две системы, у персонала появляются два набора прав для аудита, а данные о ценах, нужные для балансировки, разбросаны по двум местам.
Ещё одно решение стоит принять заранее: нужен ли вам вообще центральный рынок. Сундучные магазины, разбросанные по базам игроков, живописны и почти бесполезны как рынок, потому что никто не пойдёт двадцать минут, чтобы сравнить цены. Большинство серверов с живой экономикой строят торговый район у спавна с защищёнными участками, а /qs find в QuickShop-Hikari (поиск ближайших магазинов, продающих предмет) помогает при любой планировке.
Что нужно любому плагину магазинов в первую очередь#
Ни один из этих плагинов не хранит деньги. Они обращаются к Vault за тем провайдером экономики, который зарегистрирован, и проводят балансы через него. Поэтому перед установкой магазина сделайте следующее.
- Установите Vault (или поддерживаемый VaultUnlocked, если этого требует список ваших плагинов - но никогда оба сразу).
- Установите ровно один провайдер экономики. Обычно это EssentialsX.
- Перезапустите сервер и выполните в консоли
vault-info.
[Vault] Vault vX.Y.Z Information[Vault] Economy: Essentials Economy [Essentials Economy][Vault] Permission: LuckPerms [LuckPerms]Если строка Economy пуста, любой плагин магазинов либо отключится сам, либо загрузится и упадёт на первой же транзакции. Если там назван провайдер, который вы не собирались ставить (некоторые комбайн-плагины тихо регистрируют свой), удалите его: два провайдера означают, что /balance и магазин читают разные числа.
Второе условие - права. Плагины магазинов разделяют создание и использование, и почти всегда вам нужно развести их по разным группам: покупать может каждый, создавать - участники, которые уже какое-то время играют, а создавать админ-магазины - только одна группа персонала. Руководство по LuckPerms рассказывает о наследовании групп - именно там ранг модератора случайно получает право на админ-магазины.
ChestShop: табличные магазины на сундуках#
ChestShop старше из двух и по-прежнему поддерживается. Магазин - это табличка на сундуке или рядом с ним, и четыре строки таблички - вся конфигурация:
Line 1: (leave blank - your name is filled in)Line 2: 16Line 3: B 20:12 SLine 4: Oak LogРазберём построчно.
- Строка 1 - владелец. Оставьте её пустой, и ChestShop впишет ваш ник.
- Строка 2 - количество за одну сделку.
- Строка 3 - цена.
B 20означает, что покупатель может купить 16 брёвен за 20.S 12означает, что покупатель может продать магазину 16 брёвен за 12.B 20:12 Sделает и то и другое. Вместо числа можно написатьfree, чтобы раздавать предметы бесплатно. - Строка 4 - предмет. Напишите
?, и ChestShop подставит первый предмет из сундука, что избавляет от большинства ошибок в написании.
Названия предметов, не помещающиеся в строку таблички, сокращаются. Команда /iteminfo (псевдоним /iinfo) с предметом в руке выводит точное имя, которое ожидает ChestShop, включая код, который он использует для зачарованных или переименованных предметов.
По умолчанию покупатель покупает правым кликом по табличке и продаёт левым. Параметр REVERSE_BUTTONS в конфигурации меняет их местами; некоторые серверы так делают, потому что левый клик - ещё и "сломать блок", и новички, пытаясь купить, в итоге продают.
Разница цен в строке 3 - ваша первая защита от эксплойтов. Магазин, который продаёт за 12 и покупает за 20, любой человек с деньгами может выпотрошить циклом: купить по 12, продать обратно по 20 и так далее, пока владелец не обанкротится. Свежие сборки ChestShop умеют отклонять такие магазины; поищите в сгенерированной конфигурации соответствующую опцию и объясните игрокам, что число после B всегда должно быть больше.
Админ-магазины ChestShop и конфигурация
Админ-магазин - это табличка с Admin Shop в строке 1, созданная тем, у кого есть право ChestShop.admin. У него неограниченный запас и неограниченные деньги: он не списывает средства с баланса игроков и не начисляет их. Текст задаётся параметром ADMIN_SHOP_NAME в конфигурации.
Настройки, влияющие на экономику, находятся в plugins/ChestShop/config.yml. Названия ключей ниже взяты из ChestShop 3.x; сверяйтесь со своим сгенерированным файлом, потому что между релизами опции добавляются.
ADMIN_SHOP_NAME: Admin ShopSERVER_ECONOMY_ACCOUNT: ''TAX_AMOUNT: 5SERVER_TAX_AMOUNT: 0SHOP_CREATION_PRICE: 250SHOP_REFUND_PRICE: 0REVERSE_BUTTONS: falseЧто делает каждая из этих настроек.
TAX_AMOUNT- процент, который удерживается с сделок в игровых магазинах. По умолчанию 0. Несколько процентов - самый эффективный сток денег, который можно добавить игровому рынку, потому что он растёт вместе с объёмом торговли.SERVER_TAX_AMOUNT- то же для сделок в админ-магазинах.SERVER_ECONOMY_ACCOUNTзадаёт счёт, на который уходят деньги админ-магазинов и налоги. Если оставить пустым, деньги, заплаченные админ-магазину, просто выходят из экономики, что обычно и нужно: сток есть сток. Задавайте его, только если персоналу нужна настоящая казна, из которой можно тратить, и тогда считайте баланс этого счёта источником денег, который вы контролируете.SHOP_CREATION_PRICEиSHOP_REFUND_PRICEопределяют плату за создание магазина и возврат при его разрушении. Плата за создание без возврата - это разовый сток, и она отбивает у игроков желание понастроить десятки бесполезных магазинов.
Права устроены очевидным образом: ChestShop.shop.create.buy и ChestShop.shop.create.sell - создавать магазины, ChestShop.shop.buy и ChestShop.shop.sell - пользоваться ими, ChestShop.admin - админ-магазины и полный доступ к чужим магазинам, а ChestShop.mod - для персонала, которому нужно заглядывать в магазины, не владея ими.
QuickShop-Hikari: кликнуть по сундуку и ввести цену#
QuickShop-Hikari - поддерживаемый форк линейки QuickShop, и его стоит выбрать, когда не хочется объяснять формат табличек каждому новичку. Создание магазина выглядит так.
- Поставьте сундук и наполните его.
- Возьмите в руку предмет, который хотите продавать, и кликните левой кнопкой по сундуку.
- Введите в чате цену за один предмет.
Плагин ставит на сундук табличку и парящий над ним предмет-витрину. Новый магазин находится в режиме продажи: покупатели покупают у него. Владелец переключает режим командой /qs buy (магазин покупает у покупателей) и возвращает /qs sell. Обратите внимание: названия в QuickShop даны с точки зрения магазина, а B и S в ChestShop - с точки зрения покупателя. Игроки, переходящие между серверами, постоянно их путают.
| Команда | Что делает |
|---|---|
/qs price <amount> | Изменить цену магазина, на который вы смотрите |
/qs buy / /qs sell | Переключить режим магазина |
/qs staff add <player> | Позволить другому игроку пополнять запас и управлять магазином |
/qs unlimited | Для админов: бесконечный запас и деньги |
/qs find <item> | Найти ближайший магазин, продающий предмет |
/qs remove | Удалить магазин, на который вы смотрите |
/qs - псевдоним для /quickshop; плагин также регистрирует /shop, который конфликтует с плагинами меню-магазинов, использующими ту же команду. Если /shop открывает не то, проверьте список псевдонимов в конфигурации плагина.
Права: quickshop.use - для любого действия вообще, quickshop.create.sell и quickshop.create.buy - чтобы создавать магазины каждого вида, и общий quickshop.player, который выдаёт обычный набор прав игрока. Права unlimited и админские держите у одной группы персонала.
Хранение, витрины и версии
В отличие от ChestShop, QuickShop хранит магазины в базе данных: по умолчанию в локальной файловой, либо в MySQL, если указать на неё. На одном сервере по умолчанию всё в порядке. Если вы хотите держать данные магазинов рядом с таблицами других плагинов, подойдёт слот базы данных из вашего тарифа - подробности подключения и префиксы таблиц есть в статье MySQL для плагинов Minecraft. В любом случае данные магазинов теперь лежат в двух местах: сундуки и таблички в файлах мира, а записи магазинов в базе данных. Делайте их резервные копии вместе, иначе после восстановления магазины будут указывать на сундуки, в которых нет того, что, по мнению базы, там лежит.
Парящий предмет-витрина заслуживает внимания. Ранние версии QuickShop показывали его как настоящий выброшенный предмет, а настоящие предметы иногда могут подобрать воронки, игроки и другие плагины - исторически это был источник дублирования. Современный Hikari предлагает режимы витрины без сущности; проверьте, какой используется у вас, и выбирайте тот, что не создаёт сущность. Это ещё и мягче к числу сущностей на оживлённом рынке, что важно, если у вас уже работает очистка сущностей, которая может попытаться удалить "выброшенные предметы".
Hikari близко следует за свежими релизами Paper и со временем повышал минимальную версию Java. Подбирайте сборку плагина под версию сервера на странице загрузки и обновляйте его в рамках каждого обновления версии, а не после него.
Таблички EssentialsX: Buy, Sell и Trade#
EssentialsX поставляет таблички в составе базового jar, но работают только те типы, что перечислены в enabled-signs в plugins/Essentials/config.yml. Для создания каждого типа нужно право essentials.signs.create.<type>, а для использования - essentials.signs.use.<type>.
[Buy] и [Sell] - серверные магазины с бесконечным запасом:
[Buy] [Sell]16 16oak_log oak_log$20 $12Строка 2 - количество, строка 3 - предмет, строка 4 - цена. Табличка [Buy] забирает деньги и создаёт предметы; табличка [Sell] забирает предметы и создаёт деньги. Второе - источник денег без верхнего предела, и к нему нужна та же осторожность, что и к любому админ-магазину, - см. следующий раздел.
[Trade] - игровой магазин:
[Trade]$2016 oak_log:256(owner, filled in)Строка 2 - сколько платит покупатель, строка 3 - что он получает и весь загруженный в табличку запас, а строка 4 превращается в ник владельца, когда синтаксис принят. Любая из строк может быть деньгами или предметами, так что табличка обмена может продавать за деньги, покупать за деньги или менять алмазы на брёвна. Владелец пополняет запас правым кликом по табличке с предметом в руке и забирает выручку так же.
У табличек Trade есть одно реальное преимущество - нет сундука, поэтому нечего взламывать и нечего вытягивать воронкой - и два недостатка. Покупатели не видят запас, пока не кликнут, а рынок из табличек Trade не даёт искомого списка цен. Для всего, что больше нескольких лавок, лучше подходит плагин сундучных магазинов. Таблички Essentials и плагин сундучных магазинов уживаются без проблем; многие серверы используют таблички [Buy] на спавне и QuickShop везде остальном.
Админ-магазины без печати денег#
Любая серьёзная проблема экономики Minecraft-сервера сводится к админ-магазину, который что-то покупает. Бесконечный покупатель с фиксированной ценой превращает любой фармящийся предмет в деньги со скоростью, ограниченной лишь числом ферм, которые построят игроки. Железные фермы, золотые фермы, сахарный тростник, бамбук, келп, арбузы и дроп мобов - всё это подходит, а игроки очень хорошо строят фермы.
Безопасная схема - админ-магазин, который в основном продаёт.
- Продавайте то, чего игроки сделать не могут. Яйца призыва, если вы их разрешаете, бирки, декоративные блоки, элитры, если Энд у вас скуден. Это стоки: деньги уходят из экономики и не возвращаются.
- Продавайте базовые ресурсы дорого. Админ-магазин, продающий дубовые брёвна по 5, задаёт потолок цены. Игроки могут его сбить, и это именно то, что нужно, но никто никогда не остаётся без брёвен.
- Покупайте только то, что нельзя автоматизировать, и ставьте лимит. Если серверу всё же необходимо что-то покупать - например, чтобы дать новичкам доход, - выбирайте предметы, требующие активной игры, и ставьте цену настолько низкую, чтобы это был старт, а не профессия.
- Никогда не покупайте то, что продаёте. Админ-магазин, который продаёт по 5 и покупает по 6, - это бесконечный денежный цикл. Звучит как очевидная ошибка; она случается каждый раз, когда кто-то правит цены в двух разных плагинах.
Торговля между игроками - здоровая середина этой картины. Деньги перемещаются между балансами, не создаваясь, а запас конечен, потому что кому-то пришлось его добыть. Единственный способ, которым одна лишь торговля увеличивает денежную массу, - дюпы, и это следующая проблема.
Как остановить дюпы до того, как они дойдут до магазина#
Эксплойт дублирования на сервере без рынка - неприятность. На сервере с рынком это печатный станок для фальшивок: дюпнутые предметы продают всем желающим, а если админ-магазин их покупает, то прямо превращают в новые деньги. Большинство дюпов относится к трём группам.
Ванильные механики. Дублирование TNT, дублирование ковров и рельсов поршнями и ломание бедрока на Paper по умолчанию исправлены или отключены. Они возвращаются, если кто-то переключит настройки в config/paper-global.yml:
unsupported-settings: allow-piston-duplication: false allow-permanent-block-break-exploits: false allow-headless-pistons: falseТехнически подкованные сообщества иногда просят их включить. Если вы это делаете, не держите админ-магазин, который покупает TNT, ковры, рельсы или всё, что из них делается.
Пограничные случаи сундуков магазинов. Сундук магазина с воронкой под ним, воронка-вагонетка, проезжающая снизу, второй сундук рядом, превращающий его в двойной, или поршень, сдвигающий табличку. Современные версии и ChestShop, и QuickShop-Hikari справляются с распространёнными случаями, но плагины защиты, флаги регионов и другие плагины взаимодействуют друг с другом. Проверьте сами со второго аккаунта до запуска: попробуйте открыть чужой сундук магазина, сломать его табличку, поставить под него воронку и пустить под ним воронку-вагонетку. Приваты добавляют второй уровень - защита от гриферства и античит рассказывает о GriefPrevention и WorldGuard.
Баги плагинов. Плагины магазинов, рюкзаков, кастомных предметов и аукционные дома в разное время выпускали дюпы. Держите их обновлёнными, читайте списки изменений в поисках слова "dupe" и не запускайте заброшенные форки.
Когда дюп случился, именно доказательства позволяют исправить его без вайпа. Если установлен CoreProtect, /co lookup u:<player> t:3d a:container показывает, что игрок положил в контейнеры и забрал из них, а /co inspect на сундуке магазина показывает его историю. Сопоставьте это с economy.log из EssentialsX, и обычно можно увидеть точный момент появления предметов и то, куда ушли деньги. Удалите предметы и деньги с затронутых счетов, а не откатывайте весь мир: откат мира отменяет и три дня честной торговли.
Балансировка игровой экономики#
Когда появляются игровые магазины, большинство цен выставляют игроки, и ваша задача меняется: вместо назначения цен вы управляете денежной массой вокруг них. Рычаги в порядке полезности.
- Облагайте налогом каждую продажу в магазине. 3-5%
TAX_AMOUNTв ChestShop или аналогичная настройка налога в QuickShop-Hikari изымают деньги пропорционально активности. Оживлённая экономика платит больше, тихая - меньше, и перенастраивать ничего не нужно. - Берите плату за создание магазина. Разовый взнос, возвращаемый частично или совсем нет. Это небольшой сток, и он держит рынок в порядке.
- Ограничьте число магазинов на игрока. В QuickShop-Hikari есть лимит магазинов, который можно привязать к группам прав; в ChestShop реальным лимитом обычно служит размер привата. Неограниченное число магазинов на игрока позволяет одному человеку захватить рынок пятьюдесятью сундуками.
- Держите админ-магазины как потолок и пол, а не как рынок. Цена админ-продажи - максимум, который кто-либо заплатит; цена админ-покупки - минимум, который кто-либо примет. Оставьте между ними широкий зазор, чтобы игроки торговали внутри него.
- Сделайте сторону дохода скучной и ограниченной. Работы, награды за голосование и выплаты за время игры должны давать новичку достаточно для старта, но не для отставки.
Рабочий пример. Десять игроков, стартовый баланс 100, нет админ-скупки, налог 5% в игровых магазинах и /home стоит 10. Торговля между игроками перемещает деньги и сжигает 5% от всего проданного; телепорты сжигают ровный ручеёк. Совсем без дохода денежная масса медленно сжималась бы, а цены падали - дефляция так же плоха, как инфляция, потому что никто не хочет продавать. Поэтому добавьте один источник, который вы контролируете: ежедневную награду за время игры или низкую выплату Jobs. Раз в неделю смотрите /baltop. Если сумма растёт быстрее числа игроков, урежьте источник; если падает, увеличьте. Вот и всё центральное банкирование, и оно работает на Minecraft-сервере по той же причине, что и везде: вы регулируете единственное число, которое контролируете, а рынок разберётся с остальным.
То, что похоже на балансировку, но ей не является: правка всех цен игровых магазинов указом, ограничение цен в конфигурации или бан игрока, который разбогател законно. Исправьте источник, который его обогатил, и его богатство обесценится само.
Если вы собираетесь продавать что-либо за реальные деньги поверх всего этого, сначала прочитайте магазины рангов и коммерческие правила Minecraft: внутриигровая валюта, проданная за деньги, - как раз то, что эти правила ограничивают.
Магазины на хостинговом сервере#
На RE:NODE тарифы Minecraft работают на Paper с подходящей версией Java, поэтому описанные выше плагины ставятся как jar-файлы, загруженные через файловый менеджер или SFTP в plugins/, с последующим перезапуском. Однокнопочного установщика плагинов и списка разрешённых плагинов нет - вы приносите те jar, которые хотите. В каждый игровой тариф входит один слот базы данных, создаваемый в панели с автоматически сгенерированными хостом, пользователем и паролем; этого достаточно для хранения QuickShop-Hikari в MySQL, если вы хотите держать его там. Резервные копии запускаются по требованию или из вкладки Schedules и восстанавливаются одной кнопкой - так вы получаете единый согласованный снимок мира, файлов плагинов и данных магазинов, которого требует предупреждение выше; см. резервные копии в руководствах.
Сами магазины почти не нагружают CPU. Оживлённый торговый район обходится дороже за счёт того, что вокруг него: витрин из выброшенных предметов, цепочек воронок, питающих сундуки магазинов, и ферм, которые их снабжают. Если рынок начинает лагать, обычно виноваты лаги от ферм жителей и мобов, а не плагин магазинов.
Устранение неполадок#
Плагин магазинов отключается при запуске. Не зарегистрирован провайдер экономики. Выполните vault-info; если строка Economy пуста, поищите выше в логе собственную ошибку плагина экономики.
Табличка ChestShop остаётся обычным текстом. Формат отклонён. Обычно в строке 4 название предмета, которое ChestShop не распознаёт, - используйте ? или имя из /iteminfo - либо у игрока нет ChestShop.shop.create.buy или .sell.
Покупатели продают, хотя хотели купить. Это левый и правый клик в ChestShop. Объясните это на табличке у входа на рынок или включите REVERSE_BUTTONS.
QuickShop просит цену, и ничего не происходит. Сообщение в чате перехватил плагин чата или ожидающая команда. Проверьте, что плагин форматирования чата или антиспама не отменяет сообщение до того, как его увидит QuickShop, и что игрок ввёл только число.
Табличка Essentials `[Trade]` не принимает запас. Предмет в руке не совпадает со строкой 3 в точности, или trade отсутствует в enabled-signs.
Магазин продаёт запас, которого у него нет. Включён админ-режим (/qs unlimited или Admin Shop на табличке ChestShop). Проверьте это, прежде чем винить дюп.
Через месяц цены ничего не значат. Админ-магазин что-то покупает, а оно фармится. Найдите его в economy.log - один предмет даст большую часть дохода.
FAQ#
Что лучше, ChestShop или QuickShop-Hikari?
Ни один не лучше в части экономики; они различаются тем, как ими пользуются игроки. QuickShop-Hikari проще для новичков и допускает поиск через /qs find. ChestShop более явный, не требует базы данных, а его таблички показывают всю сделку с первого взгляда. Выбирайте по своим игрокам, а не по списку возможностей.
Работают ли плагины магазинов без EssentialsX?
Да, если в Vault зарегистрирован какой-нибудь провайдер экономики. EssentialsX - распространённый провайдер, но любой совместимый с Vault плагин экономики работает так же с точки зрения магазина.
Нужен ли серверу собственный магазин?
Небольшой, который в основном продаёт, - да: он гарантирует базовые ресурсы и задаёт потолок цен. Серверный магазин, покупающий фармящиеся предметы по фиксированным ценам, - самая частая причина неудержимой инфляции, поэтому список покупок в нём должен быть коротким или пустым.
Можно ли перенести магазины из ChestShop в QuickShop?
Встроенного конвертера, за который мы могли бы поручиться, нет. Практический путь - объявить дату, дать игрокам опустошить сундуки ChestShop, удалить плагин и дать им создать новые магазины. Ручная конвертация редко стоит риска для запасов.
Как узнать, кто дюпнул предметы в магазин?
Журналирование блоков и контейнеров. Просмотр контейнеров в CoreProtect показывает, что попало в сундук и кто это положил, а журнал экономики EssentialsX показывает, куда деньги ушли потом. Если логирование не было установлено до дюпа, вы гадаете.


