1. Этот сайт использует файлы cookie. Продолжая пользоваться данным сайтом, Вы соглашаетесь на использование нами Ваших файлов cookie. Узнать больше.
  2. Вы находитесь в сообществе Rubukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на различные языки плагины наших коллег из других стран.
    Скрыть объявление
Скрыть объявление
В преддверии глобального обновления, мы проводим исследования, которые помогут нам сделать опыт пользования форумом ещё удобнее. Помогите нам, примите участие!

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

Тема в разделе "Неподтвержденные плагины", создана пользователем Reality_SC, 20 май 2015.

  1. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

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

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


    Конфигурация плагина.
    По сравнению с оригинальной версией, на которой основан мой форк, файл config.yml претерпел значительные изменения. Однако, плагин полноценно проводит конвертацию в новый формат и сохраняет бекап старого конфига.
    Стоит отметить, что плагин имеет внутреннее название Fe2 (вместо Fe) и создаёт соответствующую папку для конфига. Чтобы использовать старый конфиг, перед запуском просто сделайте копию папки и config.yml.
    Код:
    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):
    [​IMG]
    Мой форк (Fe2):
    [​IMG]
     
    Последнее редактирование: 16 июл 2015
  2. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    А в чём отличия от оригинальной Fe-экономики?
    Я с ней совсем не знаком. Вообще, из последних "экономик", что я видел мне больше всего приглянулась CraftConomy.
     
  3. chief

    chief Активный участник Пользователь

    Баллы:
    76
    Я могу просто заменить официальный плагин на этот? Конфиги обновятся или надо старые удалить и заново их настроить?
    Дополнительных библиотек не нужно устанавливать? Просто плагин занимает на 500 кб меньше оригинала
     
  4. chief

    chief Активный участник Пользователь

    Баллы:
    76
    После каждого действия с деньгами (продажа/покупка предметов в админшопи, перевод средств) мои данные в бд дублируются и счет остается неизменным
     

    Вложения:

    • Untitled.png
      Untitled.png
      Размер файла:
      4 КБ
      Просмотров:
      87
  5. chief

    chief Активный участник Пользователь

    Баллы:
    76
    Последнее редактирование: 21 май 2015
  6. chief

    chief Активный участник Пользователь

    Баллы:
    76
    Надеялся, что вы не успеете прочитать)
    Данные дублировались и плагин читал самую высокую строчку в таблице при вводе /fe (/money)
    При вводе /fe relaod
    Код:
    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
    Но какой поставить ключ?
     
  7. chief

    chief Активный участник Пользователь

    Баллы:
    76
    Спасибо за помощь в столь ранний час)
    Я убрал колонку ID, не думаю, что она нужна. Поставил уникальный ключ на колонку uuid и все работает)
     
  8. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Её авторы пытаются поддерживать её спустя рукава. Точнее, Nickolaspageпропал, а Melonking колупает очень вяло. Лично у меня она 1. тормозила, 2. криво работала с uuid-ами (у меня они всё-таки тоже "пиратские").
    Я просто немного допилил её, чтобы всё работало и, по возможности, не тормозило. Добавил миграцию между её бекендами (MySQL и SQLite), немного вывода отладочной информации, переписал работу с uuid-ами так, как я считаю она должна быть.

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

    Удачи :)
     
    Последнее редактирование: 22 май 2015
  9. fromgate

    fromgate Старожил Пользователь

    Баллы:
    173
    Имя в Minecraft:
    fromgate
    @Reality_SC
    Спасибо за пояснение. Если будет нужна лёгкая экономика - буду иметь в виду :)
     
  10. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    Можешь сделать плагин на Баны с моментальной синхронизацией между серверами?
     
  11. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    В целом конечно могу, зависит от времени и желания.
    Это ещё актуально?
    Я неспеша начал rscBans, пока основная запись о бане планируется в таком формате.
    Каких-то сроков не ставлю, как будет время поделаю его.
     
    Последнее редактирование: 26 авг 2016
  12. slavik123123123

    slavik123123123 Старожил Пользователь

    Баллы:
    143
    Имя в Minecraft:
    Leymooo
    Я уже нашел нужный мне плагин.
     
  13. chief

    chief Активный участник Пользователь

    Баллы:
    76
    Все равно продолжайте писать плагин на бан. Вы делаете очень качественные плагины которые работают лучше любых других аналогов.
     
    Последнее редактирование: 29 июн 2015
  14. MySt1k

    MySt1k Старожил Пользователь

    Баллы:
    173
  15. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Открыта тема: rscBans
     
    Последнее редактирование: 26 авг 2016
  16. komiss

    komiss Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    komiss77
    Игроки подсказали тут.. Я сначала не поверил, оказалось, правда..
    2015-07-16 11-43-59 Minecraft 1.8.7.png
    Делаем команду pay самому себе, счёт удваивается.
     
  17. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
  18. komiss

    komiss Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    komiss77
    Стало ещё хуже.. Теперь, кроме удвоения, команда /eco set делает вообще страшные вещи)). Может, тут именно глюк со взаимодействием с Essentials Eco? Но спиготовская версия 0.8.3 работает отлично, только делает много лишних запросов в бд, а так бы не стал менять ни на что..

    PS Eco set не устанавливает баланс, а прибавляет к существующему.
     
  19. Автор темы
    Reality_SC

    Reality_SC Старожил Пользователь

    Баллы:
    123
    Имя в Minecraft:
    Reality_SC
    Сейчас уже убежать надо, приду через несколько часов и поковыряю ещё.
    А зачем Essential Eco? Они же вроде как одно и тоже делают.
     
  20. komiss

    komiss Старожил Пользователь

    Баллы:
    103
    Имя в Minecraft:
    komiss77
    Не совсем.. Fe - как счёт в банке, только хранит данные, которые получает от Vault. А для всех процессов -переводов, заработка, покупок, нужна, собственно, экономика.
     

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