From 703d2609798e8140b1f1a57827ff3ff99167505f Mon Sep 17 00:00:00 2001 From: acidphantasm Date: Sat, 22 Feb 2025 22:00:53 -0600 Subject: [PATCH 1/2] Fix compatibleCartridges check from always being skipped --- project/src/generators/BotWeaponGenerator.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/project/src/generators/BotWeaponGenerator.ts b/project/src/generators/BotWeaponGenerator.ts index 6c8ea9a07..d383bbbc7 100644 --- a/project/src/generators/BotWeaponGenerator.ts +++ b/project/src/generators/BotWeaponGenerator.ts @@ -578,7 +578,7 @@ export class BotWeaponGenerator { } } - if (!compatibleCartridges) { + if (Object.keys(compatibleCartridges).length === 0) { // No compatible cartridges, use default return weaponTemplate._props.defAmmo; } From 752e344fce7eb38fa3195c1ffa340688e9237613 Mon Sep 17 00:00:00 2001 From: acidphantasm Date: Sat, 22 Feb 2025 22:42:10 -0600 Subject: [PATCH 2/2] Optional commit to also check magazine data in a weapon template --- project/src/generators/BotWeaponGenerator.ts | 46 ++++++++++++++++++-- 1 file changed, 43 insertions(+), 3 deletions(-) diff --git a/project/src/generators/BotWeaponGenerator.ts b/project/src/generators/BotWeaponGenerator.ts index d383bbbc7..fdee21561 100644 --- a/project/src/generators/BotWeaponGenerator.ts +++ b/project/src/generators/BotWeaponGenerator.ts @@ -549,7 +549,7 @@ export class BotWeaponGenerator { ): string { const desiredCaliber = this.getWeaponCaliber(weaponTemplate); - const cartridgePoolForWeapon = cartridgePool[desiredCaliber]; + let cartridgePoolForWeapon = cartridgePool[desiredCaliber]; if (!cartridgePoolForWeapon || cartridgePoolForWeapon?.length === 0) { this.logger.debug( this.localisationService.getText("bot-no_caliber_data_for_weapon_falling_back_to_default", { @@ -578,9 +578,28 @@ export class BotWeaponGenerator { } } + // If no compatible cartridges found still, get caliber data from magazine in weapon template if (Object.keys(compatibleCartridges).length === 0) { - // No compatible cartridges, use default - return weaponTemplate._props.defAmmo; + // Get cartridges from the weapons first magazine in filters + const compatibleCartridgesInMagazine = this.getCompatibleCartridgesFromMagazineTemplate(weaponTemplate); + if (compatibleCartridgesInMagazine.length === 0) { + // No compatible cartridges found in magazine, use default + return weaponTemplate._props.defAmmo; + } + // Get the caliber data from the first compatible round in the magazine + const magazineCaliberData = this.itemHelper.getItem(compatibleCartridgesInMagazine[0])[1]._props.Caliber; + cartridgePoolForWeapon = cartridgePool[magazineCaliberData]; + + for (const cartridge of Object.keys(cartridgePoolForWeapon)) { + if (compatibleCartridgesInMagazine.includes(cartridge)) { + compatibleCartridges[cartridge] = cartridgePoolForWeapon[cartridge]; + } + } + + // Nothing found after also checking magazines, return default ammo + if (Object.keys(compatibleCartridges).length === 0) { + return weaponTemplate._props.defAmmo; + } } return this.weightedRandomHelper.getWeightedValue(compatibleCartridges); @@ -611,6 +630,27 @@ export class BotWeaponGenerator { return cartridges; } + /** + * Get the cartridge ids from a weapon's magazine template that work with the weapon + * @param weaponTemplate Weapon db template to get magazine cartridges for + * @returns Array of cartridge tpls + */ + protected getCompatibleCartridgesFromMagazineTemplate(weaponTemplate: ITemplateItem): string[] { + // Get the first magazine's template from the weapon + const magazineSlot = weaponTemplate._props.Slots.find((slot) => slot._name === "mod_magazine"); + const magazineTemplate = this.itemHelper.getItem(magazineSlot._props.filters[0].Filter[0]); + + // Get the first slots array of cartridges + let cartridges = magazineTemplate[1]._props.Slots[0]?._props.filters[0].Filter; + if (!cartridges) { + // Normal magazines + // None found, try the cartridges array + cartridges = magazineTemplate[1]._props.Cartridges[0]?._props.filters[0].Filter; + } + + return cartridges; + } + /** * Get a weapons compatible cartridge caliber * @param weaponTemplate Weapon to look up caliber of