diff --git a/project/src/generators/LocationGenerator.ts b/project/src/generators/LocationGenerator.ts index ae441aa9..c5b47c18 100644 --- a/project/src/generators/LocationGenerator.ts +++ b/project/src/generators/LocationGenerator.ts @@ -1061,6 +1061,7 @@ export class LocationGenerator const weaponTemplate = this.itemHelper.getItem(chosenTpl)[1]; // Create array with just magazine + const defaultWeapon = this.itemHelper.getItem(rootItem._tpl)[1]; const magazineWithCartridges = [magazine]; this.itemHelper.fillMagazineWithRandomCartridge( magazineWithCartridges, @@ -1068,7 +1069,8 @@ export class LocationGenerator staticAmmoDist, weaponTemplate._props.ammoCaliber, 0.25, - this.itemHelper.getItem(rootItem._tpl)[1], + defaultWeapon._props.defAmmo, + defaultWeapon, ); // Replace existing magazine with above array diff --git a/project/src/helpers/ItemHelper.ts b/project/src/helpers/ItemHelper.ts index ee4076ab..3d43dfe1 100644 --- a/project/src/helpers/ItemHelper.ts +++ b/project/src/helpers/ItemHelper.ts @@ -1181,6 +1181,7 @@ export class ItemHelper * @param staticAmmoDist Cartridge distribution * @param caliber Caliber of cartridge to add to magazine * @param minSizePercent % the magazine must be filled to + * @param defaultCartridgeTpl Cartridge to use when none found * @param weapon Weapon the magazine will be used for (if passed in uses Chamber as whitelist) */ public fillMagazineWithRandomCartridge( @@ -1189,7 +1190,8 @@ export class ItemHelper staticAmmoDist: Record, caliber: string = undefined, minSizePercent = 0.25, - weapon: ITemplateItem = null, + defaultCartridgeTpl?: string, + weapon?: ITemplateItem, ): void { let chosenCaliber = caliber || this.getRandomValidCaliber(magTemplate); @@ -1204,9 +1206,15 @@ export class ItemHelper const cartridgeTpl = this.drawAmmoTpl( chosenCaliber, staticAmmoDist, - weapon?._props.defAmmo, + defaultCartridgeTpl, weapon?._props?.Chambers[0]?._props?.filters[0]?.Filter, ); + + if (!cartridgeTpl) + { + return; + } + this.fillMagazineWithCartridge(magazine, magTemplate, cartridgeTpl, minSizePercent); } @@ -1324,9 +1332,8 @@ export class ItemHelper cartridgeWhitelist: string[] = null, ): string { - const ammoArray = new ProbabilityObjectArray(this.mathUtil, this.jsonUtil); const ammos = staticAmmoDist[caliber]; - if (!ammos) + if (!ammos && fallbackCartridgeTpl) { this.logger.error( `Unable to pick a cartridge for caliber: ${caliber} as staticAmmoDist has no data. using fallback value of ${fallbackCartridgeTpl}`, @@ -1335,7 +1342,7 @@ export class ItemHelper return fallbackCartridgeTpl; } - if (!Array.isArray(ammos)) + if (!Array.isArray(ammos) && fallbackCartridgeTpl) { this.logger.error( `Unable to pick a cartridge for caliber: ${caliber}, the chosen staticAmmoDist data is not an array. Using fallback value of ${fallbackCartridgeTpl}`, @@ -1344,6 +1351,16 @@ export class ItemHelper return fallbackCartridgeTpl; } + if (!ammos && !fallbackCartridgeTpl) + { + this.logger.error( + `Unable to pick a cartridge for caliber: ${caliber} as staticAmmoDist has no data. No fallback value provided`, + ); + + return; + } + + const ammoArray = new ProbabilityObjectArray(this.mathUtil, this.jsonUtil); for (const icd of ammos) { // Whitelist exists and tpl not inside it, skip