|
@@ -37,7 +37,8 @@ public class ManaHeal implements ISkillHandler
|
|
|
private static final L2SkillType[] SKILL_IDS =
|
|
|
{
|
|
|
L2SkillType.MANAHEAL,
|
|
|
- L2SkillType.MANARECHARGE
|
|
|
+ L2SkillType.MANARECHARGE,
|
|
|
+ L2SkillType.MANA_BY_LEVEL
|
|
|
};
|
|
|
|
|
|
/**
|
|
@@ -52,7 +53,44 @@ public class ManaHeal implements ISkillHandler
|
|
|
continue;
|
|
|
|
|
|
double mp = skill.getPower();
|
|
|
- mp = (skill.getSkillType() == L2SkillType.MANARECHARGE) ? target.calcStat(Stats.RECHARGE_MP_RATE, mp, null, null) : mp;
|
|
|
+
|
|
|
+ switch (skill.getSkillType())
|
|
|
+ {
|
|
|
+ case MANARECHARGE:
|
|
|
+ mp = target.calcStat(Stats.RECHARGE_MP_RATE, mp, null, null);
|
|
|
+ break;
|
|
|
+ case MANA_BY_LEVEL:
|
|
|
+ //recharged mp influenced by difference between target level and skill level
|
|
|
+ //if target is within 5 levels or lower then skill level there's no penalty.
|
|
|
+ mp = target.calcStat(Stats.RECHARGE_MP_RATE, mp, null, null);
|
|
|
+ if (target.getLevel() > skill.getMagicLevel())
|
|
|
+ {
|
|
|
+ int lvlDiff = target.getLevel() - skill.getMagicLevel();
|
|
|
+ //if target is too high compared to skill level, the amount of recharged mp gradually decreases.
|
|
|
+ if (lvlDiff == 6) //6 levels difference:
|
|
|
+ mp *= 0.9; //only 90% effective
|
|
|
+ else if (lvlDiff == 7)
|
|
|
+ mp *= 0.8; //80%
|
|
|
+ else if (lvlDiff == 8)
|
|
|
+ mp *= 0.7; //70%
|
|
|
+ else if (lvlDiff == 9)
|
|
|
+ mp *= 0.6; //60%
|
|
|
+ else if (lvlDiff == 10)
|
|
|
+ mp *= 0.5; //50%
|
|
|
+ else if (lvlDiff == 11)
|
|
|
+ mp *= 0.4; //40%
|
|
|
+ else if (lvlDiff == 12)
|
|
|
+ mp *= 0.3; //30%
|
|
|
+ else if (lvlDiff == 13)
|
|
|
+ mp *= 0.2; //20%
|
|
|
+ else if (lvlDiff == 14)
|
|
|
+ mp *= 0.1; //10%
|
|
|
+
|
|
|
+ else if (lvlDiff >= 15) //15 levels or more:
|
|
|
+ mp = 0; //0mp recharged
|
|
|
+ }
|
|
|
+
|
|
|
+ }
|
|
|
|
|
|
//from CT2 u will receive exact MP, u can't go over it, if u have full MP and u get MP buff, u will receive 0MP restored message
|
|
|
if ((target.getCurrentMp() + mp) >= target.getMaxMp())
|