All pastes #38154 Raw Edit

Unnamed

public java v1 · immutable
#38154 ·published 2006-01-23 09:43 UTC
rendered paste body
    public boolean calcSkillSuccess(L2Character player, L2Character target, L2Skill skill, boolean ss, boolean sps, boolean bss )    {        if(Config.ALT_GAME_SKILL_FORMULAS.equalsIgnoreCase("alt") ||        	Config.ALT_GAME_SKILL_FORMULAS.equalsIgnoreCase("true"))        	return calcAltSkillSuccess(player, target, skill);    	SkillType type = skill.getSkillType();    	boolean success = false;    	int rate = 1;    	int check = _rnd.nextInt(100);        double modifier = 1;        double ssmodifier = 1;        int value = 1;    	int maxLevel = SkillTable.getInstance().getMaxLevel(skill.getId(),skill.getLevel());    	double pAtk, pDef, mAtk, mDef;        if (bss)            ssmodifier *= 2;        else if (sps)            ssmodifier *= 1.5;                else if (ss)            ssmodifier *= 1.5;        	    	switch(type)		{    	case STUN:    		// For normal Stun Attack, with skillType = STUN		pAtk = player.getPAtk(target);		pDef = target.getPDef(player);		pDef = target.calcStat(Stats.STUN_RES,pDef,target,null);		value = 30 * 100 + (int)(70 * 100 * ((float)skill.getLevel()/maxLevel));		if (pDef > 0 && pAtk > 0)		    value *= 0.6 * pAtk/pDef;        	modifier    = 100 * target.getCON()/30;    		break;    	case CONFUSION:    	case MUTE:    	case PARALYZE:		mAtk = player.getMAtk(target, skill);		mDef = target.getMDef(player, skill);		value = 30 * 100 + (int)(70 * 100 * ((float)skill.getLevel()/maxLevel));		if (mDef > 0 && mAtk > 0)		    value *= 0.6 * mAtk/mDef;        	modifier    = 100 * target.getMEN()/15;		//_log.fine(player.getName()+" matk:"+mAtk+",mdef="+mDef+",value="+value+",modifier="+modifier+",maxlevel="+maxLevel+",level="+skill.getLevel());    		break;    	case SLEEP:		mAtk = player.getMAtk(target, skill);		mDef = target.getMDef(player, skill);		value = 30 * 100 + (int)(70 * 100 * ((float)skill.getLevel()/maxLevel));		mDef = target.calcStat(Stats.SLEEP_RES,mDef,target,null);		if (mDef > 0 && mAtk > 0)		    value *= 0.6 * mAtk/mDef;        	modifier    = 100 * target.getWIT()/15;		//_log.fine(player.getName()+" matk:"+mAtk+",mdef="+mDef+",value="+value+",modifier="+modifier+",maxlevel="+maxLevel+",level="+skill.getLevel());    		break;    	case ROOT:		mAtk = player.getMAtk(target, skill);		mDef = target.getMDef(player, skill);		value = 30 * 100 + (int)(70 * 100 * ((float)skill.getLevel()/maxLevel));		mDef = target.calcStat(Stats.ROOT_RES,mDef,target,null);		if (mDef > 0 && mAtk > 0)		    value *= 0.6 * mAtk/mDef;        	modifier    = 100 * target.getDEX()/30;    		break;    	default:    		// For normal Stun attack with skillType = PDAM        	pAtk = (int)skill.getPower();		pDef = target.getPDef(player);		pDef = target.calcStat(Stats.STUN_RES,pDef,target,null);//		value = 30 * 100 + (int)(70 * 100 * ((float)skill.getLevel()/maxLevel));		value = 100 * 100;		if (pDef > 0 && pAtk > 0)		    value *= 0.6 * pAtk/pDef;        	modifier    = 100 * target.getCON()/30;    		break;		}        if (modifier == 0)        {            _log.warning("Name: "+target.getName()+" has bad base stat value. Fix datapack or notify dp ppl");            modifier = 1;        }        rate = (int)(((player.getLevel() - target.getLevel()) + (int)(value / modifier)) * ssmodifier);                //_log.fine(player.getName()+" rate:"+rate);    	if (rate > 100) rate = 100;	else if (rate < 0)		rate = 0;	if (check > rate) success = false;	else success = true;    	return success;    }