mirror of
https://github.com/sp-tarkov/server.git
synced 2025-02-13 09:50:43 -05:00
# Conflicts: # project/.vscode/launch.json # project/assets/database/locations/bigmap/base.json # project/assets/database/locations/interchange/base.json # project/assets/database/locations/rezervbase/base.json # project/gulpfile.mjs # project/package.json # project/src/ErrorHandler.ts # project/src/Program.ts # project/src/callbacks/DataCallbacks.ts # project/src/callbacks/DialogueCallbacks.ts # project/src/callbacks/GameCallbacks.ts # project/src/callbacks/HandbookCallbacks.ts # project/src/callbacks/HealthCallbacks.ts # project/src/callbacks/HttpCallbacks.ts # project/src/callbacks/LauncherCallbacks.ts # project/src/callbacks/LocationCallbacks.ts # project/src/callbacks/MatchCallbacks.ts # project/src/callbacks/ModCallbacks.ts # project/src/callbacks/NotifierCallbacks.ts # project/src/callbacks/PresetCallbacks.ts # project/src/callbacks/ProfileCallbacks.ts # project/src/callbacks/RagfairCallbacks.ts # project/src/callbacks/TraderCallbacks.ts # project/src/context/ApplicationContext.ts # project/src/context/ContextVariableType.ts # project/src/controllers/BotController.ts # project/src/controllers/CustomizationController.ts # project/src/controllers/DialogueController.ts # project/src/controllers/GameController.ts # project/src/controllers/HealthController.ts # project/src/controllers/HideoutController.ts # project/src/controllers/InraidController.ts # project/src/controllers/InsuranceController.ts # project/src/controllers/InventoryController.ts # project/src/controllers/LauncherController.ts # project/src/controllers/LocationController.ts # project/src/controllers/MatchController.ts # project/src/controllers/QuestController.ts # project/src/controllers/RagfairController.ts # project/src/controllers/RepeatableQuestController.ts # project/src/controllers/TradeController.ts # project/src/di/Container.ts # project/src/di/Router.ts # project/src/generators/BotEquipmentModGenerator.ts # project/src/generators/BotLevelGenerator.ts # project/src/generators/BotWeaponGenerator.ts # project/src/generators/LocationGenerator.ts # project/src/generators/LootGenerator.ts # project/src/generators/RepeatableQuestGenerator.ts # project/src/generators/WeatherGenerator.ts # project/src/generators/weapongen/InventoryMagGen.ts # project/src/generators/weapongen/implementations/BarrelInventoryMagGen.ts # project/src/generators/weapongen/implementations/ExternalInventoryMagGen.ts # project/src/helpers/AssortHelper.ts # project/src/helpers/BotGeneratorHelper.ts # project/src/helpers/InRaidHelper.ts # project/src/helpers/ProfileHelper.ts # project/src/helpers/RagfairHelper.ts # project/src/helpers/RagfairOfferHelper.ts # project/src/helpers/TraderHelper.ts # project/src/loaders/ModLoadOrder.ts # project/src/loaders/PostDBModLoader.ts # project/src/loaders/PreAkiModLoader.ts # project/src/models/eft/common/IGlobals.ts # project/src/models/eft/common/ILocationBase.ts # project/src/models/eft/common/tables/IBotBase.ts # project/src/models/eft/common/tables/IProfileTemplate.ts # project/src/models/eft/common/tables/ITemplateItem.ts # project/src/models/eft/dialog/IAcceptFriendRequestData.ts # project/src/models/eft/dialog/IDeleteFriendRequest.ts # project/src/models/eft/game/IGameConfigResponse.ts # project/src/models/eft/game/IGameKeepAliveResponse.ts # project/src/models/eft/game/IGameStartResponse.ts # project/src/models/eft/match/IJoinMatchResult.ts # project/src/models/eft/notifier/INotifier.ts # project/src/models/eft/profile/GetProfileStatusResponseData.ts # project/src/models/eft/trade/IProcessBuyTradeRequestData.ts # project/src/models/eft/trade/IProcessSellTradeRequestData.ts # project/src/models/enums/WildSpawnTypeNumber.ts # project/src/models/spt/bots/BotGenerationDetails.ts # project/src/models/spt/config/IBotConfig.ts # project/src/models/spt/config/IBotDurability.ts # project/src/models/spt/config/IInRaidConfig.ts # project/src/models/spt/config/ILocationConfig.ts # project/src/models/spt/config/IQuestConfig.ts # project/src/models/spt/config/ISeasonalEventConfig.ts # project/src/models/spt/server/ILocations.ts # project/src/models/spt/utils/IUuidGenerator.ts # project/src/routers/dynamic/BotDynamicRouter.ts # project/src/routers/dynamic/BundleDynamicRouter.ts # project/src/routers/dynamic/CustomizationDynamicRouter.ts # project/src/routers/dynamic/DataDynamicRouter.ts # project/src/routers/dynamic/HttpDynamicRouter.ts # project/src/routers/dynamic/InraidDynamicRouter.ts # project/src/routers/dynamic/LocationDynamicRouter.ts # project/src/routers/dynamic/NotifierDynamicRouter.ts # project/src/routers/dynamic/TraderDynamicRouter.ts # project/src/routers/save_load/InsuranceSaveLoadRouter.ts # project/src/routers/save_load/ProfileSaveLoadRouter.ts # project/src/routers/serializers/NotifySerializer.ts # project/src/routers/static/BotStaticRouter.ts # project/src/routers/static/BundleStaticRouter.ts # project/src/routers/static/ClientLogStaticRouter.ts # project/src/routers/static/CustomizationStaticRouter.ts # project/src/routers/static/DataStaticRouter.ts # project/src/routers/static/DialogStaticRouter.ts # project/src/routers/static/GameStaticRouter.ts # project/src/routers/static/HealthStaticRouter.ts # project/src/routers/static/InraidStaticRouter.ts # project/src/routers/static/InsuranceStaticRouter.ts # project/src/routers/static/ItemEventStaticRouter.ts # project/src/routers/static/LauncherStaticRouter.ts # project/src/routers/static/LocationStaticRouter.ts # project/src/routers/static/MatchStaticRouter.ts # project/src/routers/static/NotifierStaticRouter.ts # project/src/routers/static/PresetStaticRouter.ts # project/src/routers/static/ProfileStaticRouter.ts # project/src/routers/static/QuestStaticRouter.ts # project/src/routers/static/RagfairStaticRouter.ts # project/src/routers/static/TraderStaticRouter.ts # project/src/routers/static/WeatherStaticRouter.ts # project/src/services/BotEquipmentFilterService.ts # project/src/services/BotGenerationCacheService.ts # project/src/services/BotWeaponModLimitService.ts # project/src/services/PaymentService.ts # project/src/services/ProfileFixerService.ts # project/src/services/RagfairOfferService.ts # project/src/services/RagfairTaxService.ts # project/src/services/RepairService.ts # project/src/services/SeasonalEventService.ts # project/src/utils/RagfairOfferHolder.ts # project/src/utils/TimeUtil.ts # project/src/utils/UUidGenerator.ts # project/src/utils/VFS.ts # project/src/utils/collections/queue/Queue.ts # project/src/utils/logging/AbstractWinstonLogger.ts # project/src/utils/logging/WinstonMainLogger.ts # project/src/utils/logging/WinstonRequestLogger.ts # project/tests/utils/TimeUtil.test.ts Manually resolved by Refringe.
199 lines
6.3 KiB
TypeScript
199 lines
6.3 KiB
TypeScript
import { inject, injectable } from "tsyringe";
|
|
|
|
import { HttpServerHelper } from "@spt-aki/helpers/HttpServerHelper";
|
|
import { ProfileHelper } from "@spt-aki/helpers/ProfileHelper";
|
|
import { PreAkiModLoader } from "@spt-aki/loaders/PreAkiModLoader";
|
|
import { IChangeRequestData } from "@spt-aki/models/eft/launcher/IChangeRequestData";
|
|
import { ILoginRequestData } from "@spt-aki/models/eft/launcher/ILoginRequestData";
|
|
import { IRegisterData } from "@spt-aki/models/eft/launcher/IRegisterData";
|
|
import { Info, ModDetails } from "@spt-aki/models/eft/profile/IAkiProfile";
|
|
import { IConnectResponse } from "@spt-aki/models/eft/profile/IConnectResponse";
|
|
import { ConfigTypes } from "@spt-aki/models/enums/ConfigTypes";
|
|
import { ICoreConfig } from "@spt-aki/models/spt/config/ICoreConfig";
|
|
import { IPackageJsonData } from "@spt-aki/models/spt/mod/IPackageJsonData";
|
|
import { ILogger } from "@spt-aki/models/spt/utils/ILogger";
|
|
import { ConfigServer } from "@spt-aki/servers/ConfigServer";
|
|
import { DatabaseServer } from "@spt-aki/servers/DatabaseServer";
|
|
import { SaveServer } from "@spt-aki/servers/SaveServer";
|
|
import { LocalisationService } from "@spt-aki/services/LocalisationService";
|
|
import { HashUtil } from "@spt-aki/utils/HashUtil";
|
|
|
|
@injectable()
|
|
export class LauncherController
|
|
{
|
|
protected coreConfig: ICoreConfig;
|
|
|
|
constructor(
|
|
@inject("WinstonLogger") protected logger: ILogger,
|
|
@inject("HashUtil") protected hashUtil: HashUtil,
|
|
@inject("SaveServer") protected saveServer: SaveServer,
|
|
@inject("HttpServerHelper") protected httpServerHelper: HttpServerHelper,
|
|
@inject("ProfileHelper") protected profileHelper: ProfileHelper,
|
|
@inject("DatabaseServer") protected databaseServer: DatabaseServer,
|
|
@inject("LocalisationService") protected localisationService: LocalisationService,
|
|
@inject("PreAkiModLoader") protected preAkiModLoader: PreAkiModLoader,
|
|
@inject("ConfigServer") protected configServer: ConfigServer,
|
|
)
|
|
{
|
|
this.coreConfig = this.configServer.getConfig(ConfigTypes.CORE);
|
|
}
|
|
|
|
public connect(): IConnectResponse
|
|
{
|
|
return {
|
|
backendUrl: this.httpServerHelper.getBackendUrl(),
|
|
name: this.coreConfig.serverName,
|
|
editions: Object.keys(this.databaseServer.getTables().templates.profiles),
|
|
profileDescriptions: this.getProfileDescriptions(),
|
|
};
|
|
}
|
|
|
|
/**
|
|
* Get descriptive text for each of the profile edtions a player can choose, keyed by profile.json profile type e.g. "Edge Of Darkness"
|
|
* @returns Dictionary of profile types with related descriptive text
|
|
*/
|
|
protected getProfileDescriptions(): Record<string, string>
|
|
{
|
|
const result = {};
|
|
const dbProfiles = this.databaseServer.getTables().templates.profiles;
|
|
for (const profileKey in dbProfiles)
|
|
{
|
|
const localeKey = dbProfiles[profileKey]?.descriptionLocaleKey;
|
|
if (!localeKey)
|
|
{
|
|
this.logger.warning(this.localisationService.getText("launcher-missing_property", profileKey));
|
|
continue;
|
|
}
|
|
|
|
result[profileKey] = this.localisationService.getText(localeKey);
|
|
}
|
|
|
|
return result;
|
|
}
|
|
|
|
public find(sessionIdKey: string): Info
|
|
{
|
|
if (sessionIdKey in this.saveServer.getProfiles())
|
|
{
|
|
return this.saveServer.getProfile(sessionIdKey).info;
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
public login(info: ILoginRequestData): string
|
|
{
|
|
for (const sessionID in this.saveServer.getProfiles())
|
|
{
|
|
const account = this.saveServer.getProfile(sessionID).info;
|
|
if (info.username === account.username)
|
|
{
|
|
return sessionID;
|
|
}
|
|
}
|
|
|
|
return "";
|
|
}
|
|
|
|
public register(info: IRegisterData): string
|
|
{
|
|
for (const sessionID in this.saveServer.getProfiles())
|
|
{
|
|
if (info.username === this.saveServer.getProfile(sessionID).info.username)
|
|
{
|
|
return "";
|
|
}
|
|
}
|
|
|
|
return this.createAccount(info);
|
|
}
|
|
|
|
protected createAccount(info: IRegisterData): string
|
|
{
|
|
const sessionID = this.hashUtil.generate();
|
|
const newProfileDetails: Info = {
|
|
id: sessionID,
|
|
aid: this.hashUtil.generateAccountId(),
|
|
username: info.username,
|
|
password: info.password,
|
|
wipe: true,
|
|
edition: info.edition,
|
|
};
|
|
this.saveServer.createProfile(newProfileDetails);
|
|
|
|
this.saveServer.loadProfile(sessionID);
|
|
this.saveServer.saveProfile(sessionID);
|
|
|
|
return sessionID;
|
|
}
|
|
|
|
public changeUsername(info: IChangeRequestData): string
|
|
{
|
|
const sessionID = this.login(info);
|
|
|
|
if (sessionID)
|
|
{
|
|
this.saveServer.getProfile(sessionID).info.username = info.change;
|
|
}
|
|
|
|
return sessionID;
|
|
}
|
|
|
|
public changePassword(info: IChangeRequestData): string
|
|
{
|
|
const sessionID = this.login(info);
|
|
|
|
if (sessionID)
|
|
{
|
|
this.saveServer.getProfile(sessionID).info.password = info.change;
|
|
}
|
|
|
|
return sessionID;
|
|
}
|
|
|
|
public wipe(info: IRegisterData): string
|
|
{
|
|
const sessionID = this.login(info);
|
|
|
|
if (sessionID)
|
|
{
|
|
const profile = this.saveServer.getProfile(sessionID);
|
|
profile.info.edition = info.edition;
|
|
profile.info.wipe = true;
|
|
}
|
|
|
|
return sessionID;
|
|
}
|
|
|
|
public getCompatibleTarkovVersion(): string
|
|
{
|
|
return this.coreConfig.compatibleTarkovVersion;
|
|
}
|
|
|
|
/**
|
|
* Get the mods the server has currently loaded
|
|
* @returns Dictionary of mod name and mod details
|
|
*/
|
|
public getLoadedServerMods(): Record<string, IPackageJsonData>
|
|
{
|
|
return this.preAkiModLoader.getImportedModDetails();
|
|
}
|
|
|
|
/**
|
|
* Get the mods a profile has ever loaded into game with
|
|
* @param sessionId Player id
|
|
* @returns Array of mod details
|
|
*/
|
|
public getServerModsProfileUsed(sessionId: string): ModDetails[]
|
|
{
|
|
const profile = this.profileHelper.getFullProfile(sessionId);
|
|
|
|
if (profile?.aki?.mods)
|
|
{
|
|
return this.preAkiModLoader.getProfileModsGroupedByModName(profile?.aki?.mods);
|
|
}
|
|
|
|
return [];
|
|
}
|
|
}
|