From e6c0fc78354ee1e2b0847683dbbc328f328333d0 Mon Sep 17 00:00:00 2001
From: Dev <dev@dev.sp-tarkov.com>
Date: Wed, 2 Aug 2023 16:18:37 +0100
Subject: [PATCH] Update types

---
 .../types/controllers/GameController.d.ts        |  5 +++++
 .../13AddTrader/types/helpers/HideoutHelper.d.ts | 12 ++++--------
 .../types/loaders/PreAkiModLoader.d.ts           |  1 +
 .../types/controllers/GameController.d.ts        | 16 ++++++++++++++--
 .../types/generators/BotGenerator.d.ts           |  6 ++++--
 .../types/helpers/HideoutHelper.d.ts             | 16 ++++++----------
 .../types/loaders/PreAkiModLoader.d.ts           |  1 +
 .../types/models/spt/config/IPmcConfig.d.ts      |  2 ++
 .../types/services/LocalisationService.d.ts      | 10 +++++++++-
 .../types/controllers/GameController.d.ts        | 16 ++++++++++++++--
 .../types/generators/BotGenerator.d.ts           |  6 ++++--
 .../types/helpers/HideoutHelper.d.ts             | 16 ++++++----------
 .../types/loaders/PreAkiModLoader.d.ts           |  1 +
 .../types/models/spt/config/IPmcConfig.d.ts      |  2 ++
 .../types/services/LocalisationService.d.ts      | 10 +++++++++-
 .../types/controllers/GameController.d.ts        | 16 ++++++++++++++--
 .../types/generators/BotGenerator.d.ts           |  6 ++++--
 .../types/helpers/HideoutHelper.d.ts             | 16 ++++++----------
 .../types/loaders/PreAkiModLoader.d.ts           |  1 +
 .../types/models/spt/config/IPmcConfig.d.ts      |  2 ++
 .../types/services/LocalisationService.d.ts      | 10 +++++++++-
 .../types/controllers/GameController.d.ts        | 16 ++++++++++++++--
 .../types/generators/BotGenerator.d.ts           |  6 ++++--
 .../types/helpers/HideoutHelper.d.ts             | 16 ++++++----------
 .../types/loaders/PreAkiModLoader.d.ts           |  1 +
 .../types/models/spt/config/IPmcConfig.d.ts      |  2 ++
 .../types/services/LocalisationService.d.ts      | 10 +++++++++-
 .../types/controllers/GameController.d.ts        | 16 ++++++++++++++--
 .../types/generators/BotGenerator.d.ts           |  6 ++++--
 .../types/helpers/HideoutHelper.d.ts             | 16 ++++++----------
 .../types/loaders/PreAkiModLoader.d.ts           |  1 +
 .../types/models/spt/config/IPmcConfig.d.ts      |  2 ++
 .../types/services/LocalisationService.d.ts      | 10 +++++++++-
 .../types/controllers/GameController.d.ts        | 16 ++++++++++++++--
 .../types/generators/BotGenerator.d.ts           |  6 ++++--
 .../types/helpers/HideoutHelper.d.ts             | 16 ++++++----------
 .../types/loaders/PreAkiModLoader.d.ts           |  1 +
 .../types/models/spt/config/IPmcConfig.d.ts      |  2 ++
 .../types/services/LocalisationService.d.ts      | 10 +++++++++-
 .../types/controllers/GameController.d.ts        | 16 ++++++++++++++--
 .../types/generators/BotGenerator.d.ts           |  6 ++++--
 .../types/helpers/HideoutHelper.d.ts             | 16 ++++++----------
 .../types/loaders/PreAkiModLoader.d.ts           |  1 +
 .../types/models/spt/config/IPmcConfig.d.ts      |  2 ++
 .../types/services/LocalisationService.d.ts      | 10 +++++++++-
 45 files changed, 262 insertions(+), 113 deletions(-)

diff --git a/TypeScript/13AddTrader/types/controllers/GameController.d.ts b/TypeScript/13AddTrader/types/controllers/GameController.d.ts
index 9a131a8..d7a7f1a 100644
--- a/TypeScript/13AddTrader/types/controllers/GameController.d.ts
+++ b/TypeScript/13AddTrader/types/controllers/GameController.d.ts
@@ -128,6 +128,11 @@ export declare class GameController {
      * @param pmcProfile Profile of player to get name from
      */
     protected addPlayerToPMCNames(pmcProfile: IPmcData): void;
+    /**
+     * Check for a dialog with the key 'undefined', and remove it
+     * @param fullProfile Profile to check for dialog in
+     */
+    protected checkForAndRemoveUndefinedDialogs(fullProfile: IAkiProfile): void;
     /**
      * Blank out the "test" mail message from prapor
      */
diff --git a/TypeScript/13AddTrader/types/helpers/HideoutHelper.d.ts b/TypeScript/13AddTrader/types/helpers/HideoutHelper.d.ts
index b407639..d9119a2 100644
--- a/TypeScript/13AddTrader/types/helpers/HideoutHelper.d.ts
+++ b/TypeScript/13AddTrader/types/helpers/HideoutHelper.d.ts
@@ -58,16 +58,12 @@ export declare class HideoutHelper {
      * @returns
      */
     isProductionType(productive: Productive): productive is Production;
-    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
-     * TODO:
-     * After looking at the skills there doesnt seem to be a configuration per skill to boost
-     * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it)
-     * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure!
-     * @param pmcData
-     * @param bonus
+     * Apply bonus to player profile given after completing hideout upgrades
+     * @param pmcData Profile to add bonus to
+     * @param bonus Bonus to add to profile
      */
-    protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void;
+    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
      * Process a players hideout, update areas that use resources + increment production timers
      * @param sessionID Session id
diff --git a/TypeScript/13AddTrader/types/loaders/PreAkiModLoader.d.ts b/TypeScript/13AddTrader/types/loaders/PreAkiModLoader.d.ts
index a67f1c9..08059ff 100644
--- a/TypeScript/13AddTrader/types/loaders/PreAkiModLoader.d.ts
+++ b/TypeScript/13AddTrader/types/loaders/PreAkiModLoader.d.ts
@@ -35,6 +35,7 @@ export declare class PreAkiModLoader implements IModLoader {
     getImportedModDetails(): Record<string, IPackageJsonData>;
     getModPath(mod: string): string;
     protected importMods(): Promise<void>;
+    protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;
     /**
      * Check for duplicate mods loaded, show error if any
      * @param modPackageData Dictionary of mod package.json data
diff --git a/TypeScript/18CustomItemService/types/controllers/GameController.d.ts b/TypeScript/18CustomItemService/types/controllers/GameController.d.ts
index 6d0ce18..d7a7f1a 100644
--- a/TypeScript/18CustomItemService/types/controllers/GameController.d.ts
+++ b/TypeScript/18CustomItemService/types/controllers/GameController.d.ts
@@ -11,9 +11,11 @@ import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
 import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse";
 import { IServerDetails } from "../models/eft/game/IServerDetails";
 import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
 import { ICoreConfig } from "../models/spt/config/ICoreConfig";
 import { IHttpConfig } from "../models/spt/config/IHttpConfig";
 import { ILocationConfig } from "../models/spt/config/ILocationConfig";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
@@ -25,6 +27,7 @@ import { ProfileFixerService } from "../services/ProfileFixerService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { EncodingUtil } from "../utils/EncodingUtil";
 import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
 import { TimeUtil } from "../utils/TimeUtil";
 export declare class GameController {
     protected logger: ILogger;
@@ -33,6 +36,7 @@ export declare class GameController {
     protected timeUtil: TimeUtil;
     protected preAkiModLoader: PreAkiModLoader;
     protected httpServerHelper: HttpServerHelper;
+    protected randomUtil: RandomUtil;
     protected encodingUtil: EncodingUtil;
     protected hideoutHelper: HideoutHelper;
     protected profileHelper: ProfileHelper;
@@ -48,7 +52,9 @@ export declare class GameController {
     protected httpConfig: IHttpConfig;
     protected coreConfig: ICoreConfig;
     protected locationConfig: ILocationConfig;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
+    protected ragfairConfig: IRagfairConfig;
+    protected botConfig: IBotConfig;
+    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
     /**
      * Handle client/game/start
      */
@@ -84,6 +90,7 @@ export declare class GameController {
      * @param pmcProfile Player profile
      */
     protected warnOnActiveBotReloadSkill(pmcProfile: IPmcData): void;
+    protected flagAllItemsInDbAsSellableOnFlea(): void;
     /**
      * When player logs in, iterate over all active effects and reduce timer
      * TODO - add body part HP regen
@@ -118,9 +125,14 @@ export declare class GameController {
     protected validateQuestAssortUnlocksExist(): void;
     /**
      * Add the logged in players name to PMC name pool
-     * @param pmcProfile
+     * @param pmcProfile Profile of player to get name from
      */
     protected addPlayerToPMCNames(pmcProfile: IPmcData): void;
+    /**
+     * Check for a dialog with the key 'undefined', and remove it
+     * @param fullProfile Profile to check for dialog in
+     */
+    protected checkForAndRemoveUndefinedDialogs(fullProfile: IAkiProfile): void;
     /**
      * Blank out the "test" mail message from prapor
      */
diff --git a/TypeScript/18CustomItemService/types/generators/BotGenerator.d.ts b/TypeScript/18CustomItemService/types/generators/BotGenerator.d.ts
index 5236a12..4530517 100644
--- a/TypeScript/18CustomItemService/types/generators/BotGenerator.d.ts
+++ b/TypeScript/18CustomItemService/types/generators/BotGenerator.d.ts
@@ -10,6 +10,7 @@ import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
 import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService";
+import { LocalisationService } from "../services/LocalisationService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { HashUtil } from "../utils/HashUtil";
 import { JsonUtil } from "../utils/JsonUtil";
@@ -32,9 +33,10 @@ export declare class BotGenerator {
     protected botHelper: BotHelper;
     protected botDifficultyHelper: BotDifficultyHelper;
     protected seasonalEventService: SeasonalEventService;
+    protected localisationService: LocalisationService;
     protected configServer: ConfigServer;
     protected botConfig: IBotConfig;
-    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer);
+    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, localisationService: LocalisationService, configServer: ConfigServer);
     /**
      * Generate a player scav bot object
      * @param role e.g. assault / pmcbot
@@ -71,7 +73,7 @@ export declare class BotGenerator {
      * @param botRole role of bot e.g. assault
      * @returns Nickname for bot
      */
-    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string): string;
+    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string, sessionId: string): string;
     /**
      * Log the number of PMCs generated to the debug console
      * @param output Generated bot array, ready to send to client
diff --git a/TypeScript/18CustomItemService/types/helpers/HideoutHelper.d.ts b/TypeScript/18CustomItemService/types/helpers/HideoutHelper.d.ts
index e9d3746..d9119a2 100644
--- a/TypeScript/18CustomItemService/types/helpers/HideoutHelper.d.ts
+++ b/TypeScript/18CustomItemService/types/helpers/HideoutHelper.d.ts
@@ -58,16 +58,12 @@ export declare class HideoutHelper {
      * @returns
      */
     isProductionType(productive: Productive): productive is Production;
-    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
-     * TODO:
-     * After looking at the skills there doesnt seem to be a configuration per skill to boost
-     * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it)
-     * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure!
-     * @param pmcData
-     * @param bonus
+     * Apply bonus to player profile given after completing hideout upgrades
+     * @param pmcData Profile to add bonus to
+     * @param bonus Bonus to add to profile
      */
-    protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void;
+    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
      * Process a players hideout, update areas that use resources + increment production timers
      * @param sessionID Session id
@@ -83,6 +79,7 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     };
+    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     /**
      * Update progress timer for water collector
      * @param pmcData profile to update
@@ -141,9 +138,8 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     }): void;
-    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
-    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void;
+    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
     /**
      * Adjust water filter objects resourceValue or delete when they reach 0 resource
      * @param waterFilterArea water filter area to update
diff --git a/TypeScript/18CustomItemService/types/loaders/PreAkiModLoader.d.ts b/TypeScript/18CustomItemService/types/loaders/PreAkiModLoader.d.ts
index a67f1c9..08059ff 100644
--- a/TypeScript/18CustomItemService/types/loaders/PreAkiModLoader.d.ts
+++ b/TypeScript/18CustomItemService/types/loaders/PreAkiModLoader.d.ts
@@ -35,6 +35,7 @@ export declare class PreAkiModLoader implements IModLoader {
     getImportedModDetails(): Record<string, IPackageJsonData>;
     getModPath(mod: string): string;
     protected importMods(): Promise<void>;
+    protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;
     /**
      * Check for duplicate mods loaded, show error if any
      * @param modPackageData Dictionary of mod package.json data
diff --git a/TypeScript/18CustomItemService/types/models/spt/config/IPmcConfig.d.ts b/TypeScript/18CustomItemService/types/models/spt/config/IPmcConfig.d.ts
index a349ac2..339e0c6 100644
--- a/TypeScript/18CustomItemService/types/models/spt/config/IPmcConfig.d.ts
+++ b/TypeScript/18CustomItemService/types/models/spt/config/IPmcConfig.d.ts
@@ -40,6 +40,8 @@ export interface IPmcConfig {
     botRelativeLevelDeltaMax: number;
     /** Force a number of healing items into PMCs secure container to ensure they can heal */
     forceHealingItemsIntoSecure: boolean;
+    addPrefixToSameNamePMCAsPlayerChance: number;
+    allPMCsHavePlayerNameWithRandomPrefixChance: number;
 }
 export interface PmcTypes {
     usec: string;
diff --git a/TypeScript/18CustomItemService/types/services/LocalisationService.d.ts b/TypeScript/18CustomItemService/types/services/LocalisationService.d.ts
index 44a4941..ec6eecf 100644
--- a/TypeScript/18CustomItemService/types/services/LocalisationService.d.ts
+++ b/TypeScript/18CustomItemService/types/services/LocalisationService.d.ts
@@ -2,17 +2,19 @@ import { I18n } from "i18n";
 import { ILocaleConfig } from "../models/spt/config/ILocaleConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { DatabaseServer } from "../servers/DatabaseServer";
+import { RandomUtil } from "../utils/RandomUtil";
 import { LocaleService } from "./LocaleService";
 /**
  * Handles translating server text into different langauges
  */
 export declare class LocalisationService {
     protected logger: ILogger;
+    protected randomUtil: RandomUtil;
     protected databaseServer: DatabaseServer;
     protected localeService: LocaleService;
     protected localeConfig: ILocaleConfig;
     protected i18n: I18n;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, localeService: LocaleService);
+    constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, localeService: LocaleService);
     /**
      * Get a localised value using the passed in key
      * @param key Key to loop up locale for
@@ -25,4 +27,10 @@ export declare class LocalisationService {
      * @returns string array of keys
      */
     getKeys(): string[];
+    /**
+     * From the provided partial key, find all keys that start with text and choose a random match
+     * @param partialKey Key to match locale keys on
+     * @returns locale text
+     */
+    getRandomTextThatMatchesPartialKey(partialKey: string): string;
 }
diff --git a/TypeScript/1LogToConsole/types/controllers/GameController.d.ts b/TypeScript/1LogToConsole/types/controllers/GameController.d.ts
index 6d0ce18..d7a7f1a 100644
--- a/TypeScript/1LogToConsole/types/controllers/GameController.d.ts
+++ b/TypeScript/1LogToConsole/types/controllers/GameController.d.ts
@@ -11,9 +11,11 @@ import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
 import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse";
 import { IServerDetails } from "../models/eft/game/IServerDetails";
 import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
 import { ICoreConfig } from "../models/spt/config/ICoreConfig";
 import { IHttpConfig } from "../models/spt/config/IHttpConfig";
 import { ILocationConfig } from "../models/spt/config/ILocationConfig";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
@@ -25,6 +27,7 @@ import { ProfileFixerService } from "../services/ProfileFixerService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { EncodingUtil } from "../utils/EncodingUtil";
 import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
 import { TimeUtil } from "../utils/TimeUtil";
 export declare class GameController {
     protected logger: ILogger;
@@ -33,6 +36,7 @@ export declare class GameController {
     protected timeUtil: TimeUtil;
     protected preAkiModLoader: PreAkiModLoader;
     protected httpServerHelper: HttpServerHelper;
+    protected randomUtil: RandomUtil;
     protected encodingUtil: EncodingUtil;
     protected hideoutHelper: HideoutHelper;
     protected profileHelper: ProfileHelper;
@@ -48,7 +52,9 @@ export declare class GameController {
     protected httpConfig: IHttpConfig;
     protected coreConfig: ICoreConfig;
     protected locationConfig: ILocationConfig;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
+    protected ragfairConfig: IRagfairConfig;
+    protected botConfig: IBotConfig;
+    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
     /**
      * Handle client/game/start
      */
@@ -84,6 +90,7 @@ export declare class GameController {
      * @param pmcProfile Player profile
      */
     protected warnOnActiveBotReloadSkill(pmcProfile: IPmcData): void;
+    protected flagAllItemsInDbAsSellableOnFlea(): void;
     /**
      * When player logs in, iterate over all active effects and reduce timer
      * TODO - add body part HP regen
@@ -118,9 +125,14 @@ export declare class GameController {
     protected validateQuestAssortUnlocksExist(): void;
     /**
      * Add the logged in players name to PMC name pool
-     * @param pmcProfile
+     * @param pmcProfile Profile of player to get name from
      */
     protected addPlayerToPMCNames(pmcProfile: IPmcData): void;
+    /**
+     * Check for a dialog with the key 'undefined', and remove it
+     * @param fullProfile Profile to check for dialog in
+     */
+    protected checkForAndRemoveUndefinedDialogs(fullProfile: IAkiProfile): void;
     /**
      * Blank out the "test" mail message from prapor
      */
diff --git a/TypeScript/1LogToConsole/types/generators/BotGenerator.d.ts b/TypeScript/1LogToConsole/types/generators/BotGenerator.d.ts
index 5236a12..4530517 100644
--- a/TypeScript/1LogToConsole/types/generators/BotGenerator.d.ts
+++ b/TypeScript/1LogToConsole/types/generators/BotGenerator.d.ts
@@ -10,6 +10,7 @@ import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
 import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService";
+import { LocalisationService } from "../services/LocalisationService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { HashUtil } from "../utils/HashUtil";
 import { JsonUtil } from "../utils/JsonUtil";
@@ -32,9 +33,10 @@ export declare class BotGenerator {
     protected botHelper: BotHelper;
     protected botDifficultyHelper: BotDifficultyHelper;
     protected seasonalEventService: SeasonalEventService;
+    protected localisationService: LocalisationService;
     protected configServer: ConfigServer;
     protected botConfig: IBotConfig;
-    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer);
+    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, localisationService: LocalisationService, configServer: ConfigServer);
     /**
      * Generate a player scav bot object
      * @param role e.g. assault / pmcbot
@@ -71,7 +73,7 @@ export declare class BotGenerator {
      * @param botRole role of bot e.g. assault
      * @returns Nickname for bot
      */
-    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string): string;
+    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string, sessionId: string): string;
     /**
      * Log the number of PMCs generated to the debug console
      * @param output Generated bot array, ready to send to client
diff --git a/TypeScript/1LogToConsole/types/helpers/HideoutHelper.d.ts b/TypeScript/1LogToConsole/types/helpers/HideoutHelper.d.ts
index e9d3746..d9119a2 100644
--- a/TypeScript/1LogToConsole/types/helpers/HideoutHelper.d.ts
+++ b/TypeScript/1LogToConsole/types/helpers/HideoutHelper.d.ts
@@ -58,16 +58,12 @@ export declare class HideoutHelper {
      * @returns
      */
     isProductionType(productive: Productive): productive is Production;
-    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
-     * TODO:
-     * After looking at the skills there doesnt seem to be a configuration per skill to boost
-     * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it)
-     * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure!
-     * @param pmcData
-     * @param bonus
+     * Apply bonus to player profile given after completing hideout upgrades
+     * @param pmcData Profile to add bonus to
+     * @param bonus Bonus to add to profile
      */
-    protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void;
+    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
      * Process a players hideout, update areas that use resources + increment production timers
      * @param sessionID Session id
@@ -83,6 +79,7 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     };
+    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     /**
      * Update progress timer for water collector
      * @param pmcData profile to update
@@ -141,9 +138,8 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     }): void;
-    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
-    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void;
+    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
     /**
      * Adjust water filter objects resourceValue or delete when they reach 0 resource
      * @param waterFilterArea water filter area to update
diff --git a/TypeScript/1LogToConsole/types/loaders/PreAkiModLoader.d.ts b/TypeScript/1LogToConsole/types/loaders/PreAkiModLoader.d.ts
index a67f1c9..08059ff 100644
--- a/TypeScript/1LogToConsole/types/loaders/PreAkiModLoader.d.ts
+++ b/TypeScript/1LogToConsole/types/loaders/PreAkiModLoader.d.ts
@@ -35,6 +35,7 @@ export declare class PreAkiModLoader implements IModLoader {
     getImportedModDetails(): Record<string, IPackageJsonData>;
     getModPath(mod: string): string;
     protected importMods(): Promise<void>;
+    protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;
     /**
      * Check for duplicate mods loaded, show error if any
      * @param modPackageData Dictionary of mod package.json data
diff --git a/TypeScript/1LogToConsole/types/models/spt/config/IPmcConfig.d.ts b/TypeScript/1LogToConsole/types/models/spt/config/IPmcConfig.d.ts
index a349ac2..339e0c6 100644
--- a/TypeScript/1LogToConsole/types/models/spt/config/IPmcConfig.d.ts
+++ b/TypeScript/1LogToConsole/types/models/spt/config/IPmcConfig.d.ts
@@ -40,6 +40,8 @@ export interface IPmcConfig {
     botRelativeLevelDeltaMax: number;
     /** Force a number of healing items into PMCs secure container to ensure they can heal */
     forceHealingItemsIntoSecure: boolean;
+    addPrefixToSameNamePMCAsPlayerChance: number;
+    allPMCsHavePlayerNameWithRandomPrefixChance: number;
 }
 export interface PmcTypes {
     usec: string;
diff --git a/TypeScript/1LogToConsole/types/services/LocalisationService.d.ts b/TypeScript/1LogToConsole/types/services/LocalisationService.d.ts
index 44a4941..ec6eecf 100644
--- a/TypeScript/1LogToConsole/types/services/LocalisationService.d.ts
+++ b/TypeScript/1LogToConsole/types/services/LocalisationService.d.ts
@@ -2,17 +2,19 @@ import { I18n } from "i18n";
 import { ILocaleConfig } from "../models/spt/config/ILocaleConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { DatabaseServer } from "../servers/DatabaseServer";
+import { RandomUtil } from "../utils/RandomUtil";
 import { LocaleService } from "./LocaleService";
 /**
  * Handles translating server text into different langauges
  */
 export declare class LocalisationService {
     protected logger: ILogger;
+    protected randomUtil: RandomUtil;
     protected databaseServer: DatabaseServer;
     protected localeService: LocaleService;
     protected localeConfig: ILocaleConfig;
     protected i18n: I18n;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, localeService: LocaleService);
+    constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, localeService: LocaleService);
     /**
      * Get a localised value using the passed in key
      * @param key Key to loop up locale for
@@ -25,4 +27,10 @@ export declare class LocalisationService {
      * @returns string array of keys
      */
     getKeys(): string[];
+    /**
+     * From the provided partial key, find all keys that start with text and choose a random match
+     * @param partialKey Key to match locale keys on
+     * @returns locale text
+     */
+    getRandomTextThatMatchesPartialKey(partialKey: string): string;
 }
diff --git a/TypeScript/2EditDatabase/types/controllers/GameController.d.ts b/TypeScript/2EditDatabase/types/controllers/GameController.d.ts
index 6d0ce18..d7a7f1a 100644
--- a/TypeScript/2EditDatabase/types/controllers/GameController.d.ts
+++ b/TypeScript/2EditDatabase/types/controllers/GameController.d.ts
@@ -11,9 +11,11 @@ import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
 import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse";
 import { IServerDetails } from "../models/eft/game/IServerDetails";
 import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
 import { ICoreConfig } from "../models/spt/config/ICoreConfig";
 import { IHttpConfig } from "../models/spt/config/IHttpConfig";
 import { ILocationConfig } from "../models/spt/config/ILocationConfig";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
@@ -25,6 +27,7 @@ import { ProfileFixerService } from "../services/ProfileFixerService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { EncodingUtil } from "../utils/EncodingUtil";
 import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
 import { TimeUtil } from "../utils/TimeUtil";
 export declare class GameController {
     protected logger: ILogger;
@@ -33,6 +36,7 @@ export declare class GameController {
     protected timeUtil: TimeUtil;
     protected preAkiModLoader: PreAkiModLoader;
     protected httpServerHelper: HttpServerHelper;
+    protected randomUtil: RandomUtil;
     protected encodingUtil: EncodingUtil;
     protected hideoutHelper: HideoutHelper;
     protected profileHelper: ProfileHelper;
@@ -48,7 +52,9 @@ export declare class GameController {
     protected httpConfig: IHttpConfig;
     protected coreConfig: ICoreConfig;
     protected locationConfig: ILocationConfig;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
+    protected ragfairConfig: IRagfairConfig;
+    protected botConfig: IBotConfig;
+    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
     /**
      * Handle client/game/start
      */
@@ -84,6 +90,7 @@ export declare class GameController {
      * @param pmcProfile Player profile
      */
     protected warnOnActiveBotReloadSkill(pmcProfile: IPmcData): void;
+    protected flagAllItemsInDbAsSellableOnFlea(): void;
     /**
      * When player logs in, iterate over all active effects and reduce timer
      * TODO - add body part HP regen
@@ -118,9 +125,14 @@ export declare class GameController {
     protected validateQuestAssortUnlocksExist(): void;
     /**
      * Add the logged in players name to PMC name pool
-     * @param pmcProfile
+     * @param pmcProfile Profile of player to get name from
      */
     protected addPlayerToPMCNames(pmcProfile: IPmcData): void;
+    /**
+     * Check for a dialog with the key 'undefined', and remove it
+     * @param fullProfile Profile to check for dialog in
+     */
+    protected checkForAndRemoveUndefinedDialogs(fullProfile: IAkiProfile): void;
     /**
      * Blank out the "test" mail message from prapor
      */
diff --git a/TypeScript/2EditDatabase/types/generators/BotGenerator.d.ts b/TypeScript/2EditDatabase/types/generators/BotGenerator.d.ts
index 5236a12..4530517 100644
--- a/TypeScript/2EditDatabase/types/generators/BotGenerator.d.ts
+++ b/TypeScript/2EditDatabase/types/generators/BotGenerator.d.ts
@@ -10,6 +10,7 @@ import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
 import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService";
+import { LocalisationService } from "../services/LocalisationService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { HashUtil } from "../utils/HashUtil";
 import { JsonUtil } from "../utils/JsonUtil";
@@ -32,9 +33,10 @@ export declare class BotGenerator {
     protected botHelper: BotHelper;
     protected botDifficultyHelper: BotDifficultyHelper;
     protected seasonalEventService: SeasonalEventService;
+    protected localisationService: LocalisationService;
     protected configServer: ConfigServer;
     protected botConfig: IBotConfig;
-    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer);
+    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, localisationService: LocalisationService, configServer: ConfigServer);
     /**
      * Generate a player scav bot object
      * @param role e.g. assault / pmcbot
@@ -71,7 +73,7 @@ export declare class BotGenerator {
      * @param botRole role of bot e.g. assault
      * @returns Nickname for bot
      */
-    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string): string;
+    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string, sessionId: string): string;
     /**
      * Log the number of PMCs generated to the debug console
      * @param output Generated bot array, ready to send to client
diff --git a/TypeScript/2EditDatabase/types/helpers/HideoutHelper.d.ts b/TypeScript/2EditDatabase/types/helpers/HideoutHelper.d.ts
index e9d3746..d9119a2 100644
--- a/TypeScript/2EditDatabase/types/helpers/HideoutHelper.d.ts
+++ b/TypeScript/2EditDatabase/types/helpers/HideoutHelper.d.ts
@@ -58,16 +58,12 @@ export declare class HideoutHelper {
      * @returns
      */
     isProductionType(productive: Productive): productive is Production;
-    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
-     * TODO:
-     * After looking at the skills there doesnt seem to be a configuration per skill to boost
-     * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it)
-     * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure!
-     * @param pmcData
-     * @param bonus
+     * Apply bonus to player profile given after completing hideout upgrades
+     * @param pmcData Profile to add bonus to
+     * @param bonus Bonus to add to profile
      */
-    protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void;
+    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
      * Process a players hideout, update areas that use resources + increment production timers
      * @param sessionID Session id
@@ -83,6 +79,7 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     };
+    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     /**
      * Update progress timer for water collector
      * @param pmcData profile to update
@@ -141,9 +138,8 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     }): void;
-    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
-    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void;
+    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
     /**
      * Adjust water filter objects resourceValue or delete when they reach 0 resource
      * @param waterFilterArea water filter area to update
diff --git a/TypeScript/2EditDatabase/types/loaders/PreAkiModLoader.d.ts b/TypeScript/2EditDatabase/types/loaders/PreAkiModLoader.d.ts
index a67f1c9..08059ff 100644
--- a/TypeScript/2EditDatabase/types/loaders/PreAkiModLoader.d.ts
+++ b/TypeScript/2EditDatabase/types/loaders/PreAkiModLoader.d.ts
@@ -35,6 +35,7 @@ export declare class PreAkiModLoader implements IModLoader {
     getImportedModDetails(): Record<string, IPackageJsonData>;
     getModPath(mod: string): string;
     protected importMods(): Promise<void>;
+    protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;
     /**
      * Check for duplicate mods loaded, show error if any
      * @param modPackageData Dictionary of mod package.json data
diff --git a/TypeScript/2EditDatabase/types/models/spt/config/IPmcConfig.d.ts b/TypeScript/2EditDatabase/types/models/spt/config/IPmcConfig.d.ts
index a349ac2..339e0c6 100644
--- a/TypeScript/2EditDatabase/types/models/spt/config/IPmcConfig.d.ts
+++ b/TypeScript/2EditDatabase/types/models/spt/config/IPmcConfig.d.ts
@@ -40,6 +40,8 @@ export interface IPmcConfig {
     botRelativeLevelDeltaMax: number;
     /** Force a number of healing items into PMCs secure container to ensure they can heal */
     forceHealingItemsIntoSecure: boolean;
+    addPrefixToSameNamePMCAsPlayerChance: number;
+    allPMCsHavePlayerNameWithRandomPrefixChance: number;
 }
 export interface PmcTypes {
     usec: string;
diff --git a/TypeScript/2EditDatabase/types/services/LocalisationService.d.ts b/TypeScript/2EditDatabase/types/services/LocalisationService.d.ts
index 44a4941..ec6eecf 100644
--- a/TypeScript/2EditDatabase/types/services/LocalisationService.d.ts
+++ b/TypeScript/2EditDatabase/types/services/LocalisationService.d.ts
@@ -2,17 +2,19 @@ import { I18n } from "i18n";
 import { ILocaleConfig } from "../models/spt/config/ILocaleConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { DatabaseServer } from "../servers/DatabaseServer";
+import { RandomUtil } from "../utils/RandomUtil";
 import { LocaleService } from "./LocaleService";
 /**
  * Handles translating server text into different langauges
  */
 export declare class LocalisationService {
     protected logger: ILogger;
+    protected randomUtil: RandomUtil;
     protected databaseServer: DatabaseServer;
     protected localeService: LocaleService;
     protected localeConfig: ILocaleConfig;
     protected i18n: I18n;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, localeService: LocaleService);
+    constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, localeService: LocaleService);
     /**
      * Get a localised value using the passed in key
      * @param key Key to loop up locale for
@@ -25,4 +27,10 @@ export declare class LocalisationService {
      * @returns string array of keys
      */
     getKeys(): string[];
+    /**
+     * From the provided partial key, find all keys that start with text and choose a random match
+     * @param partialKey Key to match locale keys on
+     * @returns locale text
+     */
+    getRandomTextThatMatchesPartialKey(partialKey: string): string;
 }
diff --git a/TypeScript/3GetSptConfigFile/types/controllers/GameController.d.ts b/TypeScript/3GetSptConfigFile/types/controllers/GameController.d.ts
index 6d0ce18..d7a7f1a 100644
--- a/TypeScript/3GetSptConfigFile/types/controllers/GameController.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/controllers/GameController.d.ts
@@ -11,9 +11,11 @@ import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
 import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse";
 import { IServerDetails } from "../models/eft/game/IServerDetails";
 import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
 import { ICoreConfig } from "../models/spt/config/ICoreConfig";
 import { IHttpConfig } from "../models/spt/config/IHttpConfig";
 import { ILocationConfig } from "../models/spt/config/ILocationConfig";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
@@ -25,6 +27,7 @@ import { ProfileFixerService } from "../services/ProfileFixerService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { EncodingUtil } from "../utils/EncodingUtil";
 import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
 import { TimeUtil } from "../utils/TimeUtil";
 export declare class GameController {
     protected logger: ILogger;
@@ -33,6 +36,7 @@ export declare class GameController {
     protected timeUtil: TimeUtil;
     protected preAkiModLoader: PreAkiModLoader;
     protected httpServerHelper: HttpServerHelper;
+    protected randomUtil: RandomUtil;
     protected encodingUtil: EncodingUtil;
     protected hideoutHelper: HideoutHelper;
     protected profileHelper: ProfileHelper;
@@ -48,7 +52,9 @@ export declare class GameController {
     protected httpConfig: IHttpConfig;
     protected coreConfig: ICoreConfig;
     protected locationConfig: ILocationConfig;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
+    protected ragfairConfig: IRagfairConfig;
+    protected botConfig: IBotConfig;
+    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
     /**
      * Handle client/game/start
      */
@@ -84,6 +90,7 @@ export declare class GameController {
      * @param pmcProfile Player profile
      */
     protected warnOnActiveBotReloadSkill(pmcProfile: IPmcData): void;
+    protected flagAllItemsInDbAsSellableOnFlea(): void;
     /**
      * When player logs in, iterate over all active effects and reduce timer
      * TODO - add body part HP regen
@@ -118,9 +125,14 @@ export declare class GameController {
     protected validateQuestAssortUnlocksExist(): void;
     /**
      * Add the logged in players name to PMC name pool
-     * @param pmcProfile
+     * @param pmcProfile Profile of player to get name from
      */
     protected addPlayerToPMCNames(pmcProfile: IPmcData): void;
+    /**
+     * Check for a dialog with the key 'undefined', and remove it
+     * @param fullProfile Profile to check for dialog in
+     */
+    protected checkForAndRemoveUndefinedDialogs(fullProfile: IAkiProfile): void;
     /**
      * Blank out the "test" mail message from prapor
      */
diff --git a/TypeScript/3GetSptConfigFile/types/generators/BotGenerator.d.ts b/TypeScript/3GetSptConfigFile/types/generators/BotGenerator.d.ts
index 5236a12..4530517 100644
--- a/TypeScript/3GetSptConfigFile/types/generators/BotGenerator.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/generators/BotGenerator.d.ts
@@ -10,6 +10,7 @@ import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
 import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService";
+import { LocalisationService } from "../services/LocalisationService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { HashUtil } from "../utils/HashUtil";
 import { JsonUtil } from "../utils/JsonUtil";
@@ -32,9 +33,10 @@ export declare class BotGenerator {
     protected botHelper: BotHelper;
     protected botDifficultyHelper: BotDifficultyHelper;
     protected seasonalEventService: SeasonalEventService;
+    protected localisationService: LocalisationService;
     protected configServer: ConfigServer;
     protected botConfig: IBotConfig;
-    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer);
+    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, localisationService: LocalisationService, configServer: ConfigServer);
     /**
      * Generate a player scav bot object
      * @param role e.g. assault / pmcbot
@@ -71,7 +73,7 @@ export declare class BotGenerator {
      * @param botRole role of bot e.g. assault
      * @returns Nickname for bot
      */
-    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string): string;
+    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string, sessionId: string): string;
     /**
      * Log the number of PMCs generated to the debug console
      * @param output Generated bot array, ready to send to client
diff --git a/TypeScript/3GetSptConfigFile/types/helpers/HideoutHelper.d.ts b/TypeScript/3GetSptConfigFile/types/helpers/HideoutHelper.d.ts
index e9d3746..d9119a2 100644
--- a/TypeScript/3GetSptConfigFile/types/helpers/HideoutHelper.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/helpers/HideoutHelper.d.ts
@@ -58,16 +58,12 @@ export declare class HideoutHelper {
      * @returns
      */
     isProductionType(productive: Productive): productive is Production;
-    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
-     * TODO:
-     * After looking at the skills there doesnt seem to be a configuration per skill to boost
-     * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it)
-     * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure!
-     * @param pmcData
-     * @param bonus
+     * Apply bonus to player profile given after completing hideout upgrades
+     * @param pmcData Profile to add bonus to
+     * @param bonus Bonus to add to profile
      */
-    protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void;
+    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
      * Process a players hideout, update areas that use resources + increment production timers
      * @param sessionID Session id
@@ -83,6 +79,7 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     };
+    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     /**
      * Update progress timer for water collector
      * @param pmcData profile to update
@@ -141,9 +138,8 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     }): void;
-    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
-    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void;
+    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
     /**
      * Adjust water filter objects resourceValue or delete when they reach 0 resource
      * @param waterFilterArea water filter area to update
diff --git a/TypeScript/3GetSptConfigFile/types/loaders/PreAkiModLoader.d.ts b/TypeScript/3GetSptConfigFile/types/loaders/PreAkiModLoader.d.ts
index a67f1c9..08059ff 100644
--- a/TypeScript/3GetSptConfigFile/types/loaders/PreAkiModLoader.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/loaders/PreAkiModLoader.d.ts
@@ -35,6 +35,7 @@ export declare class PreAkiModLoader implements IModLoader {
     getImportedModDetails(): Record<string, IPackageJsonData>;
     getModPath(mod: string): string;
     protected importMods(): Promise<void>;
+    protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;
     /**
      * Check for duplicate mods loaded, show error if any
      * @param modPackageData Dictionary of mod package.json data
diff --git a/TypeScript/3GetSptConfigFile/types/models/spt/config/IPmcConfig.d.ts b/TypeScript/3GetSptConfigFile/types/models/spt/config/IPmcConfig.d.ts
index a349ac2..339e0c6 100644
--- a/TypeScript/3GetSptConfigFile/types/models/spt/config/IPmcConfig.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/models/spt/config/IPmcConfig.d.ts
@@ -40,6 +40,8 @@ export interface IPmcConfig {
     botRelativeLevelDeltaMax: number;
     /** Force a number of healing items into PMCs secure container to ensure they can heal */
     forceHealingItemsIntoSecure: boolean;
+    addPrefixToSameNamePMCAsPlayerChance: number;
+    allPMCsHavePlayerNameWithRandomPrefixChance: number;
 }
 export interface PmcTypes {
     usec: string;
diff --git a/TypeScript/3GetSptConfigFile/types/services/LocalisationService.d.ts b/TypeScript/3GetSptConfigFile/types/services/LocalisationService.d.ts
index 44a4941..ec6eecf 100644
--- a/TypeScript/3GetSptConfigFile/types/services/LocalisationService.d.ts
+++ b/TypeScript/3GetSptConfigFile/types/services/LocalisationService.d.ts
@@ -2,17 +2,19 @@ import { I18n } from "i18n";
 import { ILocaleConfig } from "../models/spt/config/ILocaleConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { DatabaseServer } from "../servers/DatabaseServer";
+import { RandomUtil } from "../utils/RandomUtil";
 import { LocaleService } from "./LocaleService";
 /**
  * Handles translating server text into different langauges
  */
 export declare class LocalisationService {
     protected logger: ILogger;
+    protected randomUtil: RandomUtil;
     protected databaseServer: DatabaseServer;
     protected localeService: LocaleService;
     protected localeConfig: ILocaleConfig;
     protected i18n: I18n;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, localeService: LocaleService);
+    constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, localeService: LocaleService);
     /**
      * Get a localised value using the passed in key
      * @param key Key to loop up locale for
@@ -25,4 +27,10 @@ export declare class LocalisationService {
      * @returns string array of keys
      */
     getKeys(): string[];
+    /**
+     * From the provided partial key, find all keys that start with text and choose a random match
+     * @param partialKey Key to match locale keys on
+     * @returns locale text
+     */
+    getRandomTextThatMatchesPartialKey(partialKey: string): string;
 }
diff --git a/TypeScript/4UseACustomConfigFile/types/controllers/GameController.d.ts b/TypeScript/4UseACustomConfigFile/types/controllers/GameController.d.ts
index 6d0ce18..d7a7f1a 100644
--- a/TypeScript/4UseACustomConfigFile/types/controllers/GameController.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/controllers/GameController.d.ts
@@ -11,9 +11,11 @@ import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
 import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse";
 import { IServerDetails } from "../models/eft/game/IServerDetails";
 import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
 import { ICoreConfig } from "../models/spt/config/ICoreConfig";
 import { IHttpConfig } from "../models/spt/config/IHttpConfig";
 import { ILocationConfig } from "../models/spt/config/ILocationConfig";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
@@ -25,6 +27,7 @@ import { ProfileFixerService } from "../services/ProfileFixerService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { EncodingUtil } from "../utils/EncodingUtil";
 import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
 import { TimeUtil } from "../utils/TimeUtil";
 export declare class GameController {
     protected logger: ILogger;
@@ -33,6 +36,7 @@ export declare class GameController {
     protected timeUtil: TimeUtil;
     protected preAkiModLoader: PreAkiModLoader;
     protected httpServerHelper: HttpServerHelper;
+    protected randomUtil: RandomUtil;
     protected encodingUtil: EncodingUtil;
     protected hideoutHelper: HideoutHelper;
     protected profileHelper: ProfileHelper;
@@ -48,7 +52,9 @@ export declare class GameController {
     protected httpConfig: IHttpConfig;
     protected coreConfig: ICoreConfig;
     protected locationConfig: ILocationConfig;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
+    protected ragfairConfig: IRagfairConfig;
+    protected botConfig: IBotConfig;
+    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
     /**
      * Handle client/game/start
      */
@@ -84,6 +90,7 @@ export declare class GameController {
      * @param pmcProfile Player profile
      */
     protected warnOnActiveBotReloadSkill(pmcProfile: IPmcData): void;
+    protected flagAllItemsInDbAsSellableOnFlea(): void;
     /**
      * When player logs in, iterate over all active effects and reduce timer
      * TODO - add body part HP regen
@@ -118,9 +125,14 @@ export declare class GameController {
     protected validateQuestAssortUnlocksExist(): void;
     /**
      * Add the logged in players name to PMC name pool
-     * @param pmcProfile
+     * @param pmcProfile Profile of player to get name from
      */
     protected addPlayerToPMCNames(pmcProfile: IPmcData): void;
+    /**
+     * Check for a dialog with the key 'undefined', and remove it
+     * @param fullProfile Profile to check for dialog in
+     */
+    protected checkForAndRemoveUndefinedDialogs(fullProfile: IAkiProfile): void;
     /**
      * Blank out the "test" mail message from prapor
      */
diff --git a/TypeScript/4UseACustomConfigFile/types/generators/BotGenerator.d.ts b/TypeScript/4UseACustomConfigFile/types/generators/BotGenerator.d.ts
index 5236a12..4530517 100644
--- a/TypeScript/4UseACustomConfigFile/types/generators/BotGenerator.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/generators/BotGenerator.d.ts
@@ -10,6 +10,7 @@ import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
 import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService";
+import { LocalisationService } from "../services/LocalisationService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { HashUtil } from "../utils/HashUtil";
 import { JsonUtil } from "../utils/JsonUtil";
@@ -32,9 +33,10 @@ export declare class BotGenerator {
     protected botHelper: BotHelper;
     protected botDifficultyHelper: BotDifficultyHelper;
     protected seasonalEventService: SeasonalEventService;
+    protected localisationService: LocalisationService;
     protected configServer: ConfigServer;
     protected botConfig: IBotConfig;
-    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer);
+    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, localisationService: LocalisationService, configServer: ConfigServer);
     /**
      * Generate a player scav bot object
      * @param role e.g. assault / pmcbot
@@ -71,7 +73,7 @@ export declare class BotGenerator {
      * @param botRole role of bot e.g. assault
      * @returns Nickname for bot
      */
-    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string): string;
+    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string, sessionId: string): string;
     /**
      * Log the number of PMCs generated to the debug console
      * @param output Generated bot array, ready to send to client
diff --git a/TypeScript/4UseACustomConfigFile/types/helpers/HideoutHelper.d.ts b/TypeScript/4UseACustomConfigFile/types/helpers/HideoutHelper.d.ts
index e9d3746..d9119a2 100644
--- a/TypeScript/4UseACustomConfigFile/types/helpers/HideoutHelper.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/helpers/HideoutHelper.d.ts
@@ -58,16 +58,12 @@ export declare class HideoutHelper {
      * @returns
      */
     isProductionType(productive: Productive): productive is Production;
-    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
-     * TODO:
-     * After looking at the skills there doesnt seem to be a configuration per skill to boost
-     * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it)
-     * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure!
-     * @param pmcData
-     * @param bonus
+     * Apply bonus to player profile given after completing hideout upgrades
+     * @param pmcData Profile to add bonus to
+     * @param bonus Bonus to add to profile
      */
-    protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void;
+    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
      * Process a players hideout, update areas that use resources + increment production timers
      * @param sessionID Session id
@@ -83,6 +79,7 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     };
+    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     /**
      * Update progress timer for water collector
      * @param pmcData profile to update
@@ -141,9 +138,8 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     }): void;
-    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
-    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void;
+    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
     /**
      * Adjust water filter objects resourceValue or delete when they reach 0 resource
      * @param waterFilterArea water filter area to update
diff --git a/TypeScript/4UseACustomConfigFile/types/loaders/PreAkiModLoader.d.ts b/TypeScript/4UseACustomConfigFile/types/loaders/PreAkiModLoader.d.ts
index a67f1c9..08059ff 100644
--- a/TypeScript/4UseACustomConfigFile/types/loaders/PreAkiModLoader.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/loaders/PreAkiModLoader.d.ts
@@ -35,6 +35,7 @@ export declare class PreAkiModLoader implements IModLoader {
     getImportedModDetails(): Record<string, IPackageJsonData>;
     getModPath(mod: string): string;
     protected importMods(): Promise<void>;
+    protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;
     /**
      * Check for duplicate mods loaded, show error if any
      * @param modPackageData Dictionary of mod package.json data
diff --git a/TypeScript/4UseACustomConfigFile/types/models/spt/config/IPmcConfig.d.ts b/TypeScript/4UseACustomConfigFile/types/models/spt/config/IPmcConfig.d.ts
index a349ac2..339e0c6 100644
--- a/TypeScript/4UseACustomConfigFile/types/models/spt/config/IPmcConfig.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/models/spt/config/IPmcConfig.d.ts
@@ -40,6 +40,8 @@ export interface IPmcConfig {
     botRelativeLevelDeltaMax: number;
     /** Force a number of healing items into PMCs secure container to ensure they can heal */
     forceHealingItemsIntoSecure: boolean;
+    addPrefixToSameNamePMCAsPlayerChance: number;
+    allPMCsHavePlayerNameWithRandomPrefixChance: number;
 }
 export interface PmcTypes {
     usec: string;
diff --git a/TypeScript/4UseACustomConfigFile/types/services/LocalisationService.d.ts b/TypeScript/4UseACustomConfigFile/types/services/LocalisationService.d.ts
index 44a4941..ec6eecf 100644
--- a/TypeScript/4UseACustomConfigFile/types/services/LocalisationService.d.ts
+++ b/TypeScript/4UseACustomConfigFile/types/services/LocalisationService.d.ts
@@ -2,17 +2,19 @@ import { I18n } from "i18n";
 import { ILocaleConfig } from "../models/spt/config/ILocaleConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { DatabaseServer } from "../servers/DatabaseServer";
+import { RandomUtil } from "../utils/RandomUtil";
 import { LocaleService } from "./LocaleService";
 /**
  * Handles translating server text into different langauges
  */
 export declare class LocalisationService {
     protected logger: ILogger;
+    protected randomUtil: RandomUtil;
     protected databaseServer: DatabaseServer;
     protected localeService: LocaleService;
     protected localeConfig: ILocaleConfig;
     protected i18n: I18n;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, localeService: LocaleService);
+    constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, localeService: LocaleService);
     /**
      * Get a localised value using the passed in key
      * @param key Key to loop up locale for
@@ -25,4 +27,10 @@ export declare class LocalisationService {
      * @returns string array of keys
      */
     getKeys(): string[];
+    /**
+     * From the provided partial key, find all keys that start with text and choose a random match
+     * @param partialKey Key to match locale keys on
+     * @returns locale text
+     */
+    getRandomTextThatMatchesPartialKey(partialKey: string): string;
 }
diff --git a/TypeScript/5ReplaceMethod/types/controllers/GameController.d.ts b/TypeScript/5ReplaceMethod/types/controllers/GameController.d.ts
index 6d0ce18..d7a7f1a 100644
--- a/TypeScript/5ReplaceMethod/types/controllers/GameController.d.ts
+++ b/TypeScript/5ReplaceMethod/types/controllers/GameController.d.ts
@@ -11,9 +11,11 @@ import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
 import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse";
 import { IServerDetails } from "../models/eft/game/IServerDetails";
 import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
 import { ICoreConfig } from "../models/spt/config/ICoreConfig";
 import { IHttpConfig } from "../models/spt/config/IHttpConfig";
 import { ILocationConfig } from "../models/spt/config/ILocationConfig";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
@@ -25,6 +27,7 @@ import { ProfileFixerService } from "../services/ProfileFixerService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { EncodingUtil } from "../utils/EncodingUtil";
 import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
 import { TimeUtil } from "../utils/TimeUtil";
 export declare class GameController {
     protected logger: ILogger;
@@ -33,6 +36,7 @@ export declare class GameController {
     protected timeUtil: TimeUtil;
     protected preAkiModLoader: PreAkiModLoader;
     protected httpServerHelper: HttpServerHelper;
+    protected randomUtil: RandomUtil;
     protected encodingUtil: EncodingUtil;
     protected hideoutHelper: HideoutHelper;
     protected profileHelper: ProfileHelper;
@@ -48,7 +52,9 @@ export declare class GameController {
     protected httpConfig: IHttpConfig;
     protected coreConfig: ICoreConfig;
     protected locationConfig: ILocationConfig;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
+    protected ragfairConfig: IRagfairConfig;
+    protected botConfig: IBotConfig;
+    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
     /**
      * Handle client/game/start
      */
@@ -84,6 +90,7 @@ export declare class GameController {
      * @param pmcProfile Player profile
      */
     protected warnOnActiveBotReloadSkill(pmcProfile: IPmcData): void;
+    protected flagAllItemsInDbAsSellableOnFlea(): void;
     /**
      * When player logs in, iterate over all active effects and reduce timer
      * TODO - add body part HP regen
@@ -118,9 +125,14 @@ export declare class GameController {
     protected validateQuestAssortUnlocksExist(): void;
     /**
      * Add the logged in players name to PMC name pool
-     * @param pmcProfile
+     * @param pmcProfile Profile of player to get name from
      */
     protected addPlayerToPMCNames(pmcProfile: IPmcData): void;
+    /**
+     * Check for a dialog with the key 'undefined', and remove it
+     * @param fullProfile Profile to check for dialog in
+     */
+    protected checkForAndRemoveUndefinedDialogs(fullProfile: IAkiProfile): void;
     /**
      * Blank out the "test" mail message from prapor
      */
diff --git a/TypeScript/5ReplaceMethod/types/generators/BotGenerator.d.ts b/TypeScript/5ReplaceMethod/types/generators/BotGenerator.d.ts
index 5236a12..4530517 100644
--- a/TypeScript/5ReplaceMethod/types/generators/BotGenerator.d.ts
+++ b/TypeScript/5ReplaceMethod/types/generators/BotGenerator.d.ts
@@ -10,6 +10,7 @@ import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
 import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService";
+import { LocalisationService } from "../services/LocalisationService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { HashUtil } from "../utils/HashUtil";
 import { JsonUtil } from "../utils/JsonUtil";
@@ -32,9 +33,10 @@ export declare class BotGenerator {
     protected botHelper: BotHelper;
     protected botDifficultyHelper: BotDifficultyHelper;
     protected seasonalEventService: SeasonalEventService;
+    protected localisationService: LocalisationService;
     protected configServer: ConfigServer;
     protected botConfig: IBotConfig;
-    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer);
+    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, localisationService: LocalisationService, configServer: ConfigServer);
     /**
      * Generate a player scav bot object
      * @param role e.g. assault / pmcbot
@@ -71,7 +73,7 @@ export declare class BotGenerator {
      * @param botRole role of bot e.g. assault
      * @returns Nickname for bot
      */
-    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string): string;
+    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string, sessionId: string): string;
     /**
      * Log the number of PMCs generated to the debug console
      * @param output Generated bot array, ready to send to client
diff --git a/TypeScript/5ReplaceMethod/types/helpers/HideoutHelper.d.ts b/TypeScript/5ReplaceMethod/types/helpers/HideoutHelper.d.ts
index e9d3746..d9119a2 100644
--- a/TypeScript/5ReplaceMethod/types/helpers/HideoutHelper.d.ts
+++ b/TypeScript/5ReplaceMethod/types/helpers/HideoutHelper.d.ts
@@ -58,16 +58,12 @@ export declare class HideoutHelper {
      * @returns
      */
     isProductionType(productive: Productive): productive is Production;
-    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
-     * TODO:
-     * After looking at the skills there doesnt seem to be a configuration per skill to boost
-     * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it)
-     * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure!
-     * @param pmcData
-     * @param bonus
+     * Apply bonus to player profile given after completing hideout upgrades
+     * @param pmcData Profile to add bonus to
+     * @param bonus Bonus to add to profile
      */
-    protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void;
+    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
      * Process a players hideout, update areas that use resources + increment production timers
      * @param sessionID Session id
@@ -83,6 +79,7 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     };
+    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     /**
      * Update progress timer for water collector
      * @param pmcData profile to update
@@ -141,9 +138,8 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     }): void;
-    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
-    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void;
+    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
     /**
      * Adjust water filter objects resourceValue or delete when they reach 0 resource
      * @param waterFilterArea water filter area to update
diff --git a/TypeScript/5ReplaceMethod/types/loaders/PreAkiModLoader.d.ts b/TypeScript/5ReplaceMethod/types/loaders/PreAkiModLoader.d.ts
index a67f1c9..08059ff 100644
--- a/TypeScript/5ReplaceMethod/types/loaders/PreAkiModLoader.d.ts
+++ b/TypeScript/5ReplaceMethod/types/loaders/PreAkiModLoader.d.ts
@@ -35,6 +35,7 @@ export declare class PreAkiModLoader implements IModLoader {
     getImportedModDetails(): Record<string, IPackageJsonData>;
     getModPath(mod: string): string;
     protected importMods(): Promise<void>;
+    protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;
     /**
      * Check for duplicate mods loaded, show error if any
      * @param modPackageData Dictionary of mod package.json data
diff --git a/TypeScript/5ReplaceMethod/types/models/spt/config/IPmcConfig.d.ts b/TypeScript/5ReplaceMethod/types/models/spt/config/IPmcConfig.d.ts
index a349ac2..339e0c6 100644
--- a/TypeScript/5ReplaceMethod/types/models/spt/config/IPmcConfig.d.ts
+++ b/TypeScript/5ReplaceMethod/types/models/spt/config/IPmcConfig.d.ts
@@ -40,6 +40,8 @@ export interface IPmcConfig {
     botRelativeLevelDeltaMax: number;
     /** Force a number of healing items into PMCs secure container to ensure they can heal */
     forceHealingItemsIntoSecure: boolean;
+    addPrefixToSameNamePMCAsPlayerChance: number;
+    allPMCsHavePlayerNameWithRandomPrefixChance: number;
 }
 export interface PmcTypes {
     usec: string;
diff --git a/TypeScript/5ReplaceMethod/types/services/LocalisationService.d.ts b/TypeScript/5ReplaceMethod/types/services/LocalisationService.d.ts
index 44a4941..ec6eecf 100644
--- a/TypeScript/5ReplaceMethod/types/services/LocalisationService.d.ts
+++ b/TypeScript/5ReplaceMethod/types/services/LocalisationService.d.ts
@@ -2,17 +2,19 @@ import { I18n } from "i18n";
 import { ILocaleConfig } from "../models/spt/config/ILocaleConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { DatabaseServer } from "../servers/DatabaseServer";
+import { RandomUtil } from "../utils/RandomUtil";
 import { LocaleService } from "./LocaleService";
 /**
  * Handles translating server text into different langauges
  */
 export declare class LocalisationService {
     protected logger: ILogger;
+    protected randomUtil: RandomUtil;
     protected databaseServer: DatabaseServer;
     protected localeService: LocaleService;
     protected localeConfig: ILocaleConfig;
     protected i18n: I18n;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, localeService: LocaleService);
+    constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, localeService: LocaleService);
     /**
      * Get a localised value using the passed in key
      * @param key Key to loop up locale for
@@ -25,4 +27,10 @@ export declare class LocalisationService {
      * @returns string array of keys
      */
     getKeys(): string[];
+    /**
+     * From the provided partial key, find all keys that start with text and choose a random match
+     * @param partialKey Key to match locale keys on
+     * @returns locale text
+     */
+    getRandomTextThatMatchesPartialKey(partialKey: string): string;
 }
diff --git a/TypeScript/6ReferenceAnotherClass/types/controllers/GameController.d.ts b/TypeScript/6ReferenceAnotherClass/types/controllers/GameController.d.ts
index 6d0ce18..d7a7f1a 100644
--- a/TypeScript/6ReferenceAnotherClass/types/controllers/GameController.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/controllers/GameController.d.ts
@@ -11,9 +11,11 @@ import { IGameConfigResponse } from "../models/eft/game/IGameConfigResponse";
 import { IGameKeepAliveResponse } from "../models/eft/game/IGameKeepAliveResponse";
 import { IServerDetails } from "../models/eft/game/IServerDetails";
 import { IAkiProfile } from "../models/eft/profile/IAkiProfile";
+import { IBotConfig } from "../models/spt/config/IBotConfig";
 import { ICoreConfig } from "../models/spt/config/ICoreConfig";
 import { IHttpConfig } from "../models/spt/config/IHttpConfig";
 import { ILocationConfig } from "../models/spt/config/ILocationConfig";
+import { IRagfairConfig } from "../models/spt/config/IRagfairConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
@@ -25,6 +27,7 @@ import { ProfileFixerService } from "../services/ProfileFixerService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { EncodingUtil } from "../utils/EncodingUtil";
 import { JsonUtil } from "../utils/JsonUtil";
+import { RandomUtil } from "../utils/RandomUtil";
 import { TimeUtil } from "../utils/TimeUtil";
 export declare class GameController {
     protected logger: ILogger;
@@ -33,6 +36,7 @@ export declare class GameController {
     protected timeUtil: TimeUtil;
     protected preAkiModLoader: PreAkiModLoader;
     protected httpServerHelper: HttpServerHelper;
+    protected randomUtil: RandomUtil;
     protected encodingUtil: EncodingUtil;
     protected hideoutHelper: HideoutHelper;
     protected profileHelper: ProfileHelper;
@@ -48,7 +52,9 @@ export declare class GameController {
     protected httpConfig: IHttpConfig;
     protected coreConfig: ICoreConfig;
     protected locationConfig: ILocationConfig;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
+    protected ragfairConfig: IRagfairConfig;
+    protected botConfig: IBotConfig;
+    constructor(logger: ILogger, databaseServer: DatabaseServer, jsonUtil: JsonUtil, timeUtil: TimeUtil, preAkiModLoader: PreAkiModLoader, httpServerHelper: HttpServerHelper, randomUtil: RandomUtil, encodingUtil: EncodingUtil, hideoutHelper: HideoutHelper, profileHelper: ProfileHelper, profileFixerService: ProfileFixerService, localisationService: LocalisationService, customLocationWaveService: CustomLocationWaveService, openZoneService: OpenZoneService, seasonalEventService: SeasonalEventService, giftService: GiftService, applicationContext: ApplicationContext, configServer: ConfigServer);
     /**
      * Handle client/game/start
      */
@@ -84,6 +90,7 @@ export declare class GameController {
      * @param pmcProfile Player profile
      */
     protected warnOnActiveBotReloadSkill(pmcProfile: IPmcData): void;
+    protected flagAllItemsInDbAsSellableOnFlea(): void;
     /**
      * When player logs in, iterate over all active effects and reduce timer
      * TODO - add body part HP regen
@@ -118,9 +125,14 @@ export declare class GameController {
     protected validateQuestAssortUnlocksExist(): void;
     /**
      * Add the logged in players name to PMC name pool
-     * @param pmcProfile
+     * @param pmcProfile Profile of player to get name from
      */
     protected addPlayerToPMCNames(pmcProfile: IPmcData): void;
+    /**
+     * Check for a dialog with the key 'undefined', and remove it
+     * @param fullProfile Profile to check for dialog in
+     */
+    protected checkForAndRemoveUndefinedDialogs(fullProfile: IAkiProfile): void;
     /**
      * Blank out the "test" mail message from prapor
      */
diff --git a/TypeScript/6ReferenceAnotherClass/types/generators/BotGenerator.d.ts b/TypeScript/6ReferenceAnotherClass/types/generators/BotGenerator.d.ts
index 5236a12..4530517 100644
--- a/TypeScript/6ReferenceAnotherClass/types/generators/BotGenerator.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/generators/BotGenerator.d.ts
@@ -10,6 +10,7 @@ import { ILogger } from "../models/spt/utils/ILogger";
 import { ConfigServer } from "../servers/ConfigServer";
 import { DatabaseServer } from "../servers/DatabaseServer";
 import { BotEquipmentFilterService } from "../services/BotEquipmentFilterService";
+import { LocalisationService } from "../services/LocalisationService";
 import { SeasonalEventService } from "../services/SeasonalEventService";
 import { HashUtil } from "../utils/HashUtil";
 import { JsonUtil } from "../utils/JsonUtil";
@@ -32,9 +33,10 @@ export declare class BotGenerator {
     protected botHelper: BotHelper;
     protected botDifficultyHelper: BotDifficultyHelper;
     protected seasonalEventService: SeasonalEventService;
+    protected localisationService: LocalisationService;
     protected configServer: ConfigServer;
     protected botConfig: IBotConfig;
-    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, configServer: ConfigServer);
+    constructor(logger: ILogger, hashUtil: HashUtil, randomUtil: RandomUtil, timeUtil: TimeUtil, jsonUtil: JsonUtil, profileHelper: ProfileHelper, databaseServer: DatabaseServer, botInventoryGenerator: BotInventoryGenerator, botLevelGenerator: BotLevelGenerator, botEquipmentFilterService: BotEquipmentFilterService, weightedRandomHelper: WeightedRandomHelper, botHelper: BotHelper, botDifficultyHelper: BotDifficultyHelper, seasonalEventService: SeasonalEventService, localisationService: LocalisationService, configServer: ConfigServer);
     /**
      * Generate a player scav bot object
      * @param role e.g. assault / pmcbot
@@ -71,7 +73,7 @@ export declare class BotGenerator {
      * @param botRole role of bot e.g. assault
      * @returns Nickname for bot
      */
-    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string): string;
+    protected generateBotNickname(botJsonTemplate: IBotType, isPlayerScav: boolean, botRole: string, sessionId: string): string;
     /**
      * Log the number of PMCs generated to the debug console
      * @param output Generated bot array, ready to send to client
diff --git a/TypeScript/6ReferenceAnotherClass/types/helpers/HideoutHelper.d.ts b/TypeScript/6ReferenceAnotherClass/types/helpers/HideoutHelper.d.ts
index e9d3746..d9119a2 100644
--- a/TypeScript/6ReferenceAnotherClass/types/helpers/HideoutHelper.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/helpers/HideoutHelper.d.ts
@@ -58,16 +58,12 @@ export declare class HideoutHelper {
      * @returns
      */
     isProductionType(productive: Productive): productive is Production;
-    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
-     * TODO:
-     * After looking at the skills there doesnt seem to be a configuration per skill to boost
-     * the XP gain PER skill. I THINK you should be able to put the variable "SkillProgress" (just like health has it)
-     * and be able to tune the skill gain PER skill, but I havent tested it and Im not sure!
-     * @param pmcData
-     * @param bonus
+     * Apply bonus to player profile given after completing hideout upgrades
+     * @param pmcData Profile to add bonus to
+     * @param bonus Bonus to add to profile
      */
-    protected applySkillXPBoost(pmcData: IPmcData, bonus: StageBonus): void;
+    applyPlayerUpgradesBonuses(pmcData: IPmcData, bonus: StageBonus): void;
     /**
      * Process a players hideout, update areas that use resources + increment production timers
      * @param sessionID Session id
@@ -83,6 +79,7 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     };
+    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     /**
      * Update progress timer for water collector
      * @param pmcData profile to update
@@ -141,9 +138,8 @@ export declare class HideoutHelper {
         isGeneratorOn: boolean;
         waterCollectorHasFilter: boolean;
     }): void;
-    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
-    protected doesWaterCollectorHaveFilter(waterCollector: HideoutArea): boolean;
     protected updateFuel(generatorArea: HideoutArea, pmcData: IPmcData): void;
+    protected updateWaterCollector(sessionId: string, pmcData: IPmcData, area: HideoutArea, isGeneratorOn: boolean): void;
     /**
      * Adjust water filter objects resourceValue or delete when they reach 0 resource
      * @param waterFilterArea water filter area to update
diff --git a/TypeScript/6ReferenceAnotherClass/types/loaders/PreAkiModLoader.d.ts b/TypeScript/6ReferenceAnotherClass/types/loaders/PreAkiModLoader.d.ts
index a67f1c9..08059ff 100644
--- a/TypeScript/6ReferenceAnotherClass/types/loaders/PreAkiModLoader.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/loaders/PreAkiModLoader.d.ts
@@ -35,6 +35,7 @@ export declare class PreAkiModLoader implements IModLoader {
     getImportedModDetails(): Record<string, IPackageJsonData>;
     getModPath(mod: string): string;
     protected importMods(): Promise<void>;
+    protected sortMods(prev: string, next: string, missingFromOrderJSON: Record<string, boolean>): number;
     /**
      * Check for duplicate mods loaded, show error if any
      * @param modPackageData Dictionary of mod package.json data
diff --git a/TypeScript/6ReferenceAnotherClass/types/models/spt/config/IPmcConfig.d.ts b/TypeScript/6ReferenceAnotherClass/types/models/spt/config/IPmcConfig.d.ts
index a349ac2..339e0c6 100644
--- a/TypeScript/6ReferenceAnotherClass/types/models/spt/config/IPmcConfig.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/models/spt/config/IPmcConfig.d.ts
@@ -40,6 +40,8 @@ export interface IPmcConfig {
     botRelativeLevelDeltaMax: number;
     /** Force a number of healing items into PMCs secure container to ensure they can heal */
     forceHealingItemsIntoSecure: boolean;
+    addPrefixToSameNamePMCAsPlayerChance: number;
+    allPMCsHavePlayerNameWithRandomPrefixChance: number;
 }
 export interface PmcTypes {
     usec: string;
diff --git a/TypeScript/6ReferenceAnotherClass/types/services/LocalisationService.d.ts b/TypeScript/6ReferenceAnotherClass/types/services/LocalisationService.d.ts
index 44a4941..ec6eecf 100644
--- a/TypeScript/6ReferenceAnotherClass/types/services/LocalisationService.d.ts
+++ b/TypeScript/6ReferenceAnotherClass/types/services/LocalisationService.d.ts
@@ -2,17 +2,19 @@ import { I18n } from "i18n";
 import { ILocaleConfig } from "../models/spt/config/ILocaleConfig";
 import { ILogger } from "../models/spt/utils/ILogger";
 import { DatabaseServer } from "../servers/DatabaseServer";
+import { RandomUtil } from "../utils/RandomUtil";
 import { LocaleService } from "./LocaleService";
 /**
  * Handles translating server text into different langauges
  */
 export declare class LocalisationService {
     protected logger: ILogger;
+    protected randomUtil: RandomUtil;
     protected databaseServer: DatabaseServer;
     protected localeService: LocaleService;
     protected localeConfig: ILocaleConfig;
     protected i18n: I18n;
-    constructor(logger: ILogger, databaseServer: DatabaseServer, localeService: LocaleService);
+    constructor(logger: ILogger, randomUtil: RandomUtil, databaseServer: DatabaseServer, localeService: LocaleService);
     /**
      * Get a localised value using the passed in key
      * @param key Key to loop up locale for
@@ -25,4 +27,10 @@ export declare class LocalisationService {
      * @returns string array of keys
      */
     getKeys(): string[];
+    /**
+     * From the provided partial key, find all keys that start with text and choose a random match
+     * @param partialKey Key to match locale keys on
+     * @returns locale text
+     */
+    getRandomTextThatMatchesPartialKey(partialKey: string): string;
 }