/// <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); }
/// <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)); } }
/// <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)); } }
/// <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); }
/// <summary> /// Constructor /// </summary> /// <param name="ship"></param> internal Ship(MarketGroup group, SerializableItem src) : base(group, src) { }
/// <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>(); }
/// <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); } } }
/// <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); } }
/// <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(); }
/// <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 })); }
/// <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; }
/// <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; } }
/// <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); }
/// <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); }