Beispiel #1
0
        private Character()
        {
            Strength     = new CharacterAbility(this, Enum.Ability.Strength);
            Endurance    = new CharacterAbility(this, Enum.Ability.Endurance);
            Coordination = new CharacterAbility(this, Enum.Ability.Coordination);
            Quickness    = new CharacterAbility(this, Enum.Ability.Quickness);
            Focus        = new CharacterAbility(this, Enum.Ability.Focus);
            Self         = new CharacterAbility(this, Enum.Ability.Self);

            Health  = new CharacterAbility(this, Enum.Ability.Health);
            Stamina = new CharacterAbility(this, Enum.Ability.Stamina);
            Mana    = new CharacterAbility(this, Enum.Ability.Mana);

            abilities.Add(Enum.Ability.Strength, Strength);
            abilities.Add(Enum.Ability.Endurance, Endurance);
            abilities.Add(Enum.Ability.Coordination, Coordination);
            abilities.Add(Enum.Ability.Quickness, Quickness);
            abilities.Add(Enum.Ability.Focus, Focus);
            abilities.Add(Enum.Ability.Self, Self);

            abilities.Add(Enum.Ability.Health, Health);
            abilities.Add(Enum.Ability.Stamina, Stamina);
            abilities.Add(Enum.Ability.Mana, Mana);

            Abilities = new ReadOnlyDictionary <Enum.Ability, CharacterAbility>(abilities);

            // initialize properties collections to reasonable defaults
            InitializeProperties(typeof(Character));

            friends = new List <Friend>();
            Friends = new ReadOnlyCollection <Friend>(friends);

            InitializeCharacterOptions();
            CharacterOptions = new ReadOnlyDictionary <CharacterOption, bool>(characterOptions);
        }
Beispiel #2
0
        private Character()
        {
            Strength     = new CharacterAbility(this, Enum.Ability.Strength);
            Endurance    = new CharacterAbility(this, Enum.Ability.Endurance);
            Coordination = new CharacterAbility(this, Enum.Ability.Coordination);
            Quickness    = new CharacterAbility(this, Enum.Ability.Quickness);
            Focus        = new CharacterAbility(this, Enum.Ability.Focus);
            Self         = new CharacterAbility(this, Enum.Ability.Self);

            Health  = new CharacterAbility(this, Enum.Ability.Health);
            Stamina = new CharacterAbility(this, Enum.Ability.Stamina);
            Mana    = new CharacterAbility(this, Enum.Ability.Mana);
        }
Beispiel #3
0
        /// <summary>
        /// spends the xp on this ability.
        /// </summary>
        /// <remarks>
        ///     Known Issues:
        ///         1. +10 skill throws an exception when it would go outside the bounds of ranks list
        ///         2. the client doesn't increase the "next point" amount properly when using +10
        ///         3. no fireworks for hitting max ranks
        /// </remarks>
        /// <returns>0 if it failed, total investment of the next rank if successful</returns>
        private uint SpendAbilityXp(CharacterAbility ability, uint amount)
        {
            uint result            = 0;
            bool addToCurrentValue = false;
            ExperienceExpenditureChart chart;

            switch (ability.Ability)
            {
            case Enum.Ability.Health:
            case Enum.Ability.Stamina:
            case Enum.Ability.Mana:
                chart             = DatabaseManager.Charts.GetVitalXpChart();
                addToCurrentValue = true;
                break;

            default:
                chart = DatabaseManager.Charts.GetAbilityXpChart();
                break;
            }

            uint rankUps   = 0u;
            uint currentXp = chart.Ranks[Convert.ToInt32(ability.Ranks)].TotalXp;
            uint rank1     = chart.Ranks[Convert.ToInt32(ability.Ranks) + 1].XpFromPreviousRank;
            uint rank10    = chart.Ranks[Convert.ToInt32(ability.Ranks) + 10].TotalXp - chart.Ranks[Convert.ToInt32(ability.Ranks)].TotalXp;

            if (amount == rank1)
            {
                rankUps = 1u;
            }
            else if (amount == rank10)
            {
                rankUps = 10u;
            }

            if (rankUps > 0)
            {
                ability.Current         += addToCurrentValue ? rankUps : 0u;
                ability.Ranks           += rankUps;
                ability.ExperienceSpent += amount;
                this.character.SpendXp(amount);
                result = ability.ExperienceSpent;
            }

            return(result);
        }
Beispiel #4
0
        /// <summary>
        /// spends the xp on this ability.
        /// </summary>
        /// <returns>0 if it failed, total investment of the next rank if successful</returns>
        private uint SpendAbilityXp(CharacterAbility ability, uint amount)
        {
            uint result            = 0;
            bool addToCurrentValue = false;
            ExperienceExpenditureChart chart;

            switch (ability.Ability)
            {
            case Enum.Ability.Health:
            case Enum.Ability.Stamina:
            case Enum.Ability.Mana:
                chart             = DatabaseManager.Charts.GetVitalXpChart();
                addToCurrentValue = true;
                break;

            default:
                chart = DatabaseManager.Charts.GetAbilityXpChart();
                break;
            }

            // do not advance if we cannot spend xp to rank up our skill by 1 point
            if (ability.Ranks >= (chart.Ranks.Count - 1))
            {
                return(result);
            }

            uint rankUps      = 0u;
            uint currentXp    = chart.Ranks[Convert.ToInt32(ability.Ranks)].TotalXp;
            uint rank1        = chart.Ranks[Convert.ToInt32(ability.Ranks) + 1].XpFromPreviousRank;
            uint rank10       = 0u;
            int  rank10Offset = 0;

            if (ability.Ranks + 10 >= (chart.Ranks.Count))
            {
                rank10Offset = 10 - (Convert.ToInt32(ability.Ranks + 10) - (chart.Ranks.Count - 1));
                rank10       = chart.Ranks[Convert.ToInt32(ability.Ranks) + rank10Offset].TotalXp - chart.Ranks[Convert.ToInt32(ability.Ranks)].TotalXp;
            }
            else
            {
                rank10 = chart.Ranks[Convert.ToInt32(ability.Ranks) + 10].TotalXp - chart.Ranks[Convert.ToInt32(ability.Ranks)].TotalXp;
            }

            if (amount == rank1)
            {
                rankUps = 1u;
            }
            else if (amount == rank10)
            {
                if (rank10Offset > 0u)
                {
                    rankUps = Convert.ToUInt32(rank10Offset);
                }
                else
                {
                    rankUps = 10u;
                }
            }

            if (rankUps > 0)
            {
                ability.Current         += addToCurrentValue ? rankUps : 0u;
                ability.Ranks           += rankUps;
                ability.ExperienceSpent += amount;
                this.character.SpendXp(amount);
                result = ability.ExperienceSpent;
            }

            return(result);
        }