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

Платная аренда региона

Тема в разделе "Разработка плагинов для новичков", создана пользователем reZero, 11 янв 2019.

Статус темы:
Закрыта.
  1. Автор темы
    reZero

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

    Баллы:
    76
    Хочу сделать плагин, который раз в 2 реальных дня будет снимать с овнеров определенных регионов определенную сумму, но если овнеров несколько, сумма будет делиться на всех. Не понимаю, как это осуществить. Помогите пожалуйста
     
  2. NyanGuyMF

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

    Баллы:
    76
    Подключи Vault, WorldGuard проекту и задай Scheduler, который будет снимать деньги. Вариантов для Scheduler'a много: он может просто запускаться через каждые два дня - проблема в том, что сервер может перезагружаться, он может брать определённое время, например, из конфига и проверять, сходится ли время системы с указанным и снимать деньги с игроков и т.д. :D

    Также, как я понимаю, необходимо хранить регионы, которые арендуются, т.к., видимо, не все регионы будут такими :D Далее уже просто в Scheduler'е можно брать список владельцев/участников, делать проверки и снимать деньги.

    Важно сразу проверять время в Scheduler'e, чтобы не создавать дополнительную нагрузку, т.к. время тут самый важный фактор.

    Материал по планировщикам: клик, клик

    UPD: псевдокод, приближённый к Java:

    PHP:
    final static int MAX_DIFFERENCE 5;

    // тело планировщика

      // если разность текущего времени и времени проверки больше пяти минут - забить хер
      
    if (currentMinutes checkMinuter MAX_DIFFERENCE
            
    || currentMinutes checkMinuter 0)
        return;
      
    // получить список арендуемых регионов
      
    rgList getRentedRegions();

      
    //  Для каждого региона
      
    for (Region rg rgList) {
        
    // Получить список владельцев
        
    owners rg.getOwners();

        for (
    Player owner owners) {
          
    // Если не получилось снять деньги у игрока - удалить его из владельцев
          
    if (!vault.withdrawMoney(owner)) {
            
    rg.removeOwner(owner);
          } else {
            
    // code...
          
    }
        }
      }
    }
     
    Последнее редактирование: 11 янв 2019
  3. Amafauz

    Amafauz Новичок

    Баллы:
    6
    В конфиге делаешь переменную lastTimeCheck: 0 (в эту переменную ложишь System.currentTimeMills(): - это будет время последней проверки)
    Далее тупо делаешь BukkitRunnable который чекает раз в 1 день, смотришь, прошло ли 2 дня с последней проверки через lastTimeCheck, после если прошло, делаешь цикл из всех регионов на сервере. Дальше твои действия. Алгоритм снятия денег простой - твоя сумма / 3.
     
  4. Автор темы
    reZero

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

    Баллы:
    76
    Названия регионов будут прописаны в конфиге, а напротив названия будет сумма, которая будет списываться с игрока. Пример ниже.
    PHP:
    Regions:
      
    rgtest200
      rgtestn
    300
      rgtestnn
    400
    Все что ты описал выше я прекрасно понимаю) У меня есть проблемка с тем, что я не совсем понимаю, как лучше чекать прошло ли 2 дня со времени последней оплаты игрока. По сути, я могу запускать при включении плагина ранебл, который время от времени будет сравнивать текущую дату с датой последней оплаты, но вот не будет ли это парашным вариантом? Прошу совета от опытных кодеров =)
     
  5. NyanGuyMF

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

    Баллы:
    76
    Да, вполне хороший вариант - сохранять дату последней оплаты и смотреть разность между ней и текущей: нет большой нагрузки и интуитивно понятно)
     
  6. alexandrage

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

    Баллы:
    173
    https://www.spigotmc.org/resources/residence-1-7-10-up-to-1-13-1.11480/
     
Статус темы:
Закрыта.

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