S2009.cs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101
  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. int count = (int)effectValue[1];
  71. for (int i = 0; i < count; i++)
  72. {
  73. if (buffBasics.Count <= 0)
  74. {
  75. break;
  76. }
  77. int index = CombatCalculateTool.Instance.GetOdd(0, buffBasics.Count);
  78. BuffBasic buffBasic = buffBasics[index];
  79. CombatHeroEntity.BuffControl.RemoveBuff(buffBasic);
  80. buffBasics.RemoveAt(index);
  81. }
  82. long maxHp = CombatHeroEntity.MaxCombatHeroInfo.hp.Value;
  83. long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(maxHp, effectValue[2]);
  84. Recover(CombatHeroEntity, CombatHeroEntity.GetMainHotPoin<CombatHeroHitPoint>(true), v,
  85. AttType.Skill);
  86. }
  87. }
  88. }
  89. }
  90. }