PetGive_910004.cs 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  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.PetGive
  17. {
  18. /// <summary>
  19. /// 秘法·绵如泽 : 当前生命值低于<$6>%时,将普攻伤害的<$5>%恢复自己等量的生命值,冷却时间<$9>秒
  20. /// </summary>
  21. class PetGive_910004 : XmdsPassiveSkillBase
  22. {
  23. /// 技能ID.
  24. public static int ID = 910004;
  25. //buff下次触发时间
  26. private long BuffNextTriggerTime = 0;
  27. private int mUUID_1 = 0;
  28. //效果触发CD
  29. private static int triggerCD = 0;
  30. //恢复生命百分比
  31. private static XmdsSkillValue valueSet;
  32. //生命触发阀值
  33. private static XmdsSkillValue valueSet2;
  34. /// 获取技能ID.
  35. public override int SkillID { get { return ID; } }
  36. protected override void OnInit(GameSkill skillInfo, XmdsVirtual owner)
  37. {
  38. //收到攻击监听注册
  39. mUUID_1 = owner.RegistOnHitOther(OnHitOther, skillInfo, true);
  40. this.BuffNextTriggerTime = CommonLang.CUtils.localTimeMS;
  41. }
  42. protected virtual float OnHitOther(float damage, XmdsVirtual hitted, XmdsVirtual attacker, AttackSource source,
  43. ref XmdsVirtual.AtkResult result, DamageType damageType, GameSkill skill, ref bool isEndDispatch)
  44. {
  45. if(source.FromSkillType != XmdsSkillType.normalAtk || !hitted.mUnit.IsMonster || CommonLang.CUtils.localTimeMS < this.BuffNextTriggerTime)
  46. {
  47. return damage;
  48. }
  49. bool isTrigger = (attacker.mUnit.CurrentHP * 1.0f / attacker.mUnit.MaxHP * XmdsDamageCalculator.PERER) < valueSet2.GetValue(skill.SkillLevel);
  50. if (isTrigger)
  51. {
  52. int addHP = Math.Max(1, CUtils.CastInt(damage * XmdsUnitProp.PER * valueSet.GetValue(skill.SkillLevel)));
  53. attacker.mUnit.AddHP(addHP, attacker.mUnit);
  54. this.BuffNextTriggerTime = CommonLang.CUtils.localTimeMS + triggerCD;
  55. }
  56. return damage;
  57. }
  58. protected override void OnInitSkillParam()
  59. {
  60. XmdsSkillData data = XmdsDataMgr.GetInstance().GetXmdsSkillData(ID);
  61. InitData(data, out valueSet, XmdsSkillData.XmdsSkillDataKey.ValueSet);
  62. InitData(data, out valueSet2, XmdsSkillData.XmdsSkillDataKey.ValueSet2);
  63. XmdsSkillValue cdTime;
  64. InitData(data, out cdTime, XmdsSkillData.XmdsSkillDataKey.CDTime);
  65. triggerCD = cdTime.GetValue();
  66. }
  67. protected override void OnDispose(XmdsVirtual owner)
  68. {
  69. owner.UnRegistOnHitOther(mUUID_1);
  70. }
  71. }
  72. }