79 lines
2.9 KiB
TypeScript
79 lines
2.9 KiB
TypeScript
import { inject, injectable } from "tsyringe";
|
|
|
|
import { ILocationBase } from "../models/eft/common/ILocationBase";
|
|
import { ConfigTypes } from "../models/enums/ConfigTypes";
|
|
import { ILocationConfig } from "../models/spt/config/ILocationConfig";
|
|
import { ILogger } from "../models/spt/utils/ILogger";
|
|
import { ConfigServer } from "../servers/ConfigServer";
|
|
import { DatabaseServer } from "../servers/DatabaseServer";
|
|
import { JsonUtil } from "../utils/JsonUtil";
|
|
import { RandomUtil } from "../utils/RandomUtil";
|
|
import { LocalisationService } from "./LocalisationService";
|
|
|
|
/** Service for adding new zones to a maps OpenZones property */
|
|
@injectable()
|
|
export class OpenZoneService
|
|
{
|
|
protected locationConfig: ILocationConfig;
|
|
|
|
constructor(
|
|
@inject("WinstonLogger") protected logger: ILogger,
|
|
@inject("RandomUtil") protected randomUtil: RandomUtil,
|
|
@inject("JsonUtil") protected jsonUtil: JsonUtil,
|
|
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
|
|
@inject("LocalisationService") protected localisationService: LocalisationService,
|
|
@inject("ConfigServer") protected configServer: ConfigServer
|
|
)
|
|
{
|
|
this.locationConfig = this.configServer.getConfig(ConfigTypes.LOCATION);
|
|
}
|
|
|
|
/**
|
|
* Add open zone to specified map
|
|
* @param locationId map location (e.g. factory4_day)
|
|
* @param zoneToAdd zone to add
|
|
*/
|
|
public addZoneToMap(locationId: string, zoneToAdd: string): void
|
|
{
|
|
const location = this.locationConfig.openZones[locationId];
|
|
if (!location)
|
|
{
|
|
this.locationConfig.openZones[locationId] = [];
|
|
}
|
|
|
|
if (!this.locationConfig.openZones[locationId].includes(zoneToAdd))
|
|
{
|
|
this.locationConfig.openZones[locationId].push(zoneToAdd);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Add open zones to all maps found in config/location.json to db
|
|
*/
|
|
public applyZoneChangesToAllMaps(): void
|
|
{
|
|
const dbLocations = this.databaseServer.getTables().locations;
|
|
for (const mapKey in this.locationConfig.openZones)
|
|
{
|
|
if (!dbLocations[mapKey])
|
|
{
|
|
this.logger.error(this.localisationService.getText("openzone-unable_to_find_map", mapKey));
|
|
}
|
|
|
|
const dbLocationToUpdate: ILocationBase = dbLocations[mapKey].base;
|
|
const zonesToAdd = this.locationConfig.openZones[mapKey];
|
|
|
|
// Convert openzones string into array, easier to work wih
|
|
const mapOpenZonesArray = dbLocationToUpdate.OpenZones.split(",");
|
|
for (const zoneToAdd of zonesToAdd)
|
|
{
|
|
if (!mapOpenZonesArray.includes(zoneToAdd))
|
|
{
|
|
// Add new zone to array and convert array into string again
|
|
mapOpenZonesArray.push(zoneToAdd);
|
|
dbLocationToUpdate.OpenZones = mapOpenZonesArray.join(",");
|
|
}
|
|
}
|
|
}
|
|
}
|
|
} |