public SkillComponent(IEntity entity, IEnumerable <CharacterSkillDto> skills) : this(entity) { if (skills == null) { return; } foreach (CharacterSkillDto characterSkill in skills) { CharacterSkills.Add(characterSkill.Id, characterSkill); this.AddSkill(characterSkill.Skill); } }
void cl_SetSkills(List <int> aCharacterSkills, List <int> aSkilldeckSkills) { var i = 0; while (i < aCharacterSkills.Count) { var skillResource = SBDBSync.GetResourceObject <FSkill_Type>(aCharacterSkills[i]); if (skillResource == null) { throw new Exception("Skill not found: " + aCharacterSkills[i]); } CharacterSkills.Add(skillResource); ++i; } cl_UpdateSkilldeckSkills(aSkilldeckSkills); //OnCharacterSkillsChanged(); }
/// <summary> /// 清空并重新获取角色的技能数据(提交数据库) /// </summary> /// <returns>是否更新成功</returns> public bool UpdateSkills() { // 通过ESI获取角色的技能信息 ESICharacterSkillList csl = ESI.GetCharacterSkillList(CharacterID, GetAccessToken()); if (csl == null) { return(false); } DCEVEDataContext dc = new DCEVEDataContext(); // 清空原有技能数据 dc.CharacterSkills.DeleteAllOnSubmit(CharacterSkills); dc.SubmitChanges(); var targetSkillID = dc.invTypes.Where(p => CONST.TargetSkillsGroupID.Contains(p.groupID)).Select(p => p.typeID); CharacterSkills skill; // 只提取有用的技能数据且处理角色数据 foreach (var s in csl.SkillList) { // 若技能 ID 不在要存储的技能ID队列里面, 则跳过 if (!targetSkillID.Contains(s.SkillID)) { continue; } // 若是要存储的技能, 则创建对应的数据记录 skill = new CharacterSkills() { CharacterID = CharacterID, SkillID = s.SkillID, Level = s.TrainedSkillLevel }; CharacterSkills.Add(skill); } dc.SubmitChanges(); // 分析角色能力 // 制造能力 ManuCapability = (from s in dc.industryActivitySkills join c in dc.CharacterSkills on s.skillID equals c.SkillID where c.CharacterID == CharacterID && s.activityID == CONST.ManufactActivityID && c.Level >= s.level select s.skillID).Count(); NumManufactureLine = 1; var targetSkill = CharacterSkills.SingleOrDefault(p => p.SkillID == 3387); // 批量生产学 if (targetSkill != null) { NumManufactureLine += targetSkill.Level; } targetSkill = CharacterSkills.SingleOrDefault(p => p.SkillID == 24625); // 高级量产技术 if (targetSkill != null) { NumManufactureLine += targetSkill.Level; } // 科研能力 ReseCapability = (from s in dc.industryActivitySkills join c in dc.CharacterSkills on s.skillID equals c.SkillID where c.CharacterID == CharacterID && CONST.ResearchActivitiesID.Contains(s.activityID) && c.Level >= s.level select s.skillID).Count(); NumResearchLine = 1; targetSkill = CharacterSkills.SingleOrDefault(p => p.SkillID == 3406); // 实验室运作理论 if (targetSkill != null) { NumResearchLine += targetSkill.Level; } targetSkill = CharacterSkills.SingleOrDefault(p => p.SkillID == 24624); // 高级实验室运作理论 if (targetSkill != null) { NumResearchLine += targetSkill.Level; } // 市场订单量 if (Market) { NumMarketOrder = 5; targetSkill = CharacterSkills.SingleOrDefault(p => p.SkillID == 3443); // 贸易学 if (targetSkill != null) { NumMarketOrder += targetSkill.Level * 4; } targetSkill = CharacterSkills.SingleOrDefault(p => p.SkillID == 3444); // 零售技巧 if (targetSkill != null) { NumMarketOrder += targetSkill.Level * 8; } targetSkill = CharacterSkills.SingleOrDefault(p => p.SkillID == 16596); // 批发技巧 if (targetSkill != null) { NumMarketOrder += targetSkill.Level * 16; } targetSkill = CharacterSkills.SingleOrDefault(p => p.SkillID == 18580); // 商业巨头 if (targetSkill != null) { NumMarketOrder += targetSkill.Level * 32; } } dc.SubmitChanges(); return(true); }