Booth support
This commit is contained in:
@@ -4,5 +4,6 @@ Plugin Version: **v1.1**
|
|||||||
|
|
||||||
Supported Versions:
|
Supported Versions:
|
||||||
|
|
||||||
|
- BOOTH
|
||||||
- HEAVENLY HAVEN
|
- HEAVENLY HAVEN
|
||||||
- VIVID WAVE
|
- VIVID WAVE
|
||||||
|
|||||||
@@ -6,6 +6,12 @@ export const common: EPR = async (info, data, send) => {
|
|||||||
let courses = [];
|
let courses = [];
|
||||||
let extend = [];
|
let extend = [];
|
||||||
|
|
||||||
|
const version = parseInt(info.model.split(":")[4]);
|
||||||
|
|
||||||
|
if (version <= 2013052900) {
|
||||||
|
return send.pugFile('templates/booth/common.pug');
|
||||||
|
}
|
||||||
|
|
||||||
switch (info.method) {
|
switch (info.method) {
|
||||||
case 'sv4_common': {
|
case 'sv4_common': {
|
||||||
events = EVENT4;
|
events = EVENT4;
|
||||||
|
|||||||
@@ -1,17 +1,46 @@
|
|||||||
import { Profile } from '../models/profile';
|
import {Profile} from '../models/profile';
|
||||||
import { MusicRecord } from '../models/music_record';
|
import {MusicRecord} from '../models/music_record';
|
||||||
import { IDToCode, GetCounter } from '../utils';
|
import {getVersion, IDToCode, GetCounter} from '../utils';
|
||||||
import { Mix } from '../models/mix';
|
import {Mix} from '../models/mix';
|
||||||
|
|
||||||
export const hiscore: EPR = async (info, data, send) => {
|
export const hiscore: EPR = async (info, data, send) => {
|
||||||
const records = await DB.Find<MusicRecord>(null, { collection: 'music' });
|
const records = await DB.Find<MusicRecord>(null, { collection: 'music' });
|
||||||
|
|
||||||
|
const version = getVersion(info);
|
||||||
|
|
||||||
const profiles = _.groupBy(
|
const profiles = _.groupBy(
|
||||||
await DB.Find<Profile>(null, { collection: 'profile' }),
|
await DB.Find<Profile>(null, { collection: 'profile' }),
|
||||||
'__refid'
|
'__refid'
|
||||||
);
|
);
|
||||||
|
|
||||||
send.object({
|
if (version === 1) {
|
||||||
|
return send.object({
|
||||||
|
hiscore: K.ATTR({ type: "1" }, {
|
||||||
|
music: _.map(
|
||||||
|
_.groupBy(records, r => {
|
||||||
|
return `${r.mid}:${r.type}`;
|
||||||
|
}),
|
||||||
|
r => _.maxBy(r, 'score')
|
||||||
|
).map(r => (K.ATTR({ id: String(r.mid) }, {
|
||||||
|
note: (() => {
|
||||||
|
const notes = [];
|
||||||
|
|
||||||
|
for (let i = 1; i <= 3; i++) {
|
||||||
|
if (r.type !== i) continue;
|
||||||
|
notes.push(K.ATTR({ type: String(r.type) }, {
|
||||||
|
name: K.ITEM('str', profiles[r.__refid][0].name),
|
||||||
|
score: K.ITEM('u32', r.score)
|
||||||
|
}))
|
||||||
|
}
|
||||||
|
|
||||||
|
return notes;
|
||||||
|
})()
|
||||||
|
}))),
|
||||||
|
})
|
||||||
|
})
|
||||||
|
}
|
||||||
|
|
||||||
|
return send.object({
|
||||||
sc: {
|
sc: {
|
||||||
d: _.map(
|
d: _.map(
|
||||||
_.groupBy(records, r => {
|
_.groupBy(records, r => {
|
||||||
@@ -40,7 +69,7 @@ export const rival: EPR = async (info, data, send) => {
|
|||||||
await DB.Find<Profile>(null, { collection: 'profile' })
|
await DB.Find<Profile>(null, { collection: 'profile' })
|
||||||
).filter(p => p.__refid != refid);
|
).filter(p => p.__refid != refid);
|
||||||
|
|
||||||
send.object({
|
return send.object({
|
||||||
rival: await Promise.all(
|
rival: await Promise.all(
|
||||||
rivals.map(async (p, index) => {
|
rivals.map(async (p, index) => {
|
||||||
return {
|
return {
|
||||||
@@ -84,7 +113,7 @@ export const saveMix: EPR = async (info, data, send) => {
|
|||||||
jacket: mix.number('jacket_id'),
|
jacket: mix.number('jacket_id'),
|
||||||
});
|
});
|
||||||
|
|
||||||
send.object({
|
return send.object({
|
||||||
automation: {
|
automation: {
|
||||||
mix_id: K.ITEM('s32', id),
|
mix_id: K.ITEM('s32', id),
|
||||||
mix_code: K.ITEM('str', doc.code),
|
mix_code: K.ITEM('str', doc.code),
|
||||||
@@ -105,11 +134,10 @@ export const loadMix: EPR = async (info, data, send) => {
|
|||||||
|
|
||||||
const mix = await DB.FindOne<Mix>({ collection: 'mix', code });
|
const mix = await DB.FindOne<Mix>({ collection: 'mix', code });
|
||||||
if (!mix) {
|
if (!mix) {
|
||||||
send.object({ result: K.ITEM('s32', 1) });
|
return send.object({ result: K.ITEM('s32', 1) });
|
||||||
return;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
send.object({
|
return send.object({
|
||||||
automation: {
|
automation: {
|
||||||
mix_id: K.ITEM('s32', mix.id),
|
mix_id: K.ITEM('s32', mix.id),
|
||||||
mix_code: K.ITEM('str', mix.code),
|
mix_code: K.ITEM('str', mix.code),
|
||||||
|
|||||||
@@ -1,18 +1,12 @@
|
|||||||
import { Skill } from '../models/skill';
|
import {Skill} from '../models/skill';
|
||||||
import { SDVX_AUTOMATION_SONGS } from '../data/vvw';
|
import {SDVX_AUTOMATION_SONGS} from '../data/vvw';
|
||||||
import { Item } from '../models/item';
|
import {Item} from '../models/item';
|
||||||
import { Param } from '../models/param';
|
import {Param} from '../models/param';
|
||||||
import { MusicRecord } from '../models/music_record';
|
import {MusicRecord} from '../models/music_record';
|
||||||
import { CourseRecord } from '../models/course_record';
|
import {CourseRecord} from '../models/course_record';
|
||||||
import { Profile } from '../models/profile';
|
import {Profile} from '../models/profile';
|
||||||
import { IDToCode } from '../utils';
|
import {getVersion, IDToCode} from '../utils';
|
||||||
import { Mix } from '../models/mix';
|
import {Mix} from '../models/mix';
|
||||||
|
|
||||||
function getVersion(info: EamuseInfo) {
|
|
||||||
if (info.method.startsWith('sv4')) return 4;
|
|
||||||
if (info.method.startsWith('sv5')) return 5;
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
async function getAutomationMixes(params: Param[]) {
|
async function getAutomationMixes(params: Param[]) {
|
||||||
const mixids = params
|
const mixids = params
|
||||||
@@ -30,12 +24,37 @@ function unlockNavigators(items: Partial<Item>[]) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
export const loadScore: EPR = async (info, data, send) => {
|
export const loadScore: EPR = async (info, data, send) => {
|
||||||
const refid = $(data).str('refid');
|
const refid = $(data).str('refid', $(data).attr().dataid);
|
||||||
if (!refid) return send.deny();
|
if (!refid) return send.deny();
|
||||||
|
|
||||||
const records = await DB.Find<MusicRecord>(refid, { collection: 'music' });
|
const records = await DB.Find<MusicRecord>(refid, { collection: 'music' });
|
||||||
|
|
||||||
send.object({
|
const version = getVersion(info);
|
||||||
|
|
||||||
|
if (version === 1) {
|
||||||
|
return send.object({
|
||||||
|
music: records.map(r => (K.ATTR({ music_id: String(r.mid) }, {
|
||||||
|
type: (() => {
|
||||||
|
const records = [];
|
||||||
|
|
||||||
|
for (let i = 1; i <= 3; i++) {
|
||||||
|
if (r.type != i) continue;
|
||||||
|
records.push(K.ATTR({
|
||||||
|
type_id: String(i),
|
||||||
|
score: String(r.score),
|
||||||
|
clear_type: String(r.clear),
|
||||||
|
score_grade: String(r.grade),
|
||||||
|
cnt: "0"
|
||||||
|
}));
|
||||||
|
}
|
||||||
|
|
||||||
|
return records;
|
||||||
|
})()
|
||||||
|
})))
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
return send.object({
|
||||||
music: {
|
music: {
|
||||||
info: records.map(r => ({
|
info: records.map(r => ({
|
||||||
param: K.ARRAY('u32', [
|
param: K.ARRAY('u32', [
|
||||||
@@ -62,9 +81,57 @@ export const loadScore: EPR = async (info, data, send) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const saveScore: EPR = async (info, data, send) => {
|
export const saveScore: EPR = async (info, data, send) => {
|
||||||
const refid = $(data).str('refid');
|
const refid = $(data).str('refid', $(data).attr().dataid);
|
||||||
if (!refid) return send.deny();
|
if (!refid) return send.deny();
|
||||||
|
|
||||||
|
const version = getVersion(info);
|
||||||
|
|
||||||
|
// Booth - Save score
|
||||||
|
if (version === 1) {
|
||||||
|
try {
|
||||||
|
const mid = parseInt($(data).attr().music_id);
|
||||||
|
const type = parseInt($(data).attr().music_type);
|
||||||
|
|
||||||
|
if (_.isNil(mid) || _.isNil(type)) return send.deny();
|
||||||
|
|
||||||
|
const record = (await DB.FindOne<MusicRecord>(refid, {
|
||||||
|
collection: 'music',
|
||||||
|
mid,
|
||||||
|
type,
|
||||||
|
})) || {
|
||||||
|
collection: 'music',
|
||||||
|
mid,
|
||||||
|
type,
|
||||||
|
score: 0,
|
||||||
|
clear: 0,
|
||||||
|
grade: 0,
|
||||||
|
buttonRate: 0,
|
||||||
|
longRate: 0,
|
||||||
|
volRate: 0,
|
||||||
|
};
|
||||||
|
|
||||||
|
const score = $(data).attr().score ? parseInt($(data).attr().score) : 0;
|
||||||
|
const clear = $(data).attr().clear_type ? parseInt($(data).attr().clear_type) : 0;
|
||||||
|
const grade = $(data).attr().score_grade ? parseInt($(data).attr().score_grade) : 0;
|
||||||
|
if (score > record.score) {
|
||||||
|
record.score = score;
|
||||||
|
}
|
||||||
|
|
||||||
|
record.clear = Math.max(clear, record.clear);
|
||||||
|
record.grade = Math.max(grade, record.grade);
|
||||||
|
|
||||||
|
await DB.Upsert<MusicRecord>(
|
||||||
|
refid,
|
||||||
|
{ collection: 'music', mid, type },
|
||||||
|
record
|
||||||
|
);
|
||||||
|
|
||||||
|
return send.success();
|
||||||
|
} catch {
|
||||||
|
return send.deny();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
const mid = $(data).number('music_id');
|
const mid = $(data).number('music_id');
|
||||||
const type = $(data).number('music_type');
|
const type = $(data).number('music_type');
|
||||||
|
|
||||||
@@ -103,7 +170,7 @@ export const saveScore: EPR = async (info, data, send) => {
|
|||||||
record
|
record
|
||||||
);
|
);
|
||||||
|
|
||||||
send.success();
|
return send.success();
|
||||||
};
|
};
|
||||||
|
|
||||||
export const saveCourse: EPR = async (info, data, send) => {
|
export const saveCourse: EPR = async (info, data, send) => {
|
||||||
@@ -134,16 +201,47 @@ export const saveCourse: EPR = async (info, data, send) => {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
send.success();
|
return send.success();
|
||||||
};
|
};
|
||||||
|
|
||||||
export const save: EPR = async (info, data, send) => {
|
export const save: EPR = async (info, data, send) => {
|
||||||
const refid = $(data).str('refid');
|
const refid = $(data).str('refid', $(data).attr().refid);
|
||||||
if (!refid) return send.deny();
|
if (!refid) return send.deny();
|
||||||
|
|
||||||
const version = getVersion(info);
|
const version = getVersion(info);
|
||||||
if (version == 0) return send.deny();
|
if (version == 0) return send.deny();
|
||||||
|
|
||||||
|
if (version === 1) {
|
||||||
|
try {
|
||||||
|
// Save Profile
|
||||||
|
await DB.Update<Profile>(
|
||||||
|
refid,
|
||||||
|
{ collection: 'profile' },
|
||||||
|
{
|
||||||
|
$set: {
|
||||||
|
headphone: $(data).number('headphone'),
|
||||||
|
hiSpeed: $(data).number('hispeed'),
|
||||||
|
appeal: $(data).number('appeal_id'),
|
||||||
|
boothFrame: [$(data).number('frame0'), $(data).number('frame1'), $(data).number('frame2'), $(data).number('frame3'), $(data).number('frame4')],
|
||||||
|
musicID: parseInt($(data).attr("last").music_id),
|
||||||
|
musicType: parseInt($(data).attr("last").music_type),
|
||||||
|
sortType: parseInt($(data).attr("last").sort_type),
|
||||||
|
mUserCnt: $(data).number('m_user_cnt'),
|
||||||
|
},
|
||||||
|
$inc: {
|
||||||
|
expPoint: $(data).number('gain_exp'),
|
||||||
|
packets: $(data).number('earned_gamecoin_packet'),
|
||||||
|
blocks: $(data).number('earned_gamecoin_block'),
|
||||||
|
},
|
||||||
|
}
|
||||||
|
);
|
||||||
|
|
||||||
|
return send.success();
|
||||||
|
} catch {
|
||||||
|
return send.deny();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
// Save Profile
|
// Save Profile
|
||||||
await DB.Update<Profile>(
|
await DB.Update<Profile>(
|
||||||
refid,
|
refid,
|
||||||
@@ -226,11 +324,11 @@ export const save: EPR = async (info, data, send) => {
|
|||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
send.success();
|
return send.success();
|
||||||
};
|
};
|
||||||
|
|
||||||
export const load: EPR = async (info, data, send) => {
|
export const load: EPR = async (info, data, send) => {
|
||||||
const refid = $(data).str('refid');
|
const refid = $(data).str('refid', $(data).attr().dataid);
|
||||||
if (!refid) return send.deny();
|
if (!refid) return send.deny();
|
||||||
|
|
||||||
const version = getVersion(info);
|
const version = getVersion(info);
|
||||||
@@ -241,8 +339,8 @@ export const load: EPR = async (info, data, send) => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
if (!profile) {
|
if (!profile) {
|
||||||
send.object({ result: K.ITEM('u8', 1) });
|
if (version === 1) return send.object(K.ATTR({ none: "1" }));
|
||||||
return;
|
return send.object({ result: K.ITEM('u8', 1) });
|
||||||
}
|
}
|
||||||
|
|
||||||
let skill = (await DB.FindOne<Skill>(refid, {
|
let skill = (await DB.FindOne<Skill>(refid, {
|
||||||
@@ -263,7 +361,11 @@ export const load: EPR = async (info, data, send) => {
|
|||||||
const currentTime = time.getTime();
|
const currentTime = time.getTime();
|
||||||
const mixes = version == 5 ? await getAutomationMixes(params) : [];
|
const mixes = version == 5 ? await getAutomationMixes(params) : [];
|
||||||
|
|
||||||
send.pugFile('templates/load.pug', {
|
if (version === 1) {
|
||||||
|
return send.pugFile('templates/booth/load.pug', { code: IDToCode(profile.id), ...profile });
|
||||||
|
}
|
||||||
|
|
||||||
|
return send.pugFile('templates/load.pug', {
|
||||||
courses,
|
courses,
|
||||||
items: U.GetConfig('unlock_all_navigators')
|
items: U.GetConfig('unlock_all_navigators')
|
||||||
? unlockNavigators(items)
|
? unlockNavigators(items)
|
||||||
@@ -279,10 +381,10 @@ export const load: EPR = async (info, data, send) => {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export const create: EPR = async (info, data, send) => {
|
export const create: EPR = async (info, data, send) => {
|
||||||
const refid = $(data).str('refid');
|
const refid = $(data).str('refid', $(data).attr().refid);
|
||||||
if (!refid) return send.deny();
|
if (!refid) return send.deny();
|
||||||
|
|
||||||
const name = $(data).str('name', 'GUEST');
|
const name = $(data).str('name', $(data).attr().name ? $(data).attr().name : 'GUEST');
|
||||||
let id = _.random(0, 99999999);
|
let id = _.random(0, 99999999);
|
||||||
while (await DB.FindOne<Profile>(null, { collecttion: 'profile', id })) {
|
while (await DB.FindOne<Profile>(null, { collecttion: 'profile', id })) {
|
||||||
id = _.random(0, 99999999);
|
id = _.random(0, 99999999);
|
||||||
@@ -314,10 +416,13 @@ export const create: EPR = async (info, data, send) => {
|
|||||||
musicID: 0,
|
musicID: 0,
|
||||||
musicType: 0,
|
musicType: 0,
|
||||||
sortType: 0,
|
sortType: 0,
|
||||||
|
expPoint: 0,
|
||||||
|
mUserCnt: 0,
|
||||||
|
boothFrame: [0, 0, 0, 0, 0]
|
||||||
};
|
};
|
||||||
|
|
||||||
await DB.Upsert(refid, { collection: 'profile' }, profile);
|
await DB.Upsert(refid, { collection: 'profile' }, profile);
|
||||||
send.object({ result: K.ITEM('u8', 0) });
|
return send.object({ result: K.ITEM('u8', 0) });
|
||||||
};
|
};
|
||||||
|
|
||||||
export const buy: EPR = async (info, data, send) => {
|
export const buy: EPR = async (info, data, send) => {
|
||||||
@@ -356,11 +461,11 @@ export const buy: EPR = async (info, data, send) => {
|
|||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
send.object({
|
return send.object({
|
||||||
gamecoin_packet: K.ITEM('u32', updated.docs[0].packets),
|
gamecoin_packet: K.ITEM('u32', updated.docs[0].packets),
|
||||||
gamecoin_block: K.ITEM('u32', updated.docs[0].blocks),
|
gamecoin_block: K.ITEM('u32', updated.docs[0].blocks),
|
||||||
});
|
});
|
||||||
} else {
|
} else {
|
||||||
send.success();
|
return send.success();
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
import { common } from './handlers/common';
|
import {common} from './handlers/common';
|
||||||
import { hiscore, rival, saveMix, loadMix } from './handlers/features';
|
import {hiscore, rival, saveMix, loadMix} from './handlers/features';
|
||||||
import {
|
import {
|
||||||
updateProfile,
|
updateProfile,
|
||||||
updateMix,
|
updateMix,
|
||||||
@@ -29,6 +29,7 @@ export function register() {
|
|||||||
|
|
||||||
const MultiRoute = (method: string, handler: EPR | boolean) => {
|
const MultiRoute = (method: string, handler: EPR | boolean) => {
|
||||||
// Helper for register multiple versions.
|
// Helper for register multiple versions.
|
||||||
|
R.Route(`game.${method}`, handler);
|
||||||
R.Route(`game.sv4_${method}`, handler);
|
R.Route(`game.sv4_${method}`, handler);
|
||||||
R.Route(`game.sv5_${method}`, handler);
|
R.Route(`game.sv5_${method}`, handler);
|
||||||
};
|
};
|
||||||
@@ -53,8 +54,12 @@ export function register() {
|
|||||||
MultiRoute('load_ap', loadMix);
|
MultiRoute('load_ap', loadMix);
|
||||||
|
|
||||||
// Lazy
|
// Lazy
|
||||||
MultiRoute('lounge', false);
|
MultiRoute('lounge', (_, __, send) => send.object({
|
||||||
MultiRoute('shop', true);
|
interval: K.ITEM('u32', 30)
|
||||||
|
}));
|
||||||
|
MultiRoute('shop', (_, __, send) => send.object({
|
||||||
|
nxt_time: K.ITEM('u32', 1000 * 5 * 60)
|
||||||
|
}));
|
||||||
MultiRoute('save_e', true);
|
MultiRoute('save_e', true);
|
||||||
MultiRoute('play_e', true);
|
MultiRoute('play_e', true);
|
||||||
MultiRoute('play_s', true);
|
MultiRoute('play_s', true);
|
||||||
|
|||||||
@@ -11,6 +11,9 @@ export interface Profile {
|
|||||||
packets: number;
|
packets: number;
|
||||||
blocks: number;
|
blocks: number;
|
||||||
|
|
||||||
|
expPoint: number;
|
||||||
|
mUserCnt: number;
|
||||||
|
|
||||||
musicID: number;
|
musicID: number;
|
||||||
musicType: number;
|
musicType: number;
|
||||||
sortType: number;
|
sortType: number;
|
||||||
@@ -28,4 +31,6 @@ export interface Profile {
|
|||||||
effCLeft: number;
|
effCLeft: number;
|
||||||
effCRight: number;
|
effCRight: number;
|
||||||
narrowDown: number;
|
narrowDown: number;
|
||||||
|
|
||||||
|
boothFrame: number[];
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -0,0 +1,16 @@
|
|||||||
|
- let music = 0;
|
||||||
|
- let event = 0;
|
||||||
|
- let catalog = 0;
|
||||||
|
|
||||||
|
game
|
||||||
|
limited
|
||||||
|
while music < 200
|
||||||
|
music(id=music++, flag=2)
|
||||||
|
|
||||||
|
event
|
||||||
|
while event < 16
|
||||||
|
info(id=event++)
|
||||||
|
|
||||||
|
catalog
|
||||||
|
while catalog < 256
|
||||||
|
info(id=catalog++, currency=1, price=1)
|
||||||
@@ -0,0 +1,23 @@
|
|||||||
|
game
|
||||||
|
name(__type="str") #{name}
|
||||||
|
code(__type="str") #{code}
|
||||||
|
gamecoin_packet(__type="u32") #{packets}
|
||||||
|
gamecoin_block(__type="u32") #{blocks}
|
||||||
|
exp_point(__type="u32") #{expPoint ? expPoint : 0}
|
||||||
|
m_user_cnt(__type="u32") #{mUserCnt ? mUserCnt : 0}
|
||||||
|
have_item(__type="bool" __count=512) #{Array(512).fill(1).join(" ")}
|
||||||
|
have_note(__type="bool" __count=512) #{Array(512).fill(1).join(" ")}
|
||||||
|
|
||||||
|
last(
|
||||||
|
music_id=musicID,
|
||||||
|
music_type=musicType,
|
||||||
|
sort_type=sortType,
|
||||||
|
headphone=headphone,
|
||||||
|
hispeed=hiSpeed,
|
||||||
|
appeal_id=appeal,
|
||||||
|
frame0=boothFrame ? boothFrame[0] : 0,
|
||||||
|
frame1=boothFrame ? boothFrame[1] : 0,
|
||||||
|
frame2=boothFrame ? boothFrame[2] : 0,
|
||||||
|
frame3=boothFrame ? boothFrame[3] : 0,
|
||||||
|
frame4=boothFrame ? boothFrame[4] : 0,
|
||||||
|
)
|
||||||
+10
-1
@@ -1,4 +1,5 @@
|
|||||||
import { Counter } from './models/counter';
|
import {Counter} from './models/counter';
|
||||||
|
|
||||||
export function IDToCode(id: number) {
|
export function IDToCode(id: number) {
|
||||||
const padded = _.padStart(id.toString(), 8);
|
const padded = _.padStart(id.toString(), 8);
|
||||||
return `${padded.slice(0, 4)}-${padded.slice(4)}`;
|
return `${padded.slice(0, 4)}-${padded.slice(4)}`;
|
||||||
@@ -12,3 +13,11 @@ export async function GetCounter(key: string) {
|
|||||||
)
|
)
|
||||||
).docs[0].value;
|
).docs[0].value;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function getVersion(info: EamuseInfo) {
|
||||||
|
const dateCode = parseInt(info.model.split(":")[4]);
|
||||||
|
if (dateCode <= 2013052900) return 1;
|
||||||
|
if (info.method.startsWith('sv4')) return 4;
|
||||||
|
if (info.method.startsWith('sv5')) return 5;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user