empty slot linked search

This commit is contained in:
Tyfon
2024-07-10 17:31:33 -07:00
parent 395108eda8
commit 90a197afc9
10 changed files with 295 additions and 25 deletions

View File

@@ -0,0 +1,45 @@
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;
}
}

View File

@@ -10,6 +10,7 @@ import type { ILogger } from "@spt/models/spt/utils/ILogger";
import type { DatabaseService } from "@spt/services/DatabaseService";
import type { StaticRouterModService } from "@spt/services/mod/staticRouter/StaticRouterModService";
import type { ICloner } from "@spt/utils/cloners/ICloner";
import { RagfairLinkedSlotItemService } from "./RagfairLinkedSlotItemService";
import config from "../config/config.json";
@@ -143,6 +144,10 @@ class UIFixes implements IPreSptLoadMod {
);
}
// Register slot-aware linked item service
container.register<RagfairLinkedSlotItemService>("RagfairLinkedSlotItemService", RagfairLinkedSlotItemService);
container.register("RagfairLinkedItemService", { useToken: "RagfairLinkedSlotItemService" });
staticRouterModService.registerStaticRouter(
"UIFixesRoutes",
[