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

Плагин [CHAT/INFO/MISC] Healthy v1.4 [1.7.9-R0.2] - Смотрим на хп игрока в чате

Тема в разделе "Неподтвержденные плагины", создана пользователем Dereku, 13 июл 2014.

  1. marick0073

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

    Баллы:
    88
    Skype:
    marick00731
    Имя в Minecraft:
    marick0073
    Смотрю на картинку и создаётся впечатление что в плагине используется скедулер(scheduler). Это ведь не так?
     
  2. Хостинг MineCraft
    <
  3. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Для таких раздумий существуют исходники, которые можно найти в джарнике плагина.
     
  4. marick0073

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

    Баллы:
    88
    Skype:
    marick00731
    Имя в Minecraft:
    marick0073
    Сижу через телефон. Через 8-9 часов гляну.
     
  5. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Я не настолько на голову двинутый, чтобы для элементарного действия писать шедулер.
    Собсна, тот самый метод:
    Код:
    private String healthGraphical(int health) {
            //Звиняйте, мой инглиш весьма плох.
            int пол_хп = health / 2;
            int отс_хп = 10 - пол_хп;
    
            String out = this.conf.getString("openingBracket")
                    .concat(this.conf.getString("colorExistingHP"));
    
            //Рисуем зелёные полоски
            for (int i = 0; i < пол_хп; i++) {
                out = out.concat(this.conf.getString("hpChar"));
            }
    
            //Добавляем цвет к отсутствующему хп
            out = out.concat(this.conf.getString("colorMissingHP"));
    
            //Рисуем красные полоски
            for (int i = 0; i < отс_хп; i++) {
                out = out.concat(this.conf.getString("hpChar"));
            }
    
            out = out.concat(this.conf.getString("closingBracket"));
    
            return ChatColor.translateAlternateColorCodes('&', out);
        }
     
  6. marick0073

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

    Баллы:
    88
    Skype:
    marick00731
    Имя в Minecraft:
    marick0073
    Не на всех серверах используется стандартное количество здоровья, на некоторых завышают, а на некоторых занижают.
    Код:
    private String healthGraphical(int health, int maxHealth) {
            
            int пол_хп = health / 2;
            int отс_хп = (maxHealth/2) - пол_хп;
    
    
     
  7. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Я и не просил тыкать меня пальцем туда, где я уже глазами пробежал.
     
  8. marick0073

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

    Баллы:
    88
    Skype:
    marick00731
    Имя в Minecraft:
    marick0073
    Выдаёт в консоли ошибку на инициализацию этой переменной - пустой инициализатор.
    out = out.concat("&a" + health);[DOUBLEPOST=1405329112,1405328403][/DOUBLEPOST]Убрал русское описание из конфига - всё отлично работает.
     
  9. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Такое гадство происходит при кодировке cp866 только .-.

    Алсо, временно поправил графический вывод.
     
  10. Meowt

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

    Баллы:
    123
    Бесполезная фича.
    имхо
     
  11. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    +1. Но, некоторым нравится.
     
  12. mamayadesu

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

    Баллы:
    103
    Skype:
    Mamayadesu
    Имя в Minecraft:
    Mamayadesu
    Я просто создал тему в "Помощь" с префиксом "Ищу плагин", а этот чувак начал разработку этого плагина :eek:
     
  13. St1nger13

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

    Баллы:
    68
    откуда такое число ХП было? Если 20 максимально, а хп больше 20, то можно же в методе private String healthGraphical(int health) обрезать, например:
    health = ( health > 20 ) ? 20 : health ;
    к тому же, если больше 20, то ловить это превышение куда-то в булеву переменную, и выводить уже не 20, а например 20+ с другим цветом, имхо[DOUBLEPOST=1405434725,1405434507][/DOUBLEPOST]А еще, мне кажется еще лучше, если хп больше 20, то можно пропорционально выводить, т.е. если у тебя максимально должно быть 10 значков, то пропорционально и выводить 10 значков
     
  14. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Ну такая задачка пока не по зубам мне. Да и к тому же, player.getMaxHealth() возвращает действительно максимальное кол-во хп, а не 20, что может помочь в пропорциональном выводе.
     
  15. St1nger13

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

    Баллы:
    68
    Итак, player.getMaxHealth() возвращает число макс. хп. Смотрим, если число больше 20, то считаем сколько хп должно подразумеваться под 10%. Для этого число делим на 10. Если было 120, то 10% - это 12.
    Далее смотрим сколько у плэера хп, допустим 37.
    Теперь смотрим сколько целых частей ( 12 ) влезет в 37, ((int)37/12) = 3, т.е. вывод будет 3 из 10, 3/10,
    далее смотрим, если остаток больше половины части, то увеличиваем вывод на единицу:
    остаток = 37 - ((int)37/12) = 1, остаток единица,
    половина части = 12/2 = 6,
    1 < 6, значит вывод будет 3/10 ХП, если бы было, например, 8 то, 8 > 6, следовательно вывод был бы не 3/10 а 4/10 ХП.
    Вот так примерно можно пропорционально выводить[DOUBLEPOST=1405436114,1405435872][/DOUBLEPOST]UPD: для численного вывода, можно ловить в булеву переменную
    Код:
    boolean overFlow = false ;
    
    if( player.getMaxHealth() > 20 ) overFlow = true ;
    Теперь если overFlow == true, выводим не 10 максимально, а 10+.

    П.С. если тебе надо не 10 макс. а 20, просто сделай умножение на коеф. масштабирования, в данном случае на 2[DOUBLEPOST=1405436245][/DOUBLEPOST]------------
    Надеюсь помог, алгоритм готов, только переведи в код
    :creeper:
     
  16. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Теперь я понял, что я делаю херовые алгоритмы, хоть и брожу около правильного решения.
     
  17. St1nger13

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

    Баллы:
    68
    Совет: лучше составь программу на русском языке, а потом переведи на java код, так и легче алгоритм подогнать будет и сразу видно будет где потенциально могут завестить жучки.
    Кстати, если у тебя и правда туго с алгоритмами, попробуй обязательно блок-схемы. Взял ручку, листок и накидал за пару минут.
    Удачи с плагином :creeper:
     
  18. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
  19. St1nger13

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

    Баллы:
    68
  20. Автор темы
    Dereku

    Dereku Старожил

    Баллы:
    173
    Skype:
    derek_unavailable
    Имя в Minecraft:
    _Dereku
    Там было недостаточно хп для '1'.
     
  21. Hephest

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

    Баллы:
    153
    Skype:
    hephest1904
    При наложении эффекта "сердец", они появляются пустыми, а потом регенятся до нужного уровня. А плагин просто посчитал уровень жизни в % соотношении
     

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