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) => { Unit owner = skillSender.caster; AttackComponent attacker = owner.GetComponent(); bool isCrit = false; ModifierSkillSender modifierSkillSender = default; ModifierLogic modifierLogic = null; BattleHelper.Calculate(SkillDamageType.护盾治疗, skillSender, target, skillOption.treatCalculate_Self, skillOption.treatCalculate_Target, out BallisticData data); float finalValue = data.value; if (skillSender is ModifierSkillSender _modifierSkillSender) { modifierLogic = _modifierSkillSender.modifierLogic; if (modifierLogic != null) { finalValue *= modifierLogic.overlay; isCrit = skillOption.isCritEvent && data.isCrit; if (isCrit) modifierSkillSender = _modifierSkillSender; } } data.ChangeValue(finalValue); attacker.TreatTarget(target, data, skillSender); if (isCrit) { 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); } } }); } } }