Exemple #1
0
        public async void Handle(ViewMarketBrowserEvent message)
        {
            await Initialized.ConfigureAwait(false);

            SelectedItem = InvTypes.Single(t => t.TypeId == message.InvType.TypeId);
            await LoadMarketDetails(SelectedRegion, SelectedItem).ConfigureAwait(false);
        }
Exemple #2
0
        /// <summary>
        /// Sets the market group from meta group.
        /// </summary>
        /// <param name="item">The item.</param>
        private static void SetMarketGroupFromMetaGroup(InvTypes item)
        {
            // Guard in case an item of blueprint type is not contained in the blueprints table (glorious CCP)
            if (Database.InvBlueprintTypesTable.All(x => x.ID != item.ID))
            {
                return;
            }

            int relation = Database.InvMetaTypesTable.Where(
                x => x.ItemID == Database.InvBlueprintTypesTable[item.ID].ProductTypeID).Select(
                x => x.MetaGroupID).FirstOrDefault();

            switch (relation)
            {
            case DBConstants.TechIIMetaGroupID:
                item.MarketGroupID = DBConstants.BlueprintTechIINonMarketGroupID;
                break;

            case DBConstants.StorylineMetaGroupID:
                item.MarketGroupID = DBConstants.BlueprintStorylineNonMarketGroupID;
                break;

            case DBConstants.FactionMetaGroupID:
                item.MarketGroupID = DBConstants.BlueprintFactionNonMarketGroupID;
                break;

            case DBConstants.OfficerMetaGroupID:
                item.MarketGroupID = DBConstants.BlueprintOfficerNonMarketGroupID;
                break;

            case DBConstants.TechIIIMetaGroupID:
                item.MarketGroupID = DBConstants.BlueprintTechIIINonMarketGroupID;
                break;
            }
        }
Exemple #3
0
 private void ExecuteSelectItem(MarketTreeNode node)
 {
     if (node == null || node.InvType == null)
     {
         return;
     }
     SelectedItem = InvTypes.Single(t => t.TypeId == node.InvType.TypeId);
 }
Exemple #4
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());
     }
 }
Exemple #5
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());
     }
 }
Exemple #6
0
        /// <summary>
        /// Completes the item properties addition.
        /// </summary>
        /// <param name="srcItem">The SRC item.</param>
        /// <param name="props">The props.</param>
        private static void CompleteItemPropertiesAddition(InvTypes srcItem, ICollection <SerializablePropertyValue> props)
        {
            // Ensures there is a mass and add it to prop
            if (Math.Abs(srcItem.Mass) > double.Epsilon)
            {
                props.Add(new SerializablePropertyValue
                {
                    ID    = DBConstants.MassPropertyID,
                    Value = srcItem.Mass.ToString(CultureConstants.InvariantCulture)
                });
            }

            // Ensures there is a cargo capacity and add it to prop
            if (Math.Abs(srcItem.Capacity) > double.Epsilon)
            {
                props.Add(new SerializablePropertyValue
                {
                    ID    = DBConstants.CargoCapacityPropertyID,
                    Value = srcItem.Capacity.ToString(CultureConstants.InvariantCulture)
                });
            }

            // Ensures there is a volume and add it to prop
            if (Math.Abs(srcItem.Volume) > double.Epsilon)
            {
                props.Add(new SerializablePropertyValue
                {
                    ID    = DBConstants.VolumePropertyID,
                    Value = srcItem.Volume.ToString(CultureConstants.InvariantCulture)
                });
            }

            // Add unit to refine prop where applicable
            if (Database.InvGroupsTable[srcItem.GroupID].CategoryID == DBConstants.AsteroidCategoryID)
            {
                props.Add(new SerializablePropertyValue
                {
                    ID    = Properties.UnitsToRefinePropertyID,
                    Value = srcItem.PortionSize.ToString(CultureInfo.InvariantCulture)
                });
            }

            // Add base price as a prop
            props.Add(new SerializablePropertyValue
            {
                ID    = Properties.BasePricePropertyID,
                Value = srcItem.BasePrice.FormatDecimal()
            });
        }
Exemple #7
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
                    }
                }
                ;
            }
        }
Exemple #8
0
        /// <summary>
        /// Sets the market group from meta group.
        /// </summary>
        /// <param name="item">The item.</param>
        private static void SetMarketGroupFromMetaGroup(InvTypes item)
        {
            // Guard in case an item of blueprint type is not contained in the blueprints table (glorious CCP)
            if (!Database.IndustryBlueprintsTable.HasValue(item.ID))
            {
                return;
            }

            var blueprint = Database.IndustryBlueprintsTable[item.ID];

            var productTypeID = Database.IndustryActivityProductsTable.Where(
                x => x.BlueprintTypeID == item.ID &&
                x.ActivityID == (int)BlueprintActivity.Manufacturing).Select(
                x => x.ProductTypeID).SingleOrDefault();

            int relation = Database.InvMetaTypesTable.Where(
                x => x.ItemID == productTypeID).Select(
                x => x.MetaGroupID).FirstOrDefault();

            switch (relation)
            {
            case DBConstants.TechIIMetaGroupID:
                item.MarketGroupID = DBConstants.BlueprintTechIINonMarketGroupID;
                break;

            case DBConstants.StorylineMetaGroupID:
                item.MarketGroupID = DBConstants.BlueprintStorylineNonMarketGroupID;
                break;

            case DBConstants.FactionMetaGroupID:
                item.MarketGroupID = DBConstants.BlueprintFactionNonMarketGroupID;
                break;

            case DBConstants.OfficerMetaGroupID:
                item.MarketGroupID = DBConstants.BlueprintOfficerNonMarketGroupID;
                break;

            case DBConstants.TechIIIMetaGroupID:
                item.MarketGroupID = DBConstants.BlueprintTechIIINonMarketGroupID;
                break;
            }
        }
Exemple #9
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);
        }
Exemple #10
0
        /// <summary>
        /// Adds the traits.
        /// </summary>
        /// <param name="srcItem">The source item.</param>
        /// <param name="item">The item.</param>
        private static void AddTraits(InvTypes srcItem, SerializableItem item)
        {
            if (Database.InvGroupsTable[srcItem.GroupID].CategoryID != DBConstants.ShipCategoryID)
            {
                return;
            }

            string skillBonusesText = String.Empty;
            string roleBonusesText  = String.Empty;
            string miscBonusesText  = String.Empty;

            // Find the skill bonuses
            skillBonusesText += $"{item.Name} bonuses (per skill level):{Environment.NewLine}";

            var SkillBonuses = Database.InvTraitsTable.Where(x => x.typeID == srcItem.ID && x.skillID != null && x.skillID >= 0);

            foreach (InvTraits bonuses in SkillBonuses)
            {
                skillBonusesText += bonuses.UnitID.HasValue
                                        ? $"{bonuses.bonus}{Database.EveUnitsTable[bonuses.UnitID.Value].DisplayName} {bonuses.BonusText}{Environment.NewLine}"
                                        : $"{bonuses.BonusText}{Environment.NewLine}";
            }

            skillBonusesText += Environment.NewLine;

            // Find the role bonuses
            var RoleBonuses = Database.InvTraitsTable
                              .Where(x => x.typeID == srcItem.ID && x.skillID == -1);

            roleBonusesText += $"Role bonus:{Environment.NewLine}";
            foreach (InvTraits bonuses in RoleBonuses)
            {
                roleBonusesText += bonuses.UnitID.HasValue
                                        ? $"{bonuses.bonus}{Database.EveUnitsTable[bonuses.UnitID.Value].DisplayName} {bonuses.BonusText}{Environment.NewLine}"
                                        : $"{bonuses.BonusText}{Environment.NewLine}";
            }

            roleBonusesText += Environment.NewLine;

            // Find the misc bonuses
            var MiscBonuses = Database.InvTraitsTable
                              .Where(x => x.typeID == srcItem.ID && x.skillID == -2);

            miscBonusesText += $"Misc bonus:{Environment.NewLine}";
            foreach (InvTraits bonuses in MiscBonuses)
            {
                miscBonusesText += bonuses.UnitID.HasValue
                                        ? $"{bonuses.bonus}{Database.EveUnitsTable[bonuses.UnitID.Value].DisplayName} {bonuses.BonusText}{Environment.NewLine}"
                                        : $"{bonuses.BonusText}{Environment.NewLine}";
            }

            // For any T3 destoyer, we need to deal with CCP being horrific cheats. The 'ship traits' are actually derived through some epic hacking from some hidden items:
            // Hard coding some things in the short term, but need to make this MOAR BETTER.
            List <long> T3DIDs = new List <long> {
                34562, 35683, 34317, 34828
            };

            if (T3DIDs.Contains(item.ID))
            {
                Dictionary <string, int> T3DModeInfo = new Dictionary <string, int>();
                T3DModeInfo.Add("Sharpshooter", 0);
                T3DModeInfo.Add("Defense", 0);
                T3DModeInfo.Add("Propulsion", 0);

                // Determine which T3D we have, and get the relevant sub-item IDs
                switch (item.ID)
                {
                case 34562:
                    // Svipul
                    T3DModeInfo["Sharpshooter"] = 34570;
                    T3DModeInfo["Propulsion"]   = 34566;
                    T3DModeInfo["Defense"]      = 34564;
                    break;

                case 35683:
                    // Hecate
                    T3DModeInfo["Sharpshooter"] = 35688;
                    T3DModeInfo["Propulsion"]   = 35687;
                    T3DModeInfo["Defense"]      = 35686;
                    break;

                case 34317:
                    // Confessor
                    T3DModeInfo["Sharpshooter"] = 34321;
                    T3DModeInfo["Propulsion"]   = 34323;
                    T3DModeInfo["Defense"]      = 34319;
                    break;

                case 34828:
                    // Jackdaw
                    T3DModeInfo["Sharpshooter"] = 35678;
                    T3DModeInfo["Propulsion"]   = 35677;
                    T3DModeInfo["Defense"]      = 35676;
                    break;

                default:
                    break;
                }

                foreach (var T3DMode in T3DModeInfo)
                {
                    var DBRecord = Database.InvTypesTable[T3DMode.Value];
                    miscBonusesText += $"{T3DMode.Key}{@" Mode:"}{Environment.NewLine}{DBRecord.Description}{Environment.NewLine + Environment.NewLine}";
                }
            }

            // Skip if no bonuses
            if (String.IsNullOrWhiteSpace(skillBonusesText) && String.IsNullOrWhiteSpace(roleBonusesText) &&
                String.IsNullOrWhiteSpace(miscBonusesText))
            {
                return;
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine().AppendLine();
            sb.AppendLine("--- Traits --- ");
            sb.Append(SkillBonuses.Count() > 0 ? skillBonusesText : "");
            sb.Append(RoleBonuses.Count() > 0 ? roleBonusesText : "");
            sb.Append(MiscBonuses.Count() > 0 ? miscBonusesText : "");


            // Add to item description
            item.Description += sb.ToString();
        }
Exemple #11
0
        /// <summary>
        /// Add properties to an item.
        /// </summary>
        /// <param name="srcItem"></param>
        /// <param name="groupItems"></param>
        /// <returns></returns>
        private static void CreateItem(InvTypes srcItem, ICollection <SerializableItem> groupItems)
        {
            Util.UpdatePercentDone(Database.ItemsTotalCount);

            srcItem.Generated = true;

            InvGroups itemGroup = Database.InvGroupsTable[srcItem.GroupID];

            // Creates the item with base informations
            SerializableItem item = new SerializableItem
            {
                ID          = srcItem.ID,
                Name        = srcItem.Name,
                Description = srcItem.Description ?? String.Empty,
                Icon        = srcItem.IconID.HasValue
                                        ? Database.EveIconsTable[srcItem.IconID.Value].Icon
                                        : String.Empty,
                PortionSize = srcItem.PortionSize,
                MetaGroup   = ItemMetaGroup.None,
                Group       = itemGroup.Name,
                Category    = Database.InvCategoriesTable[itemGroup.CategoryID].Name,
                Race        = (Race)Enum.ToObject(typeof(Race), srcItem.RaceID ?? 0)
            };


            // Set race to Faction if item race is Jovian or belongs to a Faction market group
            if (item.Race == Race.Jove ||
                Database.InvMarketGroupsTable.Any(group => srcItem.MarketGroupID == group.ID &&
                                                  (DBConstants.FactionMarketGroupIDs.Any(id => id == group.ID) ||
                                                   DBConstants.FactionMarketGroupIDs.Any(id => id == group.ParentID))))
            {
                item.Race = Race.Faction;
            }

            // Add traits
            AddTraits(srcItem, item);

            // Add the properties and prereqs
            AddItemPropsAndPrereq(srcItem, item);

            // Metagroup
            AddMetaGroup(srcItem, item);

            // Look for slots
            if (Database.DgmTypeEffectsTable.Contains(srcItem.ID, 0, DBConstants.LowSlotEffectID))
            {
                item.Slot = ItemSlot.Low;
            }
            else if (Database.DgmTypeEffectsTable.Contains(srcItem.ID, 0, DBConstants.MedSlotEffectID))
            {
                item.Slot = ItemSlot.Medium;
            }
            else if (Database.DgmTypeEffectsTable.Contains(srcItem.ID, 0, DBConstants.HiSlotEffectID))
            {
                item.Slot = ItemSlot.High;
            }
            else
            {
                item.Slot = ItemSlot.NoSlot;
            }

            // Add reaction info for reactions
            if (Database.InvGroupsTable[srcItem.GroupID].CategoryID == DBConstants.ReactionCategoryID)
            {
                AddReactionInfo(srcItem, item);
            }

            // Add fuel info for control towers
            if (srcItem.GroupID == DBConstants.ControlTowerGroupID)
            {
                AddControlTowerFuelInfo(srcItem, item);
            }

            // Add this item
            groupItems.Add(item);

            // If the current item isn't in a market group then we are done
            if (srcItem.MarketGroupID == DBConstants.RootNonMarketGroupID)
            {
                return;
            }

            // Look for variations which are not in any market group
            foreach (InvTypes srcVariationItem in Database.InvMetaTypesTable.Where(x => x.ParentItemID == srcItem.ID).Select(
                         variation => Database.InvTypesTable[variation.ItemID]).Where(
                         srcVariationItem => srcVariationItem.Published &&
                         srcVariationItem.MarketGroupID == DBConstants.RootNonMarketGroupID))
            {
                srcVariationItem.RaceID = (int)Race.Faction;
                CreateItem(srcVariationItem, groupItems);
            }
        }
Exemple #12
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;
            }
        }
Exemple #13
0
        /// <summary>
        /// Adds the traits.
        /// </summary>
        /// <param name="srcItem">The source item.</param>
        /// <param name="item">The item.</param>
        private static void AddTraits(InvTypes srcItem, SerializableItem item)
        {
            if (Database.InvGroupsTable[srcItem.GroupID].CategoryID != DBConstants.ShipCategoryID)
            {
                return;
            }

            string skillBonusesText = String.Empty;
            string roleBonusesText  = String.Empty;
            string miscBonusesText  = String.Empty;

            // Find the skill bonuses
            foreach (IGrouping <int, DgmTypeTraits> bonuses in Database.DgmTypeTraitsTable
                     .Where(x => x.ItemID == srcItem.ID && x.ParentItemID > 0)
                     .GroupBy(x => x.ParentItemID))
            {
                skillBonusesText += $"{Database.InvTypesTable[bonuses.Key].Name} bonuses (per skill level):{Environment.NewLine}";

                foreach (DgmTypeTraits bonus in bonuses)
                {
                    DgmTraits trait = Database.DgmTraitsTable[bonus.TraitID];

                    skillBonusesText += $"{(bonus.Bonus.HasValue ? bonus.Bonus.ToString() : String.Empty)}" +
                                        $"{(trait.UnitID.HasValue ? Database.EveUnitsTable[trait.UnitID.Value].DisplayName : String.Empty)} " +
                                        $"{Database.DgmTraitsTable[trait.ID].BonusText}{Environment.NewLine}"
                                        .TrimStart();
                }
                skillBonusesText += Environment.NewLine;
            }

            // Find the role bonuses
            foreach (IGrouping <int, DgmTypeTraits> bonuses in Database.DgmTypeTraitsTable
                     .Where(x => x.ItemID == srcItem.ID && x.ParentItemID == -1)
                     .GroupBy(x => x.ParentItemID))
            {
                roleBonusesText += $"Role bonus:{Environment.NewLine}";

                foreach (DgmTypeTraits bonus in bonuses)
                {
                    DgmTraits trait = Database.DgmTraitsTable[bonus.TraitID];

                    roleBonusesText += $"{(bonus.Bonus.HasValue ? bonus.Bonus.ToString() : String.Empty)}" +
                                       $"{(trait.UnitID.HasValue ? Database.EveUnitsTable[trait.UnitID.Value].DisplayName : String.Empty)} " +
                                       $"{Database.DgmTraitsTable[trait.ID].BonusText}{Environment.NewLine}"
                                       .TrimStart();
                }
            }

            // Find the misc bonuses
            foreach (IGrouping <int, DgmTypeTraits> bonuses in Database.DgmTypeTraitsTable
                     .Where(x => x.ItemID == srcItem.ID && x.ParentItemID == -2)
                     .GroupBy(x => x.ParentItemID))
            {
                miscBonusesText += $"Misc bonus:{Environment.NewLine}";

                foreach (DgmTypeTraits bonus in bonuses)
                {
                    DgmTraits trait = Database.DgmTraitsTable[bonus.TraitID];

                    miscBonusesText += $"{(bonus.Bonus.HasValue ? bonus.Bonus.ToString() : String.Empty)}" +
                                       $"{(trait.UnitID.HasValue ? Database.EveUnitsTable[trait.UnitID.Value].DisplayName : String.Empty)} " +
                                       $"{Database.DgmTraitsTable[trait.ID].BonusText}{Environment.NewLine}"
                                       .TrimStart();
                }
            }

            // Skip if no bonuses
            if (String.IsNullOrWhiteSpace(skillBonusesText) && String.IsNullOrWhiteSpace(roleBonusesText) &&
                String.IsNullOrWhiteSpace(miscBonusesText))
            {
                return;
            }

            StringBuilder sb = new StringBuilder();

            sb.AppendLine().AppendLine();
            sb.AppendLine("Traits");
            sb.Append(skillBonusesText);
            sb.Append(roleBonusesText);
            sb.Append(miscBonusesText);

            // Add to item description
            item.Description += sb.ToString();
        }
Exemple #14
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);
        }
Exemple #15
0
        /// <summary>
        /// Inventory Types.
        /// </summary>
        /// <returns><c>BagCollection</c> of items from the Inventory.</returns>
        private static BagCollection <InvTypes> Types()
        {
            IndexedCollection <InvTypes> collection = new IndexedCollection <InvTypes>();

            foreach (invTypes type in s_context.invTypes)
            {
                InvTypes item = new InvTypes
                {
                    ID            = type.typeID,
                    Description   = type.description,
                    MarketGroupID = type.marketGroupID,
                    Name          = type.typeName,
                    RaceID        = type.raceID
                };
                item.Description = item.Description.Clean();

                if (type.basePrice.HasValue)
                {
                    item.BasePrice = type.basePrice.Value;
                }

                if (type.capacity.HasValue)
                {
                    item.Capacity = type.capacity.Value;
                }

                if (type.groupID.HasValue)
                {
                    item.GroupID = type.groupID.Value;
                }

                if (type.mass.HasValue)
                {
                    item.Mass = type.mass.Value;
                }

                if (type.published.HasValue)
                {
                    item.Published = type.published.Value;
                }

                if (type.volume.HasValue)
                {
                    item.Volume = type.volume.Value;
                }

                if (type.portionSize.HasValue)
                {
                    item.PortionSize = type.portionSize.Value;
                }

                collection.Items.Add(item);
            }

            // Set items total count
            ItemsTotalCount = ReprocessingTotalCount = collection.Items.Count;

            // Set skills total count
            SkillsTotalCount = collection.Items.Count(
                item => item.GroupID != DBConstants.FakeSkillsGroupID &&
                InvGroupsTable[item.GroupID].CategoryID == DBConstants.SkillCategoryID);

            return(collection.ToBag());
        }
Exemple #16
0
        /// <summary>
        /// Exports the skills in the skill group.
        /// </summary>
        /// <param name="group">The group.</param>
        /// <returns></returns>
        private static IEnumerable <SerializableSkill> ExportSkillsInGroup(IHasID group)
        {
            List <SerializableSkill> listOfSkillsInGroup = new List <SerializableSkill>();

            var alphaLimit = HoboleaksAlphaSkills.GetAlphaSkillLimits();
            var l5         = new SerializableSkillPrerequisite()
            {
                ID    = 3348, // Leadership
                Level = 5,
                Name  = Database.InvTypesTable[3348].Name
            };

            foreach (InvTypes skill in Database.InvTypesTable.Where(x => x.GroupID == group.ID))
            {
                Util.UpdatePercentDone(Database.SkillsTotalCount);

                int skillID = skill.ID;
                SerializableSkill singleSkill = new SerializableSkill
                {
                    ID          = skillID,
                    Name        = skill.Name,
                    Description = skill.Description,
                    Public      = skill.Published,
                    Cost        = (long)skill.BasePrice,
                    AlphaLimit  = (alphaLimit.ContainsKey(skill.ID)) ? alphaLimit[skill.ID] : 0,
                };

                // Export skill atributes
                Dictionary <int, long> skillAttributes = Database.DgmTypeAttributesTable.Where(
                    x => x.ItemID == skill.ID).ToDictionary(
                    attribute => attribute.AttributeID, attribute => attribute.GetInt64Value);

                singleSkill.Rank = skillAttributes.ContainsKey(DBConstants.SkillTimeConstantPropertyID) &&
                                   skillAttributes[DBConstants.SkillTimeConstantPropertyID] > 0
                    ? skillAttributes[DBConstants.SkillTimeConstantPropertyID]
                    : 1;

                singleSkill.PrimaryAttribute = skillAttributes.ContainsKey(DBConstants.PrimaryAttributePropertyID)
                    ? IntToEveAttribute(skillAttributes[DBConstants.PrimaryAttributePropertyID])
                    : EveAttribute.None;
                singleSkill.SecondaryAttribute = skillAttributes.ContainsKey(DBConstants.SecondaryAttributePropertyID)
                    ? IntToEveAttribute(
                    skillAttributes[DBConstants.SecondaryAttributePropertyID])
                    : EveAttribute.None;

                // Export prerequisites
                List <SerializableSkillPrerequisite> listOfPrerequisites = new List <SerializableSkillPrerequisite>();

                for (int i = 0; i < DBConstants.RequiredSkillPropertyIDs.Count; i++)
                {
                    if (!skillAttributes.ContainsKey(DBConstants.RequiredSkillPropertyIDs[i]) ||
                        !skillAttributes.ContainsKey(DBConstants.RequiredSkillLevelPropertyIDs[i]))
                    {
                        continue;
                    }

                    InvTypes prereqSkill = Database.InvTypesTable[skillAttributes[DBConstants.RequiredSkillPropertyIDs[i]]];

                    SerializableSkillPrerequisite preReq = new SerializableSkillPrerequisite
                    {
                        ID    = prereqSkill.ID,
                        Level =
                            skillAttributes[DBConstants.RequiredSkillLevelPropertyIDs[i]],
                        Name = prereqSkill.Name
                    };

                    // Add prerequisites
                    listOfPrerequisites.Add(preReq);
                }

                // Add prerequesites to skill
                singleSkill.SkillPrerequisites.AddRange(listOfPrerequisites);

                // Hack: Fleet formation skills have all NULL attributes. CCPlease.
                if (skillID == DBConstants.FleetCoordinationSkillID)
                {
                    singleSkill.Description        = "Advanced fleet support skill allowing commanders to increase the size and spread of their fleet formations. Unlocks additional formation scaling options at each level of training.";
                    singleSkill.Rank               = 8;
                    singleSkill.Cost               = 40000000L;
                    singleSkill.PrimaryAttribute   = EveAttribute.Charisma;
                    singleSkill.SecondaryAttribute = EveAttribute.Willpower;
                    singleSkill.AlphaLimit         = 0;
                    singleSkill.SkillPrerequisites.Add(l5);
                    singleSkill.SkillPrerequisites.Add(new SerializableSkillPrerequisite()
                    {
                        ID    = DBConstants.FleetFormationsSkillID,
                        Level = 1,
                        Name  = Database.InvTypesTable[DBConstants.FleetFormationsSkillID].Name
                    });
                }
                else if (skillID == DBConstants.FleetFormationsSkillID)
                {
                    singleSkill.Description        = "Fleet support skill allowing commanders to organize and warp fleets in formation. Unlocks additional formation types at each level of training.";
                    singleSkill.Rank               = 5;
                    singleSkill.Cost               = 40000000L;
                    singleSkill.PrimaryAttribute   = EveAttribute.Charisma;
                    singleSkill.SecondaryAttribute = EveAttribute.Willpower;
                    singleSkill.AlphaLimit         = 0;
                    singleSkill.SkillPrerequisites.Add(l5);
                }

                // Add skill
                listOfSkillsInGroup.Add(singleSkill);
            }
            return(listOfSkillsInGroup);
        }
        public async void Handle(ViewTransactionDetailsEvent message)
        {
            await Activate().ConfigureAwait(false);

            SelectedItem = InvTypes.SingleOrDefault(t => t.TypeId == message.InvType.TypeId);
        }
Exemple #18
0
        /// <summary>
        /// Adds the item properties and prerequisites.
        /// </summary>
        /// <param name="srcItem">The source item.</param>
        /// <param name="item">The serializable item.</param>
        /// <returns></returns>
        private static void AddItemPropsAndPrereq(InvTypes srcItem, SerializableItem item)
        {
            long[] prereqSkills        = new long[DBConstants.RequiredSkillPropertyIDs.Count];
            long[] prereqLevels        = new long[DBConstants.RequiredSkillPropertyIDs.Count];
            var    props               = new List <SerializablePropertyValue>();
            double warpSpeedMultiplier = 1.0;

            if (s_dgmTypeAttributesPerItem.ContainsKey(srcItem.ID))
            {
                foreach (DgmTypeAttributes srcProp in s_dgmTypeAttributesPerItem[srcItem.ID])
                {
                    long propValue = srcProp.GetInt64Value;
                    int  id        = srcProp.AttributeID;
                    // Is it a prereq skill?
                    int prereqIndex = DBConstants.RequiredSkillPropertyIDs.IndexOf(id);
                    if (prereqIndex > -1)
                    {
                        prereqSkills[prereqIndex] = propValue;
                        continue;
                    }
                    // Is it a prereq level?
                    prereqIndex = DBConstants.RequiredSkillLevelPropertyIDs.IndexOf(id);
                    if (prereqIndex > -1)
                    {
                        prereqLevels[prereqIndex] = propValue;
                        continue;
                    }
                    // Recognized group? Includes Launcher, CanFitShip, ModuleShip,
                    // SpecialisationAsteroid, Reaction, and PosCargobayAccept
                    if (AddItemProp(DBConstants.LauncherGroupPropertyIDs, srcProp, props) ||
                        AddItemProp(DBConstants.ChargeGroupPropertyIDs, srcProp, props) ||
                        AddItemProp(DBConstants.CanFitShipGroupPropertyIDs, srcProp, props) ||
                        AddItemProp(DBConstants.ModuleShipGroupPropertyIDs, srcProp, props) ||
                        AddItemProp(DBConstants.SpecialisationAsteroidGroupPropertyIDs, srcProp, props) ||
                        AddItemProp(DBConstants.ReactionGroupPropertyIDs, srcProp, props) ||
                        AddItemProp(DBConstants.PosCargobayAcceptGroupPropertyIDs, srcProp, props))
                    {
                        continue;
                    }
                    // Get the warp speed multiplier
                    if (id == DBConstants.WarpSpeedMultiplierPropertyID && srcProp.ValueFloat != null)
                    {
                        warpSpeedMultiplier = srcProp.ValueFloat.Value;
                    }
                    // Calculate and add the ships warp speed
                    if (id == DBConstants.ShipWarpSpeedPropertyID)
                    {
                        props.Add(new SerializablePropertyValue
                        {
                            ID    = id,
                            Value = warpSpeedMultiplier.ToString(CultureConstants.InvariantCulture)
                        });
                        // Also add packaged volume as a prop as only ships have 'ship warp speed' attribute
                        props.Add(new SerializablePropertyValue
                        {
                            ID    = Properties.PackagedVolumePropertyID,
                            Value = GetPackagedVolume(srcItem.GroupID).ToString(CultureConstants.InvariantCulture)
                        });
                    }
                    // Other properties
                    props.Add(new SerializablePropertyValue {
                        ID = id, Value = srcProp.FormatPropertyValue()
                    });
                    AddMetaData(item, propValue, srcProp);
                }
            }

            CompleteItemPropertiesAddition(srcItem, props);
            // Add properties info to item
            item.Properties.AddRange(props);

            // Prerequisites completion
            var prereqs = new List <SerializablePrerequisiteSkill>();

            for (int i = 0; i < prereqSkills.Length; i++)
            {
                if (prereqSkills[i] != 0)
                {
                    prereqs.Add(new SerializablePrerequisiteSkill {
                        ID = prereqSkills[i], Level = prereqLevels[i]
                    });
                }
            }

            // Add prerequisite skills info to item
            item.PrerequisiteSkills.AddRange(prereqs);
        }
Exemple #19
0
        /// <summary>
        /// Adds the traits.
        /// </summary>
        /// <param name="srcItem">The source item.</param>
        /// <param name="item">The item.</param>
        private static void AddTraits(InvTypes srcItem, SerializableItem item)
        {
            if (Database.InvGroupsTable[srcItem.GroupID].CategoryID != DBConstants.ShipCategoryID)
            {
                return;
            }

            var skillBonusesText = new StringBuilder(512);
            var roleBonusesText = new StringBuilder(512);
            var miscBonusesText = new StringBuilder(512);
            int numSkillBonuses = 0, numRoleBonuses, numMiscBonuses;

            // Group by the bonusing skill
            foreach (var bonuses in Database.InvTraitsTable.Where(x => x.typeID ==
                                                                  srcItem.ID && x.skillID > 0).GroupBy(x => x.skillID))
            {
                int skillID = bonuses.Key ?? 0;
                skillBonusesText.Append(Database.InvTypesTable[skillID].Name);
                skillBonusesText.AppendLine(" bonuses (per skill level):");

                numSkillBonuses += AddBonuses(bonuses, skillBonusesText);
            }
            skillBonusesText.AppendLine();

            // Find the role bonuses
            var RoleBonuses = Database.InvTraitsTable.Where(x => x.typeID == srcItem.ID &&
                                                            x.skillID == -1);

            roleBonusesText.AppendLine("Role bonus:");
            numRoleBonuses = AddBonuses(RoleBonuses, roleBonusesText);

            // Find the misc bonuses
            var MiscBonuses = Database.InvTraitsTable.Where(x => x.typeID == srcItem.ID &&
                                                            x.skillID == -2);

            miscBonusesText.AppendLine("Misc bonus:");
            numMiscBonuses = AddBonuses(MiscBonuses, miscBonusesText);

            // For any T3 destroyer, we need to deal with CCP being horrific cheats. The 'ship
            // traits' are actually derived through some epic hacking from some hidden items.
            // Hard coding some things in the short term, but need to make this MOAR BETTER.
#if false
            List <long> T3DIDs = new List <long> {
                34562, 35683, 34317, 34828
            };
            if (T3DIDs.Contains(item.ID))
            {
                Dictionary <string, int> T3DModeInfo = new Dictionary <string, int>();
                T3DModeInfo.Add("Sharpshooter", 0);
                T3DModeInfo.Add("Defense", 0);
                T3DModeInfo.Add("Propulsion", 0);

                // Determine which T3D we have, and get the relevant sub-item IDs
                switch (item.ID)
                {
                case 34562:
                    // Svipul
                    T3DModeInfo["Sharpshooter"] = 34570;
                    T3DModeInfo["Propulsion"]   = 34566;
                    T3DModeInfo["Defense"]      = 34564;
                    break;

                case 35683:
                    // Hecate
                    T3DModeInfo["Sharpshooter"] = 35688;
                    T3DModeInfo["Propulsion"]   = 35687;
                    T3DModeInfo["Defense"]      = 35686;
                    break;

                case 34317:
                    // Confessor
                    T3DModeInfo["Sharpshooter"] = 34321;
                    T3DModeInfo["Propulsion"]   = 34323;
                    T3DModeInfo["Defense"]      = 34319;
                    break;

                case 34828:
                    // Jackdaw
                    T3DModeInfo["Sharpshooter"] = 35678;
                    T3DModeInfo["Propulsion"]   = 35677;
                    T3DModeInfo["Defense"]      = 35676;
                    break;

                default:
                    break;
                }

                foreach (var T3DMode in T3DModeInfo)
                {
                    int id = T3DMode.Value;
                    if (id > 0)
                    {
                        var DBRecord = Database.InvTypesTable[id];
                        miscBonusesText.Append(T3DMode.Key).AppendLine(" Mode:");
                        miscBonusesText.AppendLine(DBRecord.Description).AppendLine();
                    }
                }
            }
#endif
            // Skip if no bonuses
            if (numSkillBonuses > 0 || numRoleBonuses > 0 || numMiscBonuses > 0)
            {
                var sb = new StringBuilder(1024);
                sb.AppendLine().AppendLine().AppendLine("--- Traits ---");
                if (numSkillBonuses > 0)
                {
                    sb.Append(skillBonusesText.ToString());
                }
                if (numRoleBonuses > 0)
                {
                    sb.Append(roleBonusesText.ToString());
                }
                if (numMiscBonuses > 0)
                {
                    sb.Append(miscBonusesText.ToString());
                }

                // Add to item description
                item.Description += sb.ToString();
            }
        }
 public ItemDisplayWrapper(InvTypes itemData, LoyaltyStoreOffer offer)
     : base(offer)
 {
     _itemData = itemData;
 }
Exemple #21
0
        /// <summary>
        /// Adds the item properties and prerequisites.
        /// </summary>
        /// <param name="srcItem">The source item.</param>
        /// <param name="item">The serializable item.</param>
        /// <returns></returns>
        private static void AddItemPropsAndPrereq(InvTypes srcItem, SerializableItem item)
        {
            Int64[] prereqSkills = new Int64[DBConstants.RequiredSkillPropertyIDs.Count];
            Int64[] prereqLevels = new Int64[DBConstants.RequiredSkillPropertyIDs.Count];
            List <SerializablePropertyValue> props = new List <SerializablePropertyValue>();
            double warpSpeedMultiplier             = 1;

            foreach (DgmTypeAttributes srcProp in Database.DgmTypeAttributesTable.Where(x => x.ItemID == srcItem.ID))
            {
                Int64 propInt64Value = srcProp.GetInt64Value;

                // Is it a prereq skill ?
                int prereqIndex = DBConstants.RequiredSkillPropertyIDs.IndexOf(srcProp.AttributeID);
                if (prereqIndex > -1)
                {
                    prereqSkills[prereqIndex] = propInt64Value;
                    continue;
                }

                // Is it a prereq level ?
                prereqIndex = DBConstants.RequiredSkillLevelPropertyIDs.IndexOf(srcProp.AttributeID);
                if (prereqIndex > -1)
                {
                    prereqLevels[prereqIndex] = propInt64Value;
                    continue;
                }

                // Launcher group ?
                int launcherIndex = DBConstants.LauncherGroupPropertyIDs.IndexOf(srcProp.AttributeID);
                if (launcherIndex > -1)
                {
                    props.Add(new SerializablePropertyValue
                    {
                        ID    = srcProp.AttributeID,
                        Value = Database.InvGroupsTable.HasValue(propInt64Value)
                                                        ? Database.InvGroupsTable[propInt64Value].Name
                                                        : String.Empty
                    });
                    continue;
                }

                // Charge group ?
                int chargeIndex = DBConstants.ChargeGroupPropertyIDs.IndexOf(srcProp.AttributeID);
                if (chargeIndex > -1)
                {
                    props.Add(new SerializablePropertyValue
                    {
                        ID    = srcProp.AttributeID,
                        Value = Database.InvGroupsTable.HasValue(propInt64Value)
                                                        ? Database.InvGroupsTable[propInt64Value].Name
                                                        : String.Empty
                    });
                    continue;
                }

                // CanFitShip group ?
                int canFitShipIndex = DBConstants.CanFitShipGroupPropertyIDs.IndexOf(srcProp.AttributeID);
                if (canFitShipIndex > -1)
                {
                    props.Add(new SerializablePropertyValue
                    {
                        ID    = srcProp.AttributeID,
                        Value = Database.InvGroupsTable.HasValue(propInt64Value)
                                                        ? Database.InvGroupsTable[propInt64Value].Name
                                                        : String.Empty
                    });
                    continue;
                }

                // ModuleShip group ?
                int moduleShipIndex = DBConstants.ModuleShipGroupPropertyIDs.IndexOf(srcProp.AttributeID);
                if (moduleShipIndex > -1)
                {
                    props.Add(new SerializablePropertyValue
                    {
                        ID    = srcProp.AttributeID,
                        Value = Database.InvGroupsTable.HasValue(propInt64Value)
                                                        ? Database.InvGroupsTable[propInt64Value].Name
                                                        : String.Empty
                    });
                    continue;
                }

                // SpecialisationAsteroid group ?
                int specialisationAsteroidIndex = DBConstants.SpecialisationAsteroidGroupPropertyIDs.IndexOf(srcProp.AttributeID);
                if (specialisationAsteroidIndex > -1)
                {
                    props.Add(new SerializablePropertyValue
                    {
                        ID    = srcProp.AttributeID,
                        Value = Database.InvGroupsTable.HasValue(propInt64Value)
                                                        ? Database.InvGroupsTable[propInt64Value].Name
                                                        : String.Empty
                    });
                    continue;
                }

                // Reaction group ?
                int reactionIndex = DBConstants.ReactionGroupPropertyIDs.IndexOf(srcProp.AttributeID);
                if (reactionIndex > -1)
                {
                    props.Add(new SerializablePropertyValue
                    {
                        ID    = srcProp.AttributeID,
                        Value = Database.InvGroupsTable.HasValue(propInt64Value)
                                                        ? Database.InvGroupsTable[propInt64Value].Name
                                                        : String.Empty
                    });
                    continue;
                }

                // PosCargobayAccept group ?
                int posCargobayAcceptIndex = DBConstants.PosCargobayAcceptGroupPropertyIDs.IndexOf(srcProp.AttributeID);
                if (posCargobayAcceptIndex > -1)
                {
                    props.Add(new SerializablePropertyValue
                    {
                        ID    = srcProp.AttributeID,
                        Value = Database.InvGroupsTable.HasValue(propInt64Value)
                                                        ? Database.InvGroupsTable[propInt64Value].Name
                                                        : String.Empty
                    });
                    continue;
                }

                // Get the warp speed multiplier
                if (srcProp.AttributeID == DBConstants.WarpSpeedMultiplierPropertyID && srcProp.ValueFloat != null)
                {
                    warpSpeedMultiplier = srcProp.ValueFloat.Value;
                }

                // We calculate and add the ships warp speed
                if (srcProp.AttributeID == DBConstants.ShipWarpSpeedPropertyID)
                {
                    props.Add(new SerializablePropertyValue
                    {
                        ID    = srcProp.AttributeID,
                        Value = warpSpeedMultiplier.ToString(CultureConstants.InvariantCulture)
                    });

                    // Also add packaged volume as a prop as only ships have 'ship warp speed' attribute
                    props.Add(new SerializablePropertyValue
                    {
                        ID    = Properties.PackagedVolumePropertyID,
                        Value = GetPackagedVolume(srcItem.GroupID).ToString(CultureConstants.InvariantCulture)
                    });
                }

                // Other props
                props.Add(new SerializablePropertyValue {
                    ID = srcProp.AttributeID, Value = srcProp.FormatPropertyValue()
                });

                AddMetaData(item, propInt64Value, srcProp);
            }

            CompleteItemPropertiesAddition(srcItem, props);

            // Add properties info to item
            item.Properties.AddRange(props);

            // Prerequisites completion
            List <SerializablePrerequisiteSkill> prereqs = new List <SerializablePrerequisiteSkill>();

            for (int i = 0; i < prereqSkills.Length; i++)
            {
                if (prereqSkills[i] != 0)
                {
                    prereqs.Add(new SerializablePrerequisiteSkill {
                        ID = prereqSkills[i], Level = prereqLevels[i]
                    });
                }
            }

            // Add prerequisite skills info to item
            item.PrerequisiteSkills.AddRange(prereqs);
        }
Exemple #22
0
        /// <summary>
        /// Sets the market group.
        /// </summary>
        /// <param name="item">The item.</param>
        private static void SetMarketGroupManually(InvTypes item)
        {
            switch (item.ID)
            {
            case DBConstants.WildMinerIBlueprintID:
            case DBConstants.AlphaDataAnalyzerIBlueprintID:
            case DBConstants.DaemonDataAnalyzerIBlueprintID:
            case DBConstants.CodexDataAnalyzerIBlueprintID:
            case DBConstants.CropGasCloudHarvesterBlueprintID:
            case DBConstants.Dual1000mmScoutIAcceleratorCannonBlueprintID:
            case DBConstants.HabitatMinerIBlueprintID:
            case DBConstants.LibramDataAnalyzerIBlueprintID:
            case DBConstants.LimosCitadelCruiseLauncherIBlueprintID:
            case DBConstants.MagpieMobileTractorUnitBlueprintID:
            case DBConstants.PackratMobileTractorUnitBlueprintID:
            case DBConstants.PlowGascloudHarvesterBlueprintID:
            case DBConstants.ShockLimosCitadelTorpedoBayIBlueprintID:
            case DBConstants.WetuMobileDepotBlueprintID:
            case DBConstants.YurtMobileDepotBlueprintID:
                item.MarketGroupID = DBConstants.BlueprintStorylineNonMarketGroupID;
                break;

            case DBConstants.AsteroBlueprintID:
            case DBConstants.BarghestBlueprintID:
            case DBConstants.CambionBlueprintID:
            case DBConstants.ChremoasBlueprintID:
            case DBConstants.EtanaBlueprintID:
            case DBConstants.GarmurBlueprintID:
            case DBConstants.MaliceBlueprintID:
            case DBConstants.MorachaBlueprintID:
            case DBConstants.NestorBlueprintID:
            case DBConstants.OrthrusBlueprintID:
            case DBConstants.PolicePursuitCometBlueprintID:
            case DBConstants.ScorpionIshukoneWatchBlueprintID:
            case DBConstants.ShadowBlueprintID:
            case DBConstants.StratiosBlueprintID:
            case DBConstants.StratiosEmergencyResponderBlueprintID:
            case DBConstants.UtuBlueprintID:
            case DBConstants.VangelBlueprintID:
            case DBConstants.WhiptailBlueprintID:
            case DBConstants.AdrestiaBlueprintID:
            case DBConstants.EchelonBlueprintID:
            case DBConstants.ImperialNavySlicerBlueprintID:
            case DBConstants.CaldariNavyHookbillBlueprintID:
            case DBConstants.FederationNavyCometBlueprintID:
            case DBConstants.RepublicFleetFiretailBlueprintID:
            case DBConstants.NightmareBlueprintID:
            case DBConstants.MacharielBlueprintID:
            case DBConstants.DramielBlueprintID:
            case DBConstants.CruorBlueprintID:
            case DBConstants.SuccubusBlueprintID:
            case DBConstants.DaredevilBlueprintID:
            case DBConstants.CynabalBlueprintID:
            case DBConstants.AshimmuBlueprintID:
            case DBConstants.PhantasmBlueprintID:
            case DBConstants.GorusShuttleBlueprintID:
            case DBConstants.GuristasShuttleBlueprintID:
            case DBConstants.GallenteMiningLaserBlueprintID:
            case DBConstants.InterbusShuttleBlueprintID:
            case DBConstants.FrekiBlueprintID:
            case DBConstants.MimirBlueprintID:
                item.MarketGroupID = DBConstants.BlueprintFactionNonMarketGroupID;
                break;

            case DBConstants.BladeBlueprintID:
            case DBConstants.BlazeLBlueprintID:
            case DBConstants.BlazeMBlueprintID:
            case DBConstants.BlazeSBlueprintID:
            case DBConstants.BoltLBlueprintID:
            case DBConstants.BoltMBlueprintID:
            case DBConstants.BoltSBlueprintID:
            case DBConstants.CapitalRemoteCapacitorTransmitterIIBlueprintID:
            case DBConstants.CapitalRemoteShieldBoosterIIBlueprintID:
            case DBConstants.ChameleonBlueprintID:
            case DBConstants.DaggerBlueprintID:
            case DBConstants.DesolationLBlueprintID:
            case DBConstants.DesolationMBlueprintID:
            case DBConstants.DesolationSBlueprintID:
            case DBConstants.DroneDamageRigIIBlueprintID:
            case DBConstants.ErinyeBlueprintID:
            case DBConstants.GathererBlueprintID:
            case DBConstants.HighGradeAscendancyAlphaBlueprintID:
            case DBConstants.HighGradeAscendancyBetaBlueprintID:
            case DBConstants.HighGradeAscendancyGammaBlueprintID:
            case DBConstants.HighGradeAscendancyDeltaBlueprintID:
            case DBConstants.HighGradeAscendancyEpsilonBlueprintID:
            case DBConstants.HighGradeAscendancyOmegaBlueprintID:
            case DBConstants.KisharBlueprintID:
            case DBConstants.LuxLBlueprintID:
            case DBConstants.LuxMBlueprintID:
            case DBConstants.LuxSBlueprintID:
            case DBConstants.MackinawOREDevelopmentEditionBlueprintID:
            case DBConstants.MediumEWDroneRangeAugmentorIIBlueprintID:
            case DBConstants.MidGradeAscenancyAlphaBlueprintID:
            case DBConstants.MidGradeAscenancyBetaBlueprintID:
            case DBConstants.MidGradeAscenancyGammaBlueprintID:
            case DBConstants.MidGradeAscenancyDeltaBlueprintID:
            case DBConstants.MidGradeAscenancyEpsilonBlueprintID:
            case DBConstants.MidGradeAscenancyOmegaBlueprintID:
            case DBConstants.MinerIIChinaBlueprintID:
            case DBConstants.MiningLaserOptimizationIIBlueprintID:
            case DBConstants.MiningLaserRangeIIBlueprintID:
            case DBConstants.ReconProbeLauncherIIBlueprintID:
            case DBConstants.ScanProbeLauncherIIBlueprintID:
            case DBConstants.ShieldTransporterRigIIBlueprintID:
            case DBConstants.ShockLBlueprintID:
            case DBConstants.ShockMBlueprintID:
            case DBConstants.ShockSBlueprintID:
            case DBConstants.SmallEWDroneRangeAugmentorIIBlueprintID:
            case DBConstants.StormLBlueprintID:
            case DBConstants.StormMBlueprintID:
            case DBConstants.StormSBlueprintID:
            case DBConstants.TalismanAlphaBlueprintID:
                item.MarketGroupID = DBConstants.BlueprintTechIINonMarketGroupID;
                break;

            case DBConstants.LegionBlueprintID:
            case DBConstants.LegionDefensiveAdaptiveAugmenterBlueprintID:
            case DBConstants.LegionElectronicsEnergyParasiticComplexBlueprintID:
            case DBConstants.LegionEngineeringPowerCoreMultiplierBlueprintID:
            case DBConstants.LegionOffensiveDroneSynthesisProjectorBlueprintID:
            case DBConstants.LegionPropulsionChassisOptimizationBlueprintID:
            case DBConstants.LokiBlueprintID:
            case DBConstants.LokiDefensiveAdaptiveShieldingBlueprintID:
            case DBConstants.LokiElectronicsImmobilityDriversBlueprintID:
            case DBConstants.LokiEngineeringPowerCoreMultiplierBlueprintID:
            case DBConstants.LokiOffensiveTurretConcurrenceRegistryBlueprintID:
            case DBConstants.LokiPropulsionChassisOptimizationBlueprintID:
            case DBConstants.ProteusBlueprintID:
            case DBConstants.ProteusDefensiveAdaptiveAugmenterBlueprintID:
            case DBConstants.ProteusElectronicsFrictionExtensionProcessorBlueprintID:
            case DBConstants.ProteusEngineeringPowerCoreMultiplierBlueprintID:
            case DBConstants.ProteusOffensiveDissonicEncodingPlatformBlueprintID:
            case DBConstants.ProteusPropulsionWakeLimiterBlueprintID:
            case DBConstants.TenguBlueprintID:
            case DBConstants.TenguDefensiveAdaptiveShieldingBlueprintID:
            case DBConstants.TenguElectronicsObfuscationManifoldBlueprintID:
            case DBConstants.TenguEngineeringPowerCoreMultiplierBlueprintID:
            case DBConstants.TenguOffensiveAcceleratedEjectionBayBlueprintID:
            case DBConstants.TenguPropulsionIntercalatedNanofibersBlueprintID:
                item.MarketGroupID = DBConstants.BlueprintTechIIINonMarketGroupID;
                break;
            }
        }
Exemple #23
0
        /// <summary>
        /// Exports the skills in the skill group.
        /// </summary>
        /// <param name="group">The group.</param>
        /// <returns></returns>
        private static IEnumerable <SerializableSkill> ExportSkillsInGroup(IHasID group)
        {
            List <SerializableSkill> listOfSkillsInGroup = new List <SerializableSkill>();

            foreach (InvTypes skill in Database.InvTypesTable.Where(x => x.GroupID == group.ID))
            {
                Util.UpdatePercentDone(Database.SkillsTotalCount);

                SerializableSkill singleSkill = new SerializableSkill
                {
                    ID          = skill.ID,
                    Name        = skill.Name,
                    Description = skill.Description,
                    Public      = skill.Published,
                    Cost        = (long)skill.BasePrice,
                };

                // Export skill atributes
                Dictionary <int, Int64> skillAttributes = Database.DgmTypeAttributesTable.Where(
                    x => x.ItemID == skill.ID).ToDictionary(
                    attribute => attribute.AttributeID, attribute => attribute.GetInt64Value);

                singleSkill.Rank = skillAttributes.ContainsKey(DBConstants.SkillTimeConstantPropertyID) &&
                                   skillAttributes[DBConstants.SkillTimeConstantPropertyID] > 0
                    ? skillAttributes[DBConstants.SkillTimeConstantPropertyID]
                    : 1;

                singleSkill.PrimaryAttribute = skillAttributes.ContainsKey(DBConstants.PrimaryAttributePropertyID)
                    ? IntToEveAttribute(skillAttributes[DBConstants.PrimaryAttributePropertyID])
                    : EveAttribute.None;
                singleSkill.SecondaryAttribute = skillAttributes.ContainsKey(DBConstants.SecondaryAttributePropertyID)
                    ? IntToEveAttribute(
                    skillAttributes[DBConstants.SecondaryAttributePropertyID])
                    : EveAttribute.None;
                singleSkill.CanTrainOnTrial = !skillAttributes.ContainsKey(DBConstants.CanNotBeTrainedOnTrialPropertyID) ||
                                              skillAttributes[DBConstants.CanNotBeTrainedOnTrialPropertyID] == 0;

                // Export prerequesities
                List <SerializableSkillPrerequisite> listOfPrerequisites = new List <SerializableSkillPrerequisite>();

                for (int i = 0; i < DBConstants.RequiredSkillPropertyIDs.Count; i++)
                {
                    if (!skillAttributes.ContainsKey(DBConstants.RequiredSkillPropertyIDs[i]) ||
                        !skillAttributes.ContainsKey(DBConstants.RequiredSkillLevelPropertyIDs[i]))
                    {
                        continue;
                    }

                    InvTypes prereqSkill = Database.InvTypesTable[skillAttributes[DBConstants.RequiredSkillPropertyIDs[i]]];

                    SerializableSkillPrerequisite preReq = new SerializableSkillPrerequisite
                    {
                        ID    = prereqSkill.ID,
                        Level =
                            skillAttributes[DBConstants.RequiredSkillLevelPropertyIDs[i]],
                        Name = prereqSkill.Name
                    };

                    // Add prerequisites
                    listOfPrerequisites.Add(preReq);
                }

                // Add prerequesites to skill
                singleSkill.SkillPrerequisites.AddRange(listOfPrerequisites);

                // Add skill
                listOfSkillsInGroup.Add(singleSkill);
            }
            return(listOfSkillsInGroup);
        }
Exemple #24
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;
            }
        }