Files
Tarkov-UIFixes/server/src/RagfairLinkedSlotItemService.ts
2024-07-10 17:31:33 -07:00

46 lines
1.7 KiB
TypeScript

import { ItemHelper } from "@spt/helpers/ItemHelper";
import { ITemplateItem } from "@spt/models/eft/common/tables/ITemplateItem";
import { ILogger } from "@spt/models/spt/utils/ILogger";
import { DatabaseService } from "@spt/services/DatabaseService";
import { RagfairLinkedItemService } from "@spt/services/RagfairLinkedItemService";
import { inject, injectable } from "tsyringe";
@injectable()
export class RagfairLinkedSlotItemService extends RagfairLinkedItemService {
constructor(
@inject("DatabaseService") protected databaseService: DatabaseService,
@inject("ItemHelper") protected itemHelper: ItemHelper,
@inject("PrimaryLogger") protected logger: ILogger
) {
super(databaseService, itemHelper);
}
public override getLinkedItems(linkedSearchId: string): Set<string> {
const [tpl, slotName] = linkedSearchId.split(":", 2);
if (slotName) {
this.logger.info(`UIFixes: Finding items for specific slot ${tpl}:${slotName}`);
return this.getSpecificFilter(this.databaseService.getItems()[tpl], slotName);
}
return super.getLinkedItems(tpl);
}
protected getSpecificFilter(item: ITemplateItem, slotName: string): Set<string> {
const results = new Set<string>();
// For whatever reason, all chamber slots have the name "patron_in_weapon"
const groupName = slotName === "patron_in_weapon" ? "Chambers" : "Slots";
const group = item._props[groupName] ?? [];
const sub = group.find(slot => slot._name === slotName);
for (const filter of sub?._props?.filters ?? []) {
for (const f of filter.Filter) {
results.add(f);
}
}
return results;
}
}