From 035fce63c37ddb8ccc696241bdec9890c492ba95 Mon Sep 17 00:00:00 2001 From: Dev Date: Fri, 13 Oct 2023 20:18:39 +0100 Subject: [PATCH] Make use of `Set` data structure inside `createRandomLoot()` to improve performance via `.has` instead of `.includes` --- project/src/generators/LootGenerator.ts | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/project/src/generators/LootGenerator.ts b/project/src/generators/LootGenerator.ts index 1943eab1..63f379e3 100644 --- a/project/src/generators/LootGenerator.ts +++ b/project/src/generators/LootGenerator.ts @@ -54,14 +54,13 @@ export class LootGenerator const itemTypeCounts = this.initItemLimitCounter(options.itemLimits); const tables = this.databaseServer.getTables(); - const itemBlacklist = this.itemFilterService.getBlacklistedItems(); + const itemBlacklist = new Set(this.itemFilterService.getBlacklistedItems()); - itemBlacklist.push(...options.itemBlacklist); + options.itemBlacklist.forEach(itemBlacklist.add, itemBlacklist); if (!options.allowBossItems) { - const bossItems = this.itemFilterService.getBossItems(); - itemBlacklist.push(...bossItems); + this.itemFilterService.getBossItems().forEach(itemBlacklist.add, itemBlacklist); } // Handle sealed weapon containers @@ -85,7 +84,7 @@ export class LootGenerator } // Get items from items.json that have a type of item + not in global blacklist + basetype is in whitelist - const items = Object.entries(tables.templates.items).filter(x => !itemBlacklist.includes(x[1]._id) + const items = Object.entries(tables.templates.items).filter(x => !itemBlacklist.has(x[1]._id) && x[1]._type.toLowerCase() === "item" && !x[1]._props.QuestItem && options.itemTypeWhitelist.includes(x[1]._parent)); @@ -101,9 +100,10 @@ export class LootGenerator const globalDefaultPresets = Object.entries(tables.globals.ItemPresets).filter(x => x[1]._encyclopedia !== undefined); const randomisedPresetCount = this.randomUtil.getInt(options.presetCount.min, options.presetCount.max); + const itemBlacklistArray = Array.from(itemBlacklist); for (let index = 0; index < randomisedPresetCount; index++) { - if (!this.findAndAddRandomPresetToLoot(globalDefaultPresets, itemTypeCounts, itemBlacklist, result)) + if (!this.findAndAddRandomPresetToLoot(globalDefaultPresets, itemTypeCounts, itemBlacklistArray, result)) { index--; }