Patch server to send level/side on dogtag barters

This commit is contained in:
Tyfon
2024-07-20 15:48:07 -07:00
parent 8e63900164
commit f658724d26
2 changed files with 35 additions and 3 deletions

View File

@@ -144,12 +144,11 @@ public static class BarterOfferPatches
return 0;
}
DogtagComponent requiredDogTag = requirement.Item.GetItemComponent<DogtagComponent>();
if (requiredDogTag != null)
if (requirement.Item.GetItemComponent<DogtagComponent>() != null)
{
return allItems.Select(item => item.GetItemComponent<DogtagComponent>())
.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();
}

View File

@@ -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(