Skip to content

Commit 53599e4

Browse files
author
Chomp
committed
Wired up item type blacklist across loot generator/airdrop and cultist circle in consistent way
Reworked Cultist circle code to pass blacklist around as a set rather than array Removed cultist circle use of `itemRewardBlacklist` to store item parent ids, feature is handled by new config property
1 parent 55857a7 commit 53599e4

File tree

3 files changed

+41
-41
lines changed

3 files changed

+41
-41
lines changed

project/src/generators/LootGenerator.ts

+8-1
Original file line numberDiff line numberDiff line change
@@ -205,7 +205,14 @@ export class LootGenerator {
205205

206206
if (useRewardItemBlacklist) {
207207
const itemsToAdd = this.itemFilterService.getItemRewardBlacklist();
208-
itemBlacklist = new Set([...itemBlacklist, ...itemsToAdd]);
208+
209+
// Get all items that match the blacklisted types and fold into item blacklist
210+
const itemTypeBlacklist = this.itemFilterService.getItemRewardBaseTypeBlacklist();
211+
const itemsMatchingTypeBlacklist = Object.values(itemsDb)
212+
.filter((templateItem) => this.itemHelper.isOfBaseclasses(templateItem._parent, itemTypeBlacklist))
213+
.map((templateItem) => templateItem._id);
214+
215+
itemBlacklist = new Set([...itemBlacklist, ...itemsToAdd, ...itemsMatchingTypeBlacklist]);
209216
}
210217

211218
if (!allowBossItems) {

project/src/services/AirdropService.ts

+13-5
Original file line numberDiff line numberDiff line change
@@ -157,17 +157,25 @@ export class AirdropService {
157157
lootSettingsByType = this.airdropConfig.loot[AirdropTypeEnum.COMMON];
158158
}
159159

160+
// Get all items that match the blacklisted types and fold into item blacklist
161+
const itemTypeBlacklist = this.itemFilterService.getItemRewardBaseTypeBlacklist();
162+
const itemsMatchingTypeBlacklist = Object.values(this.itemHelper.getItems())
163+
.filter((templateItem) => this.itemHelper.isOfBaseclasses(templateItem._parent, itemTypeBlacklist))
164+
.map((templateItem) => templateItem._id);
165+
const itemBlacklist = new Set([
166+
...lootSettingsByType.itemBlacklist,
167+
...this.itemFilterService.getItemRewardBlacklist(),
168+
...this.itemFilterService.getBossItems(),
169+
...itemsMatchingTypeBlacklist,
170+
]);
171+
160172
return {
161173
icon: lootSettingsByType.icon,
162174
weaponPresetCount: lootSettingsByType.weaponPresetCount,
163175
armorPresetCount: lootSettingsByType.armorPresetCount,
164176
itemCount: lootSettingsByType.itemCount,
165177
weaponCrateCount: lootSettingsByType.weaponCrateCount,
166-
itemBlacklist: [
167-
...lootSettingsByType.itemBlacklist,
168-
...this.itemFilterService.getItemRewardBlacklist(),
169-
...this.itemFilterService.getBossItems(),
170-
],
178+
itemBlacklist: Array.from(itemBlacklist),
171179
itemTypeWhitelist: lootSettingsByType.itemTypeWhitelist,
172180
itemLimits: lootSettingsByType.itemLimits,
173181
itemStackLimits: lootSettingsByType.itemStackLimits,

project/src/services/CircleOfCultistService.ts

+20-35
Original file line numberDiff line numberDiff line change
@@ -634,27 +634,28 @@ export class CircleOfCultistService {
634634
): string[] {
635635
const rewardPool = new Set<string>();
636636
const hideoutDbData = this.databaseService.getHideout();
637+
const itemsDb = this.databaseService.getItems();
637638

638-
// Merge reward item blacklist and boss item blacklist with cultist circle blacklist from config
639-
const itemRewardBlacklist = [
639+
// Get all items that match the blacklisted types and fold into item blacklist below
640+
const itemTypeBlacklist = this.itemFilterService.getItemRewardBaseTypeBlacklist();
641+
const itemsMatchingTypeBlacklist = Object.values(itemsDb)
642+
.filter((templateItem) => this.itemHelper.isOfBaseclasses(templateItem._parent, itemTypeBlacklist))
643+
.map((templateItem) => templateItem._id);
644+
645+
// Create set of unique values to ignore
646+
const itemRewardBlacklist = new Set([
640647
...this.seasonalEventService.getInactiveSeasonalEventItems(),
641648
...this.itemFilterService.getItemRewardBlacklist(),
642649
...cultistCircleConfig.rewardItemBlacklist,
643-
];
644-
645-
const itemBaseTypeBlacklist = this.itemFilterService.getItemRewardBaseTypeBlacklist();
650+
...itemsMatchingTypeBlacklist,
651+
]);
646652

647653
// Hideout and task rewards are ONLY if the bonus is active
648654
switch (craftingInfo.rewardType) {
649655
case CircleRewardType.RANDOM: {
650656
// Does reward pass the high value threshold
651657
const isHighValueReward = craftingInfo.rewardAmountRoubles >= cultistCircleConfig.highValueThresholdRub;
652-
this.generateRandomisedItemsAndAddToRewardPool(
653-
rewardPool,
654-
itemRewardBlacklist,
655-
itemBaseTypeBlacklist,
656-
isHighValueReward,
657-
);
658+
this.generateRandomisedItemsAndAddToRewardPool(rewardPool, itemRewardBlacklist, isHighValueReward);
658659

659660
break;
660661
}
@@ -665,12 +666,7 @@ export class CircleOfCultistService {
665666

666667
// If we have no tasks or hideout stuff left or need more loot to fill it out, default to high value
667668
if (rewardPool.size < cultistCircleConfig.maxRewardItemCount + 2) {
668-
this.generateRandomisedItemsAndAddToRewardPool(
669-
rewardPool,
670-
itemRewardBlacklist,
671-
itemBaseTypeBlacklist,
672-
true,
673-
);
669+
this.generateRandomisedItemsAndAddToRewardPool(rewardPool, itemRewardBlacklist, true);
674670
}
675671
break;
676672
}
@@ -679,7 +675,7 @@ export class CircleOfCultistService {
679675
// Add custom rewards from config
680676
if (cultistCircleConfig.additionalRewardItemPool.length > 0) {
681677
for (const additionalReward of cultistCircleConfig.additionalRewardItemPool) {
682-
if (itemRewardBlacklist.includes(additionalReward)) {
678+
if (itemRewardBlacklist.has(additionalReward)) {
683679
continue;
684680
}
685681

@@ -699,7 +695,7 @@ export class CircleOfCultistService {
699695
*/
700696
protected addTaskItemRequirementsToRewardPool(
701697
pmcData: IPmcData,
702-
itemRewardBlacklist: string[],
698+
itemRewardBlacklist: Set<string>,
703699
rewardPool: Set<string>,
704700
): void {
705701
const activeTasks = pmcData.Quests.filter((quest) => quest.status === QuestStatus.Started);
@@ -710,7 +706,7 @@ export class CircleOfCultistService {
710706
);
711707
for (const condition of handoverConditions) {
712708
for (const neededItem of condition.target) {
713-
if (itemRewardBlacklist.includes(neededItem) || !this.itemHelper.isValidItem(neededItem)) {
709+
if (itemRewardBlacklist.has(neededItem) || !this.itemHelper.isValidItem(neededItem)) {
714710
continue;
715711
}
716712
this.logger.debug(`Added Task Loot: ${this.itemHelper.getItemName(neededItem)}`);
@@ -730,7 +726,7 @@ export class CircleOfCultistService {
730726
protected addHideoutUpgradeRequirementsToRewardPool(
731727
hideoutDbData: IHideout,
732728
pmcData: IPmcData,
733-
itemRewardBlacklist: string[],
729+
itemRewardBlacklist: Set<string>,
734730
rewardPool: Set<string>,
735731
): void {
736732
const dbAreas = hideoutDbData.areas;
@@ -746,7 +742,7 @@ export class CircleOfCultistService {
746742
const itemRequirements = this.getItemRequirements(nextStageDbData.requirements);
747743
for (const rewardToAdd of itemRequirements) {
748744
if (
749-
itemRewardBlacklist.includes(rewardToAdd.templateId) ||
745+
itemRewardBlacklist.has(rewardToAdd.templateId) ||
750746
!this.itemHelper.isValidItem(rewardToAdd.templateId)
751747
) {
752748
// Dont reward items sacrificed
@@ -779,14 +775,12 @@ export class CircleOfCultistService {
779775
* Get array of random reward items
780776
* @param rewardPool Reward pool to add to
781777
* @param itemRewardBlacklist Item tpls to ignore
782-
* @param itemBaseTypeBlacklist Item base types to ignore
783778
* @param itemsShouldBeHighValue Should these items meet the valuable threshold
784779
* @returns Set of item tpls
785780
*/
786781
protected generateRandomisedItemsAndAddToRewardPool(
787782
rewardPool: Set<string>,
788-
itemRewardBlacklist: string[],
789-
itemBaseTypeBlacklist: string[],
783+
itemRewardBlacklist: Set<string>,
790784
itemsShouldBeHighValue: boolean,
791785
): Set<string> {
792786
const allItems = this.itemHelper.getItems();
@@ -799,16 +793,7 @@ export class CircleOfCultistService {
799793
) {
800794
attempts++;
801795
const randomItem = this.randomUtil.getArrayValue(allItems);
802-
if (
803-
itemRewardBlacklist.includes(randomItem._id) ||
804-
itemRewardBlacklist.includes(randomItem._parent) ||
805-
!this.itemHelper.isValidItem(randomItem._id)
806-
) {
807-
continue;
808-
}
809-
810-
// Item has a blacklisted type, skip
811-
if (this.itemHelper.isOfBaseclasses(randomItem._parent, itemBaseTypeBlacklist)) {
796+
if (itemRewardBlacklist.has(randomItem._id) || !this.itemHelper.isValidItem(randomItem._id)) {
812797
continue;
813798
}
814799

0 commit comments

Comments
 (0)