ManaHeal.java 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. /**
  2. *
  3. */
  4. package handlers.effecthandlers;
  5. import com.l2jserver.gameserver.model.actor.L2Character;
  6. import com.l2jserver.gameserver.model.actor.instance.L2DoorInstance;
  7. import com.l2jserver.gameserver.model.effects.EffectTemplate;
  8. import com.l2jserver.gameserver.model.effects.L2Effect;
  9. import com.l2jserver.gameserver.model.effects.L2EffectType;
  10. import com.l2jserver.gameserver.model.stats.Env;
  11. import com.l2jserver.gameserver.model.stats.Stats;
  12. import com.l2jserver.gameserver.network.SystemMessageId;
  13. import com.l2jserver.gameserver.network.serverpackets.StatusUpdate;
  14. import com.l2jserver.gameserver.network.serverpackets.SystemMessage;
  15. /**
  16. * @author UnAfraid
  17. *
  18. */
  19. public class ManaHeal extends L2Effect
  20. {
  21. public ManaHeal(Env env, EffectTemplate template)
  22. {
  23. super(env, template);
  24. }
  25. @Override
  26. public L2EffectType getEffectType()
  27. {
  28. return L2EffectType.MANAHEAL;
  29. }
  30. @Override
  31. public boolean onStart()
  32. {
  33. L2Character target = getEffected();
  34. if (target == null || target.isDead() || target instanceof L2DoorInstance)
  35. return false;
  36. StatusUpdate su = new StatusUpdate(target);
  37. double amount = calc();
  38. if (!getSkill().isStaticHeal())
  39. amount = target.calcStat(Stats.RECHARGE_MP_RATE, amount, null, null);
  40. amount = Math.min(amount, target.getMaxRecoverableMp() - target.getCurrentMp());
  41. // Prevent negative amounts
  42. if (amount < 0)
  43. amount = 0;
  44. // To prevent -value heals, set the value only if current mp is less than max recoverable.
  45. if (target.getCurrentMp() < target.getMaxRecoverableMp())
  46. target.setCurrentMp(amount + target.getCurrentMp());
  47. SystemMessage sm;
  48. if (getEffector().getObjectId() != target.getObjectId())
  49. {
  50. sm = SystemMessage.getSystemMessage(SystemMessageId.S2_MP_RESTORED_BY_C1);
  51. sm.addCharName(getEffector());
  52. }
  53. else
  54. sm = SystemMessage.getSystemMessage(SystemMessageId.S1_MP_RESTORED);
  55. sm.addNumber((int) amount);
  56. target.sendPacket(sm);
  57. su.addAttribute(StatusUpdate.CUR_MP, (int) target.getCurrentMp());
  58. target.sendPacket(su);
  59. return true;
  60. }
  61. @Override
  62. public boolean onActionTime()
  63. {
  64. return false;
  65. }
  66. }