reject scores with invalid mods

This commit is contained in:
zkldi
2021-05-21 17:03:42 +01:00
parent 6cb6a8a132
commit eaaa6246ea
4 changed files with 42 additions and 27 deletions
+6
View File
@@ -2,3 +2,9 @@
export const USCIR_ADJACENT_SCORE_N = 3;
export const USCIR_MAX_LEADERBOARD_N = 10;
export const USC_DEFAULT_PERFECT = 46;
export const USC_DEFAULT_NEAR = 150;
export const USC_DEFAULT_HOLD = 150;
export const USC_DEFAULT_MISS = 300;
export const USC_DEFAULT_SLAM = 84;
@@ -1,22 +0,0 @@
import { KtLogger } from "../../../../types";
import GenericParseEamIIDXCSV from "../../common/eamusement-iidx-csv/parser";
import {
IIDXEamusementCSVContext,
IIDXEamusementCSVData,
} from "../../common/eamusement-iidx-csv/types";
import { ParserFunctionReturnsSync } from "../../common/types";
/**
* Parses a buffer of EamusementCSV data.
* @param fileData - The buffer to parse.
* @param body - The request body that made this file import request. Used to infer playtype.
*/
function ParseEamusementIIDXCSV(
fileData: Express.Multer.File,
body: Record<string, unknown>,
logger: KtLogger
): ParserFunctionReturnsSync<IIDXEamusementCSVData, IIDXEamusementCSVContext> {
return GenericParseEamIIDXCSV(fileData, body, "e-amusement", logger);
}
export default ParseEamusementIIDXCSV;
@@ -1,13 +1,20 @@
import { USCClientScore } from "../../../../api/ir/usc/common";
import { FindSongOnID } from "../../../../common/database-lookup/song";
import { KtLogger } from "../../../../types";
import { InternalFailure } from "../../../framework/common/converter-failures";
import { InternalFailure, InvalidScoreFailure } from "../../../framework/common/converter-failures";
import { GenericGetGradeAndPercent } from "../../../framework/common/score-utils";
import { IRUSCContext } from "./types";
import { Lamps } from "kamaitachi-common";
import uuid from "uuid";
import { ConverterFunction } from "../../common/types";
import { DryScore } from "../../../framework/common/types";
import {
USC_DEFAULT_HOLD,
USC_DEFAULT_MISS,
USC_DEFAULT_NEAR,
USC_DEFAULT_PERFECT,
USC_DEFAULT_SLAM,
} from "../../../../constants/usc-ir";
function DeriveNoteMod(data: USCClientScore): "NORMAL" | "MIRROR" | "RANDOM" | "MIR-RAN" {
if (data.options.mirror && data.options.random) {
@@ -42,6 +49,23 @@ export const ConverterIRUSC: ConverterFunction<USCClientScore, IRUSCContext> = a
importType,
logger
) => {
if (
data.windows.perfect !== USC_DEFAULT_PERFECT ||
data.windows.good !== USC_DEFAULT_NEAR ||
data.windows.hold !== USC_DEFAULT_HOLD ||
data.windows.miss !== USC_DEFAULT_MISS ||
data.windows.slam !== USC_DEFAULT_SLAM
) {
logger.verbose(`Ignored score because hitWindows were modified.`);
throw new InvalidScoreFailure(`HitWindows have been modified - Score is invalid.`);
}
// if any auto-like option is enabled, reject score.
if (data.options.autoFlags !== 0) {
logger.verbose(`Ignored score because autoplay was enabled.`);
throw new InvalidScoreFailure(`Autoplay was enabled - Score is invalid.`);
}
const song = await FindSongOnID("usc", context.chart.songID);
if (!song) {
+11 -4
View File
@@ -16,11 +16,18 @@
"score": 3157894,
"gauge": 0.20073963701725006,
"timestamp": 1607229633,
"options": {
"gaugeType": 0,
"mirror": false,
"random": false,
"autoFlags": 0
},
"windows": {
"good": 92,
"hold": 138,
"miss": 250,
"perfect": 46
"good": 150,
"hold": 150,
"miss": 300,
"perfect": 46,
"slam": 84
}
}
}