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