XmdsBuff_LockHP.cs 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using CommonAI.Data;
  2. using CommonAI.Zone;
  3. using CommonAI.Zone.Formula;
  4. using CommonAI.Zone.Instance;
  5. using System;
  6. using XmdsCommon.Plugin;
  7. using XmdsCommonServer.Plugin;
  8. using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
  9. using XmdsCommonServer.Plugin.XmdsSkillTemplate.Skills;
  10. namespace XmdsCommonSkill.Plugin.Buffs
  11. {
  12. /// <summary>
  13. ///BUFF:锁血
  14. /// </summary>
  15. public class XmdsBuff_LockHP : XmdsBuffBase
  16. {
  17. /// <summary>
  18. ///填正值为扣血.
  19. /// </summary>
  20. public int lockHP = 0;
  21. private int UUID = 0;
  22. public override int GetAbilityID()
  23. {
  24. return (int)XmdsCommon.Plugin.XmdsBuffProperties.XmdsBuffAbility.Lock_HP;
  25. }
  26. public override void CopyTo(UnitBuff other)
  27. {
  28. var ret = other as XmdsBuff_LockHP;
  29. ret.lockHP = this.lockHP;
  30. base.CopyTo(other);
  31. }
  32. protected override void OnBindTemplate(ref BuffTemplate buffTemplate)
  33. {
  34. //DOT类技能首帧无效.
  35. buffTemplate.FirstTimeEnable = false;
  36. base.OnBindTemplate(ref buffTemplate);
  37. }
  38. public override void BuffBegin(XmdsVirtual hitter, XmdsVirtual attacker, InstanceUnit.BuffState state)
  39. {
  40. UUID = hitter.RegistOnHitDamage(OnUnitHitEvent, null, true);
  41. }
  42. public override void BuffEnd(XmdsVirtual hitter, InstanceUnit.BuffState state, bool replace)
  43. {
  44. hitter.UnRegistOnHitDamage(UUID);
  45. }
  46. //被打监听.
  47. protected virtual float OnUnitHitEvent(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
  48. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  49. {
  50. //伤害减免
  51. if(hitted.mUnit.CurrentHP - damage < lockHP)
  52. {
  53. if (BuffInvaildCheck())
  54. {
  55. hitted.mUnit.removeBuff(BindBuffID);
  56. }
  57. source.OutClientState = (byte)XmdsCommonServer.Plugin.XmdsVirtual.UnitHitEventState.Absorb;
  58. damage = Math.Max(0, hitted.mUnit.CurrentHP - lockHP);
  59. }
  60. return damage;
  61. }
  62. }
  63. }