mirror of
https://github.com/sp-tarkov/server.git
synced 2025-02-13 09:50:43 -05:00
Moved map marker logic out of InventoryController
and into its own MapMarkerService
This commit is contained in:
parent
292dadc55e
commit
9d79aa70eb
@ -41,6 +41,7 @@ import { EventOutputHolder } from "@spt/routers/EventOutputHolder";
|
||||
import { DatabaseService } from "@spt/services/DatabaseService";
|
||||
import { FenceService } from "@spt/services/FenceService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { MapMarkerService } from "@spt/services/MapMarkerService";
|
||||
import { PlayerService } from "@spt/services/PlayerService";
|
||||
import { RagfairOfferService } from "@spt/services/RagfairOfferService";
|
||||
import { ICloner } from "@spt/utils/cloners/ICloner";
|
||||
@ -63,6 +64,7 @@ export class InventoryController
|
||||
@inject("QuestHelper") protected questHelper: QuestHelper,
|
||||
@inject("HideoutHelper") protected hideoutHelper: HideoutHelper,
|
||||
@inject("RagfairOfferService") protected ragfairOfferService: RagfairOfferService,
|
||||
@inject("MapMarkerService") protected mapMarkerService: MapMarkerService,
|
||||
@inject("ProfileHelper") protected profileHelper: ProfileHelper,
|
||||
@inject("PaymentHelper") protected paymentHelper: PaymentHelper,
|
||||
@inject("TraderHelper") protected traderHelper: TraderHelper,
|
||||
@ -817,16 +819,10 @@ export class InventoryController
|
||||
output: IItemEventRouterResponse,
|
||||
): void
|
||||
{
|
||||
// Get map from inventory
|
||||
const mapItem = pmcData.Inventory.items.find((i) => i._id === request.item);
|
||||
const adjustedMapItem = this.mapMarkerService.createMarkerOnMap(pmcData, request);
|
||||
|
||||
// add marker
|
||||
mapItem.upd.Map = mapItem.upd.Map || { Markers: [] };
|
||||
request.mapMarker.Note = this.sanitiseMapMarkerText(request.mapMarker.Note);
|
||||
mapItem.upd.Map.Markers.push(request.mapMarker);
|
||||
|
||||
// sync with client
|
||||
output.profileChanges[sessionID].items.change.push(mapItem);
|
||||
// Sync with client
|
||||
output.profileChanges[sessionID].items.change.push(adjustedMapItem);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -843,15 +839,7 @@ export class InventoryController
|
||||
output: IItemEventRouterResponse,
|
||||
): void
|
||||
{
|
||||
// Get map from inventory
|
||||
const mapItem = pmcData.Inventory.items.find((i) => i._id === request.item);
|
||||
|
||||
// remove marker
|
||||
const markers = mapItem.upd.Map.Markers.filter((marker) =>
|
||||
{
|
||||
return marker.X !== request.X && marker.Y !== request.Y;
|
||||
});
|
||||
mapItem.upd.Map.Markers = markers;
|
||||
const mapItem = this.mapMarkerService.deleteMarkerFromMap(pmcData, request);
|
||||
|
||||
// sync with client
|
||||
output.profileChanges[sessionID].items.change.push(mapItem);
|
||||
@ -871,28 +859,12 @@ export class InventoryController
|
||||
output: IItemEventRouterResponse,
|
||||
): void
|
||||
{
|
||||
// Get map from inventory
|
||||
const mapItem = pmcData.Inventory.items.find((i) => i._id === request.item);
|
||||
|
||||
// edit marker
|
||||
const indexOfExistingNote = mapItem.upd.Map.Markers.findIndex((m) => m.X === request.X && m.Y === request.Y);
|
||||
request.mapMarker.Note = this.sanitiseMapMarkerText(request.mapMarker.Note);
|
||||
mapItem.upd.Map.Markers[indexOfExistingNote] = request.mapMarker;
|
||||
const mapItem = this.mapMarkerService.editMarkerOnMap(pmcData, request);
|
||||
|
||||
// sync with client
|
||||
output.profileChanges[sessionID].items.change.push(mapItem);
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip out characters from note string that are not: letter/numbers/unicode/spaces
|
||||
* @param mapNoteText Marker text to sanitise
|
||||
* @returns Sanitised map marker text
|
||||
*/
|
||||
protected sanitiseMapMarkerText(mapNoteText: string): string
|
||||
{
|
||||
return mapNoteText.replace(/[^\p{L}\d ]/gu, "");
|
||||
}
|
||||
|
||||
/**
|
||||
* Handle OpenRandomLootContainer event
|
||||
* Handle event fired when a container is unpacked (currently only the halloween pumpkin)
|
||||
|
@ -214,6 +214,7 @@ import { ItemFilterService } from "@spt/services/ItemFilterService";
|
||||
import { LocaleService } from "@spt/services/LocaleService";
|
||||
import { LocalisationService } from "@spt/services/LocalisationService";
|
||||
import { MailSendService } from "@spt/services/MailSendService";
|
||||
import { MapMarkerService } from "@spt/services/MapMarkerService";
|
||||
import { MatchBotDetailsCacheService } from "@spt/services/MatchBotDetailsCacheService";
|
||||
import { MatchLocationService } from "@spt/services/MatchLocationService";
|
||||
import { CustomItemService } from "@spt/services/mod/CustomItemService";
|
||||
@ -789,6 +790,7 @@ export class Container
|
||||
depContainer.register<GiftService>("GiftService", GiftService);
|
||||
depContainer.register<MailSendService>("MailSendService", MailSendService);
|
||||
depContainer.register<RaidTimeAdjustmentService>("RaidTimeAdjustmentService", RaidTimeAdjustmentService);
|
||||
depContainer.register<MapMarkerService>("MapMarkerService", MapMarkerService);
|
||||
|
||||
depContainer.register<ProfileActivityService>("ProfileActivityService", ProfileActivityService, {
|
||||
lifecycle: Lifecycle.Singleton,
|
||||
|
96
project/src/services/MapMarkerService.ts
Normal file
96
project/src/services/MapMarkerService.ts
Normal file
@ -0,0 +1,96 @@
|
||||
import { inject, injectable } from "tsyringe";
|
||||
import { IPmcData } from "@spt/models/eft/common/IPmcData";
|
||||
import { Item } from "@spt/models/eft/common/tables/IItem";
|
||||
import { IInventoryCreateMarkerRequestData } from "@spt/models/eft/inventory/IInventoryCreateMarkerRequestData";
|
||||
import { IInventoryDeleteMarkerRequestData } from "@spt/models/eft/inventory/IInventoryDeleteMarkerRequestData";
|
||||
import { IInventoryEditMarkerRequestData } from "@spt/models/eft/inventory/IInventoryEditMarkerRequestData";
|
||||
import { ILogger } from "@spt/models/spt/utils/ILogger";
|
||||
|
||||
@injectable()
|
||||
export class MapMarkerService
|
||||
{
|
||||
constructor(
|
||||
@inject("PrimaryLogger") protected logger: ILogger,
|
||||
)
|
||||
{}
|
||||
|
||||
/**
|
||||
* Add note to a map item in player inventory
|
||||
* @param pmcData Player profile
|
||||
* @param request Add marker request
|
||||
* @returns Item
|
||||
*/
|
||||
public createMarkerOnMap(
|
||||
pmcData: IPmcData,
|
||||
request: IInventoryCreateMarkerRequestData,
|
||||
): Item
|
||||
{
|
||||
// Get map from inventory
|
||||
const mapItem = pmcData.Inventory.items.find((i) => i._id === request.item);
|
||||
|
||||
// add marker to map item
|
||||
mapItem.upd.Map = mapItem.upd.Map || { Markers: [] };
|
||||
|
||||
// Update request note with text, then add to maps upd
|
||||
request.mapMarker.Note = this.sanitiseMapMarkerText(request.mapMarker.Note);
|
||||
mapItem.upd.Map.Markers.push(request.mapMarker);
|
||||
|
||||
return mapItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Delete a map marker
|
||||
* @param pmcData Player profile
|
||||
* @param request Delete marker request
|
||||
* @returns Item
|
||||
*/
|
||||
public deleteMarkerFromMap(
|
||||
pmcData: IPmcData,
|
||||
request: IInventoryDeleteMarkerRequestData,
|
||||
): Item
|
||||
{
|
||||
// Get map from inventory
|
||||
const mapItem = pmcData.Inventory.items.find((item) => item._id === request.item);
|
||||
|
||||
// remove marker
|
||||
const markers = mapItem.upd.Map.Markers.filter((marker) =>
|
||||
{
|
||||
return marker.X !== request.X && marker.Y !== request.Y;
|
||||
});
|
||||
mapItem.upd.Map.Markers = markers;
|
||||
|
||||
return mapItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Edit an existing map marker
|
||||
* @param pmcData Player profile
|
||||
* @param request Edit marker request
|
||||
* @returns Item
|
||||
*/
|
||||
public editMarkerOnMap(
|
||||
pmcData: IPmcData,
|
||||
request: IInventoryEditMarkerRequestData,
|
||||
): Item
|
||||
{
|
||||
// Get map from inventory
|
||||
const mapItem = pmcData.Inventory.items.find((item) => item._id === request.item);
|
||||
|
||||
// edit marker
|
||||
const indexOfExistingNote = mapItem.upd.Map.Markers.findIndex((m) => m.X === request.X && m.Y === request.Y);
|
||||
request.mapMarker.Note = this.sanitiseMapMarkerText(request.mapMarker.Note);
|
||||
mapItem.upd.Map.Markers[indexOfExistingNote] = request.mapMarker;
|
||||
|
||||
return mapItem;
|
||||
}
|
||||
|
||||
/**
|
||||
* Strip out characters from note string that are not: letter/numbers/unicode/spaces
|
||||
* @param mapNoteText Marker text to sanitise
|
||||
* @returns Sanitised map marker text
|
||||
*/
|
||||
protected sanitiseMapMarkerText(mapNoteText: string): string
|
||||
{
|
||||
return mapNoteText.replace(/[^\p{L}\d ]/gu, "");
|
||||
}
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user