From 4c7e465098e8168ecd3f5d5197a90e03529ec48e Mon Sep 17 00:00:00 2001 From: Tyfon <29051038+tyfon7@users.noreply.github.com> Date: Fri, 14 Jun 2024 14:07:13 -0700 Subject: [PATCH] Ragfair sort by barter --- server/.prettierrc | 10 +++++----- server/src/mod.ts | 42 ++++++++++++++++++++++++++++++++++-------- 2 files changed, 39 insertions(+), 13 deletions(-) diff --git a/server/.prettierrc b/server/.prettierrc index 2368bd4..93bf24e 100644 --- a/server/.prettierrc +++ b/server/.prettierrc @@ -1,7 +1,7 @@ { - "tabWidth": 4, - "useTabs": false, - "arrowParens": "avoid", - "trailingComma": "none", - "printWidth": 120 + "tabWidth": 4, + "useTabs": false, + "arrowParens": "avoid", + "trailingComma": "none", + "printWidth": 120 } diff --git a/server/src/mod.ts b/server/src/mod.ts index a60dfc3..c361eb7 100644 --- a/server/src/mod.ts +++ b/server/src/mod.ts @@ -1,13 +1,15 @@ import type { DependencyContainer } from "tsyringe"; -import type { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; import type { InventoryController } from "@spt-aki/controllers/InventoryController"; -import type { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; import type { InRaidHelper } from "@spt-aki/helpers/InRaidHelper"; -import type { StaticRouterModService } from "@spt-aki/services/mod/staticRouter/StaticRouterModService"; -import type { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; +import type { ProfileHelper } from "@spt-aki/helpers/ProfileHelper"; +import type { RagfairSortHelper } from "@spt-aki/helpers/RagfairSortHelper"; +import type { IRagfairOffer } from "@spt-aki/models/eft/ragfair/IRagfairOffer"; +import { Money } from "@spt-aki/models/enums/Money"; +import type { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod"; import type { ILogger } from "@spt-aki/models/spt/utils/ILogger"; -import type { IPmcData } from "@spt-aki/models/eft/common/IPmcData"; +import type { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; +import type { StaticRouterModService } from "@spt-aki/services/mod/staticRouter/StaticRouterModService"; import type { JsonUtil } from "@spt-aki/utils/JsonUtil"; class UIFixes implements IPreAkiLoadMod { @@ -37,7 +39,7 @@ class UIFixes implements IPreAkiLoadMod { return original.call(inventoryController, playerData, request, sessionID); }; }, - { frequency: "Once" } + { frequency: "Always" } ); // Keep quickbinds for items that aren't actually lost on death @@ -46,7 +48,7 @@ class UIFixes implements IPreAkiLoadMod { (_, inRaidHelper: InRaidHelper) => { const original = inRaidHelper.deleteInventory; - inRaidHelper.deleteInventory = (pmcData: IPmcData, sessionId: string): void => { + inRaidHelper.deleteInventory = (pmcData, sessionId) => { // Copy the existing quickbinds const fastPanel = jsonUtil.clone(pmcData.Inventory.fastPanel); @@ -61,7 +63,24 @@ class UIFixes implements IPreAkiLoadMod { } }; }, - { frequency: "Once" } + { frequency: "Always" } + ); + + // Handle barter sort type (fixed in 3.9.0) + container.afterResolution( + "RagfairSortHelper", + (_, ragfairSortHelper: RagfairSortHelper) => { + const original = ragfairSortHelper.sortOffers; + + ragfairSortHelper.sortOffers = (offers, type, direction) => { + if (+type == 2) { + offers.sort(this.sortOffersByBarter); + } + + return original.call(ragfairSortHelper, offers, type, direction); + }; + }, + { frequency: "Always" } ); staticRouterModService.registerStaticRouter( @@ -111,6 +130,13 @@ class UIFixes implements IPreAkiLoadMod { return result; } + + private sortOffersByBarter(a: IRagfairOffer, b: IRagfairOffer): number { + const moneyTpls = Object.values(Money); + const aIsOnlyMoney = a.requirements.length == 1 && moneyTpls.includes(a.requirements[0]._tpl) ? 1 : 0; + const bIsOnlyMoney = b.requirements.length == 1 && moneyTpls.includes(b.requirements[0]._tpl) ? 1 : 0; + return aIsOnlyMoney - bIsOnlyMoney; + } } module.exports = { mod: new UIFixes() };