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

Помогите Реген хп в течении времени

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

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

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

    Баллы:
    76
    Всем привет. У меня есть плагин на мини-больницу.
    Суть такая: Игрок умирает, возрождается в больнице с 1 хп, и его хилит по +1 хп в 2 секунды.
    Есть проблема, может я чего-то не понимаю... Никак не могу с ней справится.
    Игрок возрождается, его хилит как надо, но примерно на середине здоровья дает по +2 хп и в самом конце дохиливает +1 хп. Я не понимаю как так выходит.
    Вот метод регена хп...
    P.S за говнокод не судите строго =(

    PHP:
     public static void onRespawnRegenHealth(Player p
                new 
    BukkitRunnable() 
                {
                    @
    Override
                    
    public void run()
                    {
                        if(
    Respawn.playerInHospital.containsKey(p.getName())
                        {
                            if(
    p.getHealth() >= p.getAttribute(Attribute.GENERIC_MAX_HEALTH).getDefaultValue() && p.getHealthScale() >= p.getAttribute(Attribute.GENERIC_MAX_HEALTH).getDefaultValue())
                            {
                                
    p.teleport(new Location(p.getWorld(), main.getConfig().getDouble("settings.hospitalNear.X"), main.getConfig().getDouble("settings.hospitalNear.Y"), main.getConfig().getDouble("settings.hospitalNear.Z"), main.getConfig().getInt("settings.hospitalNear.YAW"), main.getConfig().getInt("settings.hospitalNear.PITCH")));
                                
    p.setFoodLevel(20);
                                
    p.sendTitle(Utils.getColor("&6Вы вылечились"), Utils.getColor("&aТеперь у Вас ничего не болит xD"), 204020);
                                
    Respawn.playerInHospital.remove(p.getName());
                                
    this.cancel();
                                return; 
                            }
                            else
                            {
                                
    p.setHealth(p.getHealth() + 1);
                                
    p.setHealthScale(p.getHealthScale() + 1);
                            }
                        }
                        else
                        {
                            
    this.cancel();
                            return;
                        }
                    }
                }.
    runTaskTimer(main020*main.getConfig().getLong("settings.count")); 
            }
     
  2. iD3LSY

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

    Баллы:
    76
    Ты сначала регенишь, а потом даешь еще половину сердца?
     
  3. alexandrage

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

    Баллы:
    173
    heal-delay и heal-amount из wg тебе помогут. Ничего костылять не придется.
     
  4. Автор темы
    reZero

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

    Баллы:
    76
    Я проверяю, если у игрока фулл хп, я его тпхаю из больницы, а если не фулл, тогда даю +1 хп, тобишь пол сердца

    ты имеешь ввиду API wg?
     
  5. alexandrage

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

    Баллы:
    173
    Да тупо флагами на регион. Будет хилять. И там телепортируй когда дохилит.
     
  6. Автор темы
    reZero

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

    Баллы:
    76
    playerinhospital - это хэш мап string, player
    Возможно, это мои не знания явы всплывают, но я не совсем понимаю, как ты собрался перебрать хэш мап
     
  7. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    entrySet()
    keySet()
    values()
    Спокойно перебирается
     
  8. alexandrage

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

    Баллы:
    173
    Ни разу не считаю. Так сложно отследить где находится игрок и сколько у него хп?
    Если есть готовая хилка в wg че и нет.
     
    Последнее редактирование: 21 авг 2018
  9. alexandrage

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

    Баллы:
    173
    Тебе не надоело? Больной наш.
     
  10. OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Да, давай, детка! Меняй здоровье игрока асинхронно, пусть Bukkit API сойдёт с ума.
    Для кого везде пишут это?
     
  11. Cool_boy

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

    Баллы:
    96
    Имя в Minecraft:
    prettydude
    Если это не потокобезопасно, то Bukkit выбросит ексепшн прямо в лицо.
     
  12. OsipXD

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

    Баллы:
    173
    Skype:
    osip.fatkullin
    Имя в Minecraft:
    OsipXD
    Телепортация игрока это именно тот случай
     
  13. FrostDelta123

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

    Баллы:
    76
    Имя в Minecraft:
    FrostDelta123
    Synchronized != thread save
     
  14. FrostDelta123

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

    Баллы:
    76
    Имя в Minecraft:
    FrostDelta123
  15. alexandrage

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

    Баллы:
    173
    Оно и выбросит на телепорте.
     

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