Esempio n. 1
0
    public void UseAbility(string p_ability)
    {
        AbilityWrapper wrapper = m_abilities.Find(a => a.AbilityName == p_ability);

        if (wrapper == null && wrapper.Learned)
        {
            return;
        }

        Ability ability = wrapper.GetAbility();

        int cost         = ability.m_manaCosts.Find(m => m.TrainingLevel == wrapper.TrainingLevel).Value;
        int leftoverMana = m_stats.GetStat(Stats.MP) - cost;

        if (leftoverMana >= 0 && wrapper.Use())
        {
            m_stats.AddModifier(Stats.MP, -cost, 0);
            ability.Use(this, wrapper.TrainingLevel);

            if (wrapper.ChainedAbilities != null && wrapper.ChainedAbilities.Count > 0)
            {
                foreach (string chain in wrapper.ChainedAbilities)
                {
                    AbilityWrapper chainWrapper = m_abilities.Find(a => a.AbilityName == chain);

                    if (chainWrapper == null && chainWrapper.Learned)
                    {
                        continue;
                    }

                    Ability chainAbility = Ability.Get(chain);

                    cost         = chainAbility.m_manaCosts.Find(m => m.TrainingLevel == chainWrapper.TrainingLevel).Value;
                    leftoverMana = m_stats.GetStat(Stats.MP) - cost;

                    if (leftoverMana >= 0 && chainWrapper.Use())
                    {
                        m_stats.AddModifier(Stats.MP, -cost, 0);
                        chainAbility.Use(this, chainWrapper.TrainingLevel);
                    }
                }
            }
        }
    }