XmdsBuff_Event_OnHitOther.cs 2.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273
  1. 
  2. using CommonAI.Zone.Instance;
  3. using CommonAI.Zone.Formula;
  4. using XmdsCommon.Plugin;
  5. using XmdsCommonServer.Plugin;
  6. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  7. using CommonAI.Zone;
  8. using CommonAI.Data;
  9. namespace XmdsCommonSkill.Plugin.Buffs
  10. {
  11. /// <summary>
  12. /// 监听打到别人.
  13. /// </summary>
  14. public class XmdsBuff_Event_OnHitOther : XmdsBuffBase
  15. {
  16. private int mHandleUUID = 0;
  17. public XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills.IOnHit OnHitOtherEvent;
  18. public override int GetAbilityID()
  19. {
  20. return (int)XmdsBuffProperties.XmdsBuffAbility.Event_OnHitOther;
  21. }
  22. protected override void OnBindTemplate(ref BuffTemplate buffTemplate)
  23. {
  24. //关联性BUFF必须在施放者死亡后清除.
  25. buffTemplate.IsRemoveOnSenderRemoved = true;
  26. base.OnBindTemplate(ref buffTemplate);
  27. }
  28. protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, InstanceUnit.BuffState state)
  29. {
  30. //注册监听.
  31. mHandleUUID = hitter.RegistOnHitOther(OnHandleHitOther, null);
  32. XmdsVirtual.FormatLog("BuffBegin : 单位【{0}】增加OnHitOther事件监听.", hitter.mProp.ServerData.BaseInfo.name);
  33. }
  34. protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, InstanceUnit.BuffState state, bool replace)
  35. {
  36. //取消监听.
  37. hitter.UnRegistOnHitOther(mHandleUUID);
  38. XmdsVirtual.FormatLog("BuffBegin : 单位【{0}】去除OnHitOther事件监听.", hitter.mProp.ServerData.BaseInfo.name);
  39. }
  40. private float OnHandleHitOther(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
  41. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  42. {
  43. if(OnHitOtherEvent != null)
  44. {
  45. OnHitOtherEvent.Invoke(damage, hitted, attacker, source, ref result, damageType, skill, ref isEndDispatch);
  46. }
  47. return damage;
  48. }
  49. protected override void OnDispose()
  50. {
  51. OnHitOtherEvent = null;
  52. base.OnDispose();
  53. }
  54. public override void CopyTo(UnitBuff other)
  55. {
  56. var ret = other as XmdsBuff_Event_OnHitOther;
  57. ret.OnHitOtherEvent = this.OnHitOtherEvent;
  58. base.CopyTo(other);
  59. }
  60. }
  61. }