S2009.cs 3.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. using System.Collections.Generic;
  2. using Common.Utility.CombatEvent;
  3. using Fort23.Core;
  4. using GameLogic.Combat.Buff;
  5. using GameLogic.Combat.CombatTool;
  6. using GameLogic.Combat.Hero;
  7. namespace GameLogic.Combat.Skill
  8. {
  9. /// <summary>
  10. /// 青莲净体诀 前方槽位功法在命中目标时会获得青莲之气,青莲气体达到{0}层时清除自己{1}个随机debuff,并恢复{2}%最大生命
  11. /// 后方槽位也能获得青莲之气
  12. ///如果为相生功法,各自获得的青莲之气数*2
  13. /// </summary>
  14. public class S2009 : SkillBasic
  15. {
  16. private int currCount;
  17. private bool isSymbiosis;
  18. protected override void ProUseSkill()
  19. {
  20. }
  21. protected override void ProInitSkill()
  22. {
  23. currCount = 0;
  24. isSymbiosis = false;
  25. CombatEventManager.Instance.AddEventListener(CombatEventType.HeroInjured, HeroInjured);
  26. }
  27. protected override void ProActiveSkill()
  28. {
  29. if (SelfSkillConfig.PromoteLanPara_1.Length > 1)
  30. {
  31. CombatHeroSkillControl combatHeroSkillControl =
  32. CombatHeroEntity.CombatHeroSkillControl.This<CombatHeroSkillControl>();
  33. SkillBasic skillBasic = combatHeroSkillControl.GetSkillQueueForIndex(index + 1);
  34. SkillBasic skillBasic2 = combatHeroSkillControl.GetSkillQueueForIndex(index - 1);
  35. if (skillBasic != null && skillBasic2 != null)
  36. {
  37. isSymbiosis =
  38. CombatCalculateTool.Instance.IsSymbiosis(skillBasic.wuXingType, skillBasic2.wuXingType);
  39. }
  40. }
  41. }
  42. private void HeroInjured(IEventData eventData)
  43. {
  44. HeroInjuredEventData heroInjuredEventData = eventData as HeroInjuredEventData;
  45. HarmReturnInfo harmReturnInfo = heroInjuredEventData.HarmReturnInfo;
  46. if (harmReturnInfo.source != CombatHeroEntity)
  47. {
  48. return;
  49. }
  50. SkillBasic skillBasic = harmReturnInfo.triggerData.Source as SkillBasic;
  51. if (IsPassiveActivateSkill(skillBasic))
  52. {
  53. object iBarrier = heroInjuredEventData.HarmReturnInfo.triggerData.IBarrier;
  54. if (iBarrier != null)
  55. {
  56. return;
  57. }
  58. if (isSymbiosis)
  59. {
  60. currCount += 2;
  61. }
  62. else
  63. {
  64. currCount++;
  65. }
  66. if (currCount >= effectValue[0]) //满足层数
  67. {
  68. currCount = 0;
  69. List<BuffBasic> buffBasics = CombatHeroEntity.BuffControl.GetBuffBasicForBuffType(2);
  70. float odds = effectValue[1];
  71. float currOdds = CombatCalculateTool.Instance.GetOdd(0, 100);
  72. if (buffBasics.Count > 0 && currOdds <= odds)
  73. {
  74. int index = CombatCalculateTool.Instance.GetOdd(0, buffBasics.Count);
  75. BuffBasic buffBasic = buffBasics[index];
  76. CombatHeroEntity.BuffControl.RemoveBuff(buffBasic);
  77. buffBasics.RemoveAt(index);
  78. }
  79. long maxHp = CombatHeroEntity.CurrCombatHeroInfo.attack.Value;
  80. long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(maxHp, effectValue[2]);
  81. Recover(CombatHeroEntity, CombatHeroEntity.GetMainHotPoin<CombatHeroHitPoint>(true), v,
  82. AttType.Skill);
  83. }
  84. }
  85. }
  86. }
  87. }