Implement TransitItemsDelivery service via expansion of the BTR item delivery handler (!413)

- Fixes exception thrown when attempting to transfer items during transit
- Implements transit item transfer by expanding on the existing BTR item transfer code (They are both BTR services)

Co-authored-by: DrakiaXYZ <565558+TheDgtl@users.noreply.github.com>
Reviewed-on: https://dev.sp-tarkov.com/SPT/Server/pulls/413
Co-authored-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
Co-committed-by: DrakiaXYZ <drakiaxyz@noreply.dev.sp-tarkov.com>
This commit is contained in:
DrakiaXYZ 2024-09-27 07:19:20 +00:00 committed by chomp
parent ca8b61a001
commit 3703698a1a
4 changed files with 34 additions and 29 deletions

View File

@ -102,6 +102,16 @@
}, },
"ServiceItemCost": [], "ServiceItemCost": [],
"UniqueItems": [] "UniqueItems": []
},
"TransitItemsDelivery": {
"TraderId": "656f0f98d80a697f855d34b1",
"TraderServiceType": "TransitItemsDelivery",
"Requirements": {
"CompletedQuests": [],
"Standings": []
},
"ServiceItemCost": [],
"UniqueItems": []
} }
} }
}, },

View File

@ -7,5 +7,8 @@
}, },
{ {
"serviceType": "BtrBotCover" "serviceType": "BtrBotCover"
} },
{
"serviceType": "TransitItemsDelivery"
}
] ]

View File

@ -5,4 +5,5 @@ export enum TraderServiceType {
BTR_ITEMS_DELIVERY = "BtrItemsDelivery", BTR_ITEMS_DELIVERY = "BtrItemsDelivery",
PLAYER_TAXI = "PlayerTaxi", PLAYER_TAXI = "PlayerTaxi",
BTR_BOT_COVER = "BtrBotCover", BTR_BOT_COVER = "BtrBotCover",
TRANSIT_ITEMS_DELIVERY = "TransitItemsDelivery",
} }

View File

@ -311,10 +311,8 @@ export class LocationLifecycleService {
const isDead = this.isPlayerDead(request.results); const isDead = this.isPlayerDead(request.results);
const isSurvived = this.isPlayerSurvived(request.results); const isSurvived = this.isPlayerSurvived(request.results);
// Handle items transferred via BTR to player // Handle items transferred via BTR or transit to player
this.handleBTRItemTransferEvent(sessionId, request); this.handleItemTransferEvent(sessionId, request);
this.handleTransitItemTransferEvent(sessionId, request);
if (!isPmc) { if (!isPmc) {
this.handlePostRaidPlayerScav(sessionId, pmcProfile, scavProfile, isDead, request); this.handlePostRaidPlayerScav(sessionId, pmcProfile, scavProfile, isDead, request);
@ -688,23 +686,28 @@ export class LocationLifecycleService {
} }
/** /**
* Check if player used BTR item sending service and send items to player via mail if found * Check if player used BTR or transit item sending service and send items to player via mail if found
* @param sessionId Session id * @param sessionId Session id
* @param request End raid request * @param request End raid request
*/ */
protected handleBTRItemTransferEvent(sessionId: string, request: IEndLocalRaidRequestData): void { protected handleItemTransferEvent(sessionId: string, request: IEndLocalRaidRequestData): void {
const btrId = `${Traders.BTR}_btr`; const transferTypes = ["btr", "transit"];
let itemsToSend = request.transferItems[btrId] ?? [];
if (itemsToSend.length === 0) {
return;
}
// Filter out the btr container item from transferred items before delivering for (const trasferType of transferTypes) {
itemsToSend = itemsToSend.filter((item) => item._id !== btrId); const rootId = `${Traders.BTR}_${trasferType}`;
this.btrItemDelivery(sessionId, Traders.BTR, itemsToSend); let itemsToSend = request.transferItems[rootId] ?? [];
// Filter out the btr container item from transferred items before delivering
itemsToSend = itemsToSend.filter((item) => item._id !== Traders.BTR);
if (itemsToSend.length === 0) {
continue;
}
this.transferItemDelivery(sessionId, Traders.BTR, itemsToSend);
}
} }
protected btrItemDelivery(sessionId: string, traderId: string, items: IItem[]): void { protected transferItemDelivery(sessionId: string, traderId: string, items: IItem[]): void {
const serverProfile = this.saveServer.getProfile(sessionId); const serverProfile = this.saveServer.getProfile(sessionId);
const pmcData = serverProfile.characters.pmc; const pmcData = serverProfile.characters.pmc;
@ -737,18 +740,6 @@ export class LocationLifecycleService {
); );
} }
protected handleTransitItemTransferEvent(sessionId: string, request: IEndLocalRaidRequestData) {
const id = "TODO_DUMP";
const transitRootId = `${id}_transit`;
const itemsToSend = request.transferItems[transitRootId] ?? [];
if (itemsToSend.length === 0) {
this.logger.error("NOT IMPLEMENTED");
return;
}
this.logger.error("NOT IMPLEMENTED");
}
protected handleInsuredItemLostEvent( protected handleInsuredItemLostEvent(
sessionId: string, sessionId: string,
preRaidPmcProfile: IPmcData, preRaidPmcProfile: IPmcData,