All pastes #24416 Raw Edit

Someone

public text v1 · immutable
#24416 ·published 2005-10-02 01:20 UTC
rendered paste body
public boolean calcSkillSuccess(L2Character player, L2Character target, L2Skill skill)
    {
        if(Config.ALT_GAME_SKILL_FORMULAS.equalsIgnoreCase("alt") ||
        	Config.ALT_GAME_SKILL_FORMULAS.equalsIgnoreCase("true"))
        	return calcAltSkillSuccess(player, target, skill);

    	SkillType type = skill.getSkillType();

        if(Config.ALT_GAME_SKILL_FORMULAS.equalsIgnoreCase("forth"))
        {
			String word = "calc-"+type+"-success";

			_log.fine("Try calculate '" + word + "'");

			JBForth jbf = new JBForth();

			if(jbf.core.word_exists(word))
			{
				if(player instanceof L2PcInstance) jbf.setPlayer((L2PcInstance)player);
				jbf.data.st.push(player);
				jbf.data.st.push(target);
				jbf.data.st.push(skill);
				jbf.execp("to skill  to target  to self " + word);

				Object res = jbf.data.st.pop();

				if(res != null)
	        		return (Integer)res != 0;
        	}
		}

    	boolean success = false;
    	int rate = 0;
    	int check = _rnd.nextInt(100);
    	int skillPower = (int)skill.getPower() * 2;
    	//int skillLevelMod = (skill.getLevel() + 3) * 60;
        int skillLevelMod = skillPower;
        int skillLevelModSilence = (skill.getLevel() + 12) * 80;
        int modifier    = 1;
        int value       = skillLevelMod;
        int valueSilence = skillLevelModSilence;
        int resModifier = 0;
        
        L2Effect[] effects = target.getAllEffects();
                for ( L2Effect eff : effects ) {
                                L2Skill sk = eff.getSkill();
                                
                                if (sk.getId() == 1035 && sk.getLevel() == 1)
                                {
                                    resModifier = 50;
                                }
                                else if (sk.getId() == 1035 && sk.getLevel() == 2)
                                {
                                    resModifier = 60;
                                }
                                else if (sk.getId() == 1035 && sk.getLevel() == 3)
                                {
                                    resModifier = 70;
                                }
                                else if (sk.getId() == 1035 && sk.getLevel() == 4)
                                {
                                    resModifier = 80;
                                }
      
                                }
                int matkmultiplier = 0;
                        
    	switch(type)
		{
    	case STUN:
    		// For normal Stun Attack, with skillType = STUN
            modifier    = target.getCON();
    		break;
    	case PARALYZE:
            modifier    = target.getWIT();
            break;
    	case SLEEP:
            modifier    = target.getWIT();
    		break;
    	case ROOT:
            modifier    = target.getDEX();
    		break;
    	default:
    		// For normal Stun attack with skillType = PDAM
            value       = skillPower;
            modifier    = target.getCON();
    		break;
		}

        if (modifier == 0)
        {
            _log.warning("Name: "+target.getName()+" has bad base stat value. Fix datapack or notify dp ppl");
            modifier = 1;
        }

        rate = ((player.getLevel() - target.getLevel()) + (value / modifier));

        if (type == SkillType.PARALYZE /*|| type == SkillType.SLEEP*/)
        {
            rate    = (int)(rate * 0.5);
        }
        if (type == SkillType.SLEEP)
                    {
                        if (target instanceof L2PcInstance)
                        {
                        rate    = (int)((((skill.getLevel()*10) + (player.getLevel() - target.getLevel()) + matkmultiplier)/(modifier+10)) - resModifier);
                        }
                        else
                            rate    = (int)(40 + skill.getLevel() + (player.getLevel() - target.getLevel()) + matkmultiplier);
                    }

    	if (rate > 100) rate = 100;
		else if (rate < 0)
			rate = 0;

		if (check > rate) success = false;
		else success = true;

    	return success;
    }