Remedy_510600.cs 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134
  1. using CommonAI.Zone.Helper;
  2. using CommonAI.Zone.Instance;
  3. using XmdsCommonServer.Plugin;
  4. using XmdsCommonServer.XLS.Data;
  5. using XmdsCommonSkill.Plugin.Buffs;
  6. using System;
  7. using static CommonAI.Zone.Instance.InstanceUnit;
  8. using XmdsCommon.Plugin;
  9. using CommonAI.Zone;
  10. using XmdsCommonServer.Plugin.Units;
  11. using CommonAI.Zone.Formula;
  12. using XmdsCommonSkill.Plugin.Skills;
  13. using XmdsCommonServer.Plugin.XmdsSkillTemplate.DamageCalculator;
  14. using CommonAI.Data;
  15. using CommonLang;
  16. namespace XmdsCommonSkill.Plugin.PassiveSkills.Remedy
  17. {
  18. /// <summary>
  19. /// 治疗被动
  20. /// 自然平衡:治疗量会随着目标血量少于X增益n%
  21. /// </summary>
  22. class Remedy_510600 : XmdsPassiveSkillBase
  23. {
  24. /// 技能ID.
  25. public static int ID = 510600;
  26. private int mUUID_1 = 0;
  27. private int mUUID_2 = 0;
  28. //被动数值
  29. protected static XmdsSkillValue valueSet;
  30. //缓存数值
  31. private float mTriggerPrecent = 0;
  32. private float mAddHPPrecent = 0;
  33. /// 获取技能ID.
  34. public override int SkillID {get{return ID;}}
  35. protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
  36. {
  37. //单位攻击监听
  38. mUUID_1 = owner.RegistOnHitOther(OnHandleOnHit, skillInfo, true);
  39. //加buff也可能是回血的
  40. mUUID_2 = owner.RegistAddOtherHPEvent(OnAddOtherHPEvnet, skillInfo);
  41. this.mTriggerPrecent = XmdsUnitProp.PER * valueSet.GetValue(skillInfo.GetPassiveLevel(), 1);
  42. this.mAddHPPrecent = XmdsUnitProp.PER * valueSet.GetValue(skillInfo.GetPassiveLevel(), 2);
  43. }
  44. protected override void OnSkillDataChange(GameSkill gs, XmdsVirtual unit)
  45. {
  46. this.mTriggerPrecent = XmdsUnitProp.PER * valueSet.GetValue(gs.GetPassiveLevel(), 1);
  47. this.mAddHPPrecent = XmdsUnitProp.PER * valueSet.GetValue(gs.GetPassiveLevel(), 2);
  48. }
  49. //单位攻击
  50. private float OnHandleOnHit(float damage, XmdsVirtual hitter, XmdsVirtual attacker, AttackSource source,
  51. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  52. {
  53. //受击为友方,回血效果增加
  54. int extDamage = 0;
  55. if (damageType == DamageType.Heal && attacker.IsAllies(hitter, true, true))
  56. {
  57. int triggerHP = CUtils.CastInt(hitter.mUnit.MaxHP * XmdsUnitProp.PER * valueSet.GetValue(skill.GetPassiveLevel(), 1));
  58. if(hitter.mUnit.CurrentHP <= triggerHP)
  59. {
  60. extDamage = -CUtils.CastInt(damage * XmdsUnitProp.PER * valueSet.GetValue(skill.GetPassiveLevel(), 2));
  61. }
  62. }
  63. return damage + extDamage;
  64. }
  65. public bool OnAddOtherHPEvnet(int hp, InstanceUnit sender, InstanceUnit hitter, AttackSource source, out int finalHP)
  66. {
  67. finalHP = hp;
  68. if(hp < 0 && sender.Virtual.IsAllies(hitter.Virtual, true, true))
  69. {
  70. int triggerHP = CUtils.CastInt(hitter.MaxHP * this.mTriggerPrecent);
  71. if (hitter.CurrentHP <= triggerHP)
  72. {
  73. finalHP = CUtils.CastInt(hp * (1 + this.mAddHPPrecent));
  74. }
  75. }
  76. return true;
  77. }
  78. //针对每个不同的buff,单独处理了,悲剧@(理应是只考虑受击的,不考虑buff)。坑太大, 填不动
  79. //public void OnSendBuffEvent(BuffTemplate buff, XmdsVirtual attacker, XmdsVirtual hitter)
  80. //{
  81. // try
  82. // {
  83. // int triggerHP = CUtils.CastInt(hitter.mUnit.MaxHP * XmdsUnitProp.PER * valueSet.GetValue(skill.GetPassiveLevel(), 1));
  84. // if (hitter.mUnit.CurrentHP >= triggerHP)
  85. // {
  86. // return;
  87. // }
  88. // if (buff.ID == (int)XmdsBuffBase.XmdsBuffList.REMEDY_2_0_ADDHP)
  89. // {
  90. // }
  91. // else if (buff.ID == (int)XmdsBuffBase.XmdsBuffList.REMEDY_4_3_ATTACKADDHP)
  92. // {
  93. // }
  94. // else if (buff.ID == (int)XmdsBuffBase.XmdsBuffList.AttackRoundAddHP)
  95. // {
  96. // }
  97. // }
  98. // catch (Exception e)
  99. // {
  100. // log.Error("Remedy_510600 OnSendBuffEvent catch: " + buff.ID + ", " + e);
  101. // }
  102. //}
  103. protected override void OnDispose(XmdsVirtual owner)
  104. {
  105. owner.UnRegistOnHitOther(mUUID_1);
  106. owner.UnRegistAddOtherHPEvent(mUUID_2);
  107. }
  108. protected override void OnInitSkillParam()
  109. {
  110. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  111. InitData(data, out valueSet, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  112. }
  113. }
  114. }