using System.Collections.Generic; using Cal; namespace ET { public class SkillOptionLogic_护盾 : SkillOptionLogicBase { public override SkillOptionType skillOptionType => SkillOptionType.护盾; public override SkillOptionBase skillOptionBase { get; set; } SkillOption_护盾 skillOption; public override void HandleEvent(ISkillSender skillSender) { skillOption = skillOptionBase.As(); SelectTargetHelper.GetTarget(skillOption.selectTarget, skillSender, (target, skillSender) => { if (!(skillSender is ModifierSkillSender modifierSkillSender)) return; ModifierLogic modifierLogic = modifierSkillSender.modifierLogic; if (modifierLogic == null) return; BattleHelper.Calculate(SkillDamageType.护盾治疗, skillSender, target, skillOption.treatCalculate_Self, skillOption.treatCalculate_Target, out BallisticData data); Unit owner = skillSender.skillLogic.owner; float shieldMultipe = 1; if (owner != null) { var copyBattle= BattleMgrCompnent.Instance.GetBattle(owner); if (copyBattle == null) { Log.Info($"battle is null Id:{owner.Id} battleId:{owner.BattleId}"); } else { if (copyBattle.battleType == BattleType.PersonalPvp) { shieldMultipe = 0.1f; } } } modifierLogic.shield = MathHelper.RoundToInt(data.value*shieldMultipe); if (data.isCrit && skillOption.isCritEvent) { Dictionary dic = modifierLogic.modifierConfig.modifierEventDic; if (dic != null && dic.TryGetValue(ModifierEventCondition.当拥有modifier的单位暴击时, out SkillOptionBase[] optionBaseList1)) foreach (SkillOptionBase item in optionBaseList1) { SkillOptionLogicBase skillOptionLogicBase = SkillOptionFactory.AcquireSkillOptionLogic(item); modifierLogic.skillLogic.skillOptionLogics.Add(skillOptionLogicBase); skillOptionLogicBase.HandleEvent(modifierSkillSender); } if (dic != null && dic.TryGetValue(ModifierEventCondition.当拥有modifier的单位被暴击时, out SkillOptionBase[] optionBaseList2)) foreach (SkillOptionBase item in optionBaseList2) { SkillOptionLogicBase skillOptionLogicBase = SkillOptionFactory.AcquireSkillOptionLogic(item); modifierLogic.skillLogic.skillOptionLogics.Add(skillOptionLogicBase); skillOptionLogicBase.HandleEvent(modifierSkillSender); } } }); } } }