XmdsBuff_Invincible.cs 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using CommonAI.Data;
  2. using CommonAI.Zone;
  3. using CommonAI.Zone.Formula;
  4. using CommonLang;
  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.XmdsSkillTemplate.Skills;
  12. namespace XmdsCommonSkill.Plugin.Buffs
  13. {
  14. /// <summary>
  15. /// FileName: XmdsBuff_Invincible.cs
  16. /// Author: Alex.Yu
  17. /// Corporation:...
  18. /// Description: 无敌BUFF.
  19. /// DateTime: 2015/8/17 19:45:20
  20. /// </summary>
  21. public class XmdsBuff_Invincible : XmdsBuffBase
  22. {
  23. public bool isCanMove = true; //是否能够移动
  24. private int mOpID = 0;
  25. private int mUUID_1 = 0;
  26. private int mUUID_2 = 0;
  27. public override int GetAbilityID()
  28. {
  29. return (int)XmdsBuffProperties.XmdsBuffAbility.Invincible;
  30. }
  31. public override void CopyTo(UnitBuff other)
  32. {
  33. var ret = other as XmdsBuff_Invincible;
  34. ret.isCanMove = this.isCanMove;
  35. base.CopyTo(other);
  36. }
  37. protected override void OnBuffBegin(XmdsCommonServer.Plugin.XmdsVirtual hitter, XmdsCommonServer.Plugin.XmdsVirtual attacker, CommonAI.Zone.Instance.InstanceUnit.BuffState state)
  38. {
  39. //通过编辑器设置无敌效果.
  40. XmdsVirtual.FormatLog("单位 {0} 无敌开始", hitter.mInfo.Name);
  41. //hitter.IsInvincible = true;
  42. if(!this.isCanMove)
  43. {
  44. XmdsVirtual.PropChangeOperation pco = hitter.CreatePropChangeOpertation(this) ;
  45. pco.Type = XmdsVirtual.UnitAttributeType.MoveSpeed;
  46. pco.Value = -10000;
  47. pco.OpType = XmdsVirtual.PropChangeOperation.OperateType.Percent;
  48. mOpID = hitter.AddPropChangeOperation(pco);
  49. }
  50. mUUID_1 = hitter.RegistTryAddBuffEvent(OnTryAddBuffEvent, null);
  51. mUUID_2 = hitter.RegistOnHitDamage(OnHandleHitDmage, null);
  52. }
  53. private float OnHandleHitDmage(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
  54. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  55. {
  56. isEndDispatch = true;
  57. attacker.SendBattleHintNumberB2C(0, XmdsVirtual.UnitHitEventState.Immunity, hitted.mUnit.ID);
  58. return 0;
  59. }
  60. protected override void OnBuffEnd(XmdsCommonServer.Plugin.XmdsVirtual hitter, CommonAI.Zone.Instance.InstanceUnit.BuffState state, bool replace)
  61. {
  62. XmdsVirtual.FormatLog("单位 {0} 无敌解除", hitter.mInfo.Name);
  63. hitter.IsInvincible = false;
  64. if (mOpID > 0)
  65. {
  66. hitter.RemovePropChangeOperation(mOpID);
  67. }
  68. hitter.UnRegistTryAddBuffEvent(mUUID_1);
  69. hitter.UnRegistOnHitDamage(mUUID_2);
  70. }
  71. private bool OnTryAddBuffEvent(ref BuffTemplate buff, XmdsVirtual attacker, XmdsVirtual hitter, GameSkill skill)
  72. {
  73. //只能刷新无敌buff
  74. XmdsBuffProperties prop = buff.Properties as XmdsBuffProperties;
  75. if (prop.BuffAbilityList != null && prop.BuffAbilityList.Count == 1 && (int)prop.BuffAbilityList[0].ability == this.GetAbilityID())
  76. {
  77. return true;
  78. }
  79. return false;
  80. }
  81. }
  82. }