Ошибка обозначения красной полосы ХП монстра в браузере и в системе ловли на сервере, из-за чего, когда у монстра приблезительно 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: Ошибка ловли монстров
АП. Только что произошла аналогичная ситуация. На меня напал с максимальным здоровьем 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, к примеру.
Спасибо
Рассчитываем шанс поимки, опять же ссылаясь на Лигапедию, где 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: 2440 times
- Контактная информация:
Re: Ошибка ловли монстров
В формулах там всё верно происходит, а вот в визуальной части - не всегда, отсюда и возникают такие "траблы".
30% от 36 хп это 10.8, оно округляется в большую сторону (всё по математическим правилам) и окрашивает хп уже на 11 в красный цвет.
Так как до 30% ещё не дошло, соответственно и поймать монстра не получается, приходится кидать второй бол который уже и ловит (так как % уже даже меньше 30).
30% от 36 хп это 10.8, оно округляется в большую сторону (всё по математическим правилам) и окрашивает хп уже на 11 в красный цвет.
Так как до 30% ещё не дошло, соответственно и поймать монстра не получается, приходится кидать второй бол который уже и ловит (так как % уже даже меньше 30).
Спойлер: Игровая и Форумная деятельность ПОКАЗАТЬ
- Pocket Tiger
- Новичок
- Сообщения: 15
- Зарегистрирован: 28 авг 2012, 00:35
- Игровой ник: Pocket Tiger
- Has thanked: 3 times
- Been thanked: 3 times
Re: Ошибка ловли монстров
Сложно разбирать минифицированный код, но что-то примерно такое
Я был неправ, когда ранее писал про изменить округление в большую сторону, это тоже не есть правильно, могут получиться аналогичные ситуации. Стоит округлять до той же степени, которая используется на сервере при подсчете шанса.
Но можно даже поступить куда проще. Зачем вообще округлять? Могу ошибаться, но эта переменная уходит только в ширину дива, который отвечает за цвет полоски здоровья.
При данном раскладе (используя Floor) мы получим width: 30% - красный цвет. (HpPercents = Math.floor(100 * CurrentHp / MaxHp))
Если вообще не округлять - получим width: 30.5556% - желтый цвет. (HpPercents = 100 * CurrentHp / MaxHp)
Еще раз спасибо
P.S. Попробуйте со значениями здоровья в 10.8 и 11.
Спойлер: Код ПОКАЗАТЬ
Но можно даже поступить куда проще. Зачем вообще округлять? Могу ошибаться, но эта переменная уходит только в ширину дива, который отвечает за цвет полоски здоровья.
При данном раскладе (используя 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