Пример #1
0
        /// <summary>
        /// Deserialization constructor.
        /// </summary>
        /// <param name="group">Market Group the Blueprint will be a member of.</param>
        /// <param name="src">Source serializable blueprint.</param>
        internal Blueprint(MarketGroup group, SerializableBlueprint src)
            : base(group, src)
        {
            RunsPerCopy              = src.MaxProductionLimit;
            ProducesItem             = StaticItems.GetItemByID(src.ProduceItemID);
            ProductionTime           = src.ProductionTime;
            ResearchCopyTime         = src.ResearchCopyTime;
            ResearchMaterialTime     = src.ResearchMaterialTime;
            ResearchProductivityTime = src.ResearchProductivityTime;
            ResearchInventionTime    = src.InventionTime;
            ReverseEngineeringTime   = src.ReverseEngineeringTime;

            // Invented blueprints
            m_inventBlueprints = new Dictionary <int, double>(src.InventionTypeIDs?.Count ?? 0);
            if (src.InventionTypeIDs != null && src.InventionTypeIDs.Any())
            {
                m_inventBlueprints.AddRange(src.InventionTypeIDs);
            }

            // Materials prerequisites
            m_materialRequirements =
                new FastList <StaticRequiredMaterial>(src.ReqMaterial?.Count ?? 0);
            if (src.ReqMaterial == null)
            {
                return;
            }

            foreach (SerializableRequiredMaterial prereq in src.ReqMaterial)
            {
                m_materialRequirements.Add(new StaticRequiredMaterial(prereq));
            }
        }
Пример #2
0
 /// <summary>
 /// Gets the inventing items.
 /// </summary>
 /// <param name="srcBlueprint">The source blueprint.</param>
 /// <param name="blueprint">The blueprint.</param>
 private static void GetInventingItems(InvTypes srcBlueprint, SerializableBlueprint blueprint)
 {
     foreach (var requirement in Database.IndustryActivityProbabilitiesTable.Where(x =>
                                                                                   x.BlueprintTypeID == srcBlueprint.ID &&
                                                                                   Database.IndustryBlueprintsTable.HasValue(x.ProductTypeID) &&
                                                                                   (x.ActivityID == (int)BlueprintActivity.Invention ||
                                                                                    x.ActivityID == (int)BlueprintActivity.ReverseEngineering)))
     {
         blueprint.InventionTypeIDs.Add(requirement.ProductTypeID, requirement.Probability.GetValueOrDefault());
     }
 }
Пример #3
0
 /// <summary>
 /// Gets the inventing items.
 /// </summary>
 /// <param name="srcBlueprint">The source blueprint.</param>
 /// <param name="blueprint">The blueprint.</param>
 private static void GetInventingItems(InvTypes srcBlueprint, SerializableBlueprint blueprint)
 {
     foreach (RamTypeRequirements requirement in Database.RamTypeRequirementsTable
              .Where(requirement => requirement.ID == srcBlueprint.ID &&
                     Database.InvBlueprintTypesTable.Any(x => x.ID == requirement.RequiredTypeID) &&
                     (requirement.ActivityID == (int)BlueprintActivity.Invention ||
                      requirement.ActivityID == (int)BlueprintActivity.ReverseEngineering)))
     {
         blueprint.InventionTypeIDs.Add(requirement.RequiredTypeID, requirement.Probability.GetValueOrDefault());
     }
 }
Пример #4
0
        /// <summary>
        /// Gets the reaction items.
        /// </summary>
        private static void GetReactionItems(InvTypes srcBlueprint, SerializableBlueprint blueprint)
        {
            if (Database.IndustryActivityTable.Contains(new IndustryActivity()
            {
                ActivityID = (int)BlueprintActivity.Reactions,
                BlueprintTypeID = srcBlueprint.ID
            }))
            {
                var outcome = Database.IndustryActivityProductsTable.SingleOrDefault(x =>
                                                                                     (x.ActivityID == (int)BlueprintActivity.Reactions || x.ActivityID == (int)BlueprintActivity.SimpleReactions) &&
                                                                                     x.BlueprintTypeID == srcBlueprint.ID);

                if (outcome?.Quantity != null)
                {
                    blueprint.ReactionOutcome = new SerializableMaterialQuantity()
                    {
                        ID       = outcome.ProductTypeID,
                        Quantity = outcome.Quantity.Value
                    }
                }
                ;
            }

            if (Database.IndustryActivityTable.Contains(new IndustryActivity()
            {
                ActivityID = (int)BlueprintActivity.SimpleReactions,
                BlueprintTypeID = srcBlueprint.ID
            }))
            {
                var outcome = Database.IndustryActivityProductsTable.SingleOrDefault(x =>
                                                                                     (x.ActivityID == (int)BlueprintActivity.Reactions || x.ActivityID == (int)BlueprintActivity.SimpleReactions) &&
                                                                                     x.BlueprintTypeID == srcBlueprint.ID);

                if (outcome?.Quantity != null)
                {
                    blueprint.ReactionOutcome = new SerializableMaterialQuantity()
                    {
                        ID       = outcome.ProductTypeID,
                        Quantity = outcome.Quantity.Value
                    }
                }
                ;
            }
        }
Пример #5
0
        /// <summary>
        /// Base constructor for blueprints.
        /// </summary>
        /// <param name="id"></param>
        /// <param name="name"></param>
        internal Item(BlueprintMarketGroup group, SerializableBlueprint src)
            : this(src.ID, src.Name)
        {
            m_icon        = src.Icon;
            m_metaGroup   = src.MetaGroup;
            m_marketGroup = group;
            m_family      = ItemFamily.Bpo;

            m_prerequisites = new FastList <StaticSkillLevel>(src.PrereqSkill != null ? src.PrereqSkill.Length : 0);
            if (src.PrereqSkill == null)
            {
                return;
            }

            foreach (var prereq in src.PrereqSkill)
            {
                m_prerequisites.Add(new StaticSkillLevel(prereq.ID, prereq.Level, prereq.Activity));
            }
        }
Пример #6
0
        /// <summary>
        /// Add properties to a blueprint.
        /// </summary>
        /// <param name="srcBlueprint"></param>
        /// <param name="blueprintsGroup"></param>
        /// <returns></returns>
        private static void CreateBlueprint(InvTypes srcBlueprint, ICollection <SerializableBlueprint> blueprintsGroup)
        {
            Util.UpdatePercentDone(Database.BlueprintsTotalCount);

            // Guard in case an item of blueprint type is not contained in the blueprints table (glorious CCP)
            if (Database.InvBlueprintTypesTable.All(x => x.ID != srcBlueprint.ID))
            {
                return;
            }

            InvBlueprintTypes blueprintType = Database.InvBlueprintTypesTable[srcBlueprint.ID];

            // Creates the blueprint with base informations
            SerializableBlueprint blueprint = new SerializableBlueprint
            {
                ID   = srcBlueprint.ID,
                Name = srcBlueprint.Name,
                Icon = srcBlueprint.IconID.HasValue
                    ? Database.EveIconsTable[srcBlueprint.IconID.Value].Icon
                    : String.Empty,
                ProduceItemID            = blueprintType.ProductTypeID,
                ProductionTime           = blueprintType.ProductionTime,
                ResearchProductivityTime = blueprintType.ResearchProductivityTime,
                ResearchMaterialTime     = blueprintType.ResearchMaterialTime,
                ResearchCopyTime         = blueprintType.ResearchCopyTime,
                InventionTime            = blueprintType.InventionTime,
                ReverseEngineeringTime   = blueprintType.ReverseEngineeringTime,
                MaxProductionLimit       = blueprintType.MaxProductionLimit,
            };

            // Metagroup
            SetBlueprintMetaGroup(srcBlueprint, blueprint);

            // Export item requirements
            GetRequirements(srcBlueprint, blueprint);

            // Look for the tech 2 or tech 3 variations that this blueprint invents
            GetInventingItems(srcBlueprint, blueprint);

            // Add this item
            blueprintsGroup.Add(blueprint);
        }
Пример #7
0
        /// <summary>
        /// Base constructor for blueprints.
        /// </summary>
        /// <param name="group">The group.</param>
        /// <param name="src">The source.</param>
        internal Item(MarketGroup group, SerializableBlueprint src)
            : this(src.ID, src.Name)
        {
            Icon        = src.Icon;
            MetaGroup   = src.MetaGroup;
            MarketGroup = group;
            Family      = ItemFamily.Blueprint;

            // Skills prerequisites
            m_prerequisites = new FastList <StaticSkillLevel>(src.PrereqSkill?.Count ?? 0);
            if (src.PrereqSkill == null)
            {
                return;
            }

            foreach (SerializablePrereqSkill prereq in src.PrereqSkill)
            {
                m_prerequisites.Add(new StaticSkillLevel(prereq.ID, prereq.Level, prereq.Activity));
            }
        }
Пример #8
0
        /// <summary>
        /// Get's the item requirements.
        /// </summary>
        /// <param name="srcBlueprint"></param>
        /// <param name="blueprint"></param>
        private static void GetRequirements(IHasID srcBlueprint, SerializableBlueprint blueprint)
        {
            List <SerializablePrereqSkill>      prerequisiteSkills = new List <SerializablePrereqSkill>();
            List <SerializableRequiredMaterial> requiredMaterials  = new List <SerializableRequiredMaterial>();

            // Find required skills
            foreach (var requirement in Database.IndustryActivitySkillsTable
                     .Where(x => x.BlueprintTypeID == srcBlueprint.ID))
            {
                if (requirement.Level.HasValue)
                {
                    prerequisiteSkills.Add(new SerializablePrereqSkill
                    {
                        ID       = requirement.SkillID,
                        Level    = requirement.Level.Value,
                        Activity = requirement.ActivityID
                    });
                }
            }

            // Find required materials
            foreach (var requirement in Database.IndustryActivityMaterialsTable
                     .Where(x => x.BlueprintTypeID == srcBlueprint.ID))
            {
                if (requirement.Quantity.HasValue)
                {
                    requiredMaterials.Add(new SerializableRequiredMaterial
                    {
                        ID       = requirement.MaterialTypeID,
                        Quantity = requirement.Quantity.Value,
                        Activity = requirement.ActivityID,
                    });
                }
            }

            // Add prerequisite skills to item
            blueprint.PrereqSkill.AddRange(prerequisiteSkills.OrderBy(x => x.Activity));

            // Add required materials to item
            blueprint.ReqMaterial.AddRange(requiredMaterials.OrderBy(x => x.Activity));
        }
Пример #9
0
        /// <summary>
        /// Get's the item requirements.
        /// </summary>
        /// <param name="srcBlueprint"></param>
        /// <param name="blueprint"></param>
        private static void GetRequirements(IHasID srcBlueprint, SerializableBlueprint blueprint)
        {
            List <SerializablePrereqSkill>      prerequisiteSkills = new List <SerializablePrereqSkill>();
            List <SerializableRequiredMaterial> requiredMaterials  = new List <SerializableRequiredMaterial>();

            // Find the requirements and add them to the list, ignore any blueprint type
            foreach (RamTypeRequirements requirement in Database.RamTypeRequirementsTable
                     .Where(requirement => requirement.ID == srcBlueprint.ID &&
                            Database.InvBlueprintTypesTable.All(x => x.ID != requirement.RequiredTypeID)))
            {
                // Is it a skill ? Add it to the prerequisities skills list
                if (requirement.Level.HasValue)
                {
                    prerequisiteSkills.Add(new SerializablePrereqSkill
                    {
                        ID       = requirement.RequiredTypeID,
                        Level    = requirement.Level.Value,
                        Activity = requirement.ActivityID
                    });
                    continue;
                }

                // It is an item (material)
                if (requirement.Quantity.HasValue)
                {
                    requiredMaterials.Add(new SerializableRequiredMaterial
                    {
                        ID       = requirement.RequiredTypeID,
                        Quantity = requirement.Quantity.Value,
                        Activity = requirement.ActivityID,
                    });
                }
            }

            // Add prerequisite skills to item
            blueprint.PrereqSkill.AddRange(prerequisiteSkills.OrderBy(x => x.Activity));

            // Add required materials to item
            blueprint.ReqMaterial.AddRange(requiredMaterials.OrderBy(x => x.Activity));
        }
Пример #10
0
        /// <summary>
        /// Deserialization constructor.
        /// </summary>
        /// <param name="group">Market Group the Blueprint will be a member of.</param>
        /// <param name="src">Source serializable blueprint.</param>
        internal Blueprint(BlueprintMarketGroup group, SerializableBlueprint src)
            : base(group, src)
        {
            m_maxProductionLimit       = src.MaxProductionLimit;
            m_produceItemID            = src.ProduceItemID;
            m_productionTime           = src.ProductionTime;
            m_productivityModifier     = src.ProductivityModifier;
            m_researchCopyTime         = src.ResearchCopyTime;
            m_researchMaterialTime     = src.ResearchMaterialTime;
            m_researchProductivityTime = src.ResearchProductivityTime;
            m_researchTechTime         = src.ResearchTechTime;
            m_techLevel   = src.TechLevel;
            m_wasteFactor = src.WasteFactor;

            // Invented blueprint
            m_inventBlueprint = new FastList <int>(src.InventionTypeID != null ? src.InventionTypeID.Length : 0);
            if (src.InventionTypeID != null)
            {
                foreach (var blueprintID in src.InventionTypeID)
                {
                    m_inventBlueprint.Add(blueprintID);
                }
            }

            // Materials prerequisites
            m_materialRequirements = new FastList <StaticRequiredMaterial>(src.ReqMaterial != null ? src.ReqMaterial.Length : 0);
            if (src.ReqMaterial == null)
            {
                return;
            }

            foreach (var prereq in src.ReqMaterial)
            {
                m_materialRequirements.Add(new StaticRequiredMaterial(prereq));
            }
        }
Пример #11
0
        /// <summary>
        /// Sets the blueprint meta group.
        /// </summary>
        /// <param name="srcBlueprint">The SRC blueprint.</param>
        /// <param name="blueprint">The blueprint.</param>
        private static void SetBlueprintMetaGroup(InvTypes srcBlueprint, SerializableBlueprint blueprint)
        {
            var productTypeID = Database.IndustryActivityProductsTable.Where(
                x => x.BlueprintTypeID == srcBlueprint.ID &&
                x.ActivityID == (int)BlueprintActivity.Manufacturing).Select(
                x => x.ProductTypeID).SingleOrDefault();

            foreach (InvMetaTypes relation in Database.InvMetaTypesTable.Where(
                         x => x.ItemID == productTypeID))
            {
                switch (relation.MetaGroupID)
                {
                default:
                    blueprint.MetaGroup = ItemMetaGroup.T1;
                    break;

                case DBConstants.TechIIMetaGroupID:
                    blueprint.MetaGroup = ItemMetaGroup.T2;
                    break;

                case DBConstants.StorylineMetaGroupID:
                    blueprint.MetaGroup = ItemMetaGroup.Storyline;
                    break;

                case DBConstants.FactionMetaGroupID:
                    blueprint.MetaGroup = ItemMetaGroup.Faction;
                    break;

                case DBConstants.OfficerMetaGroupID:
                    blueprint.MetaGroup = ItemMetaGroup.Officer;
                    break;

                case DBConstants.DeadspaceMetaGroupID:
                    blueprint.MetaGroup = ItemMetaGroup.Deadspace;
                    break;

                case DBConstants.TechIIIMetaGroupID:
                    blueprint.MetaGroup = ItemMetaGroup.T3;
                    break;
                }
            }

            // Metagroup for the custom market groups
            switch (srcBlueprint.MarketGroupID)
            {
            case DBConstants.BlueprintStorylineNonMarketGroupID:
                blueprint.MetaGroup = ItemMetaGroup.Storyline;
                break;

            case DBConstants.BlueprintFactionNonMarketGroupID:
                blueprint.MetaGroup = ItemMetaGroup.Faction;
                break;

            case DBConstants.BlueprintOfficerNonMarketGroupID:
                blueprint.MetaGroup = ItemMetaGroup.Officer;
                break;

            case DBConstants.BlueprintTechIIINonMarketGroupID:
                blueprint.MetaGroup = ItemMetaGroup.T3;
                break;

            case DBConstants.BlueprintTechIINonMarketGroupID:
                blueprint.MetaGroup = ItemMetaGroup.T2;
                break;
            }

            if (blueprint.MetaGroup == ItemMetaGroup.None)
            {
                blueprint.MetaGroup = ItemMetaGroup.T1;
            }
        }
Пример #12
0
        /// <summary>
        /// Add properties to a blueprint.
        /// </summary>
        /// <param name="srcBlueprint"></param>
        /// <param name="blueprintsGroup"></param>
        /// <returns></returns>
        private static void CreateBlueprint(InvTypes srcBlueprint, ICollection <SerializableBlueprint> blueprintsGroup)
        {
            Util.UpdatePercentDone(Database.BlueprintsTotalCount);

            // Guard in case an item of blueprint type is not contained in the blueprints table (glorious CCP)
            if (!Database.IndustryBlueprintsTable.HasValue(srcBlueprint.ID))
            {
                return;
            }

            var blueprintType = Database.IndustryBlueprintsTable[srcBlueprint.ID];

            var productType = Database.IndustryActivityProductsTable.Where(
                x => x.BlueprintTypeID == srcBlueprint.ID &&
                x.ActivityID == (int)BlueprintActivity.Manufacturing)
                              .SingleOrDefault();

            var tempActivity = new IndustryActivity()
            {
                BlueprintTypeID = srcBlueprint.ID, ActivityID = (int)BlueprintActivity.Manufacturing
            };
            var productionTime = Database.IndustryActivityTable.Get(tempActivity)?.Time;

            tempActivity.ActivityID = (int)BlueprintActivity.ResearchingMaterialEfficiency;
            var researchProductivityTime = Database.IndustryActivityTable.Get(tempActivity)?.Time;

            tempActivity.ActivityID = (int)BlueprintActivity.ResearchingMaterialEfficiency;
            var researchMaterialTime = Database.IndustryActivityTable.Get(tempActivity)?.Time;

            tempActivity.ActivityID = (int)BlueprintActivity.Copying;
            var researchCopyTime = Database.IndustryActivityTable.Get(tempActivity)?.Time;

            tempActivity.ActivityID = (int)BlueprintActivity.Invention;
            var inventionTime = Database.IndustryActivityTable.Get(tempActivity)?.Time;

            tempActivity.ActivityID = (int)BlueprintActivity.ReverseEngineering;
            var reverseEngineeringTime = Database.IndustryActivityTable.Get(tempActivity)?.Time;

            tempActivity.ActivityID = (int)BlueprintActivity.Reactions;
            var reactionTime = Database.IndustryActivityTable.Get(tempActivity)?.Time;

            // Creates the blueprint with base informations
            SerializableBlueprint blueprint = new SerializableBlueprint
            {
                ID   = srcBlueprint.ID,
                Name = srcBlueprint.Name,
                Icon = srcBlueprint.IconID.HasValue
                    ? Database.EveIconsTable[srcBlueprint.IconID.Value].Icon
                    : string.Empty,
                ProduceItemID            = (productType?.ProductTypeID).GetValueOrDefault(),
                ProductionTime           = productionTime.GetValueOrDefault(),
                ResearchProductivityTime = researchProductivityTime.GetValueOrDefault(),
                ResearchMaterialTime     = researchMaterialTime.GetValueOrDefault(),
                ResearchCopyTime         = researchCopyTime.GetValueOrDefault(),
                InventionTime            = inventionTime.GetValueOrDefault(),
                ReverseEngineeringTime   = reverseEngineeringTime.GetValueOrDefault(),
                ReactionTime             = reactionTime.GetValueOrDefault(),
                MaxProductionLimit       = blueprintType.MaxProductionLimit,
            };

            // Metagroup
            SetBlueprintMetaGroup(srcBlueprint, blueprint);

            // Export item requirements
            GetRequirements(srcBlueprint, blueprint);

            // Look for the tech 2 or tech 3 variations that this blueprint invents
            GetInventingItems(srcBlueprint, blueprint);

            // Look for reaction output
            GetReactionItems(srcBlueprint, blueprint);

            // Add this item
            blueprintsGroup.Add(blueprint);
        }
Пример #13
0
        /// <summary>
        /// Sets the blueprint meta group.
        /// </summary>
        /// <param name="srcBlueprint">The SRC blueprint.</param>
        /// <param name="blueprint">The blueprint.</param>
        private static void SetBlueprintMetaGroup(InvTypes srcBlueprint, SerializableBlueprint blueprint)
        {
            foreach (InvMetaTypes relation in Database.InvMetaTypesTable.Where(
                         x => x.ItemID == Database.InvBlueprintTypesTable[srcBlueprint.ID].ProductTypeID))
            {
                switch (relation.MetaGroupID)
                {
                default:
                    blueprint.MetaGroup = ItemMetaGroup.T1;
                    break;

                case DBConstants.TechIIMetaGroupID:
                    blueprint.MetaGroup = ItemMetaGroup.T2;
                    break;

                case DBConstants.StorylineMetaGroupID:
                    blueprint.MetaGroup = ItemMetaGroup.Storyline;
                    break;

                case DBConstants.FactionMetaGroupID:
                    blueprint.MetaGroup = ItemMetaGroup.Faction;
                    break;

                case DBConstants.OfficerMetaGroupID:
                    blueprint.MetaGroup = ItemMetaGroup.Officer;
                    break;

                case DBConstants.DeadspaceMetaGroupID:
                    blueprint.MetaGroup = ItemMetaGroup.Deadspace;
                    break;

                case DBConstants.TechIIIMetaGroupID:
                    blueprint.MetaGroup = ItemMetaGroup.T3;
                    break;
                }
            }

            // Metagroup for the custom market groups
            switch (srcBlueprint.MarketGroupID)
            {
            case DBConstants.BlueprintStorylineNonMarketGroupID:
                blueprint.MetaGroup = ItemMetaGroup.Storyline;
                break;

            case DBConstants.BlueprintFactionNonMarketGroupID:
                blueprint.MetaGroup = ItemMetaGroup.Faction;
                break;

            case DBConstants.BlueprintOfficerNonMarketGroupID:
                blueprint.MetaGroup = ItemMetaGroup.Officer;
                break;

            case DBConstants.BlueprintTechIIINonMarketGroupID:
                blueprint.MetaGroup = ItemMetaGroup.T3;
                break;

            case DBConstants.BlueprintTechIINonMarketGroupID:
                blueprint.MetaGroup = ItemMetaGroup.T2;
                break;
            }

            if (blueprint.MetaGroup == ItemMetaGroup.None)
            {
                blueprint.MetaGroup = ItemMetaGroup.T1;
            }
        }