Exemplo n.º 1
0
        public static bool CanLevelUp(this Skill skill, IPlayerCharacterData character, short level)
        {
            if (skill == null || character == null || !character.GetDatabase().CacheSkillLevels.ContainsKey(skill))
            {
                return(false);
            }

            // Check is it pass attribute requirement or not
            Dictionary <Attribute, short> attributeAmountsDict    = character.GetAttributes(false, false);
            Dictionary <Attribute, short> requireAttributeAmounts = skill.CacheRequireAttributeAmounts;

            foreach (KeyValuePair <Attribute, short> requireAttributeAmount in requireAttributeAmounts)
            {
                if (!attributeAmountsDict.ContainsKey(requireAttributeAmount.Key) ||
                    attributeAmountsDict[requireAttributeAmount.Key] < requireAttributeAmount.Value)
                {
                    return(false);
                }
            }
            // Check is it pass skill level requirement or not
            Dictionary <Skill, int> skillLevelsDict = new Dictionary <Skill, int>();

            foreach (CharacterSkill skillLevel in character.Skills)
            {
                if (skillLevel.GetSkill() == null)
                {
                    continue;
                }
                skillLevelsDict[skillLevel.GetSkill()] = skillLevel.level;
            }
            Dictionary <Skill, short> requireSkillLevels = skill.CacheRequireSkillLevels;

            foreach (KeyValuePair <Skill, short> requireSkillLevel in requireSkillLevels)
            {
                if (!skillLevelsDict.ContainsKey(requireSkillLevel.Key) ||
                    skillLevelsDict[requireSkillLevel.Key] < requireSkillLevel.Value)
                {
                    return(false);
                }
            }
            // Check another requirements
            return(character.SkillPoint > 0 && level < skill.maxLevel && character.Level >= skill.GetRequireCharacterLevel(level));
        }