Update types

This commit is contained in:
Dev 2023-10-10 21:21:32 +01:00
parent 7907d533ae
commit ea559bd4aa
106 changed files with 631 additions and 253 deletions

View File

@ -1,4 +1,4 @@
# Mod examples for v3.7.0 # Mod examples for v3.7.1
A collection of example mods that perform typical actions in SPT A collection of example mods that perform typical actions in SPT

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

View File

@ -14,6 +14,7 @@ import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
import { ILogger } from "../models/spt/utils/ILogger"; import { ILogger } from "../models/spt/utils/ILogger";
import { ConfigServer } from "../servers/ConfigServer"; import { ConfigServer } from "../servers/ConfigServer";
import { DatabaseServer } from "../servers/DatabaseServer"; import { DatabaseServer } from "../servers/DatabaseServer";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
import { Watermark } from "../utils/Watermark"; import { Watermark } from "../utils/Watermark";
@ -29,11 +30,12 @@ export declare class ProfileFixerService {
protected localisationService: LocalisationService; protected localisationService: LocalisationService;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected hashUtil: HashUtil;
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected configServer: ConfigServer; protected configServer: ConfigServer;
protected coreConfig: ICoreConfig; protected coreConfig: ICoreConfig;
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, databaseServer: DatabaseServer, configServer: ConfigServer); constructor(logger: ILogger, watermark: Watermark, hideoutHelper: HideoutHelper, inventoryHelper: InventoryHelper, traderHelper: TraderHelper, profileHelper: ProfileHelper, itemHelper: ItemHelper, localisationService: LocalisationService, timeUtil: TimeUtil, jsonUtil: JsonUtil, hashUtil: HashUtil, databaseServer: DatabaseServer, configServer: ConfigServer);
/** /**
* Find issues in the pmc profile data that may cause issues and fix them * Find issues in the pmc profile data that may cause issues and fix them
* @param pmcProfile profile to check and fix * @param pmcProfile profile to check and fix
@ -129,6 +131,17 @@ export declare class ProfileFixerService {
* @param pmcProfile Profile to update * @param pmcProfile Profile to update
*/ */
removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void; removeLegacyScavCaseProductionCrafts(pmcProfile: IPmcData): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/**
* Bsg nested `stats` into a sub object called 'eft'
* @param fullProfile Profile to check for and migrate stats data
*/
migrateStatsToNewStructure(fullProfile: IAkiProfile): void;
/** /**
* 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets * 26126 (7th August) requires bonuses to have an ID, these were not included in the default profile presets
* @param pmcProfile Profile to add missing IDs to * @param pmcProfile Profile to add missing IDs to
@ -136,7 +149,7 @@ export declare class ProfileFixerService {
addMissingIdsToBonuses(pmcProfile: IPmcData): void; addMissingIdsToBonuses(pmcProfile: IPmcData): void;
/** /**
* At some point the property name was changed,migrate data across to new name * At some point the property name was changed,migrate data across to new name
* @param pmcProfile * @param pmcProfile Profile to migrate improvements in
*/ */
protected migrateImprovements(pmcProfile: IPmcData): void; protected migrateImprovements(pmcProfile: IPmcData): void;
} }

View File

@ -27,7 +27,6 @@ import { LocalisationService } from "../services/LocalisationService";
import { OpenZoneService } from "../services/OpenZoneService"; import { OpenZoneService } from "../services/OpenZoneService";
import { ProfileFixerService } from "../services/ProfileFixerService"; import { ProfileFixerService } from "../services/ProfileFixerService";
import { SeasonalEventService } from "../services/SeasonalEventService"; import { SeasonalEventService } from "../services/SeasonalEventService";
import { HashUtil } from "../utils/HashUtil";
import { JsonUtil } from "../utils/JsonUtil"; import { JsonUtil } from "../utils/JsonUtil";
import { RandomUtil } from "../utils/RandomUtil"; import { RandomUtil } from "../utils/RandomUtil";
import { TimeUtil } from "../utils/TimeUtil"; import { TimeUtil } from "../utils/TimeUtil";
@ -36,7 +35,6 @@ export declare class GameController {
protected databaseServer: DatabaseServer; protected databaseServer: DatabaseServer;
protected jsonUtil: JsonUtil; protected jsonUtil: JsonUtil;
protected timeUtil: TimeUtil; protected timeUtil: TimeUtil;
protected hashUtil: HashUtil;
protected preAkiModLoader: PreAkiModLoader; protected preAkiModLoader: PreAkiModLoader;
protected httpServerHelper: HttpServerHelper; protected httpServerHelper: HttpServerHelper;
protected randomUtil: RandomUtil; protected randomUtil: RandomUtil;
@ -58,7 +56,7 @@ export declare class GameController {
protected ragfairConfig: IRagfairConfig; protected ragfairConfig: IRagfairConfig;
protected pmcConfig: IPmcConfig; protected pmcConfig: IPmcConfig;
protected lootConfig: ILootConfig; protected lootConfig: ILootConfig;
constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, hashUtil: HashUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer); constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, itemBaseClassService: ItemBaseClassService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
load(): void; load(): void;
/** /**
* Handle client/game/start * Handle client/game/start
@ -67,12 +65,6 @@ export declare class GameController {
protected addCustomLooseLootPositions(): void; protected addCustomLooseLootPositions(): void;
protected adjustLooseLootSpawnProbabilities(): void; protected adjustLooseLootSpawnProbabilities(): void;
protected setHideoutAreasAndCraftsTo40Secs(): void; protected setHideoutAreasAndCraftsTo40Secs(): void;
/**
* 3.7.0 moved AIDs to be numeric, old profiles need to be migrated
* We store the old AID value in new field `sessionId`
* @param fullProfile Profile to update
*/
protected fixIncorrectAidValue(fullProfile: IAkiProfile): void;
/** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */ /** Apply custom limits on bot types as defined in configs/location.json/botTypeLimits */
protected adjustMapBotLimits(): void; protected adjustMapBotLimits(): void;
/** /**

View File

@ -1,4 +1,5 @@
import { DependencyContainer } from "tsyringe"; import { DependencyContainer } from "tsyringe";
import { ModDetails } from "../models/eft/profile/IAkiProfile";
import { ICoreConfig } from "../models/spt/config/ICoreConfig"; import { ICoreConfig } from "../models/spt/config/ICoreConfig";
import { IModLoader } from "../models/spt/mod/IModLoader"; import { IModLoader } from "../models/spt/mod/IModLoader";
import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData"; import { IPackageJsonData } from "../models/spt/mod/IPackageJsonData";
@ -35,6 +36,7 @@ export declare class PreAkiModLoader implements IModLoader {
*/ */
getImportedModsNames(): string[]; getImportedModsNames(): string[];
getImportedModDetails(): Record<string, IPackageJsonData>; getImportedModDetails(): Record<string, IPackageJsonData>;
getProfileModsGroupedByModName(profileMods: ModDetails[]): ModDetails[];
getModPath(mod: string): string; getModPath(mod: string): string;
protected importMods(): Promise<void>; protected importMods(): Promise<void>;
protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number; protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;

View File

@ -6,8 +6,19 @@ export interface IRepairConfig extends IBaseConfig {
applyRandomizeDurabilityLoss: boolean; applyRandomizeDurabilityLoss: boolean;
weaponSkillRepairGain: number; weaponSkillRepairGain: number;
armorKitSkillPointGainPerRepairPointMultiplier: number; armorKitSkillPointGainPerRepairPointMultiplier: number;
/** INT gain multiplier per repaired item type */
repairKitIntellectGainMultiplier: IIntellectGainValues;
maxIntellectGainPerRepair: IMaxIntellectGainValues;
repairKit: RepairKit; repairKit: RepairKit;
} }
export interface IIntellectGainValues {
weapon: number;
armor: number;
}
export interface IMaxIntellectGainValues {
kit: number;
trader: number;
}
export interface RepairKit { export interface RepairKit {
armor: BonusSettings; armor: BonusSettings;
weapon: BonusSettings; weapon: BonusSettings;

View File

@ -29,7 +29,7 @@ export declare class EventOutputHolder {
/** /**
* Convert the internal trader data object into an object we can send to the client * Convert the internal trader data object into an object we can send to the client
* @param traderData server data for traders * @param traderData server data for traders
* @returns * @returns dict of trader id + TraderData
*/ */
protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>; protected constructTraderRelations(traderData: Record<string, TraderInfo>): Record<string, TraderData>;
/** /**

Some files were not shown because too many files have changed in this diff Show More