mirror of
https://github.com/zkldi/Tachi.git
synced 2026-10-05 13:28:08 +03:00
ChartDocument Updates
This commit is contained in:
+9
-22
@@ -161,18 +161,10 @@ exports.validHitMeta = {
|
||||
};
|
||||
exports.validScoreMeta = {
|
||||
iidx: {
|
||||
optionsRandom: ["NONRAN", "RANDOM", "R-RANDOM", "S-RANDOM", "MIRROR"],
|
||||
optionsAssist: [
|
||||
"AUTO SCRATCH",
|
||||
"5KEYS",
|
||||
"LEGACY NOTE",
|
||||
"ASCR + 5KEY",
|
||||
"ASCR + LEGACY",
|
||||
"5KEYS + LEGACY",
|
||||
"FULL ASSIST",
|
||||
],
|
||||
optionsRange: ["SUDDEN+", "HIDDEN+", "SUD+ HID+", "LIFT", "LIFT SUD+"],
|
||||
optionsGauge: ["ASSISTED EASY", "EASY", "HARD", "EX-HARD"],
|
||||
random: ["NONRAN", "RANDOM", "R-RANDOM", "S-RANDOM", "MIRROR"],
|
||||
assist: ["NO ASSIST", "AUTO SCRATCH", "LEGACY NOTE", "ASCR + LEGACY"],
|
||||
range: ["NONE", "SUDDEN+", "HIDDEN+", "SUD+ HID+", "LIFT", "LIFT SUD+"],
|
||||
gauge: ["ASSISTED EASY", "EASY", "HARD", "EX HARD"],
|
||||
pacemaker: [
|
||||
"NO GRAPH",
|
||||
"MY BEST",
|
||||
@@ -1439,7 +1431,7 @@ function AbsoluteScoreGradeDelta(game, score, percent, absDelta) {
|
||||
if (game === "iidx" || game === "bms") {
|
||||
let reversedNC = Math.floor((score / percent) * 100) / 2;
|
||||
chart = {
|
||||
notedata: {
|
||||
data: {
|
||||
notecount: reversedNC,
|
||||
},
|
||||
};
|
||||
@@ -1467,12 +1459,10 @@ exports.AbsoluteScoreGradeDelta = AbsoluteScoreGradeDelta;
|
||||
function CalculateScore(game, percent, chart) {
|
||||
let score = percent;
|
||||
if (game === "iidx" || game === "bms") {
|
||||
score = chart.notedata.notecount * 2 * (percent / 100);
|
||||
score =
|
||||
chart.data.notecount * 2 * (percent / 100);
|
||||
}
|
||||
else if (game === "ddr") {
|
||||
score = 1000000 * (percent / 100);
|
||||
}
|
||||
else if (game === "museca" || game === "jubeat") {
|
||||
else if (game === "ddr" || game === "museca" || game === "jubeat" || game === "chunithm") {
|
||||
score = 1000000 * (percent / 100);
|
||||
}
|
||||
else if (game === "popn") {
|
||||
@@ -1481,9 +1471,6 @@ function CalculateScore(game, percent, chart) {
|
||||
else if (game === "sdvx" || game === "usc") {
|
||||
score = 10000000 * (percent / 100);
|
||||
}
|
||||
else if (game === "chunithm") {
|
||||
score = 1000000 * (percent / 100);
|
||||
}
|
||||
if (score) {
|
||||
return score;
|
||||
}
|
||||
@@ -1493,7 +1480,7 @@ exports.CalculateScore = CalculateScore;
|
||||
function PercentToScore(percent, game, chartData) {
|
||||
let eScore = 0;
|
||||
if (game === "iidx" || game === "bms") {
|
||||
eScore = percent * chartData.notedata.notecount * 2;
|
||||
eScore = percent * chartData.data.notecount * 2;
|
||||
}
|
||||
else if (game === "museca" || game === "jubeat") {
|
||||
eScore = percent * 1000000;
|
||||
|
||||
File diff suppressed because one or more lines are too long
Vendored
+72
-18
@@ -463,22 +463,78 @@ export interface IIDXEamusementScoreDocument extends MongoDBDocument {
|
||||
score: integer;
|
||||
ranking: integer;
|
||||
}
|
||||
interface ChartDocumentFlags {
|
||||
"iidx:SP": "IN BASE GAME" | "OMNIMIX" | "N-1";
|
||||
"iidx:DP": "IN BASE GAME" | "OMNIMIX" | "N-1";
|
||||
"popn:9B": "IN BASE GAME";
|
||||
"sdvx:Single": "IN BASE GAME" | "OMNIMIX" | "N-1";
|
||||
"usc:Single": "CUSTOM";
|
||||
"ddr:SP": "IN BASE GAME" | "N-1";
|
||||
"ddr:DP": "IN BASE GAME" | "N-1";
|
||||
"maimai:Single": "IN BASE GAME";
|
||||
"jubeat:Single": "IN BASE GAME";
|
||||
"museca:Single": "OMNIMIX";
|
||||
"bms:7K": never;
|
||||
"bms:14K": never;
|
||||
"bms:5K": never;
|
||||
"chunithm:Single": "IN BASE GAME" | "OMNIMIX";
|
||||
"gitadora:Gita": "IN BASE GAME" | "OMNIMIX";
|
||||
"gitadora:Dora": "IN BASE GAME" | "OMNIMIX";
|
||||
}
|
||||
interface CDDataIIDXSP {
|
||||
notecount: integer;
|
||||
inGameID: string;
|
||||
inGameINTID: integer;
|
||||
}
|
||||
interface CDDataDDRSP {
|
||||
songHash: string;
|
||||
inGameID: string;
|
||||
}
|
||||
interface ChartDocumentData {
|
||||
"iidx:SP": CDDataIIDXSP;
|
||||
"iidx:DP": CDDataIIDXSP;
|
||||
"popn:9B": Record<string, never>;
|
||||
"sdvx:Single": {
|
||||
inGameID: string;
|
||||
inGameINTID: integer;
|
||||
};
|
||||
"usc:Single": {
|
||||
hashSHA256: string;
|
||||
};
|
||||
"ddr:SP": CDDataDDRSP;
|
||||
"ddr:DP": CDDataDDRSP;
|
||||
"maimai:Single": {
|
||||
maxPercent: number;
|
||||
inGameID: string;
|
||||
};
|
||||
"jubeat:Single": Record<string, never>;
|
||||
"museca:Single": "OMNIMIX";
|
||||
"bms:7K": Record<string, never>;
|
||||
"bms:14K": Record<string, never>;
|
||||
"bms:5K": Record<string, never>;
|
||||
"chunithm:Single": {
|
||||
inGameINTID: integer;
|
||||
};
|
||||
"gitadora:Gita": {
|
||||
inGameID: string;
|
||||
inGameINTID: integer;
|
||||
};
|
||||
"gitadora:Dora": {
|
||||
inGameID: string;
|
||||
inGameINTID: integer;
|
||||
};
|
||||
}
|
||||
export interface ChartDocument<G extends Game = Game, P extends Playtypes[G] = Playtypes[G], I extends IDStrings = IDStrings> extends MongoDBDocument {
|
||||
chartID: string;
|
||||
id: integer;
|
||||
songID: integer;
|
||||
level: string;
|
||||
levelNum: number;
|
||||
difficulty: Difficulties[I];
|
||||
playtype: P;
|
||||
length: string | number | null;
|
||||
bpmMin: number;
|
||||
bpmMax: number;
|
||||
flags: Record<string, boolean>;
|
||||
internals: Record<string, unknown>;
|
||||
notedata: {
|
||||
notecount: integer;
|
||||
objects: Record<string, integer>;
|
||||
};
|
||||
length: string | null;
|
||||
bpmString: string | null;
|
||||
flags: Record<ChartDocumentFlags[I], boolean>;
|
||||
data: ChartDocumentData[I];
|
||||
}
|
||||
export interface TierlistDocument extends MongoDBDocument {
|
||||
game: Game;
|
||||
@@ -572,16 +628,16 @@ export interface UserMilestoneDocument extends MongoDBDocument {
|
||||
}
|
||||
declare type RanOptions = "NONRAN" | "RANDOM" | "R-RANDOM" | "S-RANDOM" | "MIRROR";
|
||||
interface IIDXSPScoreMeta {
|
||||
optionsRandom: RanOptions;
|
||||
optionsAssist: "AUTO SCRATCH" | "5KEYS" | "LEGACY NOTE" | "ASCR + 5KEY" | "ASCR + LEGACY" | "5KEYS + LEGACY" | "FULL ASSIST";
|
||||
optionsRange: "SUDDEN+" | "HIDDEN+" | "SUD+ HID+" | "LIFT" | "LIFT SUD+";
|
||||
optionsGauge: "ASSISTED EASY" | "EASY" | "HARD" | "EX-HARD";
|
||||
random: RanOptions;
|
||||
assist: "AUTO SCRATCH" | "5KEYS" | "LEGACY NOTE" | "ASCR + 5KEY" | "ASCR + LEGACY" | "5KEYS + LEGACY" | "FULL ASSIST";
|
||||
range: "SUDDEN+" | "HIDDEN+" | "SUD+ HID+" | "LIFT" | "LIFT SUD+";
|
||||
gauge: "ASSISTED EASY" | "EASY" | "HARD" | "EX-HARD";
|
||||
pacemaker: "NO GRAPH" | "MY BEST" | "RIVAL 1" | "RIVAL 2" | "RIVAL 3" | "RIVAL 4" | "RIVAL 5" | "RIVAL NEXT" | "RIVAL BEST" | "RIVAL AVERAGE" | "NATIONAL BEST" | "NATIONAL AVERAGE" | "PREFECTURE BEST" | "PREFECTURE AVERAGE" | "CLASS BEST" | "CLASS AVERAGE" | "VENUE BEST" | "VENUE NEXT" | "PREVIOUS GHOST" | "PACEMAKER AAA" | "PACEMAKER AA" | "PACEMAKER A" | "PACEMAKER" | /* ??? */ "PACEMAKER NEXT" | "PACEMAKER NEXT+" | "PLAYER 1" | "PLAYER 2";
|
||||
pacemakerName: string;
|
||||
pacemakerTarget: integer;
|
||||
}
|
||||
interface BMS7KScoreMeta {
|
||||
optionsRandom: RanOptions;
|
||||
random: RanOptions;
|
||||
inputDevice: string;
|
||||
}
|
||||
interface ScoreMetaLookup {
|
||||
@@ -591,9 +647,7 @@ interface ScoreMetaLookup {
|
||||
};
|
||||
"popn:9B": Record<string, never>;
|
||||
"sdvx:Single": Record<string, never>;
|
||||
"usc:Single": BASE_VALID_HIT_META & {
|
||||
gauge: number;
|
||||
};
|
||||
"usc:Single": Record<string, never>;
|
||||
"ddr:SP": Record<string, never>;
|
||||
"ddr:DP": Record<string, never>;
|
||||
"maimai:Single": Record<string, never>;
|
||||
|
||||
+12
-23
@@ -172,18 +172,10 @@ export const validHitMeta: Record<Game, string[]> = {
|
||||
|
||||
export const validScoreMeta: Record<Game, Record<string, unknown>> = {
|
||||
iidx: {
|
||||
optionsRandom: ["NONRAN", "RANDOM", "R-RANDOM", "S-RANDOM", "MIRROR"],
|
||||
optionsAssist: [
|
||||
"AUTO SCRATCH",
|
||||
"5KEYS",
|
||||
"LEGACY NOTE",
|
||||
"ASCR + 5KEY",
|
||||
"ASCR + LEGACY",
|
||||
"5KEYS + LEGACY",
|
||||
"FULL ASSIST",
|
||||
],
|
||||
optionsRange: ["SUDDEN+", "HIDDEN+", "SUD+ HID+", "LIFT", "LIFT SUD+"],
|
||||
optionsGauge: ["ASSISTED EASY", "EASY", "HARD", "EX-HARD"],
|
||||
random: ["NONRAN", "RANDOM", "R-RANDOM", "S-RANDOM", "MIRROR"],
|
||||
assist: ["NO ASSIST", "AUTO SCRATCH", "LEGACY NOTE", "ASCR + LEGACY"],
|
||||
range: ["NONE", "SUDDEN+", "HIDDEN+", "SUD+ HID+", "LIFT", "LIFT SUD+"],
|
||||
gauge: ["ASSISTED EASY", "EASY", "HARD", "EX HARD"],
|
||||
pacemaker: [
|
||||
"NO GRAPH",
|
||||
"MY BEST",
|
||||
@@ -1526,7 +1518,7 @@ export function AbsoluteScoreGradeDelta(
|
||||
if (game === "iidx" || game === "bms") {
|
||||
let reversedNC = Math.floor((score / percent) * 100) / 2;
|
||||
chart = {
|
||||
notedata: {
|
||||
data: {
|
||||
notecount: reversedNC,
|
||||
},
|
||||
};
|
||||
@@ -1554,17 +1546,14 @@ export function CalculateScore(game: Game, percent: number, chart: ChartDocument
|
||||
let score = percent;
|
||||
|
||||
if (game === "iidx" || game === "bms") {
|
||||
score = chart.notedata.notecount * 2 * (percent / 100);
|
||||
} else if (game === "ddr") {
|
||||
score = 1000000 * (percent / 100);
|
||||
} else if (game === "museca" || game === "jubeat") {
|
||||
score = 1000000 * (percent / 100);
|
||||
score =
|
||||
(chart as ChartDocument<"iidx", "SP", "iidx:SP">).data.notecount * 2 * (percent / 100);
|
||||
} else if (game === "ddr" || game === "museca" || game === "jubeat" || game === "chunithm") {
|
||||
score = 1_000_000 * (percent / 100);
|
||||
} else if (game === "popn") {
|
||||
score = 100000 * (percent / 100);
|
||||
score = 100_000 * (percent / 100);
|
||||
} else if (game === "sdvx" || game === "usc") {
|
||||
score = 10000000 * (percent / 100);
|
||||
} else if (game === "chunithm") {
|
||||
score = 1000000 * (percent / 100);
|
||||
score = 10_000_000 * (percent / 100);
|
||||
}
|
||||
|
||||
if (score) {
|
||||
@@ -1577,7 +1566,7 @@ export function PercentToScore(percent: number, game: Game, chartData: ChartDocu
|
||||
let eScore = 0;
|
||||
|
||||
if (game === "iidx" || game === "bms") {
|
||||
eScore = percent * chartData.notedata.notecount * 2;
|
||||
eScore = percent * (chartData as ChartDocument<"iidx", "SP", "iidx:SP">).data.notecount * 2;
|
||||
} else if (game === "museca" || game === "jubeat") {
|
||||
eScore = percent * 1000000;
|
||||
} else if (game === "popn") {
|
||||
|
||||
+60
-16
@@ -654,26 +654,70 @@ export interface IIDXEamusementScoreDocument extends MongoDBDocument {
|
||||
ranking: integer;
|
||||
}
|
||||
|
||||
interface ChartDocumentFlags {
|
||||
"iidx:SP": "IN BASE GAME" | "OMNIMIX" | "N-1";
|
||||
"iidx:DP": "IN BASE GAME" | "OMNIMIX" | "N-1";
|
||||
"popn:9B": "IN BASE GAME";
|
||||
"sdvx:Single": "IN BASE GAME" | "OMNIMIX" | "N-1";
|
||||
"usc:Single": "CUSTOM";
|
||||
"ddr:SP": "IN BASE GAME" | "N-1";
|
||||
"ddr:DP": "IN BASE GAME" | "N-1";
|
||||
"maimai:Single": "IN BASE GAME";
|
||||
"jubeat:Single": "IN BASE GAME";
|
||||
"museca:Single": "OMNIMIX";
|
||||
"bms:7K": never;
|
||||
"bms:14K": never;
|
||||
"bms:5K": never;
|
||||
"chunithm:Single": "IN BASE GAME" | "OMNIMIX";
|
||||
"gitadora:Gita": "IN BASE GAME" | "OMNIMIX";
|
||||
"gitadora:Dora": "IN BASE GAME" | "OMNIMIX";
|
||||
}
|
||||
|
||||
interface CDDataIIDXSP {
|
||||
notecount: integer;
|
||||
inGameID: string;
|
||||
inGameINTID: integer;
|
||||
}
|
||||
|
||||
interface CDDataDDRSP {
|
||||
songHash: string;
|
||||
inGameID: string;
|
||||
}
|
||||
|
||||
interface ChartDocumentData {
|
||||
"iidx:SP": CDDataIIDXSP;
|
||||
"iidx:DP": CDDataIIDXSP;
|
||||
"popn:9B": Record<string, never>;
|
||||
"sdvx:Single": { inGameID: string; inGameINTID: integer };
|
||||
"usc:Single": { hashSHA256: string };
|
||||
"ddr:SP": CDDataDDRSP;
|
||||
"ddr:DP": CDDataDDRSP;
|
||||
"maimai:Single": { maxPercent: number; inGameID: string };
|
||||
"jubeat:Single": Record<string, never>;
|
||||
"museca:Single": "OMNIMIX";
|
||||
"bms:7K": Record<string, never>;
|
||||
"bms:14K": Record<string, never>;
|
||||
"bms:5K": Record<string, never>;
|
||||
"chunithm:Single": { inGameINTID: integer };
|
||||
"gitadora:Gita": { inGameID: string; inGameINTID: integer };
|
||||
"gitadora:Dora": { inGameID: string; inGameINTID: integer };
|
||||
}
|
||||
|
||||
export interface ChartDocument<
|
||||
G extends Game = Game,
|
||||
P extends Playtypes[G] = Playtypes[G],
|
||||
I extends IDStrings = IDStrings
|
||||
> extends MongoDBDocument {
|
||||
chartID: string;
|
||||
id: integer;
|
||||
songID: integer;
|
||||
level: string;
|
||||
levelNum: number;
|
||||
difficulty: Difficulties[I];
|
||||
playtype: P;
|
||||
length: string | number | null;
|
||||
bpmMin: number;
|
||||
bpmMax: number;
|
||||
flags: Record<string, boolean>;
|
||||
internals: Record<string, unknown>;
|
||||
notedata: {
|
||||
notecount: integer;
|
||||
objects: Record<string, integer>;
|
||||
};
|
||||
length: string | null;
|
||||
bpmString: string | null;
|
||||
flags: Record<ChartDocumentFlags[I], boolean>;
|
||||
data: ChartDocumentData[I];
|
||||
}
|
||||
|
||||
export interface TierlistDocument extends MongoDBDocument {
|
||||
@@ -780,8 +824,8 @@ export interface UserMilestoneDocument extends MongoDBDocument {
|
||||
type RanOptions = "NONRAN" | "RANDOM" | "R-RANDOM" | "S-RANDOM" | "MIRROR";
|
||||
|
||||
interface IIDXSPScoreMeta {
|
||||
optionsRandom: RanOptions;
|
||||
optionsAssist:
|
||||
random: RanOptions;
|
||||
assist:
|
||||
| "AUTO SCRATCH"
|
||||
| "5KEYS"
|
||||
| "LEGACY NOTE"
|
||||
@@ -789,8 +833,8 @@ interface IIDXSPScoreMeta {
|
||||
| "ASCR + LEGACY"
|
||||
| "5KEYS + LEGACY"
|
||||
| "FULL ASSIST";
|
||||
optionsRange: "SUDDEN+" | "HIDDEN+" | "SUD+ HID+" | "LIFT" | "LIFT SUD+";
|
||||
optionsGauge: "ASSISTED EASY" | "EASY" | "HARD" | "EX-HARD";
|
||||
range: "SUDDEN+" | "HIDDEN+" | "SUD+ HID+" | "LIFT" | "LIFT SUD+";
|
||||
gauge: "ASSISTED EASY" | "EASY" | "HARD" | "EX-HARD";
|
||||
// oh my
|
||||
pacemaker:
|
||||
| "NO GRAPH"
|
||||
@@ -825,7 +869,7 @@ interface IIDXSPScoreMeta {
|
||||
}
|
||||
|
||||
interface BMS7KScoreMeta {
|
||||
optionsRandom: RanOptions;
|
||||
random: RanOptions;
|
||||
inputDevice: string;
|
||||
}
|
||||
|
||||
@@ -834,7 +878,7 @@ interface ScoreMetaLookup {
|
||||
"iidx:DP": IIDXSPScoreMeta & { optionsRandom: [RanOptions, RanOptions] };
|
||||
"popn:9B": Record<string, never>;
|
||||
"sdvx:Single": Record<string, never>;
|
||||
"usc:Single": BASE_VALID_HIT_META & { gauge: number };
|
||||
"usc:Single": Record<string, never>;
|
||||
"ddr:SP": Record<string, never>;
|
||||
"ddr:DP": Record<string, never>;
|
||||
"maimai:Single": Record<string, never>;
|
||||
|
||||
Reference in New Issue
Block a user