Всем привет.
Сборка Lucera 1.7.
При нанесении урон по мобам формула работает корректно и наносит правильный урон. Если бить по персонажу, то урон режится в несколько раз, я что то не могу понять что так сильно изменяет урон?
Урон наносил без резистов, без понижений чисто задействовал м атаку и м деф!
Как исправить что бы было верно 91*повер скила*sqrt(м.атк)/м.деф
public static final double calcMagicDam(L2Character attacker, L2Character target, L2Skill skill, boolean ss, boolean bss, boolean mcrit)
{
if (skill == null) {
return 1.0D;
}
double mAtk = attacker.getMAtk(target, skill);
double mDef = target.getMDef(attacker, skill);
boolean isPvP = ((attacker instanceof L2PlayableInstance)) && ((target instanceof L2PlayableInstance));
if (bss) {
mAtk *= 4.0D;
} else if (ss) {
mAtk *= 2.0D;
}
double power = skill.getPower(attacker);
if (skill.getSkillType() == L2SkillType.DEATHLINK) {
double part = attacker.getStatus().getCurrentHp() / attacker.getMaxHp();
power *= Math.pow(1.7165D - part, 2.0D) * 0.577D;
}
double damage = 91.0D * Math.sqrt(mAtk) / mDef * power * calcSkillVulnerability(target, skill);
if (((attacker instanceof L2Summon)) && ((target instanceof L2PcInstance))) {
damage *= 0.9D;
}
if ((Config.USE_LEVEL_PENALTY) && (skill != null) && (!skill.isItemSkill()) && (skill.getMagicLvl() > 40) && ((attacker instanceof L2PlayableInstance))) {
int lvl = attacker.getActingPlayer().getLevel();
int sklvl = skill.getLevel() > 100 ? 76 : skill.getMagicLvl();
if (lvl - sklvl < -2) {
damage *= 1 / (skill.getMagicLvl() - lvl);
}
}
if ((Config.ALT_GAME_MAGICFAILURES) && (!calcMagicSuccess(attacker, target, skill)))
{
if ((attacker instanceof L2PcInstance))
{
L2PcInstance attOwner = attacker.getActingPlayer();
if ((calcMagicSuccess(attacker, target, skill)) && (target.getLevel() - attacker.getLevel() <= 9)) {
SystemMessage sm = new SystemMessage(SystemMessageId.S1);
sm.addString(target.getName() + " успешно сопротивляется магии " + skill.getName());
attOwner.sendPacket(sm);
damage /= 2.0D;
} else {
SystemMessage sm = new SystemMessage(SystemMessageId.S1);
sm.addString(target.getName() + " успешно сопротивляется магии " + skill.getName());
attOwner.sendPacket(sm);
if (mcrit) {
damage = 1.0D;
} else {
damage = Rnd.nextBoolean() ? 1.0D : 0.0D;
}
return damage;
}
}
if ((target instanceof L2PcInstance)) {
SystemMessage sm = new SystemMessage(SystemMessageId.S1);
sm.addString(target.getName() + " успешно сопротивляется магии " + skill.getName());
target.getActingPlayer().sendPacket(sm);
}
}
if ((!Config.USE_CHAR_LEVEL_MOD) && ((attacker instanceof L2PlayableInstance)) && ((target instanceof L2PlayableInstance))) {
damage /= 2.0D;
}
if (mcrit) {
if (attacker.isL2Summon()) {
damage *= 2.0D;
} else {
damage *= Config.MCRIT_RATE;
}
}
damage += Rnd.nextDouble() * attacker.getRandomDamage(target);
if ((isPvP) && (
(!skill.isItemSkill()) || (!Config.ALT_ITEM_SKILLS_NOT_INFLUENCED))) {
if (skill.isMagic()) {
damage *= attacker.calcStat(Stats.PVP_MAGICAL_DMG, 1.0D, null, null);
damage /= target.calcStat(Stats.PVP_MAGICAL_DEF, 1.0D, null, null);
} else {
damage *= attacker.calcStat(Stats.PVP_PHYS_SKILL_DMG, 1.0D, null, null);
damage /= target.calcStat(Stats.PVP_PHYS_SKILL_DEF, 1.0D, null, null);
}
}
if ((attacker instanceof L2PcInstance)) {
if (((L2PcInstance)attacker).getClassId().isMage()) {
damage *= Config.ALT_MAGES_MAGICAL_DAMAGE_MULTI;
} else {
damage *= Config.ALT_FIGHTERS_MAGICAL_DAMAGE_MULTI;
}
}
else if ((attacker instanceof L2Summon)) {
damage *= Config.ALT_PETS_MAGICAL_DAMAGE_MULTI;
}
else if ((attacker instanceof L2NpcInstance)) {
damage *= Config.ALT_NPC_MAGICAL_DAMAGE_MULTI;
}
if (((attacker instanceof L2PcInstance)) && (attacker.getLevel() > 40) &&
(skill != null) && (attacker.getLevel() - skill.getMagicLvl() > 20)) {
damage /= 50.0D;
if (damage < 1.0D) {
damage = 1.0D;
}
}
return damage;
}