TriggerSkillByDamage.java 3.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192
  1. /*
  2. * Copyright (C) 2004-2013 L2J DataPack
  3. *
  4. * This file is part of L2J DataPack.
  5. *
  6. * L2J DataPack is free software: you can redistribute it and/or modify
  7. * it under the terms of the GNU General Public License as published by
  8. * the Free Software Foundation, either version 3 of the License, or
  9. * (at your option) any later version.
  10. *
  11. * L2J DataPack is distributed in the hope that it will be useful,
  12. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  13. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
  14. * General Public License for more details.
  15. *
  16. * You should have received a copy of the GNU General Public License
  17. * along with this program. If not, see <http://www.gnu.org/licenses/>.
  18. */
  19. package handlers.effecthandlers;
  20. import com.l2jserver.gameserver.model.actor.L2Character;
  21. import com.l2jserver.gameserver.model.actor.events.listeners.IDamageReceivedEventListener;
  22. import com.l2jserver.gameserver.model.effects.EffectTemplate;
  23. import com.l2jserver.gameserver.model.effects.L2Effect;
  24. import com.l2jserver.gameserver.model.effects.L2EffectType;
  25. import com.l2jserver.gameserver.model.holders.SkillHolder;
  26. import com.l2jserver.gameserver.model.skills.L2Skill;
  27. import com.l2jserver.gameserver.model.stats.Env;
  28. import com.l2jserver.util.Rnd;
  29. /**
  30. * Trigger Skill By Damage effect implementation.
  31. * @author UnAfraid
  32. */
  33. public class TriggerSkillByDamage extends L2Effect implements IDamageReceivedEventListener
  34. {
  35. private final int _minLevel;
  36. private final int _maxLevel;
  37. private final int _minDamage;
  38. private final int _chance;
  39. private final SkillHolder _skill;
  40. public TriggerSkillByDamage(Env env, EffectTemplate template)
  41. {
  42. super(env, template);
  43. _minLevel = template.getParameters().getInteger("minLevel", 1);
  44. _maxLevel = template.getParameters().getInteger("maxLevel", 100);
  45. _minDamage = template.getParameters().getInteger("minDamage", 1);
  46. _chance = template.getParameters().getInteger("chance", 100);
  47. _skill = new SkillHolder(template.getParameters().getInteger("skillId"), template.getParameters().getInteger("skillLevel", 1));
  48. }
  49. public TriggerSkillByDamage(Env env, L2Effect effect)
  50. {
  51. super(env, effect);
  52. _minLevel = effect.getEffectTemplate().getParameters().getInteger("minLevel", 1);
  53. _maxLevel = effect.getEffectTemplate().getParameters().getInteger("maxLevel", 100);
  54. _minDamage = effect.getEffectTemplate().getParameters().getInteger("minDamage", 1);
  55. _chance = effect.getEffectTemplate().getParameters().getInteger("chance", 100);
  56. _skill = new SkillHolder(effect.getEffectTemplate().getParameters().getInteger("skillId"), effect.getEffectTemplate().getParameters().getInteger("skillLevel", 1));
  57. }
  58. @Override
  59. public L2EffectType getEffectType()
  60. {
  61. return L2EffectType.NONE;
  62. }
  63. @Override
  64. public void onDamageReceivedEvent(L2Character attacker, L2Character target, double damage, L2Skill skill, boolean crit)
  65. {
  66. int level = getEffected().getLevel();
  67. if (!getEffected().isInvul() && (level >= _minLevel) && (level <= _maxLevel) && (damage >= _minDamage) && (Rnd.get(100) < _chance))
  68. {
  69. _skill.getSkill().getEffects(getEffected(), getEffected());
  70. }
  71. }
  72. @Override
  73. public void onExit()
  74. {
  75. getEffected().getEvents().unregisterListener(this);
  76. super.onExit();
  77. }
  78. @Override
  79. public boolean onStart()
  80. {
  81. getEffected().getEvents().registerListener(this);
  82. return super.onStart();
  83. }
  84. }