using Common.Utility.CombatEvent;
using Fort23.Core;
using GameLogic.Combat.Buff;
using GameLogic.Combat.CombatTool;
namespace GameLogic.Combat.Skill
{
    /// 
    /// 毒爆
    ///后方功法击中目标后,如果目标升上有{0}层毒时对目标照成20%伤害,并对周围的敌人照成等额伤害
    /// 
    public class S2014 : SkillBasic
    {
        protected override void ProActiveSkill()
        {
            CombatEventManager.Instance.AddEventListener(CombatEventType.HeroInjured, HeroInjured);
        }
        protected override void ProDispose()
        {
            CombatEventManager.Instance.RemoveEventListener(CombatEventType.HeroInjured, HeroInjured);
        }
        private void HeroInjured(IEventData iEventData)
        {
            HeroInjuredEventData heroInjuredEventData = iEventData as HeroInjuredEventData;
            if (heroInjuredEventData.HarmReturnInfo.source == CombatHeroEntity &&
                heroInjuredEventData.HarmReturnInfo.isHitHero)
            {
                SkillBasic skillBasic = heroInjuredEventData.HarmReturnInfo.triggerData.Source as SkillBasic;
                if (skillBasic != null && IsPassiveActivateSkill(skillBasic))
                {
                    CombatHeroEntity target =
                        heroInjuredEventData.HarmReturnInfo.target.combatHeroEntity as CombatHeroEntity;
                    b_1003 b1003 = target.BuffControl.GetBuffBasicForType();
                    if (b1003 != null && b1003.buffCount >= effectValue[0])
                    {
                        long harm = heroInjuredEventData.HarmReturnInfo.att;
                        long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(harm, effectValue[1]);
                        HarmReturnInfo harmReturnInfo = CombatCalculateTool.Instance.Harm(CombatHeroEntity, target,
                            v,
                            AttType.Skill | AttType.JianJie, triggerData,
                            wuXingType, null,
                            HarmType.Default);
                        long v2 = CombatCalculateTool.Instance.GetVlaueRatioForLong(v, effectValue[2]);
                        CombatHeroEntity[] allHero =
                            CombatController.currActiveCombat.CombatHeroController.GetHero(!CombatHeroEntity.IsEnemy,out int maxCount);
                        if (allHero == null)
                        {
                            return;
                        }
                        for (int i = 0; i < maxCount; i++)
                        {
                            if (allHero[i] == target)
                            {
                                continue;
                            }
                            CombatCalculateTool.Instance.Harm(CombatHeroEntity, allHero[i],
                                v2,
                                AttType.Skill | AttType.JianJie, triggerData,
                                wuXingType, null,
                                HarmType.Default);
                        }
                    }
                }
            }
        }
        protected override void ProUseSkill()
        {
        }
    }
}