rendered paste bodypublic 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;
}