private void ResolveExecuteEvent(CombatSkillExecuter executer) { Skill userSkill = executer.ExecutedSkill; // Execute effects on all targets. if (userSkill != null && userSkill.SkillDefinition.Effect != null) { CombatEventDispatcher dispatcher = new CombatEventDispatcher(this); CombatUnit userUnit = executer.Owner; foreach (CombatUnit target in executer.Targets) { CombatEventLog log = new CombatEventLog(userSkill); log.LogValues.Add("user", userUnit.Unit.Profile.Name); log.LogValues.Add("target", target.Unit.Profile.Name); log.LogValues.Add("skillname", userSkill.SkillDefinition.DisplayedName); userSkill.SkillDefinition.Effect.Apply(dispatcher, userUnit, target, log); _CombatEventLog.Add(log); } // Trigger execute event after skill usage. CombatEvent executeEvent = new CombatEvent(executer, CombatEventType.Apply, userUnit); HandleCombatEvent(executeEvent); } }
public void Apply(CombatEventDispatcher resolver, CombatUnit user, CombatUnit target, CombatEventLog log) { int damage = BaseDamage + Mathf.FloorToInt(user.Unit.Status.CharacterLevel * CharacterScaling) + Mathf.FloorToInt(user.Unit.Status.ItemLevel * ItemScaling); if (DamageType == DamageType.Physical && target.CombatStatus.Armor > 0) { int mitigated = Math.Min(damage, target.CombatStatus.Armor); damage -= mitigated; if (log != null) { log.LogValues.Add("mitigated", mitigated.ToString()); } } if (damage > 0 && target.CombatStatus.Absorb > 0) { int absorbed = Math.Min(damage, target.CombatStatus.Absorb); damage -= absorbed; target.CombatStatus.Absorb -= absorbed; if (log != null) { log.LogValues.Add("absorbed", absorbed.ToString()); } } resolver.DealDamage(user.Unit, target.Unit, damage); if (log != null) { log.LogValues.Add("damage", damage.ToString()); } }
public void Apply(CombatEventDispatcher resolver, CombatUnit user, CombatUnit target, CombatEventLog log) { int recover = BaseRecover + Mathf.FloorToInt(user.Unit.Status.CharacterLevel * CharacterScaling) + Mathf.FloorToInt(user.Unit.Status.ItemLevel * ItemScaling); resolver.RecoverLife(user.Unit, target.Unit, recover, false); if (log != null) { log.LogValues.Add("healed", recover.ToString()); } }
public void Apply(CombatEventDispatcher resolver, CombatUnit user, CombatUnit target, CombatEventLog log) { int shield = BaseShield + Mathf.FloorToInt(user.Unit.Status.CharacterLevel * CharacterScaling) + Mathf.FloorToInt(user.Unit.Status.ItemLevel * ItemScaling); if (Type == ShieldType.GrantArmor) { target.CombatStatus.Armor += shield; } else { target.CombatStatus.Absorb += shield; } if (log != null) { log.LogValues.Add("shielded", shield.ToString()); } }