Ошибка ловли монстров

Если вы обнаружили ошибку, пожалуйста, напишите отчет в этом форуме.
Ответить
jim fire
Начинающий
Начинающий
Сообщения: 56
Зарегистрирован: 24 апр 2015, 19:25
Игровой ник: Jim Fire
Пол: Мужской
Has thanked: 76 times
Been thanked: 78 times

Ошибка ловли монстров

Сообщение jim fire »

Ошибка обозначения красной полосы ХП монстра в браузере и в системе ловли на сервере, из-за чего, когда у монстра приблезительно 30% хп(уже красная полоса светится), монстробол не срабатывает так как на сервере даное хп определяется как желтое (30%++)
С етим имел дело уже не 1 раз.
Живой пример: Ловим Шелтера (до 3 раунда фулл хп)
3 Фундион ⇢ Блуждающие огни.
Шелтер загорелся.
Монстр терпит ранения от огня -3 HP

4Jim Fire: Реамунон, в бой!
Монстр терпит ранения от огня -3 HP

5Jim Fire: Фундион, в бой!
Монстр терпит ранения от огня -3 HP

6Jim Fire: Реамунон, в бой!
Монстр терпит ранения от огня -3 HP

7Jim Fire: Фундион, в бой!
Монстр терпит ранения от огня -3 HP

8Jim Fire: Реамунон, в бой!
Монстр терпит ранения от огня -3 HP
(здесь уже красная полоса ХП у Шелтера)

9Jim Fire ⇢ Гритбол
Монстр не пойман!
Монстр терпит ранения от огня -3 HP

10Jim Fire ⇢ Гритбол
Монстр пойман.
Осталось хп: 5 из 26
Монстр использовал атаки ультразвук, лобовая атака, Каменный панцирь
Просьба разобратся.

Аватара пользователя
Pocket Tiger
Новичок
Новичок
Сообщения: 15
Зарегистрирован: 28 авг 2012, 00:35
Игровой ник: Pocket Tiger
Has thanked: 3 times
Been thanked: 3 times

Re: Ошибка ловли монстров

Сообщение Pocket Tiger »

АП. Только что произошла аналогичная ситуация. На меня напал с максимальным здоровьем 36 и категорией силы 5. Монстр находился под статусом "Отравлен". Полоска здоровья была красной (что согласно Лигапедии означает 30% здровья).
Рассчитываем шанс поимки, опять же ссылаясь на Лигапедию, где power=5 - наша категория силы.
Chanse=((6*(power-1)^2)/2-20)/5-10=-4.4
Шанс меньше 1, поэтому - 100%.
Но на деле происходит иначе.
На скриншоте видно, что попытка поимки происходила, когда у монстра было 11 хп (на следующий ход яд отнял еще 5).
Спойлер: Скриншот ПОКАЗАТЬ
Изображение
Игрок реагирует на красный цвет линии здоровья, пытаясь поймать монстра, что произошло и со мной. В моём случае был потрачен гритбол, но ведь аналогичная ситуация могла произойти и при использовании более дорогих монстроболов.

Функция, которую вы используете, округляет дробное число до целого в меньшую сторону.
Т.е. имеем Math.floor(100*11/36)=30
А на деле 100*11/36=30.55(5)

Подозреваю, что проблема в расчете шанса поимки на сервере. Там или используется число без округления, либо для округления учитываются знаки после запятой.
Как решение, думаю, куда сделать изменения на фронте.
Почему бы не использовать Math.ceil(100*11/36)=31 (которая будет округлять в большую сторону) при таком исходе? Или пересмотреть границы, т.е. сравнивать не с 30 хп, а с 29, к примеру.

Спасибо

Аватара пользователя
Evangelion
Администратор форума
Администратор форума
Сообщения: 2242
Зарегистрирован: 08 сен 2010, 18:10
Клан: Академия Покемонологии
Игровой ник: Evangelion
Has thanked: 1608 times
Been thanked: 2433 times
Контактная информация:

Re: Ошибка ловли монстров

Сообщение Evangelion »

В формулах там всё верно происходит, а вот в визуальной части - не всегда, отсюда и возникают такие "траблы".
30% от 36 хп это 10.8, оно округляется в большую сторону (всё по математическим правилам) и окрашивает хп уже на 11 в красный цвет.
Так как до 30% ещё не дошло, соответственно и поймать монстра не получается, приходится кидать второй бол который уже и ловит (так как % уже даже меньше 30).
Изображение
Спойлер: Игровая и Форумная деятельность ПОКАЗАТЬ
Игровая деятельность:

03 май 2011г. - Наставник
15 авг 2011г. - Модератор
10 ноя 2011г. - Полицейский
02 янв 2013г. - Не играю
20 дек 2015г. - Наставник
25 июн 2019г. - Полицейский
Форумная деятельность:

10 апр 2011г. - Модератор рынка
22 апр 2011г. - Модер форума
12 июн 2011г. - Суп.модер форума
26 янв 2015г. - Администратор форума

"Если Вы ещё не сидите, это не значит что Вы не виновны, это мы плохо работаем!"

Аватара пользователя
Pocket Tiger
Новичок
Новичок
Сообщения: 15
Зарегистрирован: 28 авг 2012, 00:35
Игровой ник: Pocket Tiger
Has thanked: 3 times
Been thanked: 3 times

Re: Ошибка ловли монстров

Сообщение Pocket Tiger »

Сложно разбирать минифицированный код, но что-то примерно такое
Спойлер: Код ПОКАЗАТЬ

Код: Выделить всё

function set() {
    let MaxHp = 36, CurrentHp = 11; //получили с сервера
    let hpBar = document.getElementById('divFightH').querySelectorAll('.barHP');
    if (MaxHp) {
        HpPercents = Math.floor(100 * CurrentHp / MaxHp);
    }
    else {
        HpPercents = 0;
    }
    hpBar[0].removeClassName("min");
    hpBar[0].removeClassName("max");
    hpBar[0].removeClassName("mid");
    if (70 <= HpPercents) hpBar[0].addClassName("max");
    if ((30 < HpPercents)&&(HpPercents < 70)) hpBar[0].addClassName("mid");
    if (30 >= HpPercents) hpBar[0].addClassName("min");
    hpBar[0].firstElementChild.setStyle({
        width: HpPercents + "%"
    });
    console.log(HpPercents);
}
Я был неправ, когда ранее писал про изменить округление в большую сторону, это тоже не есть правильно, могут получиться аналогичные ситуации. Стоит округлять до той же степени, которая используется на сервере при подсчете шанса.
Но можно даже поступить куда проще. Зачем вообще округлять? Могу ошибаться, но эта переменная уходит только в ширину дива, который отвечает за цвет полоски здоровья.
При данном раскладе (используя Floor) мы получим width: 30% - красный цвет. (HpPercents = Math.floor(100 * CurrentHp / MaxHp))
Если вообще не округлять - получим width: 30.5556% - желтый цвет. (HpPercents = 100 * CurrentHp / MaxHp)

Еще раз спасибо

P.S. Попробуйте со значениями здоровья в 10.8 и 11.

Аватара пользователя
Pocket Tiger
Новичок
Новичок
Сообщения: 15
Зарегистрирован: 28 авг 2012, 00:35
Игровой ник: Pocket Tiger
Has thanked: 3 times
Been thanked: 3 times

Re: Ошибка ловли монстров

Сообщение Pocket Tiger »

АП
Спойлер: ПОКАЗАТЬ
Изображение

Артикуно
Узнаваемый
Узнаваемый
Сообщения: 272
Зарегистрирован: 07 янв 2015, 01:00
Клан: Тёмные странники
Игровой ник: Молтрес
Пол: Мужской
Has thanked: 248 times
Been thanked: 32 times

Re: Ошибка ловли монстров

Сообщение Артикуно »

Ну, апну темку на всякий случай. Авось поправят. Изображение

Ответить

Вернуться в «Ошибки и уязвимости»