12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 |
- using System.Collections.Generic;
- using Common.Utility.CombatEvent;
- using Fort23.Core;
- using GameLogic.Combat.Buff;
- using GameLogic.Combat.CombatTool;
- using GameLogic.Combat.Hero;
- namespace GameLogic.Combat.Skill
- {
- /// <summary>
- /// 青莲净体诀 前方槽位功法在命中目标时会获得青莲之气,青莲气体达到{0}层时清除自己{1}个随机debuff,并恢复{2}%最大生命
- /// 后方槽位也能获得青莲之气
- ///如果为相生功法,各自获得的青莲之气数*2
- /// </summary>
- public class S2009 : SkillBasic
- {
- private int currCount;
- private bool isSymbiosis;
- protected override void ProUseSkill()
- {
- }
- protected override void ProInitSkill()
- {
- currCount = 0;
- isSymbiosis = false;
- CombatEventManager.Instance.AddEventListener(CombatEventType.HeroInjured, HeroInjured);
- }
- protected override void ProActiveSkill()
- {
- if (SelfSkillConfig.PromoteLanPara_1.Length > 1)
- {
- CombatHeroSkillControl combatHeroSkillControl =
- CombatHeroEntity.CombatHeroSkillControl.This<CombatHeroSkillControl>();
- SkillBasic skillBasic = combatHeroSkillControl.GetSkillQueueForIndex(index + 1);
- SkillBasic skillBasic2 = combatHeroSkillControl.GetSkillQueueForIndex(index - 1);
- if (skillBasic != null && skillBasic2 != null)
- {
- isSymbiosis =
- CombatCalculateTool.Instance.IsSymbiosis(skillBasic.wuXingType, skillBasic2.wuXingType);
- }
- }
- }
- private void HeroInjured(IEventData eventData)
- {
- HeroInjuredEventData heroInjuredEventData = eventData as HeroInjuredEventData;
- HarmReturnInfo harmReturnInfo = heroInjuredEventData.HarmReturnInfo;
- if (harmReturnInfo.source != CombatHeroEntity)
- {
- return;
- }
- SkillBasic skillBasic = harmReturnInfo.triggerData.Source as SkillBasic;
- if (IsPassiveActivateSkill(skillBasic))
- {
- object iBarrier = heroInjuredEventData.HarmReturnInfo.triggerData.IBarrier;
- if (iBarrier != null)
- {
- return;
- }
- if (isSymbiosis)
- {
- currCount += 2;
- }
- else
- {
- currCount++;
- }
- if (currCount >= effectValue[0]) //满足层数
- {
- currCount = 0;
- List<BuffBasic> buffBasics = CombatHeroEntity.BuffControl.GetBuffBasicForBuffType(2);
- float odds = effectValue[1];
- float currOdds = CombatCalculateTool.Instance.GetOdd(0, 100);
- if (buffBasics.Count > 0 && currOdds <= odds)
- {
- int index = CombatCalculateTool.Instance.GetOdd(0, buffBasics.Count);
- BuffBasic buffBasic = buffBasics[index];
- CombatHeroEntity.BuffControl.RemoveBuff(buffBasic);
- buffBasics.RemoveAt(index);
- }
- long maxHp = CombatHeroEntity.CurrCombatHeroInfo.attack.Value;
- long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(maxHp, effectValue[2]);
- Recover(CombatHeroEntity, CombatHeroEntity.GetMainHotPoin<CombatHeroHitPoint>(true), v,
- AttType.Skill);
- }
- }
- }
- }
- }
|