Пример #1
0
    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);
        }
    }
Пример #2
0
    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());
        }
    }
Пример #3
0
    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());
        }
    }
Пример #4
0
    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());
        }
    }