예제 #1
0
        /// <summary>
        /// Initialize static skills.
        /// </summary>
        internal static void Load()
        {
            SkillsDatafile datafile = Util.DeserializeDatafile<SkillsDatafile>(DatafileConstants.SkillsDatafile,
                Util.LoadXslt(Properties.Resources.DatafilesXSLT));

            // Fetch deserialized data
            s_arrayIndicesCount = 0;
            List<Collection<SerializableSkillPrerequisite>> prereqs = new List<Collection<SerializableSkillPrerequisite>>();
            foreach (SerializableSkillGroup srcGroup in datafile.SkillGroups)
            {
                StaticSkillGroup group = new StaticSkillGroup(srcGroup, ref s_arrayIndicesCount);
                s_skillGroupsByID[@group.ID] = @group;

                // Store skills
                foreach (StaticSkill skill in @group)
                {
                    s_skillsByID[skill.ID] = skill;
                    s_skillsByName[skill.Name] = skill;
                }

                // Store prereqs
                prereqs.AddRange(srcGroup.Skills.Select(serialSkill => serialSkill.SkillPrerequisites));
            }

            // Complete initialization
            s_skills = new StaticSkill[s_arrayIndicesCount];
            foreach (StaticSkill staticSkill in s_skillsByID.Values)
            {
                staticSkill.CompleteInitialization(prereqs[staticSkill.ArrayIndex]);
                s_skills[staticSkill.ArrayIndex] = staticSkill;
            }

            GlobalDatafileCollection.OnDatafileLoaded();
        }
예제 #2
0
        /// <summary>
        /// Constructor, only used by SkillCollection.
        /// </summary>
        /// <param name="character"></param>
        /// <param name="src"></param>
        internal SkillGroup(Character character, StaticSkillGroup src)
        {
            StaticData = src;

            foreach (StaticSkill srcSkill in src)
            {
                Items[srcSkill.Name] = new Skill(character, this, srcSkill);
            }
        }
예제 #3
0
        /// <summary>
        /// Constructor, only used by SkillCollection
        /// </summary>
        /// <param name="character"></param>
        /// <param name="group"></param>
        internal SkillGroup(Character character, StaticSkillGroup src)
        {
            m_group     = src;
            m_character = character;

            foreach (var srcSkill in src)
            {
                m_items[srcSkill.Name] = new Skill(character, this, srcSkill);
            }
        }
예제 #4
0
        private static TimeSpan GetSkillGroupDuration(StaticSkillGroup group, IEnumerable <PlanEntry> entries, Dictionary <StaticSkillGroup, TimeSpan> skillGroupsDurations)
        {
            if (!skillGroupsDurations.ContainsKey(group))
            {
                TimeSpan time = TimeSpan.Zero;
                foreach (var entry in entries)
                {
                    time += entry.TrainingTime;
                }
                skillGroupsDurations[group] = time;
            }

            return(skillGroupsDurations[group]);
        }
예제 #5
0
 /// <summary>
 /// Deserialization constructor from datafiles.
 /// </summary>
 /// <param name="group"></param>
 /// <param name="src"></param>
 /// <param name="arrayIndex"></param>
 internal StaticSkill(StaticSkillGroup group, SerializableSkill src, int arrayIndex)
 {
     m_id = src.ID;
     m_cost = src.Cost;
     m_rank = src.Rank;
     m_public = src.Public;
     m_name = src.Name;
     m_description = src.Description;
     m_descriptionNL = null;
     m_primaryAttribute = src.PrimaryAttribute;
     m_secondaryAttribute = src.SecondaryAttribute;
     m_trainableOnTrialAccount = src.CanTrainOnTrial;
     m_arrayIndex = arrayIndex;
     m_group = group;
 }
예제 #6
0
        /// <summary>
        /// Gets the duration of the skill group.
        /// </summary>
        /// <param name="group">The group.</param>
        /// <param name="entries">The entries.</param>
        /// <param name="skillGroupsDurations">The skill groups durations.</param>
        /// <returns></returns>
        private static TimeSpan GetSkillGroupDuration(StaticSkillGroup group, IEnumerable <PlanEntry> entries,
                                                      IDictionary <StaticSkillGroup, TimeSpan> skillGroupsDurations)
        {
            if (skillGroupsDurations.ContainsKey(group))
            {
                return(skillGroupsDurations[group]);
            }

            TimeSpan time = entries.Where(x => x.Skill.Group == group).Aggregate(TimeSpan.Zero,
                                                                                 (current, entry) =>
                                                                                 current + entry.TrainingTime);

            skillGroupsDurations[group] = time;

            return(skillGroupsDurations[group]);
        }
예제 #7
0
 /// <summary>
 /// Deserialization constructor from datafiles.
 /// </summary>
 /// <param name="group"></param>
 /// <param name="src"></param>
 /// <param name="arrayIndex"></param>
 internal StaticSkill(StaticSkillGroup group, SerializableSkill src, int arrayIndex)
 {
     ID = src.ID;
     Cost = src.Cost;
     Rank = src.Rank;
     IsPublic = src.Public;
     Name = src.Name;
     Description = src.Description;
     PrimaryAttribute = src.PrimaryAttribute;
     SecondaryAttribute = src.SecondaryAttribute;
     IsTrainableOnTrialAccount = src.CanTrainOnTrial;
     ArrayIndex = arrayIndex;
     Group = group;
     Prerequisites = new Collection<StaticSkillLevel>();
     FormattedCost = Cost.ToNumericString(0);
 }
예제 #8
0
        /// <summary>
        /// Gets the duration of the skill group.
        /// </summary>
        /// <param name="group">The group.</param>
        /// <param name="entries">The entries.</param>
        /// <param name="skillGroupsDurations">The skill groups durations.</param>
        /// <returns></returns>
        private static TimeSpan GetSkillGroupDuration(StaticSkillGroup group, IEnumerable<PlanEntry> entries,
            IDictionary<StaticSkillGroup, TimeSpan> skillGroupsDurations)
        {
            if (skillGroupsDurations.ContainsKey(group))
                return skillGroupsDurations[group];

            TimeSpan time = entries.Where(x => x.Skill.Group == group).Aggregate(TimeSpan.Zero,
                (current, entry) =>
                    current + entry.TrainingTime);
            skillGroupsDurations[group] = time;

            return skillGroupsDurations[group];
        }
예제 #9
0
 /// <summary>
 /// Constructor, used to build an non-character SkillGroup, only used by SkillCollection.
 /// </summary>
 /// <param name="src">The source.</param>
 internal SkillGroup(StaticSkillGroup src)
     : this(null, src)
 {
 }
예제 #10
0
 private static TimeSpan GetSkillGroupDuration(StaticSkillGroup group, IEnumerable<PlanEntry> entries, Dictionary<StaticSkillGroup, TimeSpan> skillGroupsDurations)
 {
     if (!skillGroupsDurations.ContainsKey(group))
     {
         TimeSpan time = TimeSpan.Zero;
         foreach (var entry in entries.Where(x => x.Skill.Group == group))
         {
             time += entry.TrainingTime;
         }
         skillGroupsDurations[group] = time;
     }
     
     return skillGroupsDurations[group];
 }
예제 #11
0
        /// <summary>
        /// Initialize static skills
        /// </summary>
        internal static void Load()
        {
            SkillsDatafile datafile = Util.DeserializeDatafile<SkillsDatafile>(DatafileConstants.SkillsDatafile);

            // Fetch deserialized data
            m_arrayIndicesCount = 0;
            var prereqs = new List<SerializableSkillPrerequisite[]>();
            foreach (var srcGroup in datafile.Groups)
            {
                var group = new StaticSkillGroup(srcGroup, ref m_arrayIndicesCount);
                m_allGroupsById[group.ID] = group;

                // Store skills
                foreach (var skill in group)
                {
                    m_skillsById[skill.ID] = skill;
                    m_skillsByName[skill.Name] = skill;
                }

                // Store prereqs
                foreach (var serialSkill in srcGroup.Skills)
                {
                    prereqs.Add(serialSkill.Prereqs);
                }
            }

            // Complete initialization
            m_skills = new StaticSkill[m_arrayIndicesCount];
            foreach (var ss in m_skillsById.Values)
            {
                ss.CompleteInitialization(prereqs[ss.ArrayIndex]);
                m_skills[ss.ArrayIndex] = ss;
            }
        }