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

  • Автор темы Автор темы reZero
  • Дата начала Дата начала
Статус
Закрыто для дальнейших ответов.

reZero

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

Также, как я понимаю, необходимо хранить регионы, которые арендуются, т.к., видимо, не все регионы будут такими 😁 Далее уже просто в 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...
      }
    }
  }
}
 
Последнее редактирование:
В конфиге делаешь переменную lastTimeCheck: 0 (в эту переменную ложишь System.currentTimeMills(): - это будет время последней проверки)
Далее тупо делаешь BukkitRunnable который чекает раз в 1 день, смотришь, прошло ли 2 дня с последней проверки через lastTimeCheck, после если прошло, делаешь цикл из всех регионов на сервере. Дальше твои действия. Алгоритм снятия денег простой - твоя сумма / 3.
 
Подключи Vault, WorldGuard проекту и задай Scheduler, который будет снимать деньги. Вариантов для Scheduler'a много: он может просто запускаться через каждые два дня - проблема в том, что сервер может перезагружаться, он может брать определённое время, например, из конфига и проверять, сходится ли время системы с указанным и снимать деньги с игроков и т.д. 😁

Также, как я понимаю, необходимо хранить регионы, которые арендуются, т.к., видимо, не все регионы будут такими 😁 Далее уже просто в 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...
      }
    }
  }
}
Названия регионов будут прописаны в конфиге, а напротив названия будет сумма, которая будет списываться с игрока. Пример ниже.
PHP:
Regions:
  rgtest: 200
  rgtestn: 300
  rgtestnn: 400
Все что ты описал выше я прекрасно понимаю) У меня есть проблемка с тем, что я не совсем понимаю, как лучше чекать прошло ли 2 дня со времени последней оплаты игрока. По сути, я могу запускать при включении плагина ранебл, который время от времени будет сравнивать текущую дату с датой последней оплаты, но вот не будет ли это парашным вариантом? Прошу совета от опытных кодеров =)
 
По сути, я могу запускать при включении плагина ранебл, который время от времени будет сравнивать текущую дату с датой последней оплаты, но вот не будет ли это парашным вариантом? Прошу совета от опытных кодеров =)
Да, вполне хороший вариант - сохранять дату последней оплаты и смотреть разность между ней и текущей: нет большой нагрузки и интуитивно понятно)
 
Хочу сделать плагин, который раз в 2 реальных дня будет снимать с овнеров определенных регионов определенную сумму, но если овнеров несколько, сумма будет делиться на всех. Не понимаю, как это осуществить. Помогите пожалуйста
https://www.spigotmc.org/resources/residence-1-7-10-up-to-1-13-1.11480/
 
Статус
Закрыто для дальнейших ответов.
Назад
Верх