2021-04-11 19:50:39 +08:00
|
|
|
|
using System.Collections.Generic;
|
|
|
|
|
using Cal;
|
2021-04-08 20:09:59 +08:00
|
|
|
|
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<SkillOption_治愈>();
|
|
|
|
|
SelectTargetHelper.GetTarget(skillOption.selectTarget, skillSender, (target, skillSender) =>
|
|
|
|
|
{
|
2021-04-11 19:50:39 +08:00
|
|
|
|
Unit owner = skillSender.caster;
|
|
|
|
|
AttackComponent attacker = owner.GetComponent<AttackComponent>();
|
2021-04-08 20:09:59 +08:00
|
|
|
|
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;
|
2022-07-26 00:51:17 +08:00
|
|
|
|
float treatMultipe = 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)
|
|
|
|
|
{
|
2022-11-26 23:20:12 +08:00
|
|
|
|
treatMultipe = 0.40f;
|
2022-07-26 00:51:17 +08:00
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2022-11-26 23:20:12 +08:00
|
|
|
|
finalValue *= treatMultipe;
|
2021-04-08 20:09:59 +08:00
|
|
|
|
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)
|
|
|
|
|
{
|
2021-04-11 19:50:39 +08:00
|
|
|
|
Dictionary<ModifierEventCondition, SkillOptionBase[]> dic = modifierLogic.modifierConfig.modifierEventDic;
|
2021-04-08 20:09:59 +08:00
|
|
|
|
if (dic != null &&
|
2021-04-11 19:50:39 +08:00
|
|
|
|
dic.TryGetValue(ModifierEventCondition.当拥有modifier的单位暴击时, out SkillOptionBase[] optionBaseList1))
|
|
|
|
|
foreach (SkillOptionBase item in optionBaseList1)
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
2021-04-11 19:50:39 +08:00
|
|
|
|
SkillOptionLogicBase skillOptionLogicBase = SkillOptionFactory.AcquireSkillOptionLogic(item);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
skillOptionLogicBase.HandleEvent(modifierSkillSender);
|
|
|
|
|
}
|
|
|
|
|
if (dic != null &&
|
2021-04-11 19:50:39 +08:00
|
|
|
|
dic.TryGetValue(ModifierEventCondition.当拥有modifier的单位被暴击时, out SkillOptionBase[] optionBaseList2))
|
|
|
|
|
foreach (SkillOptionBase item in optionBaseList2)
|
2021-04-08 20:09:59 +08:00
|
|
|
|
{
|
2021-04-11 19:50:39 +08:00
|
|
|
|
SkillOptionLogicBase skillOptionLogicBase = SkillOptionFactory.AcquireSkillOptionLogic(item);
|
2021-04-08 20:09:59 +08:00
|
|
|
|
skillOptionLogicBase.HandleEvent(modifierSkillSender);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
});
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|