/// <summary> /// Constructor from XML. /// </summary> /// <param name="certClass"></param> /// <param name="src"></param> internal StaticCertificate(StaticCertificateClass certClass, SerializableCertificate src) { ID = src.ID; Description = src.Description; Class = certClass; Grades = new Dictionary<CertificateGrade, List<StaticSkillLevel>>(); // Recommendations Recommendations = new StaticRecommendations<Item>(); if (src.Recommendations == null || StaticItems.ShipsMarketGroup == null) return; foreach (Ship ship in src.Recommendations .Select(recommendation => StaticItems.ShipsMarketGroup.AllItems.OfType<Ship>() .FirstOrDefault(item => item.Name == recommendation.ShipName)) .Where(ship => ship != null)) { ship.Recommendations.Add(this); Recommendations.Add(ship); } }
/// <summary> /// Constructor from XML /// </summary> /// <param name="certClass"></param> /// <param name="element"></param> internal StaticCertificate(StaticCertificateClass certClass, SerializableCertificate src) { m_class = certClass; m_id = src.ID; m_grade = src.Grade; m_description = src.Description; // Recommendations if (src.Recommendations != null) { foreach (var recommendation in src.Recommendations) { var ship = StaticItems.Ships.AllItems.FirstOrDefault(x => x.Name == recommendation.Ship) as Ship; if (ship != null) { ship.Recommendations.Add(this); m_recommendations.Add(ship); } } } }
/// <summary> /// Exports the certificate. /// </summary> /// <param name="certificate">The certificate.</param> private static SerializableCertificate ExportCertificate(CrtCertificates certificate) { SerializableCertificate crtCertificate = new SerializableCertificate { ID = certificate.ID, Description = certificate.Description }; // Export prerequesities IEnumerable<SerializableCertificatePrerequisite> listOfPrereq = Database.CrtRelationshipsTable .Where(x => x.ChildID == certificate.ID && x.ParentLevel != 0) .Select(relationship => new SerializableCertificatePrerequisite { ID = Database.InvTypesTable[relationship.ParentTypeID].ID, Skill = Database.InvTypesTable[relationship.ParentTypeID].Name, Level = relationship.ParentLevel.ToString(CultureInfo.InvariantCulture), Grade = (CertificateGrade)Enum.ToObject(typeof(CertificateGrade), relationship.Grade), }); //Add prerequisites to certificate crtCertificate.Prerequisites.AddRange(listOfPrereq.OrderBy(x => x.Grade)); // Add recommendations to certificate IEnumerable<SerializableCertificateRecommendation> listOfRecommendations = Database.CrtRecommendationsTable.Where( x => x.CertificateID == certificate.ID) .Select(recommendation => new SerializableCertificateRecommendation { ID = recommendation.ShipTypeID, ShipName = Database.InvTypesTable[recommendation.ShipTypeID].Name, }); crtCertificate.Recommendations.AddRange(listOfRecommendations); // Add certificate return crtCertificate; }
/// <summary> /// Generate the certificates datafile. /// </summary> private static void GenerateCertificates() { Console.WriteLine(); Console.Write(@"Generated certificates datafile... "); s_counter = 0; s_percentOld = 0; s_text = String.Empty; s_startTime = DateTime.Now; // Export certificates categories var listOfCertCategories = new List<SerializableCertificateCategory>(); foreach (CrtCategories category in s_crtCategories.OrderBy(x => x.CategoryName)) { var crtCategory = new SerializableCertificateCategory { ID = category.ID, Name = category.CategoryName, Description = category.Description }; // Export certificates classes var listOfCertClasses = new List<SerializableCertificateClass>(); int categoryID = 0; foreach (CrtClasses certClass in s_crtClasses) { // Exclude unused classes int id = certClass.ID; if (id == 104 || id == 106 || id == 111) continue; var crtClasses = new SerializableCertificateClass { ID = certClass.ID, Name = certClass.ClassName, Description = certClass.Description }; // Export certificates var listOfCertificates = new List<SerializableCertificate>(); foreach (var certificate in s_certificates.Where(x => x.ClassID == certClass.ID)) { UpdatePercentDone(s_certGenTotal); var crtCertificates = new SerializableCertificate { ID = certificate.ID, Grade = GetGrade(certificate.Grade), Description = certificate.Description }; // Export prerequesities var listOfPrereq = new List<SerializableCertificatePrerequisite>(); foreach (CrtRelationships relationship in s_crtRelationships .Where(x => x.ChildID == certificate.ID)) { var crtPrerequisites = new SerializableCertificatePrerequisite { ID = relationship.ID, }; if (relationship.ParentTypeID != null) // prereq is a skill { var skill = s_types.First(x => x.ID == relationship.ParentTypeID); crtPrerequisites.Kind = SerializableCertificatePrerequisiteKind.Skill; crtPrerequisites.Name = skill.Name; crtPrerequisites.Level = relationship.ParentLevel.ToString(); } else // prereq is a certificate { CrtCertificates cert = s_certificates.First(x => x.ID == relationship.ParentID); CrtClasses crtClass = s_crtClasses.First(x => x.ID == cert.ClassID); crtPrerequisites.Kind = SerializableCertificatePrerequisiteKind.Certificate; crtPrerequisites.Name = crtClass.ClassName; crtPrerequisites.Level = GetGrade(cert.Grade).ToString(); } // Add prerequisite listOfPrereq.Add(crtPrerequisites); } // Export recommendations var listOfRecom = new List<SerializableCertificateRecommendation>(); foreach (CrtRecommendations recommendation in s_crtRecommendations .Where(x => x.CertificateID == certificate.ID)) { // Finds the ships name InvType shipName = s_types.First(x => x.ID == recommendation.ShipTypeID); var crtRecommendations = new SerializableCertificateRecommendation { ID = recommendation.ID, Ship = shipName.Name, Level = recommendation.Level }; // Add recommendation listOfRecom.Add(crtRecommendations); } //Add prerequisites to certificate crtCertificates.Prerequisites = listOfPrereq.ToArray(); // Add recommendations to certificate crtCertificates.Recommendations = listOfRecom.ToArray(); // Add certificate listOfCertificates.Add(crtCertificates); // Storing the certificate categoryID for use in classes categoryID = certificate.CategoryID; } // Grouping certificates according to their classes if (categoryID == category.ID) { // Add certificates to classes crtClasses.Certificates = listOfCertificates.OrderBy(x => x.Grade).ToArray(); // Add certificate class listOfCertClasses.Add(crtClasses); } } // Add classes to categories crtCategory.Classes = listOfCertClasses.ToArray(); // Add category listOfCertCategories.Add(crtCategory); } s_endTime = DateTime.Now; Console.WriteLine(String.Format(" in {0}", s_endTime.Subtract(s_startTime)).TrimEnd('0')); // Serialize var datafile = new CertificatesDatafile(); datafile.Categories = listOfCertCategories.ToArray(); Util.SerializeXML(datafile, DatafileConstants.CertificatesDatafile); }