XmdsBuff_AttackAddHP.cs 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. using CommonAI.Zone.Instance;
  2. using CommonAI.Zone.Formula;
  3. using System;
  4. using System.Collections.Generic;
  5. using System.Linq;
  6. using System.Text;
  7. using XmdsCommon.Plugin;
  8. using XmdsCommonServer.Plugin;
  9. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  10. using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
  11. using CommonAI.Data;
  12. using CommonLang;
  13. namespace XmdsCommonSkill.Plugin.Buffs
  14. {
  15. /// <summary>
  16. /// debuff创建者及队友攻击,回血
  17. /// </summary>
  18. public class XmdsBuff_AttackAddHP : XmdsBuffBase
  19. {
  20. public bool isLimitMax = true;
  21. public int totalAddHp;
  22. public float damageToHp = 0.1f;
  23. public bool inOnlySelf = true;
  24. //避免这一次攻击就会回血
  25. private long mBuffStartTriggerTime = 0;
  26. //buff创建者
  27. private XmdsVirtual buffSender = null;
  28. private int mHandleUUID = 0;
  29. public override int GetAbilityID()
  30. {
  31. return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.Attack_AddHP;
  32. }
  33. public override void CopyTo(UnitBuff other)
  34. {
  35. var ret = other as XmdsBuff_AttackAddHP;
  36. ret.totalAddHp = this.totalAddHp;
  37. ret.damageToHp = this.damageToHp;
  38. ret.isLimitMax = this.isLimitMax;
  39. ret.inOnlySelf = this.inOnlySelf;
  40. base.CopyTo(other);
  41. }
  42. protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, InstanceUnit.BuffState state)
  43. {
  44. this.buffSender = attacker;
  45. //注册监听.
  46. mHandleUUID = hitter.RegistOnHitDamage(OnHandlerHitDamage, null);
  47. this.mBuffStartTriggerTime = CommonLang.CUtils.localTimeMS + 200;
  48. //Console.WriteLine("begin -" + this.mBuffStartTriggerTime);
  49. }
  50. protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, InstanceUnit.BuffState state, bool replace)
  51. {
  52. //取消监听.
  53. hitter.UnRegistOnHitDamage(mHandleUUID);
  54. }
  55. //单位被攻击时,判断是否符合条件触发BUFF效果.
  56. private float OnHandlerHitDamage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
  57. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  58. {
  59. long lStarttime = CommonLang.CUtils.localTimeMS;
  60. if (damage > 0 && this.mBuffStartTriggerTime < lStarttime && this.buffSender.IsAllies(attacker, true, true))
  61. {
  62. int baseAddHP = CUtils.CastInt(damage * this.damageToHp);
  63. if (isLimitMax)
  64. {
  65. int AddHP = Math.Min(baseAddHP, totalAddHp);//;
  66. AddHP = Math.Max(1, AddHP);
  67. attacker.mUnit.AddHP(AddHP, attacker.mUnit);
  68. totalAddHp -= AddHP;
  69. if (totalAddHp <= 0)
  70. {
  71. hitted.mUnit.removeBuff(this.BindBuffID);
  72. }
  73. }
  74. else
  75. {
  76. attacker.mUnit.AddHP(baseAddHP, attacker.mUnit);
  77. }
  78. }
  79. return damage;
  80. }
  81. protected override void OnDispose()
  82. {
  83. base.OnDispose();
  84. }
  85. }
  86. }