diff --git a/common/src/types.ts b/common/src/types.ts index f7b82ddfc..f2638b558 100644 --- a/common/src/types.ts +++ b/common/src/types.ts @@ -1136,6 +1136,7 @@ export interface HitMetaLookup { }; "sdvx:Single": BASE_VALID_HIT_META & { gauge: number | null; + exScore: number | null; }; "usc:Controller": USCHitMeta; "usc:Keyboard": USCHitMeta; diff --git a/server/src/lib/score-import/framework/pb/game-specific-merge.ts b/server/src/lib/score-import/framework/pb/game-specific-merge.ts index d23f4a4fc..802ca6ee6 100644 --- a/server/src/lib/score-import/framework/pb/game-specific-merge.ts +++ b/server/src/lib/score-import/framework/pb/game-specific-merge.ts @@ -1,3 +1,4 @@ +/* eslint-disable require-atomic-updates */ import { InternalFailure } from "../common/converter-failures"; import db from "external/mongo/db"; import { Volforce } from "rg-stats"; @@ -139,5 +140,26 @@ export async function SDVXMergeFn( chart.levelNum ); + // find the users score with the highest exScore + const bestExScore = (await db.scores.findOne( + { + chartID: pbDoc.chartID, + "scoreData.hitMeta.exScore": { $type: "number" }, + }, + { + sort: { + "scoreData.hitMeta.exScore": -1, + }, + } + )) as ScoreDocument<"sdvx:Single"> | null; + + if (!bestExScore) { + pbDoc.scoreData.hitMeta.exScore = undefined; + } else { + pbDoc.scoreData.hitMeta.exScore = bestExScore.scoreData.hitMeta.exScore; + + pbDoc.composedFrom.other = [{ name: "exScorePB", scoreID: bestExScore.scoreID }]; + } + return true; } diff --git a/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.test.ts b/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.test.ts index 564fb0246..010f6a712 100644 --- a/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.test.ts +++ b/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.test.ts @@ -39,6 +39,7 @@ t.test("#ConverterIRKsHookSV6C", (t) => { }, hitMeta: { maxCombo: 158, + exScore: 1334, }, }, game: "sdvx", diff --git a/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.ts b/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.ts index d004b00d5..b69ecafdb 100644 --- a/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.ts +++ b/server/src/lib/score-import/import-types/ir/kshook-sv6c/converter.ts @@ -57,6 +57,7 @@ export const ConverterIRKsHookSV6C: ConverterFunction, logger: KtLogger) { +export function WrapScriptPromise(promise: Promise, logger: KtLogger) { let code = 0; - try { - await promise; + void promise + .then(() => { + logger.info(`Finished executing.`); + }) + .catch((err: Error) => { + logger.error(`Failed executing.`, { err }); - logger.info(`Finished executing.`); - } catch (err) { - logger.error(`Failed executing.`, { err }); - - code = 1; - } - - logger.end(() => { - process.exit(code); - }); + code = 1; + }) + .finally(() => { + logger.end(() => { + process.exit(code); + }); + }); }