Ragfair sort by barter

This commit is contained in:
Tyfon
2024-06-14 14:07:13 -07:00
parent 0fcbf2479e
commit 4c7e465098
2 changed files with 39 additions and 13 deletions

View File

@@ -1,7 +1,7 @@
{ {
"tabWidth": 4, "tabWidth": 4,
"useTabs": false, "useTabs": false,
"arrowParens": "avoid", "arrowParens": "avoid",
"trailingComma": "none", "trailingComma": "none",
"printWidth": 120 "printWidth": 120
} }

View File

@@ -1,13 +1,15 @@
import type { DependencyContainer } from "tsyringe"; import type { DependencyContainer } from "tsyringe";
import type { IPreAkiLoadMod } from "@spt-aki/models/external/IPreAkiLoadMod";
import type { InventoryController } from "@spt-aki/controllers/InventoryController"; 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 { InRaidHelper } from "@spt-aki/helpers/InRaidHelper";
import type { StaticRouterModService } from "@spt-aki/services/mod/staticRouter/StaticRouterModService"; import type { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
import type { DatabaseServer } from "@spt-aki/servers/DatabaseServer"; 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 { 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"; import type { JsonUtil } from "@spt-aki/utils/JsonUtil";
class UIFixes implements IPreAkiLoadMod { class UIFixes implements IPreAkiLoadMod {
@@ -37,7 +39,7 @@ class UIFixes implements IPreAkiLoadMod {
return original.call(inventoryController, playerData, request, sessionID); return original.call(inventoryController, playerData, request, sessionID);
}; };
}, },
{ frequency: "Once" } { frequency: "Always" }
); );
// Keep quickbinds for items that aren't actually lost on death // Keep quickbinds for items that aren't actually lost on death
@@ -46,7 +48,7 @@ class UIFixes implements IPreAkiLoadMod {
(_, inRaidHelper: InRaidHelper) => { (_, inRaidHelper: InRaidHelper) => {
const original = inRaidHelper.deleteInventory; const original = inRaidHelper.deleteInventory;
inRaidHelper.deleteInventory = (pmcData: IPmcData, sessionId: string): void => { inRaidHelper.deleteInventory = (pmcData, sessionId) => {
// Copy the existing quickbinds // Copy the existing quickbinds
const fastPanel = jsonUtil.clone(pmcData.Inventory.fastPanel); 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( staticRouterModService.registerStaticRouter(
@@ -111,6 +130,13 @@ class UIFixes implements IPreAkiLoadMod {
return result; return result;
} }
private sortOffersByBarter(a: IRagfairOffer, b: IRagfairOffer): number {
const moneyTpls = Object.values<string>(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() }; module.exports = { mod: new UIFixes() };