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
{
///
/// 青莲净体诀 前方槽位功法在命中目标时会获得青莲之气,青莲气体达到{0}层时清除自己{1}个随机debuff,并恢复{2}%最大生命
/// 后方槽位也能获得青莲之气
///如果为相生功法,各自获得的青莲之气数*2
///
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();
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 buffBasics = CombatHeroEntity.BuffControl.GetBuffBasicForBuffType(2);
int count = (int)effectValue[1];
for (int i = 0; i < count; i++)
{
if (buffBasics.Count <= 0)
{
break;
}
int index = CombatCalculateTool.Instance.GetOdd(0, buffBasics.Count);
BuffBasic buffBasic = buffBasics[index];
CombatHeroEntity.BuffControl.RemoveBuff(buffBasic);
buffBasics.RemoveAt(index);
}
long maxHp = CombatHeroEntity.MaxCombatHeroInfo.hp.Value;
long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(maxHp, effectValue[2]);
Recover(CombatHeroEntity, CombatHeroEntity.GetMainHotPoin(true), v,
AttType.Skill);
}
}
}
}
}