using SPTarkov.Server.Core.Models.Common; using SPTarkov.Server.Core.Models.Eft.Common.Tables; namespace SPTarkov.Server.Core.Extensions; public static class TemplateItemExtensions { public static IEnumerable OfClass(this Dictionary templates, params MongoId[] baseClasses) { return templates.Where(x => baseClasses.Contains(x.Value.Parent)).Select(x => x.Value); } public static IEnumerable OfClass( this Dictionary templates, Func pred, params MongoId[] baseClasses ) { return templates.Where(x => baseClasses.Contains(x.Value.Parent) && pred(x.Value)).Select(x => x.Value); } /// /// Check if item is quest item /// /// Item to check quest status of /// true if item is flagged as quest item public static bool IsQuestItem(this TemplateItem templateItem) { if (templateItem.Properties.QuestItem.GetValueOrDefault(false)) { return true; } return false; } /// /// Get a weapons default magazine template id /// /// Weapon to get default magazine for /// Tpl of magazine public static MongoId? GetWeaponsDefaultMagazineTpl(this TemplateItem weaponTemplate) { return weaponTemplate.Properties.DefMagType; } /// /// Get the default plate an armor has in its db item /// /// Item to look up default plate /// front/back /// Tpl of plate public static MongoId? GetDefaultPlateTpl(this TemplateItem armorItem, string modSlot) { var relatedItemDbModSlot = armorItem.Properties.Slots?.FirstOrDefault(slot => string.Equals(slot.Name, modSlot, StringComparison.OrdinalIgnoreCase) ); return relatedItemDbModSlot?.Properties?.Filters?.FirstOrDefault()?.Plate; } /// /// Does the passed in lack slots, cartridges or chambers /// /// Item to check /// True if it lacks cartridges/chamber slots, False if not public static bool HasNoSlotsCartridgesOrChambers(this TemplateItem item) { if (item.Properties is null) { return true; } return item.Properties.Slots is null || !item.Properties.Slots.Any() && (item.Properties.Cartridges is null || !item.Properties.Cartridges.Any()) && (item.Properties.Chambers is null || !item.Properties.Chambers.Any()); } }