| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151 | using System.Collections.Generic;using CombatLibrary.CombatLibrary.CombatCore.CustomizeTimeLogic.FxLogic;using Common.Combat.FxAILogic;using Common.Utility.CombatEvent;using Fort23.Core;using GameLogic.Combat.Buff;using GameLogic.Combat.CombatTool;using GameLogic.Combat.Hero;using OfficeOpenXml.FormulaParsing.Excel.Functions.Logical;using UnityEngine;using UTool.CustomizeTimeLogic.FxLogic.TimeLineEventinterface;namespace GameLogic.Combat.Skill{    /// <summary>    /// 霜域新生(被动,只会生效一次) 凤凰在伤害还剩10%的时候会触发此技能,    /// 凤凰身体冰冻住并有一层寒气笼罩,期间凤凰不在受到任何伤害,并慢慢回血,    /// 直到恢复满,持续5秒左右吧,恢复满后凤凰所有灵根增加{0}。冰块爆开,    /// 生成一个冲击波,对当前场上所有的弹道照成当前强度的强度攻击(强度不够的弹道会被摧毁),生成{1}枚冰锥冲向玩家,对玩家照成{2}伤害    /// </summary>    public class S9013 : SkillBasic    {        protected BuffBasic BuffBasic;        private bool isActiveFuHuo;        private int count;        private float _currTime;        protected long addHp;        protected override void ProActiveSkill()        {            count = 0;            isActiveFuHuo = false;            CombatEventManager.Instance.AddEventListener(CombatEventType.HeroInjured, HeroInjured);        }        private void HeroInjured(IEventData data)        {            if (count > 0)            {                return;            }            HeroInjuredEventData heroInjuredEventData = data as HeroInjuredEventData;            if (heroInjuredEventData.HarmReturnInfo.target.combatHeroEntity == CombatHeroEntity)            {                float bl = CombatHeroEntity.CurrCombatHeroInfo.hp.Value * 1.0f /                           CombatHeroEntity.MaxCombatHeroInfo.hp.Value;                if (bl * 100 < effectValue[0])                {                    addHp = CombatCalculateTool.Instance.GetVlaueRatioForLong(                        CombatHeroEntity.MaxCombatHeroInfo.hp.Value, 10);                    BuffInfo buffInfo = BuffInfo.GetBuffInfo(10151, -1, 1);                    BuffBasic = CombatHeroEntity.BuffControl.AddBuff(CombatHeroEntity, buffInfo);                    isActiveFuHuo = true;                    count++;                    CombatHeroEntity.CombatHeroSkillControl.This<CombatHeroSkillControl>().AddCommandSkill(this);                    // SpecialDotInfo specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("zdpos2");                }            }        }        protected override void ProUseSkill()        {            _finishTimeLineGroupName = "-1";            ActivationTimeLineData("9013");        }        protected override void ProCombatUpdate(float time)        {            if (!isActiveFuHuo)            {                return;            }            _currTime += time;            if (_currTime > 0.5f)            {                Recover(CombatHeroEntity, CombatHeroEntity.GetMainHotPoin<CombatHeroHitPoint>(), addHp, AttType.Skill);                if (CombatHeroEntity.CurrCombatHeroInfo.hp.Value >= CombatHeroEntity.MaxCombatHeroInfo.hp.Value)                {                    CombatHeroEntity.CloseLoopFx();                    ActivationTimeLineData("9013_hit");                    isActiveFuHuo = false;                    float v = effectValue[1];                    CombatHeroEntity.CurrCombatHeroInfo.Metal += v;                    CombatHeroEntity.CurrCombatHeroInfo.Wood += v;                    CombatHeroEntity.CurrCombatHeroInfo.Water += v;                    CombatHeroEntity.CurrCombatHeroInfo.Fire += v;                    CombatHeroEntity.CurrCombatHeroInfo.Earth += v;                    S9014 s9014 = CombatHeroEntity.CombatHeroSkillControl.GetSkillBasic<S9014>();                    if (s9014 != null)                    {                        s9014.isActive = true;                    }                    ballisticsCount = (int)effectValue[2];                    for (int i = 0; i < effectValue[2]; i++)                    {                        CombatHeroHitPoint combatHeroHitPoint = CombatHeroEntity.CombatAIBasic.currFocusTarget                            .GetThis<CombatHeroEntity>()                            .GetMainHotPoin<CombatHeroHitPoint>();                        BetterList<ILifetCycleHitPoint> currTarget = new BetterList<ILifetCycleHitPoint>();                        currTarget.Add(combatHeroHitPoint);                        // SpecialDotInfo specialDotInfo = CombatHeroEntity.GetSpecialDotInfo("zdpos" + (i + 2));                        float x = CombatCalculateTool.Instance.GetOdd(-2, 2);                        float y = CombatCalculateTool.Instance.GetOdd(1, 3);                        float z = CombatCalculateTool.Instance.GetOdd(-1, 1);                        Vector3 pos = CombatHeroEntity.GameObject.transform.TransformPoint(x, y, z);                        ActivationTimeLineData("9013_suipian", currTarget: currTarget,                            customizePos: new Vector3[] { pos }, indexCount: i);                    }                    List<FxAILogicBasic> allFxAi =                        CombatController.currActiveCombat.GameTimeLineParticleFactory.GetFxAILogicBasic(                            !CombatHeroEntity                                .IsEnemy);                    for (int i = 0; i < allFxAi.Count; i++)                    {                        SkillFeaturesData mySkillFeaturesData = GetSkillFeaturesData();                        FxParabolaBulletLogic fxParabolaBulletLogic = allFxAi[i] as FxParabolaBulletLogic;                        fxParabolaBulletLogic.PengZhuang(mySkillFeaturesData, CombatHeroEntity);                    }                    SkillPlayFinish();                    //完成                }            }        }        protected void ProDefaultTimeLineTrigger_BaoZa(string groupName, CombatHeroHitPoint targetEntity,            ITimelineFxLogic timelineFxLogic,            TriggerData triggerData, ISkillFeatures skillFeatures)        {            float harmBl = effectValue[3];            long v = CombatCalculateTool.Instance.GetVlaueRatioForLong(CombatHeroEntity.CurrCombatHeroInfo.attack.Value,                harmBl);            HarmReturnInfo harmReturnInfo = CombatCalculateTool.Instance.Harm(CombatHeroEntity, targetEntity, v,                AttType.Skill, triggerData,                wuXingType, skillFeatures,                HarmType.Default);        }    }}
 |