All pastes #42739 Raw Edit

Anonymous

public text v1 · immutable
#42739 ·published 2006-02-22 05:24 UTC
rendered paste body
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;
    }