Хостинг серверов Minecraft playvds.com
  1. Вы находитесь в русском сообществе Bukkit. Мы - администраторы серверов Minecraft, разрабатываем собственные плагины и переводим на русский язык плагины наших собратьев из других стран.
    Dismiss Notice

Помогите Scheduler отрубается для всех

Discussion in 'Разработка плагинов для новичков' started by AxmeD, Feb 12, 2016.

Thread Status:
Not open for further replies.
  1. Автор темы
    AxmeD

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

    Trophy Points:
    103
    Skype:
    ahmed136323
    Когда игрок атакует моба, его полоска экспы опускается до нуля, а потом со временем набирается полностью. Всё отлично работает, когда игрок на сервере один, но если, допустим, я ударю моба, а потом через 1 секунду другой игрок ударит моба, то когда моя полоска наберётся, то его остановится на месте, где она была, так никогда и не дойдя до конца. Что делать? Вот код scheduler'a:

    Code:
    int countdown;
    public void setCooldown(final Player p, final double t)
       {
         p.setExp((float)0.0);
         countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable() 
         {
           @Override
           public void run()
           {
             if(p.getExp() < (float)0.99)
             {
               p.setExp((float) (p.getExp() + (1F /(t * 20))));
             }
             else
             {
               p.setExp((float)0.99);
               Bukkit.getScheduler().cancelTask(countdown);
             }
           }
       
         }, 1, 1);
       }
     
  2. Хостинг MineCraft
    <
  3. Sonicxd2

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

    Trophy Points:
    76
    countdown вне функции, А тоесть можно попробывать так
    Code:
    [LIST=1]
    [*]public void setCooldown(final Player p, final double t)
    [*]   {
    [*]   final int countdown;
    [*]     p.setExp((float)0.0);
    [*]     countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask(this, new Runnable()
    [*]     {
    [*]       @Override
    [*]       public void run()
    [*]       {
    [*]         if(p.getExp() < (float)0.99)
    [*]         {
    [*]           p.setExp((float) (p.getExp() + (1F /(t * 20))));
    [*]         }
    [*]         else
    [*]         {
    [*]           p.setExp((float)0.99);
    [*]           Bukkit.getScheduler().cancelTask(countdown);
    [*]         }
    [*]       }
    [*]   
    [*]     }, 1, 1);
    [*]   }
    [*][\CODE]
    [/LIST]
     
  4. Автор темы
    AxmeD

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

    Trophy Points:
    103
    Skype:
    ahmed136323
    Не получится, нужно инициализировать countdown, а если это сделать, то:
    The local variable countdown may not have been initialized
     
  5. Sonicxd2

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

    Trophy Points:
    76
    final int countdown=0;
     
  6. Автор темы
    AxmeD

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

    Trophy Points:
    103
    Skype:
    ahmed136323
    countdown который перед scheduler'ом просит убрать final, а который внутри, просит поставить.
    Если поставить final int coundown = Bukkit.getScheduler().ляляля
    то опять же The local variable countdown may not have been initialized
     
  7. Sonicxd2

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

    Trophy Points:
    76
    final int countdown = Bukkit.getScheduler().scheduleSyncRepeatingTask...
     
  8. Автор темы
    AxmeD

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

    Trophy Points:
    103
    Skype:
    ahmed136323
    [​IMG]
     
    Last edited: Feb 12, 2016
  9. Sonicxd2

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

    Trophy Points:
    76
    А у меня работает...
     
  10. Автор темы
    AxmeD

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

    Trophy Points:
    103
    Skype:
    ahmed136323
    Странно.
    Если я смогу впихнуть переменную в сам ивент, то, по идее, должно исправиться, да?
    Кинь как у тебя выглядит этот код, может я где-то не так сделал или ты что-то добавил.[DOUBLEPOST=1455348291,1455298490][/DOUBLEPOST]Помощь, плиз[DOUBLEPOST=1455350066][/DOUBLEPOST]Нашёл решение, может кому нужно будет:
    Code:
    public void setCooldown(final Player p, final double t)
       {
         p.setExp((float)0.0);
         new BukkitRunnable()
         {
           @Override
           public void run()
           {
             if(p.getExp() < (float)0.99)
             {
               p.setExp((float) (p.getExp() + (1F /(t * 20))));
             }
             else
             {
               p.setExp((float)0.99);
               this.cancel();
             }
           }
       
         }.runTaskTimer(this, 1, 1);
       }
    
    Закрыл :3
     
Thread Status:
Not open for further replies.

Share This Page