fwo-online / fwo-tg

Old IRC game impl on Telegram and NodeJS
https://fw-online.ru
Apache License 2.0
2 stars 0 forks source link

Работа действия "Защита" #286

Open catHD opened 11 months ago

catHD commented 11 months ago

защита - когда я сделал защиту на 100% и меня не пробили - мне дали 1100 опыта. когда я делал защиту на 10% и меня не пробили - мне дали 190 опыта. оба раза меня атаковал один и тот же лучник на 100%. очень странно что количество опыта зависит от процентов заказа защищающегося, а не только от урона, который я мог бы получить. и еще очень странно что 10% моей защиты (ее кстати меньше 40единиц в доп статах) не пробивает лучник с атакой больше сотни, при этом два раза подряд 25% моей защиты пробил маг с очень маленькой атакой, причем бил он всего на 10% так как он еще при этом кастовал на меня шар Судя по рассказу в формуле гуляет какая то ошибка, надо проверить, т.к туда вносились изменения

eth73 commented 11 months ago

После определенного количества попыток использовать защиту складывается ощущение что независимо от значения атаки атакующего и значения защиты того кто ставит защиту - шанс пробить защиту всегда 50%. Пример 1: два игрока с одинаковым уровнем и значениями атаки/защиты - 4/40 бьют друг друга с силой 10% и на остальные 90% ставят защиту, по логике они не должны друг друга пробивать, так как 10% от 4 примерно в 90 раз меньше чем 90% от 40, но на практике в первом раунде оба пробили друг друга, во втором раунде пробил только первый, в третьем раунде пробил только второй. Пример 2: первый игрок с защитой 40 каждый раз ставит защиту на 5% и его через раз не пробивают лучники и войны с атакой больше сотни

kyvg commented 9 months ago

@catHD @eth73 Опыт зависит и от урона, и от количества защиты, которое игрок дал цели. Тут смысл такой, что если два игрока дали защиту одной и той же цели цели: один на 100%, а другой на 10% - то второй получит меньше опыта, что вроде бы даже логично Это по exp, по шансу посмотрим

const protect = Math.floor(flag.val * 100) / pdef;
const exp = Math.round(this.status.hit * 0.8 * protect);