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

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

Мне как-то не очень до него, но я постараюсь найти время в будние дни.
 
Мне как-то не очень до него, но я постараюсь найти время в будние дни.
Спасибо! При использовании SqLite такой проблемы не возникает.
Может послужит подсказкой:
при списании средств плагином,
вызывается setMoney(money - amount) внутри account.withdraw, где money=amount,
затем setMoney(money + amount) внутри account.deposit где обычно money=0 а amount=новая сумма,
но при ошибке money=балансу до списания.
 
Последнее редактирование:
В этой теме представлен мой форк широко известного плагина 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
перезалей пожалуйста, сайт недоступен
 
Я более не занимаюсь обновлением или допиливанием этого плагина.
Исходный код всё ещё по адресу https://github.com/RuBukkit/Fe-economy
Кто-нибудь, при желании, может запостить здесь скомпиленный .jar файл.
 
Последнее редактирование:
> [13:19:33 WARN]: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet successfully received from the server was 22,768 milliseconds ago. The last packet sent successfully to the server was 0 milliseconds ago.
> [13:19:33 WARN]: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate column name 'id'
> [13:19:33 WARN]: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate key name 'uuid_UNIQUE'
> [13:19:33 WARN]: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Duplicate key name 'name_UNIQUE'

В вчём проблема кто подскажет?
 

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

Назад
Верх