S89011.cs 4.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123
  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 S89011 : 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. AddTriggerCallBack("sk1_fashe", Sk1_FaSheProDefaultTimeLineTrigger);
  25. }
  26. protected override void ProUseSkill()
  27. {
  28. ActivationTimeLineData("sk1");
  29. hitCount = 0;
  30. }
  31. protected override void ProDefaultTimeLineTrigger(string groupName, CombatHeroHitPoint targetEntity,
  32. ITimelineFxLogic timelineFxLogic,
  33. TriggerData triggerData)
  34. {
  35. count = 0;
  36. hitCount = 0;
  37. shangShiCount = 0;
  38. currTime = 1;
  39. isTrgger = true;
  40. }
  41. private void Sk1_FaSheProDefaultTimeLineTrigger(string groupName, CombatHeroHitPoint targetEntity,
  42. ITimelineFxLogic timelineFxLogic,
  43. TriggerData triggerData)
  44. {
  45. float hv = effectValue[0];
  46. b_1007 b1007 = targetEntity.combatHeroEntity.BuffControl.GetBuffBasicForType<b_1007>();
  47. if (b1007 != null)
  48. {
  49. b1007.ReduceCount((int)effectValue[5]);
  50. hv += effectValue[6];
  51. }
  52. long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(CombatHeroEntity.CurrCombatHeroInfo.attack.Value,
  53. hv);
  54. HarmReturnInfo harmReturnInfo = CombatCalculateTool.Instance.Harm(CombatHeroEntity, targetEntity, v,
  55. AttType.Skill, triggerData, wuXingType,
  56. HarmType.Default);
  57. if (harmReturnInfo.triggerData.IBarrier == null)
  58. {
  59. hitCount++;
  60. shangShiCount++;
  61. if (hitCount >= effectValue[1])
  62. {
  63. hitCount = 0;
  64. long def = targetEntity.combatHeroEntity.MaxCombatHeroInfo.defense.Value;
  65. long jdef = CombatCalculateTool.Instance.GetVlaueRatioForLong(def, effectValue[2]);
  66. targetEntity.combatHeroEntity.CurrCombatHeroInfo.defense -= jdef;
  67. if (targetEntity.combatHeroEntity.CurrCombatHeroInfo.defense < 0)
  68. {
  69. targetEntity.combatHeroEntity.CurrCombatHeroInfo.defense = (EncryptionLong)0;
  70. }
  71. }
  72. if (shangShiCount >= effectValue[3])
  73. {
  74. shangShiCount = 0;
  75. int vInjury = (int)effectValue[4];
  76. CombatCalculateTool.Instance.ShangSHi(WuXingType.Gold, targetEntity.combatHeroEntity, vInjury);
  77. CombatCalculateTool.Instance.ShangSHi(WuXingType.Wood, targetEntity.combatHeroEntity, vInjury);
  78. CombatCalculateTool.Instance.ShangSHi(WuXingType.Water, targetEntity.combatHeroEntity, vInjury);
  79. CombatCalculateTool.Instance.ShangSHi(WuXingType.Fire, targetEntity.combatHeroEntity, vInjury);
  80. CombatCalculateTool.Instance.ShangSHi(WuXingType.Earth, targetEntity.combatHeroEntity, vInjury);
  81. }
  82. }
  83. }
  84. protected override void ProCombatUpdate(float time)
  85. {
  86. if (!isTrgger)
  87. {
  88. return;
  89. }
  90. currTime += time;
  91. if (currTime > 0.15f)
  92. {
  93. count++;
  94. currTime -= 0.15f;
  95. SpecialDotInfo specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("zdpos1");
  96. Vector3 pos = specialDotInfo.GetWorlPos();
  97. Quaternion quaternion = CombatHeroEntity.GameObject.transform.rotation *
  98. Quaternion.Euler(new Vector3(0, 0, 360f / 10 * count))
  99. ;
  100. Vector3 dir = quaternion * Vector3.up * 3;
  101. ActivationTimeLineData("sk1_fashe", customizePos: new Vector3[] { pos + dir });
  102. if (count > 10)
  103. {
  104. isTrgger = false;
  105. }
  106. }
  107. }
  108. }
  109. }