Войти или зарегистрироваться
  • Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.

Плагин [ECON] Fé-economy v0.9.3 — простая экономика с поддержкой СУБД [1.7-1.8]

Reality_SC

Старожил
Пользователь
Баллы
123
Имя в Minecraft
Reality_SC
В этой теме представлен мой форк широко известного плагина Fé-economy, сокр. просто Fe. За основу взята последняя на текущий момент версия 0.8.2.

Внимание: выяснилось, плагин некорректно работает с SQLite, поэтому до объявления о фиксе, пожалуйста, используйте MySQL.


Конфигурация плагина.
По сравнению с оригинальной версией, на которой основан мой форк, файл config.yml претерпел значительные изменения. Однако, плагин полноценно проводит конвертацию в новый формат и сохраняет бекап старого конфига.
Стоит отметить, что плагин имеет внутреннее название Fe2 (вместо Fe) и создаёт соответствующую папку для конфига. Чтобы использовать старый конфиг, перед запуском просто сделайте копию папки и config.yml.
YAML:
settings:
  # Количество монет для новых игроков
  new-player-holdings: 10.00
  # Максимально допустимое количество монет для каждого игрока
  maximum-holdings: -1.0
  # Сколько по умолчанию показывать наиболее богатых игроков
  show-top: 10
  # Префикс для ответов плагина в чате
  prefix: Fe
  # Настройки валюты
  currency:
    # Префикс валюты. Например, кол-во долларов пишется так: $100.
     prefix: ''
    # Возможен ли отрицательный баланс
     negative: false
    # Рубли/доллары/мажорная единица валюты
     major:
       single: Fe
       multiple: Fe
    # Копейки/центы/минорная единица валюты
     minor:
      # Включено или нет?
       enabled: false
       single: Fe
       multiple: Fe
  # Тип используемой БД: mysql или sqlite
  database-type: sqlite
  # SQLite в общем-то настройками не богат
  sqlite: {}
  # Настройки MySQL
  mysql:
    # Перечитывать ли счёт игрока из БД при каждом обращении к нему?
    # Эта настройка необходима, если Вы используете ЛК, где можно тратить монеты.
    # Если количество монет может меняться только на сервере, её можно выключить.
    # Это значительно снизит нагрузку на сервер.
    maximum-consistency: true
    # Адрес, логин и пароль для подключения
    connection:
      database: localhost:3306/minecraft
      username: user
      password: pass
    # Названия таблиц и колонок в них
    tables:
      accounts: fe_accounts
    columns:
      accounts:
        uuid:     uuid
        username: name
        money:    money
  # Удалять ли при запуске счета, на которых содержится количество
  # монет по умолчанию?
  autoclean: true
# Используется для автоматического обновления настроек. Не менять.
internal:
  version: 1

Команды и пермишены.
  • fe top [#] — показать сколько-то самых богатых игроков.
    fe.top
  • fe balance [who] — показать свой или чужой баланс.
    fe.balance, fe.balance.other
  • fe send [who] [$] — послать монет со своего счёта на чужой.
    fe.send
  • fe create [who] — создать запись.
    fe.create
  • fe grant [who] [$] — зачисление монет на счёт.
    fe.grant
  • fe deduct [who] [$] — снятие монет со счёта.
    fe.deduct
  • fe set [who] [$] — установление точного значения кол-ва монет на счёте.
    fe.set
  • fe remove [who] — удаление записи.
    fe.remove
  • fe clean — удаление записей со счетами, равными значению по умолчанию.
    fe.clean
  • fe migrate <mysql|sqlite> — полный дамп из текущего хранилища в указанное (не может быть текущим).
    fe.migrate
  • fe debug — включение показа в консоли стека для каждого вызова методов обработчика VaultAPI.
    fe.debug
  • fe reload — перезагрузка плагина.
    fe.reload
  • fe help — показ справки по командам.
    fe.?
Часть пермишенов (для игроков) объединена в один fe.member, другая часть (для администраторов) — в fe.admin; на всякий случай все вместе они в пермишене fe.*.

Поведение относительно UUID-ов.
В оригинальной версии использовался Player UUID Fetcher, который запрашивал пачками uuid-ы игроков по их никам у лицензионных серверов Mojang. Мой этого не делает. Каждому игроку при входе на сервер создаётся запись — имя и uuid берутся из PlayerJoinEvent. Если в БД имелась запись с таким ником (созданная командой, например) и/или таким uuid-ом, к ней будет добавлена недостающая часть. uuid имеет приоритет над именем, поэтому если uuid старый, а ник новый, то обновится именно ник.

История изменений.
  • 0.9.3: исправлен баг с дюпом счёта, мелкие исправления в коде.
  • 0.9.1: возможен режим кэширования счёта игроков без постоянного перечитывания его из БД (нужно выставить settings.mysql.maximum-consistency: false).
  • 0.9.0: запись в БД происходит отдельным потоком; добавлены команды /fe migrate и /fe debug.
  • 0.8.4: изменен файл конфигурации, поведение относительно uuid, почищен код.
  • 0.8.2, взята оригинальная версия.
Возможные проблемы.
Конкретно в моём случае я использую СУБД, значительно отдалённый от игрового сервера, и если включить maximum-consistency, то даже 1-2 игрока, постоянно продающих в админ-шопе, могут приложить сервер. Есть на рубакките программисты, которые утверждают, что старые версии без uuid-ов работают без лагов и при этом перечитывают данные из БД при каждом обращении к счёту. Я в этом сомневаюсь, но всегда готов к конструктивной критике и тем более советам по деталям кода.
Оригинальный плагин (Fe):
Global+Statistics.borderless.png

Мой форк (Fe2):
Global+Statistics.borderless.png
 
Последнее редактирование:
А в чём отличия от оригинальной Fe-экономики?
Я с ней совсем не знаком. Вообще, из последних "экономик", что я видел мне больше всего приглянулась CraftConomy.
 
Я могу просто заменить официальный плагин на этот? Конфиги обновятся или надо старые удалить и заново их настроить?
Дополнительных библиотек не нужно устанавливать? Просто плагин занимает на 500 кб меньше оригинала
 
После каждого действия с деньгами (продажа/покупка предметов в админшопи, перевод средств) мои данные в бд дублируются и счет остается неизменным
 

Вложения:

  • Untitled.png
    Untitled.png
    Размер файла
    4 КБ
    Просмотров
    90
Последнее редактирование:
Может быть связано с ключами, обнови. Ещё проверь настройку maximum-consistency: true, если хочешь, чтобы посторонние изменения в БД немедленно приводили к изменению на сервере. Но это внесёт немного лагов.
Надеялся, что вы не успеете прочитать)
Данные дублировались и плагин читал самую высокую строчку в таблице при вводе /fe (/money)
При вводе /fe relaod
JavaScript:
java.lang.IllegalArgumentException: Invalid UUID string: 0
        at java.util.UUID.fromString(UUID.java:194) ~[?:1.8.0_40]
        at com.niccholaspage.Fe.Databases.DatabaseSQL.fromResultSet(DatabaseSQL.java:75) ~[?:?]
        at com.niccholaspage.Fe.Databases.DatabaseSQL.loadAccounts(DatabaseSQL.java:65) ~[?:?]
        at com.niccholaspage.Fe.Fe.onEnable(Fe.java:55) ~[?:?]
        at org.bukkit.plugin.java.JavaPlugin.setEnabled(JavaPlugin.java:316) ~[JavaPlugin.class:git-Cauldron-MCPC-Plus-1.7.10-1.1307.06.218]
        at org.bukkit.plugin.java.JavaPluginLoader.enablePlugin(JavaPluginLoader.java:368) [JavaPluginLoader.class:git-Cauldron-MCPC-Plus-1.7.10-1.1307.06.218]
        at org.bukkit.plugin.SimplePluginManager.enablePlugin(SimplePluginManager.java:410) [SimplePluginManager.class:git-Cauldron-MCPC-Plus-1.7.10-1.1307.06.218]
        at com.niccholaspage.Fe.Commands.ReloadCommand.onCommand(ReloadCommand.java:22) [Fe_v0.9.1%20%233.jar:?]
        at com.niccholaspage.Fe.FeCommands.onCommand(FeCommands.java:111) [Fe_v0.9.1%20%233.jar:?]
        at org.bukkit.command.PluginCommand.execute(PluginCommand.java:44) [PluginCommand.class:git-Cauldron-MCPC-Plus-1.7.10-1.1307.06.218]
        at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:181) [SimpleCommandMap.class:git-Cauldron-MCPC-Plus-1.7.10-1.1307.06.218]
        at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchCommand(CraftServer.java:717) [CraftServer.class:git-Cauldron-MCPC-Plus-1.7.10-1.1307.06.218]
        at org.bukkit.craftbukkit.v1_7_R4.CraftServer.dispatchServerCommand(CraftServer.java:697) [CraftServer.class:git-Cauldron-MCPC-Plus-1.7.10-1.1307.06.218]
        at net.minecraft.server.dedicated.DedicatedServer.func_71333_ah(DedicatedServer.java:465) [lt.class:?]
        at net.minecraft.server.dedicated.DedicatedServer.func_71190_q(DedicatedServer.java:424) [lt.class:?]
        at net.minecraft.server.MinecraftServer.func_71217_p(MinecraftServer.java:798) [MinecraftServer.class:?]
        at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:658) [MinecraftServer.class:?]
        at java.lang.Thread.run(Thread.java:745) [?:1.8.0_40]
Все равно дублируется. Надо поставить ключ на UUID
Но какой поставить ключ?
 
Спасибо за помощь в столь ранний час)
Я убрал колонку ID, не думаю, что она нужна. Поставил уникальный ключ на колонку uuid и все работает)
 
А в чём отличия от оригинальной Fe-экономики?
Её авторы пытаются поддерживать её спустя рукава. Точнее, Nickolaspage — пропал, а Melonking колупает очень вяло. Лично у меня она 1. тормозила, 2. криво работала с uuid-ами (у меня они всё-таки тоже "пиратские").
Я просто немного допилил её, чтобы всё работало и, по возможности, не тормозило. Добавил миграцию между её бекендами (MySQL и SQLite), немного вывода отладочной информации, переписал работу с uuid-ами так, как я считаю она должна быть.

Fé-economy — очень простая экономика, без наворотов. Она служит для того, чтобы держать счёта игроков в БД, строение таблицы элементарное - имя, uuid, счёт (я добавил ещё колонку primary key `id`). Названия таблицы и всех колонок настраиваются. Её простота во многом и послужила её популярности, это идеальная замена столетней iConomy.
Я могу просто заменить официальный плагин на этот? Конфиги обновятся или надо старые удалить и заново их настроить?
Да, но из-за проблем обратной совместимости мне пришлось внутренне переименовать его в Fe2, соответственно папка с конфигом будет называться /plugins/Fe2/. Просто сделай копию старой папки Fe в новую Fe2. Конфиг будет обновлён автоматически, старый будет забекапен :)
Дополнительных библиотек не нужно устанавливать? Просто плагин занимает на 500 кб меньше оригинала
Ничего дополнительно не нужно.
После каждого действия с деньгами (продажа/покупка предметов в админшопи, перевод средств) мои данные в бд дублируются и счет остается неизменным
Точно, я забыл расставить уникальные ключи. Я расставил их руками у себя и забыл, что их нужно сделать всем автоматически.
Сейчас сделаю.
После каждого действия с деньгами (продажа/покупка предметов в админшопи, перевод средств) мои данные в бд дублируются и счет остается неизменным
Исправлено. https://ci.methuselah.ru/job/Fe-economy/lastSuccessfulBuild/artifact/target/
Рекомендую удалить дублирующиеся записи в БД и только потом обновить плагин.
http://justpaste.it/l95e Такое только с ChestShop. С пересылкой /fe pay ничего нет
Это не ошибки, это отладочная информация, показывающая путь, по которому были вызваны методы экономики со стороны VaultAPI. /fe pay работает внутренне, без вызовов, поэтому у него таких записей и нету. Это нормально.
Здесь еще такая проблема. В БД количество монет обновляется, но в игре счет всегда одинаков
Может быть связано с ключами, обнови. Ещё проверь настройку maximum-consistency: true, если хочешь, чтобы посторонние изменения в БД немедленно приводили к изменению на сервере. Но это внесёт немного лагов.
Все равно дублируется. Надо поставить ключ на UUID. Но какой поставить ключ?
Уникальный, конечно. Новая версия уже их ставит:
Код:
ALTER TABLE `fe_accounts`
ADD UNIQUE INDEX `uuid_UNIQUE` (`uuid` ASC);

ALTER TABLE `fe_accounts`
ADD UNIQUE INDEX `name_UNIQUE` (`name` ASC);
Только если есть дубликаты, может выпасть нафиг и не поставить :)
Я убрал колонку ID, не думаю, что она нужна. Поставил уникальный ключ на колонку uuid и все работает)
Он её при перезапуске сделает )) но она так, чисто на всякий случай, нигде не используется и не мешается :)
Спасибо за помощь в столь ранний час)
У меня уже почти обед :)

Удачи :)
 
Последнее редактирование:
@Reality_SC
Спасибо за пояснение. Если будет нужна лёгкая экономика - буду иметь в виду :)
 
Можешь сделать плагин на Баны с моментальной синхронизацией между серверами?
 
В целом конечно могу, зависит от времени и желания.
Можешь сделать плагин на Баны с моментальной синхронизацией между серверами?
Это ещё актуально?
Я неспеша начал rscBans, пока основная запись о бане планируется в таком формате.
Каких-то сроков не ставлю, как будет время поделаю его.
 
Последнее редактирование:
В целом конечно могу, зависит от времени и желания.
Это ещё актуально?
Я неспеша начал rscBans, пока основная запись о бане планируется в таком формате.
Каких-то сроков не ставлю, как будет время поделаю его.
Я уже нашел нужный мне плагин.
 
Все равно продолжайте писать плагин на бан. Вы делаете очень качественные плагины которые работают лучше любых других аналогов.
 
Последнее редактирование:
Игроки подсказали тут.. Я сначала не поверил, оказалось, правда..
2015-07-16 11-43-59 Minecraft 1.8.7.png
Делаем команду pay самому себе, счёт удваивается.
 
Стало ещё хуже.. Теперь, кроме удвоения, команда /eco set делает вообще страшные вещи)). Может, тут именно глюк со взаимодействием с Essentials Eco? Но спиготовская версия 0.8.3 работает отлично, только делает много лишних запросов в бд, а так бы не стал менять ни на что..

PS Eco set не устанавливает баланс, а прибавляет к существующему.
 
Сейчас уже убежать надо, приду через несколько часов и поковыряю ещё.
А зачем Essential Eco? Они же вроде как одно и тоже делают.
 
Сейчас уже убежать надо, приду через несколько часов и поковыряю ещё.
А зачем Essential Eco? Они же вроде как одно и тоже делают.
Не совсем.. Fe - как счёт в банке, только хранит данные, которые получает от Vault. А для всех процессов -переводов, заработка, покупок, нужна, собственно, экономика.
 

Поделиться этой страницей

Назад
Верх