S9022.cs 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
  2. using Common.Utility.CombatEvent;
  3. using Fort23.Core;
  4. using GameLogic.Combat.CombatTool;
  5. using GameLogic.Combat.Hero;
  6. using UnityEngine;
  7. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
  8. namespace GameLogic.Combat.Skill
  9. {
  10. /// <summary>
  11. /// 玄甲护体(防御型技能)
  12. /// 从四周飞来类似龟甲的碎片,乌龟龟甲上形成一个新的龟甲,防御+{0}%,敌人对其照成伤害时会收到{1}%防御力反伤,
  13. /// 反伤为真实伤害。持续{2}秒
  14. /// </summary>
  15. public class S9022 : SkillBasic
  16. {
  17. private long currAddV;
  18. private bool isUpdate;
  19. private float currTime;
  20. private TimeLineEventLogicGroupBasic _loopTimeLine;
  21. protected override void ProActiveSkill()
  22. {
  23. currAddV = 0;
  24. currTime = 0;
  25. isUpdate = false;
  26. CombatEventManager.Instance.AddEventListener(CombatEventType.HeroInjured, HeroInjured);
  27. }
  28. private void HeroInjured(IEventData data)
  29. {
  30. if (!isUpdate)
  31. {
  32. return;
  33. }
  34. HeroInjuredEventData heroInjuredEventData = data as HeroInjuredEventData;
  35. if (heroInjuredEventData.HarmReturnInfo.target.combatHeroEntity == CombatHeroEntity)
  36. {
  37. long harm = CombatHeroEntity.CurrCombatHeroInfo.defense.Value;
  38. long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(harm, effectValue[1]);
  39. HarmReturnInfo harmReturnInfo = CombatCalculateTool.Instance.Harm(CombatHeroEntity,
  40. heroInjuredEventData.HarmReturnInfo.source, v,
  41. AttType.Skill | AttType.FanJi, triggerData,
  42. wuXingType, null,
  43. HarmType.Default);
  44. }
  45. }
  46. protected override void ProUseSkill()
  47. {
  48. _loopTimeLine= ActivationTimeLineData("9022");
  49. }
  50. protected override void ProDefaultTimeLineTrigger(string groupName, CombatHeroHitPoint targetEntity,
  51. ITimelineFxLogic timelineFxLogic,
  52. TriggerData triggerData, ISkillFeatures skillFeatures)
  53. {
  54. long def = CombatHeroEntity.MaxCombatHeroInfo.defense.Value;
  55. currAddV = CombatCalculateTool.Instance.GetVlaueRatioForLong(def, effectValue[0]);
  56. CombatHeroEntity.CurrCombatHeroInfo.defense += currAddV;
  57. isUpdate = true;
  58. currTime = 0;
  59. }
  60. protected override void ProCombatUpdate(float time)
  61. {
  62. if (!isUpdate)
  63. {
  64. return;
  65. }
  66. currTime += time;
  67. if (currTime > effectValue[2])
  68. {
  69. isUpdate = false;
  70. if (_loopTimeLine != null)
  71. {
  72. _loopTimeLine.CloseLoopFx();
  73. _loopTimeLine = null;
  74. }
  75. }
  76. }
  77. protected override void ProDispose()
  78. {
  79. CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroInjured, HeroInjured);
  80. }
  81. }
  82. }