Перейти к содержанию
Авторизация  
Chet

Магический урон

Рекомендуемые сообщения

Всем привет.

Сборка 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;
  }
Изменено пользователем Chet

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

Всем привет.

Сборка 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;
  }
    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;
    }

в skill кфг посмотрите значение какое стоит, должно быть 1.

 

damage *= Config.ALT_MAGES_MAGICAL_DAMAGE_MULTI; //Маг урон

damage *= Config.ALT_FIGHTERS_MAGICAL_DAMAGE_MULTI; //Воин урон

 

Изменено пользователем gvb

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

 

    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;
    }
в skill кфг посмотрите значение какое стоит, должно быть 1.

 

damage *= Config.ALT_MAGES_MAGICAL_DAMAGE_MULTI; //Маг урон

damage *= Config.ALT_FIGHTERS_MAGICAL_DAMAGE_MULTI; //Воин урон

Все конфиги стоят на 1.0

В том то и проблема(

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

У мобов и персонажей нет пассивных резистов? 

Тут надо учитывать множество факторов...

Учитывай еще то, что на любой дпс есть разброс

 

 

Всем привет.

Сборка Lucera 1.7.

При нанесении урон по мобам формула работает корректно и наносит правильный урон. Если бить по персонажу, то урон режится в несколько раз, я что то не могу понять что так сильно изменяет урон?

Урон наносил без резистов, без понижений чисто задействовал м атаку и м деф!

Как исправить что бы было верно 91*повер скила*sqrt(м.атк)/м.деф

 

А PvP резист\атаки нету (метод isPvP)?

  • Upvote 1

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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);

}

}

 

 

 

Я думаю что связано с выше указанным кодом.Не могу понять откудава берется (Stats.PVP_MAGICAL_DMG, 1.0D, null, null)

искал по всему ядру по ключнвым словам и ничего походего....

У персонажа нету резиста , только м деф.

Разброс тоже минимальный, я бил не 1 раз.

Изменено пользователем Chet

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

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);

}

}

 

 

 

Я думаю что связано с выше указанным кодом.Не могу понять откудава берется (Stats.PVP_MAGICAL_DMG, 1.0D, null, null)

искал по всему ядру по ключнвым словам и ничего походего....

У персонажа нету резиста , только м деф.

Разброс тоже минимальный, я бил не 1 раз.

Это стата. Она уже изначально есть у чаров и она меняется от эффектов, красок и т.п.

И это нормально, что по персонажам дпс меньше, т.к. у них есть как ПвП защита, так и атака, которую так же как и другие статы можно улучать путем наложения эффектов, одевания шмота\оружия и т.п.

Изменено пользователем zGosu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Это стата. Она уже изначально есть у чаров и она меняется от эффектов, красок и т.п.

И это нормально, что по персонажам дпс меньше, т.к. у них есть как ПвП защита, так и атака, которую так же как и другие статы можно улучать путем наложения эффектов, одевания шмота\оружия и т.п.

ПВП защита это ответ. Согласен.

 Но когда у персонажа 900 м дефа, а ему маг бьет по 370-400 урона... Как то странно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

ПВП защита это ответ. Согласен.

 Но когда у персонажа 900 м дефа, а ему маг бьет по 370-400 урона... Как то странно.

Так это нормальный урон. Если поставить множитель  в конфиках 2,0 то урон будет больше.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

проверить, не срабатывавет ли эта порнография в расчетах

    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.USE_CHAR_LEVEL_MOD) && ((attacker instanceof L2PlayableInstance)) && ((target instanceof L2PlayableInstance))) {
      damage /= 2.0D;
а вобще конечно через задницу все расчеты описаны. Изменено пользователем Gaikotsu

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Так это нормальный урон. Если поставить множитель  в конфиках 2,0 то урон будет больше.

делал, но по мобам урон тоже удваивается.

Все ТОП локации становятся легкие для фарма магов

Изменено пользователем Chet

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

проверить, не срабатывавет ли эта порнография в расчетах

    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.USE_CHAR_LEVEL_MOD) && ((attacker instanceof L2PlayableInstance)) && ((target instanceof L2PlayableInstance))) {
      damage /= 2.0D;
а вобще конечно через задницу все расчеты описаны.

 

Гляну.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

делал, но по мобам урон тоже удваивается.

Все ТОП локации становятся легкие для фарма магов

Значить мобам добавь Мдеф...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Значить мобам добавь Мдеф...

Да, это выход и к ему я думал прийти если что то накосячено в ядре.

 

Провел эксперименты, все же это все с пвп бонусом связано

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 ((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);
}
}

Подскажите как правильно работает просчет ПВП режима и его бонусы. Куда лезть что копать?

Я пока без понятия..  Может более расскажут опытные люди в этом направлении...

Я тоже занимаюсь lucera 1,7. но сугубо по датпаку и квеcтам, и по мелочам в ядре...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти
Авторизация  

  • Последние посетители   0 пользователей онлайн

    Ни одного зарегистрированного пользователя не просматривает данную страницу

×
×
  • Создать...