maidraw 0.8.8 → 0.9.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/assets/themes/ongeki/jp/brightMemoryLandscape/classic/manifest.json +1 -1
- package/assets/themes/ongeki/jp/brightMemoryLandscape/refresh/manifest.json +1 -1
- package/assets/themes/ongeki/jp/refreshLandscape/classic/manifest.json +1 -1
- package/assets/themes/ongeki/jp/refreshLandscape/refresh/manifest.json +1 -1
- package/dist/chu/bests/best50.js +13 -13
- package/dist/chu/bests/best50.js.map +1 -1
- package/dist/geki/bests/best50.js +45 -14
- package/dist/geki/bests/best50.js.map +1 -1
- package/dist/geki/bests/lib/kamaiTachi/index.js +16 -7
- package/dist/geki/bests/lib/kamaiTachi/index.js.map +1 -1
- package/dist/lib/cache.js +2 -2
- package/dist/lib/util.d.ts +9 -0
- package/dist/lib/util.js +44 -0
- package/dist/lib/util.js.map +1 -1
- package/dist/mai/best50/index.js +11 -11
- package/dist/mai/best50/index.js.map +1 -1
- package/dist/mai/chart/database.d.ts +12 -2
- package/dist/mai/chart/database.js +31 -18
- package/dist/mai/chart/database.js.map +1 -1
- package/dist/mai/chart/index.js +10 -8
- package/dist/mai/chart/index.js.map +1 -1
- package/dist/mai/level50/index.js +9 -9
- package/dist/mai/level50/index.js.map +1 -1
- package/dist/mai/lib/kamaiTachi/index.d.ts +200 -60
- package/dist/mai/lib/kamaiTachi/index.js +425 -167
- package/dist/mai/lib/kamaiTachi/index.js.map +1 -1
- package/package.json +1 -1
|
@@ -3,15 +3,21 @@ var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
|
3
3
|
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
4
4
|
};
|
|
5
5
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
-
exports.KamaiTachi = void 0;
|
|
6
|
+
exports.KamaiTachiBuilder = exports.KamaiTachi = void 0;
|
|
7
7
|
const type_1 = require("../../type");
|
|
8
8
|
const __1 = __importDefault(require(".."));
|
|
9
9
|
const best50_1 = require("../../best50");
|
|
10
|
+
const chart_1 = require("../../chart");
|
|
10
11
|
class KamaiTachi extends __1.default {
|
|
11
|
-
|
|
12
|
-
|
|
12
|
+
currentVersion;
|
|
13
|
+
currentRegion;
|
|
14
|
+
constructor({ baseURL = "https://kamai.tachi.ac/", version = KamaiTachi.GameVersions.PRISM, region = "DX", } = {}) {
|
|
13
15
|
super({ baseURL });
|
|
14
|
-
this.
|
|
16
|
+
this.currentVersion = version;
|
|
17
|
+
this.currentRegion = region;
|
|
18
|
+
}
|
|
19
|
+
versions() {
|
|
20
|
+
return new KamaiTachiBuilder();
|
|
15
21
|
}
|
|
16
22
|
async getPlayerPB(userId) {
|
|
17
23
|
return this.get(`/api/v1/users/${userId}/games/maimaidx/Single/pbs/all`, undefined, 60 * 1000);
|
|
@@ -110,26 +116,64 @@ class KamaiTachi extends __1.default {
|
|
|
110
116
|
})(),
|
|
111
117
|
};
|
|
112
118
|
}
|
|
113
|
-
async getPlayerBest50(userId, {
|
|
114
|
-
function
|
|
119
|
+
async getPlayerBest50(userId, { omnimix = true, use = "ALL", } = {}) {
|
|
120
|
+
function filterAP(score) {
|
|
115
121
|
return (score.pb.scoreData.lamp == "ALL PERFECT" ||
|
|
116
122
|
score.pb.scoreData.lamp == "ALL PERFECT+");
|
|
117
123
|
}
|
|
118
|
-
function
|
|
124
|
+
function filterFC(score) {
|
|
119
125
|
return (score.pb.scoreData.lamp == "FULL COMBO" ||
|
|
120
126
|
score.pb.scoreData.lamp == "FULL COMBO+");
|
|
121
127
|
}
|
|
122
|
-
function
|
|
128
|
+
function filterUseAchievementFilter(score) {
|
|
123
129
|
switch (use) {
|
|
124
130
|
case "AP":
|
|
125
|
-
return
|
|
131
|
+
return filterFC(score);
|
|
126
132
|
case "FC":
|
|
127
|
-
return
|
|
133
|
+
return filterAP(score) || filterFC(score);
|
|
128
134
|
case "ALL":
|
|
129
135
|
default:
|
|
130
136
|
return true;
|
|
131
137
|
}
|
|
132
138
|
}
|
|
139
|
+
const filterIsLocalChartNewVersion = (score) => {
|
|
140
|
+
return (chart_1.Chart.Database.getLocalChart(score.chart.data.inGameID, (() => {
|
|
141
|
+
switch (true) {
|
|
142
|
+
case score.chart.difficulty.includes("RE:MASTER"):
|
|
143
|
+
return type_1.EDifficulty.REMASTER;
|
|
144
|
+
case score.chart.difficulty.includes("MASTER"):
|
|
145
|
+
return type_1.EDifficulty.MASTER;
|
|
146
|
+
case score.chart.difficulty.includes("EXPERT"):
|
|
147
|
+
return type_1.EDifficulty.EXPERT;
|
|
148
|
+
case score.chart.difficulty.includes("ADVANCED"):
|
|
149
|
+
return type_1.EDifficulty.ADVANCED;
|
|
150
|
+
case score.chart.difficulty.includes("BASIC"):
|
|
151
|
+
default:
|
|
152
|
+
return type_1.EDifficulty.BASIC;
|
|
153
|
+
}
|
|
154
|
+
})())?.addVersion[this.currentRegion]?.name ==
|
|
155
|
+
this.currentVersion[this.currentRegion]);
|
|
156
|
+
};
|
|
157
|
+
const filterIsLocalChartOldVersion = (score) => {
|
|
158
|
+
const addVersion = chart_1.Chart.Database.getLocalChart(score.chart.data.inGameID, (() => {
|
|
159
|
+
switch (true) {
|
|
160
|
+
case score.chart.difficulty.includes("RE:MASTER"):
|
|
161
|
+
return type_1.EDifficulty.REMASTER;
|
|
162
|
+
case score.chart.difficulty.includes("MASTER"):
|
|
163
|
+
return type_1.EDifficulty.MASTER;
|
|
164
|
+
case score.chart.difficulty.includes("EXPERT"):
|
|
165
|
+
return type_1.EDifficulty.EXPERT;
|
|
166
|
+
case score.chart.difficulty.includes("ADVANCED"):
|
|
167
|
+
return type_1.EDifficulty.ADVANCED;
|
|
168
|
+
case score.chart.difficulty.includes("BASIC"):
|
|
169
|
+
default:
|
|
170
|
+
return type_1.EDifficulty.BASIC;
|
|
171
|
+
}
|
|
172
|
+
})())?.addVersion[this.currentRegion]?.name;
|
|
173
|
+
if (!addVersion)
|
|
174
|
+
return false;
|
|
175
|
+
return (KamaiTachi.compareGameVersions(this.currentVersion, KamaiTachi.getGameVersion(addVersion)) > 0);
|
|
176
|
+
};
|
|
133
177
|
const rawPBs = await this.getPlayerPB(userId);
|
|
134
178
|
if (!rawPBs?.body)
|
|
135
179
|
return null;
|
|
@@ -141,22 +185,27 @@ class KamaiTachi extends __1.default {
|
|
|
141
185
|
pbs.push({ pb, chart, song });
|
|
142
186
|
}
|
|
143
187
|
}
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
.filter(
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
188
|
+
let newScores = [], oldScores = [];
|
|
189
|
+
if (chart_1.Chart.Database.hasLocalDatabase()) {
|
|
190
|
+
newScores = pbs.filter(filterIsLocalChartNewVersion);
|
|
191
|
+
oldScores = pbs.filter(filterIsLocalChartOldVersion);
|
|
192
|
+
}
|
|
193
|
+
else {
|
|
194
|
+
newScores = pbs.filter((v) => v.chart.data.displayVersion == this.currentVersion.kamai // Assume new scores does not have omnimix charts.
|
|
195
|
+
);
|
|
196
|
+
oldScores = pbs.filter((v) =>
|
|
197
|
+
// Chart exists
|
|
198
|
+
v.chart &&
|
|
199
|
+
// Chart version is older than current Version
|
|
200
|
+
KamaiTachi.compareGameVersions(this.currentVersion, KamaiTachi.getGameVersion(v.chart.data.displayVersion)) > 0 &&
|
|
201
|
+
(omnimix || // Omnimix is enabled, all charts are included.
|
|
202
|
+
!((v.chart.versions[0].includes("-omni") && // Alternatively, if omnimix is disabled, check if the chart is included in omnimix folder of the latest version, (which should always happen).
|
|
203
|
+
v.chart.versions[1].includes("-omni")) // Then check if the second last version is a omnimix folder. If two omnimix folders occur in a row, it is a omnimix chart.
|
|
204
|
+
)) // Reject that case.
|
|
205
|
+
);
|
|
206
|
+
}
|
|
207
|
+
newScores = newScores.filter(filterUseAchievementFilter);
|
|
208
|
+
oldScores = oldScores.filter(filterUseAchievementFilter);
|
|
160
209
|
return {
|
|
161
210
|
new: newScores
|
|
162
211
|
.sort((a, b) => b.pb.calculatedData.rate - a.pb.calculatedData.rate
|
|
@@ -173,7 +222,6 @@ class KamaiTachi extends __1.default {
|
|
|
173
222
|
};
|
|
174
223
|
}
|
|
175
224
|
async getPlayerInfo(userId, options = {
|
|
176
|
-
currentVersion: this.CURRENT_VERSION,
|
|
177
225
|
omnimix: true,
|
|
178
226
|
use: "ALL",
|
|
179
227
|
}) {
|
|
@@ -250,224 +298,428 @@ class KamaiTachi extends __1.default {
|
|
|
250
298
|
: null,
|
|
251
299
|
};
|
|
252
300
|
}
|
|
253
|
-
|
|
301
|
+
async getPlayerLevel50(username, level, page, options = { percise: false }) {
|
|
302
|
+
if (page < 1)
|
|
303
|
+
page = 1;
|
|
304
|
+
const rawPBs = await this.getPlayerPB(username);
|
|
305
|
+
if (!rawPBs?.body)
|
|
306
|
+
return null;
|
|
307
|
+
const pbs = [];
|
|
308
|
+
for (const pb of rawPBs.body.pbs) {
|
|
309
|
+
let chart = rawPBs.body.charts.find((v) => v.chartID == pb.chartID);
|
|
310
|
+
let song = rawPBs.body.songs.find((v) => v.id == pb.songID);
|
|
311
|
+
if (chart && song) {
|
|
312
|
+
pbs.push({ pb, chart, song });
|
|
313
|
+
}
|
|
314
|
+
}
|
|
315
|
+
return pbs
|
|
316
|
+
.map((v) => this.toMaiDrawScore(v.pb, v.chart, v.song))
|
|
317
|
+
.sort((a, b) => b.achievement - a.achievement ||
|
|
318
|
+
b.chart.level - a.chart.level)
|
|
319
|
+
.filter((v) => options.percise
|
|
320
|
+
? v.chart.level == level
|
|
321
|
+
: this.levelBoundChecker(v.chart.level, level, 6))
|
|
322
|
+
.slice((page - 1) * 50, (page - 1) * 50 + 50);
|
|
323
|
+
}
|
|
324
|
+
levelBoundChecker(payload, target, border) {
|
|
325
|
+
let lb = 0, hb = 0;
|
|
326
|
+
if ((target * 10) % 10 < border) {
|
|
327
|
+
lb = Math.trunc(target);
|
|
328
|
+
hb = Math.trunc(target) + (border - 1) * 0.1;
|
|
329
|
+
}
|
|
330
|
+
else {
|
|
331
|
+
lb = Math.trunc(target) + border * 0.1;
|
|
332
|
+
hb = Math.ceil(target) - 0.1;
|
|
333
|
+
}
|
|
334
|
+
return lb <= payload && payload <= hb;
|
|
335
|
+
}
|
|
336
|
+
}
|
|
337
|
+
exports.KamaiTachi = KamaiTachi;
|
|
338
|
+
class KamaiTachiBuilder {
|
|
339
|
+
maimai(region) {
|
|
254
340
|
return new KamaiTachi({
|
|
255
|
-
|
|
341
|
+
version: KamaiTachi.GameVersions.MAIMAI,
|
|
342
|
+
region,
|
|
256
343
|
});
|
|
257
344
|
}
|
|
258
|
-
maimaiPlus() {
|
|
345
|
+
maimaiPlus(region) {
|
|
259
346
|
return new KamaiTachi({
|
|
260
|
-
|
|
347
|
+
version: KamaiTachi.GameVersions.MAIMAI_PLUS,
|
|
348
|
+
region,
|
|
261
349
|
});
|
|
262
350
|
}
|
|
263
|
-
green() {
|
|
351
|
+
green(region) {
|
|
264
352
|
return new KamaiTachi({
|
|
265
|
-
|
|
353
|
+
version: KamaiTachi.GameVersions.GREEN,
|
|
354
|
+
region,
|
|
266
355
|
});
|
|
267
356
|
}
|
|
268
|
-
greenPlus() {
|
|
357
|
+
greenPlus(region) {
|
|
269
358
|
return new KamaiTachi({
|
|
270
|
-
|
|
359
|
+
version: KamaiTachi.GameVersions.GREEN_PLUS,
|
|
360
|
+
region,
|
|
271
361
|
});
|
|
272
362
|
}
|
|
273
|
-
orange() {
|
|
363
|
+
orange(region) {
|
|
274
364
|
return new KamaiTachi({
|
|
275
|
-
|
|
365
|
+
version: KamaiTachi.GameVersions.ORANGE,
|
|
366
|
+
region,
|
|
276
367
|
});
|
|
277
368
|
}
|
|
278
|
-
orangePlus() {
|
|
369
|
+
orangePlus(region) {
|
|
279
370
|
return new KamaiTachi({
|
|
280
|
-
|
|
371
|
+
version: KamaiTachi.GameVersions.ORANGE_PLUS,
|
|
372
|
+
region,
|
|
281
373
|
});
|
|
282
374
|
}
|
|
283
|
-
pink() {
|
|
375
|
+
pink(region) {
|
|
284
376
|
return new KamaiTachi({
|
|
285
|
-
|
|
377
|
+
version: KamaiTachi.GameVersions.PINK,
|
|
378
|
+
region,
|
|
286
379
|
});
|
|
287
380
|
}
|
|
288
|
-
pinkPlus() {
|
|
381
|
+
pinkPlus(region) {
|
|
289
382
|
return new KamaiTachi({
|
|
290
|
-
|
|
383
|
+
version: KamaiTachi.GameVersions.PINK_PLUS,
|
|
384
|
+
region,
|
|
291
385
|
});
|
|
292
386
|
}
|
|
293
|
-
murasaki() {
|
|
387
|
+
murasaki(region) {
|
|
294
388
|
return new KamaiTachi({
|
|
295
|
-
|
|
389
|
+
version: KamaiTachi.GameVersions.MURASAKI,
|
|
390
|
+
region,
|
|
296
391
|
});
|
|
297
392
|
}
|
|
298
|
-
murasakiPlus() {
|
|
393
|
+
murasakiPlus(region) {
|
|
299
394
|
return new KamaiTachi({
|
|
300
|
-
|
|
395
|
+
version: KamaiTachi.GameVersions.MURASAKI_PLUS,
|
|
396
|
+
region,
|
|
301
397
|
});
|
|
302
398
|
}
|
|
303
|
-
milk() {
|
|
399
|
+
milk(region) {
|
|
304
400
|
return new KamaiTachi({
|
|
305
|
-
|
|
401
|
+
version: KamaiTachi.GameVersions.MILK,
|
|
402
|
+
region,
|
|
306
403
|
});
|
|
307
404
|
}
|
|
308
|
-
milkPlus() {
|
|
405
|
+
milkPlus(region) {
|
|
309
406
|
return new KamaiTachi({
|
|
310
|
-
|
|
407
|
+
version: KamaiTachi.GameVersions.MILK_PLUS,
|
|
408
|
+
region,
|
|
311
409
|
});
|
|
312
410
|
}
|
|
313
|
-
finale() {
|
|
411
|
+
finale(region) {
|
|
314
412
|
return new KamaiTachi({
|
|
315
|
-
|
|
413
|
+
version: KamaiTachi.GameVersions.FINALE,
|
|
414
|
+
region,
|
|
316
415
|
});
|
|
317
416
|
}
|
|
318
|
-
dx() {
|
|
417
|
+
dx(region) {
|
|
319
418
|
return new KamaiTachi({
|
|
320
|
-
|
|
419
|
+
version: KamaiTachi.GameVersions.DX,
|
|
420
|
+
region,
|
|
321
421
|
});
|
|
322
422
|
}
|
|
323
|
-
dxPlus() {
|
|
423
|
+
dxPlus(region) {
|
|
324
424
|
return new KamaiTachi({
|
|
325
|
-
|
|
425
|
+
version: KamaiTachi.GameVersions.DX_PLUS,
|
|
426
|
+
region,
|
|
326
427
|
});
|
|
327
428
|
}
|
|
328
|
-
splash() {
|
|
429
|
+
splash(region) {
|
|
329
430
|
return new KamaiTachi({
|
|
330
|
-
|
|
431
|
+
version: KamaiTachi.GameVersions.SPLASH,
|
|
432
|
+
region,
|
|
331
433
|
});
|
|
332
434
|
}
|
|
333
|
-
splashPlus() {
|
|
435
|
+
splashPlus(region) {
|
|
334
436
|
return new KamaiTachi({
|
|
335
|
-
|
|
437
|
+
version: KamaiTachi.GameVersions.SPLASH_PLUS,
|
|
438
|
+
region,
|
|
336
439
|
});
|
|
337
440
|
}
|
|
338
|
-
universe() {
|
|
441
|
+
universe(region) {
|
|
339
442
|
return new KamaiTachi({
|
|
340
|
-
|
|
443
|
+
version: KamaiTachi.GameVersions.UNIVERSE,
|
|
444
|
+
region,
|
|
341
445
|
});
|
|
342
446
|
}
|
|
343
|
-
universePlus() {
|
|
447
|
+
universePlus(region) {
|
|
344
448
|
return new KamaiTachi({
|
|
345
|
-
|
|
449
|
+
version: KamaiTachi.GameVersions.UNIVERSE_PLUS,
|
|
450
|
+
region,
|
|
346
451
|
});
|
|
347
452
|
}
|
|
348
|
-
festival() {
|
|
453
|
+
festival(region) {
|
|
349
454
|
return new KamaiTachi({
|
|
350
|
-
|
|
455
|
+
version: KamaiTachi.GameVersions.FESTIVAL,
|
|
456
|
+
region,
|
|
351
457
|
});
|
|
352
458
|
}
|
|
353
|
-
festivalPlus() {
|
|
459
|
+
festivalPlus(region) {
|
|
354
460
|
return new KamaiTachi({
|
|
355
|
-
|
|
461
|
+
version: KamaiTachi.GameVersions.FESTIVAL_PLUS,
|
|
462
|
+
region,
|
|
356
463
|
});
|
|
357
464
|
}
|
|
358
|
-
buddies() {
|
|
465
|
+
buddies(region) {
|
|
359
466
|
return new KamaiTachi({
|
|
360
|
-
|
|
467
|
+
version: KamaiTachi.GameVersions.BUDDIES,
|
|
468
|
+
region,
|
|
361
469
|
});
|
|
362
470
|
}
|
|
363
|
-
buddiesPlus() {
|
|
471
|
+
buddiesPlus(region) {
|
|
364
472
|
return new KamaiTachi({
|
|
365
|
-
|
|
473
|
+
version: KamaiTachi.GameVersions.BUDDIES_PLUS,
|
|
474
|
+
region,
|
|
366
475
|
});
|
|
367
476
|
}
|
|
368
|
-
prism() {
|
|
477
|
+
prism(region) {
|
|
369
478
|
return new KamaiTachi({
|
|
370
|
-
|
|
479
|
+
version: KamaiTachi.GameVersions.PRISM,
|
|
480
|
+
region,
|
|
371
481
|
});
|
|
372
482
|
}
|
|
373
|
-
prismPlus() {
|
|
483
|
+
prismPlus(region) {
|
|
374
484
|
return new KamaiTachi({
|
|
375
|
-
|
|
485
|
+
version: KamaiTachi.GameVersions.PRISM_PLUS,
|
|
486
|
+
region,
|
|
376
487
|
});
|
|
377
488
|
}
|
|
378
|
-
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
408
|
-
|
|
409
|
-
|
|
410
|
-
|
|
411
|
-
|
|
489
|
+
CN() {
|
|
490
|
+
return {
|
|
491
|
+
DX() {
|
|
492
|
+
return new KamaiTachi({
|
|
493
|
+
version: KamaiTachi.GameVersions.DX,
|
|
494
|
+
region: "CN",
|
|
495
|
+
});
|
|
496
|
+
},
|
|
497
|
+
DX2021() {
|
|
498
|
+
return new KamaiTachi({
|
|
499
|
+
version: KamaiTachi.GameVersions.SPLASH,
|
|
500
|
+
region: "CN",
|
|
501
|
+
});
|
|
502
|
+
},
|
|
503
|
+
DX2022() {
|
|
504
|
+
return new KamaiTachi({
|
|
505
|
+
version: KamaiTachi.GameVersions.UNIVERSE,
|
|
506
|
+
region: "CN",
|
|
507
|
+
});
|
|
508
|
+
},
|
|
509
|
+
DX2023() {
|
|
510
|
+
return new KamaiTachi({
|
|
511
|
+
version: KamaiTachi.GameVersions.FESTIVAL,
|
|
512
|
+
region: "CN",
|
|
513
|
+
});
|
|
514
|
+
},
|
|
515
|
+
DX2024() {
|
|
516
|
+
return new KamaiTachi({
|
|
517
|
+
version: KamaiTachi.GameVersions.BUDDIES,
|
|
518
|
+
region: "CN",
|
|
519
|
+
});
|
|
520
|
+
},
|
|
521
|
+
DX2025() {
|
|
522
|
+
return new KamaiTachi({
|
|
523
|
+
version: KamaiTachi.GameVersions.PRISM,
|
|
524
|
+
region: "CN",
|
|
525
|
+
});
|
|
526
|
+
},
|
|
527
|
+
};
|
|
412
528
|
}
|
|
413
529
|
}
|
|
414
|
-
exports.
|
|
530
|
+
exports.KamaiTachiBuilder = KamaiTachiBuilder;
|
|
415
531
|
(function (KamaiTachi) {
|
|
416
|
-
|
|
417
|
-
|
|
418
|
-
|
|
419
|
-
|
|
420
|
-
|
|
421
|
-
|
|
422
|
-
|
|
423
|
-
|
|
424
|
-
|
|
425
|
-
|
|
426
|
-
|
|
427
|
-
|
|
428
|
-
|
|
429
|
-
|
|
430
|
-
|
|
431
|
-
|
|
432
|
-
|
|
433
|
-
|
|
434
|
-
|
|
435
|
-
|
|
436
|
-
|
|
437
|
-
|
|
438
|
-
|
|
439
|
-
|
|
440
|
-
|
|
441
|
-
|
|
442
|
-
|
|
443
|
-
|
|
444
|
-
|
|
445
|
-
|
|
446
|
-
|
|
447
|
-
|
|
448
|
-
|
|
449
|
-
|
|
450
|
-
|
|
451
|
-
|
|
452
|
-
|
|
453
|
-
|
|
454
|
-
|
|
455
|
-
|
|
456
|
-
|
|
457
|
-
|
|
458
|
-
|
|
459
|
-
|
|
460
|
-
|
|
461
|
-
|
|
462
|
-
|
|
463
|
-
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
468
|
-
|
|
469
|
-
|
|
532
|
+
KamaiTachi.GameVersions = {
|
|
533
|
+
PRISM_PLUS: {
|
|
534
|
+
kamai: "maimaiでらっくす PRiSM PLUS",
|
|
535
|
+
DX: "maimai でらっくす PRiSM PLUS",
|
|
536
|
+
EX: "maimai DX PRiSM PLUS",
|
|
537
|
+
CN: "",
|
|
538
|
+
},
|
|
539
|
+
PRISM: {
|
|
540
|
+
kamai: "maimaiでらっくす PRiSM",
|
|
541
|
+
DX: "maimai でらっくす PRiSM",
|
|
542
|
+
EX: "maimai DX PRiSM",
|
|
543
|
+
CN: "舞萌DX 2025",
|
|
544
|
+
},
|
|
545
|
+
BUDDIES_PLUS: {
|
|
546
|
+
kamai: "maimaiでらっくす BUDDiES PLUS",
|
|
547
|
+
DX: "maimai でらっくす BUDDiES PLUS",
|
|
548
|
+
EX: "maimai DX BUDDiES PLUS",
|
|
549
|
+
CN: "",
|
|
550
|
+
},
|
|
551
|
+
BUDDIES: {
|
|
552
|
+
kamai: "maimaiでらっくす BUDDiES",
|
|
553
|
+
DX: "maimai でらっくす BUDDiES",
|
|
554
|
+
EX: "maimai DX BUDDiES",
|
|
555
|
+
CN: "舞萌DX 2024",
|
|
556
|
+
},
|
|
557
|
+
FESTIVAL_PLUS: {
|
|
558
|
+
kamai: "maimaiでらっくす FESTiVAL PLUS",
|
|
559
|
+
DX: "maimai でらっくす FESTiVAL PLUS",
|
|
560
|
+
EX: "maimai DX FESTiVAL PLUS",
|
|
561
|
+
CN: "",
|
|
562
|
+
},
|
|
563
|
+
FESTIVAL: {
|
|
564
|
+
kamai: "maimaiでらっくす FESTiVAL",
|
|
565
|
+
DX: "maimai でらっくす FESTiVAL",
|
|
566
|
+
EX: "maimai DX FESTiVAL",
|
|
567
|
+
CN: "舞萌DX 2023",
|
|
568
|
+
},
|
|
569
|
+
UNIVERSE_PLUS: {
|
|
570
|
+
kamai: "maimaiでらっくす UNiVERSE PLUS",
|
|
571
|
+
DX: "maimai でらっくす UNiVERSE PLUS",
|
|
572
|
+
EX: "maimai DX UNiVERSE PLUS",
|
|
573
|
+
CN: "",
|
|
574
|
+
},
|
|
575
|
+
UNIVERSE: {
|
|
576
|
+
kamai: "maimaiでらっくす UNiVERSE",
|
|
577
|
+
DX: "maimai でらっくす UNiVERSE",
|
|
578
|
+
EX: "maimai DX UNiVERSE",
|
|
579
|
+
CN: "舞萌DX 2022",
|
|
580
|
+
},
|
|
581
|
+
SPLASH_PLUS: {
|
|
582
|
+
kamai: "maimaiでらっくす Splash PLUS",
|
|
583
|
+
DX: "maimai でらっくす Splash PLUS",
|
|
584
|
+
EX: "maimai DX Splash PLUS",
|
|
585
|
+
CN: "",
|
|
586
|
+
},
|
|
587
|
+
SPLASH: {
|
|
588
|
+
kamai: "maimaiでらっくす Splash",
|
|
589
|
+
DX: "maimai でらっくす Splash",
|
|
590
|
+
EX: "maimai DX Splash",
|
|
591
|
+
CN: "舞萌DX 2021",
|
|
592
|
+
},
|
|
593
|
+
DX_PLUS: {
|
|
594
|
+
kamai: "maimaiでらっくす PLUS",
|
|
595
|
+
DX: "maimai でらっくす PLUS",
|
|
596
|
+
EX: "maimai DX PLUS",
|
|
597
|
+
CN: "",
|
|
598
|
+
},
|
|
599
|
+
DX: {
|
|
600
|
+
kamai: "maimaiでらっくす",
|
|
601
|
+
DX: "maimai でらっくす",
|
|
602
|
+
EX: "maimai DX",
|
|
603
|
+
CN: "舞萌DX",
|
|
604
|
+
},
|
|
605
|
+
FINALE: {
|
|
606
|
+
kamai: "maimai FiNALE",
|
|
607
|
+
DX: "maimai FiNALE",
|
|
608
|
+
EX: "maimai FiNALE",
|
|
609
|
+
CN: "maimai FiNALE",
|
|
610
|
+
},
|
|
611
|
+
MILK_PLUS: {
|
|
612
|
+
kamai: "maimai MiLK PLUS",
|
|
613
|
+
DX: "maimai MiLK PLUS",
|
|
614
|
+
EX: "maimai MiLK PLUS",
|
|
615
|
+
CN: "maimai MiLK PLUS",
|
|
616
|
+
},
|
|
617
|
+
MILK: {
|
|
618
|
+
kamai: "maimai MiLK",
|
|
619
|
+
DX: "maimai MiLK",
|
|
620
|
+
EX: "maimai MiLK",
|
|
621
|
+
CN: "maimai MiLK",
|
|
622
|
+
},
|
|
623
|
+
MURASAKI_PLUS: {
|
|
624
|
+
kamai: "maimai MURASAKi PLUS",
|
|
625
|
+
DX: "maimai MURASAKi PLUS",
|
|
626
|
+
EX: "maimai MURASAKi PLUS",
|
|
627
|
+
CN: "maimai MURASAKi PLUS",
|
|
628
|
+
},
|
|
629
|
+
MURASAKI: {
|
|
630
|
+
kamai: "maimai MURASAKi",
|
|
631
|
+
DX: "maimai MURASAKi",
|
|
632
|
+
EX: "maimai MURASAKi",
|
|
633
|
+
CN: "maimai MURASAKi",
|
|
634
|
+
},
|
|
635
|
+
PINK_PLUS: {
|
|
636
|
+
kamai: "maimai PiNK PLUS",
|
|
637
|
+
DX: "maimai PiNK PLUS",
|
|
638
|
+
EX: "maimai PiNK PLUS",
|
|
639
|
+
CN: "maimai PiNK PLUS",
|
|
640
|
+
},
|
|
641
|
+
PINK: {
|
|
642
|
+
kamai: "maimai PiNK",
|
|
643
|
+
DX: "maimai PiNK",
|
|
644
|
+
EX: "maimai PiNK",
|
|
645
|
+
CN: "maimai PiNK",
|
|
646
|
+
},
|
|
647
|
+
ORANGE_PLUS: {
|
|
648
|
+
kamai: "maimai ORANGE PLUS",
|
|
649
|
+
DX: "maimai ORANGE PLUS",
|
|
650
|
+
EX: "maimai ORANGE PLUS",
|
|
651
|
+
CN: "maimai ORANGE PLUS",
|
|
652
|
+
},
|
|
653
|
+
ORANGE: {
|
|
654
|
+
kamai: "maimai ORANGE",
|
|
655
|
+
DX: "maimai ORANGE",
|
|
656
|
+
EX: "maimai ORANGE",
|
|
657
|
+
CN: "maimai ORANGE",
|
|
658
|
+
},
|
|
659
|
+
GREEN_PLUS: {
|
|
660
|
+
kamai: "maimai GreeN PLUS",
|
|
661
|
+
DX: "maimai GreeN PLUS",
|
|
662
|
+
EX: "maimai GreeN PLUS",
|
|
663
|
+
CN: "maimai GreeN PLUS",
|
|
664
|
+
},
|
|
665
|
+
GREEN: {
|
|
666
|
+
kamai: "maimai GreeN",
|
|
667
|
+
DX: "maimai GreeN",
|
|
668
|
+
EX: "maimai GreeN",
|
|
669
|
+
CN: "maimai GreeN",
|
|
670
|
+
},
|
|
671
|
+
MAIMAI_PLUS: {
|
|
672
|
+
kamai: "maimai PLUS",
|
|
673
|
+
DX: "maimai PLUS",
|
|
674
|
+
EX: "maimai PLUS",
|
|
675
|
+
CN: "maimai PLUS",
|
|
676
|
+
},
|
|
677
|
+
MAIMAI: {
|
|
678
|
+
kamai: "maimai",
|
|
679
|
+
DX: "maimai",
|
|
680
|
+
EX: "maimai",
|
|
681
|
+
CN: "maimai",
|
|
682
|
+
},
|
|
683
|
+
};
|
|
684
|
+
const GameVersionOrder = [
|
|
685
|
+
KamaiTachi.GameVersions.MAIMAI,
|
|
686
|
+
KamaiTachi.GameVersions.MAIMAI_PLUS,
|
|
687
|
+
KamaiTachi.GameVersions.GREEN,
|
|
688
|
+
KamaiTachi.GameVersions.GREEN_PLUS,
|
|
689
|
+
KamaiTachi.GameVersions.ORANGE,
|
|
690
|
+
KamaiTachi.GameVersions.ORANGE_PLUS,
|
|
691
|
+
KamaiTachi.GameVersions.PINK,
|
|
692
|
+
KamaiTachi.GameVersions.PINK_PLUS,
|
|
693
|
+
KamaiTachi.GameVersions.MURASAKI,
|
|
694
|
+
KamaiTachi.GameVersions.MURASAKI_PLUS,
|
|
695
|
+
KamaiTachi.GameVersions.MILK,
|
|
696
|
+
KamaiTachi.GameVersions.MILK_PLUS,
|
|
697
|
+
KamaiTachi.GameVersions.FINALE,
|
|
698
|
+
KamaiTachi.GameVersions.DX,
|
|
699
|
+
KamaiTachi.GameVersions.DX_PLUS,
|
|
700
|
+
KamaiTachi.GameVersions.SPLASH,
|
|
701
|
+
KamaiTachi.GameVersions.SPLASH_PLUS,
|
|
702
|
+
KamaiTachi.GameVersions.UNIVERSE,
|
|
703
|
+
KamaiTachi.GameVersions.UNIVERSE_PLUS,
|
|
704
|
+
KamaiTachi.GameVersions.FESTIVAL,
|
|
705
|
+
KamaiTachi.GameVersions.FESTIVAL_PLUS,
|
|
706
|
+
KamaiTachi.GameVersions.BUDDIES,
|
|
707
|
+
KamaiTachi.GameVersions.BUDDIES_PLUS,
|
|
708
|
+
KamaiTachi.GameVersions.PRISM,
|
|
709
|
+
KamaiTachi.GameVersions.PRISM_PLUS,
|
|
470
710
|
];
|
|
711
|
+
function getGameVersion(payload) {
|
|
712
|
+
for (const version of Object.values(KamaiTachi.GameVersions)) {
|
|
713
|
+
if (version.kamai.toLowerCase() === payload.toLowerCase() ||
|
|
714
|
+
version.DX.toLowerCase() === payload.toLowerCase() ||
|
|
715
|
+
version.EX.toLowerCase() === payload.toLowerCase() ||
|
|
716
|
+
version.CN.toLowerCase() === payload.toLowerCase()) {
|
|
717
|
+
return version;
|
|
718
|
+
}
|
|
719
|
+
}
|
|
720
|
+
return null;
|
|
721
|
+
}
|
|
722
|
+
KamaiTachi.getGameVersion = getGameVersion;
|
|
471
723
|
/**
|
|
472
724
|
* Compare two game versions and calculate which is newer.
|
|
473
725
|
*
|
|
@@ -476,7 +728,13 @@ exports.KamaiTachi = KamaiTachi;
|
|
|
476
728
|
* @returns positive if a is newer, negative if b is newer, 0 if they are the same.
|
|
477
729
|
*/
|
|
478
730
|
function compareGameVersions(a, b) {
|
|
479
|
-
|
|
731
|
+
if (!a && !b)
|
|
732
|
+
return 0;
|
|
733
|
+
if (!a)
|
|
734
|
+
return -1; // b is newer
|
|
735
|
+
if (!b)
|
|
736
|
+
return 1; // a is newer
|
|
737
|
+
return GameVersionOrder.indexOf(a) - GameVersionOrder.indexOf(b);
|
|
480
738
|
}
|
|
481
739
|
KamaiTachi.compareGameVersions = compareGameVersions;
|
|
482
740
|
})(KamaiTachi || (exports.KamaiTachi = KamaiTachi = {}));
|