Если цель — Npc (монстр, не игрок), добавляется расовый мультипликатор:
multiplier = 1 + ((attacker.getPAtkRace(target) - target.getPDefRace(target)) / 100.0);
damage *= multiplier;
🔵Для каждого типа (BEAST/ANIMAL/PLANT/DRAGON/BUG/GIANT/MAGICCREATURE) берутся атакующие и защитные бонусы по расе.
🔵Например, если у тебя +30% к драконам, а у них −10% к твоему типу → 1 + ((30 - 10)/100) = 1.20 → ×1.2.
6) Нормализация урона "ниже единицы"
Тут реализована механика того, что в любом случае при удачно атаке вы нанесете один урона, меньше просто невозможно.
if (damage > 0 && damage < 1) damage = 1;
else if (damage < 0) damage = 0;
7) PvP-бонусы
Если PvP:
🔵авто-атака → множитель PVP_PHYSICAL_DMG
🔵физ-скилл → множитель PVP_PHYS_SKILL_DMG
damage *= attacker.calcStat(Stats.PVP_PHYSICAL_DMG or PVP_PHYS_SKILL_DMG, 1, null, null);
Тоже мультипликативно к текущему.
8) Элементаль - аддитивно считается в самом конце
damage += calcElemental(attacker, target, null);
Это прибавка, а не множитель. Поэтому высокий defence/низкая база слегка "обесценивает" элементаль на критах скажите вы?
Нет: аддитивная "полка" добавляется после всех множителей, т.е. чувствуется всегда одинаково (в абсолютных очках).
С базой вроде все, в следующем посте разберем пример с числами.