........
final int skill2 = rh.readByte() & 0xFF;
........
int realskill = 0;
int level = 0;
if (useSkill) {
final byte size = monster.getNoSkills();
boolean used = false;
if (size > 0) {
final Pair<Integer, Integer> skillToUse = monster.getSkills().get((byte) Randomizer.nextInt(size));
realskill = skillToUse.getLeft();
level = skillToUse.getRight();
// Skill ID and Level
final MobSkill mobSkill = MobSkillFactory.getMobSkill(realskill, level);
if (!mobSkill.checkCurrentBuff(chr, monster)) {
final long now = System.currentTimeMillis();
final long ls = monster.getLastSkillUsed(realskill);
if (ls == 0 || ((now - ls) > mobSkill.getCoolTime())) {
final int reqHp = (int) (((float) monster.getHp() / monster.getMobMaxHp()) * 100); // In case this monster have 2.1b and above HP
if (reqHp <= mobSkill.getHP()) {
monster.setLastSkillUsed(realskill, now, mobSkill.getCoolTime());
used = true;
}
}
}
}
if (!used) {
realskill = 0;
level = 0;
}
}
if (skill >= 60 && skill <= 91 && skill1 >= 100 && skill1 <= 205 && monster.hasSkill(skill1, skill2)) {//should check range
final MobSkill skillData = MobSkillFactory.getMobSkill(skill1, skill2);
if (skillData != null) {
skillData.applyEffect(c.getPlayer(), monster, true);
}
}
........