From 0c02591422616139cbd968fa2f315ef8bec1aff4 Mon Sep 17 00:00:00 2001 From: Chomp Date: Sat, 7 Dec 2024 09:53:21 +0000 Subject: [PATCH] Refactored code into separate functions --- .../src/services/CircleOfCultistService.ts | 100 ++++++++++-------- 1 file changed, 58 insertions(+), 42 deletions(-) diff --git a/project/src/services/CircleOfCultistService.ts b/project/src/services/CircleOfCultistService.ts index 99327d9c..d68c6480 100644 --- a/project/src/services/CircleOfCultistService.ts +++ b/project/src/services/CircleOfCultistService.ts @@ -24,6 +24,7 @@ import { IDirectRewardSettings, IHideoutConfig, } from "@spt/models/spt/config/IHideoutConfig"; +import { IHideout } from "@spt/models/spt/hideout/IHideout"; import { ILogger } from "@spt/models/spt/utils/ILogger"; import { EventOutputHolder } from "@spt/routers/EventOutputHolder"; import { ConfigServer } from "@spt/servers/ConfigServer"; @@ -636,50 +637,10 @@ export class CircleOfCultistService { case CircleRewardType.HIDEOUT_TASK: { // Hideout/Task loot // Add hideout upgrade requirements - const dbAreas = hideoutDbData.areas; - for (const profileArea of this.getPlayerAccessibleHideoutAreas(pmcData.Hideout.Areas)) { - const currentStageLevel = profileArea.level; - const areaType = profileArea.type; - - // Get next stage of area - const dbArea = dbAreas.find((area) => area.type === areaType); - const nextStageDbData = dbArea?.stages[currentStageLevel + 1]; - if (nextStageDbData) { - // Next stage exists, gather up requirements and add to pool - const itemRequirements = this.getItemRequirements(nextStageDbData.requirements); - for (const rewardToAdd of itemRequirements) { - if ( - itemRewardBlacklist.includes(rewardToAdd.templateId) || - !this.itemHelper.isValidItem(rewardToAdd.templateId) - ) { - // Dont reward items sacrificed - continue; - } - this.logger.debug( - `Added Hideout Loot: ${this.itemHelper.getItemName(rewardToAdd.templateId)}`, - ); - rewardPool.add(rewardToAdd.templateId); - } - } - } + this.addHideoutUpgradeRequirementsToRewardPool(hideoutDbData, pmcData, itemRewardBlacklist, rewardPool); // Add task/quest items - const activeTasks = pmcData.Quests.filter((quest) => quest.status === QuestStatus.Started); - for (const task of activeTasks) { - const questData = this.questHelper.getQuestFromDb(task.qid, pmcData); - const handoverConditions = questData.conditions.AvailableForFinish.filter( - (c) => c.conditionType === "HandoverItem", - ); - for (const condition of handoverConditions) { - for (const neededItem of condition.target) { - if (itemRewardBlacklist.includes(neededItem) || !this.itemHelper.isValidItem(neededItem)) { - continue; - } - this.logger.debug(`Added Task Loot: ${this.itemHelper.getItemName(neededItem)}`); - rewardPool.add(neededItem); - } - } - } + this.addTaskItemRequirementsToRewardPool(pmcData, itemRewardBlacklist, rewardPool); // If we have no tasks or hideout stuff left or need more loot to fill it out, default to high value if (rewardPool.size < cultistCircleConfig.maxRewardItemCount + 2) { @@ -704,6 +665,61 @@ export class CircleOfCultistService { return Array.from(rewardPool); } + protected addTaskItemRequirementsToRewardPool( + pmcData: IPmcData, + itemRewardBlacklist: string[], + rewardPool: Set, + ) { + const activeTasks = pmcData.Quests.filter((quest) => quest.status === QuestStatus.Started); + for (const task of activeTasks) { + const questData = this.questHelper.getQuestFromDb(task.qid, pmcData); + const handoverConditions = questData.conditions.AvailableForFinish.filter( + (condition) => condition.conditionType === "HandoverItem", + ); + for (const condition of handoverConditions) { + for (const neededItem of condition.target) { + if (itemRewardBlacklist.includes(neededItem) || !this.itemHelper.isValidItem(neededItem)) { + continue; + } + this.logger.debug(`Added Task Loot: ${this.itemHelper.getItemName(neededItem)}`); + rewardPool.add(neededItem); + } + } + } + } + + protected addHideoutUpgradeRequirementsToRewardPool( + hideoutDbData: IHideout, + pmcData: IPmcData, + itemRewardBlacklist: string[], + rewardPool: Set, + ) { + const dbAreas = hideoutDbData.areas; + for (const profileArea of this.getPlayerAccessibleHideoutAreas(pmcData.Hideout.Areas)) { + const currentStageLevel = profileArea.level; + const areaType = profileArea.type; + + // Get next stage of area + const dbArea = dbAreas.find((area) => area.type === areaType); + const nextStageDbData = dbArea?.stages[currentStageLevel + 1]; + if (nextStageDbData) { + // Next stage exists, gather up requirements and add to pool + const itemRequirements = this.getItemRequirements(nextStageDbData.requirements); + for (const rewardToAdd of itemRequirements) { + if ( + itemRewardBlacklist.includes(rewardToAdd.templateId) || + !this.itemHelper.isValidItem(rewardToAdd.templateId) + ) { + // Dont reward items sacrificed + continue; + } + this.logger.debug(`Added Hideout Loot: ${this.itemHelper.getItemName(rewardToAdd.templateId)}`); + rewardPool.add(rewardToAdd.templateId); + } + } + } + } + /** * Get all active hideout areas * @param areas Hideout areas to iterate over