S9013.cs 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. using System.Collections.Generic;
  2. using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
  3. using Common.Combat.FxAILogic;
  4. using Common.Utility.CombatEvent;
  5. using Core.Utility;
  6. using Fort23.Core;
  7. using GameLogic.Combat.Buff;
  8. using GameLogic.Combat.CombatTool;
  9. using GameLogic.Combat.Hero;
  10. using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;
  11. using UnityEngine;
  12. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
  13. namespace GameLogic.Combat.Skill
  14. {
  15. /// <summary>
  16. /// 霜域新生(被动,只会生效一次) 凤凰在伤害还剩10%的时候会触发此技能,
  17. /// 凤凰身体冰冻住并有一层寒气笼罩,期间凤凰不在受到任何伤害,并慢慢回血,
  18. /// 直到恢复满,持续5秒左右吧,恢复满后凤凰所有灵根增加{0}。冰块爆开,
  19. /// 生成一个冲击波,对当前场上所有的弹道照成当前强度的强度攻击(强度不够的弹道会被摧毁),生成{1}枚冰锥冲向玩家,对玩家照成{2}伤害
  20. /// </summary>
  21. public class S9013 : SkillBasic
  22. {
  23. protected BuffBasic BuffBasic;
  24. private bool isActiveFuHuo;
  25. private int count;
  26. private float _currTime;
  27. protected long addHp;
  28. protected override void ProActiveSkill()
  29. {
  30. count = 0;
  31. _currTime = 0;
  32. addHp = 0;
  33. isActiveFuHuo = false;
  34. CombatEventManager.Instance.AddEventListener(CombatEventType.HeroInjured, HeroInjured);
  35. }
  36. private void HeroInjured(IEventData data)
  37. {
  38. if (count > 0)
  39. {
  40. return;
  41. }
  42. HeroInjuredEventData heroInjuredEventData = data as HeroInjuredEventData;
  43. if (heroInjuredEventData.HarmReturnInfo.target.combatHeroEntity == CombatHeroEntity)
  44. {
  45. float bl = CombatHeroEntity.CurrCombatHeroInfo.hp.Value * 1.0f /
  46. CombatHeroEntity.MaxCombatHeroInfo.hp.Value;
  47. if (bl * 100 < effectValue[0])
  48. {
  49. addHp = CombatCalculateTool.Instance.GetVlaueRatioForLong(
  50. CombatHeroEntity.MaxCombatHeroInfo.hp.Value, 10);
  51. BuffInfo buffInfo = BuffInfo.GetBuffInfo(10151, -1, 1);
  52. BuffBasic = CombatHeroEntity.BuffControl.AddBuff(CombatHeroEntity, buffInfo);
  53. CombatHeroEntity.CurrCombatHeroInfo.hp=(EncryptionLong)CombatCalculateTool.Instance.GetVlaueRatioForLong(
  54. CombatHeroEntity.MaxCombatHeroInfo.hp.Value, effectValue[0]);
  55. count++;
  56. CombatHeroEntity.CombatHeroSkillControl.This<CombatHeroSkillControl>().AddCommandSkill(this);
  57. // SpecialDotInfo specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("zdpos2");
  58. }
  59. }
  60. }
  61. protected override void ProUseSkill()
  62. {
  63. _finishTimeLineGroupName = "-1";
  64. ActivationTimeLineData("9013");
  65. isActiveFuHuo = true;
  66. }
  67. protected override void ProCombatUpdate(float time)
  68. {
  69. if (!isActiveFuHuo)
  70. {
  71. return;
  72. }
  73. _currTime += time;
  74. if (_currTime > 0.2f)
  75. {
  76. _currTime = 0;
  77. Recover(CombatHeroEntity, CombatHeroEntity.GetMainHotPoin<CombatHeroHitPoint>(), addHp, AttType.Skill);
  78. if (CombatHeroEntity.CurrCombatHeroInfo.hp.Value >= CombatHeroEntity.MaxCombatHeroInfo.hp.Value)
  79. {
  80. CombatHeroEntity.CloseLoopFx();
  81. ActivationTimeLineData("9013_hit");
  82. isActiveFuHuo = false;
  83. float v = effectValue[1];
  84. CombatHeroEntity.CurrCombatHeroInfo.Metal += v;
  85. CombatHeroEntity.CurrCombatHeroInfo.Wood += v;
  86. CombatHeroEntity.CurrCombatHeroInfo.Water += v;
  87. CombatHeroEntity.CurrCombatHeroInfo.Fire += v;
  88. CombatHeroEntity.CurrCombatHeroInfo.Earth += v;
  89. CombatHeroEntity.BuffControl.RemoveBuff(BuffBasic);
  90. BuffBasic = null;
  91. S9014 s9014 = CombatHeroEntity.CombatHeroSkillControl.GetSkillBasic<S9014>();
  92. if (s9014 != null)
  93. {
  94. s9014.isActive = true;
  95. }
  96. ballisticsCount = (int)effectValue[2];
  97. for (int i = 0; i < effectValue[2]; i++)
  98. {
  99. CombatHeroHitPoint combatHeroHitPoint = CombatHeroEntity.CombatAIBasic.currFocusTarget
  100. .GetThis<CombatHeroEntity>()
  101. .GetMainHotPoin<CombatHeroHitPoint>();
  102. BetterList<ILifetCycleHitPoint> currTarget = new BetterList<ILifetCycleHitPoint>();
  103. currTarget.Add(combatHeroHitPoint);
  104. // SpecialDotInfo specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("zdpos" + (i + 2));
  105. float x = CombatCalculateTool.Instance.GetOdd(-2, 2);
  106. float y = CombatCalculateTool.Instance.GetOdd(1, 3);
  107. float z = CombatCalculateTool.Instance.GetOdd(-1, 1);
  108. Vector3 pos = CombatHeroEntity.GameObject.transform.TransformPoint(x, y, z);
  109. ActivationTimeLineData("9013_suipian", currTarget: currTarget,
  110. customizePos: new Vector3[] { pos }, indexCount: i);
  111. }
  112. List<FxAILogicBasic> allFxAi =
  113. CombatController.currActiveCombat.GameTimeLineParticleFactory.GetFxAILogicBasic(
  114. !CombatHeroEntity
  115. .IsEnemy);
  116. for (int i = 0; i < allFxAi.Count; i++)
  117. {
  118. SkillFeaturesData mySkillFeaturesData = GetSkillFeaturesData();
  119. FxParabolaBulletLogic fxParabolaBulletLogic = allFxAi[i] as FxParabolaBulletLogic;
  120. fxParabolaBulletLogic.PengZhuang(mySkillFeaturesData, CombatHeroEntity);
  121. }
  122. SkillPlayFinish();
  123. //完成
  124. }
  125. }
  126. }
  127. protected void ProDefaultTimeLineTrigger_BaoZa(string groupName, CombatHeroHitPoint targetEntity,
  128. ITimelineFxLogic timelineFxLogic,
  129. TriggerData triggerData, ISkillFeatures skillFeatures)
  130. {
  131. float harmBl = effectValue[3];
  132. long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(CombatHeroEntity.CurrCombatHeroInfo.attack.Value,
  133. harmBl);
  134. HarmReturnInfo harmReturnInfo = CombatCalculateTool.Instance.Harm(CombatHeroEntity, targetEntity, v,
  135. AttType.Skill, triggerData,
  136. wuXingType, skillFeatures,
  137. HarmType.Default);
  138. }
  139. }
  140. }