Столкнулся с проблемой в маг.защите.
Формула маг.защиты выглядит так
шанс отразить = (маг.защита - точность магии) / 10.
Как видно все форумулы написаны правильно...
При м.точности в 853,а при м.дефе 2091 шанс отразить стоствляет 123.8%, но всё-равно попадают как ни в чём не бывало.
Помогите или подскажите где можно подсмотреть,что не правильно..
Сборка AL 2.7.
Добавлено через 5 часов 30 минут
Нашёл ещё в одном файле расчёт
И теперь думаю,что нужно делить не на 10,а на 100 из-за вот этой строчки - Rnd.get(0, 1000)
Добавлено через 6 часов 53 минуты
Не помогло...
Формула маг.защиты выглядит так
шанс отразить = (маг.защита - точность магии) / 10.
/**
* Calculates RESIST chance
*
* @param attacker
* @param attacked
* @return int
*/
public static int calculateMagicalResistRate(Creature attacker, Creature attacked, int accMod) {
if (attacked.getObserveController().checkAttackStatus(AttackStatus.RESIST))
return 1000;
int stat_res = attacked.getGameStats().getMResist().getCurrent();
int stat_acc = attacker.getGameStats().getMAccuracy().getCurrent();
int attackerLevel = attacker.getLevel();
int targetLevel = attacked.getLevel();
//add bonus from effecttemplate
stat_acc += accMod;
int resistRate = (stat_res - stat_acc) - accMod / 10;
if ((targetLevel - attackerLevel) > 2)
resistRate += (targetLevel - attackerLevel - 2) * 10;
if(resistRate <= 0)// cant resist
return 0;
else if(resistRate > 90)// hardcap 95%
return 90;
else
return resistRate;
}
Как видно все форумулы написаны правильно...
При м.точности в 853,а при м.дефе 2091 шанс отразить стоствляет 123.8%, но всё-равно попадают как ни в чём не бывало.
Помогите или подскажите где можно подсмотреть,что не правильно..
Сборка AL 2.7.
Добавлено через 5 часов 30 минут
Нашёл ещё в одном файле расчёт
/**
* Every + 100 delta of (MR - MA) = + 10% to resist<br>
* if the difference is 1000 = 100% resist
*/
public static AttackStatus calculateMagicalStatus(Creature attacker, Creature attacked, boolean isSkill) {
if (!isSkill) {
if (Rnd.get(0, 1000) < StatFunctions.calculateMagicalResistRate(attacker, attacked, 0))
return AttackStatus.RESIST;
}
if (StatFunctions.calculateMagicalCriticalRate(attacker, attacked)) {
return AttackStatus.CRITICAL;
}
return AttackStatus.NORMALHIT;
}
И теперь думаю,что нужно делить не на 10,а на 100 из-за вот этой строчки - Rnd.get(0, 1000)
Добавлено через 6 часов 53 минуты
Не помогло...