Skip to content

(Тестовое russlan_1esse) Economic #12

Open

Description

@EnderDissa

Что нужно сделать

Реализовать прототип банковского терминала / банкомата, который позволяет переводить валюту между двумя формами:

  • наличные — физические стакабельные монеты в инвентаре;
  • безналичные деньги — число на счёте игрока.

Одна монета равна одной единице валюты.

Главная идея, которая должна идти через весь плагин - он должен быть реализован максимально ванильно. То есть, где это возможно, нужно избегать использования интерфейсов, команд и прочих действий в GUI.

Монеты

Нужно добавить специальный предмет — монету "Джой".

Монеты должны:

  • складываться в стаки по 64;
  • визуально отличаться от обычного предмета с помощью кастомной текстуры (на данном этапе можно взять из любого ресурспака, текстуру рисовать тебе не нужно);
  • однозначно распознаваться плагином;
  • не быть воспроизводимыми без пермишена (например, сильно отличаться от переименованных на наковальне).

Материал и оформление выбери самостоятельно.
Для тестирования добавь простую админскую команду, позволяющую выдать игроку некоторое количество монет.

Банкомат

Банкомат должен существовать прямо в мире, а не быть просто командой.

Базовая конструкция:
какие-то блоки, образующие небольшой банкомат + прикреплённая к ней табличка.
Например, игрок с необходимым пермом ставит бочку и создаёт на ней табличку с определённой служебной надписью. Если конструкция корректная, плагин превращает её в банковский терминал и оформляет табличку соответствующим образом.
Точное содержимое таблички и процесс создания можешь придумать сам.

Важно, чтобы после создания плагин действительно понимал, что эта конкретная бочка является банкоматом. Обычная структура с похожей табличкой не должна автоматически получать банковские возможности.
Банкомат должен продолжать работать после перезапуска сервера.

Взаимодействие

При нажатии на любой блок из коснтрукции банкомата вместо обычного интерфейса бочки должен открываться собственный GUI.

Через него игрок должен иметь возможность:

  • посмотреть свой текущий безналичный баланс;
  • внести имеющиеся у него физические монеты на счёт;
  • снять деньги со счёта обратно в виде физических монет.

Не требуется делать сложный ввод произвольных чисел. Например, можно сделать несколько кнопок:

  • 1;
  • 16;
  • 64;
  • снять всё доступное.

Интерфейс и расположение элементов выбери самостоятельно — главное, чтобы им было понятно пользоваться.

Важные ситуации

Продумай хотя бы базовые ошибки:

  • нельзя снять денег больше, чем есть на счёте;
  • нельзя внести поддельный предмет вместо настоящих монет;
  • деньги не должны исчезать, если при снятии в инвентаре игрока недостаточно места;
  • предметы самого GUI нельзя забрать себе;
  • действия через shift-click, drag и другие стандартные механики инвентаря не должны позволять дюпать деньги.

Счёт игрока

Баланс должен сохраняться между перезапусками сервера.
Конкретный способ хранения для тестового выбирай самостоятельно. Отдельную полноценную БД на данном этапе поднимать не требуется.
При этом постарайся сделать так, чтобы логика хранения не была напрямую размазана по обработчикам кликов, GUI и другим частям плагина: в дальнейшем способ хранения денег почти наверняка будет меняться.
Все изменения баланса также должны проходить через одно место в коде, а не через случайные balance += ... из разных listener'ов.

История операций

Это небольшая, но важная часть будущей экономики.
При внесении или снятии денег сохраняй запись об операции хотя бы со следующими данными:

  • тип операции (DEPOSIT / WITHDRAW);
  • сумма;
  • дата и время.

Пока не требуется делать отдельный красивый интерфейс истории или полноценную банковскую систему. Достаточно, чтобы эти данные сохранялись и их можно было получить из кода.
Спроектируй так, чтобы в дальнейшем через эту же систему с небольшими доработками могли пойти, например, переводы между игроками, покупки в магазинах, налоги и прочее.

Структура проекта

Очевидно, не нужно делать всё в одном файле.
Мы не задаём конкретную архитектуру и названия классов - это как раз часть задания. Раздели ответственность так, как считаешь разумным.
Можно и нужно смотреть документацию Paper, исходники других плагинов, пользоваться поиском и задавать вопросы.
Главное — понимать код, который в итоге отправляешь.

Минимум, который должен работать

К концу задания должно быть возможно:

  1. запустить плагин на сервере;
  2. выдать игроку настоящие монеты;
  3. построить и зарегистрировать банкомат из бочки и таблички;
  4. открыть его интерфейс;
  5. положить наличные на безналичный счёт;
  6. снять их обратно;
  7. перезапустить сервер и не потерять баланс;
  8. увидеть, что операции внесения и снятия сохранились;
  9. не получить деньги очевидными способами через обычные предметы или манипуляции с GUI.

Если по ходу реализации увидишь, что какой-то момент можно сделать удобнее или интереснее — смело предлагай свои варианты. В нашей разработке это скорее плюс

Подсказка по выполнения тестового:

  • Прочитай Readme этого репозитория обязательно до начала работы, сделай всё по инструкции
  • Коммить изменения в свою рабочую ветку
  • Отправь PR из своего форка сюда

После создания PR на GitHub автоматически запустится сборка проекта. Следи за её статусом прямо в PR: если сборка падает, открой её логи и поправь ошибки до ревью.

В описании PR коротко напиши:

  • что реализовано;
  • как устроено хранение баланса и банкоматов;
  • как распознаются настоящие монеты;
  • как ты проверял работу плагина;

Приложи короткую видео-демонстрацию основных моментов (по ссылке)

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions