diff --git a/Patches/BarterOfferPatches.cs b/Patches/BarterOfferPatches.cs index b129222..38822a6 100644 --- a/Patches/BarterOfferPatches.cs +++ b/Patches/BarterOfferPatches.cs @@ -144,12 +144,11 @@ public static class BarterOfferPatches return 0; } - DogtagComponent requiredDogTag = requirement.Item.GetItemComponent(); - if (requiredDogTag != null) + if (requirement.Item.GetItemComponent() != null) { return allItems.Select(item => item.GetItemComponent()) .Where(dogtag => dogtag != null) - .Where(dogtag => dogtag.Level >= requiredDogTag.Level) + .Where(dogtag => dogtag.Level >= handoverRequirement.Level) .Where(dogtag => handoverRequirement.Side == EDogtagExchangeSide.Any || dogtag.Side.ToString() == handoverRequirement.Side.ToString()) .Count(); } diff --git a/server/src/mod.ts b/server/src/mod.ts index c46acfb..1f573c6 100644 --- a/server/src/mod.ts +++ b/server/src/mod.ts @@ -13,6 +13,8 @@ import type { ICloner } from "@spt/utils/cloners/ICloner"; import { RagfairLinkedSlotItemService } from "./RagfairLinkedSlotItemService"; import config from "../config/config.json"; +import { RagfairOfferGenerator } from "@spt/generators/RagfairOfferGenerator"; +import { IRagfairOffer } from "@spt/models/eft/ragfair/IRagfairOffer"; class UIFixes implements IPreSptLoadMod { private databaseService: DatabaseService; @@ -50,6 +52,37 @@ class UIFixes implements IPreSptLoadMod { { frequency: "Always" } ); + // Trader offers with dogtag barter - fixed in next SPT release *after* 3.9.3 + container.afterResolution( + "RagfairOfferGenerator", + (_, ragfairOfferGenerator: RagfairOfferGenerator) => { + const original = ragfairOfferGenerator["createOffer"]; // By name because protected + + ragfairOfferGenerator["createOffer"] = (userID, time, items, barterScheme, loyalLevel, isPackOffer) => { + const offer: IRagfairOffer = original.call( + ragfairOfferGenerator, + userID, + time, + items, + barterScheme, + loyalLevel, + isPackOffer + ); + + for (let i = 0; i < offer.requirements.length; i++) { + if (barterScheme[i]["level"] !== undefined) { + this.logger.info("UIFixes - adding dogtag requirements to trader offer"); + offer.requirements[i]["level"] = barterScheme[i]["level"]; + offer.requirements[i]["side"] = barterScheme[i]["side"]; + } + } + + return offer; + }; + }, + { frequency: "Always" } + ); + // Better tool return - starting production if (config.putToolsBack) { container.afterResolution(