XmdsBuff_UnitLink.cs 2.4 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889
  1. using CommonAI.Zone.Instance;
  2. using System;
  3. using System.Collections.Generic;
  4. using System.Linq;
  5. using System.Text;
  6. using XmdsCommonServer.Plugin;
  7. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  8. namespace XmdsCommonSkill.Plugin.Buffs
  9. {
  10. /// <summary>
  11. /// 与其他单位关联.
  12. /// </summary>
  13. public class XmdsBuff_UnitLink : XmdsBuffBase
  14. {
  15. /// <summary>
  16. /// 关联单位.
  17. /// </summary>
  18. public XmdsVirtual LinkTarget = null;
  19. public XmdsVirtual Owner = null;
  20. public override int GetAbilityID()
  21. {
  22. return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.UnitLink;
  23. }
  24. public override void CopyTo(UnitBuff other)
  25. {
  26. var ret = other as XmdsBuff_UnitLink;
  27. ret.LinkTarget = this.LinkTarget;
  28. //不释放,可能会导致内存泄露.
  29. this.LinkTarget = null;
  30. base.CopyTo(other);
  31. }
  32. protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, InstanceUnit.BuffState state)
  33. {
  34. //通过编辑器设置无敌效果.
  35. XmdsVirtual.FormatLog("单位 {0} 关联开始", hitter.mInfo.Name);
  36. Owner = hitter;
  37. if (LinkTarget != null)
  38. {
  39. LinkTarget.mUnit.OnDead += MUnit_OnDead;
  40. }
  41. }
  42. private void MUnit_OnDead(InstanceUnit unit, InstanceUnit attacker)
  43. {
  44. if (Owner != null)
  45. {
  46. Owner.mUnit.removeBuff(BindBuffID);
  47. }
  48. if (LinkTarget != null)
  49. {
  50. LinkTarget.mUnit.OnDead -= MUnit_OnDead;
  51. }
  52. }
  53. protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, InstanceUnit.BuffState state, bool replace)
  54. {
  55. //通过编辑器设置无敌效果.
  56. XmdsVirtual.FormatLog("单位 {0} 关联结束", hitter.mInfo.Name);
  57. if (LinkTarget != null)
  58. {
  59. if (LinkTarget.mUnit.IsDead() == false)
  60. {
  61. LinkTarget.mUnit.kill(null, false);
  62. }
  63. LinkTarget = null;
  64. }
  65. Owner = null;
  66. }
  67. protected override void OnDispose()
  68. {
  69. this.LinkTarget = null;
  70. this.Owner = null;
  71. base.OnDispose();
  72. }
  73. }
  74. }