XmdsBuff_HitAddHp.cs 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879
  1. 
  2. using CommonAI.Data;
  3. using CommonAI.Zone.Formula;
  4. using System;
  5. using XmdsCommon.Plugin;
  6. using XmdsCommonServer.Plugin;
  7. using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
  8. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  9. namespace XmdsCommonSkill.Plugin.Buffs
  10. {
  11. /// <summary>
  12. /// 受击加血
  13. /// </summary>
  14. ///
  15. public class XmdsBuff_HitAddHp : XmdsBuffBase
  16. {
  17. public int addMaxHpPer = 0; //单次恢复最大生命万分之N的血量
  18. public int minDamgeOnce = 0; //单次伤害达到这个值才出发
  19. public int hitInterval = 0; //触发时间间隔
  20. private long mNextHitTimeStamp = 0;
  21. private int UUID = 0;
  22. public override int GetAbilityID()
  23. {
  24. return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.HitAttHp;
  25. }
  26. public override void CopyTo(UnitBuff other)
  27. {
  28. var ret = other as XmdsBuff_HitAddHp;
  29. ret.addMaxHpPer = this.addMaxHpPer;
  30. ret.minDamgeOnce = this.minDamgeOnce;
  31. ret.hitInterval = this.hitInterval;
  32. base.CopyTo(other);
  33. }
  34. protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, CommonAI.Zone.Instance.InstanceUnit.BuffState state)
  35. {
  36. UUID = hitter.RegistOnHitDamage(OnUnitHitEvent, null);
  37. }
  38. protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, CommonAI.Zone.Instance.InstanceUnit.BuffState state, bool replace)
  39. {
  40. hitter.UnRegistOnHitDamage(UUID);
  41. }
  42. //被打监听.
  43. protected virtual float OnUnitHitEvent(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
  44. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  45. {
  46. //受击恢复生命
  47. do
  48. {
  49. if (minDamgeOnce != 0 && damage < minDamgeOnce)
  50. {
  51. break;
  52. }
  53. if (hitInterval != 0 && CommonLang.CUtils.localTimeMS < mNextHitTimeStamp)
  54. {
  55. break;
  56. }
  57. mNextHitTimeStamp = CommonLang.CUtils.localTimeMS + hitInterval;
  58. hitted.AddHP(addMaxHpPer, hitted.mUnit);
  59. if (BuffInvaildCheck())
  60. {
  61. hitted.mUnit.removeBuff(BindBuffID);
  62. }
  63. } while (false);
  64. return damage;
  65. }
  66. }
  67. }