Экономика в Minecraft - это три задачи, которые решают три разные вещи: что-то, что хранит балансы, Vault, чтобы все остальные плагины могли это найти, и один или несколько плагинов магазинов, перемещающих деньги между игроками. На Paper стандартный ответ - EssentialsX для балансов, Vault в роли моста и плагин магазина сверху, и эта связка вытянет сервер выживания на сто игроков, ни разу не обратившись к базе данных. Чего никто не планирует, так это устройства самой экономики - где деньги входят на сервер и где выходят, - а именно это определяет, будут ли цены хоть что-то значить через три месяца.
Что такое Vault и чем он не является#
Vault - это не экономика. Он не хранит балансы, в нём нет команд, которые бы кому-то выдавали деньги, и почти нет настроек. Это справочник: плагины регистрируются как провайдеры, другие плагины спрашивают Vault «кто здесь отвечает за экономику?», и Vault отдаёт ссылку. Тот же механизм работает для прав и префиксов чата, благодаря чему чат EssentialsX показывает префикс LuckPerms, хотя эти два плагина ничего не знают друг о друге.
Отсюда три следствия, и все три порождают обращения в поддержку:
- Один Vault ничего не делает. Установите его без провайдера, и каждый плагин магазина запишет в лог что-то вроде «no economy plugin found» и отключится.
- Ровно один провайдер. Установите две экономики, и одна из них выиграет регистрацию. Тогда балансы расходятся:
/balanceпоказывает одно число, магазин списывает с другого, и игроки замечают это задолго до вас. - Vault - это зависимость, а не функция. Настраивать и подстраивать в нём нечего.
Проверить, что зарегистрировалось, можно одной командой в консоли:
$ vault-infoОна выводит зарегистрированных провайдеров экономики, прав и чата. Если строка экономики пуста или называет то, что вы не собирались ставить, остановитесь на этом и исправьте, прежде чем трогать что-либо другое. Существует поддерживаемый преемник под названием VaultUnlocked, добавляющий поддержку нескольких валют, но большинство плагинов по-прежнему ориентируются на оригинал, так что ставьте то, что просит ваш список плагинов, и никогда не оба сразу.
EssentialsX Economy: вариант по умолчанию и его пределы#
EssentialsX - поддерживаемый форк Essentials, а его экономика входит в базовый jar - отдельной загрузки нет. Необязательные модули (chat, spawn, protect, anti-build, GeoIP, Discord) - это отдельные jar-файлы, и ставить стоит только те, которыми вы пользуетесь, потому что каждый добавляет обработчики событий на однопоточный сервер.
Прежде чем что-либо строить сверху, нужно понять, где лежат деньги:
plugins/Essentials/ config.yml worth.yml kits.yml economy.log userdata/ 0d2a2b79-....yml 3f1c88e1-....ymlОдин YAML-файл на игрока, с ключом по UUID, в userdata/. Это и есть весь механизм хранения. У EssentialsX нет SQL-бэкенда, и никакая настройка его не добавит. Для одного сервера это вполне нормально - чтение и запись небольшого файла быстры, ломаться тут нечему. Перестаёт быть нормальным это ровно в двух ситуациях: когда за прокси стоит несколько серверов, которым нужны общие балансы, и когда сервер работает с online-mode=false, где UUID генерируются из имён, а не выдаются Mojang, так что смена имени или переключение режима незаметно отрывает игрока от его денег.
Команды, которыми пользуются на самом деле:
| Команда | Что делает |
|---|---|
/balance [player] | Ваш баланс или чей-то чужой |
/baltop | Таблица лидеров и ваш индикатор инфляции |
/pay <player> <amount> | Перевод от игрока к игроку |
/eco give|take|set|reset <player> <amount> | Создание денег администратором |
/sell hand|all|blocks | Продажа серверу по ценам из worth.yml |
/worth [item] | Сколько за это платит сервер |
/eco создаёт деньги из ничего. Она должна принадлежать одной группе, должна журналироваться, а выдать её модераторам, «чтобы они помогали людям», - самый частый способ убить экономику сервера. Права для неё - essentials.eco, для остального - essentials.pay, essentials.balance.others, essentials.sell и essentials.worth. Выдавайте их группам, а не отдельным игрокам - руководство по LuckPerms описывает наследование, чтобы группа модераторов незаметно не унаследовала права владельца.
Настройки, формирующие экономику#
Большинство регуляторов находятся в одном файле:
starting-balance: 100currency-symbol: '$'min-money: 0max-money: 10000000000000economy-log-enabled: truecommand-costs: home: 50 sethome: 500 tpa: 25 back: 100enabled-signs: - buy - sell - balance - tradeО четырёх из них стоит сказать по предложению.
starting-balance по умолчанию равен 0. Небольшой стартовый баланс дружелюбнее нулевого, потому что новичок без денег не может купить инструменты, которые позволили бы ему хоть что-то заработать. Большой - это кран, масштабирующийся вместе с числом зашедших людей.
min-money по умолчанию отрицательное число, а это значит, что игроки могут уходить в долг. Если долг не входит в ваши игровые механики, поставьте 0.
max-money по умолчанию равен десяти триллионам, а это не потолок, а скорее слух. Снижение его до значения, которого игрок может реально достичь, придаёт числу смысл и делает неконтролируемую инфляцию заметной, вместо того чтобы её поглощать.
economy-log-enabled записывает каждую транзакцию в plugins/Essentials/economy.log: кто, сколько и зачем. По умолчанию выключено. Включите сейчас, потому что день, когда он понадобится, - это день, когда кто-то уже потратил деньги.
command-costs - самая недоиспользуемая возможность плагина. Плата за /home, /tpa, /back и /sethome создаёт постоянный, скучный отток с баланса каждого активного игрока, а именно это и нужно экономике. Заодно она мягко отбивает охоту к спаму телепортацией, из-за которого сервер выживания начинает походить на лобби.
Цены для /sell и /worth берутся из отдельного файла:
worth: cobblestone: 0.05 iron_ingot: 6 gold_ingot: 9 diamond: 120 wheat: 1 sugar_cane: 0.2Современный EssentialsX использует в качестве ключей названия материалов; очень старые файлы использовали числовые ID предметов, и их нужно конвертировать. У предмета без записи продать нельзя, и сообщение об ошибке так и говорит - это самый быстрый способ выяснить, что ваш worth.yml неполон.
Магазины: таблички, сундуки и меню#
Три семейства, и большинству серверов нужны два из них.
Сундуки-магазины игроков. ChestShop и QuickShop-Hikari - обычный выбор. Игрок ставит сундук, вешает на него табличку, а остальные щёлкают, чтобы купить у него товар из запаса или продать ему. Это самый здоровый вид магазина, потому что деньги движутся между игроками вбок, а не появляются и исчезают, и потому что запас конечен. QuickShop-Hikari - поддерживаемый форк старой линейки QuickShop; данные магазинов он по умолчанию хранит в собственной файловой базе и может быть направлен на внешнюю. В любом случае под сундуками-магазинами нужна защита территории, иначе магазин - просто сундук, который может открыть кто угодно.
Административные магазины с меню. EconomyShopGUI - обычный бесплатный вариант, есть и платные альтернативы. Меню, фиксированные цены, бесконечный запас и бесконечный спрос. Их легко настроить, и именно они порождают почти всю инфляцию, потому что административный магазин, который покупает предмет по фиксированной цене, - это машина, превращающая продукцию ферм в деньги без верхнего предела.
Аукционы и торговые команды. Игрок с игроком, никаких фиксированных цен, и полезный сток, если брать плату за размещение лота или процент.
Рядом стоит сторона доходов. Обычно это Jobs Reborn: он платит игрокам за добычу, земледелие, строительство и убийства, а его кривая выплат - главный кран вашей экономики. Все эти плагины работают через Vault, и все откажутся включаться, если провайдер не зарегистрировался, поэтому /vault-info - первое, что стоит проверить, если плагин магазина не появляется.
Краны, стоки и почему на каждом сервере заводится триллионер#
Экономика - это бак с кранами и сливами. Деньги, что входят, - кран, что выходят, - сток, а сервер с кранами и без стоков раздувается, пока цены не перестанут что-либо значить, и единственное интересное число - сколько нулей у кого-то на счёту.
| Краны | Стоки |
|---|---|
| Продажа административным магазинам | Покупка в административных магазинах |
| Выплаты Jobs | Цены команд (/home, /back) |
| Награды за голосование и время игры | Налоги магазинов и плата за размещение |
| Награды за квесты и подземелья | Стоимость ремонта, зачарования и косметики |
/eco give | Аренда привата или участка |
Классический провал настолько конкретен, что его можно назвать. Административный магазин покупает сахарный тростник по фиксированной цене. Кто-то строит автоматическую ферму тростника. Теперь у сервера есть печатный станок, выпуск которого ограничен только числом ферм, и через две недели верхний баланс в тысячу раз превышает медианный. Та же история повторяется с арбузами, бамбуком, железными фермами и дропом мобов.
Два правила предотвращают большую часть этого:
- Цена определяется временем добычи с учётом автоматизации. Не тем, насколько предмет кажется редким. Если редстоун-машина может производить его, пока никого нет онлайн, цена покупки должна быть около нуля, либо административный магазин вообще не должен его покупать.
- Административные магазины должны в основном продавать, а не покупать. Пусть игроки покупают у игроков. Сервер продаёт то, что игроки сделать не могут, - спавнеры, удобства без прав, косметику, - а покупает почти ничего.
Стоки тоже должны масштабироваться. Фиксированные 50 за /home - реальные траты в первый день и бесплатно к третьей неделе. Процентные стоки - налог 5% с каждой продажи в магазине, плата 2% за размещение на аукционе - сами идут в ногу с экономикой. Фиксированные сборы - нет.
Раз в неделю смотрите /baltop и записывайте цифры. Стабильный рост общей суммы и верхнего баланса - это нормально. Верхний баланс, удваивающийся каждый месяц, - это кран, который вы не задумывали, и включённый ранее лог подскажет, какой именно. Если вы думаете о реальных деньгах поверх всего этого, сначала прочитайте монетизацию игрового сервера в рамках правил, потому что собственные коммерческие правила Minecraft ограничивают то, что можно продавать.
Перенос экономики в базу данных#
База данных для экономики нужна в двух случаях: когда несколько серверов за прокси должны делить один баланс и когда вы хотите запрашивать или анализировать данные экономики вне игры. В остальном файлы годятся и проще.
Поскольку EssentialsX так не умеет, придётся менять провайдера. XConomy и TheNewEconomy - бесплатные провайдеры Vault с хранением в SQL; CMI - платный комбайн, в который входит экономика с той же возможностью. Что бы вы ни выбрали, рискованная часть - миграция: убедитесь, что у нового плагина есть импортёр данных userdata EssentialsX, запустите его на копии, сравните /baltop до и после и храните старую папку userdata/, пока не будете уверены.
Игровые тарифы на RE:NODE включают один слот базы данных. Вы создаёте его в панели, и она сама генерирует хост, имя базы, пользователя и пароль, а кнопка «Open in phpMyAdmin» входит в phpMyAdmin с одноразовым токеном, действующим шестьдесят секунд. Как бы ваш плагин ни называл раздел хранилища, ему нужны одни и те же пять значений:
host: '<the host shown on the slot>'port: '<the port shown on the slot>'database: '<the generated database name>'username: '<the generated user>'password: '<the generated password>'Порт берите из слота, а не предполагайте значение по умолчанию. Несколько плагинов могут делить один слот, пока у них различаются префиксы таблиц, - это стоит проверить, прежде чем ставить второй плагин, которому нужна база: при одном слоте на игровом тарифе это единственный способ поместить их обоих.
Как делать это правильно, описано в статье резервные копии и восстановление баз данных, а как переносить данные в слот и из него вручную - в статье импорт и экспорт в phpMyAdmin. Если экономика общая для сети за прокси, то сети прокси Velocity объясняют, почему у каждого плагина с состоянием в такой сети та же проблема.
Резервные копии, аудит и способы, которыми пропадают деньги#
Деньги исчезают или умножаются небольшим числом предсказуемых способов.
- Ошибка в правах персонала. Кто-то наследует
essentials.ecoот родительской группы. Проверяйте группы, а не людей, и держите/ecoв одном месте. - Баг дупликации. Любой дюп превращается в бесконечные деньги, как только административный магазин покупает продублированный предмет по фиксированной цене. Это вторая причина, по которой административные магазины не должны много покупать.
- Восстановление. Откат мира откатывает и файлы
userdata/, если они в той же резервной копии, и не откатывает, если экономика в базе данных. - Неаккуратная остановка. EssentialsX записывает файлы игроков по мере изменения балансов, но процесс, убитый при достижении лимита памяти, всё равно может потерять последние записи. На RE:NODE сервер, достигший лимита памяти, останавливается и запускается заново с чистого состояния, а не уходит в swap, - это правильное поведение, но последние секунды всё же теряются, поэтому оставляйте запас, а не подгоняйте heap под тариф вплотную.
- UUID в offline-режиме. При
online-mode=falseидентификатор - это хэш имени. Балансы следуют за именами, а не за людьми.
Держите журнал транзакций включённым, держите включённым журнал блоков, чтобы можно было доказать, что лежало в сундуке магазина, и разделяйте доступ к панели и власть в игре: модератору, которому нужна консоль, не нужны платежи, а роли и субпользователи панели существуют как раз для такого разделения. Сторона панели описана в статье субпользователи и минимальные привилегии, а внутриигровая - в статье защита от грифинга и античит, откуда и берутся доказательства.
Игровые тарифы включают слоты для резервных копий, которые можно запускать по требованию или с вкладки Schedules, а восстановление - одна кнопка. Сделайте копию перед сменой провайдера, перед массовой правкой worth.yml и перед тем, как кому-то выдать /eco.
Устранение неполадок#
«No economy plugin found» при запуске. Отсутствует Vault, либо ничто не зарегистрировалось как провайдер. Выполните /vault-info. Если строка экономики пуста, ваш плагин экономики не загрузился - пролистайте лог вверх и найдите его собственную ошибку.
`/balance` работает, но магазин говорит, что экономики нет. Установлены два провайдера, и магазин получил не того. Удалите один.
Балансы сбрасываются до стартового. Изменился UUID. Проверьте, что online-mode в server.properties не переключали, и что файл в userdata/ по-прежнему существует с ожидаемым именем.
«You cannot sell that.» В worth.yml нет записи для этого материала, либо ключ записан старым числовым ID.
Магазины на табличках ничего не делают. Тип таблички не указан в enabled-signs, либо у игрока нет права essentials.signs.use.<type>. Таблички работают только для включённых типов.
Деньги не сохранились после сбоя. Ожидаемо для последних записей после неаккуратной остановки. Если это происходит регулярно, сервер упирается в лимит памяти; это проблема размера, а не экономики.
FAQ#
Нужен ли мне вообще Vault?
Если какой-либо плагин, кроме плагина экономики, работает с деньгами, то да. Магазины, работы, аукционы и большинство плагинов квестов находят экономику через Vault. Серверу, где деньгами пользуется только EssentialsX, формально он не нужен, но вы всё равно установите его в течение недели.
Может ли EssentialsX хранить балансы в базе данных?
Нет. Он записывает по одному файлу YAML на игрока в plugins/Essentials/userdata/. Экономика на базе данных означает замену провайдера на такой, который поддерживает хранение в SQL, и перенос балансов.
Как остановить инфляцию без вайпа?
Сначала закройте краны: перестаньте покупать в административных магазинах предметы, которые можно фармить, и сгладьте верх кривой выплат Jobs. Затем добавьте масштабируемые процентные стоки, например налог на продажи в магазинах. Вайп - крайняя мера, о нём нужно объявлять за недели.
Могут ли игроки иметь один баланс на нескольких серверах?
Только с общим хранилищем. Балансы в файлах привязаны к серверу, так что сети за прокси нужен провайдер экономики на базе данных, к которой подключаются все бэкенды.
Какой стартовый баланс разумен?
Достаточный для первого набора инструментов и пары телепортаций, и не больше. Точное число зависит от ваших цен; проверка - может ли новичок сделать что-то полезное в первый час, не пропуская при этом первую неделю.
Как сбросить экономику?
Остановите сервер, сделайте резервную копию, затем либо удалите файлы userdata/ (это заодно сотрёт дома и прочее состояние игроков), либо воспользуйтесь командой сброса вашего провайдера для всех игроков. /eco reset <player> возвращает одного игрока к стартовому балансу, и это более безопасный инструмент, когда проблема в одном аккаунте, а не во всей экономике.




Комментарии
Полностью анонимно: без аккаунта, без почты, без cookie. Мы храним имя, которое вы ввели, текст и время - больше ничего. Количество ссылок ограничено, разметка не отображается.