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 { /// /// 霜域新生(被动,只会生效一次) 凤凰在伤害还剩10%的时候会触发此技能, /// 凤凰身体冰冻住并有一层寒气笼罩,期间凤凰不在受到任何伤害,并慢慢回血, /// 直到恢复满,持续5秒左右吧,恢复满后凤凰所有灵根增加{0}。冰块爆开, /// 生成一个冲击波,对当前场上所有的弹道照成当前强度的强度攻击(强度不够的弹道会被摧毁),生成{1}枚冰锥冲向玩家,对玩家照成{2}伤害 /// 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().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(), 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(); if (s9014 != null) { s9014.isActive = true; } ballisticsCount = (int)effectValue[2]; for (int i = 0; i < effectValue[2]; i++) { CombatHeroHitPoint combatHeroHitPoint = CombatHeroEntity.CombatAIBasic.currFocusTarget .GetThis() .GetMainHotPoin(); BetterList currTarget = new BetterList(); 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 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); } } }