/// <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(); } } // 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 <int> T3DIDs = new List <int> { 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(skillBonusesText); sb.Append(roleBonusesText); sb.Append(miscBonusesText); // Add to item description item.Description += sb.ToString(); }
/// <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(); }