S9001.cs 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124
  1. using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;
  2. using Core.Utility;
  3. using GameLogic.Combat.Buff;
  4. using GameLogic.Combat.CombatTool;
  5. using GameLogic.Combat.Hero;
  6. using GameLogic.Player;
  7. using UnityEngine;
  8. using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;
  9. namespace GameLogic.Combat.Skill
  10. {
  11. /// <summary>
  12. /// 伤害很高)(前摇时间长):很多剑从远处汇聚到boss周围,然后以一字行快速贯穿目标,每命中{0}次防御削减{1}%,{2}次所有伤势+{3}
  13. /// ,如果目标上有剑毅,每丙剑消耗{4}层剑毅让敌人受到{5}额外的伤害
  14. /// </summary>
  15. public class S9001 : SkillBasic
  16. {
  17. private bool isTrgger;
  18. private float currTime;
  19. private int count;
  20. private int hitCount;
  21. private int shangShiCount;
  22. protected override void ProInitSkill()
  23. {
  24. ballisticsCount = (int)10;
  25. AddTriggerCallBack("sk1_fashe", Sk1_FaSheProDefaultTimeLineTrigger);
  26. }
  27. protected override void ProUseSkill()
  28. {
  29. ActivationTimeLineData("sk1");
  30. hitCount = 0;
  31. }
  32. protected override void ProDefaultTimeLineTrigger(string groupName, CombatHeroHitPoint targetEntity,
  33. ITimelineFxLogic timelineFxLogic,
  34. TriggerData triggerData,ISkillFeatures skillFeatures)
  35. {
  36. count = 0;
  37. hitCount = 0;
  38. shangShiCount = 0;
  39. currTime = 1;
  40. isTrgger = true;
  41. }
  42. private void Sk1_FaSheProDefaultTimeLineTrigger(string groupName, CombatHeroHitPoint targetEntity,
  43. ITimelineFxLogic timelineFxLogic,
  44. TriggerData triggerData,ISkillFeatures skillFeatures)
  45. {
  46. float hv = effectValue[0];
  47. b_1007 b1007 = targetEntity.combatHeroEntity.BuffControl.GetBuffBasicForType<b_1007>();
  48. if (b1007 != null)
  49. {
  50. b1007.ReduceCount((int)effectValue[5]);
  51. hv += effectValue[6];
  52. }
  53. long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(CombatHeroEntity.CurrCombatHeroInfo.attack.Value,
  54. hv);
  55. HarmReturnInfo harmReturnInfo = CombatCalculateTool.Instance.Harm(CombatHeroEntity, targetEntity, v,
  56. AttType.Skill, triggerData, wuXingType,skillFeatures,
  57. HarmType.Default);
  58. if (harmReturnInfo.triggerData.IBarrier == null)
  59. {
  60. hitCount++;
  61. shangShiCount++;
  62. if (hitCount >= effectValue[1])
  63. {
  64. hitCount = 0;
  65. long def = targetEntity.combatHeroEntity.MaxCombatHeroInfo.defense.Value;
  66. long jdef = CombatCalculateTool.Instance.GetVlaueRatioForLong(def, effectValue[2]);
  67. targetEntity.combatHeroEntity.CurrCombatHeroInfo.defense -= jdef;
  68. if (targetEntity.combatHeroEntity.CurrCombatHeroInfo.defense < 0)
  69. {
  70. targetEntity.combatHeroEntity.CurrCombatHeroInfo.defense = (EncryptionLong)0;
  71. }
  72. }
  73. if (shangShiCount >= effectValue[3])
  74. {
  75. shangShiCount = 0;
  76. int vInjury = (int)effectValue[4];
  77. CombatCalculateTool.Instance.ShangSHi(WuXingType.Gold, targetEntity.combatHeroEntity, vInjury);
  78. CombatCalculateTool.Instance.ShangSHi(WuXingType.Wood, targetEntity.combatHeroEntity, vInjury);
  79. CombatCalculateTool.Instance.ShangSHi(WuXingType.Water, targetEntity.combatHeroEntity, vInjury);
  80. CombatCalculateTool.Instance.ShangSHi(WuXingType.Fire, targetEntity.combatHeroEntity, vInjury);
  81. CombatCalculateTool.Instance.ShangSHi(WuXingType.Earth, targetEntity.combatHeroEntity, vInjury);
  82. }
  83. }
  84. }
  85. protected override void ProCombatUpdate(float time)
  86. {
  87. if (!isTrgger)
  88. {
  89. return;
  90. }
  91. currTime += time;
  92. if (currTime > 0.15f)
  93. {
  94. count++;
  95. currTime -= 0.15f;
  96. SpecialDotInfo specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("zdpos1");
  97. Vector3 pos = specialDotInfo.GetWorlPos();
  98. Quaternion quaternion = CombatHeroEntity.GameObject.transform.rotation *
  99. Quaternion.Euler(new Vector3(0, 0, 360f / 10 * count))
  100. ;
  101. Vector3 dir = quaternion * Vector3.up * 3;
  102. ActivationTimeLineData("sk1_fashe", customizePos: new Vector3[] { pos + dir });
  103. if (count > 10)
  104. {
  105. isTrgger = false;
  106. }
  107. }
  108. }
  109. }
  110. }