Ejemplo n.º 1
0
        /// <summary>
        /// Deserialization constructor.
        /// </summary>
        /// <param name="group"></param>
        /// <param name="src"></param>
        internal Implant(MarketGroup group, SerializableItem src)
            : base(group, src)
        {
            // Gets the slot
            var slotProperty = this.Properties[DBConstants.ImplantSlotPropertyID];
            m_implantSlot = (slotProperty == null ? ImplantSlots.None : (ImplantSlots)(slotProperty.Value.IValue - 1));

            // Get the bonus
            switch (m_implantSlot)
            {
                case ImplantSlots.Charisma:
                    m_bonus = this.Properties[DBConstants.CharismaModifierPropertyID].Value.IValue;
                    break;
                case ImplantSlots.Intelligence:
                    m_bonus = this.Properties[DBConstants.IntelligenceModifierPropertyID].Value.IValue;
                    break;
                case ImplantSlots.Memory:
                    m_bonus = this.Properties[DBConstants.MemoryModifierPropertyID].Value.IValue;
                    break;
                case ImplantSlots.Perception:
                    m_bonus = this.Properties[DBConstants.PerceptionModifierPropertyID].Value.IValue;
                    break;
                case ImplantSlots.Willpower:
                    m_bonus = this.Properties[DBConstants.WillpowerModifierPropertyID].Value.IValue;
                    break;
                default:
                    break;
            }

            // Adds itself to the implants slot
            StaticItems.GetImplants(m_implantSlot).Add(this);
        }
Ejemplo n.º 2
0
        /// <summary>
        /// Base deserialization constructor.
        /// </summary>
        /// <param name="src"></param>
        internal Item(MarketGroup group, SerializableItem src)
            : this(src.ID, src.Name)
        {
            m_marketGroup = group;

            m_icon = src.Icon;
            m_race = src.Race;
            m_slot = src.Slot;
            m_family = src.Family;
            m_description = src.Description;

            m_metaLevel = src.MetaLevel;
            m_metaGroup = src.MetaGroup;

            m_reprocessing = new FastList<Material>(0);
            m_properties = new PropertiesCollection(src.Properties);

            // Skills prerequisites
            m_prerequisites = new FastList<StaticSkillLevel>((src.Prereqs != null ? src.Prereqs.Length : 0));
            if (src.Prereqs == null)
                return;

            foreach (var prereq in src.Prereqs)
            {
                m_prerequisites.Add(new StaticSkillLevel(prereq.ID, prereq.Level));
            }
        }
Ejemplo n.º 3
0
        /// <summary>
        /// Base deserialization constructor.
        /// </summary>
        /// <param name="group">The group.</param>
        /// <param name="src">The source.</param>
        internal Item(MarketGroup group, SerializableItem src)
            : this(src.ID, src.Name)
        {
            MarketGroup = group;
            Icon = src.Icon;
            Race = src.Race;
            FittingSlot = src.Slot == ItemSlot.None ? ItemSlot.NoSlot : src.Slot;
            Family = src.Family;
            Description = src.Description;
            CategoryName = src.Category;
            GroupName = src.Group;

            PortionSize = src.PortionSize;
            MetaLevel = src.MetaLevel;
            MetaGroup = src.MetaGroup;

            Properties = new EvePropertyCollection(src.Properties);
            ReactionMaterial = new ReactionMaterialCollection(src.ReactionInfo);
            ControlTowerFuel = new ControlTowerFuelCollection(src.ControlTowerFuelInfo);

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

            foreach (SerializablePrerequisiteSkill prereq in src.PrerequisiteSkills)
            {
                m_prerequisites.Add(new StaticSkillLevel(prereq.ID, prereq.Level));
            }
        }
Ejemplo n.º 4
0
        /// <summary>
        /// Deserialization constructor.
        /// </summary>
        /// <param name="group"></param>
        /// <param name="src"></param>
        internal Implant(MarketGroup group, SerializableItem src)
            : base(group, src)
        {
            // Gets the slot
            EvePropertyValue? slotProperty = Properties[DBConstants.ImplantSlotPropertyID];

            if (slotProperty == null)
                return;

            Slot = (ImplantSlots)(slotProperty.Value.Int64Value - 1);

            // Sets the implant bonus
            SetImplantBonus();

            // Adds itself to the implants slot
            StaticItems.GetImplants(Slot).Add(this);
        }
Ejemplo n.º 5
0
        /// <summary>
        /// Constructor
        /// </summary>
        /// <param name="ship"></param>
        internal Ship(MarketGroup group, SerializableItem src)
            : base(group, src)
        {

        }
Ejemplo n.º 6
0
 /// <summary>
 /// Constructor.
 /// </summary>
 /// <param name="group">The group.</param>
 /// <param name="src">The source.</param>
 internal Ship(MarketGroup group, SerializableItem src)
     : base(group, src)
 {
     Recommendations = new StaticRecommendations<StaticCertificate>();
 }
Ejemplo n.º 7
0
        /// <summary>
        /// Add properties to an item.
        /// </summary>
        /// <param name="srcItem"></param>
        /// <param name="groupItems"></param>
        /// <returns></returns>
        private static void CreateItem(InvType srcItem, List<SerializableItem> groupItems)
        {
            UpdatePercentDone(s_itemGenTotal);

            srcItem.Generated = true;

            // Creates the item with base informations
            var item = new SerializableItem
                           {
                               ID = srcItem.ID,
                               Name = srcItem.Name,
                               Description = srcItem.Description
                           };

            // Icon
            item.Icon = (srcItem.IconID.HasValue ? s_icons[srcItem.IconID.Value].Icon : String.Empty);

            // Initialize item metagroup
            item.MetaGroup = ItemMetaGroup.Empty;

            // Add the properties and prereqs
            int baseWarpSpeed = 3;
            double warpSpeedMultiplier = 1;
            var props = new List<SerializablePropertyValue>();
            var prereqSkills = new int[DBConstants.RequiredSkillPropertyIDs.Length];
            var prereqLevels = new int[DBConstants.RequiredSkillPropertyIDs.Length];
            foreach (DgmTypeAttribute srcProp in s_typeAttributes.Where(x => x.ItemID == srcItem.ID))
            {
                var propIntValue = (srcProp.ValueInt.HasValue ? srcProp.ValueInt.Value : (int) srcProp.ValueFloat.Value);

                // Is it a prereq skill ?
                int prereqIndex = Array.IndexOf(DBConstants.RequiredSkillPropertyIDs, srcProp.AttributeID);
                if (prereqIndex >= 0)
                {
                    prereqSkills[prereqIndex] = propIntValue;
                    continue;
                }

                // Is it a prereq level ?
                prereqIndex = Array.IndexOf(DBConstants.RequiredSkillLevelPropertyIDs, srcProp.AttributeID);
                if (prereqIndex >= 0)
                {
                    prereqLevels[prereqIndex] = propIntValue;
                    continue;
                }

                // Launcher group ?
                int launcherIndex = Array.IndexOf(DBConstants.LauncherGroupIDs, srcProp.AttributeID);
                if (launcherIndex >= 0)
                {
                    props.Add(new SerializablePropertyValue
                                    {
                                        ID = srcProp.AttributeID,
                                        Value = s_groups[propIntValue].Name
                                    });
                    continue;
                }

                // Charge group ?
                int chargeIndex = Array.IndexOf(DBConstants.ChargeGroupIDs, srcProp.AttributeID);
                if (chargeIndex >= 0)
                {
                    props.Add(new SerializablePropertyValue
                                    {
                                        ID = srcProp.AttributeID,
                                        Value = s_groups[propIntValue].Name
                                    });
                    continue;
                }

                // CanFitShip group ?
                int canFitShipIndex = Array.IndexOf(DBConstants.CanFitShipGroupIDs, srcProp.AttributeID);
                if (canFitShipIndex >= 0)
                {
                    props.Add(new SerializablePropertyValue
                                    {
                                        ID = srcProp.AttributeID,
                                        Value = s_groups[propIntValue].Name
                                    });
                    continue;
                }

                // ModuleShip group ?
                int moduleShipIndex = Array.IndexOf(DBConstants.ModuleShipGroupIDs, srcProp.AttributeID);
                if (moduleShipIndex >= 0)
                {
                    props.Add(new SerializablePropertyValue
                                    {
                                        ID = srcProp.AttributeID,
                                        Value = s_groups[propIntValue].Name
                                    });
                    continue;
                }

                // SpecialisationAsteroid group ?
                int specialisationAsteroidIndex = Array.IndexOf(DBConstants.SpecialisationAsteroidGroupIDs,
                                                                srcProp.AttributeID);
                if (specialisationAsteroidIndex >= 0)
                {
                    props.Add(new SerializablePropertyValue
                                    {
                                        ID = srcProp.AttributeID,
                                        Value = s_groups[propIntValue].Name
                                    });
                    continue;
                }

                // Reaction group ?
                int reactionIndex = Array.IndexOf(DBConstants.ReactionGroupIDs, srcProp.AttributeID);
                if (reactionIndex >= 0)
                {
                    props.Add(new SerializablePropertyValue
                                    {
                                        ID = srcProp.AttributeID,
                                        Value = s_groups[propIntValue].Name
                                    });
                    continue;
                }

                // PosCargobayAccept group ?
                int posCargobayAcceptIndex = Array.IndexOf(DBConstants.PosCargobayAcceptGroupIDs, srcProp.AttributeID);
                if (posCargobayAcceptIndex >= 0)
                {
                    props.Add(new SerializablePropertyValue
                                    {
                                        ID = srcProp.AttributeID,
                                        Value = s_groups[propIntValue].Name
                                    });
                    continue;
                }

                // Get the warp speed multiplier
                if (srcProp.AttributeID == DBConstants.WarpSpeedMultiplierPropertyID)
                    warpSpeedMultiplier = srcProp.ValueFloat.Value;

                // We calculate the Ships Warp Speed
                if (srcProp.AttributeID == DBConstants.ShipWarpSpeedPropertyID)
                    props.Add(new SerializablePropertyValue
                                    {ID = srcProp.AttributeID, Value = (baseWarpSpeed*warpSpeedMultiplier).ToString()});

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

                // Is metalevel property ?
                if (srcProp.AttributeID == DBConstants.MetaLevelPropertyID)
                    item.MetaLevel = propIntValue;

                // Is techlevel property ?
                if (srcProp.AttributeID == DBConstants.TechLevelPropertyID)
                {
                    switch (propIntValue)
                    {
                        default:
                        case 1:
                            item.MetaGroup = ItemMetaGroup.T1;
                            break;
                        case 2:
                            item.MetaGroup = ItemMetaGroup.T2;
                            break;
                        case 3:
                            item.MetaGroup = ItemMetaGroup.T3;
                            break;
                    }
                }

                // Is metagroup property ?
                if (srcProp.AttributeID == DBConstants.MetaGroupPropertyID)
                {
                    switch (propIntValue)
                    {
                        case 3:
                            item.MetaGroup = ItemMetaGroup.Storyline;
                            break;
                        case 4:
                            item.MetaGroup = ItemMetaGroup.Faction;
                            break;
                        case 5:
                            item.MetaGroup = ItemMetaGroup.Officer;
                            break;
                        case 6:
                            item.MetaGroup = ItemMetaGroup.Deadspace;
                            break;
                        default:
                            item.MetaGroup = ItemMetaGroup.None;
                            break;
                    }
                }
            }

            // Ensures there is a mass and add it to prop
            if (srcItem.Mass != 0)
                props.Add(new SerializablePropertyValue
                              {ID = DBConstants.MassPropertyID, Value = srcItem.Mass.ToString()});

            // Ensures there is a cargo capacity and add it to prop
            if (srcItem.Capacity != 0)
                props.Add(new SerializablePropertyValue
                              {ID = DBConstants.CargoCapacityPropertyID, Value = srcItem.Capacity.ToString()});

            // Ensures there is a volume and add it to prop
            if (srcItem.Volume != 0)
                props.Add(new SerializablePropertyValue
                              {ID = DBConstants.VolumePropertyID, Value = srcItem.Volume.ToString()});

            // Add base price as a prop
            props.Add(new SerializablePropertyValue {ID = s_propBasePriceID, Value = srcItem.BasePrice.FormatDecimal()});

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

            // 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.Prereqs = prereqs.ToArray();

            // Metagroup
            foreach (InvMetaType relation in s_metaTypes
                .Where(x => x.ItemID == srcItem.ID && item.MetaGroup == ItemMetaGroup.Empty))
            {
                switch (relation.MetaGroupID)
                {
                    case 1:
                        item.MetaGroup = ItemMetaGroup.T1;
                        break;
                    case 2:
                        item.MetaGroup = ItemMetaGroup.T2;
                        break;
                    case 3:
                        item.MetaGroup = ItemMetaGroup.Storyline;
                        break;
                    case 4:
                        item.MetaGroup = ItemMetaGroup.Faction;
                        break;
                    case 5:
                        item.MetaGroup = ItemMetaGroup.Officer;
                        break;
                    case 6:
                        item.MetaGroup = ItemMetaGroup.Deadspace;
                        break;
                    case 14:
                        item.MetaGroup = ItemMetaGroup.T3;
                        break;
                    default:
                        item.MetaGroup = ItemMetaGroup.None;
                        break;
                }
            }

            if (item.MetaGroup == ItemMetaGroup.Empty)
                item.MetaGroup = ItemMetaGroup.T1;

            // Race ID
            item.Race = (Race) Enum.ToObject(typeof (Race), (srcItem.RaceID == null ? 0 : srcItem.RaceID));

            // Set race to Faction if item race is Jovian
            if (item.Race == Race.Jove)
                item.Race = Race.Faction;

            // Set race to ORE if it is in the ORE market groups
            // within mining barges, exhumers, industrial or capital industrial ships
            if (srcItem.MarketGroupID == DBConstants.MiningBargesGroupID
                || srcItem.MarketGroupID == DBConstants.ExhumersGroupID
                || srcItem.MarketGroupID == DBConstants.IndustrialsGroupID
                || srcItem.MarketGroupID == DBConstants.CapitalIndustrialsGroupID)
                item.Race = Race.Ore;

            // Set race to Faction if ship has Pirate Faction property
            foreach (SerializablePropertyValue prop in props)
            {
                if (prop.ID == DBConstants.ShipBonusPirateFactionPropertyID)
                    item.Race = Race.Faction;
            }

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

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

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

            // Look for variations which are not in any market group
            foreach (InvMetaType variation in s_metaTypes.Where(x => x.ParentItemID == srcItem.ID))
            {
                InvType srcVariationItem = s_types[variation.ItemID];
                if (srcVariationItem.Published && srcVariationItem.MarketGroupID == null)
                {
                    srcVariationItem.RaceID = (int)Race.Faction;
                    CreateItem(srcVariationItem, groupItems);
                }
            }
        }
Ejemplo n.º 8
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);
            }
        }
Ejemplo n.º 9
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();
        }
Ejemplo n.º 10
0
 /// <summary>
 /// Adds the reaction info.
 /// </summary>
 /// <param name="srcItem">The source item.</param>
 /// <param name="item">The item.</param>
 private static void AddReactionInfo(IHasID srcItem, SerializableItem item)
 {
     item.ReactionInfo.AddRange(Database.InvTypeReactionsTable.Where(x => x.ID == srcItem.ID).Select(
         srcReaction => new
         {
             srcReaction,
             multiplier = Database.DgmTypeAttributesTable.Where(
                 x => x.ItemID == srcReaction.TypeID &&
                      x.AttributeID == DBConstants.MoonMiningAmountPropertyID).Select(
                          x => x.GetInt64Value).FirstOrDefault()
         }).Select(
             reaction => new SerializableReactionInfo
             {
                 ID = reaction.srcReaction.TypeID,
                 IsInput = reaction.srcReaction.Input,
                 Quantity = reaction.multiplier > 0
                     ? reaction.srcReaction.Quantity * reaction.multiplier
                     : reaction.srcReaction.Quantity
             }));
 }
Ejemplo n.º 11
0
        /// <summary>
        /// Adds the meta group.
        /// </summary>
        /// <param name="srcItem">The source item.</param>
        /// <param name="item">The serializable item.</param>
        private static void AddMetaGroup(IHasID srcItem, SerializableItem item)
        {
            int itemID = Database.InvBlueprintTypesTable.Any(x => x.ID == srcItem.ID)
                ? Database.InvBlueprintTypesTable[srcItem.ID].ProductTypeID
                : srcItem.ID;

            foreach (InvMetaTypes relation in Database.InvMetaTypesTable.Where(x => x.ItemID == itemID))
            {
                switch (relation.MetaGroupID)
                {
                    case DBConstants.TechIMetaGroupID:
                        item.MetaGroup = ItemMetaGroup.T1;
                        break;
                    case DBConstants.TechIIMetaGroupID:
                        item.MetaGroup = ItemMetaGroup.T2;
                        break;
                    case DBConstants.StorylineMetaGroupID:
                        item.MetaGroup = ItemMetaGroup.Storyline;
                        break;
                    case DBConstants.FactionMetaGroupID:
                        item.MetaGroup = ItemMetaGroup.Faction;
                        break;
                    case DBConstants.OfficerMetaGroupID:
                        item.MetaGroup = ItemMetaGroup.Officer;
                        break;
                    case DBConstants.DeadspaceMetaGroupID:
                        item.MetaGroup = ItemMetaGroup.Deadspace;
                        break;
                    case DBConstants.TechIIIMetaGroupID:
                        item.MetaGroup = ItemMetaGroup.T3;
                        break;
                    default:
                        item.MetaGroup = ItemMetaGroup.None;
                        break;
                }
            }

            if (item.MetaGroup == ItemMetaGroup.None)
                item.MetaGroup = ItemMetaGroup.T1;
        }
Ejemplo n.º 12
0
        /// <summary>
        /// Adds the meta data.
        /// </summary>
        /// <param name="item">The item.</param>
        /// <param name="propInt64Value">The prop int value.</param>
        /// <param name="srcProp">The SRC prop.</param>
        private static void AddMetaData(SerializableItem item, Int64 propInt64Value, DgmTypeAttributes srcProp)
        {
            // Is metalevel property ?
            if (srcProp.AttributeID == DBConstants.MetaLevelPropertyID)
                item.MetaLevel = propInt64Value;

            // Is techlevel property ?
            if (srcProp.AttributeID == DBConstants.TechLevelPropertyID)
            {
                switch (propInt64Value)
                {
                    default:
                        item.MetaGroup = ItemMetaGroup.T1;
                        break;
                    case DBConstants.TechLevelII:
                        item.MetaGroup = ItemMetaGroup.T2;
                        break;
                    case DBConstants.TechLevelIII:
                        item.MetaGroup = ItemMetaGroup.T3;
                        break;
                }
            }

            // Is metagroup property ?
            if (srcProp.AttributeID != DBConstants.MetaGroupPropertyID)
                return;

            switch (propInt64Value)
            {
                case DBConstants.StorylineMetaGroupID:
                    item.MetaGroup = ItemMetaGroup.Storyline;
                    break;
                case DBConstants.FactionMetaGroupID:
                    item.MetaGroup = ItemMetaGroup.Faction;
                    break;
                case DBConstants.OfficerMetaGroupID:
                    item.MetaGroup = ItemMetaGroup.Officer;
                    break;
                case DBConstants.DeadspaceMetaGroupID:
                    item.MetaGroup = ItemMetaGroup.Deadspace;
                    break;
                default:
                    item.MetaGroup = ItemMetaGroup.None;
                    break;
            }
        }
Ejemplo n.º 13
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);
        }
Ejemplo n.º 14
0
        /// <summary>
        /// Adds the control tower fuel info.
        /// </summary>
        /// <param name="srcItem">The source item.</param>
        /// <param name="item">The item.</param>
        private static void AddControlTowerFuelInfo(IHasID srcItem, SerializableItem item)
        {
            IEnumerable<SerializableControlTowerFuel> controlTowerResourcesTable = Database.InvControlTowerResourcesTable
                .Join(Database.InvControlTowerResourcePurposesTable, ctr => ctr.PurposeID, ctrp => ctrp.ID,
                    (ctr, ctrp) => new { ctr, ctrp })
                .Where(x => x.ctr.ID == srcItem.ID)
                .Select(resource => new SerializableControlTowerFuel
                {
                    ID = resource.ctr.ResourceID,
                    Purpose = resource.ctrp.PurposeName,
                    Quantity = resource.ctr.Quantity,
                    MinSecurityLevel = resource.ctr.MinSecurityLevel.HasValue
                        ? resource.ctr.MinSecurityLevel.Value.ToString(CultureInfo.InvariantCulture)
                        : String.Empty,
                    FactionID = resource.ctr.FactionID.HasValue
                        ? resource.ctr.FactionID.Value.ToString(CultureInfo.InvariantCulture)
                        : String.Empty,
                    FactionName = resource.ctr.FactionID.HasValue
                        ? Database.ChrFactionsTable[resource.ctr.FactionID.Value].
                            FactionName
                        : String.Empty
                });

            item.ControlTowerFuelInfo.AddRange(controlTowerResourcesTable);
        }