rendered paste bodypublic boolean calcSkillSuccessOld(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();
if (target instanceof L2RaidBossInstance && type != SkillType.ROOT) return false;
boolean success = false;
int rate = 0;
int check = Rnd.get(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
pDef = 1;
pDef = target.calcStat(Stats.STUN_RES, pDef, target, null);
value = 4800 + (int) (50 * (player.getLevel() - target.getLevel()) + 5100 * ((float) skill.getLevel() / maxLevel));
if (pDef > 0) value /= pDef;
modifier = 10.0 * target.getCON() / 3;
if (modifier > 0) value /= modifier;
value *= ssmodifier;
value /= 100;
if (!(target instanceof L2RaidBossInstance))
{
//min success
if (value < 40) value = 40;
//max success
if (value > 99) value = 99;
}
rate = value;
break;
case MDOT:
case MANADAM:
case CONFUSION:
mAtk = player.getMAtk(target, skill);
mDef = target.getMDef(player, skill);
value = 3000 + (int) (7000 * ((float) skill.getLevel() / maxLevel));
if (mDef > 0 && mAtk > 0) value *= 0.6 * mAtk / mDef;
modifier = 20.0 * target.getMEN() / 3;
//_log.fine(player.getName()+" matk:"+mAtk+",mdef="+mDef+",value="+value+",modifier="+modifier+",maxlevel="+maxLevel+",level="+skill.getLevel());
break;
case MUTE:
mAtk = player.getMAtk(target, skill);
mDef = target.getMDef(player, skill);
value = 3000 + (int) (7000 * ((float) skill.getLevel() / maxLevel));
if (mDef > 0 && mAtk > 0) value *= 0.6 * mAtk / mDef;
modifier = 20.0 * target.getMEN() / 3;
//_log.fine(player.getName()+" matk:"+mAtk+",mdef="+mDef+",value="+value+",modifier="+modifier+",maxlevel="+maxLevel+",level="+skill.getLevel());
break;
case MDAM:
case PARALYZE:
mAtk = player.getMAtk(target, skill);
mDef = target.getMDef(player, skill);
value = 5000 + (int) (5000 * ((float) skill.getLevel() / maxLevel));
if (mDef > 0 && mAtk > 0) value *= 0.6 * mAtk / mDef;
modifier = 20.0 * target.getMEN() / 3;
if (modifier > 0) value /= modifier;
value *= ssmodifier;
value /= 100;
if (!(target instanceof L2RaidBossInstance))
{
//min success
if (value < 35) value = 35;
//max success
if (value > 90) value = 90;
rate = value;
}
//_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 = 5000 + (int) (5000 * ((float) skill.getLevel() / maxLevel));
mDef = target.calcStat(Stats.SLEEP_RES, mDef, target, null);
if (mDef > 0 && mAtk > 0) value *= 0.6 * mAtk / mDef;
modifier = 20.0 * target.getWIT() / 3;
if (modifier > 0) value /= modifier;
value *= ssmodifier;
value /= 100;
if (!(target instanceof L2RaidBossInstance))
{
//min success
if (value < 45) value = 45;
//max success
if (value > 90) value = 90;
}
rate = value;
//_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 = 5000 + (int) (5000 * ((float) skill.getLevel() / maxLevel));
mDef = target.calcStat(Stats.ROOT_RES, mDef, target, null);
if (mDef > 0 && mAtk > 0) value *= 0.6 * mAtk / mDef;
modifier = 10.0 * target.getDEX() / 3;
if (modifier > 0) value /= modifier;
value *= ssmodifier;
value /= 100;
//min success
if (value < 35) value = 35;
//max success
if (value > 90) value = 90;
rate = value;
break;
default:
// For normal Stun attack with skillType = PDAM
//pAtk = (int)skill.getPower();
pDef = 1;
pDef = target.calcStat(Stats.STUN_RES, pDef, target, null);
value = 5000 + (int) (50 * (player.getLevel() - target.getLevel())+ 5000 * ((float) skill.getLevel() / maxLevel));
if (pDef > 0) value /= pDef;
modifier = 10.0 * target.getCON() / 3;
if (modifier > 0) value /= modifier;
value *= ssmodifier;
value /= 100;
if (!(target instanceof L2RaidBossInstance))
{
//min success
if (value < 35) value = 35;
//max success
if (value > 90) value = 90;
}
rate = value;
// 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;
}
if (rate == 0)
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 (target instanceof L2RaidBossInstance)
{
int cLevel = player.getLevel();
int tLevel = target.getLevel();
int rRate = 1;
if (cLevel > tLevel)
{
rRate = cLevel - tLevel;
if (rRate > 9) rate /= rRate;
if (rate < 1) rate = 0;
}
}
if (check > rate) success = false;
else success = true;
return success;
}