using Core.Models.Eft.Common.Tables; using Core.Models.Spt.Bots; using Core.Models.Spt.Config; namespace Core.Generators; public class BotWeaponGenerator { private const string _modMagazineSlotId = "mod_magazine"; private BotConfig _botConfig; private PmcConfig _pmcConfig; private RepairConfig _repairConfig; public BotWeaponGenerator() { } /// /// Pick a random weapon based on weightings and generate a functional weapon /// /// Session identifier /// Primary/secondary/holster /// e.g. assault.json /// /// /// Role of bot, e.g. assault/followerBully /// Is weapon generated for a pmc /// /// GenerateWeaponResult object public GenerateWeaponResult GenerateRandomWeapon(string sessionId, string equipmentSlot, BotBaseInventory botTemplateInventory, string weaponParentId, Dictionary modChances, string botRole, bool isPmc, int botLevel) { throw new NotImplementedException(); } /// /// Gets a random weighted weapon from a bot's pool of weapons. /// /// Primary/secondary/holster /// e.g. assault.json /// Weapon template public string PickWeightedWeaponTemplateFromPool(string equipmentSlot, BotBaseInventory botTemplateInventory) { throw new NotImplementedException(); } /// /// Generates a weapon based on the supplied weapon template. /// /// The session identifier. /// Weapon template to generate (use pickWeightedWeaponTplFromPool()). /// Slot to fit into, primary/secondary/holster. /// e.g. assault.json. /// Parent ID of the weapon being generated. /// Dictionary of item types and % chance weapon will have that mod. /// e.g. assault/exusec. /// Is weapon being generated for a PMC. /// The level of the bot. /// GenerateWeaponResult object. public GenerateWeaponResult GenerateWeaponByTpl(string sessionId, string weaponTpl, string slotName, BotBaseInventory botTemplateInventory, string weaponParentId, Dictionary modChances, string botRole, bool isPmc, int botLevel) { throw new NotImplementedException(); } /// /// Insert cartridge(s) into a weapon /// Handles all chambers - patron_in_weapon, patron_in_weapon_000 etc /// /// Weapon and mods /// Cartridge to add to weapon /// Name of slots to create or add ammo to protected void AddCartridgeToChamber(List weaponWithModsList, string ammoTemplate, List chamberSlotIdentifiers) { throw new NotImplementedException(); } /// /// Create a list with weapon base as the only element and /// add additional properties based on weapon type /// /// Weapon template to create item with /// Weapons parent id /// e.g. primary/secondary/holster /// Database template for weapon /// For durability values /// Base weapon item in a list protected List ConstructWeaponBaseList(string weaponTemplate, string weaponParentId, string equipmentSlot, TemplateItem weaponItemTemplate, string botRole) { throw new NotImplementedException(); } /// /// Get the mods necessary to kit out a weapon to its preset level /// /// Weapon to find preset for /// The slot the weapon will be placed in /// Value used for the parent id /// Item template /// Bot role /// List of weapon mods protected List GetPresetWeaponMods(string weaponTemplate, string equipmentSlot, string weaponParentId, TemplateItem itemTemplate, string botRole) { throw new NotImplementedException(); } /// /// Checks if all required slots are occupied on a weapon and all its mods. /// /// Weapon + mods /// Role of bot weapon is for /// True if valid protected bool IsWeaponValid(List weaponItemList, string botRole) { throw new NotImplementedException(); } /// /// Generates extra magazines or bullets (if magazine is internal) and adds them to TacticalVest and Pockets. /// Additionally, adds extra bullets to SecuredContainer /// /// Object with properties for generated weapon (weapon mods pool / weapon template / ammo tpl) /// Magazine weights for count to add to inventory /// Inventory to add magazines to /// The bot type we're generating extra mags for public void AddExtraMagazinesToInventory(GenerateWeaponResult generatedWeaponResult, GenerationData magWeights, BotBaseInventory inventory, string botRole) { throw new NotImplementedException(); } /// /// Add Grenades for UBGL to bot's vest and secure container /// /// Weapon list with mods /// Result of weapon generation /// Bot inventory to add grenades to protected void AddUbglGrenadesToBotInventory(List weaponMods, GenerateWeaponResult generatedWeaponResult, BotBaseInventory inventory) { throw new NotImplementedException(); } /// /// Add ammo to the secure container. /// /// How many stacks of ammo to add. /// Ammo type to add. /// Size of the ammo stack to add. /// Player inventory. protected void AddAmmoToSecureContainer(int stackCount, string ammoTemplate, int stackSize, BotBaseInventory inventory) { throw new NotImplementedException(); } /// /// Get a weapons magazine template from a weapon template. /// /// Mods from a weapon template. /// Weapon to get magazine template for. /// The bot type we are getting the magazine for. /// Magazine template string. protected string GetMagazineTemplateFromWeaponTemplate(List weaponMods, TemplateItem weaponTemplate, string botRole) { throw new NotImplementedException(); } /// /// Finds and returns a compatible ammo template based on the bots ammo weightings (x.json/inventory/equipment/ammo) /// /// Dictionary of all cartridges keyed by type e.g. Caliber556x45NATO /// Weapon details from database we want to pick ammo for /// Ammo template that works with the desired gun protected string GetWeightedCompatibleAmmo(Dictionary> cartridgePool, TemplateItem weaponTemplate) { throw new NotImplementedException(); } /// /// Get the cartridge ids from a weapon template that work with the weapon /// /// Weapon db template to get cartridges for /// List of cartridge tpls protected List GetCompatibleCartridgesFromWeaponTemplate(TemplateItem weaponTemplate) { throw new NotImplementedException(); } /// /// Get a weapons compatible cartridge caliber /// /// Weapon to look up caliber of /// Caliber as string protected string GetWeaponCaliber(TemplateItem weaponTemplate) { throw new NotImplementedException(); } /// /// Fill existing magazines to full, while replacing their contents with specified ammo /// /// Weapon with children /// Magazine item /// Cartridge to insert into magazine protected void FillExistingMagazines(List weaponMods, Item magazine, string cartridgeTemplate) { throw new NotImplementedException(); } /// /// Add desired ammo template as item to weapon modifications list, placed as child to UBGL. /// /// Weapon with children. /// UBGL item. /// Grenade ammo template. protected void FillUbgl(List weaponMods, Item ubglMod, string ubglAmmoTpl) { throw new NotImplementedException(); } /// /// Add cartridge item to weapon item list, if it already exists, update /// /// Weapon items list to amend /// Magazine item details we're adding cartridges to /// Cartridge to put into the magazine /// How many cartridges should go into the magazine /// Magazines db template protected void AddOrUpdateMagazinesChildWithAmmo(List weaponWithMods, Item magazine, string chosenAmmoTpl, TemplateItem magazineTemplate) { throw new NotImplementedException(); } /// /// Fill each Camora with a bullet /// /// Weapon mods to find and update camora mod(s) from /// Magazine id to find and add to /// Ammo template id to hydrate with protected void FillCamorasWithAmmo(List weaponMods, string magazineId, string ammoTpl) { throw new NotImplementedException(); } }