mirror of
https://github.com/zkldi/Tachi.git
synced 2026-09-29 02:18:09 +03:00
reject scores with invalid mods
This commit is contained in:
@@ -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) {
|
||||
|
||||
@@ -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
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user