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

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

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

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

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

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

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

    Баллы:
    46
    Подключи 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
  4. Amafauz

    Amafauz Новичок

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

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

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

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

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

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

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

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