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

Cooldown

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

  1. Автор темы
    VaNnOrus

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

    Баллы:
    123
    Доброго времени суток.
    Собственно вопрос - Как правильно сделать кулдаун на ввод команды?
     
  2. BeYkeR

    BeYkeR Старожил Девелопер Пользователь

    Баллы:
    173
  3. Автор темы
    VaNnOrus

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

    Баллы:
    123
    Спасибо, работает :)
     
    NoNaMeHaCkEr2002 нравится это.
  4. AxmeD

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

    Баллы:
    103
    Че-то я не догоняю, как этим пользоваться?
     
  5. Автор темы
    VaNnOrus

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

    Баллы:
    123
    Там же есть пример:
    Код:
      PlayerCooldown pc = Cooldown.getCooldown("WandCooldown", player.getName(), 15000);
      if(pc.isOver())
          let player use magic wand
          pc.reset();
      else
      player.sendMessage("You have: " + pc.getTimeLeft() + "Seconds left" );
      }
    "WandCooldown" - имя кулдауна
    player.getName() - имя игрока, для которого он назначается
    15000 - 15 секунд
     
    AxmeD нравится это.
  6. AxmeD

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

    Баллы:
    103
    А как начать сам отсчет?
    Understand. Спасибо
    Если ввести просто
    Код:
    PlayerCooldown pc = Cooldown.getCooldown("WandCooldown", player.getName(), 15000);
      if(pc.isOver())
    То отсчёт даже не начнётся и сразу закончится.
     
  7. Автор темы
    VaNnOrus

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

    Баллы:
    123
    Там в примере просто не закомменчены строки с пояснениями. Вот рабочий вариант:
    Код:
    PlayerCooldown pc = Cooldown.getCooldown("WandCooldown", player.getName(), 15000);
    if(pc.isOver()){
      pc.reset();
    }else{player.sendMessage("You have: " + pc.getTimeLeft() + "Seconds left" );}
    Разумеется для работы нужно как минимум иметь класс "Cooldown", взятый по ссылке второго поста, и объект "player".
     
  8. AxmeD

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

    Баллы:
    103
    И то, и другое имеется. Вот мой код:
    Код:
    PlayerCooldown pc = Cooldown.getCooldown("ThiefSearch", player.getName(), 3000);
                                if(pc.isOver()){
                                      sender.sendMessage(ChatColor.YELLOW + "Вы скрылись от стражи");
                                      this.getConfig().set("Guards.wanted." + sender.getName(), 0);
                                      this.getConfig().set("Thiefs." + sender.getName() + ".target." + player.getName(), 0);
                                      this.saveConfig();
                                      pc.reset();
                                  }
     
  9. Автор темы
    VaNnOrus

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

    Баллы:
    123
    И в чем проблема?
     
  10. tiger'ok

    tiger'ok Старожил

    Баллы:
    123
    Не работает Cooldown вот код:
    Код:
    else if(cmd.getName().equalsIgnoreCase("stats")){
    Player player = null;
       try{
       player = (Player)sender;
       }catch (Exception e){
         sender.sendMessage(ChatColor.RED + "Only players can use this command!");
         return true;
       }
       PlayerCooldown pc = Cooldown.getCooldown("StatsCooldown", player.getName(), 15000);
       if(pc.isOver()){
    sender.sendMessage(ChatColor.DARK_PURPLE + "Статистика игрока " + player.getDisplayName());
       pc.reset();
       }else{
       sender.sendMessage("You have: " + pc.getTimeLeft() + "Seconds left" );
       }
    return true;
    }
     
    SuperugroK нравится это.
  11. Jampire

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

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    Я на скорую руку делал такой класс:
    Код:
    public class Cooldown {
        private String player;
        private long cooldown;
        private String key;
       
        public static HashMap<String, Cooldown> cooldowns = new HashMap<String, Cooldown>();
     
        public Cooldown(String player, long cooldown, String key) {
            this.player = player;
            this.cooldown = cooldown;
            this.key = key;
        }
     
        public String getPlayer() {
            return this.player;
        }
     
        public long getCooldown() {
            return this.cooldown;
        }
     
        public String getKey() {
            return this.key;
        }
     
        public static void setCooldown(String player, long cooldown, String title) {
            cooldowns.put(player + title, new Cooldown(player, System.currentTimeMillis() + cooldown, title));
        }
     
        public static boolean hasCooldown(String player, String title) {
            if (cooldowns.get(player + title) == null) {
                return false;
            }
            if (getCooldown(player, title) == 0) {
                return false;
            }
            if (cooldowns.get(player + title).getCooldown() > System.currentTimeMillis()) {
                return true;
            }
            return false;
        }
     
        public static long getCooldown(String player, String title) {
            return (cooldowns.get(player + title).getCooldown() - System.currentTimeMillis()) / 1000;
        }
    }
    
     
  12. Автор темы
    VaNnOrus

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

    Баллы:
    123
    Извиняйте, экстрасенсы в отпуске. Возможно у вас дело и не доходит до кулдауна, ставьте якоря по коду и проверяйте в каком месте ошибка.
     
  13. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Зачем всё так усложнять? Ведь можно использовать обычный Scheduler
     
  14. Jampire

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

    Баллы:
    173
    Skype:
    jampire-h
    Имя в Minecraft:
    Jampire
    На вкус и цвет)
     
  15. Автор темы
    VaNnOrus

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

    Баллы:
    123
    Пользователь ввел команду и получил то, что просил только через минуту? Бред.
    Вернее это совершенно разные функции, когда-то нужна задержка от действия до использования, а когда-то задержка между использованиями.
     
    Оригинало_о нравится это.
  16. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Процитированное мной сообщение бред. Пользоваться надо уметь.
     
  17. Автор темы
    VaNnOrus

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

    Баллы:
    123
    Чем пользоваться? Запуском через определенное время? Просветите меня, такого неумеющего, как можно сделать таймаут между действиями при помощи отложенного запуска.
     
  18. Den_Abr

    Den_Abr Старожил Девелопер Пользователь

    Баллы:
    173
    Skype:
    Den_Abr
    Имя в Minecraft:
    Den_Abr
    Объясни по-человечески
     
  19. Автор темы
    VaNnOrus

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

    Баллы:
    123
    Что тут объяснять? Вы понимаете разницу между "действием через определенное время после ввода"(то что делает Scheduler) и "недоступностью повторного использования определенное время"?
     
  20. Shevchik

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

    Баллы:
    173
    Имя в Minecraft:
    _Shevchik_
    Возможно он хранит хэшмап <Игрок, булеан> и когда игрок заюзает команду то переводит булеан в true, и шедулит таск который через какое-то время возвращает этот булеан в false. А при вводе команы проверяет.
    Но это как-то по рачински
     
    REZAYS нравится это.

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