XmdsBuff_Mocking.cs 3.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125
  1. using CommonAI.Data;
  2. using CommonAI.Zone.Formula;
  3. using CommonAI.Zone.Helper;
  4. using CommonAI.Zone.Instance;
  5. using System;
  6. using System.Collections.Generic;
  7. using System.Linq;
  8. using System.Text;
  9. using XmdsCommon.Plugin;
  10. using XmdsCommonServer.Plugin;
  11. using XmdsCommonServer.Plugin.Units;
  12. using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
  13. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  14. namespace XmdsCommonSkill.Plugin.Buffs
  15. {
  16. /// <summary>
  17. /// FileName: XmdsBuff_Mocking.cs
  18. /// Author: Alex.Yu
  19. /// Corporation:...
  20. /// Description: 嘲讽BUFF.
  21. /// DateTime: 2015/6/16 17:43:44
  22. /// </summary>
  23. public class XmdsBuff_Mocking : XmdsBuffBase
  24. {
  25. //嘲讽目标.
  26. public XmdsVirtual BuffTarget = null;
  27. public int damageReduce = 5000;
  28. private uint senderId = 0;
  29. private int mHandleUUID = 0;
  30. private int mHandleUUID1 = 0;
  31. public override int GetAbilityID()
  32. {
  33. return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.Mocking;
  34. }
  35. public override void CopyTo(UnitBuff other)
  36. {
  37. var ret = other as XmdsBuff_Mocking;
  38. ret.BuffTarget = this.BuffTarget;
  39. this.BuffTarget = null;
  40. ret.damageReduce = this.damageReduce;
  41. ret.senderId = this.senderId;
  42. base.CopyTo(other);
  43. }
  44. protected override void OnBindTemplate(ref CommonAI.Zone.BuffTemplate buffTemplate)
  45. {
  46. }
  47. protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, CommonAI.Zone.Instance.InstanceUnit.BuffState state)
  48. {
  49. mHandleUUID = hitter.RegistGetAtkTarget(OnGetAtkTarget, null, true);
  50. if(this.damageReduce > 0)
  51. {
  52. senderId = attacker.mUnit.ID;
  53. mHandleUUID1 = hitter.RegistOnHitOther(OnHandleHitOther, null);
  54. }
  55. if(hitter.mUnit.IsPlayer)
  56. {
  57. hitter.mUnit.AddActionSubState(UnitActionSubStatus.Mocking);
  58. XmdsInstancePlayer player = hitter.mUnit as XmdsInstancePlayer;
  59. player.setMocking(attacker.mUnit);
  60. }
  61. }
  62. protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, CommonAI.Zone.Instance.InstanceUnit.BuffState state, bool replace)
  63. {
  64. BuffTarget = null;
  65. hitter.UnRegistGetAtkTarget(mHandleUUID);
  66. if(this.damageReduce > 0 && mHandleUUID1 > 0)
  67. {
  68. hitter.UnRegistOnHitOther(mHandleUUID1);
  69. }
  70. if (hitter.mUnit.IsPlayer)
  71. {
  72. hitter.mUnit.RemoveActionSubState(UnitActionSubStatus.Mocking);
  73. XmdsInstancePlayer player = hitter.mUnit as XmdsInstancePlayer;
  74. player.setMocking(null);
  75. }
  76. else if(!replace)
  77. {
  78. //怪物嘲讽,且非替换才处理仇恨值相关逻辑
  79. hitter.mHateSystem.MockingInheritHatred((XmdsVirtual)state.Sender.Virtual);
  80. }
  81. }
  82. private XmdsVirtual OnGetAtkTarget(XmdsVirtual target, GameSkill gs)
  83. {
  84. //有嘲讽目标且目标仍然有效.
  85. if(BuffTarget != null && BuffTarget.mUnit.IsActive)
  86. {
  87. return BuffTarget;
  88. }
  89. return target;
  90. }
  91. private float OnHandleHitOther(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
  92. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  93. {
  94. //2021.5.29,MMO-16539:修改成全部伤害减免
  95. if (hitted.mUnit.ID == this.senderId/* && source.FromSkillType == XmdsSkillType.normalAtk*/)
  96. {
  97. damage -= damage * XmdsUnitProp.PER * this.damageReduce;
  98. }
  99. return damage;
  100. }
  101. protected override void OnDispose()
  102. {
  103. BuffTarget = null;
  104. base.OnDispose();
  105. }
  106. }
  107. }