public final double calcPhysDam(L2Character attacker, L2Character target, L2Skill skill, boolean shld, boolean crit, boolean dual, boolean ss) { double damage = attacker.getPAtk(target); double defence = target.getPDef(attacker); if (ss) damage *= 2; if (skill != null) { damage += skill.getPower(); //damage += skill.getPower() * 0.7 * attacker.getPAtk(target)/defence; } // damage = damage * attacker.getSTR()*(1 - attacker.getLevel()/100)/60*1.15; if (target instanceof L2NpcInstance) { Integer resistPAtk = ((L2NpcInstance)target).getTemplate().getResist(Stats.POWER_DEFENCE); damage*=resistPAtk.doubleValue()/100; } // defence modifier depending of the attacker weapon L2Weapon weapon = attacker.getActiveWeaponItem(); if (weapon !=null) { switch (weapon.getItemType()) { case BOW: defence=target.calcStat(Stats.BOW_WPN_RES,defence,target,null); if (target instanceof L2NpcInstance) { Integer resistBow = ((L2NpcInstance)target).getTemplate().getResist(Stats.BOW_WPN_RES); damage*=resistBow.doubleValue()/100; } break; case BLUNT: defence=target.calcStat(Stats.BLUNT_WPN_RES,defence,target,null); if (target instanceof L2NpcInstance) { Integer resistBlunt = ((L2NpcInstance)target).getTemplate().getResist(Stats.BLUNT_WPN_RES); damage*=resistBlunt.doubleValue()/100; } break; case DAGGER: defence=target.calcStat(Stats.DAGGER_WPN_RES,defence,target,null); if (target instanceof L2NpcInstance) { Integer resistDagger = ((L2NpcInstance)target).getTemplate().getResist(Stats.DAGGER_WPN_RES); damage*=resistDagger.doubleValue()/100; } break; case DUAL: defence=target.calcStat(Stats.DUAL_WPN_RES,defence,target,null); break; case DUALFIST: defence=target.calcStat(Stats.DUALFIST_WPN_RES,defence,target,null); break; case ETC: defence=target.calcStat(Stats.ETC_WPN_RES,defence,target,null); break; case FIST: defence=target.calcStat(Stats.FIST_WPN_RES,defence,target,null); break; case POLE: defence=target.calcStat(Stats.POLE_WPN_RES,defence,target,null); break; case SWORD: defence=target.calcStat(Stats.SWORD_WPN_RES,defence,target,null); break; case BIGSWORD: //TODO: have a proper resitance for Big swords defence=target.calcStat(Stats.SWORD_WPN_RES,defence,target,null); break; } } if (crit) damage += attacker.getCriticalDmg(target, damage); if (shld && !Config.ALT_GAME_SHIELD_BLOCKS) { defence += target.getShldDef(); } //if (!(attacker instanceof L2RaidBossInstance) && if ((attacker instanceof L2NpcInstance || attacker instanceof L2SiegeGuardInstance)){ if (attacker instanceof L2RaidBossInstance) damage *= 10; // else // damage *= 2; // if (attacker instanceof L2NpcInstance || attacker instanceof L2SiegeGuardInstance){ //damage = damage * attacker.getSTR() * attacker.getAccuracy() * 0.05 / defence; // damage = damage * attacker.getSTR()* (attacker.getSTR() + attacker.getLevel()) * 0.025 / defence; // damage += _rnd.nextDouble() * damage / 10 ; } // else { //if (skill == null) damage = 70 * damage / defence; damage += _rnd.nextDouble() * damage / 10 ; // damage += _rnd.nextDouble()* attacker.getRandomDamage(target); // } if (shld && Config.ALT_GAME_SHIELD_BLOCKS) { damage -= target.getShldDef(); if (damage < 0) damage = 0; } // if (target instanceof L2PcInstance && weapon != null && weapon.getItemType() == L2WeaponType.DAGGER && skill != null) // { // L2Armor armor = ((L2PcInstance)target).getActiveChestArmorItem(); // if (armor != null) // { // if(((L2PcInstance)target).isWearingHeavyArmor()) // damage /=2.2; // if(((L2PcInstance)target).isWearingLightArmor()) // damage /=1.5; // } // } if (attacker instanceof L2NpcInstance) { int raceId = ((L2NpcInstance)attacker).getTemplate().race; //Skill Race : Undead if (raceId == 4290) damage /= attacker.getPDefUndead(target); } if (target instanceof L2NpcInstance) { int raceId = ((L2NpcInstance)target).getTemplate().race; //Skill Race : Undead if (raceId == 4290) damage *= attacker.getPAtkUndead(target); //Skill Race : Beast if (raceId == 4292) damage *= attacker.getPAtkMonsters(target); //Skill Race : Animal if (raceId == 4293) damage *= attacker.getPAtkAnimals(target); //Skill Race : Plant if (raceId == 4294) damage *= attacker.getPAtkPlants(target); //Skill Race : Dragon if (raceId == 4299) damage *= attacker.getPAtkDragons(target); //Skill Race : Bug if (raceId == 4301) damage *= attacker.getPAtkInsects(target); } if (damage > 0 && damage < 1) { damage = 1; } else if (damage < 0) { damage = 0; } return damage; }