Improve handling of buying less than max stacksize from fence
This commit is contained in:
parent
8dab47b3fd
commit
034ac83a10
@ -5,7 +5,7 @@ import { ItemHelper } from "@spt-aki/helpers/ItemHelper";
|
||||
import { TraderAssortHelper } from "@spt-aki/helpers/TraderAssortHelper";
|
||||
import { TraderHelper } from "@spt-aki/helpers/TraderHelper";
|
||||
import { IPmcData } from "@spt-aki/models/eft/common/IPmcData";
|
||||
import { Item, Upd } from "@spt-aki/models/eft/common/tables/IItem";
|
||||
import { Item } from "@spt-aki/models/eft/common/tables/IItem";
|
||||
import { IAddItemDirectRequest } from "@spt-aki/models/eft/inventory/IAddItemDirectRequest";
|
||||
import { IItemEventRouterResponse } from "@spt-aki/models/eft/itemEvent/IItemEventRouterResponse";
|
||||
import { IProcessBuyTradeRequestData } from "@spt-aki/models/eft/trade/IProcessBuyTradeRequestData";
|
||||
@ -120,12 +120,12 @@ export class TradeHelper
|
||||
{
|
||||
// Update assort/flea item values
|
||||
const traderAssorts = this.traderHelper.getTraderAssortsByTraderId(buyRequestData.tid).items;
|
||||
const itemPurchased = traderAssorts.find((x) => x._id === buyRequestData.item_id);
|
||||
const itemPurchased = traderAssorts.find((assort) => assort._id === buyRequestData.item_id);
|
||||
|
||||
// Decrement trader item count
|
||||
itemPurchased.upd.StackObjectsCount -= buyCount;
|
||||
|
||||
this.fenceService.removeFenceOffer(buyRequestData.item_id);
|
||||
this.fenceService.amendOrRemoveFenceOffer(buyRequestData.item_id, buyCount);
|
||||
};
|
||||
|
||||
const fenceItems = this.fenceService.getRawFenceAssorts().items;
|
||||
|
@ -897,21 +897,49 @@ export class FenceService
|
||||
}
|
||||
|
||||
/**
|
||||
* Remove an assort from fence by id
|
||||
* @param assortIdToRemove assort id to remove from fence assorts
|
||||
* Remove or lower stack size of an assort from fence by id
|
||||
* @param assortId assort id to adjust
|
||||
* @param buyCount Count of items bought
|
||||
*/
|
||||
public removeFenceOffer(assortIdToRemove: string): void
|
||||
public amendOrRemoveFenceOffer(assortId: string, buyCount: number): void
|
||||
{
|
||||
let fenceAssortItem = this.fenceAssort.items.find(item => item._id === assortId);
|
||||
if (!fenceAssortItem)
|
||||
{
|
||||
// Not in main assorts, check secondary section
|
||||
fenceAssortItem = this.fenceDiscountAssort.items.find(item => item._id === assortId);
|
||||
if (!fenceAssortItem)
|
||||
{
|
||||
this.logger.error(`Offer with id: ${assortId} not found`);
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
// Player wants to buy whole stack, delete stack
|
||||
if (fenceAssortItem.upd.StackObjectsCount === buyCount)
|
||||
{
|
||||
this.deleteOffer(assortId, this.fenceAssort.items);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
// Adjust stack size
|
||||
fenceAssortItem.upd.StackObjectsCount -= buyCount;
|
||||
}
|
||||
|
||||
protected deleteOffer(assortId: string, assorts: Item[]): void
|
||||
{
|
||||
// Assort could have child items, remove those too
|
||||
const itemWithChildrenToRemove = this.itemHelper.findAndReturnChildrenAsItems(this.fenceAssort.items, assortIdToRemove);
|
||||
const itemWithChildrenToRemove = this.itemHelper.findAndReturnChildrenAsItems(assorts, assortId);
|
||||
for (const itemToRemove of itemWithChildrenToRemove)
|
||||
{
|
||||
let indexToRemove = this.fenceAssort.items.findIndex(item => item._id === itemToRemove._id);
|
||||
let indexToRemove = assorts.findIndex(item => item._id === itemToRemove._id);
|
||||
|
||||
// No offer found in main assort, check discount items
|
||||
if (indexToRemove === -1)
|
||||
{
|
||||
indexToRemove = this.fenceDiscountAssort.items.findIndex((i) => i._id === itemToRemove._id);
|
||||
indexToRemove = this.fenceDiscountAssort.items.findIndex((item) => item._id === itemToRemove._id);
|
||||
this.fenceDiscountAssort.items.splice(indexToRemove, 1);
|
||||
|
||||
if (indexToRemove === -1)
|
||||
@ -923,7 +951,7 @@ export class FenceService
|
||||
}
|
||||
|
||||
// Remove offer from assort
|
||||
this.fenceAssort.items.splice(indexToRemove, 1);
|
||||
assorts.splice(indexToRemove, 1);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user