0
0
mirror of https://github.com/sp-tarkov/server.git synced 2025-02-13 09:50:43 -05:00
server/project/src/utils/Watermark.ts

184 lines
6.3 KiB
TypeScript
Raw Normal View History

import { ConfigTypes } from "@spt/models/enums/ConfigTypes";
import { ICoreConfig } from "@spt/models/spt/config/ICoreConfig";
import { LogTextColor } from "@spt/models/spt/logging/LogTextColor";
import { ILogger } from "@spt/models/spt/utils/ILogger";
import { ConfigServer } from "@spt/servers/ConfigServer";
import { LocalisationService } from "@spt/services/LocalisationService";
import { inject, injectable } from "tsyringe";
2023-03-03 15:23:46 +00:00
@injectable()
export class WatermarkLocale {
protected description: string[];
protected warning: string[];
protected modding: string[];
constructor(@inject("LocalisationService") protected localisationService: LocalisationService) {
this.description = [
2023-03-03 15:23:46 +00:00
this.localisationService.getText("watermark-discord_url"),
"",
this.localisationService.getText("watermark-free_of_charge"),
this.localisationService.getText("watermark-paid_scammed"),
2023-11-15 20:35:05 -05:00
this.localisationService.getText("watermark-commercial_use_prohibited"),
];
this.warning = [
2023-03-03 15:23:46 +00:00
"",
this.localisationService.getText("watermark-testing_build"),
this.localisationService.getText("watermark-no_support"),
"",
`${this.localisationService.getText("watermark-report_issues_to")}:`,
this.localisationService.getText("watermark-issue_tracker_url"),
"",
2023-11-15 20:35:05 -05:00
this.localisationService.getText("watermark-use_at_own_risk"),
];
this.modding = [
2023-03-03 15:23:46 +00:00
"",
this.localisationService.getText("watermark-modding_disabled"),
"",
this.localisationService.getText("watermark-not_an_issue"),
2023-11-15 20:35:05 -05:00
this.localisationService.getText("watermark-do_not_report"),
];
}
2023-03-03 15:23:46 +00:00
public getDescription(): string[] {
return this.description;
2023-03-03 15:23:46 +00:00
}
public getWarning(): string[] {
return this.warning;
2023-03-03 15:23:46 +00:00
}
public getModding(): string[] {
return this.modding;
2023-03-03 15:23:46 +00:00
}
}
@injectable()
export class Watermark {
protected sptConfig: ICoreConfig;
protected text: string[] = [];
protected versionLabel = "";
2023-03-03 15:23:46 +00:00
constructor(
@inject("PrimaryLogger") protected logger: ILogger,
2023-03-03 15:23:46 +00:00
@inject("ConfigServer") protected configServer: ConfigServer,
@inject("LocalisationService") protected localisationService: LocalisationService,
@inject("WatermarkLocale") protected watermarkLocale: WatermarkLocale,
) {
this.sptConfig = this.configServer.getConfig<ICoreConfig>(ConfigTypes.CORE);
2023-03-03 15:23:46 +00:00
}
public initialize(): void {
2023-03-03 15:23:46 +00:00
const description = this.watermarkLocale.getDescription();
const warning = this.watermarkLocale.getWarning();
const modding = this.watermarkLocale.getModding();
const versionTag = this.getVersionTag();
this.versionLabel = `${this.sptConfig.projectName} ${versionTag}`;
2023-03-03 15:23:46 +00:00
this.text = [this.versionLabel];
this.text = [...this.text, ...description];
if (globalThis.G_DEBUG_CONFIGURATION) {
2023-03-03 15:23:46 +00:00
this.text = this.text.concat([...warning]);
}
if (!globalThis.G_MODS_ENABLED) {
2023-03-03 15:23:46 +00:00
this.text = this.text.concat([...modding]);
}
if (this.sptConfig.customWatermarkLocaleKeys) {
if (this.sptConfig.customWatermarkLocaleKeys.length > 0) {
for (const key of this.sptConfig.customWatermarkLocaleKeys) {
this.text.push(...["", this.localisationService.getText(key)]);
}
}
}
this.setTitle();
this.resetCursor();
this.draw();
2023-03-03 15:23:46 +00:00
}
/**
* Get a version string (x.x.x) or (x.x.x-BLEEDINGEDGE) OR (X.X.X (18xxx))
* @param withEftVersion Include the eft version this spt version was made for
* @returns string
*/
public getVersionTag(withEftVersion = false): string {
const sptVersion = globalThis.G_SPTVERSION || this.sptConfig.sptVersion;
const versionTag = globalThis.G_DEBUG_CONFIGURATION
? `${sptVersion} - ${this.localisationService.getText("bleeding_edge_build")}`
: sptVersion;
2023-03-03 15:23:46 +00:00
if (withEftVersion) {
const tarkovVersion = this.sptConfig.compatibleTarkovVersion.split(".").pop();
2023-03-03 15:23:46 +00:00
return `${versionTag} (${tarkovVersion})`;
}
return versionTag;
}
/**
2023-07-15 14:49:25 +01:00
* Handle singleplayer/settings/version
2023-03-03 15:23:46 +00:00
* Get text shown in game on screen, can't be translated as it breaks bsgs client when certian characters are used
* @returns string
*/
public getInGameVersionLabel(): string {
const sptVersion = globalThis.G_SPTVERSION || this.sptConfig.sptVersion;
const versionTag = globalThis.G_DEBUG_CONFIGURATION
? `${sptVersion} - BLEEDINGEDGE ${globalThis.G_COMMIT?.slice(0, 6) ?? ""}`
: `${sptVersion} - ${globalThis.G_COMMIT?.slice(0, 6) ?? ""}`;
2023-03-03 15:23:46 +00:00
return `${this.sptConfig.projectName} ${versionTag}`;
2023-03-03 15:23:46 +00:00
}
/** Set window title */
protected setTitle(): void {
2023-03-03 15:23:46 +00:00
process.title = this.versionLabel;
}
/** Reset console cursor to top */
protected resetCursor(): void {
2023-03-03 15:23:46 +00:00
process.stdout.write("\u001B[2J\u001B[0;0f");
}
/** Draw the watermark */
protected draw(): void {
const result: string[] = [];
2023-03-03 15:23:46 +00:00
// Calculate size, add 10% for spacing to the right
const longestLength =
this.text.reduce((a, b) => {
return a.length > b.length ? a : b;
}).length * 1.1;
2023-03-03 15:23:46 +00:00
// Create line of - to add top/bottom of watermark
2023-03-03 15:23:46 +00:00
let line = "";
for (let i = 0; i < longestLength; ++i) {
2023-03-03 15:23:46 +00:00
line += "─";
}
// Opening line
2023-03-03 15:23:46 +00:00
result.push(`┌─${line}─┐`);
// Add content of watermark to screen
for (const watermarkText of this.text) {
const spacingSize = longestLength - watermarkText.length;
let textWithRightPadding = watermarkText;
2023-03-03 15:23:46 +00:00
for (let i = 0; i < spacingSize; ++i) {
textWithRightPadding += " ";
2023-03-03 15:23:46 +00:00
}
result.push(`${textWithRightPadding}`);
2023-03-03 15:23:46 +00:00
}
// Closing line
2023-03-03 15:23:46 +00:00
result.push(`└─${line}─┘`);
// Log watermark to screen
for (const text of result) {
2023-03-03 15:23:46 +00:00
this.logger.logWithColor(text, LogTextColor.YELLOW);
}
}
}