/// <summary> /// Exports the character's selected skills as plan. /// </summary> /// <param name="character">The character.</param> /// <param name="selectedSkills">The selected skills.</param> /// <returns></returns> /// <exception cref="System.ArgumentNullException"></exception> public static async Task ExportCharacterSkillsAsPlanAsync(Character character, IEnumerable <Skill> selectedSkills = null) { character.ThrowIfNull(nameof(character)); // Create a character without any skill CharacterScratchpad scratchpad = new CharacterScratchpad(character); scratchpad.ClearSkills(); // Create a new plan Plan plan = new Plan(scratchpad) { Name = "Skills Plan" }; IEnumerable <Skill> skills = selectedSkills ?? character.Skills.Where(skill => skill.IsPublic); // Add all trained skill levels that the character has trained so far foreach (Skill skill in skills) { plan.PlanTo(skill, skill.Level); } await ExportPlanAsync(plan, character); }
/// <summary> /// Generate a trainings array from the skills already know by a character. /// </summary> /// <param name="character">The character.</param> /// <param name="plan">The plan.</param> /// <returns></returns> /// <exception cref="System.ArgumentNullException">character or plan</exception> public static RemappingResult OptimizeFromCharacter(Character character, BasePlan plan) { character.ThrowIfNull(nameof(character)); plan.ThrowIfNull(nameof(plan)); // Create a character without any skill CharacterScratchpad scratchpad = new CharacterScratchpad(character.After(plan.ChosenImplantSet)); scratchpad.ClearSkills(); // Create a new plan Plan newPlan = new Plan(scratchpad); // Add all trained skill levels that the character has trained so far foreach (Skill skill in character.Skills) { newPlan.PlanTo(skill, skill.Level); } // Create a new remapping RemappingResult remapping = new RemappingResult(scratchpad); // Add those skills to the remapping foreach (PlanEntry entry in newPlan) { remapping.Skills.Add(entry); } // Optimize remapping.Optimize(TimeSpan.MaxValue); return(remapping); }