sdvx: added WIP features - arena save, valgene, common.ts updates, webui features
@@ -1,263 +1,453 @@
|
||||
import { EVENT4, COURSES4, EXTENDS4 } from '../data/hvn';
|
||||
import { EVENT5, COURSES5, EXTENDS5 } from '../data/vvw';
|
||||
import { EVENT6, COURSES6, EXTENDS6 } from '../data/exg';
|
||||
import { EVENT6, COURSES6, EXTENDS6, APRILFOOLSSONGS, XRECORDSONGS,
|
||||
KONASTESONGS, BEMANI2021EVENTSONGS, BPLSTAMPRALLYSONGS, SDVX10THSTAMPSONGS,
|
||||
REFLECBEATSTAMPSONGS, VALKYRIEEXCLUSIVESONGS, MISSINGSONGS6, ARENA, VALGENE
|
||||
} from '../data/exg';
|
||||
import { COURSE2 } from '../data/inf';
|
||||
import {getVersion, getRandomIntInclusive} from '../utils';
|
||||
|
||||
function writeLog(log){
|
||||
if(U.GetConfig('debug_log_toggle')) {
|
||||
console.log(log);
|
||||
}
|
||||
}
|
||||
|
||||
export const common: EPR = async (info, data, send) => {
|
||||
let events = [];
|
||||
let courses = [];
|
||||
let extend = [];
|
||||
console.log("Calling common function");
|
||||
|
||||
const version = parseInt(info.model.split(":")[4]);
|
||||
try {
|
||||
IO.ReadFile('webui\\asset\\json\\music_db.json').then(
|
||||
function(value) {
|
||||
let events = [];
|
||||
let courses = [];
|
||||
let extend = [];
|
||||
let date = new Date();
|
||||
let currentYMDDate = parseInt([date.getFullYear(), ((date.getMonth() + 1) > 9 ? '' : '0') + (date.getMonth() + 1), (date.getDate() > 9 ? '' : '0') + date.getDate()].join(''));
|
||||
let currentDate = date.toLocaleDateString()
|
||||
writeLog("Calling common function");
|
||||
|
||||
const version = parseInt(info.model.split(":")[4]);
|
||||
|
||||
if (version <= 2013052900) {
|
||||
return send.pugFile('templates/booth/common.pug');
|
||||
}
|
||||
|
||||
if (version <= 2014112000) {
|
||||
courses = COURSE2;
|
||||
return send.pugFile('templates/infiniteinfection/common.pug',{
|
||||
courses,
|
||||
});
|
||||
}
|
||||
if (version <= 2013052900) {
|
||||
writeLog('Game: Booth')
|
||||
return send.pugFile('templates/booth/common.pug');
|
||||
}
|
||||
|
||||
if (version <= 2014112000) {
|
||||
writeLog('Game: Infinite Infection')
|
||||
courses = COURSE2;
|
||||
return send.pugFile('templates/infiniteinfection/common.pug',{
|
||||
courses,
|
||||
});
|
||||
}
|
||||
|
||||
switch (info.method) {
|
||||
case 'sv4_common': {
|
||||
events = EVENT4;
|
||||
courses = COURSES4;
|
||||
//extend = EXTENDS4;
|
||||
EXTENDS4.forEach(val => extend.push(Object.assign({}, val)));
|
||||
break;
|
||||
}
|
||||
case 'sv5_common': {
|
||||
events = EVENT5;
|
||||
courses = COURSES5;
|
||||
//extend = EXTENDS5;
|
||||
EXTENDS5.forEach(val => extend.push(Object.assign({}, val)));
|
||||
break;
|
||||
}
|
||||
case 'sv6_common': {
|
||||
//events = EVENT6;
|
||||
EVENT6.forEach(val => events.push(val));
|
||||
courses = COURSES6;
|
||||
EXTENDS6.forEach(val => extend.push(Object.assign({}, val)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
let songs = [];
|
||||
switch (info.method) {
|
||||
case 'sv4_common': {
|
||||
writeLog('Game: Heavenly Haven')
|
||||
events = EVENT4;
|
||||
courses = COURSES4;
|
||||
//extend = EXTENDS4;
|
||||
EXTENDS4.forEach(val => extend.push(Object.assign({}, val)));
|
||||
break;
|
||||
}
|
||||
case 'sv5_common': {
|
||||
writeLog('Game: Vivid Wave')
|
||||
events = EVENT5;
|
||||
courses = COURSES5;
|
||||
//extend = EXTENDS5;
|
||||
EXTENDS5.forEach(val => extend.push(Object.assign({}, val)));
|
||||
break;
|
||||
}
|
||||
case 'sv6_common': {
|
||||
writeLog('Game: Exceed Gear')
|
||||
//events = EVENT6;
|
||||
EVENT6.forEach(val => events.push(val));
|
||||
courses = COURSES6;
|
||||
// IO.ReadFile('webui\\asset\\json\\course_data.json').then(
|
||||
// function(yesData){
|
||||
// console.log('yes')
|
||||
// let courseData = JSON.parse(yesData)
|
||||
// courses = courseData.courseData.find(data => data.version == 6).info;
|
||||
// },
|
||||
// function(noData){
|
||||
// console.log(noData)
|
||||
// })
|
||||
EXTENDS6.forEach(val => extend.push(Object.assign({}, val)));
|
||||
break;
|
||||
}
|
||||
}
|
||||
let songs = [];
|
||||
const gameVersion = getVersion(info);
|
||||
let songNum = 2000;
|
||||
if(gameVersion === 2) songNum = 554;
|
||||
if(gameVersion === 3) songNum = 954;
|
||||
if(gameVersion === 4) songNum = 1368;
|
||||
|
||||
if (U.GetConfig('unlock_all_songs')) {
|
||||
console.log("Unlocking songs");
|
||||
const gameVersion = getVersion(info);
|
||||
let songNum = 2000;
|
||||
if(gameVersion === 2) songNum = 554;
|
||||
if(gameVersion === 3) songNum = 954;
|
||||
if(gameVersion === 4) songNum = 1368;
|
||||
for (let i = 1; i < songNum; ++i) {
|
||||
for (let j = 0; j < 5; ++j) {
|
||||
songs.push({
|
||||
music_id: K.ITEM('s32', i),
|
||||
music_type: K.ITEM('u8', j),
|
||||
limited: K.ITEM('u8', 3),
|
||||
});
|
||||
if(U.GetConfig('unlock_all_songs')) {
|
||||
writeLog("Unlocking songs");
|
||||
for (let i = 1; i < songNum; ++i) {
|
||||
for (let j = 0; j < 5; ++j) {
|
||||
songs.push({
|
||||
music_id: K.ITEM('s32', i),
|
||||
music_type: K.ITEM('u8', j),
|
||||
limited: K.ITEM('u8', 3),
|
||||
});
|
||||
}
|
||||
}
|
||||
} else {
|
||||
let RESTRICT_SONGS = XRECORDSONGS.concat(KONASTESONGS, BEMANI2021EVENTSONGS, BPLSTAMPRALLYSONGS, SDVX10THSTAMPSONGS, REFLECBEATSTAMPSONGS);
|
||||
let mdb = JSON.parse(value);
|
||||
|
||||
let limitedNo = 2;
|
||||
for (let i = 0; i < songNum; i++) {
|
||||
var foundSongIndex = mdb.mdb.music.map(function(x) {return x['@id']; }).indexOf(i.toString());
|
||||
if(foundSongIndex != -1) {
|
||||
var songData = mdb.mdb.music[foundSongIndex];
|
||||
if(gameVersion === 6 || gameVersion === -6) {
|
||||
if(!RESTRICT_SONGS.includes(i.toString())) {
|
||||
if(songData.info.version['#text'] === '6' && currentYMDDate >= parseInt(songData.info.distribution_date['#text'])) {
|
||||
if(parseInt(songData.info.distribution_date['#text']) >= parseInt(version.toString().substring(0,8))) {
|
||||
writeLog("Found new song for version " + version + ": " + songData.info.title_name + "(" + songData.info.distribution_date['#text'] + ")");
|
||||
}
|
||||
limitedNo = 2;
|
||||
if(MISSINGSONGS6.includes(i.toString())) {
|
||||
limitedNo += 1;
|
||||
}
|
||||
else if(!U.GetConfig('enable_valk_songs') && (VALKYRIEEXCLUSIVESONGS.includes(i.toString()) && (info.model.split(":")[2] != 'G' || info.model.split(":")[2] != 'H'))){
|
||||
limitedNo -= 1;
|
||||
}
|
||||
for(let j = 0; j < 5; j++) {
|
||||
songs.push({
|
||||
music_id: K.ITEM('s32', i),
|
||||
music_type: K.ITEM('u8', j),
|
||||
limited: K.ITEM('u8', limitedNo),
|
||||
});
|
||||
}
|
||||
} else if (songData.info.inf_ver['#text'] === '6') {
|
||||
songs.push({
|
||||
music_id: K.ITEM('s32', i),
|
||||
music_type: K.ITEM('u8', 3),
|
||||
limited: K.ITEM('u8', limitedNo),
|
||||
});
|
||||
}
|
||||
} else {
|
||||
writeLog("Restricted song: " + songData.info.title_name)
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(U.GetConfig('use_information')){
|
||||
console.log("Sending server information");
|
||||
let time = new Date();
|
||||
let tempDate = time.getDate();
|
||||
const currentTime = parseInt((time.getTime()/100000) as unknown as string)*100;
|
||||
extend.push({
|
||||
id: 1,
|
||||
type: 1,
|
||||
params: [
|
||||
1,
|
||||
currentTime,
|
||||
1,
|
||||
1,
|
||||
31,
|
||||
'[f:0]SERVER INFORMATION',
|
||||
'[sz:120] [olc:555555][ol:4][c:ff3333,3333ff,77ff77]Asphyxia\n'+
|
||||
'[sz:75] CORE\n[sz:30]'+
|
||||
'[sz:30][c:ffffff,888888] \n \n'+
|
||||
' [c:00d5ff,888888]ASPHYXIA CORE'+CORE_VERSION+'\n'+
|
||||
' [c:e5f3ff,a3d5ff]SDVX Plugin ver 6.0.0\n \n \n'+
|
||||
'\n\n [f:0][c:ff3333,ffffff]FREE SOFTWARE. BEWARE OF SCAMMERS.\n'+
|
||||
'[c:ffffff,888888] If you bought this software, request refund immediately.\n \n \n[/ol]'+
|
||||
'[br:10][c:00FFFF][sz:50]メリー。。。クリスマス、です。。。'+
|
||||
'\n \n \n \n[sz:32][c:560000,FC0000]DO NOT STREAM OR DISTRIBUTE THIS GAME IN PUBLIC',
|
||||
//'[img:test]',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
if(U.GetConfig('new_year_special')){
|
||||
events.push('NEW_YEAR_2022');
|
||||
}
|
||||
if(U.GetConfig('use_information')){
|
||||
writeLog("Sending server information");
|
||||
let time = new Date();
|
||||
let tempDate = time.getDate();
|
||||
const currentTime = parseInt((time.getTime()/100000) as unknown as string)*100;
|
||||
extend.push({
|
||||
id: 1,
|
||||
type: 1,
|
||||
params: [
|
||||
1,
|
||||
currentTime,
|
||||
1,
|
||||
1,
|
||||
31,
|
||||
'[f:0]SERVER INFORMATION',
|
||||
'[sz:120] [olc:555555][ol:4][c:ff3333,3333ff,77ff77]Asphyxia\n'+
|
||||
'[sz:75] CORE\n[sz:30]'+
|
||||
'[sz:30][c:ffffff,888888] \n \n'+
|
||||
' [c:00d5ff,888888]ASPHYXIA CORE'+CORE_VERSION+'\n'+
|
||||
' [c:e5f3ff,a3d5ff]SDVX Plugin ver 6.0.0\n \n \n'+
|
||||
'\n\n [f:0][c:ff3333,ffffff]FREE SOFTWARE. BEWARE OF SCAMMERS.\n'+
|
||||
'[c:ffffff,888888] If you bought this software, request refund immediately.\n \n \n[/ol]'+
|
||||
'[br:10][c:00FFFF][sz:50]メリー。。。クリスマス、です。。。'+
|
||||
'\n \n \n \n[sz:32][c:560000,FC0000]DO NOT STREAM OR DISTRIBUTE THIS GAME IN PUBLIC',
|
||||
//'[img:test]',
|
||||
'',
|
||||
'',
|
||||
'',
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
if(U.GetConfig('use_asphyxia_gameover')){
|
||||
let time = new Date();
|
||||
let tempDate = time.getDate();
|
||||
const currentTime = parseInt((time.getTime()/100000) as unknown as string)*100;
|
||||
let rightCharater = [
|
||||
"go_bansui","go_bof","go_cannon","go_chinema","go_chocopla",
|
||||
"go_dd","go_ekusa","go_esp","go_flowry","go_fukuryu",
|
||||
"go_gorilla","go_grace","go_grace_rori","go_grace_ver06","go_haelequin",
|
||||
"go_haruka","go_joyeuse","go_kino","go_kisa","go_mai",
|
||||
"go_makina","go_makishima","go_left","go_makishima_ver06","go_mitsuru","go_miyako",
|
||||
"go_nana","go_natsuhi","go_noisia","go_left_ver06","go_ondine","go_pannakotta",
|
||||
"go_psychoholic","go_rain","go_rain02","go_ribbon","go_right",
|
||||
"go_riot","go_rishna","go_rouge","go_sakurako","go_satan",
|
||||
"go_tama","go_torako","go_vela","go_vertex","go_wabutan",
|
||||
"go_wanlove","go_yusya",
|
||||
];
|
||||
let leftCharater = [
|
||||
"go_akane","go_apex4sis","go_candy","go_capsaicin","go_chikage",
|
||||
"go_evileye","go_fluorine","go_gangara","go_gin","go_hero",
|
||||
"go_hiryubiren","go_hiyuki","go_hotaru","go_inoten","go_kamito",
|
||||
"go_kanade","go_kemuri","go_kokona","go_konoha","go_kouki",
|
||||
"go_kureha","go_left_bag","go_madholic",
|
||||
"go_mimiko","go_mion","go_mitsuruco","go_nathanael","go_nishinippori",
|
||||
"go_ortlinde","go_pico","go_pilica","go_profession","go_rasis",
|
||||
"go_rasis_ver06","go_right_ver06","go_rimuru","go_rowa","go_saigawara",
|
||||
"go_setu","go_shelly","go_soul","go_tamaneko","go_toraipuru",
|
||||
"go_tsubaki","go_tsumabuki","go_tsumabuki_ver06","go_yuki","go_yukito",
|
||||
];
|
||||
let middleCharater = ["go_cat","go_cawoashi","go_iruyoru","go_neno",];
|
||||
// Pattern 1 Left Right Left
|
||||
// Pattern 2 Right Left Right
|
||||
// Pattern 3 Right Middle Left
|
||||
// Pattern 4 Left Middle Right
|
||||
// switch(getVersion(info)){
|
||||
// case 5:{
|
||||
// break;
|
||||
// }
|
||||
// case 6:{
|
||||
// rightCharater.push();
|
||||
// leftCharater.push();
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
var charaString = "characters: ";
|
||||
let pattern = getRandomIntInclusive(1,4);
|
||||
switch(pattern){
|
||||
case 1:{
|
||||
var chara1 = leftCharater[getRandomIntInclusive(0,leftCharater.length-1)];
|
||||
var chara2 = rightCharater[getRandomIntInclusive(0,rightCharater.length-1)];
|
||||
var chara3 = leftCharater[getRandomIntInclusive(0,leftCharater.length-1)];
|
||||
charaString += "chara01/"+chara1+" chara02/"+chara2+" chara01/"+chara3;
|
||||
break;
|
||||
}
|
||||
case 2:{
|
||||
var chara1 = rightCharater[getRandomIntInclusive(0,rightCharater.length-1)];
|
||||
var chara2 = leftCharater[getRandomIntInclusive(0,leftCharater.length-1)];
|
||||
var chara3 = rightCharater[getRandomIntInclusive(0,rightCharater.length-1)];
|
||||
charaString += "chara02/"+chara1+" chara01/"+chara2+" chara02/"+chara3;
|
||||
break;
|
||||
}
|
||||
case 3:{
|
||||
var chara1 = rightCharater[getRandomIntInclusive(0,rightCharater.length-1)];
|
||||
var chara2 = middleCharater[getRandomIntInclusive(0,middleCharater.length-1)]
|
||||
var chara3 = leftCharater[getRandomIntInclusive(0,leftCharater.length-1)];
|
||||
charaString += "chara02/"+chara1+" chara03/"+chara2+" chara01/"+chara3;
|
||||
break;
|
||||
}
|
||||
case 4:{
|
||||
var chara1 = leftCharater[getRandomIntInclusive(0,leftCharater.length-1)];
|
||||
var chara2 = middleCharater[getRandomIntInclusive(0,middleCharater.length-1)];
|
||||
var chara3 = rightCharater[getRandomIntInclusive(0,rightCharater.length-1)];
|
||||
charaString += "chara01/"+chara1+" chara03/"+chara2+" chara02/"+chara3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
if(U.GetConfig('use_asphyxia_gameover')){
|
||||
let time = new Date();
|
||||
let tempDate = time.getDate();
|
||||
const currentTime = parseInt((time.getTime()/100000) as unknown as string)*100;
|
||||
let rightCharater = [
|
||||
"go_bansui","go_bof","go_cannon","go_chinema","go_chocopla",
|
||||
"go_dd","go_ekusa","go_esp","go_flowry","go_fukuryu",
|
||||
"go_gorilla","go_grace","go_grace_rori","go_grace_ver06","go_haelequin",
|
||||
"go_haruka","go_joyeuse","go_kino","go_kisa","go_mai",
|
||||
"go_makina","go_makishima","go_left","go_makishima_ver06","go_mitsuru","go_miyako",
|
||||
"go_nana","go_natsuhi","go_noisia","go_left_ver06","go_ondine","go_pannakotta",
|
||||
"go_psychoholic","go_rain","go_rain02","go_ribbon","go_right",
|
||||
"go_riot","go_rishna","go_rouge","go_sakurako","go_satan",
|
||||
"go_tama","go_torako","go_vela","go_vertex","go_wabutan",
|
||||
"go_wanlove","go_yusya",
|
||||
];
|
||||
let leftCharater = [
|
||||
"go_akane","go_apex4sis","go_candy","go_capsaicin","go_chikage",
|
||||
"go_evileye","go_fluorine","go_gangara","go_gin","go_hero",
|
||||
"go_hiryubiren","go_hiyuki","go_hotaru","go_inoten","go_kamito",
|
||||
"go_kanade","go_kemuri","go_kokona","go_konoha","go_kouki",
|
||||
"go_kureha","go_left_bag","go_madholic",
|
||||
"go_mimiko","go_mion","go_mitsuruco","go_nathanael","go_nishinippori",
|
||||
"go_ortlinde","go_pico","go_pilica","go_profession","go_rasis",
|
||||
"go_rasis_ver06","go_right_ver06","go_rimuru","go_rowa","go_saigawara",
|
||||
"go_setu","go_shelly","go_soul","go_tamaneko","go_toraipuru",
|
||||
"go_tsubaki","go_tsumabuki","go_tsumabuki_ver06","go_yuki","go_yukito",
|
||||
];
|
||||
let middleCharater = ["go_cat","go_cawoashi","go_iruyoru","go_neno",];
|
||||
// Pattern 1 Left Right Left
|
||||
// Pattern 2 Right Left Right
|
||||
// Pattern 3 Right Middle Left
|
||||
// Pattern 4 Left Middle Right
|
||||
// switch(getVersion(info)){
|
||||
// case 5:{
|
||||
// break;
|
||||
// }
|
||||
// case 6:{
|
||||
// rightCharater.push();
|
||||
// leftCharater.push();
|
||||
// break;
|
||||
// }
|
||||
// }
|
||||
var charaString = "characters: ";
|
||||
let pattern = getRandomIntInclusive(1,4);
|
||||
switch(pattern){
|
||||
case 1:{
|
||||
var chara1 = leftCharater[getRandomIntInclusive(0,leftCharater.length-1)];
|
||||
var chara2 = rightCharater[getRandomIntInclusive(0,rightCharater.length-1)];
|
||||
var chara3 = leftCharater[getRandomIntInclusive(0,leftCharater.length-1)];
|
||||
charaString += "chara01/"+chara1+" chara02/"+chara2+" chara01/"+chara3;
|
||||
break;
|
||||
}
|
||||
case 2:{
|
||||
var chara1 = rightCharater[getRandomIntInclusive(0,rightCharater.length-1)];
|
||||
var chara2 = leftCharater[getRandomIntInclusive(0,leftCharater.length-1)];
|
||||
var chara3 = rightCharater[getRandomIntInclusive(0,rightCharater.length-1)];
|
||||
charaString += "chara02/"+chara1+" chara01/"+chara2+" chara02/"+chara3;
|
||||
break;
|
||||
}
|
||||
case 3:{
|
||||
var chara1 = rightCharater[getRandomIntInclusive(0,rightCharater.length-1)];
|
||||
var chara2 = middleCharater[getRandomIntInclusive(0,middleCharater.length-1)]
|
||||
var chara3 = leftCharater[getRandomIntInclusive(0,leftCharater.length-1)];
|
||||
charaString += "chara02/"+chara1+" chara03/"+chara2+" chara01/"+chara3;
|
||||
break;
|
||||
}
|
||||
case 4:{
|
||||
var chara1 = leftCharater[getRandomIntInclusive(0,leftCharater.length-1)];
|
||||
var chara2 = middleCharater[getRandomIntInclusive(0,middleCharater.length-1)];
|
||||
var chara3 = rightCharater[getRandomIntInclusive(0,rightCharater.length-1)];
|
||||
charaString += "chara01/"+chara1+" chara03/"+chara2+" chara02/"+chara3;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if(Math.abs(getVersion(info)) == 6){//Due to older version misses newer characters, not supported on older versions
|
||||
extend.push({
|
||||
id: 3,
|
||||
type: 1,
|
||||
params: [
|
||||
3,
|
||||
currentTime,
|
||||
0,
|
||||
60,
|
||||
0,
|
||||
'[GAMEOVER]',
|
||||
'[ol:6][olc:FFFFFF][ds:4][dsc:000000][sz:32][c:99FF00A8]Thank You For Using Asphyxia CORE!!!',
|
||||
'[ol:6][olc:FFFFFF][ds:4][dsc:000000][sz:32][c:990D46F2]For more information please visit our Discord!',
|
||||
'[ol:6][olc:FFFFFF][ds:4][dsc:000000][sz:32][c:99ED4F39]Nice Play!!!',
|
||||
//'characters: chara01/go_rasis_ver06 chara02/go_left_ver06 chara01/go_right_ver06',
|
||||
charaString,
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
if(Math.abs(getVersion(info)) == 6){//Due to older version misses newer characters, not supported on older versions
|
||||
extend.push({
|
||||
id: 3,
|
||||
type: 1,
|
||||
params: [
|
||||
3,
|
||||
currentTime,
|
||||
0,
|
||||
60,
|
||||
0,
|
||||
'[GAMEOVER]',
|
||||
'[ol:6][olc:FFFFFF][ds:4][dsc:000000][sz:32][c:99FF00A8]Thank You For Using Asphyxia CORE!!!',
|
||||
'[ol:6][olc:FFFFFF][ds:4][dsc:000000][sz:32][c:990D46F2]For more information please visit our Discord!',
|
||||
'[ol:6][olc:FFFFFF][ds:4][dsc:000000][sz:32][c:99ED4F39]Nice Play!!!',
|
||||
//'characters: chara01/go_rasis_ver06 chara02/go_left_ver06 chara01/go_right_ver06',
|
||||
charaString,
|
||||
],
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
console.log("Sending common objects");
|
||||
send.object(
|
||||
{
|
||||
event: {
|
||||
info: events.map(e => ({
|
||||
event_id: K.ITEM('str', e),
|
||||
})),
|
||||
writeLog("Sending common objects");
|
||||
|
||||
let arena_catalog_items = []
|
||||
let catalog = []
|
||||
let campaign = []
|
||||
|
||||
if(U.GetConfig('arena_szn') == 'debug') {
|
||||
for(let xxx = 0; xxx<=20; xxx++){
|
||||
arena_catalog_items.push({
|
||||
catalog_id: K.ITEM('s32', 1),
|
||||
catalog_type: K.ITEM('s32', 1),
|
||||
price: K.ITEM('s32', 1000),
|
||||
item_type: K.ITEM('s32', U.GetConfig('arena_debug_item_type')),
|
||||
item_id: K.ITEM('s32', xxx),
|
||||
param: K.ITEM('s32', 1),
|
||||
})
|
||||
}
|
||||
}
|
||||
else{
|
||||
for (let catalog_item in ARENA[U.GetConfig('arena_szn')].arena_items) {
|
||||
arena_catalog_items.push({
|
||||
catalog_id: K.ITEM('s32', ARENA[U.GetConfig('arena_szn')].arena_items[catalog_item].catalog_id),
|
||||
catalog_type: K.ITEM('s32', ARENA[U.GetConfig('arena_szn')].arena_items[catalog_item].catalog_type),
|
||||
price: K.ITEM('s32', ARENA[U.GetConfig('arena_szn')].arena_items[catalog_item].price),
|
||||
item_type: K.ITEM('s32', ARENA[U.GetConfig('arena_szn')].arena_items[catalog_item].item_type),
|
||||
item_id: K.ITEM('s32', ARENA[U.GetConfig('arena_szn')].arena_items[catalog_item].item_id),
|
||||
param: K.ITEM('s32', ARENA[U.GetConfig('arena_szn')].arena_items[catalog_item].param),
|
||||
})
|
||||
}
|
||||
}
|
||||
|
||||
let valgene_info = []
|
||||
let valgene_items = []
|
||||
VALGENE.info.forEach(val => valgene_info.push({
|
||||
valgene_name: K.ITEM('str', val.valgene_name),
|
||||
valgene_name_english: K.ITEM('str', val.valgene_name_english),
|
||||
valgene_id: K.ITEM('s32', val.valgene_id)
|
||||
}))
|
||||
VALGENE.catalog.forEach((val) => {
|
||||
val.items.forEach((itemVal) => {
|
||||
itemVal.item_ids.forEach((item_id) => {
|
||||
valgene_items.push({
|
||||
valgene_id: K.ITEM('s32', val.volume),
|
||||
rarity: K.ITEM('s32', VALGENE.rarity[itemVal.type.toString()]),
|
||||
item_type: K.ITEM('s32', itemVal.type),
|
||||
item_id: K.ITEM('s32', item_id)
|
||||
})
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
if(U.GetConfig('april_fools') || currentDate.substring(0,3) === '4/1') {
|
||||
writeLog('Using April Fools Event')
|
||||
events.push('APRIL_GRACE');
|
||||
events.push('EVENTDATE_APRILFOOL');
|
||||
for (const afsong in APRILFOOLSSONGS) {
|
||||
for (let j = 0; j < 5; ++j) {
|
||||
songs.push({
|
||||
music_id: K.ITEM('s32', parseInt(APRILFOOLSSONGS[afsong])),
|
||||
music_type: K.ITEM('u8', j),
|
||||
limited: K.ITEM('u8', 3),
|
||||
});
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if(U.GetConfig('new_year_special')){
|
||||
writeLog('Using New Year Special BGM')
|
||||
events.push('NEW_YEAR_2022');
|
||||
}
|
||||
|
||||
console.log(courses[0].id)
|
||||
send.object(
|
||||
{
|
||||
valgene: {
|
||||
info: valgene_info,
|
||||
catalog: valgene_items
|
||||
},
|
||||
arena: {
|
||||
season: K.ITEM('s32', ARENA[U.GetConfig('arena_szn')].details.season),
|
||||
time_start: K.ITEM('u64', ARENA[U.GetConfig('arena_szn')].details.time_start),
|
||||
time_end: K.ITEM('u64', ARENA[U.GetConfig('arena_szn')].details.time_end),
|
||||
shop_start: K.ITEM('u64', ARENA[U.GetConfig('arena_szn')].details.shop_start),
|
||||
shop_end: K.ITEM('u64', ARENA[U.GetConfig('arena_szn')].details.shop_end),
|
||||
is_open: K.ITEM('bool', ARENA[U.GetConfig('arena_szn')].details.is_open),
|
||||
is_shop: K.ITEM('bool', ARENA[U.GetConfig('arena_szn')].details.is_shop),
|
||||
catalog: arena_catalog_items
|
||||
},
|
||||
event: {
|
||||
info: events.map(e => ({
|
||||
event_id: K.ITEM('str', e),
|
||||
})),
|
||||
},
|
||||
extend: {
|
||||
info: extend.map(e => ({
|
||||
extend_id: K.ITEM('u32', e.id),
|
||||
extend_type: K.ITEM('u32', e.type),
|
||||
param_num_1: K.ITEM('s32', e.params[0]),
|
||||
param_num_2: K.ITEM('s32', e.params[1]),
|
||||
param_num_3: K.ITEM('s32', e.params[2]),
|
||||
param_num_4: K.ITEM('s32', e.params[3]),
|
||||
param_num_5: K.ITEM('s32', e.params[4]),
|
||||
param_str_1: K.ITEM('str', e.params[5]),
|
||||
param_str_2: K.ITEM('str', e.params[6]),
|
||||
param_str_3: K.ITEM('str', e.params[7]),
|
||||
param_str_4: K.ITEM('str', e.params[8]),
|
||||
param_str_5: K.ITEM('str', e.params[9]),
|
||||
})),
|
||||
},
|
||||
music_limited: { info: songs },
|
||||
skill_course: {
|
||||
info: courses.reduce(
|
||||
(acc, s) =>
|
||||
acc.concat(
|
||||
s.courses.map(c => ({
|
||||
season_id: K.ITEM('s32', s.id),
|
||||
season_name: K.ITEM('str', s.name),
|
||||
season_new_flg: K.ITEM('bool', s.isNew),
|
||||
course_type: K.ITEM('s16', 0),
|
||||
course_id: K.ITEM('s16', c.id),
|
||||
course_name: K.ITEM('str', c.name),
|
||||
skill_level: K.ITEM('s16', c.level),
|
||||
skill_name_id: K.ITEM('s16', c.nameID),
|
||||
matching_assist: K.ITEM('bool', c.assist),
|
||||
clear_rate: K.ITEM('s32', 5000),
|
||||
avg_score: K.ITEM('u32', 15000000),
|
||||
track: c.tracks.map(t => ({
|
||||
track_no: K.ITEM('s16', t.no),
|
||||
music_id: K.ITEM('s32', t.mid),
|
||||
music_type: K.ITEM('s8', t.mty),
|
||||
})),
|
||||
}))
|
||||
),
|
||||
[]
|
||||
),
|
||||
},
|
||||
},
|
||||
{ encoding: 'utf8' }
|
||||
);
|
||||
},
|
||||
extend: {
|
||||
info: extend.map(e => ({
|
||||
extend_id: K.ITEM('u32', e.id),
|
||||
extend_type: K.ITEM('u32', e.type),
|
||||
param_num_1: K.ITEM('s32', e.params[0]),
|
||||
param_num_2: K.ITEM('s32', e.params[1]),
|
||||
param_num_3: K.ITEM('s32', e.params[2]),
|
||||
param_num_4: K.ITEM('s32', e.params[3]),
|
||||
param_num_5: K.ITEM('s32', e.params[4]),
|
||||
param_str_1: K.ITEM('str', e.params[5]),
|
||||
param_str_2: K.ITEM('str', e.params[6]),
|
||||
param_str_3: K.ITEM('str', e.params[7]),
|
||||
param_str_4: K.ITEM('str', e.params[8]),
|
||||
param_str_5: K.ITEM('str', e.params[9]),
|
||||
})),
|
||||
},
|
||||
music_limited: { info: songs },
|
||||
skill_course: {
|
||||
info: courses.reduce(
|
||||
(acc, s) =>
|
||||
acc.concat(
|
||||
s.courses.map(c => ({
|
||||
season_id: K.ITEM('s32', s.id),
|
||||
season_name: K.ITEM('str', s.name),
|
||||
season_new_flg: K.ITEM('bool', s.isNew),
|
||||
course_type: K.ITEM('s16', 0),
|
||||
course_id: K.ITEM('s16', c.id),
|
||||
course_name: K.ITEM('str', c.name),
|
||||
skill_level: K.ITEM('s16', c.level),
|
||||
skill_name_id: K.ITEM('s16', c.nameID),
|
||||
matching_assist: K.ITEM('bool', c.assist),
|
||||
clear_rate: K.ITEM('s32', 5000),
|
||||
avg_score: K.ITEM('u32', 15000000),
|
||||
track: c.tracks.map(t => ({
|
||||
track_no: K.ITEM('s16', t.no),
|
||||
music_id: K.ITEM('s32', t.mid),
|
||||
music_type: K.ITEM('s8', t.mty),
|
||||
})),
|
||||
}))
|
||||
),
|
||||
[]
|
||||
),
|
||||
},
|
||||
},
|
||||
{ encoding: 'utf8' }
|
||||
);
|
||||
function(error) {
|
||||
writeLog('read error: ' + error)
|
||||
}
|
||||
);
|
||||
} catch (error) {
|
||||
writeLog(error)
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
export const log: EPR = async (info, data, send) => {
|
||||
send.success();
|
||||
send.success();
|
||||
}
|
||||
|
||||
export const unhandledt: EPR = async (info, data, send) => {
|
||||
writeLog("Unhandled: " + info.method + " | " + info.model + " | " + info.module)
|
||||
writeLog("Info:")
|
||||
for (let key in info) {
|
||||
type ObjectKey = keyof typeof info;
|
||||
const myVar = key as ObjectKey;
|
||||
if (typeof info[key] === 'object') {
|
||||
writeLog(key + ' - ' + JSON.stringify(info[key]));
|
||||
} else writeLog(key + ' - ' + info[key]);
|
||||
}
|
||||
writeLog("")
|
||||
writeLog("Data:")
|
||||
for (let key in data) {
|
||||
type ObjectKey = keyof typeof data;
|
||||
const myVar = key as ObjectKey;
|
||||
if (typeof data[key] === 'object') {
|
||||
writeLog(key + ' - ' + JSON.stringify(data[key]));
|
||||
} else writeLog(key + ' - ' + data[key]);
|
||||
}
|
||||
writeLog("")
|
||||
writeLog("Send:")
|
||||
for (let key in send) {
|
||||
type ObjectKey = keyof typeof send;
|
||||
const myVar = key as ObjectKey;
|
||||
if (typeof send[key] === 'object') {
|
||||
writeLog(key + ' - ' + JSON.stringify(send[key]));
|
||||
} else writeLog(key + ' - ' + send[key]);
|
||||
}
|
||||
writeLog('')
|
||||
}
|
||||
|
||||
@@ -2,6 +2,7 @@ import { Skill } from '../models/skill';
|
||||
import { SDVX_AUTOMATION_SONGS } from '../data/vvw';
|
||||
import { Item } from '../models/item';
|
||||
import { Param } from '../models/param';
|
||||
import { Arena } from '../models/arena';
|
||||
import { MusicRecord } from '../models/music_record';
|
||||
import { CourseRecord } from '../models/course_record';
|
||||
import { Profile } from '../models/profile';
|
||||
@@ -33,7 +34,7 @@ function unlockAppealCards(items: Partial<Item>[]) {
|
||||
export const loadScore: EPR = async (info, data, send) => {
|
||||
console.log("Now loading score");
|
||||
const version = Math.abs(getVersion(info));
|
||||
console.log("Got version:" + version);
|
||||
console.log("Got version: " + version);
|
||||
let refid = $(data).str('refid', $(data).attr().dataid);
|
||||
if (version === 2) refid = $(data).str('dataid', '0');
|
||||
//console.log('loading score');
|
||||
@@ -365,6 +366,7 @@ export const saveCourse: EPR = async (info, data, send) => {
|
||||
};
|
||||
|
||||
export const save: EPR = async (info, data, send) => {
|
||||
console.log($(data))
|
||||
const refid = $(data).str('refid', $(data).attr().refid);
|
||||
if (!refid) return send.deny();
|
||||
|
||||
@@ -404,6 +406,9 @@ export const save: EPR = async (info, data, send) => {
|
||||
|
||||
// Save Profile
|
||||
if (version === 6) {
|
||||
console.log(JSON.stringify($(data)))
|
||||
console.log("packet: " + $(data).number('earned_gamecoin_packet'))
|
||||
console.log("block: " + $(data).number('earned_gamecoin_block'))
|
||||
await DB.Update<Profile>(
|
||||
refid,
|
||||
{ collection: 'profile' },
|
||||
@@ -433,6 +438,15 @@ export const save: EPR = async (info, data, send) => {
|
||||
blocks: $(data).number('earned_gamecoin_block'),
|
||||
blasterEnergy: $(data).number('earned_blaster_energy'),
|
||||
extrackEnergy: $(data).number('earned_extrack_energy'),
|
||||
playCount: 1,
|
||||
dayCount: 1,
|
||||
todayCount: 1,
|
||||
playChain: 1,
|
||||
maxPlayChain: 1,
|
||||
weekCount: 1,
|
||||
weekPlayCount: 1,
|
||||
weekChain: 1,
|
||||
maxWeekChain: 1
|
||||
},
|
||||
}
|
||||
);
|
||||
@@ -466,6 +480,15 @@ export const save: EPR = async (info, data, send) => {
|
||||
packets: $(data).number('earned_gamecoin_packet'),
|
||||
blocks: $(data).number('earned_gamecoin_block'),
|
||||
blasterEnergy: $(data).number('earned_blaster_energy'),
|
||||
playCount: 1,
|
||||
dayCount: 1,
|
||||
todayCount: 1,
|
||||
playChain: 1,
|
||||
maxPlayChain: 1,
|
||||
weekCount: 1,
|
||||
weekPlayCount: 1,
|
||||
weekChain: 1,
|
||||
maxWeekChain: 1
|
||||
},
|
||||
}
|
||||
);
|
||||
@@ -545,6 +568,35 @@ export const save: EPR = async (info, data, send) => {
|
||||
}
|
||||
);
|
||||
|
||||
// Save Arena Data
|
||||
const arena_data = $(data).elements('arena');
|
||||
for (const are of arena_data) {
|
||||
const earnedUR = are.number('earned_ultimate_rate');
|
||||
const earnedSP = are.number('earned_shop_point');
|
||||
const earnedRP = are.number('earned_rank_point');
|
||||
const earnedLE = are.number('earned_live_energy');
|
||||
const rankPlay = are.str('rank_play') == 'true' ? 1 : 0;
|
||||
const ultimatePlay = are.str('ultimate_play') == 'true' ? 1 : 0;
|
||||
await DB.Upsert<Arena>(
|
||||
refid,
|
||||
{
|
||||
collection: 'arena'
|
||||
},
|
||||
{
|
||||
$inc: {
|
||||
ultimateRate: _.isNil(earnedUR) ? 0 : earnedUR,
|
||||
shopPoint: _.isNil(earnedSP) ? 0 : earnedSP,
|
||||
rankPoint: _.isNil(earnedRP) ? 0 : earnedRP,
|
||||
liveEnergy: _.isNil(earnedLE) ? 0 : earnedLE,
|
||||
rankCount: rankPlay,
|
||||
ultimateCount: ultimatePlay
|
||||
}
|
||||
}
|
||||
);
|
||||
|
||||
console.log(earnedSP)
|
||||
}
|
||||
|
||||
return send.success();
|
||||
};
|
||||
|
||||
@@ -554,8 +606,8 @@ export const load: EPR = async (info, data, send) => {
|
||||
if (!refid) return send.deny();
|
||||
|
||||
const version = Math.abs(getVersion(info));
|
||||
console.log("Got version" + version);
|
||||
console.log("DataID" + refid);
|
||||
console.log("Got version: " + version);
|
||||
console.log("DataID: " + refid);
|
||||
if (version == 0) return send.deny();
|
||||
|
||||
const profile = await DB.FindOne<Profile>(refid, {
|
||||
@@ -575,6 +627,7 @@ export const load: EPR = async (info, data, send) => {
|
||||
const courses = await DB.Find<CourseRecord>(refid, { collection: 'course', version });
|
||||
const items = await DB.Find<Item>(refid, { collection: 'item' });
|
||||
const params = await DB.Find<Param>(refid, { collection: 'param' });
|
||||
const arena = await DB.FindOne<Arena>(refid, { collection: 'arena' });
|
||||
let time = new Date();
|
||||
let tempHour = time.getHours();
|
||||
let tempDate = time.getDate();
|
||||
@@ -614,7 +667,7 @@ export const load: EPR = async (info, data, send) => {
|
||||
|
||||
const customize = [];
|
||||
customize.push(bgm, subbg, nemsys, stampA, stampB, stampC, stampD);
|
||||
|
||||
console.log("ARENA POINTS: " + arena['shopPoint'])
|
||||
|
||||
var tempCustom = params.findIndex((e) => (e.type == 2 && e.id == 2))
|
||||
|
||||
@@ -650,6 +703,7 @@ export const load: EPR = async (info, data, send) => {
|
||||
blasterpass,
|
||||
automation: version == 5 ? SDVX_AUTOMATION_SONGS : [],
|
||||
code: IDToCode(profile.id),
|
||||
arena,
|
||||
...profile,
|
||||
});
|
||||
};
|
||||
@@ -702,7 +756,9 @@ export const create: EPR = async (info, data, send) => {
|
||||
sortType: 0,
|
||||
expPoint: 0,
|
||||
mUserCnt: 0,
|
||||
boothFrame: [0, 0, 0, 0, 0]
|
||||
boothFrame: [0, 0, 0, 0, 0],
|
||||
|
||||
playCount: 0
|
||||
};
|
||||
|
||||
await DB.Upsert(refid, { collection: 'profile' }, profile);
|
||||
@@ -710,6 +766,7 @@ export const create: EPR = async (info, data, send) => {
|
||||
};
|
||||
|
||||
export const buy: EPR = async (info, data, send) => {
|
||||
console.log("buying")
|
||||
const refid = $(data).str('refid');
|
||||
if (!refid) return send.deny();
|
||||
|
||||
@@ -777,3 +834,24 @@ export const print: EPR = async (info, data, send) => {
|
||||
}))
|
||||
}), { status: "0" };
|
||||
}
|
||||
|
||||
export const saveValgene: EPR = async (info, data, send) => {
|
||||
console.log("Saving Valkyrie Generator Item")
|
||||
const refid = $(data).str('refid');
|
||||
const items = $(data).elements('item.info');
|
||||
|
||||
for (const i of items) {
|
||||
const type = i.number('type');
|
||||
const id = i.number('id');
|
||||
const param = i.number('param');
|
||||
|
||||
if (_.isNil(type) || _.isNil(id) || _.isNil(param)) continue;
|
||||
|
||||
await DB.Upsert<Item>(
|
||||
refid,
|
||||
{ collection: 'item', type, id },
|
||||
{ $set: { param } }
|
||||
);
|
||||
}
|
||||
return send.object({ result: K.ITEM('u8', 0) });
|
||||
}
|
||||
|
||||
@@ -1,4 +1,4 @@
|
||||
import {common,log} from './handlers/common';
|
||||
import {common,log,unhandledt} from './handlers/common';
|
||||
import {hiscore, rival, saveMix, loadMix, globalMatch} from './handlers/features';
|
||||
import {
|
||||
updateProfile,
|
||||
@@ -15,21 +15,37 @@ import {
|
||||
saveCourse,
|
||||
buy,
|
||||
print,
|
||||
saveValgene,
|
||||
} from './handlers/profiles';
|
||||
import {
|
||||
generateLatestMusicDBFile,
|
||||
copyResourcesFromGame
|
||||
} from './utils'
|
||||
import {
|
||||
ARENA
|
||||
} from './data/exg';
|
||||
|
||||
export function register() {
|
||||
|
||||
|
||||
R.Contributor("LatoWolf#1170");
|
||||
R.GameCode('KFC');
|
||||
|
||||
R.Config('unlock_all_songs', { type: 'boolean', default: false, name:'Unlock All Songs'});
|
||||
R.Config('unlock_all_navigators', { type: 'boolean', default: false, name:'Unlock All Navigators'} );
|
||||
R.Config('unlock_all_appeal_cards', { type: 'boolean', default: false, name:'Unlock All Appeal Cards'});
|
||||
R.Config('unlock_all_valk_items', { type: 'boolean', default: false, name:'Unlock All Valkyrie Items', desc: 'Unlock Nemsys, BGM, Submonitor BG and Stamp Items (Valk crews not included; check \'unlock all navigators\' option)'});
|
||||
R.Config('use_information' ,{ type: 'boolean', default: true, name:'Use Information', desc:'Enable the information section after entry.'});
|
||||
R.Config('enable_valk_songs' ,{ type: 'boolean', default: false, name:'Enable Valkyrie Model Songs', desc:'Unlock the valkyrie model songs on non-valkyrie mode.'});
|
||||
R.Config('use_asphyxia_gameover',{ type: 'boolean', default: true, name:'Use Asphyxia Gameover', desc:'Enable the Asphyxia gameover message after ending the game.'})
|
||||
R.Config('sdvx_eg_root_dir', { type: 'string', needRestart: true, default: '', name: 'Exceed Gear Data Directory', desc: 'The root directory of your SDVX Exceed Gear game files (for asset copying)'});
|
||||
R.Config('use_blasterpass',{ type: 'boolean', default: true, name:'Use Blaster Pass', desc:'Enable Blaster Pass for VW and EG'});
|
||||
R.Config('new_year_special',{ type: 'boolean', default: true, name:'Use New Year Special', desc:'Enable New Year Special BGM for login'});
|
||||
R.Config('new_year_special',{ type: 'boolean', default: false, name:'Use New Year Special', desc:'Enable New Year Special BGM for login (needs checking)'});
|
||||
R.Config('april_fools',{ type: 'boolean', default: false, name:'April Fools', desc:'Enable April Fools Event (needs checking)'});
|
||||
R.Config('arena_szn',{ type: 'string', options: Object.keys(ARENA), default: 'Set 1 (04/25/22)', name: 'Arena Station Item Set', desc: 'Choose which season set of items in the arena station you want to show up in arena station'});
|
||||
R.Config('debug_log_toggle', { type: 'boolean', default: true, name:'Toggle Logging'});
|
||||
|
||||
R.WebUIEvent('generateLatestMusicDBFile', generateLatestMusicDBFile);
|
||||
R.WebUIEvent('copyResourcesFromGame', copyResourcesFromGame);
|
||||
R.WebUIEvent('updateProfile', updateProfile);
|
||||
R.WebUIEvent('updateMix', updateMix);
|
||||
R.WebUIEvent('importMix', importMix);
|
||||
@@ -55,6 +71,7 @@ export function register() {
|
||||
MultiRoute('save', save);
|
||||
MultiRoute('save_m', saveScore);
|
||||
MultiRoute('save_c', saveCourse);
|
||||
MultiRoute('save_valgene', saveValgene);
|
||||
MultiRoute('frozen', true);
|
||||
MultiRoute('buy', buy);
|
||||
MultiRoute('print',print);
|
||||
@@ -80,6 +97,16 @@ export function register() {
|
||||
MultiRoute('entry_e', true);
|
||||
MultiRoute('exception', true);
|
||||
MultiRoute('log',log);
|
||||
|
||||
/*
|
||||
print_h
|
||||
sample
|
||||
save_campaign
|
||||
save_fi
|
||||
save_pb
|
||||
save_valgene - DONE
|
||||
serial
|
||||
*/
|
||||
|
||||
R.Route('eventlog.write', (_, __, send) => send.object({
|
||||
gamesession: K.ITEM('s64', BigInt(1)),
|
||||
@@ -100,5 +127,6 @@ export function register() {
|
||||
}));
|
||||
|
||||
|
||||
R.Unhandled();
|
||||
// R.Unhandled();
|
||||
R.Unhandled(unhandledt);
|
||||
}
|
||||
|
||||
@@ -0,0 +1,10 @@
|
||||
export interface Arena {
|
||||
collection: 'arena';
|
||||
|
||||
last_play_season: number;
|
||||
rank_point: number;
|
||||
shop_point: number;
|
||||
ultimate_rate: number;
|
||||
rank_play_cnt: number;
|
||||
ultimate_play_cnt: number;
|
||||
}
|
||||
@@ -43,4 +43,6 @@ export interface Profile {
|
||||
stampD: number;
|
||||
|
||||
boothFrame: number[];
|
||||
|
||||
playCount: number;
|
||||
}
|
||||
|
||||
@@ -86,15 +86,24 @@ game
|
||||
id(__type="s32") #{id}
|
||||
param(__type="s32" __count="1") #{akaname}
|
||||
|
||||
play_count(__type="u32") 1001
|
||||
day_count(__type="u32") 301
|
||||
today_count(__type="u32") 21
|
||||
play_chain(__type="u32") 31
|
||||
max_play_chain(__type="u32") 31
|
||||
week_count(__type="u32") 9
|
||||
week_play_count(__type="u32") 101
|
||||
week_chain(__type="u32") 31
|
||||
max_week_chain(__type="u32") 31
|
||||
if playCount
|
||||
play_count(__type="u32") #{playCount}
|
||||
if dayCount
|
||||
day_count(__type="u32") #{dayCount}
|
||||
if todayCount
|
||||
today_count(__type="u32") #{todayCount}
|
||||
if playChain
|
||||
play_chain(__type="u32") #{playChain}
|
||||
if maxPlayChain
|
||||
max_play_chain(__type="u32") #{maxPlayChain}
|
||||
if weekCount
|
||||
week_count(__type="u32") #{weekCount}
|
||||
if weekPlayCount
|
||||
week_play_count(__type="u32") #{weekPlayCount}
|
||||
if weekChain
|
||||
week_chain(__type="u32") #{weekChain}
|
||||
if maxWeekChain
|
||||
max_week_chain(__type="u32") #{maxWeekChain}
|
||||
|
||||
if mixes
|
||||
each mix in mixes
|
||||
@@ -108,4 +117,13 @@ game
|
||||
distribution_date(__type="u32") 20200101
|
||||
jacket_id(__type="s32") #{mix.jacket}
|
||||
tag_bit(__type="s32") #{mix.tag}
|
||||
like_flg(__type="u8") 0
|
||||
like_flg(__type="u8") 0
|
||||
|
||||
if arena
|
||||
arena
|
||||
ultimate_rate(__type="s32") #{arena.ultimateRate}
|
||||
shop_point(__type="s32") #{arena.shopPoint}
|
||||
rank_point(__type="s32") #{arena.rankPoint}
|
||||
live_energy(__type="s32") #{arena.liveEnergy}
|
||||
rank_play_cnt(__type="s32") #{arena.rankCount}
|
||||
ultimate_play_cnt(__type="s32") #{arena.ultimateCount}
|
||||
|
||||
@@ -30,4 +30,172 @@ export function getRandomIntInclusive(min, max) {
|
||||
min = Math.ceil(min);
|
||||
max = Math.floor(max);
|
||||
return Math.floor(Math.random() * (max - min + 1) + min); //The maximum is inclusive and the minimum is inclusive
|
||||
}
|
||||
|
||||
export const copyResourcesFromGame = async (data: {}) => {
|
||||
let resourceJsonData = JSON.parse(U.DecodeString(await IO.ReadFile('webui\\asset\\json\\data.json'), 'utf8'))
|
||||
let newNemsysData = []
|
||||
let newAPCardData = []
|
||||
let newSubBGData = []
|
||||
|
||||
// Copying new nemsys files from gamedata
|
||||
console.log("Copying new nemsys files from gamedata")
|
||||
let nemsysFiles = await IO.ReadDir(U.GetConfig('sdvx_eg_root_dir') + "\\data\\graphics\\game_nemsys")
|
||||
for await (const nemsys of nemsysFiles) {
|
||||
let fileToWrite = await IO.ReadFile(U.GetConfig('sdvx_eg_root_dir') + "\\data\\graphics\\game_nemsys\\" + nemsys.name)
|
||||
if(!IO.Exists('webui\\asset\\nemsys\\' + nemsys.name.substring(0, (nemsys.name.length - 4)) + ".png") && !IO.Exists('webui\\asset\\nemsys\\' + nemsys.name.substring(0, (nemsys.name.length - 4)) + ".jpg")) {
|
||||
IO.WriteFile('webui\\test_asset\\nemsys\\' + nemsys.name, fileToWrite)
|
||||
newNemsysData.push(nemsys.name)
|
||||
} else {
|
||||
console.log(nemsys.name + " exists")
|
||||
}
|
||||
}
|
||||
|
||||
newNemsysData.forEach(fileName => {
|
||||
if(parseInt(fileName.substring(7, 11))) {
|
||||
resourceJsonData.nemsys.push({"value": parseInt(fileName.substring(7, 11)), "name": fileName + " (please rename)"})
|
||||
}
|
||||
})
|
||||
|
||||
// Copying new appeal card files from gamedata
|
||||
console.log("Copying new appeal card files from gamedata")
|
||||
let apCardFiles = await IO.ReadDir(U.GetConfig('sdvx_eg_root_dir') + "\\data\\graphics\\ap_card")
|
||||
for await (const apCard of apCardFiles) {
|
||||
let fileToWrite = await IO.ReadFile(U.GetConfig('sdvx_eg_root_dir') + "\\data\\graphics\\ap_card\\" + apCard.name)
|
||||
if(!IO.Exists('webui\\asset\\ap_card\\' + apCard.name.substring(0, (apCard.name.length - 4)) + ".png") && !IO.Exists('webui\\asset\\ap_card\\' + apCard.name.substring(0, (apCard.name.length - 4)) + ".jpg")) {
|
||||
IO.WriteFile('webui\\test_asset\\ap_card\\' + apCard.name, fileToWrite)
|
||||
newAPCardData.push(apCard.name)
|
||||
} else {
|
||||
console.log(apCard.name + " exists")
|
||||
}
|
||||
}
|
||||
|
||||
// Copying new subbg files from gamedata
|
||||
console.log("Copying new subbg files from gamedata")
|
||||
let subBGFiles = await IO.ReadDir(U.GetConfig('sdvx_eg_root_dir') + "\\data\\graphics\\submonitor_bg")
|
||||
for await (const subbg of subBGFiles) {
|
||||
let fileToWrite = await IO.ReadFile(U.GetConfig('sdvx_eg_root_dir') + "\\data\\graphics\\submonitor_bg\\" + subbg.name)
|
||||
if(!IO.Exists('webui\\asset\\submonitor_bg\\' + subbg.name.substring(0, (subbg.name.length - 4)) + ".png") && !IO.Exists('webui\\asset\\submonitor_bg\\' + subbg.name.substring(0, (subbg.name.length - 4)) + ".jpg")) {
|
||||
IO.WriteFile('webui\\test_asset\\submonitor_bg\\' + subbg.name, fileToWrite)
|
||||
newSubBGData.push(subbg.name)
|
||||
} else {
|
||||
console.log(subbg.name + " exists")
|
||||
}
|
||||
}
|
||||
|
||||
newSubBGData.forEach(fileName => {
|
||||
if(parseInt(fileName.substring(6, 10))) {
|
||||
resourceJsonData.subbg.push({"value": parseInt(fileName.substring(6, 10)), "name": fileName + " (please rename)"})
|
||||
}
|
||||
})
|
||||
|
||||
await IO.WriteFile('webui\\test_asset\\data.json', JSON.stringify(resourceJsonData))
|
||||
await IO.WriteFile('webui\\asset\\logs\\copyResourcesFromGame.json', JSON.stringify({
|
||||
nemsys: newNemsysData,
|
||||
apCard: newAPCardData,
|
||||
subbg: newSubBGData
|
||||
}))
|
||||
}
|
||||
|
||||
export const generateLatestMusicDBFile = async (data: {}) => {
|
||||
var version = '';
|
||||
IO.ReadFile(U.GetConfig('sdvx_eg_root_dir') + "\\prop\\ea3-config.xml").then(
|
||||
function(value){
|
||||
let configJson = U.parseXML(U.DecodeString(value, "shift_jis"), false)
|
||||
version = configJson['ea3']['soft']['ext']['@content'];
|
||||
},
|
||||
function(error){
|
||||
console.log(error)
|
||||
return null;
|
||||
}
|
||||
);
|
||||
var mdbJson;
|
||||
var mdbJsonFix = [];
|
||||
var mdbJsonFixFinal;
|
||||
var mdb = await IO.ReadFile(U.GetConfig('sdvx_eg_root_dir') + "\\data\\others\\music_db.xml").then(
|
||||
function(value){
|
||||
mdbJson = U.parseXML(U.DecodeString(value, "shift_jis"), false)
|
||||
try {
|
||||
mdbJson.mdb.music.forEach(musicValue => {
|
||||
if(parseInt(musicValue.info.distribution_date['@content'][0]) >= parseInt(version.substring(0,8))) {
|
||||
console.log("Found new song for version " + version + ": " + musicValue.info.title_name['@content'] + " (" + musicValue.info.distribution_date['@content'] + ")");
|
||||
}
|
||||
mdbJsonFix.push({
|
||||
'@id': musicValue['@attr'].id,
|
||||
'info': {
|
||||
'title_name': musicValue.info.title_name['@content'],
|
||||
'version': {
|
||||
'@__type': 'u8',
|
||||
'#text': musicValue.info.version['@content'][0].toString()
|
||||
},
|
||||
'inf_ver': {
|
||||
'@__type': 'u8',
|
||||
'#text': musicValue.info.inf_ver['@content'][0].toString()
|
||||
},
|
||||
'distribution_date' : {
|
||||
'#text': musicValue.info.distribution_date['@content'][0]
|
||||
}
|
||||
},
|
||||
'difficulty': {
|
||||
'novice': {
|
||||
'difnum': {
|
||||
'@__type': 'u8',
|
||||
'#text': musicValue.difficulty.novice.difnum['@content'][0].toString()
|
||||
}
|
||||
},
|
||||
'advanced': {
|
||||
'difnum': {
|
||||
'@__type': 'u8',
|
||||
'#text': musicValue.difficulty.advanced.difnum['@content'][0].toString()
|
||||
}
|
||||
},
|
||||
'exhaust': {
|
||||
'difnum': {
|
||||
'@__type': 'u8',
|
||||
'#text': musicValue.difficulty.exhaust.difnum['@content'][0].toString()
|
||||
}
|
||||
},
|
||||
'maximum': {
|
||||
'difnum': {
|
||||
'@__type': 'u8',
|
||||
'#text': musicValue.difficulty.maximum != undefined ? musicValue.difficulty.maximum.difnum['@content'][0].toString() : '0'
|
||||
}
|
||||
},
|
||||
'infinite': {
|
||||
'difnum': {
|
||||
'@__type': 'u8',
|
||||
'#text': musicValue.difficulty.infinite != undefined ? musicValue.difficulty.infinite.difnum['@content'][0].toString() : '0'
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
})
|
||||
} catch (err) {
|
||||
console.log(err)
|
||||
}
|
||||
|
||||
try{
|
||||
mdbJsonFixFinal = {
|
||||
'mdb': {
|
||||
'version': version,
|
||||
'music': mdbJsonFix
|
||||
}
|
||||
};
|
||||
IO.WriteFile('webui\\asset\\json\\music_db.json', JSON.stringify(mdbJsonFixFinal));
|
||||
if(!IO.Exists('webui\\asset\\json\\music_db_' + version + '.json')){
|
||||
IO.WriteFile('webui\\asset\\json\\music_db_' + version + '.json', JSON.stringify(mdbJsonFixFinal));
|
||||
}
|
||||
} catch(err) {
|
||||
console.log(err)
|
||||
}
|
||||
|
||||
return mdbJsonFixFinal;
|
||||
},
|
||||
function(error){
|
||||
console.log(error);
|
||||
return null;
|
||||
}
|
||||
);
|
||||
console.log(mdb.mdb.version)
|
||||
return mdb;
|
||||
}
|
||||
@@ -0,0 +1,22 @@
|
||||
//DATA//
|
||||
sdvx_dir: U.GetConfig('sdvx_eg_root_dir')
|
||||
-
|
||||
div
|
||||
.card
|
||||
.card-header
|
||||
p.card-header-title
|
||||
span.icon
|
||||
i.mdi.mdi-account-edit
|
||||
| Update WebUI Resources (pull from game files)
|
||||
.card-content
|
||||
.field
|
||||
button.button.is-primary(type="update" id="updateResources")
|
||||
span.icon
|
||||
i.mdi.mdi-check
|
||||
span Update
|
||||
.field
|
||||
textarea(style="width: 100%; height: 100%; background: #4a4a4a; color: #ffffff; border-radius: 6px; padding: 5px; font-size: 15px" rows="50" id="logtextarea" name="logtextarea")
|
||||
|
||||
script(src="https://requirejs.org/docs/release/2.3.5/minified/require.js")
|
||||
script(type="text/javascript" src="static/asset/js/updateResources.js")
|
||||
div(hidden id='sdvx-dir') !{sdvx_dir}
|
||||
@@ -103,6 +103,8 @@ function getDifficulty(musicid, type) {
|
||||
return "HVN";
|
||||
case "5":
|
||||
return "VVD";
|
||||
case "6":
|
||||
return "XCD";
|
||||
}
|
||||
}
|
||||
case 4:
|
||||
|
||||
@@ -201,7 +201,7 @@ function calculateVolforce() {
|
||||
return toFixed(VF, 3);
|
||||
}
|
||||
|
||||
var diffName = ["NOV", "ADV", "EXH", "INF\nGRV\nHVN\nVVD", "MXM"];
|
||||
var diffName = ["NOV", "ADV", "EXH", "INF\nGRV\nHVN\nVVD\nXCD", "MXM"];
|
||||
|
||||
function preSetTableMark(type) {
|
||||
$('#statistic-table').empty();
|
||||
|
||||
@@ -38,8 +38,8 @@ $('[name="bgm"]').change(function() {
|
||||
$('#custom_0').attr("src", "static/asset/audio/custom_" + zeroPad($('[name="bgm"]').val(), 2) + "/0.mp3");
|
||||
$('#custom_1').attr("src", "static/asset/audio/custom_" + zeroPad($('[name="bgm"]').val(), 2) + "/1.mp3");
|
||||
if ($('[name="bgm"]').val() == 99) {
|
||||
$('#custom_0').attr("src", "static/asset/audio/special_00/0.m4a");
|
||||
$('#custom_1').attr("src", "static/asset/audio/custom_00/1.m4a");
|
||||
$('#custom_0').attr("src", "static/asset/audio/special_00/0.mp3");
|
||||
$('#custom_1').attr("src", "static/asset/audio/custom_00/1.mp3");
|
||||
}
|
||||
$('#custom_0').prop("volume", 0.5);
|
||||
$('#custom_1').prop("volume", 0.2);
|
||||
@@ -124,6 +124,13 @@ var play_bgm = false;
|
||||
var play_sel = false;
|
||||
$(document).ready(function() {
|
||||
profile_data = JSON.parse(document.getElementById("data-pass").innerText);
|
||||
items_crew = JSON.parse(document.getElementById("data-pass-crew").innerText);
|
||||
items_stamp = JSON.parse(document.getElementById("data-pass-stamp").innerText);
|
||||
items_subbg = JSON.parse(document.getElementById("data-pass-subbg").innerText);
|
||||
items_bgm = JSON.parse(document.getElementById("data-pass-bgm").innerText);
|
||||
items_nemsys = JSON.parse(document.getElementById("data-pass-nemsys").innerText);
|
||||
unlock_all = (document.getElementById("data-pass-unlock-all").innerText === 'true');
|
||||
console.log(unlock_all);
|
||||
|
||||
$.getJSON("static/asset/json/data.json", function(json) {
|
||||
database = json;
|
||||
@@ -132,47 +139,54 @@ $(document).ready(function() {
|
||||
//console.log(profile_data);
|
||||
|
||||
for (var i in json["nemsys"]) {
|
||||
$('#nemsys_select').append($('<option>', {
|
||||
value: json["nemsys"][i].value,
|
||||
text: json["nemsys"][i].name,
|
||||
}));
|
||||
var image = new Image();
|
||||
if (json["nemsys"][i].value != 30) {
|
||||
image.src = "static/asset/nemsys/nemsys_" + zeroPad(json["nemsys"][i].value, 4) + ".png";
|
||||
} else {
|
||||
image.src = "static/asset/nemsys/nemsys_aprilfool.png";
|
||||
if(unlock_all || (json["nemsys"][i].value === 0 || items_nemsys.find(x => x.id === json["nemsys"][i].value))) {
|
||||
$('#nemsys_select').append($('<option>', {
|
||||
value: json["nemsys"][i].value,
|
||||
text: json["nemsys"][i].name,
|
||||
}));
|
||||
var image = new Image();
|
||||
if (json["nemsys"][i].value != 30) {
|
||||
image.src = "static/asset/nemsys/nemsys_" + zeroPad(json["nemsys"][i].value, 4) + ".png";
|
||||
} else {
|
||||
image.src = "static/asset/nemsys/nemsys_aprilfool.png";
|
||||
}
|
||||
//console.log(profile_data["nemsys"])
|
||||
}
|
||||
//console.log(profile_data["nemsys"])
|
||||
|
||||
}
|
||||
$('#nemsys_select').val(profile_data["nemsys"]);
|
||||
|
||||
for (var i in json["subbg"]) {
|
||||
$('[name="subbg"]').append($('<option>', {
|
||||
value: json["subbg"][i].value,
|
||||
text: json["subbg"][i].name,
|
||||
}));
|
||||
var image = new Image();
|
||||
image.src = "static/asset/submonitor_bg/subbg_" + zeroPad(json["subbg"][i].value, 4) + ".jpg";
|
||||
// console.log(image);
|
||||
//console.log(profile_data["subbg"])
|
||||
if(unlock_all || (json["subbg"][i].value === 0 || items_subbg.find(x => x.id === json["subbg"][i].value))) {
|
||||
$('[name="subbg"]').append($('<option>', {
|
||||
value: json["subbg"][i].value,
|
||||
text: json["subbg"][i].name,
|
||||
}));
|
||||
var image = new Image();
|
||||
image.src = "static/asset/submonitor_bg/subbg_" + zeroPad(json["subbg"][i].value, 4) + ".jpg";
|
||||
// console.log(image);
|
||||
//console.log(profile_data["subbg"])
|
||||
}
|
||||
}
|
||||
$('[name="subbg"]').val(profile_data["subbg"]);
|
||||
|
||||
for (var i in json["bgm"]) {
|
||||
$('[name="bgm"]').append($('<option>', {
|
||||
value: json["bgm"][i].value,
|
||||
text: json["bgm"][i].name,
|
||||
}));
|
||||
var audio = new Audio();
|
||||
var audio1 = new Audio();
|
||||
if (json["bgm"][i].value == 99) {
|
||||
audio.src = "static/asset/audio/special_00/0.mp3"
|
||||
} else {
|
||||
audio.src = "static/asset/audio/custom_" + zeroPad(json["bgm"][i].value, 2) + "/0.mp3"
|
||||
audio1.src = "static/asset/audio/custom_" + zeroPad(json["bgm"][i].value, 2) + "/1.mp3"
|
||||
}
|
||||
if(unlock_all || (json["bgm"][i].value === 0 || items_bgm.find(x => parseInt(x.id) === parseInt(json["bgm"][i].value)))) {
|
||||
$('[name="bgm"]').append($('<option>', {
|
||||
value: json["bgm"][i].value,
|
||||
text: json["bgm"][i].name,
|
||||
}));
|
||||
var audio = new Audio();
|
||||
var audio1 = new Audio();
|
||||
if (json["bgm"][i].value == 99) {
|
||||
audio.src = "static/asset/audio/special_00/0.mp3"
|
||||
} else {
|
||||
audio.src = "static/asset/audio/custom_" + zeroPad(json["bgm"][i].value, 2) + "/0.mp3"
|
||||
audio1.src = "static/asset/audio/custom_" + zeroPad(json["bgm"][i].value, 2) + "/1.mp3"
|
||||
}
|
||||
|
||||
//console.log(profile_data["bgm"])
|
||||
//console.log(profile_data["bgm"])
|
||||
}
|
||||
}
|
||||
$('[name="bgm"]').val(profile_data["bgm"]);
|
||||
|
||||
@@ -186,35 +200,37 @@ $(document).ready(function() {
|
||||
$('[name="akaname"]').val(profile_data["akaname"]);
|
||||
|
||||
for (var i in json["stamp"]) {
|
||||
$('[name="stampA"]').append($('<option>', {
|
||||
value: json["stamp"][i].value,
|
||||
text: json["stamp"][i].name,
|
||||
}));
|
||||
$('[name="stampA"]').val(profile_data["stampA"]);
|
||||
if(unlock_all || (json["stamp"][i].value === 0 || items_stamp.find(x => x.id === json["stamp"][i].value))) {
|
||||
$('[name="stampA"]').append($('<option>', {
|
||||
value: json["stamp"][i].value,
|
||||
text: json["stamp"][i].name,
|
||||
}));
|
||||
$('[name="stampA"]').val(profile_data["stampA"]);
|
||||
|
||||
$('[name="stampB"]').append($('<option>', {
|
||||
value: json["stamp"][i].value,
|
||||
text: json["stamp"][i].name,
|
||||
}));
|
||||
$('[name="stampB"]').val(profile_data["stampB"]);
|
||||
$('[name="stampB"]').append($('<option>', {
|
||||
value: json["stamp"][i].value,
|
||||
text: json["stamp"][i].name,
|
||||
}));
|
||||
$('[name="stampB"]').val(profile_data["stampB"]);
|
||||
|
||||
$('[name="stampC"]').append($('<option>', {
|
||||
value: json["stamp"][i].value,
|
||||
text: json["stamp"][i].name,
|
||||
}));
|
||||
$('[name="stampC"]').val(profile_data["stampC"]);
|
||||
$('[name="stampC"]').append($('<option>', {
|
||||
value: json["stamp"][i].value,
|
||||
text: json["stamp"][i].name,
|
||||
}));
|
||||
$('[name="stampC"]').val(profile_data["stampC"]);
|
||||
|
||||
$('[name="stampD"]').append($('<option>', {
|
||||
value: json["stamp"][i].value,
|
||||
text: json["stamp"][i].name,
|
||||
}));
|
||||
$('[name="stampD"]').val(profile_data["stampD"]);
|
||||
var group = Math.trunc((json["stamp"][i].value - 1) / 4 + 1);
|
||||
var item = json["stamp"][i].value % 4;
|
||||
if (item == 0) item = 4;
|
||||
var image = new Image();
|
||||
$('[name="stampD"]').append($('<option>', {
|
||||
value: json["stamp"][i].value,
|
||||
text: json["stamp"][i].name,
|
||||
}));
|
||||
$('[name="stampD"]').val(profile_data["stampD"]);
|
||||
var group = Math.trunc((json["stamp"][i].value - 1) / 4 + 1);
|
||||
var item = json["stamp"][i].value % 4;
|
||||
if (item == 0) item = 4;
|
||||
var image = new Image();
|
||||
|
||||
image.src = "static/asset/chat_stamp/stamp_" + zeroPad(group, 4) + "/stamp_" + zeroPad(group, 4) + "_" + zeroPad(item, 2) + ".png";
|
||||
image.src = "static/asset/chat_stamp/stamp_" + zeroPad(group, 4) + "/stamp_" + zeroPad(group, 4) + "_" + zeroPad(item, 2) + ".png";
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
|
||||
@@ -16,6 +16,15 @@ function getSongName(musicid) {
|
||||
//console.log(result);
|
||||
}
|
||||
|
||||
function getReleaseDate(musicid) {
|
||||
//console.log(music_db["mdb"]["music"])
|
||||
//console.log(musicid+" "+type);
|
||||
var result = music_db["mdb"]["music"].filter(object => object["@id"] == musicid);
|
||||
return result[0]["info"]["distribution_date"]["#text"]
|
||||
//console.log(result);
|
||||
}
|
||||
|
||||
|
||||
function getDifficulty(musicid, type) {
|
||||
var result = music_db["mdb"]["music"].filter(object => object["@id"] == musicid);
|
||||
if (result.length == 0) {
|
||||
@@ -41,6 +50,8 @@ function getDifficulty(musicid, type) {
|
||||
return "HVN";
|
||||
case "5":
|
||||
return "VVD";
|
||||
case "6":
|
||||
return "XCD"
|
||||
}
|
||||
}
|
||||
case 4:
|
||||
@@ -109,8 +120,10 @@ function difficultySort(d) {
|
||||
return 6;
|
||||
case "VVD":
|
||||
return 7;
|
||||
case "MXM":
|
||||
case "XCD":
|
||||
return 8;
|
||||
case "MXM":
|
||||
return 9;
|
||||
}
|
||||
return 0;
|
||||
};
|
||||
@@ -223,6 +236,7 @@ $(document).ready(function() {
|
||||
temp_data.mid = profile_data[i].mid;
|
||||
temp_data.songname = getSongName(profile_data[i].mid);
|
||||
temp_data.diff = getDifficulty(profile_data[i].mid, profile_data[i].type);
|
||||
temp_data.releasedate = getReleaseDate(profile_data[i].mid);
|
||||
temp_data.score = profile_data[i].score;
|
||||
temp_data.exscore = ((profile_data[i].exscore) ? profile_data[i].exscore : 0);
|
||||
temp_data.grade = getGrade(profile_data[i].grade);
|
||||
@@ -246,6 +260,7 @@ $(document).ready(function() {
|
||||
{ data: 'mid' },
|
||||
{ data: 'songname' },
|
||||
{ data: 'diff', "type": "diff" },
|
||||
{ data: 'releasedate'},
|
||||
{ data: 'score', },
|
||||
{ data: 'exscore' },
|
||||
{ data: 'grade', "type": "grade" },
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
function getInfDifficulty(inf_ver) {
|
||||
switch (inf_ver) {
|
||||
case "2":
|
||||
return "INF";
|
||||
case "3":
|
||||
return "GRV";
|
||||
case "4":
|
||||
return "HVN";
|
||||
case "5":
|
||||
return "VVD";
|
||||
case "6":
|
||||
return "XCD"
|
||||
}
|
||||
}
|
||||
$(document).ready(function() {
|
||||
courseData = musicDB = []
|
||||
versionCourseData = []
|
||||
courseLevels = []
|
||||
specificCourse = []
|
||||
selectedVersion = selectedCourseLevel = selectedSpecificCourse = null
|
||||
$.getJSON('static/asset/json/course_data.json', function(json) {
|
||||
courseData = json;
|
||||
})
|
||||
$.getJSON("static/asset/json/music_db.json", function(json) {
|
||||
musicDB = json;
|
||||
});
|
||||
|
||||
$('#savebutton').click(function(){
|
||||
|
||||
})
|
||||
|
||||
$('#sdvx-version').change(function(){
|
||||
$('#skill-course').find('option').not(':first').remove();
|
||||
$('#skill-course-level').find('option').not(':first').remove();
|
||||
$('.track-name').val('');
|
||||
$('.track-id').val('');
|
||||
$('.track-difficulty').val('');
|
||||
if(this.value != '-- Select --'){
|
||||
selectedVersion = parseInt(this.value);
|
||||
selectedCourseLevel = null;
|
||||
selectedSpecificCourse = null;
|
||||
versionCourseData = courseData.courseData.find(data => parseInt(data['version']) === selectedVersion).info;
|
||||
courseLevels = []
|
||||
specificCourse = []
|
||||
versionCourseData.forEach(function(item, index){
|
||||
item.courses.forEach(function(item2, index2) {
|
||||
if(!courseLevels.some(course => course.includes(item2['name']))) courseLevels.push([item2['name'], item2['id']]);
|
||||
})
|
||||
});
|
||||
|
||||
$.each(courseLevels, function() {
|
||||
$('#skill-course').append("<option value=" + this[1] + ">" + this[0] + "</>");
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
$('#skill-course').change(function(){
|
||||
$('#skill-course-level').find('option').not(':first').remove();
|
||||
$('.track-name').val('');
|
||||
$('.track-id').val('');
|
||||
$('.track-difficulty').val('');
|
||||
if(this.value != '-- Select --'){
|
||||
selectedCourseLevel = parseInt(this.value);
|
||||
selectedSpecificCourse = null;
|
||||
specificCourse = []
|
||||
versionCourseData.forEach(function(item, index){
|
||||
item.courses.forEach(function(item2, index2) {
|
||||
if(!specificCourse.some(course => course.includes(item['name'])) && item2['id'] == selectedCourseLevel){
|
||||
console.log(item['name'] + " included in " + selectedCourseLevel + " in " + selectedVersion)
|
||||
specificCourse.push([item['name'], item['id']])
|
||||
}
|
||||
})
|
||||
});
|
||||
$.each(specificCourse, function() {
|
||||
console.log(specificCourse)
|
||||
$('#skill-course-level').append("<option value=" + this[1] + ">" + this[0] + "</>");
|
||||
});
|
||||
}
|
||||
})
|
||||
|
||||
$('#skill-course-level').change(function(){
|
||||
if(this.value != '-- Select --'){
|
||||
selectedSpecificCourse = parseInt(this.value);
|
||||
theCourse = versionCourseData.find(data => data.id === selectedSpecificCourse).courses
|
||||
.find(data => data.id === selectedCourseLevel).tracks;
|
||||
trackIndex = 0;
|
||||
difficultyLabels = ['Novice', 'Advanced', 'Exhaust', 'Inf/Grv/Hvn/Vvd/Xcd', 'Maximum']
|
||||
infLabel = ['0', '1', 'Infinite', 'Gravity', 'Heavenly', 'Vivid', 'Exceed']
|
||||
musicDBDifficultyLabel = ['novice', 'advanced', 'exhaust', 'infinite', 'maximum']
|
||||
theCourse.forEach(function(courseTrack){
|
||||
track = musicDB.mdb.music.find(data => parseInt(courseTrack.mid) === parseInt(data['@id']))
|
||||
// console.log(courseTrack.mty)
|
||||
if(courseTrack.mty == 3) {
|
||||
difficultyLabel = infLabel[parseInt(track.info.inf_ver['#text'])]
|
||||
} else {
|
||||
difficultyLabel = difficultyLabels[courseTrack.mty]
|
||||
}
|
||||
console.log(courseTrack.mid)
|
||||
$(".track-id").eq(trackIndex).val(track['@id'])
|
||||
$(".track-name").eq(trackIndex).val(track.info.title_name)
|
||||
$(".track-name").eq(trackIndex).attr('track-id', track['@id'])
|
||||
$('.track-difficulty').eq(trackIndex).find('option').not(':first').remove();
|
||||
$(".track-difficulty").eq(trackIndex).append("<option value=" + 0 + ">" + difficultyLabels[0] + ' (' + track.difficulty['novice'].difnum['#text'] + ")</option>")
|
||||
$(".track-difficulty").eq(trackIndex).append("<option value=" + 1 + ">" + difficultyLabels[1] + ' (' + track.difficulty['advanced'].difnum['#text'] + ")</option>")
|
||||
$(".track-difficulty").eq(trackIndex).append("<option value=" + 2 + ">" + difficultyLabels[2] + ' (' + track.difficulty['exhaust'].difnum['#text'] + ")</option>")
|
||||
if(track.difficulty['maximum'].difnum['#text'] != '0' || track.difficulty['infinite'].difnum['#text'] != '0'){
|
||||
$(".track-difficulty").eq(trackIndex).append("<option value=" + ((courseTrack.mty == 3) ? 3 : 4) + ">" + (track.difficulty['infinite'].difnum['#text'] != '0' ? infLabel[parseInt(track.info.inf_ver['#text'])] : difficultyLabels[4]) + ' (' + (track.difficulty['infinite'].difnum['#text'] != '0' ? track.difficulty['infinite'].difnum['#text'] : track.difficulty['maximum'].difnum['#text']) + ")</option>")
|
||||
}
|
||||
$(".track-difficulty").eq(trackIndex).val(courseTrack.mty)
|
||||
$(".track-difficulty").eq(trackIndex).attr('diff-id', courseTrack.mty)
|
||||
trackIndex++;
|
||||
})
|
||||
}
|
||||
})
|
||||
|
||||
$('.track-id').on('input', function(){
|
||||
searchTrackID = parseInt(this.value);
|
||||
var that_ = this;
|
||||
var currentIndex = $('.track-id').index(that_);
|
||||
difficultyLabels = ['Novice', 'Advanced', 'Exhaust', 'Inf/Grv/Hvn/Vvd/Xcd', 'Maximum']
|
||||
infLabel = ['0', '1', 'Infinite', 'Gravity', 'Heavenly', 'Vivid', 'Exceed']
|
||||
musicDBDifficultyLabel = ['novice', 'advanced', 'exhaust', 'infinite', 'maximum']
|
||||
track = musicDB.mdb.music.find(data => searchTrackID === parseInt(data['@id']))
|
||||
if(track){
|
||||
$(".track-name").eq(currentIndex).val(track.info.title_name)
|
||||
$(".track-name").eq(currentIndex).attr('track-id', track['@id'])
|
||||
$('.track-difficulty').eq(currentIndex).find('option').not(':first').remove();
|
||||
$(".track-difficulty").eq(currentIndex).append("<option value=" + 0 + ">" + difficultyLabels[0] + ' (' + track.difficulty['novice'].difnum['#text'] + ")</option>")
|
||||
$(".track-difficulty").eq(currentIndex).append("<option value=" + 1 + ">" + difficultyLabels[1] + ' (' + track.difficulty['advanced'].difnum['#text'] + ")</option>")
|
||||
$(".track-difficulty").eq(currentIndex).append("<option value=" + 2 + ">" + difficultyLabels[2] + ' (' + track.difficulty['exhaust'].difnum['#text'] + ")</option>")
|
||||
if(track.difficulty['maximum'].difnum['#text'] != '0' || track.difficulty['infinite'].difnum['#text'] != '0'){
|
||||
$(".track-difficulty").eq(currentIndex).append("<option value=" + ((parseInt(track.info.inf_ver['#text']) != 0) ? 3 : 4) + ">" + (track.difficulty['infinite'].difnum['#text'] != '0' ? infLabel[parseInt(track.info.inf_ver['#text'])] : difficultyLabels[4]) + ' (' + (track.difficulty['infinite'].difnum['#text'] != '0' ? track.difficulty['infinite'].difnum['#text'] : track.difficulty['maximum'].difnum['#text']) + ")</option>")
|
||||
}
|
||||
$(".track-difficulty").eq(currentIndex).val('-- Select --')
|
||||
$(".track-difficulty").eq(currentIndex).attr('diff-id', 0)
|
||||
} else {
|
||||
$(".track-name").eq(currentIndex).val('')
|
||||
$(".track-name").eq(currentIndex).attr('track-id', 0)
|
||||
$('.track-difficulty').eq(currentIndex).find('option').not(':first').remove();
|
||||
}
|
||||
})
|
||||
})
|
||||
@@ -0,0 +1,130 @@
|
||||
function getInfDifficulty(inf_ver) {
|
||||
switch (inf_ver) {
|
||||
case "2":
|
||||
return "INF";
|
||||
case "3":
|
||||
return "GRV";
|
||||
case "4":
|
||||
return "HVN";
|
||||
case "5":
|
||||
return "VVD";
|
||||
case "6":
|
||||
return "XCD"
|
||||
}
|
||||
}
|
||||
$(document).ready(function() {
|
||||
// jQuery.fn.dataTableExt.oSort['diff-asc'] = function(a, b) {
|
||||
// var x = difficultySort(a);
|
||||
// var y = difficultySort(b);
|
||||
|
||||
// return ((x < y) ? -1 : ((x > y) ? 1 : 0));
|
||||
// };
|
||||
|
||||
// jQuery.fn.dataTableExt.oSort['diff-desc'] = function(a, b) {
|
||||
// var x = difficultySort(a);
|
||||
// var y = difficultySort(b);
|
||||
|
||||
// return ((x < y) ? 1 : ((x > y) ? -1 : 0));
|
||||
// };
|
||||
|
||||
// jQuery.fn.dataTableExt.oSort['grade-asc'] = function(a, b) {
|
||||
// var x = gradeSort(a);
|
||||
// var y = gradeSort(b);
|
||||
|
||||
// return ((x < y) ? -1 : ((x > y) ? 1 : 0));
|
||||
// };
|
||||
|
||||
// jQuery.fn.dataTableExt.oSort['grade-desc'] = function(a, b) {
|
||||
// var x = gradeSort(a);
|
||||
// var y = gradeSort(b);
|
||||
|
||||
// return ((x < y) ? 1 : ((x > y) ? -1 : 0));
|
||||
// };
|
||||
|
||||
// jQuery.fn.dataTableExt.oSort['clear-mark-asc'] = function(a, b) {
|
||||
// var x = markSort(a);
|
||||
// var y = markSort(b);
|
||||
|
||||
// return ((x < y) ? -1 : ((x > y) ? 1 : 0));
|
||||
// };
|
||||
|
||||
// jQuery.fn.dataTableExt.oSort['clear-mark-desc'] = function(a, b) {
|
||||
// var x = markSort(a);
|
||||
// var y = markSort(b);
|
||||
|
||||
// return ((x < y) ? 1 : ((x > y) ? -1 : 0));
|
||||
// };
|
||||
// var profile_data = JSON.parse(document.getElementById("data-pass").innerText);
|
||||
// profile_data = profile_data.sort(function(a, b) {
|
||||
// if (a.mid > b.mid) return 1;
|
||||
// if (a.mid < b.mid) return -1;
|
||||
// return a.type > b.type ? 1 : -1;
|
||||
// });
|
||||
|
||||
//console.log(profile_data);
|
||||
//$('#music_score').DataTable();
|
||||
|
||||
$.getJSON("static/asset/json/music_db.json", function(json) {
|
||||
music_db = json;
|
||||
var music_data = [];
|
||||
for (let mdata in music_db.mdb.music) {
|
||||
var temp_data = {};
|
||||
temp_data.mid = music_db.mdb.music[mdata]['@id'];
|
||||
temp_data.songname = music_db.mdb.music[mdata]['info']['title_name'];
|
||||
temp_data.releasedate = music_db.mdb.music[mdata]['info']['distribution_date']['#text'];
|
||||
temp_data.nov = "";
|
||||
temp_data.adv = "";
|
||||
temp_data.exh = "";
|
||||
temp_data.mxm = "";
|
||||
temp_data.oth = "";
|
||||
if (music_db.mdb.music[mdata]['difficulty']['novice']['difnum']['#text'] != 0) {
|
||||
temp_data.nov = music_db.mdb.music[mdata]['difficulty']['novice']['difnum']['#text']
|
||||
}
|
||||
if (music_db.mdb.music[mdata]['difficulty']['advanced']['difnum']['#text'] != 0) {
|
||||
temp_data.adv = music_db.mdb.music[mdata]['difficulty']['advanced']['difnum']['#text']
|
||||
}
|
||||
if (music_db.mdb.music[mdata]['difficulty']['exhaust']['difnum']['#text'] != 0) {
|
||||
temp_data.exh = music_db.mdb.music[mdata]['difficulty']['exhaust']['difnum']['#text']
|
||||
}
|
||||
if (music_db.mdb.music[mdata]['difficulty']['maximum']['difnum']['#text'] != 0) {
|
||||
temp_data.mxm = music_db.mdb.music[mdata]['difficulty']['maximum']['difnum']['#text']
|
||||
}
|
||||
if (music_db.mdb.music[mdata]['info']['inf_ver']['#text'] != 0) {
|
||||
temp_data.oth = music_db.mdb.music[mdata]['difficulty']['infinite']['difnum']['#text'] + ' | ' + getInfDifficulty(music_db.mdb.music[mdata]['info']['inf_ver']['#text'])
|
||||
}
|
||||
music_data.push(temp_data);
|
||||
}
|
||||
|
||||
$('#songslist').DataTable({
|
||||
data: music_data,
|
||||
columns: [
|
||||
{ data: 'mid' },
|
||||
{ data: 'songname' },
|
||||
{ data: 'releasedate' },
|
||||
{ data: 'nov', },
|
||||
{ data: 'adv' },
|
||||
{ data: 'exh' },
|
||||
{ data: 'mxm' },
|
||||
{ data: 'oth' }
|
||||
],
|
||||
columnDefs: [
|
||||
|
||||
],
|
||||
responsive: {
|
||||
details: {
|
||||
display: $.fn.dataTable.Responsive.display.modal({
|
||||
header: function(row) {
|
||||
var data = row.data();
|
||||
return 'Details for ' + data.songname;
|
||||
}
|
||||
})
|
||||
}
|
||||
},
|
||||
|
||||
});
|
||||
|
||||
|
||||
});
|
||||
|
||||
|
||||
})
|
||||
@@ -0,0 +1,55 @@
|
||||
// data\graphics\game_nemsys -- nemsys
|
||||
// data\graphics\ap_card -- appeal card
|
||||
// data\graphics\submonitor_bg -- subbg
|
||||
$(document).ready(async function() {
|
||||
let sdvxDir = document.getElementById("sdvx-dir").innerText
|
||||
$( "#updateResources" ).click(async function() {
|
||||
answer = confirm("Clicking OK would mean that you have already updated the datecode in your ea3-config.xml file. Would you like to proceed?");
|
||||
if (answer == true) {
|
||||
document.getElementById("logtextarea").textContent = ''
|
||||
document.getElementById("logtextarea").textContent = 'Updating music_db.json file....\n'
|
||||
await emit("generateLatestMusicDBFile").then(
|
||||
function(response) {
|
||||
$.getJSON( "static/asset/json/music_db.json", function( data ) {
|
||||
document.getElementById("logtextarea").textContent += "New songs found in version " + data['mdb']['version'] + ": \n";
|
||||
$.each( data['mdb']['music'], function( key, val ) {
|
||||
if(parseInt(val.info.distribution_date['#text']) >= parseInt(data['mdb']['version'].substring(0,8))){
|
||||
document.getElementById("logtextarea").textContent += val.info.distribution_date['#text'] + " - " + val.info.title_name + "\n";
|
||||
}
|
||||
});
|
||||
document.getElementById("logtextarea").textContent += '\n\n'
|
||||
});
|
||||
},
|
||||
function(error) {
|
||||
document.getElementById("logtextarea").textContent += error + "\n";
|
||||
document.getElementById("logtextarea").textContent += "Please check if 'Exceed Gear Data Directory' is configured properly." + "\n";
|
||||
}
|
||||
);
|
||||
|
||||
await emit("copyResourcesFromGame").then(
|
||||
function(response){
|
||||
$.getJSON( "static/asset/logs/copyResourcesFromGame.json", function( data ) {
|
||||
document.getElementById("logtextarea").textContent += 'New nemsys: \n'
|
||||
$.each(data['nemsys'], function(key, val) {
|
||||
document.getElementById("logtextarea").textContent += val + '\n'
|
||||
})
|
||||
document.getElementById("logtextarea").textContent += '\n\n'
|
||||
document.getElementById("logtextarea").textContent += 'New appeal cards: \n'
|
||||
$.each(data['apCard'], function(key, val) {
|
||||
document.getElementById("logtextarea").textContent += val + '\n'
|
||||
})
|
||||
document.getElementById("logtextarea").textContent += '\n\n'
|
||||
document.getElementById("logtextarea").textContent += 'New submonitor backgrounds: \n'
|
||||
$.each(data['subbg'], function(key, val) {
|
||||
document.getElementById("logtextarea").textContent += val + '\n'
|
||||
})
|
||||
document.getElementById("logtextarea").textContent += '\n\n'
|
||||
})
|
||||
},
|
||||
function(error){
|
||||
console.log(error);
|
||||
}
|
||||
)
|
||||
}
|
||||
});
|
||||
})
|
||||
@@ -0,0 +1 @@
|
||||
{"nemsys":["nemsys_0008.png","nemsys_0009.png","nemsys_0011.png","nemsys_0021.png","nemsys_0022.png","nemsys_0023.png","nemsys_0024.png","nemsys_0025.png","nemsys_0026.png","nemsys_0027.png","nemsys_0028.png","nemsys_0029.png","nemsys_0030.png","nemsys_0031.png"],"apCard":["ap_06_R0002.png","ap_06_R0003.png","ap_06_R0004.png","ap_06_R0005.png","ap_06_R0006.png","ap_06_R0007.png","ap_06_R0008.png","ap_06_R0009.png","ap_06_R0010.png","ap_06_R0011.png"],"subbg":["subbg_0103.png","subbg_0104.png","subbg_0105.png","subbg_0106.png","subbg_0107.png","subbg_0108.png","subbg_0109.png","subbg_0110.png","subbg_0111.png","subbg_0112.png","subbg_0113.png","subbg_0114.png","subbg_0115.png","subbg_0116.png","subbg_0117.png","subbg_0118.png","subbg_0119.png","subbg_0120.png","subbg_0121.png","subbg_0122.png","subbg_0123.png","subbg_0124.png","subbg_0125.png","subbg_0126.png","subbg_0127.png","subbg_0128.png","subbg_0129.png","subbg_0130.png","subbg_0131.png","subbg_0132.png","subbg_0133.png","subbg_0134.png","subbg_0135.png","subbg_0136.png","subbg_0137.png","subbg_0138.png","subbg_0139.png","subbg_0140.png","subbg_0141.png","subbg_0142.png","subbg_0143.png","subbg_0144.png","subbg_0145.png","subbg_0146.png","subbg_0147.png","subbg_0148.png","subbg_0149.png","subbg_0150.png","subbg_0151.png","submonitor_bg.ifs"]}
|
||||
@@ -1,6 +1,18 @@
|
||||
//DATA//
|
||||
profile: DB.FindOne(refid, { collection: 'profile' })
|
||||
|
||||
items_crew: DB.Find(refid, {$or:[{collection:"item",type:11,id:117}, {collection:"item",type:11,id:119}, {collection:"item",type:11,id:120}, {collection:"item",type:11,id:121}, {collection:"item",type:11,id:124}, {collection:"item",type:11,id:129}]})
|
||||
|
||||
items_stamp: DB.Find(refid, { collection:"item",type:17 })
|
||||
|
||||
items_subbg: DB.Find(refid, { collection:"item",type:18 })
|
||||
|
||||
items_bgm: DB.Find(refid, { collection:"item",type:19 })
|
||||
|
||||
items_nemsys: DB.Find(refid, { collection:"item",type:20 })
|
||||
|
||||
unlock_all: U.GetConfig('unlock_all_valk_items')
|
||||
|
||||
-
|
||||
const padded = _.padStart(profile.id.toString(), 8);
|
||||
const sdvxid = `${padded.slice(0, 4)}-${padded.slice(4)}`;
|
||||
@@ -160,4 +172,10 @@ div
|
||||
.tild.is-child
|
||||
a(href="static/asset/nemsys/custom_nemsys.xml" download="custom_nemsys.xml") custom_nemsys.xml download
|
||||
div(hidden id='data-pass') !{JSON.stringify(profile)}
|
||||
div(hidden id='data-pass-crew') !{JSON.stringify(items_crew)}
|
||||
div(hidden id='data-pass-stamp') !{JSON.stringify(items_stamp)}
|
||||
div(hidden id='data-pass-subbg') !{JSON.stringify(items_subbg)}
|
||||
div(hidden id='data-pass-bgm') !{JSON.stringify(items_bgm)}
|
||||
div(hidden id='data-pass-nemsys') !{JSON.stringify(items_nemsys)}
|
||||
div(hidden id='data-pass-unlock-all') !{unlock_all}
|
||||
script(src="static/asset/js/preview.js")
|
||||
|
||||
@@ -20,6 +20,7 @@ div
|
||||
th ID
|
||||
th Song Name
|
||||
th Difficulty
|
||||
th Date Released
|
||||
th Score
|
||||
th Exscore
|
||||
th Grade
|
||||
|
||||
@@ -0,0 +1,80 @@
|
||||
-
|
||||
link(rel="stylesheet" href="static/asset/css/datatables.css")
|
||||
div
|
||||
.card
|
||||
.card-header
|
||||
p.card-header-title
|
||||
span.icon
|
||||
i.mdi.mdi-account-edit
|
||||
| Skill Analyzer Settings (WIP)
|
||||
.card-content
|
||||
div
|
||||
div
|
||||
p(style="display:inline") Select Game:
|
||||
|
|
||||
|
|
||||
select(id='sdvx-version')
|
||||
option() -- Select --
|
||||
option(value='4') IV - Heavenly Haven
|
||||
option(value='5') V - Vivid Wave
|
||||
option(value='6') VI - Exceed Gear
|
||||
// input(id='add-skill-level-input')
|
||||
// button(id='add-skill-level-btn') +
|
||||
|
||||
div
|
||||
p(style="display:inline") Skill course:
|
||||
|
|
||||
|
|
||||
select(id='skill-course')
|
||||
option() -- Select --
|
||||
|
|
||||
|
|
||||
select(id='skill-course-level')
|
||||
option() -- Select --
|
||||
|
||||
div
|
||||
each val in [1, 2, 3]
|
||||
br
|
||||
p(style="display:inline") Track ##{val}:
|
||||
|
|
||||
|
|
||||
|
|
||||
input(class='track-id' maxlength="4" size="4" onkeyup="this.value = this.value.replace(/[^0-9]+/, '')")
|
||||
|
|
||||
|
|
||||
|
|
||||
input(class='track-name')
|
||||
|
|
||||
|
|
||||
|
|
||||
select(class='track-difficulty')
|
||||
option() -- Select --
|
||||
br
|
||||
br
|
||||
button(id='savebutton') Save
|
||||
br
|
||||
br
|
||||
div
|
||||
.card
|
||||
.card-header
|
||||
p.card-header-title
|
||||
span.icon
|
||||
i.mdi.mdi-account-edit
|
||||
| Songs List
|
||||
.card-content
|
||||
table.table(id="songslist" style="width:100%")
|
||||
thead
|
||||
tr
|
||||
th ID
|
||||
th Song Name
|
||||
th Release Date
|
||||
th Novice
|
||||
th Advanced
|
||||
th Exhaust
|
||||
th Maximum
|
||||
th Other
|
||||
tbody
|
||||
|
||||
script(src="static/asset/js/skillanalyzer.js")
|
||||
script(src="static/asset/js/datatables.js")
|
||||
script(src="static/asset/js/songslist.js")
|
||||
@@ -0,0 +1,26 @@
|
||||
-
|
||||
link(rel="stylesheet" href="static/asset/css/datatables.css")
|
||||
div
|
||||
.card
|
||||
.card-header
|
||||
p.card-header-title
|
||||
span.icon
|
||||
i.mdi.mdi-account-edit
|
||||
| Songs List
|
||||
.card-content
|
||||
table.table(id="songslist" style="width:100%")
|
||||
thead
|
||||
tr
|
||||
th ID
|
||||
th Song Name
|
||||
th Release Date
|
||||
th Novice
|
||||
th Advanced
|
||||
th Exhaust
|
||||
th Maximum
|
||||
th Other
|
||||
tbody
|
||||
|
||||
//div(hidden id='data-pass') !{JSON.stringify(profile)}
|
||||
script(src="static/asset/js/songslist.js")
|
||||
script(src="static/asset/js/datatables.js")
|
||||
|
After Width: | Height: | Size: 77 KiB |
|
After Width: | Height: | Size: 71 KiB |
|
After Width: | Height: | Size: 65 KiB |
|
After Width: | Height: | Size: 63 KiB |
|
After Width: | Height: | Size: 61 KiB |
|
After Width: | Height: | Size: 70 KiB |
|
After Width: | Height: | Size: 66 KiB |
|
After Width: | Height: | Size: 68 KiB |
|
After Width: | Height: | Size: 67 KiB |
|
After Width: | Height: | Size: 60 KiB |
|
After Width: | Height: | Size: 873 KiB |
|
After Width: | Height: | Size: 845 KiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 901 KiB |
|
After Width: | Height: | Size: 904 KiB |
|
After Width: | Height: | Size: 845 KiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 1.1 MiB |
|
After Width: | Height: | Size: 1.6 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 2.5 MiB |
|
After Width: | Height: | Size: 3.2 MiB |
|
After Width: | Height: | Size: 2.6 MiB |
|
After Width: | Height: | Size: 3.3 MiB |
|
After Width: | Height: | Size: 2.5 MiB |
|
After Width: | Height: | Size: 2.8 MiB |
|
After Width: | Height: | Size: 3.6 MiB |
|
After Width: | Height: | Size: 2.7 MiB |
|
After Width: | Height: | Size: 1.4 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 2.0 MiB |
|
After Width: | Height: | Size: 2.0 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 2.8 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 2.8 MiB |
|
After Width: | Height: | Size: 1.9 MiB |
|
After Width: | Height: | Size: 3.0 MiB |
|
After Width: | Height: | Size: 1.2 MiB |
|
After Width: | Height: | Size: 2.2 MiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 2.2 MiB |
|
After Width: | Height: | Size: 1.7 MiB |
|
After Width: | Height: | Size: 1.9 MiB |
|
After Width: | Height: | Size: 3.0 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 1.8 MiB |
|
After Width: | Height: | Size: 1.9 MiB |
|
After Width: | Height: | Size: 2.2 MiB |
|
After Width: | Height: | Size: 2.5 MiB |
|
After Width: | Height: | Size: 2.2 MiB |
|
After Width: | Height: | Size: 2.5 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 1.9 MiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 2.5 MiB |
|
After Width: | Height: | Size: 2.1 MiB |
|
After Width: | Height: | Size: 2.0 MiB |
|
After Width: | Height: | Size: 2.2 MiB |
|
After Width: | Height: | Size: 2.3 MiB |
|
After Width: | Height: | Size: 2.4 MiB |
|
After Width: | Height: | Size: 2.9 MiB |
|
After Width: | Height: | Size: 2.7 MiB |
|
After Width: | Height: | Size: 2.7 MiB |
|
After Width: | Height: | Size: 2.7 MiB |
|
After Width: | Height: | Size: 2.8 MiB |
|
After Width: | Height: | Size: 3.7 MiB |
|
After Width: | Height: | Size: 2.9 MiB |