/// <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); }