예제 #1
0
        /// <summary>
        /// Adds experience points to a skill
        /// </summary>
        /// <returns>0 if it failed, total skill experience if successful</returns>
        private uint SpendSkillXp(CreatureSkill skill, uint amount, bool sendNetworkPropertyUpdate = true)
        {
            uint result = 0u;

            var xpList = GetXPTable(skill.AdvancementClass);

            if (xpList == null)
            {
                return(result);
            }

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

            ushort rankUps = (ushort)(Player.CalcSkillRank(skill.AdvancementClass, skill.ExperienceSpent + amount) - skill.Ranks);

            if (SpendXP(amount, sendNetworkPropertyUpdate))
            {
                if (rankUps > 0)
                {
                    skill.Ranks += rankUps;
                }

                skill.ExperienceSpent += amount;
                result = skill.ExperienceSpent;
            }

            return(result);
        }