Add most played songs
This commit is contained in:
@@ -229,6 +229,27 @@ const getProfile = async (refid: string, name?: string) => {
|
|||||||
await utils.writeProfile(refid, profile);
|
await utils.writeProfile(refid, profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let myBest = Array(10).fill(-1);
|
||||||
|
const scores = await utils.readScores(refid, version, true);
|
||||||
|
if(Object.entries(scores.scores).length > 0) {
|
||||||
|
const playCount = new Map();
|
||||||
|
for(const key in scores.scores) {
|
||||||
|
const keyData = key.split(':');
|
||||||
|
const music = parseInt(keyData[0], 10);
|
||||||
|
playCount.set(music, (playCount.get(music) || 0) + scores.scores[key].cnt);
|
||||||
|
}
|
||||||
|
|
||||||
|
const sortedPlayCount = new Map([...playCount.entries()].sort((a, b) => b[1] - a[1]));
|
||||||
|
let i = 0;
|
||||||
|
for (const value of sortedPlayCount.keys()) {
|
||||||
|
if(i >= 10) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
myBest[i] = value;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let player: any = {
|
let player: any = {
|
||||||
result: K.ITEM('s8', 0),
|
result: K.ITEM('s8', 0),
|
||||||
account: {
|
account: {
|
||||||
@@ -247,7 +268,7 @@ const getProfile = async (refid: string, name?: string) => {
|
|||||||
consecutive_days: K.ITEM('s16', 365),
|
consecutive_days: K.ITEM('s16', 365),
|
||||||
total_days: K.ITEM('s16', 366),
|
total_days: K.ITEM('s16', 366),
|
||||||
interval_day: K.ITEM('s16', 1),
|
interval_day: K.ITEM('s16', 1),
|
||||||
my_best: K.ARRAY('s16', Array(10).fill(-1)),
|
my_best: K.ARRAY('s16', myBest),
|
||||||
latest_music: K.ARRAY('s16', [-1, -1, -1, -1, -1]),
|
latest_music: K.ARRAY('s16', [-1, -1, -1, -1, -1]),
|
||||||
active_fr_num: K.ITEM('u8', 0),
|
active_fr_num: K.ITEM('u8', 0),
|
||||||
},
|
},
|
||||||
|
|||||||
@@ -71,6 +71,7 @@ export const getProfile = async (refid: string, name?: string) => {
|
|||||||
let clear_medal_sub = Array(GAME_MAX_MUSIC_ID).fill(0);
|
let clear_medal_sub = Array(GAME_MAX_MUSIC_ID).fill(0);
|
||||||
|
|
||||||
const scoresData = await utils.readScores(refid, version);
|
const scoresData = await utils.readScores(refid, version);
|
||||||
|
const playCount = new Map();
|
||||||
for (const key in scoresData.scores) {
|
for (const key in scoresData.scores) {
|
||||||
const keyData = key.split(':');
|
const keyData = key.split(':');
|
||||||
const score = scoresData.scores[key];
|
const score = scoresData.scores[key];
|
||||||
@@ -106,6 +107,19 @@ export const getProfile = async (refid: string, name?: string) => {
|
|||||||
hiscore_array[hiscore_byte_pos] = hiscore_array[hiscore_byte_pos] | (hiscore_value & 0xFF);
|
hiscore_array[hiscore_byte_pos] = hiscore_array[hiscore_byte_pos] | (hiscore_value & 0xFF);
|
||||||
hiscore_array[hiscore_byte_pos + 1] = hiscore_array[hiscore_byte_pos + 1] | ((hiscore_value >> 8) & 0xFF);
|
hiscore_array[hiscore_byte_pos + 1] = hiscore_array[hiscore_byte_pos + 1] | ((hiscore_value >> 8) & 0xFF);
|
||||||
hiscore_array[hiscore_byte_pos + 2] = hiscore_array[hiscore_byte_pos + 2] | ((hiscore_value >> 16) & 0xFF);
|
hiscore_array[hiscore_byte_pos + 2] = hiscore_array[hiscore_byte_pos + 2] | ((hiscore_value >> 16) & 0xFF);
|
||||||
|
|
||||||
|
playCount.set(music, (playCount.get(music) || 0) + score.cnt);
|
||||||
|
}
|
||||||
|
|
||||||
|
let myBest = Array(20).fill(-1);
|
||||||
|
const sortedPlayCount = new Map([...playCount.entries()].sort((a, b) => b[1] - a[1]));
|
||||||
|
let i = 0;
|
||||||
|
for (const value of sortedPlayCount.keys()) {
|
||||||
|
if (i >= 20) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
myBest[i] = value;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
let player: any = {
|
let player: any = {
|
||||||
@@ -114,16 +128,16 @@ export const getProfile = async (refid: string, name?: string) => {
|
|||||||
g_pm_id: K.ITEM('str', '1234-5678'),
|
g_pm_id: K.ITEM('str', '1234-5678'),
|
||||||
staff: K.ITEM('s8', 0),
|
staff: K.ITEM('s8', 0),
|
||||||
is_conv: K.ITEM('s8', -1),
|
is_conv: K.ITEM('s8', -1),
|
||||||
|
my_best: K.ARRAY('s16', myBest),
|
||||||
|
clear_medal: K.ARRAY('u16', clear_medal),
|
||||||
|
clear_medal_sub: K.ARRAY('u8', clear_medal_sub),
|
||||||
|
|
||||||
// TODO: replace with real data
|
// TODO: replace with real data
|
||||||
total_play_cnt: K.ITEM('s32', 100),
|
total_play_cnt: K.ITEM('s32', 100),
|
||||||
today_play_cnt: K.ITEM('s16', 50),
|
today_play_cnt: K.ITEM('s16', 50),
|
||||||
consecutive_days: K.ITEM('s16', 365),
|
consecutive_days: K.ITEM('s16', 365),
|
||||||
my_best: K.ARRAY('s16', Array(20).fill(-1)),
|
|
||||||
latest_music: K.ARRAY('s16', [-1, -1, -1]),
|
latest_music: K.ARRAY('s16', [-1, -1, -1]),
|
||||||
active_fr_num: K.ITEM('u8', 0),
|
active_fr_num: K.ITEM('u8', 0),
|
||||||
clear_medal: K.ARRAY('u16', clear_medal),
|
|
||||||
clear_medal_sub: K.ARRAY('u8', clear_medal_sub),
|
|
||||||
},
|
},
|
||||||
player_card: {
|
player_card: {
|
||||||
// TODO: replace with real data
|
// TODO: replace with real data
|
||||||
@@ -155,6 +169,8 @@ export const getProfile = async (refid: string, name?: string) => {
|
|||||||
const params = await utils.readParams(refid, version);
|
const params = await utils.readParams(refid, version);
|
||||||
utils.addExtraData(player, params, extraData);
|
utils.addExtraData(player, params, extraData);
|
||||||
|
|
||||||
|
player.player_card.best_music = myBest.slice(0, 3);
|
||||||
|
|
||||||
return player;
|
return player;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -133,7 +133,6 @@ const getProfile = async (refid: string, name?: string) => {
|
|||||||
consecutive_days: K.ITEM('s16', 365),
|
consecutive_days: K.ITEM('s16', 365),
|
||||||
total_days: K.ITEM('s16', 366),
|
total_days: K.ITEM('s16', 366),
|
||||||
interval_day: K.ITEM('s16', 1),
|
interval_day: K.ITEM('s16', 1),
|
||||||
my_best: K.ARRAY('s16', Array(10).fill(-1)),
|
|
||||||
latest_music: K.ARRAY('s16', [-1, -1, -1, -1, -1]),
|
latest_music: K.ARRAY('s16', [-1, -1, -1, -1, -1]),
|
||||||
active_fr_num: K.ITEM('u8', 0),
|
active_fr_num: K.ITEM('u8', 0),
|
||||||
},
|
},
|
||||||
@@ -174,6 +173,7 @@ const getProfile = async (refid: string, name?: string) => {
|
|||||||
|
|
||||||
// Add Score
|
// Add Score
|
||||||
const scoresData = await utils.readScores(refid, version);
|
const scoresData = await utils.readScores(refid, version);
|
||||||
|
const playCount = new Map();
|
||||||
for (const key in scoresData.scores) {
|
for (const key in scoresData.scores) {
|
||||||
const keyData = key.split(':');
|
const keyData = key.split(':');
|
||||||
const score = scoresData.scores[key];
|
const score = scoresData.scores[key];
|
||||||
@@ -208,8 +208,22 @@ const getProfile = async (refid: string, name?: string) => {
|
|||||||
old_score: K.ITEM('s32', 0),
|
old_score: K.ITEM('s32', 0),
|
||||||
old_clear_type: K.ITEM('u8', 0),
|
old_clear_type: K.ITEM('u8', 0),
|
||||||
});
|
});
|
||||||
|
|
||||||
|
playCount.set(music, (playCount.get(music) || 0) + score.cnt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let myBest = Array(10).fill(-1);
|
||||||
|
const sortedPlayCount = new Map([...playCount.entries()].sort((a, b) => b[1] - a[1]));
|
||||||
|
let i = 0;
|
||||||
|
for (const value of sortedPlayCount.keys()) {
|
||||||
|
if (i >= 10) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
myBest[i] = value;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
player.account.my_best = K.ARRAY('s16', myBest);
|
||||||
|
|
||||||
// Add achievements
|
// Add achievements
|
||||||
const achievements = <AchievementsLapistoria>await utils.readAchievements(refid, version, defaultAchievements);
|
const achievements = <AchievementsLapistoria>await utils.readAchievements(refid, version, defaultAchievements);
|
||||||
|
|
||||||
|
|||||||
@@ -67,6 +67,7 @@ export const getProfile = async (refid: string, name?: string) => {
|
|||||||
let clear_medal_sub = Array(GAME_MAX_MUSIC_ID).fill(0);
|
let clear_medal_sub = Array(GAME_MAX_MUSIC_ID).fill(0);
|
||||||
|
|
||||||
const scoresData = await utils.readScores(refid, version);
|
const scoresData = await utils.readScores(refid, version);
|
||||||
|
const playCount = new Map();
|
||||||
for (const key in scoresData.scores) {
|
for (const key in scoresData.scores) {
|
||||||
const keyData = key.split(':');
|
const keyData = key.split(':');
|
||||||
const score = scoresData.scores[key];
|
const score = scoresData.scores[key];
|
||||||
@@ -102,6 +103,19 @@ export const getProfile = async (refid: string, name?: string) => {
|
|||||||
hiscore_array[hiscore_byte_pos] = hiscore_array[hiscore_byte_pos] | (hiscore_value & 0xFF);
|
hiscore_array[hiscore_byte_pos] = hiscore_array[hiscore_byte_pos] | (hiscore_value & 0xFF);
|
||||||
hiscore_array[hiscore_byte_pos + 1] = hiscore_array[hiscore_byte_pos + 1] | ((hiscore_value >> 8) & 0xFF);
|
hiscore_array[hiscore_byte_pos + 1] = hiscore_array[hiscore_byte_pos + 1] | ((hiscore_value >> 8) & 0xFF);
|
||||||
hiscore_array[hiscore_byte_pos + 2] = hiscore_array[hiscore_byte_pos + 2] | ((hiscore_value >> 16) & 0xFF);
|
hiscore_array[hiscore_byte_pos + 2] = hiscore_array[hiscore_byte_pos + 2] | ((hiscore_value >> 16) & 0xFF);
|
||||||
|
|
||||||
|
playCount.set(music, (playCount.get(music) || 0) + score.cnt);
|
||||||
|
}
|
||||||
|
|
||||||
|
let myBest = Array(20).fill(-1);
|
||||||
|
const sortedPlayCount = new Map([...playCount.entries()].sort((a, b) => b[1] - a[1]));
|
||||||
|
let i = 0;
|
||||||
|
for (const value of sortedPlayCount.keys()) {
|
||||||
|
if (i >= 20) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
myBest[i] = value;
|
||||||
|
i++;
|
||||||
}
|
}
|
||||||
|
|
||||||
let player: any = {
|
let player: any = {
|
||||||
@@ -111,16 +125,16 @@ export const getProfile = async (refid: string, name?: string) => {
|
|||||||
staff: K.ITEM('s8', 0),
|
staff: K.ITEM('s8', 0),
|
||||||
is_conv: K.ITEM('s8', -1),
|
is_conv: K.ITEM('s8', -1),
|
||||||
collabo: K.ITEM('u8', 255),
|
collabo: K.ITEM('u8', 255),
|
||||||
|
my_best: K.ARRAY('s16', myBest),
|
||||||
|
clear_medal: K.ARRAY('u16', clear_medal),
|
||||||
|
clear_medal_sub: K.ARRAY('u8', clear_medal_sub),
|
||||||
|
|
||||||
// TODO: replace with real data
|
// TODO: replace with real data
|
||||||
total_play_cnt: K.ITEM('s32', 100),
|
total_play_cnt: K.ITEM('s32', 100),
|
||||||
today_play_cnt: K.ITEM('s16', 50),
|
today_play_cnt: K.ITEM('s16', 50),
|
||||||
consecutive_days: K.ITEM('s16', 365),
|
consecutive_days: K.ITEM('s16', 365),
|
||||||
my_best: K.ARRAY('s16', Array(20).fill(-1)),
|
|
||||||
latest_music: K.ARRAY('s16', [-1, -1, -1]),
|
latest_music: K.ARRAY('s16', [-1, -1, -1]),
|
||||||
active_fr_num: K.ITEM('u8', 0),
|
active_fr_num: K.ITEM('u8', 0),
|
||||||
clear_medal: K.ARRAY('u16', clear_medal),
|
|
||||||
clear_medal_sub: K.ARRAY('u8', clear_medal_sub),
|
|
||||||
},
|
},
|
||||||
netvs: {
|
netvs: {
|
||||||
rank_point: K.ITEM('s32', 0),
|
rank_point: K.ITEM('s32', 0),
|
||||||
|
|||||||
@@ -76,6 +76,7 @@ export const getProfile = async (refid: string, name?: string) => {
|
|||||||
let hiscore_array = Array(Math.floor((((GAME_MAX_MUSIC_ID * 7) * 17) + 7) / 8)).fill(0);
|
let hiscore_array = Array(Math.floor((((GAME_MAX_MUSIC_ID * 7) * 17) + 7) / 8)).fill(0);
|
||||||
|
|
||||||
const scoresData = await utils.readScores(refid, version);
|
const scoresData = await utils.readScores(refid, version);
|
||||||
|
const playCount = new Map();
|
||||||
for (const key in scoresData.scores) {
|
for (const key in scoresData.scores) {
|
||||||
const keyData = key.split(':');
|
const keyData = key.split(':');
|
||||||
const score = scoresData.scores[key];
|
const score = scoresData.scores[key];
|
||||||
@@ -114,6 +115,26 @@ export const getProfile = async (refid: string, name?: string) => {
|
|||||||
hiscore_array[hiscore_byte_pos] = hiscore_array[hiscore_byte_pos] | (hiscore_value & 0xFF);
|
hiscore_array[hiscore_byte_pos] = hiscore_array[hiscore_byte_pos] | (hiscore_value & 0xFF);
|
||||||
hiscore_array[hiscore_byte_pos + 1] = hiscore_array[hiscore_byte_pos + 1] | ((hiscore_value >> 8) & 0xFF);
|
hiscore_array[hiscore_byte_pos + 1] = hiscore_array[hiscore_byte_pos + 1] | ((hiscore_value >> 8) & 0xFF);
|
||||||
hiscore_array[hiscore_byte_pos + 2] = hiscore_array[hiscore_byte_pos + 2] | ((hiscore_value >> 16) & 0xFF);
|
hiscore_array[hiscore_byte_pos + 2] = hiscore_array[hiscore_byte_pos + 2] | ((hiscore_value >> 16) & 0xFF);
|
||||||
|
|
||||||
|
playCount.set(music, (playCount.get(music) || 0) + score.cnt);
|
||||||
|
}
|
||||||
|
|
||||||
|
let myBest = Array(20).fill(-1);
|
||||||
|
const sortedPlayCount = new Map([...playCount.entries()].sort((a, b) => b[1] - a[1]));
|
||||||
|
let i = 0;
|
||||||
|
for (const value of sortedPlayCount.keys()) {
|
||||||
|
if (i >= 20) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
myBest[i] = value;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
|
||||||
|
let profile_pos = 68
|
||||||
|
for (const musicid of myBest) {
|
||||||
|
binary_profile[profile_pos] = musicid & 0xFF
|
||||||
|
binary_profile[profile_pos + 1] = (musicid >> 8) & 0xFF
|
||||||
|
profile_pos = profile_pos + 2
|
||||||
}
|
}
|
||||||
|
|
||||||
const player = {
|
const player = {
|
||||||
@@ -169,7 +190,7 @@ export const write = async (req: EamuseInfo, data: any, send: EamuseSend): Promi
|
|||||||
if (!refid) return send.deny();
|
if (!refid) return send.deny();
|
||||||
|
|
||||||
const params = await utils.readParams(refid, version);
|
const params = await utils.readParams(refid, version);
|
||||||
|
|
||||||
params.params['play_mode'] = parseInt($(data).attr()['play_mode']);
|
params.params['play_mode'] = parseInt($(data).attr()['play_mode']);
|
||||||
params.params['chara'] = parseInt($(data).attr()['chara_num']);
|
params.params['chara'] = parseInt($(data).attr()['chara_num']);
|
||||||
params.params['option'] = parseInt($(data).attr()['option']);
|
params.params['option'] = parseInt($(data).attr()['option']);
|
||||||
@@ -193,7 +214,7 @@ export const write = async (req: EamuseInfo, data: any, send: EamuseSend): Promi
|
|||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(params.params['play_mode'] == 4) {
|
if (params.params['play_mode'] == 4) {
|
||||||
if ([2, 6, 7].indexOf(sheet) != -1) {
|
if ([2, 6, 7].indexOf(sheet) != -1) {
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -267,7 +267,26 @@ const getProfile = async (refid: string, version: string, name?: string) => {
|
|||||||
await utils.writeProfile(refid, profile);
|
await utils.writeProfile(refid, profile);
|
||||||
}
|
}
|
||||||
|
|
||||||
const achievements = <AchievementsUsaneko>await utils.readAchievements(refid, version, {...defaultAchievements, version});
|
let myBest = Array(10).fill(-1);
|
||||||
|
const scores = await utils.readScores(refid, version, true);
|
||||||
|
if(Object.entries(scores.scores).length > 0) {
|
||||||
|
const playCount = new Map();
|
||||||
|
for(const key in scores.scores) {
|
||||||
|
const keyData = key.split(':');
|
||||||
|
const music = parseInt(keyData[0], 10);
|
||||||
|
playCount.set(music, (playCount.get(music) || 0) + scores.scores[key].cnt);
|
||||||
|
}
|
||||||
|
|
||||||
|
const sortedPlayCount = new Map([...playCount.entries()].sort((a, b) => b[1] - a[1]));
|
||||||
|
let i = 0;
|
||||||
|
for (const value of sortedPlayCount.keys()) {
|
||||||
|
if(i >= 10) {
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
myBest[i] = value;
|
||||||
|
i++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
let player: any = {
|
let player: any = {
|
||||||
result: K.ITEM('s8', 0),
|
result: K.ITEM('s8', 0),
|
||||||
@@ -279,6 +298,7 @@ const getProfile = async (refid: string, version: string, name?: string) => {
|
|||||||
item_id: K.ITEM('s16', 0),
|
item_id: K.ITEM('s16', 0),
|
||||||
is_conv: K.ITEM('s8', 0),
|
is_conv: K.ITEM('s8', 0),
|
||||||
license_data: K.ARRAY('s16', Array(20).fill(-1)),
|
license_data: K.ARRAY('s16', Array(20).fill(-1)),
|
||||||
|
my_best: K.ARRAY('s16', myBest),
|
||||||
|
|
||||||
// TODO: replace with real data
|
// TODO: replace with real data
|
||||||
total_play_cnt: K.ITEM('s16', 100),
|
total_play_cnt: K.ITEM('s16', 100),
|
||||||
@@ -286,9 +306,6 @@ const getProfile = async (refid: string, version: string, name?: string) => {
|
|||||||
consecutive_days: K.ITEM('s16', 365),
|
consecutive_days: K.ITEM('s16', 365),
|
||||||
total_days: K.ITEM('s16', 366),
|
total_days: K.ITEM('s16', 366),
|
||||||
interval_day: K.ITEM('s16', 1),
|
interval_day: K.ITEM('s16', 1),
|
||||||
|
|
||||||
// TODO: replace with real data
|
|
||||||
my_best: K.ARRAY('s16', Array(10).fill(-1)),
|
|
||||||
latest_music: K.ARRAY('s16', [-1, -1, -1, -1, -1]),
|
latest_music: K.ARRAY('s16', [-1, -1, -1, -1, -1]),
|
||||||
active_fr_num: K.ITEM('u8', 0),
|
active_fr_num: K.ITEM('u8', 0),
|
||||||
},
|
},
|
||||||
@@ -354,6 +371,8 @@ const getProfile = async (refid: string, version: string, name?: string) => {
|
|||||||
stamp: [],
|
stamp: [],
|
||||||
};
|
};
|
||||||
|
|
||||||
|
const achievements = <AchievementsUsaneko>await utils.readAchievements(refid, version, {...defaultAchievements, version});
|
||||||
|
|
||||||
const profileCharas = achievements.charas || {};
|
const profileCharas = achievements.charas || {};
|
||||||
for (const chara_id in profileCharas) {
|
for (const chara_id in profileCharas) {
|
||||||
player.chara_param.push({
|
player.chara_param.push({
|
||||||
|
|||||||
Reference in New Issue
Block a user