more 0425 stuff
This commit is contained in:
+31
-1
@@ -28,7 +28,37 @@ The plugin now mainly maintained versions:
|
|||||||
Fork Changelog
|
Fork Changelog
|
||||||
===========
|
===========
|
||||||
### Latest supported game version
|
### Latest supported game version
|
||||||
- 2022122001
|
- EG 2023042500
|
||||||
|
|
||||||
|
## fork-6.0.1.0
|
||||||
|
|
||||||
|
### New:
|
||||||
|
|
||||||
|
1. Support for EG 2023042500
|
||||||
|
2. S-PUC effect enabled (haven't tested yet. couldn't be bothered to try lol)
|
||||||
|
3. Player Radar enabled
|
||||||
|
4. Single Battle mode enabled (haven't tested, idk if it works as is)
|
||||||
|
5. Added stamp events
|
||||||
|
- 2023 appeal card stamp event
|
||||||
|
- 11th anniversary appeal card stamp event
|
||||||
|
6. Added the remaining BPL weekly song toggles
|
||||||
|
7. Added Valkyrie Generator Vol. 10 and Vol. 11
|
||||||
|
8. Added Premium Generator Vol. 2
|
||||||
|
9. Valkyrie Generator Volumes 1 to 5 can now be rolled in WebUI
|
||||||
|
10. Added Arena Station 6 and 7.
|
||||||
|
11. Updated MISSING_SONGS to include the new licensed songs (HIMEHINA, Synthion, etc.)
|
||||||
|
|
||||||
|
### Fixes:
|
||||||
|
|
||||||
|
1. Updated songNum from 2000 to 3000 since the mdb now passed 2000 music IDs (for use of Unlock All Songs option; otherwise it will base on the music_db.json in the assets file)
|
||||||
|
2. Updated rival feature to include r.exscore (fixes some crashes in song select screen)
|
||||||
|
|
||||||
|
### Todo:
|
||||||
|
|
||||||
|
1. BPL Season 2 Special Stamp Event Implementation
|
||||||
|
- All songs on the stamp event selection screen should be completed and unlocked for SuddeИDeath to appear. Still don't know how to implement that.
|
||||||
|
2. Figure out how to use image (png) files to appear in information/news popup.
|
||||||
|
3. Implement BPL Supporter banner
|
||||||
|
|
||||||
## fork-6.0.0.2
|
## fork-6.0.0.2
|
||||||
|
|
||||||
|
|||||||
+326
-14
@@ -37,7 +37,9 @@ export const EVENT6 = [
|
|||||||
'VALGENE_ENABLE',
|
'VALGENE_ENABLE',
|
||||||
'ARENA_ENABLE',
|
'ARENA_ENABLE',
|
||||||
'DISP_PASELI_BANNER',
|
'DISP_PASELI_BANNER',
|
||||||
'S_PUC_EFFECT_ENABLE'
|
'S_PUC_EFFECT_ENABLE',
|
||||||
|
'PLAYER_RADAR_ENABLE',
|
||||||
|
'SINGLE_BATTLE_ENABLE'
|
||||||
];
|
];
|
||||||
|
|
||||||
export const INFORMATION6 = {
|
export const INFORMATION6 = {
|
||||||
@@ -48,7 +50,8 @@ export const INFORMATION6 = {
|
|||||||
'2022081600': ['[img:ver06/info_psd.ifs:hexa_diver_220714]', '[img:ver06/info_psd.ifs:hexa_diver_220818]'],
|
'2022081600': ['[img:ver06/info_psd.ifs:hexa_diver_220714]', '[img:ver06/info_psd.ifs:hexa_diver_220818]'],
|
||||||
'2022083000': ['[img:ver06/info_psd.ifs:hexa_diver_220714]', '[img:ver06/info_psd.ifs:hexa_diver_220818]', '[img:ver06/info_psd.ifs:paseli_present_220901]'],
|
'2022083000': ['[img:ver06/info_psd.ifs:hexa_diver_220714]', '[img:ver06/info_psd.ifs:hexa_diver_220818]', '[img:ver06/info_psd.ifs:paseli_present_220901]'],
|
||||||
'2022101800': ['[img:ver06/info_psd.ifs:hexa_diver_220714]', '[img:ver06/info_psd.ifs:hexa_diver_220818]', '[img:ver06/info_psd.ifs:paseli_present_220901]'],
|
'2022101800': ['[img:ver06/info_psd.ifs:hexa_diver_220714]', '[img:ver06/info_psd.ifs:hexa_diver_220818]', '[img:ver06/info_psd.ifs:paseli_present_220901]'],
|
||||||
'2022122001': ['[img:ver06/info_psd.ifs:hexa_diver_220714]', '[img:ver06/info_psd.ifs:hexa_diver_220818]', '[img:ver06/info_psd.ifs:paseli_present_220901]']
|
'2022122001': ['[img:ver06/info_psd.ifs:hexa_diver_220714]', '[img:ver06/info_psd.ifs:hexa_diver_220818]', '[img:ver06/info_psd.ifs:paseli_present_220901]'],
|
||||||
|
// '2023042500': ['[img:ver06/info_psd.ifs:hexa_diver_220714]', '[img:ver06/info_psd.ifs:hexa_diver_220818]', '[img:ver06/info_psd.ifs:paseli_present_220901]']
|
||||||
}
|
}
|
||||||
|
|
||||||
export const MISSINGSONGS6 = [
|
export const MISSINGSONGS6 = [
|
||||||
@@ -59,7 +62,10 @@ export const MISSINGSONGS6 = [
|
|||||||
|
|
||||||
// 0726 - 1018
|
// 0726 - 1018
|
||||||
'1857', '1858', '1860', '1861', '1862', '1856', '1859', '1863', '1864', '1865',
|
'1857', '1858', '1860', '1861', '1862', '1856', '1859', '1863', '1864', '1865',
|
||||||
'1903', '1904', '1911', '1916', '1917'
|
'1903', '1904', '1911', '1916', '1917',
|
||||||
|
|
||||||
|
// 230228 - 230425
|
||||||
|
'1960', '1961', '1962', '2028', '2029', '1912', '1913', '2030'
|
||||||
]
|
]
|
||||||
|
|
||||||
export const STAMP_EVENTS6 = {
|
export const STAMP_EVENTS6 = {
|
||||||
@@ -259,13 +265,121 @@ export const STAMP_EVENTS6 = {
|
|||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
}
|
},
|
||||||
|
'11thanniv': {
|
||||||
|
'type': 'main',
|
||||||
|
'info': {
|
||||||
|
'id': 0,
|
||||||
|
'stmpSlHd': '',
|
||||||
|
'stmpSlFt': '',
|
||||||
|
'stmpHd': '[sz:22]SPECIAL STAMP BONUS',
|
||||||
|
'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 1/1 ~ 1/9',
|
||||||
|
'stmpBg': '',
|
||||||
|
'data': [
|
||||||
|
{
|
||||||
|
'stmpid': 13,
|
||||||
|
'bnr': '',
|
||||||
|
'stps': 1,
|
||||||
|
'stprwrd': [
|
||||||
|
['1', 'appeal', '5523', '']
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
'bpl2022stamp': {
|
||||||
|
'type': 'select',
|
||||||
|
'info': {
|
||||||
|
'id': 3,
|
||||||
|
'num2': -1,
|
||||||
|
'stmpSlHd': '[sz:22][c:FFA6AA]BEMANI PRO LEAGUE -SEASON 2- SPECIAL STAMP',
|
||||||
|
'stmpSlFt': '[sz:23]{TextStamp}[br:5]{TextTerm} 2023/03/30~2023/05/07',
|
||||||
|
'stmpHd': '[sz:22][c:DAC491]BEMANI PRO LEAGUE -SEASON 2- SPECIAL STAMP',
|
||||||
|
'stmpFt': '[sz:22]YOU CAN GET STAMPS BY PLAYING SDVX!',
|
||||||
|
'stmpBg': 'bg_stamp_bpl',
|
||||||
|
'data': [
|
||||||
|
{
|
||||||
|
'stmpid': 14,
|
||||||
|
'bnr': 'sheet_track_1919',
|
||||||
|
'stps': 15,
|
||||||
|
'stprwrd': [
|
||||||
|
['15', 'track', '1919', '23']
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'stmpid': 15,
|
||||||
|
'bnr': 'sheet_track_1920',
|
||||||
|
'stps': 15,
|
||||||
|
'stprwrd': [
|
||||||
|
['15', 'track', '1920', '23']
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'stmpid': 16,
|
||||||
|
'bnr': 'sheet_track_1921',
|
||||||
|
'stps': 15,
|
||||||
|
'stprwrd': [
|
||||||
|
['15', 'track', '1921', '23']
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'stmpid': 17,
|
||||||
|
'bnr': 'sheet_track_1922',
|
||||||
|
'stps': 15,
|
||||||
|
'stprwrd': [
|
||||||
|
['15', 'track', '1922', '23']
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'stmpid': 18,
|
||||||
|
'bnr': 'sheet_track_1923',
|
||||||
|
'stps': 15,
|
||||||
|
'stprwrd': [
|
||||||
|
['15', 'track', '1923', '23']
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'stmpid': 19,
|
||||||
|
'bnr': 'sheet_track_1924',
|
||||||
|
'stps': 15,
|
||||||
|
'stprwrd': [
|
||||||
|
['15', 'track', '1924', '23']
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'stmpid': 20,
|
||||||
|
'bnr': 'sheet_track_1925',
|
||||||
|
'stps': 15,
|
||||||
|
'stprwrd': [
|
||||||
|
['15', 'track', '1925', '23']
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'stmpid': 21,
|
||||||
|
'bnr': 'sheet_track_1926',
|
||||||
|
'stps': 15,
|
||||||
|
'stprwrd': [
|
||||||
|
['15', 'track', '1926', '23']
|
||||||
|
]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
'stmpid': 22,
|
||||||
|
'bnr': 'sheet_track_1938',
|
||||||
|
'stps': 30,
|
||||||
|
'stprwrd': [
|
||||||
|
['30', 'track', '1938', '23']
|
||||||
|
]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
export const EVENT_SONGS6 = {
|
export const EVENT_SONGS6 = {
|
||||||
// X-Record songs
|
// X-Record songs
|
||||||
'xrecord_1': ['1736', '1737', '1738'],
|
'xrecord_1': ['1736', '1737', '1738'],
|
||||||
'xrecord_2': ['1848', '1847', '1849'],
|
'xrecord_2': ['1847', '1848', '1849'],
|
||||||
|
'xrecord_3': ['1980', '1978', '1979'],
|
||||||
// Konaste songs
|
// Konaste songs
|
||||||
'konasute_1': ['1762'],
|
'konasute_1': ['1762'],
|
||||||
'konasute_2': ['1763'],
|
'konasute_2': ['1763'],
|
||||||
@@ -288,13 +402,21 @@ export const EVENT_SONGS6 = {
|
|||||||
"bpl2022_3": ['1956', '1949'],
|
"bpl2022_3": ['1956', '1949'],
|
||||||
"bpl2022_4": ['1946', '1958'],
|
"bpl2022_4": ['1946', '1958'],
|
||||||
"bpl2022_5": ['1957', '1955'],
|
"bpl2022_5": ['1957', '1955'],
|
||||||
"bpl2022_6": ['1947', '1953']
|
"bpl2022_6": ['1947', '1953'],
|
||||||
|
"bpl2022_7": ['1950', '1944'],
|
||||||
|
"bpl2022_8": ['1945', '1954'],
|
||||||
|
"bpl2022_9": ['1942'],
|
||||||
|
"bpl2022_10": ['1939'],
|
||||||
|
"bpl2022_11": ['1940'],
|
||||||
|
"bpl2022_12": ['1941'],
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
export const RESTRICTED_SONGS6 = {
|
export const RESTRICTED_SONGS6 = {
|
||||||
// X-Record songs
|
// X-Record songs
|
||||||
'xrecord_1': ['1736', '1737', '1738'],
|
'xrecord_1': ['1736', '1737', '1738'],
|
||||||
'xrecord_2': ['1848', '1847', '1849'],
|
'xrecord_2': ['1847', '1848', '1849'],
|
||||||
|
'xrecord_3': ['1980', '1978', '1979'],
|
||||||
// Konaste songs
|
// Konaste songs
|
||||||
'konasute_1': ['1762'],
|
'konasute_1': ['1762'],
|
||||||
'konasute_2': ['1763'],
|
'konasute_2': ['1763'],
|
||||||
@@ -317,7 +439,13 @@ export const RESTRICTED_SONGS6 = {
|
|||||||
"bpl2022_3": ['1956', '1949'],
|
"bpl2022_3": ['1956', '1949'],
|
||||||
"bpl2022_4": ['1946', '1958'],
|
"bpl2022_4": ['1946', '1958'],
|
||||||
"bpl2022_5": ['1957', '1955'],
|
"bpl2022_5": ['1957', '1955'],
|
||||||
"bpl2022_6": ['1947', '1953']
|
"bpl2022_6": ['1947', '1953'],
|
||||||
|
"bpl2022_7": ['1950', '1944'],
|
||||||
|
"bpl2022_8": ['1945', '1954'],
|
||||||
|
"bpl2022_9": ['1942'],
|
||||||
|
"bpl2022_10": ['1939'],
|
||||||
|
"bpl2022_11": ['1940'],
|
||||||
|
"bpl2022_12": ['1941'],
|
||||||
}
|
}
|
||||||
|
|
||||||
export const APRILFOOLSSONGS = [
|
export const APRILFOOLSSONGS = [
|
||||||
@@ -327,7 +455,7 @@ export const APRILFOOLSSONGS = [
|
|||||||
export const VALKYRIE_SONGS = [
|
export const VALKYRIE_SONGS = [
|
||||||
'1744', '1672', // Valk exclusives
|
'1744', '1672', // Valk exclusives
|
||||||
'1855', '1742', '1743', '1745', // Arena station songs
|
'1855', '1742', '1743', '1745', // Arena station songs
|
||||||
'1736', '1737', '1738', '1848', '1847', '1849' // X-record
|
'1736', '1737', '1738', '1847', '1848', '1849', '1980', '1978', '1979' // X-record
|
||||||
]
|
]
|
||||||
|
|
||||||
export const ARENA = {
|
export const ARENA = {
|
||||||
@@ -824,6 +952,155 @@ export const ARENA = {
|
|||||||
param: 8,
|
param: 8,
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
},
|
||||||
|
'Set 7 (04/27/23)': {
|
||||||
|
details: {
|
||||||
|
// season: 4,
|
||||||
|
time_start: BigInt(Date.parse('27 Apr 2023 00:00:00 GMT')),
|
||||||
|
time_end: BigInt(Date.parse('31 Dec 2099 23:59:59 GMT')),
|
||||||
|
shop_start: BigInt(Date.parse('27 Apr 2023 00:00:00 GMT')),
|
||||||
|
shop_end: BigInt(Date.parse('31 Dec 2099 23:59:59 GMT')),
|
||||||
|
is_open: 1,
|
||||||
|
is_shop: 1
|
||||||
|
},
|
||||||
|
arena_items: [
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 15000,
|
||||||
|
item_type: 11,
|
||||||
|
item_id: 122,
|
||||||
|
param: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 15000,
|
||||||
|
item_type: 11,
|
||||||
|
item_id: 123,
|
||||||
|
param: 1,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 8000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 786,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 8000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 787,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 8000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 788,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 4000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 789,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 4000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 790,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 8000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 610,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 8000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 1902,
|
||||||
|
param: 23,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 8000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 381,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 8000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 633,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 4000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 332,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 4000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 711,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 4000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 871,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 2000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 872,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 2000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 64,
|
||||||
|
param: 8,
|
||||||
|
},
|
||||||
|
{
|
||||||
|
catalog_id: 1,
|
||||||
|
catalog_type: 1,
|
||||||
|
price: 2000,
|
||||||
|
item_type: 0,
|
||||||
|
item_id: 88,
|
||||||
|
param: 8,
|
||||||
|
}
|
||||||
|
]
|
||||||
}
|
}
|
||||||
// 'debug': {
|
// 'debug': {
|
||||||
// details: {
|
// details: {
|
||||||
@@ -906,7 +1183,12 @@ export const VALGENE = {
|
|||||||
{
|
{
|
||||||
valgene_name: "ヴァルキリージェネレーター 第10弾",
|
valgene_name: "ヴァルキリージェネレーター 第10弾",
|
||||||
valgene_name_english: "Valkyrie Generator Vol. 10",
|
valgene_name_english: "Valkyrie Generator Vol. 10",
|
||||||
valgene_id: 9
|
valgene_id: 10
|
||||||
|
},
|
||||||
|
{
|
||||||
|
valgene_name: "ヴァルキリージェネレーター 第11弾",
|
||||||
|
valgene_name_english: "Valkyrie Generator Vol. 11",
|
||||||
|
valgene_id: 11
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
rarity: {
|
rarity: {
|
||||||
@@ -1142,23 +1424,44 @@ export const VALGENE = {
|
|||||||
volume: 10,
|
volume: 10,
|
||||||
items: [
|
items: [
|
||||||
{
|
{
|
||||||
type: 17, // chat stamp
|
type: 17,
|
||||||
item_ids: [120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150]
|
item_ids: [120, 121, 122, 123, 124, 125, 126, 127, 128, 129, 130, 131, 132, 133, 134, 135, 136, 137, 138, 139, 140, 141, 142, 143, 144, 145, 146, 147, 148, 149, 150]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 18, // submonitor bg
|
type: 18,
|
||||||
item_ids: [224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237]
|
item_ids: [224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 19, // bgm
|
type: 19,
|
||||||
item_ids: [48, 49, 50, 51]
|
item_ids: [48, 49, 50, 51]
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
type: 20, // nemsys
|
type: 20,
|
||||||
item_ids: [33, 34]
|
item_ids: [33, 34]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
},
|
},
|
||||||
|
{
|
||||||
|
volume: 11,
|
||||||
|
items: [
|
||||||
|
{
|
||||||
|
type: 17,
|
||||||
|
item_ids: [163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 18,
|
||||||
|
item_ids: [273, 274, 275, 276, 277, 278, 279, 280]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 19,
|
||||||
|
item_ids: [52, 53, 54, 55, 56, 57, 58, 59]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 20,
|
||||||
|
item_ids: [35, 36, 37, 38, 39, 40, 41, 42]
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -1180,6 +1483,15 @@ export const PREGENE = [
|
|||||||
'subbg': [200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
|
'subbg': [200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
|
||||||
},
|
},
|
||||||
probability: [0.01, 0.39, 0.6]
|
probability: [0.01, 0.39, 0.6]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
id: 3,
|
||||||
|
items: {
|
||||||
|
'crew': [136, 137, 138],
|
||||||
|
'stamp': [151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162],
|
||||||
|
'subbg': [238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272]
|
||||||
|
},
|
||||||
|
probability: [0.01, 0.39, 0.6]
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
||||||
|
|||||||
@@ -97,10 +97,12 @@ export const common: EPR = async (info, data, send) => {
|
|||||||
EVENT_SONGS = EVENT_SONGS.concat(EVENT_SONGS6[Object.keys(EVENT_SONGS6)[keyIter]])
|
EVENT_SONGS = EVENT_SONGS.concat(EVENT_SONGS6[Object.keys(EVENT_SONGS6)[keyIter]])
|
||||||
}
|
}
|
||||||
|
|
||||||
let mdb = JSON.parse(music_db);
|
let mdb = JSON.parse(music_db.toString());
|
||||||
|
|
||||||
let limitedNo = 2;
|
let limitedNo = 2;
|
||||||
for (let i = 0; i < songNum; i++) {
|
songNum = parseInt(mdb.mdb.music[mdb.mdb.music.length - 1]['@id'])
|
||||||
|
console.log("Latest song id in mdb: " + songNum)
|
||||||
|
for (let i = 0; i <= songNum; i++) {
|
||||||
var foundSongIndex = mdb.mdb.music.map(function(x) {return x['@id']; }).indexOf(i.toString());
|
var foundSongIndex = mdb.mdb.music.map(function(x) {return x['@id']; }).indexOf(i.toString());
|
||||||
if(foundSongIndex != -1) {
|
if(foundSongIndex != -1) {
|
||||||
var songData = mdb.mdb.music[foundSongIndex];
|
var songData = mdb.mdb.music[foundSongIndex];
|
||||||
@@ -192,24 +194,27 @@ export const common: EPR = async (info, data, send) => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if(IO.Exists('handlers/test.json')) {
|
// if(IO.Exists('handlers/test.json')) {
|
||||||
let testExtend = JSON.parse(await IO.ReadFile('handlers/test.json'))
|
// let bufExtend = await IO.ReadFile('handlers/test.json')
|
||||||
if(testExtend.length > 0) {
|
// let testExtend = JSON.parse(bufExtend.toString())
|
||||||
testExtend.forEach(td => {
|
// if(testExtend.length > 0) {
|
||||||
console.log("testExtend: " + JSON.stringify(td))
|
// testExtend.forEach(td => {
|
||||||
extend.push({
|
// console.log("testExtend: " + JSON.stringify(td))
|
||||||
id: td['id'],
|
// extend.push({
|
||||||
type: td['type'],
|
// id: td['id'],
|
||||||
params: td['params']
|
// type: td['type'],
|
||||||
});
|
// params: td['params']
|
||||||
})
|
// });
|
||||||
}
|
// })
|
||||||
}
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
if(IO.Exists('webui/asset/config/events.json')) {
|
if(IO.Exists('webui/asset/config/events.json')) {
|
||||||
const itemTypeList = {"track": 'e', "appeal": 'a', "crew": 'c', "pcb": 'b'}
|
const itemTypeList = {"track": 'e', "appeal": 'a', "crew": 'c', "pcb": 'b'}
|
||||||
let eventData = JSON.parse(await IO.ReadFile('webui/asset/json/events.json'))
|
let bufEventData = await IO.ReadFile('webui/asset/json/events.json')
|
||||||
let eventConfig = JSON.parse(await IO.ReadFile('webui/asset/config/events.json'))
|
let bufEventConfig = await IO.ReadFile('webui/asset/config/events.json')
|
||||||
|
let eventData = JSON.parse(bufEventData.toString())
|
||||||
|
let eventConfig = JSON.parse(bufEventConfig.toString())
|
||||||
for(const eventIter in eventData['events']) {
|
for(const eventIter in eventData['events']) {
|
||||||
if(eventData['events'][eventIter]['type'] === 'stamp' && eventConfig[eventData['events'][eventIter]['id']]['toggle']) {
|
if(eventData['events'][eventIter]['type'] === 'stamp' && eventConfig[eventData['events'][eventIter]['id']]['toggle']) {
|
||||||
let stmpEvntInfo = STAMP_EVENTS6[eventData['events'][eventIter]['id']]
|
let stmpEvntInfo = STAMP_EVENTS6[eventData['events'][eventIter]['id']]
|
||||||
@@ -251,7 +256,7 @@ export const common: EPR = async (info, data, send) => {
|
|||||||
'id': stmpEvntInfo['info']['id'],
|
'id': stmpEvntInfo['info']['id'],
|
||||||
'params': [
|
'params': [
|
||||||
9,
|
9,
|
||||||
0,
|
stmpEvntInfo['info']['num'],
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
0,
|
0,
|
||||||
|
|||||||
+182
-182
@@ -1,182 +1,182 @@
|
|||||||
import { Profile } from '../models/profile';
|
import { Profile } from '../models/profile';
|
||||||
import { MusicRecord } from '../models/music_record';
|
import { MusicRecord } from '../models/music_record';
|
||||||
import { getVersion, IDToCode, GetCounter } from '../utils';
|
import { getVersion, IDToCode, GetCounter } from '../utils';
|
||||||
import { Mix } from '../models/mix';
|
import { Mix } from '../models/mix';
|
||||||
|
|
||||||
export const hiscore: EPR = async (info, data, send) => {
|
export const hiscore: EPR = async (info, data, send) => {
|
||||||
const records = await DB.Find<MusicRecord>(null, { collection: 'music' });
|
const records = await DB.Find<MusicRecord>(null, { collection: 'music' });
|
||||||
|
|
||||||
const version = getVersion(info);
|
const version = getVersion(info);
|
||||||
|
|
||||||
const profiles = _.groupBy(
|
const profiles = _.groupBy(
|
||||||
await DB.Find<Profile>(null, { collection: 'profile' }),
|
await DB.Find<Profile>(null, { collection: 'profile' }),
|
||||||
'__refid'
|
'__refid'
|
||||||
);
|
);
|
||||||
|
|
||||||
if (version === 1) {
|
if (version === 1) {
|
||||||
return send.object({
|
return send.object({
|
||||||
hiscore: K.ATTR({ type: "1" }, {
|
hiscore: K.ATTR({ type: "1" }, {
|
||||||
music: _.map(
|
music: _.map(
|
||||||
_.groupBy(records, r => {
|
_.groupBy(records, r => {
|
||||||
return `${r.mid}:${r.type}`;
|
return `${r.mid}:${r.type}`;
|
||||||
}),
|
}),
|
||||||
r => _.maxBy(r, 'score')
|
r => _.maxBy(r, 'score')
|
||||||
).map(r => (K.ATTR({ id: String(r.mid) }, {
|
).map(r => (K.ATTR({ id: String(r.mid) }, {
|
||||||
note: (() => {
|
note: (() => {
|
||||||
const notes = [];
|
const notes = [];
|
||||||
|
|
||||||
for (let i = 1; i <= 3; i++) {
|
for (let i = 1; i <= 3; i++) {
|
||||||
if (r.type !== i) continue;
|
if (r.type !== i) continue;
|
||||||
notes.push(K.ATTR({ type: String(r.type) }, {
|
notes.push(K.ATTR({ type: String(r.type) }, {
|
||||||
name: K.ITEM('str', profiles[r.__refid][0].name),
|
name: K.ITEM('str', profiles[r.__refid][0].name),
|
||||||
score: K.ITEM('u32', r.score)
|
score: K.ITEM('u32', r.score)
|
||||||
}))
|
}))
|
||||||
}
|
}
|
||||||
|
|
||||||
return notes;
|
return notes;
|
||||||
})()
|
})()
|
||||||
}))),
|
}))),
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
return send.object({
|
return send.object({
|
||||||
sc: {
|
sc: {
|
||||||
d: _.map(
|
d: _.map(
|
||||||
_.groupBy(records, r => {
|
_.groupBy(records, r => {
|
||||||
return `${r.mid}:${r.type}`;
|
return `${r.mid}:${r.type}`;
|
||||||
}),
|
}),
|
||||||
r => _.maxBy(r, 'score')
|
r => _.maxBy(r, 'score')
|
||||||
).map(r => ({
|
).map(r => ({
|
||||||
id: K.ITEM('u32', r.mid),
|
id: K.ITEM('u32', r.mid),
|
||||||
ty: K.ITEM('u32', r.type),
|
ty: K.ITEM('u32', r.type),
|
||||||
a_sq: K.ITEM('str', IDToCode(profiles[r.__refid][0].id)),
|
a_sq: K.ITEM('str', IDToCode(profiles[r.__refid][0].id)),
|
||||||
a_nm: K.ITEM('str', profiles[r.__refid][0].name),
|
a_nm: K.ITEM('str', profiles[r.__refid][0].name),
|
||||||
a_sc: K.ITEM('u32', r.score),
|
a_sc: K.ITEM('u32', r.score),
|
||||||
l_sq: K.ITEM('str', IDToCode(profiles[r.__refid][0].id)),
|
l_sq: K.ITEM('str', IDToCode(profiles[r.__refid][0].id)),
|
||||||
l_nm: K.ITEM('str', profiles[r.__refid][0].name),
|
l_nm: K.ITEM('str', profiles[r.__refid][0].name),
|
||||||
l_sc: K.ITEM('u32', r.score),
|
l_sc: K.ITEM('u32', r.score),
|
||||||
})),
|
})),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const rival: EPR = async (info, data, send) => {
|
export const rival: EPR = async (info, data, send) => {
|
||||||
const refid = $(data).str('refid');
|
const refid = $(data).str('refid');
|
||||||
const version = parseInt(info.model.split(":")[4]);
|
const version = parseInt(info.model.split(":")[4]);
|
||||||
if (!refid) return send.deny();
|
if (!refid) return send.deny();
|
||||||
|
|
||||||
const rivals = (
|
const rivals = (
|
||||||
await DB.Find<Profile>(null, { collection: 'profile' })
|
await DB.Find<Profile>(null, { collection: 'profile' })
|
||||||
).filter(p => p.__refid != refid);
|
).filter(p => p.__refid != refid);
|
||||||
|
|
||||||
return send.object({
|
return send.object({
|
||||||
rival: await Promise.all(
|
rival: await Promise.all(
|
||||||
rivals.map(async (p, index) => {
|
rivals.map(async (p, index) => {
|
||||||
return {
|
return {
|
||||||
no: K.ITEM('s16', index),
|
no: K.ITEM('s16', index),
|
||||||
seq: K.ITEM('str', IDToCode(p.id)),
|
seq: K.ITEM('str', IDToCode(p.id)),
|
||||||
name: K.ITEM('str', p.name),
|
name: K.ITEM('str', p.name),
|
||||||
music: (
|
music: (
|
||||||
await DB.Find<MusicRecord>(p.__refid, { collection: 'music' })
|
await DB.Find<MusicRecord>(p.__refid, { collection: 'music' })
|
||||||
).map(r => ({
|
).map(r => ({
|
||||||
// Changes were somehow made in the order of the field for the version 2023042500
|
// Changes were somehow made in the order of the field for the version 2023042500
|
||||||
param: K.ARRAY('u32', version < 2023042500 ? [r.mid, r.type, r.score, r.clear, r.grade] : [r.mid, r.type, r.score, r.grade, r.clear]),
|
param: K.ARRAY('u32', version < 2023042500 ? [r.mid, r.type, r.score, r.clear, r.grade] : [r.mid, r.type, r.score, r.exscore, r.clear, r.grade]),
|
||||||
})),
|
})),
|
||||||
};
|
};
|
||||||
})
|
})
|
||||||
),
|
),
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const saveMix: EPR = async (info, data, send) => {
|
export const saveMix: EPR = async (info, data, send) => {
|
||||||
const refid = $(data).str('ref_id');
|
const refid = $(data).str('ref_id');
|
||||||
if (!refid) return send.deny();
|
if (!refid) return send.deny();
|
||||||
|
|
||||||
const profile = await DB.FindOne<Profile>(refid, { collection: 'profile' });
|
const profile = await DB.FindOne<Profile>(refid, { collection: 'profile' });
|
||||||
if (!profile) return send.deny();
|
if (!profile) return send.deny();
|
||||||
|
|
||||||
const mix = $(data).element('automation');
|
const mix = $(data).element('automation');
|
||||||
|
|
||||||
const id = await GetCounter('mix');
|
const id = await GetCounter('mix');
|
||||||
let code = _.padStart(_.random(0, 999999999999).toString(), 12, '0');
|
let code = _.padStart(_.random(0, 999999999999).toString(), 12, '0');
|
||||||
while (await DB.FindOne<Mix>({ collection: 'mix', code })) {
|
while (await DB.FindOne<Mix>({ collection: 'mix', code })) {
|
||||||
code = _.padStart(_.random(0, 999999999999).toString(), 12, '0');
|
code = _.padStart(_.random(0, 999999999999).toString(), 12, '0');
|
||||||
}
|
}
|
||||||
|
|
||||||
const doc = await DB.Insert<Mix>({
|
const doc = await DB.Insert<Mix>({
|
||||||
collection: 'mix',
|
collection: 'mix',
|
||||||
id,
|
id,
|
||||||
code,
|
code,
|
||||||
name: mix.str('mix_name'),
|
name: mix.str('mix_name'),
|
||||||
creator: profile.name,
|
creator: profile.name,
|
||||||
param: mix.str('generate_param'),
|
param: mix.str('generate_param'),
|
||||||
tag: mix.number('tag_bit'),
|
tag: mix.number('tag_bit'),
|
||||||
jacket: mix.number('jacket_id'),
|
jacket: mix.number('jacket_id'),
|
||||||
});
|
});
|
||||||
|
|
||||||
return send.object({
|
return send.object({
|
||||||
automation: {
|
automation: {
|
||||||
mix_id: K.ITEM('s32', id),
|
mix_id: K.ITEM('s32', id),
|
||||||
mix_code: K.ITEM('str', doc.code),
|
mix_code: K.ITEM('str', doc.code),
|
||||||
seq: K.ITEM('str', doc.code),
|
seq: K.ITEM('str', doc.code),
|
||||||
mix_name: K.ITEM('str', doc.name),
|
mix_name: K.ITEM('str', doc.name),
|
||||||
player_name: K.ITEM('str', doc.creator),
|
player_name: K.ITEM('str', doc.creator),
|
||||||
generate_param: K.ITEM('str', doc.param),
|
generate_param: K.ITEM('str', doc.param),
|
||||||
distribution_date: K.ITEM('u32', 19990101),
|
distribution_date: K.ITEM('u32', 19990101),
|
||||||
jacket_id: K.ITEM('s32', doc.jacket),
|
jacket_id: K.ITEM('s32', doc.jacket),
|
||||||
tag_bit: K.ITEM('s32', doc.tag),
|
tag_bit: K.ITEM('s32', doc.tag),
|
||||||
like_flg: K.ITEM('bool', 0),
|
like_flg: K.ITEM('bool', 0),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const loadMix: EPR = async (info, data, send) => {
|
export const loadMix: EPR = async (info, data, send) => {
|
||||||
const code = $(data).str('mix_code');
|
const code = $(data).str('mix_code');
|
||||||
|
|
||||||
const mix = await DB.FindOne<Mix>({ collection: 'mix', code });
|
const mix = await DB.FindOne<Mix>({ collection: 'mix', code });
|
||||||
if (!mix) {
|
if (!mix) {
|
||||||
return send.object({ result: K.ITEM('s32', 1) });
|
return send.object({ result: K.ITEM('s32', 1) });
|
||||||
}
|
}
|
||||||
|
|
||||||
return send.object({
|
return send.object({
|
||||||
automation: {
|
automation: {
|
||||||
mix_id: K.ITEM('s32', mix.id),
|
mix_id: K.ITEM('s32', mix.id),
|
||||||
mix_code: K.ITEM('str', mix.code),
|
mix_code: K.ITEM('str', mix.code),
|
||||||
seq: K.ITEM('str', mix.code),
|
seq: K.ITEM('str', mix.code),
|
||||||
mix_name: K.ITEM('str', mix.name),
|
mix_name: K.ITEM('str', mix.name),
|
||||||
player_name: K.ITEM('str', mix.creator),
|
player_name: K.ITEM('str', mix.creator),
|
||||||
generate_param: K.ITEM('str', mix.param),
|
generate_param: K.ITEM('str', mix.param),
|
||||||
distribution_date: K.ITEM('u32', 19990101),
|
distribution_date: K.ITEM('u32', 19990101),
|
||||||
jacket_id: K.ITEM('s32', mix.jacket),
|
jacket_id: K.ITEM('s32', mix.jacket),
|
||||||
tag_bit: K.ITEM('s32', mix.tag),
|
tag_bit: K.ITEM('s32', mix.tag),
|
||||||
like_flg: K.ITEM('bool', 0),
|
like_flg: K.ITEM('bool', 0),
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
export const globalMatch: EPR = async (info, data, send) => {
|
export const globalMatch: EPR = async (info, data, send) => {
|
||||||
// console.log("Current MID: "+$(data).number('mid'));
|
// console.log("Current MID: "+$(data).number('mid'));
|
||||||
// console.log("Port: "+$(data).number('port'));
|
// console.log("Port: "+$(data).number('port'));
|
||||||
// console.log("Global IP: "+$(data).numbers('gip'));
|
// console.log("Global IP: "+$(data).numbers('gip'));
|
||||||
// console.log("Private IP: "+$(data).numbers('lip'));
|
// console.log("Private IP: "+$(data).numbers('lip'));
|
||||||
|
|
||||||
// var mid = $(data).number('mid');
|
// var mid = $(data).number('mid');
|
||||||
// var port = $(data).number('port');
|
// var port = $(data).number('port');
|
||||||
// var gip = $(data).str('gip');
|
// var gip = $(data).str('gip');
|
||||||
// var lip = $(data).str('lip');
|
// var lip = $(data).str('lip');
|
||||||
// var testArray = [{
|
// var testArray = [{
|
||||||
// port: port,
|
// port: port,
|
||||||
// gip:gip,
|
// gip:gip,
|
||||||
// lip:lip,
|
// lip:lip,
|
||||||
// }];
|
// }];
|
||||||
// return send.object({
|
// return send.object({
|
||||||
// entry_id: K.ITEM('str', '123456789'),
|
// entry_id: K.ITEM('str', '123456789'),
|
||||||
// entry: testArray.map(a=>{
|
// entry: testArray.map(a=>{
|
||||||
// port: K.ITEM('u16',a.port);
|
// port: K.ITEM('u16',a.port);
|
||||||
// gip: K.ITEM('ip4',a.gip);
|
// gip: K.ITEM('ip4',a.gip);
|
||||||
// lip: K.ITEM('ip4',a.lip);
|
// lip: K.ITEM('ip4',a.lip);
|
||||||
// })
|
// })
|
||||||
// });
|
// });
|
||||||
send.success();
|
send.success();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -644,8 +644,10 @@ export const load: EPR = async (info, data, send) => {
|
|||||||
let presents = []
|
let presents = []
|
||||||
if(version === 6) {
|
if(version === 6) {
|
||||||
if(IO.Exists('webui/asset/config/events.json')) {
|
if(IO.Exists('webui/asset/config/events.json')) {
|
||||||
let eventData = JSON.parse(await IO.ReadFile('webui/asset/json/events.json'))
|
let bufEventData = await IO.ReadFile('webui/asset/json/events.json')
|
||||||
let eventConfig = JSON.parse(await IO.ReadFile('webui/asset/config/events.json'))
|
let bufEventConfig = await IO.ReadFile('webui/asset/config/events.json')
|
||||||
|
let eventData = JSON.parse(bufEventData.toString())
|
||||||
|
let eventConfig = JSON.parse(bufEventConfig.toString())
|
||||||
for(const eventIter in eventData['events']) {
|
for(const eventIter in eventData['events']) {
|
||||||
if(eventData['events'][eventIter]['type'] === 'gift') {
|
if(eventData['events'][eventIter]['type'] === 'gift') {
|
||||||
if(typeof eventConfig[eventData['events'][eventIter]['id']]['toggle'] === "boolean") {
|
if(typeof eventConfig[eventData['events'][eventIter]['id']]['toggle'] === "boolean") {
|
||||||
|
|||||||
@@ -1,130 +1,130 @@
|
|||||||
function generateEventToggles(eventInfo, eventConfig, eventEnabled) {
|
function generateEventToggles(eventInfo, eventConfig, eventEnabled) {
|
||||||
let cardContent = $('<div class="card-content">')
|
let cardContent = $('<div class="card-content">')
|
||||||
if(typeof eventInfo['info'] === 'string') {
|
if(typeof eventInfo['info'] === 'string') {
|
||||||
cardContent.append(
|
cardContent.append(
|
||||||
$('<div class="field is-horizontal">').append(
|
$('<div class="field is-horizontal">').append(
|
||||||
$('<div class="field-label is-normal"><label class="label" for="' + eventInfo['id'] + '">Enable</label></div>')
|
$('<div class="field-label is-normal"><label class="label" for="' + eventInfo['id'] + '">Enable</label></div>')
|
||||||
).append(
|
).append(
|
||||||
$('<div class="field-body"><div class="field"><div class="control"><label class="switch is-rounded"><input type="checkbox" ' + (eventConfig['toggle'] ? 'checked' : '') + ' name="' + eventInfo['id'] + '"><span class="check"></span></label></div><p class="help">' + eventInfo['info'] + '</p></div></div>')
|
$('<div class="field-body"><div class="field"><div class="control"><label class="switch is-rounded"><input type="checkbox" ' + (eventConfig['toggle'] ? 'checked' : '') + ' name="' + eventInfo['id'] + '"><span class="check"></span></label></div><p class="help">' + eventInfo['info'] + '</p></div></div>')
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
} else {
|
} else {
|
||||||
for(const infoIter in eventInfo['info']) {
|
for(const infoIter in eventInfo['info']) {
|
||||||
cardContent.append(
|
cardContent.append(
|
||||||
$('<div class="field is-horizontal">').append(
|
$('<div class="field is-horizontal">').append(
|
||||||
$('<div class="field-label is-normal"><label class="label" for="' + eventInfo['id'] + '_' + (parseInt(infoIter) + 1).toString() + '">Enable Set ' + (parseInt(infoIter) + 1).toString() + '</label></div>')
|
$('<div class="field-label is-normal"><label class="label" for="' + eventInfo['id'] + '_' + (parseInt(infoIter) + 1).toString() + '">Enable Set ' + (parseInt(infoIter) + 1).toString() + '</label></div>')
|
||||||
).append(
|
).append(
|
||||||
$('<div class="field-body"><div class="field"><div class="control"><label class="switch is-rounded"><input type="checkbox" ' + (eventConfig['toggle'][eventInfo['id'] + '_' + (parseInt(infoIter) + 1).toString()] ? 'checked' : '') + ' name="' + eventInfo['id'] + '_' + (parseInt(infoIter) + 1).toString() + '"><span class="check"></span></label></div><p class="help">' + eventInfo['info'][infoIter] + '</p></div></div>')
|
$('<div class="field-body"><div class="field"><div class="control"><label class="switch is-rounded"><input type="checkbox" ' + (eventConfig['toggle'][eventInfo['id'] + '_' + (parseInt(infoIter) + 1).toString()] ? 'checked' : '') + ' name="' + eventInfo['id'] + '_' + (parseInt(infoIter) + 1).toString() + '"><span class="check"></span></label></div><p class="help">' + eventInfo['info'][infoIter] + '</p></div></div>')
|
||||||
)
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return cardContent
|
return cardContent
|
||||||
}
|
}
|
||||||
|
|
||||||
async function generateNewEventsConfigFile(eventData) {
|
async function generateNewEventsConfigFile(eventData) {
|
||||||
let eventConfig = {}
|
let eventConfig = {}
|
||||||
for(const eventIter in eventData['events']) {
|
for(const eventIter in eventData['events']) {
|
||||||
eventConfig[eventData['events'][eventIter]['id']] = await insertNewEventConfig(eventData, eventIter, eventData['events'][eventIter]['id'])
|
eventConfig[eventData['events'][eventIter]['id']] = await insertNewEventConfig(eventData, eventIter, eventData['events'][eventIter]['id'])
|
||||||
}
|
}
|
||||||
return eventConfig
|
return eventConfig
|
||||||
}
|
}
|
||||||
|
|
||||||
async function insertNewEventConfig(eventData, eventIter, eventID) {
|
async function insertNewEventConfig(eventData, eventIter, eventID) {
|
||||||
let toggle = false
|
let toggle = false
|
||||||
if(typeof eventData['events'][eventIter]['info'] !== 'string') {
|
if(typeof eventData['events'][eventIter]['info'] !== 'string') {
|
||||||
toggle = {}
|
toggle = {}
|
||||||
for(const toggleIter in eventData['events'][eventIter]['info']) {
|
for(const toggleIter in eventData['events'][eventIter]['info']) {
|
||||||
toggle[eventData['events'][eventIter]['id'] + '_' + (parseInt(toggleIter) + 1)] = false
|
toggle[eventData['events'][eventIter]['id'] + '_' + (parseInt(toggleIter) + 1)] = false
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return {
|
return {
|
||||||
'toggle': toggle
|
'toggle': toggle
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function readEventsConfigFile(eventData) {
|
async function readEventsConfigFile(eventData) {
|
||||||
try {
|
try {
|
||||||
return await $.getJSON("static/asset/config/events.json", function(data) {
|
return await $.getJSON("static/asset/config/events.json", function(data) {
|
||||||
return data
|
return data
|
||||||
})
|
})
|
||||||
} catch {
|
} catch {
|
||||||
return await generateNewEventsConfigFile(eventData)
|
return await generateNewEventsConfigFile(eventData)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
async function readEventsJsonFile() {
|
async function readEventsJsonFile() {
|
||||||
return await $.getJSON("static/asset/json/events.json", function(data) {
|
return await $.getJSON("static/asset/json/events.json", function(data) {
|
||||||
return data
|
return data
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
$(document).ready(async function() {
|
$(document).ready(async function() {
|
||||||
let eventData = await readEventsJsonFile()
|
let eventData = await readEventsJsonFile()
|
||||||
let eventConfig = await readEventsConfigFile(eventData)
|
let eventConfig = await readEventsConfigFile(eventData)
|
||||||
for(const eventIter in eventData['events']) {
|
for(const eventIter in eventData['events']) {
|
||||||
if(eventConfig[eventData['events'][eventIter]['id']] === undefined) {
|
if(eventConfig[eventData['events'][eventIter]['id']] === undefined) {
|
||||||
eventConfig[eventData['events'][eventIter]['id']] = await insertNewEventConfig(eventData, eventIter, eventData['events'][eventIter]['id'])
|
eventConfig[eventData['events'][eventIter]['id']] = await insertNewEventConfig(eventData, eventIter, eventData['events'][eventIter]['id'])
|
||||||
}
|
}
|
||||||
|
|
||||||
if(eventData['events'][eventIter]['enabled']) {
|
if(eventData['events'][eventIter]['enabled']) {
|
||||||
if(eventData['events'][eventIter]['type'] === 'stamp') {
|
if(eventData['events'][eventIter]['type'] === 'stamp') {
|
||||||
$('#stampevent_select').append(
|
$('#stampevent_select').append(
|
||||||
'<option value=' + eventData['events'][eventIter]['id'] + '>' + eventData['events'][eventIter]['name'] + '</option>'
|
'<option value=' + eventData['events'][eventIter]['id'] + '>' + eventData['events'][eventIter]['name'] + '</option>'
|
||||||
)
|
)
|
||||||
} else if(eventData['events'][eventIter]['type'] === 'gift') {
|
} else if(eventData['events'][eventIter]['type'] === 'gift') {
|
||||||
$('#giftevent_select').append(
|
$('#giftevent_select').append(
|
||||||
'<option value=' + eventData['events'][eventIter]['id'] + '>' + eventData['events'][eventIter]['name'] + '</option>'
|
'<option value=' + eventData['events'][eventIter]['id'] + '>' + eventData['events'][eventIter]['name'] + '</option>'
|
||||||
)
|
)
|
||||||
} else if(eventData['events'][eventIter]['type'] === 'cross_online') {
|
} else if(eventData['events'][eventIter]['type'] === 'cross_online') {
|
||||||
$('#crossevent_select').append(
|
$('#crossevent_select').append(
|
||||||
'<option value=' + eventData['events'][eventIter]['id'] + '>' + eventData['events'][eventIter]['name'] + '</option>'
|
'<option value=' + eventData['events'][eventIter]['id'] + '>' + eventData['events'][eventIter]['name'] + '</option>'
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$('#event-submit').on('click', async function() {
|
$('#event-submit').on('click', async function() {
|
||||||
$.each($('span.check'), function(index, value) {
|
$.each($('span.check'), function(index, value) {
|
||||||
for(const eventIter in eventData['events']) {
|
for(const eventIter in eventData['events']) {
|
||||||
let toggle = true
|
let toggle = true
|
||||||
if($(value).css('background-color').includes("54, 54, 54")) {
|
if($(value).css('background-color').includes("54, 54, 54")) {
|
||||||
toggle = false
|
toggle = false
|
||||||
}
|
}
|
||||||
|
|
||||||
if(eventData['events'][eventIter]['id'] === $(value).parent().children('input').attr('name')) {
|
if(eventData['events'][eventIter]['id'] === $(value).parent().children('input').attr('name')) {
|
||||||
eventConfig[eventData['events'][eventIter]['id']]['toggle'] = toggle
|
eventConfig[eventData['events'][eventIter]['id']]['toggle'] = toggle
|
||||||
} else if ($(value).parent().children('input').attr('name').includes(eventData['events'][eventIter]['id'])) {
|
} else if ($(value).parent().children('input').attr('name').includes(eventData['events'][eventIter]['id'] + "_")) {
|
||||||
eventConfig[eventData['events'][eventIter]['id']]['toggle'][[$(value).parent().children('input').attr('name')]] = toggle
|
eventConfig[eventData['events'][eventIter]['id']]['toggle'][[$(value).parent().children('input').attr('name')]] = toggle
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
await emit("manageEvents", {eventConfig: eventConfig}).then(
|
await emit("manageEvents", {eventConfig: eventConfig}).then(
|
||||||
function(response) {
|
function(response) {
|
||||||
alert('Saved.')
|
alert('Saved.')
|
||||||
},
|
},
|
||||||
function(error) {
|
function(error) {
|
||||||
console.log(error)
|
console.log(error)
|
||||||
}
|
}
|
||||||
)
|
)
|
||||||
})
|
})
|
||||||
|
|
||||||
$('select').change(async function(event) {
|
$('select').change(async function(event) {
|
||||||
let selectClass = '#' + $(this).attr('id')
|
let selectClass = '#' + $(this).attr('id')
|
||||||
let listClasses = {'#stampevent_select': 'stamp', '#giftevent_select': 'gift', '#crossevent_select': 'cross'}
|
let listClasses = {'#stampevent_select': 'stamp', '#giftevent_select': 'gift', '#crossevent_select': 'cross'}
|
||||||
$('.' + listClasses[selectClass] + '.list').empty()
|
$('.' + listClasses[selectClass] + '.list').empty()
|
||||||
for(const eventIter in eventData['events']) {
|
for(const eventIter in eventData['events']) {
|
||||||
if(eventData['events'][eventIter]['id'] === $(selectClass).val()) {
|
if(eventData['events'][eventIter]['id'] === $(selectClass).val()) {
|
||||||
$('.' + listClasses[selectClass] + '.list').append(
|
$('.' + listClasses[selectClass] + '.list').append(
|
||||||
generateEventToggles(eventData['events'][eventIter], eventConfig[eventData['events'][eventIter]['id']], eventData['events'][eventIter]['enabled'])
|
generateEventToggles(eventData['events'][eventIter], eventConfig[eventData['events'][eventIter]['id']], eventData['events'][eventIter]['enabled'])
|
||||||
)
|
)
|
||||||
$('div.main').append(
|
$('div.main').append(
|
||||||
$('<div class="field is-grouped"><div class="control is-expanded"></div><div class="control"><button class="button is-link" id="event-submit">Apply</button></div></div>')
|
$('<div class="field is-grouped"><div class="control is-expanded"></div><div class="control"><button class="button is-link" id="event-submit">Apply</button></div></div>')
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
|
|
||||||
})
|
})
|
||||||
|
|||||||
@@ -75,31 +75,51 @@ async function loadItems(itemSet, gene_edition, items_crew, items_stamp, items_s
|
|||||||
if('crew' in geneItems.items) {
|
if('crew' in geneItems.items) {
|
||||||
$('.item_banners').append('<div style="padding: 5px"><h3>Nemsys Crew</h3></div>')
|
$('.item_banners').append('<div style="padding: 5px"><h3>Nemsys Crew</h3></div>')
|
||||||
$('.item_banners').append('<div class=crew-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
|
$('.item_banners').append('<div class=crew-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
|
||||||
loadImages(geneItems.items['crew'].sort(function(a, b){return parseInt(a.id) - parseInt(b.id)}), 'crew', items_crew)
|
loadImages(geneItems.items['crew'].sort(function(a, b) {
|
||||||
|
if(a.id < b.id) { return -1; }
|
||||||
|
if(a.id > b.id) { return 1; }
|
||||||
|
return 0;
|
||||||
|
}), 'crew', items_crew)
|
||||||
}
|
}
|
||||||
|
|
||||||
if('stamp' in geneItems.items) {
|
if('stamp' in geneItems.items) {
|
||||||
$('.item_banners').append('<div style="padding: 5px"><h3>Appeal Stamp</h3></div>')
|
$('.item_banners').append('<div style="padding: 5px"><h3>Appeal Stamp</h3></div>')
|
||||||
$('.item_banners').append('<div class=stamp-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
|
$('.item_banners').append('<div class=stamp-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
|
||||||
loadImages(geneItems.items['stamp'].sort(function(a, b){return parseInt(a.id) - parseInt(b.id)}), 'stamp', items_stamp)
|
loadImages(geneItems.items['stamp'].sort(function(a, b) {
|
||||||
|
if(a.id < b.id) { return -1; }
|
||||||
|
if(a.id > b.id) { return 1; }
|
||||||
|
return 0;
|
||||||
|
}), 'stamp', items_stamp)
|
||||||
}
|
}
|
||||||
|
|
||||||
if('subbg' in geneItems.items) {
|
if('subbg' in geneItems.items) {
|
||||||
$('.item_banners').append('<div style="padding: 5px"><h3>Submonitor BG</h3></div>')
|
$('.item_banners').append('<div style="padding: 5px"><h3>Submonitor BG</h3></div>')
|
||||||
$('.item_banners').append('<div class=bg-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
|
$('.item_banners').append('<div class=bg-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
|
||||||
loadImages(geneItems.items['subbg'].sort(function(a, b){return parseInt(a.id) - parseInt(b.id)}), 'bg', items_subbg)
|
loadImages(geneItems.items['subbg'].sort(function(a, b) {
|
||||||
|
if(a.id < b.id) { return -1; }
|
||||||
|
if(a.id > b.id) { return 1; }
|
||||||
|
return 0;
|
||||||
|
}), 'bg', items_subbg)
|
||||||
}
|
}
|
||||||
|
|
||||||
if('bgm' in geneItems.items) {
|
if('bgm' in geneItems.items) {
|
||||||
$('.item_banners').append('<div style="padding: 5px"><h3>BGM</h3></div>')
|
$('.item_banners').append('<div style="padding: 5px"><h3>BGM</h3></div>')
|
||||||
$('.item_banners').append('<div class=bgm-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
|
$('.item_banners').append('<div class=bgm-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
|
||||||
loadImages(geneItems.items['bgm'].sort(function(a, b){return parseInt(a.id) - parseInt(b.id)}), 'bgm', items_bgm)
|
loadImages(geneItems.items['bgm'].sort(function(a, b) {
|
||||||
|
if(a.id < b.id) { return -1; }
|
||||||
|
if(a.id > b.id) { return 1; }
|
||||||
|
return 0;
|
||||||
|
}), 'bgm', items_bgm)
|
||||||
}
|
}
|
||||||
|
|
||||||
if('nemsys' in geneItems.items) {
|
if('nemsys' in geneItems.items) {
|
||||||
$('.item_banners').append('<div style="padding: 5px"><h3>Nemsys</h3></div>')
|
$('.item_banners').append('<div style="padding: 5px"><h3>Nemsys</h3></div>')
|
||||||
$('.item_banners').append('<div class=nemsys-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
|
$('.item_banners').append('<div class=nemsys-items style="text-align: center; background-color: #3a3a3a; padding: 20px; border-radius: 6px;"></div><br>')
|
||||||
loadImages(geneItems.items['nemsys'].sort(function(a, b){return parseInt(a.id) - parseInt(b.id)}), 'nemsys', items_nemsys)
|
loadImages(geneItems.items['nemsys'].sort(function(a, b) {
|
||||||
|
if(a.id < b.id) { return -1; }
|
||||||
|
if(a.id > b.id) { return 1; }
|
||||||
|
return 0;
|
||||||
|
}), 'nemsys', items_nemsys)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -10,13 +10,13 @@ function getImageFileFormat(assetType, id) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
function checkPregeneSubbg(subbg) {
|
function checkPregeneSubbg(subbg) {
|
||||||
pregeneSlideshows = [
|
let stat = $.ajax({
|
||||||
// pregene aqua
|
url:'static/asset/submonitor_bg/subbg_' + zeroPad(subbg, 4) + getImageFileFormat(0, parseInt(zeroPad(subbg, 4))),
|
||||||
166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185,
|
type:'HEAD',
|
||||||
// pregene 1
|
async: false
|
||||||
214, 215, 216, 217, 218, 219, 220, 221, 222, 223
|
}).status;
|
||||||
]
|
if(stat === 200) return false
|
||||||
return pregeneSlideshows.includes(parseInt(subbg))
|
else return true
|
||||||
}
|
}
|
||||||
|
|
||||||
;
|
;
|
||||||
@@ -45,8 +45,9 @@ $('#nemsys_select').change(function() {
|
|||||||
$('#nemsys_pre').fadeIn(200);
|
$('#nemsys_pre').fadeIn(200);
|
||||||
});
|
});
|
||||||
|
|
||||||
$('[name="subbg"]').change(function() {
|
$('[name="subbg"]').change(async function() {
|
||||||
$('#sub_pre').fadeOut(200, () => { $('#sub_pre').attr("src", checkPregeneSubbg($('[name="subbg"]').val()) ? "static/asset/submonitor_bg/subbg_" + zeroPad($('[name="subbg"]').val(), 4) + "_0" + (Math.floor(Math.random() * 3) + 1) + getImageFileFormat(0, parseInt(zeroPad($('[name="subbg"]').val(), 4))) : "static/asset/submonitor_bg/subbg_" + zeroPad($('[name="subbg"]').val(), 4) + getImageFileFormat(0, parseInt(zeroPad($('[name="subbg"]').val(), 4)) )); });
|
let isSubbgSlideshow = checkPregeneSubbg($('[name="subbg"]').val())
|
||||||
|
$('#sub_pre').fadeOut(200, () => { $('#sub_pre').attr("src", isSubbgSlideshow ? "static/asset/submonitor_bg/subbg_" + zeroPad($('[name="subbg"]').val(), 4) + "_0" + (Math.floor(Math.random() * 3) + 1) + getImageFileFormat(0, parseInt(zeroPad($('[name="subbg"]').val(), 4))) : "static/asset/submonitor_bg/subbg_" + zeroPad($('[name="subbg"]').val(), 4) + getImageFileFormat(0, parseInt(zeroPad($('[name="subbg"]').val(), 4)) )); });
|
||||||
$('#sub_pre').fadeIn(200);
|
$('#sub_pre').fadeIn(200);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -1,102 +1,118 @@
|
|||||||
{
|
{
|
||||||
"events": [
|
"events": [
|
||||||
{
|
{
|
||||||
"id": "xrecord",
|
"id": "xrecord",
|
||||||
"type": "cross_online",
|
"type": "cross_online",
|
||||||
"enabled": false,
|
"enabled": false,
|
||||||
"name": "X-record",
|
"name": "X-record",
|
||||||
"info": [
|
"info": [
|
||||||
"1st set of songs from X-record; originally unlocked by playing either SOUND VOLTEX on the Valkyrie model, or beatmaniaIIDX on the Lightning model.<br>Enable this option to have them automatically unlocked and saved to your account.",
|
"1st set of songs from X-record; originally unlocked by playing either SOUND VOLTEX on the Valkyrie model, or beatmaniaIIDX on the Lightning model.<br>Not implemented yet",
|
||||||
"2nd set of songs from X-record; originally unlocked by playing either SOUND VOLTEX on the Valkyrie model, or beatmaniaIIDX on the Lightning model.<br>Enable this option to have them automatically unlocked and saved to your account."
|
"2nd set of songs from X-record; originally unlocked by playing either SOUND VOLTEX on the Valkyrie model, or beatmaniaIIDX on the Lightning model.<br>Not implemented yet",
|
||||||
]
|
"2nd set of songs from X-record; originally unlocked by playing either SOUND VOLTEX on the Valkyrie model, or beatmaniaIIDX on the Lightning model.<br>Not implemented yet"
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"id": "konasute",
|
{
|
||||||
"type": "gift",
|
"id": "konasute",
|
||||||
"enabled": true,
|
"type": "gift",
|
||||||
"name": "グレイスからの挑戦状!! (GRACE kara no chousenjou!!)",
|
"enabled": true,
|
||||||
"info": [
|
"name": "グレイスからの挑戦状!! (GRACE kara no chousenjou!!)",
|
||||||
"Enables unlock for the song 'ドゥサンコオデッセイ!!' by cosMo@暴走P upon logging in.<br>This song is originally unlocked by having played it first on the コナステ (Konasute) version of Sound Voltex.",
|
"info": [
|
||||||
"Enables unlock for the song 'αzalea' by BlackY upon logging in.<br>This song is originally unlocked by having played it first on the コナステ (Konasute) version of Sound Voltex.",
|
"Enables unlock for the song 'ドゥサンコオデッセイ!!' by cosMo@暴走P upon logging in.<br>This song is originally unlocked by having played it first on the コナステ (Konasute) version of Sound Voltex.",
|
||||||
"Enables unlock for the song 'BAYONEX' by かめりあ as \"Revenge of Riot\" upon logging in.<br>This song is originally unlocked by having played it first on the コナステ (Konasute) version of Sound Voltex.",
|
"Enables unlock for the song 'αzalea' by BlackY upon logging in.<br>This song is originally unlocked by having played it first on the コナステ (Konasute) version of Sound Voltex.",
|
||||||
"Enables unlock for the song 'Reverenced Flower' by ぺのれり upon logging in.<br>This song is originally unlocked by having played it first on the コナステ (Konasute) version of Sound Voltex.",
|
"Enables unlock for the song 'BAYONEX' by かめりあ as \"Revenge of Riot\" upon logging in.<br>This song is originally unlocked by having played it first on the コナステ (Konasute) version of Sound Voltex.",
|
||||||
"Enables unlock for the song '《Re:miniscence》' by かねこちはる upon logging in.<br>This song is originally unlocked by having played it first on the コナステ (Konasute) version of Sound Voltex."
|
"Enables unlock for the song 'Reverenced Flower' by ぺのれり upon logging in.<br>This song is originally unlocked by having played it first on the コナステ (Konasute) version of Sound Voltex.",
|
||||||
]
|
"Enables unlock for the song '《Re:miniscence》' by かねこちはる upon logging in.<br>This song is originally unlocked by having played it first on the コナステ (Konasute) version of Sound Voltex."
|
||||||
},
|
]
|
||||||
{
|
},
|
||||||
"id": "bpl2021",
|
{
|
||||||
"type": "cross_online",
|
"id": "bpl2021",
|
||||||
"enabled": false,
|
"type": "cross_online",
|
||||||
"name": "BPL応援 楽曲解禁スタンプラリー (BPL ouen gakkyoku kaikin stamp rally)",
|
"enabled": false,
|
||||||
"info": "Songs in this event are originally unlocked by accessing the official BEMANI PRO LEAGUE 2021 website and obtaining the stamp by watching VODs of the BPL competition.<br>Enable this option to activate this event."
|
"name": "BPL応援 楽曲解禁スタンプラリー (BPL ouen gakkyoku kaikin stamp rally)",
|
||||||
},
|
"info": "Songs in this event are originally unlocked by accessing the official BEMANI PRO LEAGUE 2021 website and obtaining the stamp by watching VODs of the BPL competition.<br>Enable this option to activate this event."
|
||||||
{
|
},
|
||||||
"id": "bsb2021",
|
{
|
||||||
"type": "cross_online",
|
"id": "bsb2021",
|
||||||
"enabled": false,
|
"type": "cross_online",
|
||||||
"name": "BEMANI 2021真夏の歌合戦5番勝負 (BEMANI 2021 manatsu no utagassen 5 ban shoubu)",
|
"enabled": false,
|
||||||
"info": "This is a cross-BEMANI event. Songs are originally unlocked by playing participating BEMANI games and earn 'Yell' points.<br>Enable this option to activate this event."
|
"name": "BEMANI 2021真夏の歌合戦5番勝負 (BEMANI 2021 manatsu no utagassen 5 ban shoubu)",
|
||||||
},
|
"info": "This is a cross-BEMANI event. Songs are originally unlocked by playing participating BEMANI games and earn 'Yell' points.<br>Enable this option to activate this event."
|
||||||
{
|
},
|
||||||
"id": "sdvx10thstamp",
|
{
|
||||||
"type": "stamp",
|
"id": "sdvx10thstamp",
|
||||||
"enabled": true,
|
"type": "stamp",
|
||||||
"name": "SOUND VOLTEX 10th Anniversary",
|
"enabled": true,
|
||||||
"info": "Stamp event to unlock 7 songs.<br>Toggle this on to enable this stamp event."
|
"name": "SOUND VOLTEX 10th Anniversary",
|
||||||
},
|
"info": "Stamp event to unlock 7 songs in any order.<br>Toggle this on to enable this stamp event."
|
||||||
{
|
},
|
||||||
"id": "reflecstamp",
|
{
|
||||||
"type": "stamp",
|
"id": "reflecstamp",
|
||||||
"enabled": true,
|
"type": "stamp",
|
||||||
"name": "REFLEC BEAT Song Stamp Event",
|
"enabled": true,
|
||||||
"info": "Stamp event to unlock 5 songs originally from the REFLEC BEAT game series.<br>Toggle this on to enable this stamp event."
|
"name": "REFLEC BEAT Song Stamp Event",
|
||||||
},
|
"info": "Stamp event to unlock 5 songs originally from the REFLEC BEAT game series.<br>Toggle this on to enable this stamp event."
|
||||||
{
|
},
|
||||||
"id": "gmz2022",
|
{
|
||||||
"type": "cross_online",
|
"id": "gmz2022",
|
||||||
"enabled": false,
|
"type": "cross_online",
|
||||||
"name": "いちかのごちゃまぜMix UP! (Ichika no gochamaze Mix UP! )",
|
"enabled": false,
|
||||||
"info": "This is a cross-BEMANI event. Songs include some that are shared from other BEMANI games and some that are mashup/remixes of the shared songs. These are originally unlocked by playing participating BEMANI games and earning points to fill different gauges.<br><br>Enable this option to activate this event."
|
"name": "いちかのごちゃまぜMix UP! (Ichika no gochamaze Mix UP! )",
|
||||||
},
|
"info": "This is a cross-BEMANI event. Songs include some that are shared from other BEMANI games and some that are mashup/remixes of the shared songs. These are originally unlocked by playing participating BEMANI games and earning points to fill different gauges.<br><br>Enable this option to activate this event."
|
||||||
{
|
},
|
||||||
"id": "bpl2022",
|
{
|
||||||
"type": "gift",
|
"id": "bpl2022",
|
||||||
"enabled": true,
|
"type": "gift",
|
||||||
"name": "BEMANI PRO LEAGUE -SEASON 2-! Original Song",
|
"enabled": true,
|
||||||
"info": [
|
"name": "BEMANI PRO LEAGUE -SEASON 2-! Original Song",
|
||||||
"Week 1 songs: 'Chat perché' and 'WINNING ROAD'<br>Enable this option to have these songs unlocked on the next login. Otherwise, the songs are still unlockable through BLASTER GATE.",
|
"info": [
|
||||||
"Week 2 songs: 'ENDGAME' and 'ИADIR'<br>Enable this option to have these songs unlocked on the next login. Otherwise, the songs are still unlockable through BLASTER GATE.",
|
"Toggle to have the songs from the 1st week unlocked on the next login.<br>Otherwise, the songs are still unlockable through BLASTER GATE.<br>Songs: 'Chat perché' and 'WINNING ROAD'",
|
||||||
"Week 3 songs: 'Ice Fortress' and 'MURASAME'<br>Enable this option to have these songs unlocked on the next login. Otherwise, the songs are still unlockable through BLASTER GATE.",
|
"Toggle to have the songs from the 2nd week unlocked on the next login.<br>Otherwise, the songs are still unlockable through BLASTER GATE.<br>Songs: 'ENDGAME' and 'ИADIR'",
|
||||||
"Week 4 songs: 'Initiating League' and 'Scat Jazz Dance'<br>Enable this option to have these songs unlocked on the next login. Otherwise, the songs are still unlockable through BLASTER GATE.",
|
"Toggle to have the songs from the 3rd week unlocked on the next login.<br>Otherwise, the songs are still unlockable through BLASTER GATE.<br>Songs: 'Ice Fortress' and 'MURASAME'",
|
||||||
"Week 5 songs: '最果ての勇者にラブソングを' and '灼ナル刃、破カヰ譜'<br>Enable this option to have these songs unlocked on the next login. Otherwise, the songs are still unlockable through BLASTER GATE.",
|
"Toggle to have the songs from the 4th week unlocked on the next login.<br>Otherwise, the songs are still unlockable through BLASTER GATE.<br>Songs: 'Initiating League' and 'Scat Jazz Dance'",
|
||||||
"Week 6 songs: 'Fl0ating:' and 'Petit espoir'<br>Enable this option to have these songs unlocked on the next login. Otherwise, the songs are still unlockable through BLASTER GATE.",
|
"Toggle to have the songs from the 5th week unlocked on the next login.<br>Otherwise, the songs are still unlockable through BLASTER GATE.<br>Songs: '最果ての勇者にラブソングを' and '灼ナル刃、破カヰ譜'",
|
||||||
"Week 7 songs: 'Paradigm Shift' and 'イグノアザーズ'<br>Enable this option to have these songs unlocked on the next login. Otherwise, the songs are still unlockable through BLASTER GATE.",
|
"Toggle to have the songs from the 6th week unlocked on the next login.<br>Otherwise, the songs are still unlockable through BLASTER GATE.<br>Songs: 'Fl0ating:' and 'Petit espoir'",
|
||||||
"Week 8 songs: 'Thousand Triggers' and 'trea→journey'<br>Enable this option to have these songs unlocked on the next login. Otherwise, the songs are still unlockable through BLASTER GATE.",
|
"Toggle to have the songs from the 7th week unlocked on the next login.<br>Otherwise, the songs are still unlockable through BLASTER GATE.<br>Songs: 'Paradigm Shift' and 'イグノアザーズ'",
|
||||||
"Week 9 songs: 'MILITARY R04D'<br>Enable this option to have this song unlocked on the next login. Otherwise, the songs are still unlockable through BLASTER GATE.",
|
"Toggle to have the songs from the 8th week unlocked on the next login.<br>Otherwise, the songs are still unlockable through BLASTER GATE.<br>Songs: 'Thousand Triggers' and 'trea→journey'",
|
||||||
"Week 10 songs: 'DEUX EX MĀXHINĀ'<br>Enable this option to have this song unlocked on the next login. Otherwise, the songs are still unlockable through BLASTER GATE.",
|
"Toggle to have the song from the 9th week unlocked on the next login.<br>Otherwise, the songs are still unlockable through BLASTER GATE.<br>Song: 'MILITARY R04D'",
|
||||||
"Week 11 songs: 'All We Need is HAPPY END!!!'<br>Enable this option to have this song unlocked on the next login. Otherwise, the songs are still unlockable through BLASTER GATE."
|
"Toggle to have the song from the 10th week unlocked on the next login.<br>Otherwise, the songs are still unlockable through BLASTER GATE.<br>Song: 'DEUX EX MĀXHINĀ'",
|
||||||
]
|
"Toggle to have the song from the 11th week unlocked on the next login.<br>Otherwise, the songs are still unlockable through BLASTER GATE.<br>Song: 'All We Need is HAPPY END!!!'",
|
||||||
},
|
"Toggle to have the song from the 12th week unlocked on the next login.<br>Otherwise, the songs are still unlockable through BLASTER GATE.<br>Song: 'Glory of Fighters'"
|
||||||
{
|
]
|
||||||
"id": "pcbevent",
|
},
|
||||||
"type": "stamp",
|
{
|
||||||
"enabled": false,
|
"id": "pcbevent",
|
||||||
"name": "PCBおかわりスタンプイベント | PCB Refill Stamp Event",
|
"type": "stamp",
|
||||||
"info": "Stamp event to earn PCB. Once the stamp goal is complete, it will start over and you can earn more PCB.<br>Toggle this on to enable this stamp event."
|
"enabled": false,
|
||||||
},
|
"name": "PCBおかわりスタンプイベント | PCB Refill Stamp Event",
|
||||||
{
|
"info": "Stamp event to earn PCB. Once the stamp goal is complete, it will start over and you can earn more PCB.<br>Toggle this on to enable this stamp event."
|
||||||
"id": "2023stamp",
|
},
|
||||||
"type": "stamp",
|
{
|
||||||
"enabled": true,
|
"id": "2023stamp",
|
||||||
"name": "んだんだぺったん☆二〇二三 | New Year 2023 Stamp Event",
|
"type": "stamp",
|
||||||
"info": "Stamp event to unlock the んだんだぺったん☆二〇二三 appeal card.<br>Toggle this on to enable this stamp event."
|
"enabled": true,
|
||||||
},
|
"name": "んだんだぺったん☆二〇二三 | New Year 2023 Stamp Event",
|
||||||
{
|
"info": "Stamp event to unlock the んだんだぺったん☆二〇二三 appeal card.<br>Toggle this on to enable this stamp event."
|
||||||
"id": "himehina",
|
},
|
||||||
"type": "stamp",
|
{
|
||||||
"enabled": true,
|
"id": "himehina",
|
||||||
"name": "HIMEHINAコラボイベント | HIMEHINA Collab Stamp Event",
|
"type": "stamp",
|
||||||
"info": "Stamp event to unlock the HIMEHINA crew.<br>Toggle this on to enable this stamp event."
|
"enabled": true,
|
||||||
}
|
"name": "HIMEHINAコラボイベント | HIMEHINA Collab Stamp Event",
|
||||||
]
|
"info": "Stamp event to unlock the HIMEHINA crew.<br>Toggle this on to enable this stamp event."
|
||||||
}
|
},
|
||||||
|
{
|
||||||
|
"id": "11thanniv",
|
||||||
|
"type": "stamp",
|
||||||
|
"enabled": true,
|
||||||
|
"name": "ボルテ11周年★記念限定カード | SOUND VOLTEX 11th Anniversary Stamp Event",
|
||||||
|
"info": "Stamp event to unlock the ボルテ11周年★記念限定カード appeal card to commemorate 11 years of SOUND VOLTEX.<br>Toggle this on to enable this stamp event."
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": "bpl2022stamp",
|
||||||
|
"type": "stamp",
|
||||||
|
"enabled": false,
|
||||||
|
"name": "Commemorating BEMANI PRO LEAGUE -SEASON 2-! Original Song Contest Special Stamp Event",
|
||||||
|
"info": "Stamp event to unlock 9 songs, including SuddeИDeath. Songs can be unlocked in any order, except for SuddeИDeath, which will be available to unlock once all the other songs are unlocked.<br>Toggle this on to enable this stamp event."
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
|||||||
@@ -17,6 +17,15 @@
|
|||||||
"stamp": [110, 111, 112, 113, 114, 115, 116, 117, 118, 119],
|
"stamp": [110, 111, 112, 113, 114, 115, 116, 117, 118, 119],
|
||||||
"subbg": [200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
|
"subbg": [200, 201, 202, 203, 204, 205, 206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 3,
|
||||||
|
"name": "Premium Generator Vol. 2",
|
||||||
|
"items": {
|
||||||
|
"crew": [136, 137, 138],
|
||||||
|
"stamp": [151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162],
|
||||||
|
"subbg": [238, 239, 240, 241, 242, 243, 244, 245, 246, 247, 248, 249, 250, 251, 252, 253, 254, 255, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"valgene":[
|
"valgene":[
|
||||||
@@ -127,6 +136,16 @@
|
|||||||
"bgm": [48, 49, 50, 51],
|
"bgm": [48, 49, 50, 51],
|
||||||
"nemsys": [33, 34]
|
"nemsys": [33, 34]
|
||||||
}
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"id": 11,
|
||||||
|
"name": "Valkyrie Generator Vol. 11",
|
||||||
|
"items":{
|
||||||
|
"stamp": [163, 164, 165, 166, 167, 168, 169, 170, 171, 172, 173, 174, 175, 176, 177, 178, 179, 180, 181, 182, 183, 184, 185, 186, 187, 188, 189, 190, 191, 192, 193],
|
||||||
|
"subbg": [273, 274, 275, 276, 277, 278, 279, 280],
|
||||||
|
"bgm": [52, 53, 54, 55, 56, 57, 58, 59],
|
||||||
|
"nemsys": [35, 36, 37, 38, 39, 40, 41, 42]
|
||||||
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user