S9001.cs 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150
  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. ShangSHi(WuXingType.Gold, CombatHeroEntity, targetEntity.combatHeroEntity, vInjury);
  78. ShangSHi(WuXingType.Wood, CombatHeroEntity, targetEntity.combatHeroEntity, vInjury);
  79. ShangSHi(WuXingType.Water, CombatHeroEntity, targetEntity.combatHeroEntity, vInjury);
  80. ShangSHi(WuXingType.Fire, CombatHeroEntity, targetEntity.combatHeroEntity, vInjury);
  81. ShangSHi(WuXingType.Earth, CombatHeroEntity, targetEntity.combatHeroEntity, vInjury);
  82. }
  83. }
  84. }
  85. public void ShangSHi(WuXingType wuXingType, CombatHeroEntity source, ShowBaiscEntity target, int vInjury)
  86. {
  87. BuffInfo buffInfo = null;
  88. switch (wuXingType)
  89. {
  90. case WuXingType.Gold:
  91. buffInfo = BuffInfo.GetBuffInfo(10291, vInjury, this);
  92. break;
  93. case WuXingType.Fire:
  94. buffInfo = BuffInfo.GetBuffInfo(10321, vInjury, this);
  95. break;
  96. case WuXingType.Wood:
  97. buffInfo = BuffInfo.GetBuffInfo(10301, vInjury, this);
  98. break;
  99. case WuXingType.Earth:
  100. buffInfo = BuffInfo.GetBuffInfo(10331, vInjury, this);
  101. break;
  102. case WuXingType.Water:
  103. buffInfo = BuffInfo.GetBuffInfo(10311, vInjury, this);
  104. break;
  105. }
  106. target.BuffControl.AddBuff(source, buffInfo);
  107. }
  108. protected override void ProCombatUpdate(float time)
  109. {
  110. if (!isTrgger)
  111. {
  112. return;
  113. }
  114. currTime += time;
  115. if (currTime > 0.15f)
  116. {
  117. count++;
  118. currTime -= 0.15f;
  119. SpecialDotInfo specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("zdpos1");
  120. Vector3 pos = specialDotInfo.GetWorlPos();
  121. Quaternion quaternion = CombatHeroEntity.GameObject.transform.rotation *
  122. Quaternion.Euler(new Vector3(0, 0, 360f / 10 * count))
  123. ;
  124. Vector3 dir = quaternion * Vector3.up * 3;
  125. ActivationTimeLineData("sk1_fashe", customizePos: new Vector3[] { pos + dir });
  126. if (count > 10)
  127. {
  128. isTrgger = false;
  129. }
  130. }
  131. }
  132. }
  133. }