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); // defence modifier depending of the attacker weapon L2Weapon weapon = attacker.getActiveWeaponItem(); if (weapon !=null) { switch (weapon.getItemType()) { case BOW: defence*=1+0.01*target.calcStat(Stats.BOW_WPN_RES,0,target,null); break; case BLUNT: defence*=1+0.01*target.calcStat(Stats.BLUNT_WPN_RES,0,target,null); break; case DAGGER: defence*=1+0.01*target.calcStat(Stats.DAGGER_WPN_RES,0,target,null); break; case DUAL: defence*=1+0.01*target.calcStat(Stats.DUAL_WPN_RES,0,target,null); break; case DUALFIST: defence*=1+0.01*target.calcStat(Stats.DUALFIST_WPN_RES,0,target,null); break; case ETC: defence*=1+0.01*target.calcStat(Stats.ETC_WPN_RES,0,target,null); break; case FIST: defence*=1+0.01*target.calcStat(Stats.FIST_WPN_RES,0,target,null); break; case POLE: defence*=1+0.01*target.calcStat(Stats.POLE_WPN_RES,0,target,null); break; case SWORD: defence*=1+0.01*target.calcStat(Stats.SWORD_WPN_RES,0,target,null); break; case BIGSWORD: //TODO: have a proper resitance for Big swords defence*=1+0.01*target.calcStat(Stats.SWORD_WPN_RES,0,target,null); break; } } if (skill != null) { damage = skill.getPower(); if (ss) {damage *= 1.44;} } else { if (ss) {damage *= 2;} if (crit) damage = attacker.getCriticalDmg(target, 2*damage); if(dual) damage /= 1.5; if (shld && !Config.ALT_GAME_SHIELD_BLOCKS) { defence += target.getShldDef(); } 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 (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 { damage = damage * 70 / defence; damage += _rnd.nextDouble()* attacker.getRandomDamage(target); } if (shld && Config.ALT_GAME_SHIELD_BLOCKS) { damage -= target.getShldDef(); if (damage < 0) damage = 0; } if (damage > 0 && damage < 1) { damage = 1; } else if (damage < 0) { damage = 0; } return damage; }