mirror of
https://github.com/sp-tarkov/server.git
synced 2025-02-13 09:50:43 -05:00
These are the formatting & linting configuration changes from the `3.8.0` branch and the changes that they make to the overall project. The majority of these changes are from running two commands: `npm run lint:fix` `npm run style:fix` This has already been run on the `3.8.0` branch and this PR should make `master` play nicer when it comes to merges going forward. There are now four VSCode plugins recommended for server development. They've been added to the workspace file and a user should get a UI notification when the workspace is opened if they're not installed. The four plugins are: https://marketplace.visualstudio.com/items?itemName=EditorConfig.EditorConfig https://marketplace.visualstudio.com/items?itemName=dprint.dprint https://marketplace.visualstudio.com/items?itemName=dbaeumer.vscode-eslint https://marketplace.visualstudio.com/items?itemName=biomejs.biome Once installed they should just work within the workspace. Also, be sure to `npm i` to get the new dprint application. Co-authored-by: Refringe <brownelltyler@gmail.com> Reviewed-on: SPT-AKI/Server#168
60 lines
1.7 KiB
TypeScript
60 lines
1.7 KiB
TypeScript
import crypto from "node:crypto";
|
|
import { inject, injectable } from "tsyringe";
|
|
|
|
import { TimeUtil } from "@spt-aki/utils/TimeUtil";
|
|
|
|
@injectable()
|
|
export class ObjectId
|
|
{
|
|
constructor(@inject("TimeUtil") protected timeUtil: TimeUtil)
|
|
{}
|
|
|
|
protected randomBytes = crypto.randomBytes(5);
|
|
protected constglobalCounter = 0;
|
|
protected consttime = 0;
|
|
protected globalCounter: number;
|
|
protected time: number;
|
|
|
|
public incGlobalCounter(): number
|
|
{
|
|
return (this.globalCounter = (this.globalCounter + 1) % 0xffffff);
|
|
}
|
|
|
|
public toHexString(byteArray: string | any[] | Buffer): string
|
|
{
|
|
let hexString = "";
|
|
for (let i = 0; i < byteArray.length; i++)
|
|
{
|
|
hexString += (`0${(byteArray[i] & 0xFF).toString(16)}`).slice(-2);
|
|
}
|
|
return hexString;
|
|
}
|
|
|
|
public generate(): string
|
|
{
|
|
const time = this.timeUtil.getTimestamp();
|
|
if (this.time !== time)
|
|
{
|
|
this.globalCounter = 0;
|
|
this.time = time;
|
|
}
|
|
const counter = this.incGlobalCounter();
|
|
const objectIdBinary = Buffer.alloc(12);
|
|
|
|
objectIdBinary[3] = time & 0xff;
|
|
objectIdBinary[2] = (time >> 8) & 0xff;
|
|
objectIdBinary[1] = (time >> 16) & 0xff;
|
|
objectIdBinary[0] = (time >> 24) & 0xff;
|
|
objectIdBinary[4] = this.randomBytes[0];
|
|
objectIdBinary[5] = this.randomBytes[1];
|
|
objectIdBinary[6] = this.randomBytes[2];
|
|
objectIdBinary[7] = this.randomBytes[3];
|
|
objectIdBinary[8] = this.randomBytes[4];
|
|
objectIdBinary[9] = (counter >> 16) & 0xff;
|
|
objectIdBinary[10] = (counter >> 8) & 0xff;
|
|
objectIdBinary[11] = counter & 0xff;
|
|
|
|
return this.toHexString(objectIdBinary);
|
|
}
|
|
}
|