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