From ec195f1187b277bd6c9f4dd582980cc4229a1849 Mon Sep 17 00:00:00 2001 From: vvo <> Date: Thu, 14 Sep 2023 15:39:24 +0800 Subject: [PATCH] 230912 support --- sdvx@asphyxia/README.md | 148 +- sdvx@asphyxia/data/exg.ts | 2262 ++++++++++++++--- sdvx@asphyxia/handlers/common.ts | 177 +- sdvx@asphyxia/handlers/profiles.ts | 29 +- sdvx@asphyxia/handlers/webui.ts | 39 +- sdvx@asphyxia/index.ts | 20 +- sdvx@asphyxia/models/course_record.ts | 2 + sdvx@asphyxia/models/profile.ts | 11 + sdvx@asphyxia/models/skill.ts | 1 + sdvx@asphyxia/templates/load.pug | 7 +- sdvx@asphyxia/webui/asset/js/generator.js | 65 +- sdvx@asphyxia/webui/asset/js/preview.js | 26 +- .../webui/asset/js/updateResources.js | 167 +- .../webui/asset/json/customize_data_ext.json | 58 + sdvx@asphyxia/webui/asset/json/events.json | 32 + .../webui/asset/json/valgene_data.json | 41 +- sdvx@asphyxia/webui/profile_--setting.pug | 13 + .../webui/profile_premium generator.pug | 3 + .../webui/profile_valkyrie generator.pug | 3 + 19 files changed, 2364 insertions(+), 740 deletions(-) create mode 100644 sdvx@asphyxia/webui/asset/json/customize_data_ext.json diff --git a/sdvx@asphyxia/README.md b/sdvx@asphyxia/README.md index 591eeba..b282450 100644 --- a/sdvx@asphyxia/README.md +++ b/sdvx@asphyxia/README.md @@ -1,109 +1,69 @@ # SOUND VOLTEX -Plugin Version: **v6.0.0** +**Plugin Version:** fork-6.0.2.1 -Message from repo fork: +**Supported game versions:** EXCEED GEAR +**Latest supported game datacode:** 2023091200 + +**Unsupported game versions:** Every other game, as they're untested. + +**Required Asphyxia Core version** [1.50c](https://github.com/asphyxia-core/asphyxia-core.github.io/releases/tag/v1.50) + +**Notes:** - This fork enables a few of the features that are added in the later updates of Exceed Gear. However, I still highly recommend using the official stable version of the plugin. -- Most importantly, run the [WebUI Asset Update](/plugin/sdvx@asphyxia/update%20webui%20assets) for everything to properly work. -- Don't expect stability, there might be some bugs. Please back up your data to prevent unwanted issues (just in case) +- Most importantly, for everything to properly work: + - run the [WebUI Asset Update](/plugin/sdvx@asphyxia/update%20webui%20assets). Do this every data update. + - go to [Unlocking Events](/plugin/sdvx@asphyxia/unlocking%20events) and click "Apply" at least once. Check out the many options available while you're there. +- Don't expect stability, there might be some bugs. Please back up your save data to prevent unwanted issues (just in case) -Supported Versions: -- BOOTH -- HEAVENLY HAVEN -- VIVIDWAVE -- EXCEED GEAR - -Versions Not Supported: - -- INFINITE INFECTION -- GRAVITY WARS - -The plugin now mainly maintained versions: - -- VIVIDWAVE -- EXCEED GEAR - -Fork Changelog +Changelog =========== -### Latest supported game version -- 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.) +## fork-6.0.2.1 ### 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) +1. Fixed missing Megamix songs (extend string param getting cut off) + +## fork-6.0.2.0 + +### New: + +1. Support for EG 2023091200 +2. Added Arena Station 8, 9 and 10. +3. Added Valkyrie Generator Vol. 12 +4. Added Premium Generator + - Re:Zero Set 1 + - Re:Zero Set 2 + - Vol. 3 +5. Enabled HEXADIVER 8 and 9 +6. Added option for BPL Team Supporter banner +7. Added support for System Backgrounds +8. Added event data: + - BPL S3 Triple Tribe songs unlock toggle (suspicions, etc.) + - KAC 2023 song unlock toggle (Perfect Eater) + - KAC 2023 song stamp event (for 累乗のカルマ) + - KAC 2023 song stamp event (for Stylus & QQ) +9. Updated licensed songs and valk-exclusive songs list +10. Skill Analyzer God Mode implementation. + - Special courses (Red Bull courses, etc.) do not have God Mode courses. +11. Added and fixed Skill Analyzer course data: + - Sets 6 and 7 + - BMK2021 courses + - Spring 2023 courses + - KAC 2023 Qualifier course sets 1 & 2 +12. Megamix Battle song list update + +### Fixes: + +1. Reduced songNum value from 3000 to 2100. Potential fix for some users with "unlock all songs" enabled who are experiencing request timeouts resulting in missing features and songs. +2. Fixed bug in stamp select data. +3. Fixed bug for when common.ts or profiles.ts is looking for a specific event key but it is undefined. +3. Skill Analyzer: skill level requirement for Lv.11 and ∞. Song input/unlock status must be met as well, or just use the unlock all songs option in the WebUI. ### 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 - -### New: - -1. Enabled stamp events. Check the Stamp Events dropdown at the [Unlocking Events](/plugin/sdvx@asphyxia/unlocking%20events) page to see which stamp events are available to toggle for now. - -### Fixes: - -1. Various event-related fixes - - Re-did the Unlocking Events functionalities (categorized events by type, etc.) - - Rewrote handling of these events in common.ts and profiles.ts - -## fork-6.0.0.1 - -### New: - -1. Support for 221220 -2. Arena Station -3. Valkyrie Generator support -- requires Valkyrie mode -4. WebUI features: - - [WebUI asset update](/plugin/sdvx@asphyxia/update%20webui%20assets) -- retrieves assets from sdvx data to update various webui assets such as the music db, bgm, submonitor bg, nemsys, crew, etc. Necessary to run for this plugin to properly work, and after updating arcade data. - - [Unlocking Events page](/plugin/sdvx@asphyxia/unlocking%20events) -- a page to toggle unlocking of songs and other items unlocked by previous events (stamp events, etc.) - - [Profile pages](/plugin/sdvx@asphyxia/profiles): - - Valkyrie Generator item list -- displays a profile's valkyrie/premium generator items that they've already unlocked - - Gacha feature for Premium Generator - - [Songs List](/plugin/sdvx@asphyxia/songs%20list) -5. Handler for showing unlocked items on card entry. - -### Fixes: - -1. Various generator issues: - - Incorrect valkyrie/premium generator volume data fixed - - Generator code bug fixes. -2. April fools event trigger: - - Code checks if date has "4/1" in it anywhere, which means it will trigger on dates like 4/10, and 4/15. This has been fixed. - -Change Log -=========== - -## 6.0.0 - -1. Plugin version now follows the pattern (MAX SDVX VER,Plugin VER of supporting the MAX version of SDVX,hotfix). -2. Initial support for EXCEED GEAR. - -## 1.1 - -1. Support VIVIDWAVE +2. Figure out how to use image (png) files to appear in information/news popup and in demo_info. +3. Megamix Battle song list updated but I cannot make a lot of them appear in the list. diff --git a/sdvx@asphyxia/data/exg.ts b/sdvx@asphyxia/data/exg.ts index 56f9250..7e94563 100644 --- a/sdvx@asphyxia/data/exg.ts +++ b/sdvx@asphyxia/data/exg.ts @@ -32,14 +32,15 @@ export const EVENT6 = [ 'CREW_SELECT_ABLE', 'PREMIUM_TIME_ENABLE', 'OMEGA_ENABLE\t1,2,3,4,5,6,7,8,9', - 'HEXA_ENABLE\t1,2,3,4,5,6,7', + 'HEXA_ENABLE\t1,2,3,4,5,6,7,8,9', 'MEGAMIX_ENABLE', 'VALGENE_ENABLE', 'ARENA_ENABLE', 'DISP_PASELI_BANNER', 'S_PUC_EFFECT_ENABLE', 'PLAYER_RADAR_ENABLE', - 'SINGLE_BATTLE_ENABLE' + 'SINGLE_BATTLE_ENABLE', + // 'DEMOLOOP_INFORMATION', ]; export const INFORMATION6 = { @@ -51,10 +52,10 @@ export const INFORMATION6 = { '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]'], '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]'] + '2023091200': ['[img:ver06/info_psd.ifs:230831_info_generator]', '[img:ver06/info_psd.ifs:230914_hexadiver]'] } -export const MISSINGSONGS6 = [ +export const LICENSED_SONGS6 = [ '1471', '1477', '1634', '1635', '1636', '1637', '1649', '1650', '1653', '1654', '1655', '1657', '1658', '1739', '1740', '1741', '1744', '1753', '1754', '1755', '1756', '1757', '1758', '1759', '1760', '1761', '1810', '1813', '1814', '1821', @@ -65,7 +66,10 @@ export const MISSINGSONGS6 = [ '1903', '1904', '1911', '1916', '1917', // 230228 - 230425 - '1960', '1961', '1962', '2028', '2029', '1912', '1913', '2030' + '1960', '1961', '1962', '2028', '2029', '1912', '1913', '2030', + + // 230518 - 230912 + '2031', '2032', '2033', '2034', '2035', '2036', '1905', '1882', '2058' ] export const STAMP_EVENTS6 = { @@ -74,9 +78,9 @@ export const STAMP_EVENTS6 = { 'info': { 'id': 1, 'stmpSlHd': '[sz:22][c:FFA6AA]SOUND VOLTEX 10th Anniversary', - 'stmpSlFt': '[sz:23]期間 2022/01/18~2022/03/21', + 'stmpSlFt': '[sz:23]期間 2022/01/18~2022/03/21', 'stmpHd': '[sz:22][c:DAC491]SPECIAL STAMP BONUS', - 'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 1/18~3/21', + 'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 1/18~3/21', 'stmpBg': 'bg_stamp_anniversary_10th', 'data': [ { @@ -145,7 +149,7 @@ export const STAMP_EVENTS6 = { 'stmpSlHd': '', 'stmpSlFt': '', 'stmpHd': '[sz:22][c:DAC491]SPECIAL STAMP BONUS', - 'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 3/30 ~ 5/8', + 'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 3/30~5/8', 'stmpBg': '', 'data': [ { @@ -170,7 +174,7 @@ export const STAMP_EVENTS6 = { 'stmpSlHd': '', 'stmpSlFt': '', 'stmpHd': '[sz:22][c:DAC491]SPECIAL STAMP BONUS', - 'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 12/8 ~ 1/15', + 'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 12/8~1/15', 'stmpBg': '', 'data': [ { @@ -195,7 +199,7 @@ export const STAMP_EVENTS6 = { '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', + 'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 1/1~1/9', 'stmpBg': '', 'data': [ { @@ -214,9 +218,9 @@ export const STAMP_EVENTS6 = { 'info': { 'id': 2, 'stmpSlHd': '[sz:22][c:FFA6AA]HIMEHINAコラボ開催中!', - 'stmpSlFt': '[sz:23]期間 2022/04/07~2022/05/08', + 'stmpSlFt': '[sz:23]期間 2022/04/07~2022/05/08', 'stmpHd': '[sz:22][c:DAC491]SPECIAL STAMP BONUS', - 'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 4/7 ~ 5/8', + 'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 4/7~5/8', 'stmpBg': 'bg_stamp_himehina', 'data': [ { @@ -273,7 +277,7 @@ export const STAMP_EVENTS6 = { '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', + 'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 1/1~1/9', 'stmpBg': '', 'data': [ { @@ -291,9 +295,9 @@ export const STAMP_EVENTS6 = { 'type': 'select', 'info': { 'id': 3, - 'num2': -1, + 'textstampval': -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', + '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', @@ -373,6 +377,56 @@ export const STAMP_EVENTS6 = { ] } }, + 'kac2023stamp': { + 'type': 'main', + 'info': { + 'id': 0, + 'stmpSlHd': '', + 'stmpSlFt': '', + 'stmpHd': '[sz:22][c:DAC491]SPECIAL STAMP BONUS', + 'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 8/9~9/11', + 'stmpBg': '', + 'data': [ + { + 'stmpid': 23, + 'bnr': '', + 'stps': 10, + 'stprwrd': [ + ['10', 'track', '2060', '23'], + ] + } + ] + } + }, + 'kac2023stamp2': { + 'type': 'select', + 'info': { + 'id': 4, + 'stmpSlHd': '[sz:22][c:DAC491]SPECIAL STAMP BONUS', + 'stmpSlFt': '[sz:23]期間 2023/09/20~2023/10/23', + 'stmpHd': '[sz:22][c:DAC491]SPECIAL STAMP BONUS', + 'stmpFt': '[sz:22]YOU CAN GET A STAMP AND BONUS! :)[br:5]TERM: 9/20~10/23', + 'stmpBg': 'bg_stamp_kac_11th', + 'data': [ + { + 'stmpid': 24, + 'bnr': 'sheet_track_2061', + 'stps': 10, + 'stprwrd': [ + ['10', 'track', '2061', '23'] + ] + }, + { + 'stmpid': 25, + 'bnr': 'sheet_track_2062', + 'stps': 10, + 'stprwrd': [ + ['10', 'track', '2062', '23'] + ] + } + ] + } + } } export const EVENT_SONGS6 = { @@ -409,43 +463,14 @@ export const EVENT_SONGS6 = { "bpl2022_10": ['1939'], "bpl2022_11": ['1940'], "bpl2022_12": ['1941'], - -} - -export const RESTRICTED_SONGS6 = { - // X-Record songs - 'xrecord_1': ['1736', '1737', '1738'], - 'xrecord_2': ['1847', '1848', '1849'], - 'xrecord_3': ['1980', '1978', '1979'], - // Konaste songs - 'konasute_1': ['1762'], - 'konasute_2': ['1763'], - 'konasute_3': ['1764'], - 'konasute_4': ['1765'], - 'konasute_5': ['1811'], - // BPL2021 songs - 'bpl2021': ['1808', '1809'], - // BSB2021 songs - 'bsb2021': ['1802', '1803', '1804', '1805', '1806', '1807'], - // SDVX 10th anniversary stamp event songs - 'sdvx10thstamp': ['1838', '1839', '1840', '1841', '1842', '1843', '1844'], - // REFLECT BEAT stamp event songs - 'reflecstamp': ['1850', '1851', '1852', '1853', '1854'], - // BEMANI ichika 2022 event songs - 'gmz2022': ['1906', '1907', '1908', '1909', '1910'], - // BPL2022 songs - "bpl2022_1": ['1952', '1943'], - "bpl2022_2": ['1948', '1951'], - "bpl2022_3": ['1956', '1949'], - "bpl2022_4": ['1946', '1958'], - "bpl2022_5": ['1957', '1955'], - "bpl2022_6": ['1947', '1953'], - "bpl2022_7": ['1950', '1944'], - "bpl2022_8": ['1945', '1954'], - "bpl2022_9": ['1942'], - "bpl2022_10": ['1939'], - "bpl2022_11": ['1940'], - "bpl2022_12": ['1941'], + // KAC2023 + "kac2023perfecteater": ['2059'], + "kac2023stamp": ['2060'], + "kac2023stamp2": ['2061', '2062'], + // BPL S3 Triple Tribe + "bpls3songs_1": ['2063'], + "bpls3songs_2": ['2064'], + "bpls3songs_3": ['2065'] } export const APRILFOOLSSONGS = [ @@ -453,8 +478,8 @@ export const APRILFOOLSSONGS = [ ] export const VALKYRIE_SONGS = [ - '1744', '1672', // Valk exclusives - '1855', '1742', '1743', '1745', // Arena station songs + '1744', '1672', '2063', '2064', '2065', // Valk exclusives + '1855', '1742', '1743', '1745', '1846', // Arena station songs '1736', '1737', '1738', '1847', '1848', '1849', '1980', '1978', '1979' // X-record ] @@ -1101,36 +1126,350 @@ export const ARENA = { param: 8, } ] + }, + 'Set 8 (06/08/23)': { + details: { + // season: 4, + time_start: BigInt(Date.parse('8 Jun 2023 00:00:00 GMT')), + time_end: BigInt(Date.parse('31 Dec 2099 23:59:59 GMT')), + shop_start: BigInt(Date.parse('8 Jun 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: 112, + param: 1, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 8000, + item_type: 0, + item_id: 510, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 8000, + item_type: 0, + item_id: 842, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 8000, + item_type: 0, + item_id: 281, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 4000, + item_type: 0, + item_id: 1745, + param: 23, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 4000, + item_type: 0, + item_id: 1742, + param: 23, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 8000, + item_type: 0, + item_id: 632, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 4000, + item_type: 0, + item_id: 37, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 4000, + item_type: 0, + item_id: 239, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 2000, + item_type: 0, + item_id: 111, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 2000, + item_type: 0, + item_id: 132, + param: 8, + } + ] + }, + 'Set 9 (07/13/23)': { + details: { + // season: 4, + time_start: BigInt(Date.parse('13 Jul 2023 00:00:00 GMT')), + time_end: BigInt(Date.parse('31 Dec 2099 23:59:59 GMT')), + shop_start: BigInt(Date.parse('13 Jul 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: 8000, + item_type: 0, + item_id: 634, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 8000, + item_type: 0, + item_id: 348, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 8000, + item_type: 0, + item_id: 165, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 4000, + item_type: 0, + item_id: 1743, + param: 23, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 4000, + item_type: 0, + item_id: 1846, + param: 23, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 8000, + item_type: 0, + item_id: 342, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 4000, + item_type: 0, + item_id: 131, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 4000, + item_type: 0, + item_id: 612, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 2000, + item_type: 0, + item_id: 8, + param: 8, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 2000, + item_type: 0, + item_id: 323, + param: 8, + } + ] + }, + 'Set 10 (08/17/23)': { + details: { + // season: 4, + time_start: BigInt(Date.parse('17 Aug 2023 00:00:00 GMT')), + time_end: BigInt(Date.parse('31 Dec 2099 23:59:59 GMT')), + shop_start: BigInt(Date.parse('17 Aug 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: 102, + 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: 1855, + 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': { - // details: { - // season: 0, - // time_start: BigInt(Date.parse('30 Jun 2022 00:00:00 GMT')), - // time_end: BigInt(Date.parse('31 Dec 2022 23:59:59 GMT')), - // shop_start: BigInt(Date.parse('30 Jun 2022 00:00:00 GMT')), - // shop_end: BigInt(Date.parse('31 Dec 2022 23:59:59 GMT')), - // is_open: 1, - // is_shop: 1 - // }, - // arena_items: [ - // { - // catalog_id: 1, - // catalog_type: 1, - // price: 1000, - // item_type: 1, - // item_id: 10, - // param: 1, - // }, - // { - // catalog_id: 1, - // catalog_type: 1, - // price: 1000, - // item_type: parseInt(U.GetConfig('arena_debug_item_type')), - // item_id: 10, - // param: 1, - // } - // ] - // } } export const VALGENE = { @@ -1189,6 +1528,11 @@ export const VALGENE = { valgene_name: "ヴァルキリージェネレーター 第11弾", valgene_name_english: "Valkyrie Generator Vol. 11", valgene_id: 11 + }, + { + valgene_name: "ヴァルキリージェネレーター 第12弾", + valgene_name_english: "Valkyrie Generator Vol. 12", + valgene_id: 12 } ], rarity: { @@ -1196,7 +1540,7 @@ export const VALGENE = { "17": 20, "18": 15, "19": 10, - "20": 15 + "20": 15, }, catalog: [ { @@ -1461,6 +1805,31 @@ export const VALGENE = { item_ids: [35, 36, 37, 38, 39, 40, 41, 42] } ] + }, + { + volume: 12, + items: [ + { + type: 11, + item_ids: [141] + }, + { + type: 17, + item_ids: [206, 207, 208, 209, 210, 211, 212, 213, 214, 215, 216, 217, 218, 219, 220, 221, 222, 223, 224, 225, 226, 227, 228, 229, 230, 231, 232, 233, 234, 235, 236, 237, 238] + }, + { + type: 18, + item_ids: [347, 348, 349, 350, 351, 352, 353, 354, 355, 356, 357, 358] + }, + { + type: 19, + item_ids: [60, 61, 62, 63] + }, + { + type: 20, + item_ids: [43] + } + ] } ] } @@ -1492,6 +1861,34 @@ export const PREGENE = [ '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] + }, + { + id: 4, + items: { + 'crew': [139], + 'stamp': [194, 195, 196, 197, 198, 199], + 'subbg': [281, 282, 283, 284, 285, 286, 287, 288, 289, 290, 291, 292, 293, 294, 295, 296, 297, 298, 299, 300, 301, 302, 303, 304, 305, 306, 307, 308, 309, 310, 311, 312, 313] + }, + probability: [0.01, 0.39, 0.6] + }, + { + id: 5, + items: { + 'crew': [140], + 'stamp': [200, 201, 202, 203, 204, 205], + 'subbg': [314, 315, 316, 317, 318, 319, 320, 321, 322, 323, 324, 325, 326, 327, 328, 329, 330, 331, 332, 333, 334, 335, 336, 337, 338, 339, 340, 341, 342, 343, 344, 345, 346] + }, + probability: [0.01, 0.39, 0.6] + }, + { + id: 6, + items: { + 'crew': [142], + 'stamp': [239, 240, 241, 242, 243, 244, 245, 246, 247, 248], + 'subbg': [359, 360, 361, 362, 363, 364, 365, 366, 367, 368], + 'sysbg': [1, 2, 3] + }, + probability: [0.01, 0.42, 0.84, 0.9] } ] @@ -1500,6 +1897,7 @@ export const COURSES6 = [ id: 1, name: 'SKILL ANALYZER 第1回 Aコース', isNew: 0, + hasGod: 1, courses: [ { id: 1, @@ -1753,7 +2151,7 @@ export const COURSES6 = [ }, { id: 11, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.11', level: 11, nameID: 11, @@ -1778,7 +2176,7 @@ export const COURSES6 = [ }, { id: 12, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.∞', level: 12, nameID: 12, @@ -1807,6 +2205,7 @@ export const COURSES6 = [ id: 2, name: 'SKILL ANALYZER 第1回 Bコース', isNew: 0, + hasGod: 1, courses: [ { id: 1, @@ -2060,7 +2459,7 @@ export const COURSES6 = [ }, { id: 11, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.11', level: 11, nameID: 11, @@ -2085,7 +2484,7 @@ export const COURSES6 = [ }, { id: 12, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.∞', level: 12, nameID: 12, @@ -2114,6 +2513,7 @@ export const COURSES6 = [ id: 3, name: 'SKILL ANALYZER 第1回 Cコース', isNew: 0, + hasGod: 1, courses: [ { id: 1, @@ -2371,6 +2771,7 @@ export const COURSES6 = [ id: 4, name: 'SKILL ANALYZER 第2回', isNew: 0, + hasGod: 1, courses: [ { id: 1, @@ -2543,7 +2944,7 @@ export const COURSES6 = [ { no: 2, mid: 1608, - mty: 4, + mty: 2, }, ], }, @@ -2624,7 +3025,7 @@ export const COURSES6 = [ }, { id: 11, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.11', level: 11, nameID: 11, @@ -2649,7 +3050,7 @@ export const COURSES6 = [ }, { id: 12, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.∞', level: 12, nameID: 12, @@ -2671,163 +3072,14 @@ export const COURSES6 = [ mty: 4, }, ], - }, - { - id: 7, - type: 0, - name: 'SKILL ANALYZER Level.07', - level: 7, - nameID: 7, - assist: 0, - tracks: [ - { - no: 0, - mid: 1224, - mty: 2, - }, - { - no: 1, - mid: 989, - mty: 2, - }, - { - no: 2, - mid: 688, - mty: 2, - }, - ], - }, - { - id: 8, - type: 0, - name: 'SKILL ANALYZER Level.08', - level: 8, - nameID: 8, - assist: 0, - tracks: [ - { - no: 0, - mid: 1201, - mty: 2, - }, - { - no: 1, - mid: 980, - mty: 2, - }, - { - no: 2, - mid: 900, - mty: 2, - }, - ], - }, - { - id: 9, - type: 0, - name: 'SKILL ANALYZER Level.09', - level: 9, - nameID: 9, - assist: 0, - tracks: [ - { - no: 0, - mid: 1155, - mty: 4, - }, - { - no: 1, - mid: 937, - mty: 4, - }, - { - no: 2, - mid: 1243, - mty: 4, - }, - ], - }, - { - id: 10, - type: 0, - name: 'SKILL ANALYZER Level.10', - level: 10, - nameID: 10, - assist: 0, - tracks: [ - { - no: 0, - mid: 1158, - mty: 4, - }, - { - no: 1, - mid: 1341, - mty: 4, - }, - { - no: 2, - mid: 1238, - mty: 4, - }, - ], - }, - { - id: 11, - type: 0, - name: 'SKILL ANALYZER Level.11', - level: 11, - nameID: 11, - assist: 0, - tracks: [ - { - no: 0, - mid: 374, - mty: 2, - }, - { - no: 1, - mid: 1277, - mty: 4, - }, - { - no: 2, - mid: 73, - mty: 3, - }, - ], - }, - { - id: 12, - type: 0, - name: 'SKILL ANALYZER Level.∞', - level: 12, - nameID: 12, - assist: 0, - tracks: [ - { - no: 0, - mid: 1101, - mty: 4, - }, - { - no: 1, - mid: 1189, - mty: 4, - }, - { - no: 2, - mid: 1362, - mty: 4, - }, - ], - }, + } ], }, { id: 5, name: 'SKILL ANALYZER 第3回', isNew: 0, + hasGod: 1, courses: [ { id: 1, @@ -3083,7 +3335,7 @@ export const COURSES6 = [ }, { id: 11, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.11', level: 11, nameID: 11, @@ -3108,7 +3360,7 @@ export const COURSES6 = [ }, { id: 12, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.∞', level: 12, nameID: 12, @@ -3351,6 +3603,7 @@ export const COURSES6 = [ id: 8, name: 'SKILL ANALYZER 第4回 Aコース', isNew: 0, + hasGod: 1, courses: [ { id: 1, @@ -3604,7 +3857,7 @@ export const COURSES6 = [ }, { id: 11, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.11', level: 11, nameID: 11, @@ -3629,7 +3882,7 @@ export const COURSES6 = [ }, { id: 12, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.∞', level: 12, nameID: 12, @@ -3658,6 +3911,7 @@ export const COURSES6 = [ id: 9, name: 'SKILL ANALYZER 第4回 Bコース', isNew: 0, + hasGod: 1, courses: [ { id: 1, @@ -3911,7 +4165,7 @@ export const COURSES6 = [ }, { id: 11, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.11', level: 11, nameID: 11, @@ -3936,7 +4190,7 @@ export const COURSES6 = [ }, { id: 12, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.∞', level: 12, nameID: 12, @@ -3964,7 +4218,8 @@ export const COURSES6 = [ { id: 10, name: 'SKILL ANALYZER 第5回 Aコース', - isNew: 1, + isNew: 0, + hasGod: 1, courses: [ { id: 1, @@ -4056,8 +4311,8 @@ export const COURSES6 = [ }, { no: 1, - mid: 438, - mty: 2, + mid: 538, + mty: 1, }, { no: 2, @@ -4218,7 +4473,7 @@ export const COURSES6 = [ }, { id: 11, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.11', level: 11, nameID: 11, @@ -4243,7 +4498,7 @@ export const COURSES6 = [ }, { id: 12, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.∞', level: 12, nameID: 12, @@ -4271,7 +4526,8 @@ export const COURSES6 = [ { id: 11, name: 'SKILL ANALYZER 第5回 Bコース', - isNew: 1, + isNew: 0, + hasGod: 1, courses: [ { id: 1, @@ -4318,7 +4574,7 @@ export const COURSES6 = [ }, { no: 2, - mid: 1755, + mid: 944, mty: 1, }, ], @@ -4518,14 +4774,14 @@ export const COURSES6 = [ }, { no: 2, - mid: 234, + mid: 900, mty: 3, }, ], }, { id: 11, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.11', level: 11, nameID: 11, @@ -4550,7 +4806,7 @@ export const COURSES6 = [ }, { id: 12, - type: 0, + type: 1, name: 'SKILL ANALYZER Level.∞', level: 12, nameID: 12, @@ -4578,7 +4834,7 @@ export const COURSES6 = [ { id: 12, name: 'Red Bull 5G 2022予選コース', - isNew: 1, + isNew: 0, courses: [ { id: 1, @@ -4681,9 +4937,897 @@ export const COURSES6 = [ ], }, ] - } -]; + }, + { + id: 13, + name: 'BEMANI MASTER KOREA 2021', + isNew: 0, + courses: [ + { + id: 1, + type: 0, + name: 'BEMANI MASTER KOREA 2021 Entry Course', + level: 0, + nameID: 13, + assist: 0, + tracks: [ + { + no: 0, + mid: 1641, + mty: 4 + }, + { + no: 1, + mid: 1646, + mty: 4 + }, + { + no: 2, + mid: 1642, + mty: 4 + }, + ] + }, + { + id: 2, + type: 0, + name: 'BEMANI MASTER KOREA 2021 Enjoy Course', + level: 0, + nameID: 13, + assist: 0, + tracks: [ + { + no: 0, + mid: 1641, + mty: 1 + }, + { + no: 1, + mid: 1646, + mty: 2 + }, + { + no: 2, + mid: 1642, + mty: 2 + }, + + ] + } + ] + }, + { + id: 14, + name: 'SKILL ANALYZER 第6回', + isNew: 1, + hasGod: 1, + courses: [ + { + id: 1, + type: 0, + name: 'SKILL ANALYZER Level.01', + level: 1, + nameID: 1, + assist: 0, + tracks: [ + { + no: 0, + mid: 1130, + mty: 0, + }, + { + no: 1, + mid: 182, + mty: 1, + }, + { + no: 2, + mid: 328, + mty: 1, + }, + ], + }, + { + id: 2, + type: 0, + name: 'SKILL ANALYZER Level.02', + level: 2, + nameID: 2, + assist: 0, + tracks: [ + { + no: 0, + mid: 515, + mty: 1, + }, + { + no: 1, + mid: 222, + mty: 1, + }, + { + no: 2, + mid: 572, + mty: 1, + }, + ], + }, + { + id: 3, + type: 0, + name: 'SKILL ANALYZER Level.03', + level: 3, + nameID: 3, + assist: 0, + tracks: [ + { + no: 0, + mid: 631, + mty: 1, + }, + { + no: 1, + mid: 890, + mty: 1, + }, + { + no: 2, + mid: 1748, + mty: 1, + }, + ], + }, + { + id: 4, + type: 0, + name: 'SKILL ANALYZER Level.04', + level: 4, + nameID: 4, + assist: 0, + tracks: [ + { + no: 0, + mid: 205, + mty: 1, + }, + { + no: 1, + mid: 1227, + mty: 1, + }, + { + no: 2, + mid: 430, + mty: 1, + }, + ], + }, + { + id: 5, + type: 0, + name: 'SKILL ANALYZER Level.05', + level: 5, + nameID: 5, + assist: 0, + tracks: [ + { + no: 0, + mid: 1162, + mty: 1, + }, + { + no: 1, + mid: 1282, + mty: 1, + }, + { + no: 2, + mid: 66, + mty: 2, + }, + ], + }, + { + id: 6, + type: 0, + name: 'SKILL ANALYZER Level.06', + level: 6, + nameID: 6, + assist: 0, + tracks: [ + { + no: 0, + mid: 1401, + mty: 2, + }, + { + no: 1, + mid: 946, + mty: 2, + }, + { + no: 2, + mid: 928, + mty: 2, + }, + ], + }, + { + id: 7, + type: 0, + name: 'SKILL ANALYZER Level.07', + level: 7, + nameID: 7, + assist: 0, + tracks: [ + { + no: 0, + mid: 1873, + mty: 2, + }, + { + no: 1, + mid: 1746, + mty: 2, + }, + { + no: 2, + mid: 1004, + mty: 4, + }, + ], + }, + { + id: 8, + type: 0, + name: 'SKILL ANALYZER Level.08', + level: 8, + nameID: 8, + assist: 0, + tracks: [ + { + no: 0, + mid: 241, + mty: 2, + }, + { + no: 1, + mid: 656, + mty: 2, + }, + { + no: 2, + mid: 1016, + mty: 4, + }, + ], + }, + { + id: 9, + type: 0, + name: 'SKILL ANALYZER Level.09', + level: 9, + nameID: 9, + assist: 0, + tracks: [ + { + no: 0, + mid: 1159, + mty: 4, + }, + { + no: 1, + mid: 1790, + mty: 2, + }, + { + no: 2, + mid: 1137, + mty: 4, + }, + ], + }, + { + id: 10, + type: 0, + name: 'SKILL ANALYZER Level.10', + level: 10, + nameID: 10, + assist: 0, + tracks: [ + { + no: 0, + mid: 1806, + mty: 4, + }, + { + no: 1, + mid: 994, + mty: 4, + }, + { + no: 2, + mid: 787, + mty: 2, + }, + ], + }, + { + id: 11, + type: 1, + name: 'SKILL ANALYZER Level.11', + level: 11, + nameID: 11, + assist: 0, + tracks: [ + { + no: 0, + mid: 1257, + mty: 4, + }, + { + no: 1, + mid: 1778, + mty: 4, + }, + { + no: 2, + mid: 1954, + mty: 4, + }, + ], + }, + { + id: 12, + type: 1, + name: 'SKILL ANALYZER Level.∞', + level: 12, + nameID: 12, + assist: 0, + tracks: [ + { + no: 0, + mid: 1316, + mty: 4, + }, + { + no: 1, + mid: 1272, + mty: 4, + }, + { + no: 2, + mid: 2037, + mty: 4, + }, + ], + }, + ] + }, + { + id: 15, + name: '春のボルテ祭りコース2023', + isNew: 0, + courses: [ + { + id: 1, + type: 0, + name: '春のボルテ祭りコース2023【梅】', + level: 0, + nameID: 17, + assist: 0, + tracks: [ + { + no: 0, + mid: 1107, + mty: 0 + }, + { + no: 1, + mid: 1180, + mty: 0 + }, + { + no: 2, + mid: 1143, + mty: 0 + } + ] + }, + { + id: 2, + type: 0, + name: '春のボルテ祭りコース2023【竹】', + level: 0, + nameID: 17, + assist: 0, + tracks: [ + { + no: 0, + mid: 1107, + mty: 1 + }, + { + no: 1, + mid: 1180, + mty: 1 + }, + { + no: 2, + mid: 1143, + mty: 1 + } + ] + }, + { + id: 3, + type: 0, + name: '春のボルテ祭りコース2023【松】', + level: 0, + nameID: 17, + assist: 0, + tracks: [ + { + no: 0, + mid: 1107, + mty: 4 + }, + { + no: 1, + mid: 1180, + mty: 4 + }, + { + no: 2, + mid: 1143, + mty: 4 + } + ] + }, + { + id: 4, + type: 0, + name: '春のボルテ祭りコース2023【∞∞(* ▼∀▼)∞∞ ふふ…!】', + level: 0, + nameID: 17, + assist: 0, + tracks: [ + { + no: 0, + mid: 840, + mty: 3 + }, + { + no: 1, + mid: 1219, + mty: 3 + }, + { + no: 2, + mid: 1751, + mty: 3 + } + ] + } + ] + }, + { + id: 16, + name: 'KAC(2023)予選コース', + isNew: 1, + courses: [ + { + id: 1, + type: 1, + name: 'KAC 2023 チャレンジコース【完喰】', + level: 0, + nameID: 18, + assist: 0, + tracks: [ + { + no: 0, + mid: 2059, + mty: 4 + }, + { + no: 1, + mid: 694, + mty: 3 + }, + { + no: 2, + mid: 1773, + mty: 4 + } + ] + }, + { + id: 2, + type: 1, + name: 'KAC 2023 エンジョイコース【完喰】', + level: 0, + nameID: 18, + assist: 0, + tracks: [ + { + no: 0, + mid: 2059, + mty: 1 + }, + { + no: 1, + mid: 694, + mty: 1 + }, + { + no: 2, + mid: 1773, + mty: 1 + } + ] + }, + { + id: 3, + type: 1, + name: 'KAC 2023 チャレンジコース【夢吹】', + level: 0, + nameID: 19, + assist: 0, + tracks: [ + { + no: 0, + mid: 1807, + mty: 4 + }, + { + no: 1, + mid: 1591, + mty: 4 + }, + { + no: 2, + mid: 1770, + mty: 4 + } + ] + }, + { + id: 4, + type: 1, + name: 'KAC 2023 エンジョイコース【夢吹】', + level: 0, + nameID: 19, + assist: 0, + tracks: [ + { + no: 0, + mid: 1807, + mty: 1 + }, + { + no: 1, + mid: 1591, + mty: 1 + }, + { + no: 2, + mid: 1770, + mty: 1 + } + ] + } + ] + }, + { + id: 17, + name: 'SKILL ANALYZER 第7回', + isNew: 1, + hasGod: 1, + courses: [ + { + id: 1, + type: 0, + name: 'SKILL ANALYZER Level.01', + level: 1, + nameID: 1, + assist: 0, + tracks: [ + { + no: 0, + mid: 1018, + mty: 0, + }, + { + no: 1, + mid: 231, + mty: 1, + }, + { + no: 2, + mid: 1734, + mty: 0, + }, + ], + }, + { + id: 2, + type: 0, + name: 'SKILL ANALYZER Level.02', + level: 2, + nameID: 2, + assist: 0, + tracks: [ + { + no: 0, + mid: 278, + mty: 1, + }, + { + no: 1, + mid: 919, + mty: 1, + }, + { + no: 2, + mid: 92, + mty: 1, + }, + ], + }, + { + id: 3, + type: 0, + name: 'SKILL ANALYZER Level.03', + level: 3, + nameID: 3, + assist: 0, + tracks: [ + { + no: 0, + mid: 603, + mty: 1, + }, + { + no: 1, + mid: 898, + mty: 1, + }, + { + no: 2, + mid: 80, + mty: 1, + }, + ], + }, + { + id: 4, + type: 0, + name: 'SKILL ANALYZER Level.04', + level: 4, + nameID: 4, + assist: 0, + tracks: [ + { + no: 0, + mid: 966, + mty: 1, + }, + { + no: 1, + mid: 983, + mty: 1, + }, + { + no: 2, + mid: 797, + mty: 1, + }, + ], + }, + { + id: 5, + type: 0, + name: 'SKILL ANALYZER Level.05', + level: 5, + nameID: 5, + assist: 0, + tracks: [ + { + no: 0, + mid: 345, + mty: 1, + }, + { + no: 1, + mid: 1820, + mty: 1, + }, + { + no: 2, + mid: 1192, + mty: 1, + }, + ], + }, + { + id: 6, + type: 0, + name: 'SKILL ANALYZER Level.06', + level: 6, + nameID: 6, + assist: 0, + tracks: [ + { + no: 0, + mid: 998, + mty: 2, + }, + { + no: 1, + mid: 1918, + mty: 2, + }, + { + no: 2, + mid: 115, + mty: 2, + }, + ], + }, + { + id: 7, + type: 0, + name: 'SKILL ANALYZER Level.07', + level: 7, + nameID: 7, + assist: 0, + tracks: [ + { + no: 0, + mid: 1842, + mty: 2, + }, + { + no: 1, + mid: 480, + mty: 3, + }, + { + no: 2, + mid: 361, + mty: 2, + }, + ], + }, + { + id: 8, + type: 0, + name: 'SKILL ANALYZER Level.08', + level: 8, + nameID: 8, + assist: 0, + tracks: [ + { + no: 0, + mid: 528, + mty: 2, + }, + { + no: 1, + mid: 1841, + mty: 2, + }, + { + no: 2, + mid: 272, + mty: 2, + }, + ], + }, + { + id: 9, + type: 0, + name: 'SKILL ANALYZER Level.09', + level: 9, + nameID: 9, + assist: 0, + tracks: [ + { + no: 0, + mid: 560, + mty: 2, + }, + { + no: 1, + mid: 1471, + mty: 4, + }, + { + no: 2, + mid: 1801, + mty: 4, + }, + ], + }, + { + id: 10, + type: 0, + name: 'SKILL ANALYZER Level.10', + level: 10, + nameID: 10, + assist: 0, + tracks: [ + { + no: 0, + mid: 1962, + mty: 4, + }, + { + no: 1, + mid: 1008, + mty: 4, + }, + { + no: 2, + mid: 617, + mty: 2, + }, + ], + }, + { + id: 11, + type: 1, + name: 'SKILL ANALYZER Level.11', + level: 11, + nameID: 11, + assist: 0, + tracks: [ + { + no: 0, + mid: 1499, + mty: 4, + }, + { + no: 1, + mid: 1037, + mty: 4, + }, + { + no: 2, + mid: 1708, + mty: 4, + }, + ], + }, + { + id: 12, + type: 1, + name: 'SKILL ANALYZER Level.∞', + level: 12, + nameID: 12, + assist: 0, + tracks: [ + { + no: 0, + mid: 525, + mty: 3, + }, + { + no: 1, + mid: 1940, + mty: 4, + }, + { + no: 2, + mid: 2038, + mty: 4, + }, + ], + }, + ] + }, +]; export const SDVX_AUTOMATION_SONGS = [ 6, @@ -4926,141 +6070,449 @@ export const SDVX_AUTOMATION_SONGS = [ ]; export const SDVX_AUTOMATION_SONGS_2 = [ - 1209, - 1210, - 1211, - 1212, - 1213, - 1214, - 1215, - 1216, - 1217, - 1218, - 1220, - 1221, - 1260, - 1269, - 1270, - 1271, - 1272, - 1273, - 1274, - 1275, - 1276, - 1277, - 1278, - 1279, - 1280, - 1281, - 1282, - 1300, - 1301, - 1302, - 1329, - 1345, - 1346, - 1347, - 1348, - 1361, - 1362, - 1363, - 1364, - 1365, - 1366, - 1367, - 1368, - 1369, - 1370, - 1371, - 1372, - 1373, - 1374, - 1375, - 1376, - 1377, - 1378, - 1379, - 1380, - 1381, - 1382, - 1383, - 1384, - 1385, - 1386, - 1433, - 1434, - 1435, - 1436, - 1437, - 1459, - 1460, - 1461, - 1462, - 1463, - 1464, - 1465, - 1466, - 1467, - 1468, - 1490, - 1491, - 1495, - 1496, - 1497, - 1498, - 1499, - 1500, - 1501, - 1580, - 1581, - 1582, - 1583, - 1584, - 1585, - 1586, - 1587, - 1588, - 1589, - 1590, - 1591, - 1592, - 1593, - 1594, - 1595, - 1596, - 1597, - 1598, - 1599, - 1600, - 1601, - 1602, - 1603, - 1604, - 1605, - 1606, - 1607, - 1608, - 1609, - 1610, - 1611, - 1660, - 1661, - 1662, - 1663, - 1664, - 1665, - 1666, - 1838, - 1839, - 1840, - 1841, - 1842, - 1843, - 1844, - 99001, - 99002, - 99003, - 99004 + 1209, + 1210, + 1211, + 1212, + 1213, + 1214, + 1215, + 1216, + 1217, + 1218, + 1220, + 1221, + 1260, + 1269, + 1270, + 1271, + 1272, + 1273, + 1274, + 1275, + 1276, + 1277, + 1278, + 1279, + 1280, + 1281, + 1282, + 1300, + 1301, + 1302, + 1329, + 1345, + 1346, + 1347, + 1348, + 1361, + 1362, + 1363, + 1364, + 1365, + 1366, + 1367, + 1368, + 1369, + 1370, + 1371, + 1372, + 1373, + 1374, + 1375, + 1376, + 1377, + 1378, + 1379, + 1380, + 1381, + 1382, + 1383, + 1384, + 1385, + 1386, + 1433, + 1434, + 1435, + 1436, + 1437, + 1459, + 1460, + 1461, + 1462, + 1463, + 1464, + 1465, + 1466, + 1467, + 1468, + 1490, + 1491, + 1495, + 1496, + 1497, + 1498, + 1499, + 1500, + 1501, + 1580, + 1581, + 1582, + 1583, + 1584, + 1585, + 1586, + 1587, + 1588, + 1589, + 1590, + 1591, + 1592, + 1593, + 1594, + 1595, + 1596, + 1597, + 1598, + 1599, + 1600, + 1601, + 1602, + 1603, + 1604, + 1605, + 1606, + 1607, + 1608, + 1609, + 1610, + 1611, + 1660, + 1661, + 1662, + 1663, + 1664, + 1665, + 1666, + 1838, + 1839, + 1840, + 1841, + 1842, + 1843, + 1844, + 99001, + 99002, + 99003, + 99004, + 1, + 2, + 3, + 4, + 5, + 7, + 8, + 9, + 10, + 11, + 12, + 13, + 14, + 15, + 16, + 17, + 18, + 19, + 21, + 22, + 23, + 24, + 30, + 36, + 39, + 47, + 60, + 63, + 71, + 73, + 88, + 89, + 90, + 91, + 101, + 109, + 130, + 131, + 135, + 151, + 165, + 166, + 180, + 183, + 198, + 208, + 211, + 213, + 214, + 216, + 220, + 221, + 223, + 228, + 229, + 239, + 247, + 250, + 252, + 255, + 256, + 267, + 269, + 282, + 289, + 295, + 299, + 324, + 332, + 333, + 339, + 341, + 342, + 348, + 393, + 398, + 408, + 413, + 414, + 418, + 420, + 432, + 444, + 459, + 499, + 506, + 507, + 508, + 510, + 522, + 525, + 529 +]; + +export const SDVX_AUTOMATION_SONGS_3 = [ + 532, + 535, + 537, + 540, + 547, + 548, + 550, + 551, + 583, + 587, + 597, + 598, + 600, + 606, + 610, + 615, + 623, + 629, + 680, + 681, + 689, + 717, + 720, + 722, + 725, + 730, + 731, + 733, + 735, + 740, + 741, + 743, + 746, + 783, + 784, + 785, + 819, + 837, + 883, + 888, + 889, + 895, + 925, + 939, + 961, + 963, + 964, + 965, + 966, + 967, + 968, + 969, + 970, + 971, + 977, + 978, + 982, + 983, + 985, + 986, + 992, + 993, + 994, + 995, + 998, + 999, + 1000, + 1008, + 1009, + 1010, + 1011, + 1012, + 1013, + 1015, + 1017, + 1018, + 1021, + 1052, + 1055, + 1121, + 1149, + 1152, + 1158, + 1226, + 1228, + 1230, + 1231, + 1235, + 1237, + 1238, + 1239, + 1240, + 1243, + 1244, + 1246, + 1247, + 1248, + 1250, + 1251, + 1252, + 1253, + 1254, + 1255, + 1257, + 1258, + 1261, + 1304, + 1306, + 1307, + 1308, + 1309, + 1310, + 1311, + 1312, + 1313, + 1314, + 1315, + 1388, + 1389, + 1397, + 1402, + 1416, + 1509, + 1766, + 1767, + 1768, + 1769, + 1770, + 1771, + 1772, + 1773, + 1774, + 1775, + 1776, + 1777, + 1778, + 1779, + 1780, + 1781, + 1782, + 1783, + 1784, + 1785, + 1786, + 1787, + 1788, + 1789, + 1790, + 1791, + 1792, + 1793, + 1794, + 1795, + 1796, + 1797, + 1798, + 1799, + 1800, + 1801, + 1888, + 1889, + 1890, + 1891, + 1892, + 1893, + 1894, + 1895, + 1896, + 1897, + 1898, + 1899, + 1900, + 1901, + 1919, + 1920, + 1921, + 1922, + 1923, + 1924, + 1925, + 1926, + 1927, + 1928, + 1929, + 1930, + 1931, + 1932, + 1933, + 1934, + 1935, + 1936, + 1937, + 1938, + 1939, + 1940, + 1941, + 1942, + 1943, + 1944, + 1945, + 1946, + 1947, + 1948, + 1949, + 1950, + 1951, + 1952, + 1953, + 1954, + 1955, + 1956, + 1957, + 1958 ] export const EXTENDS6 = [ @@ -5095,6 +6547,22 @@ export const EXTENDS6 = [ '', '', ], - }, + }, + { + id: 93, + type: 17, + params: [ + 0, + 0, + 0, + 0, + 0, + SDVX_AUTOMATION_SONGS_3.join(','), + '', + '', + '', + '', + ], + } ]; diff --git a/sdvx@asphyxia/handlers/common.ts b/sdvx@asphyxia/handlers/common.ts index 04de19b..838c561 100644 --- a/sdvx@asphyxia/handlers/common.ts +++ b/sdvx@asphyxia/handlers/common.ts @@ -1,8 +1,7 @@ import { EVENT4, COURSES4, EXTENDS4 } from '../data/hvn'; import { EVENT5, COURSES5, EXTENDS5 } from '../data/vvw'; import { EVENT6, COURSES6, EXTENDS6, APRILFOOLSSONGS, VALKYRIE_SONGS, - MISSINGSONGS6, ARENA, VALGENE, INFORMATION6, RESTRICTED_SONGS6, EVENT_SONGS6, - STAMP_EVENTS6 + LICENSED_SONGS6, ARENA, VALGENE, INFORMATION6, STAMP_EVENTS6 } from '../data/exg'; import { COURSE2 } from '../data/inf'; import {getVersion, getRandomIntInclusive} from '../utils'; @@ -56,22 +55,13 @@ export const common: EPR = async (info, data, send) => { //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 = 3000; + let songNum = 2100; if(gameVersion === 2) songNum = 554; if(gameVersion === 3) songNum = 954; if(gameVersion === 4) songNum = 1368; @@ -87,16 +77,7 @@ export const common: EPR = async (info, data, send) => { }); } } - } else { - let RESTRICT_SONGS = [] //KONASTESONGS.concat(BEMANI2021EVENTSONGS, BPLSTAMPRALLYSONGS, SDVX10THSTAMPSONGS, REFLECBEATSTAMPSONGS); - let EVENT_SONGS = [] - for(const keyIter in Object.keys(RESTRICTED_SONGS6)) { - RESTRICT_SONGS = RESTRICT_SONGS.concat(RESTRICTED_SONGS6[Object.keys(RESTRICTED_SONGS6)[keyIter]]) - } - for(const keyIter in Object.keys(EVENT_SONGS6)) { - EVENT_SONGS = EVENT_SONGS.concat(EVENT_SONGS6[Object.keys(EVENT_SONGS6)[keyIter]]) - } - + } else { let mdb = JSON.parse(music_db.toString()); let limitedNo = 2; @@ -107,10 +88,15 @@ export const common: EPR = async (info, data, send) => { if(foundSongIndex != -1) { var songData = mdb.mdb.music[foundSongIndex]; if(gameVersion === 6 || gameVersion === -6) { - if((!RESTRICT_SONGS.includes(i.toString()) || EVENT_SONGS.includes(i.toString())) && parseInt(songData['info']['distribution_date']['#text']) <= currentYMDDate) { + if(parseInt(songData['info']['distribution_date']['#text']) >= currentYMDDate) { + console.log("Unreleased song: " + songData.info.title_name) + } + else { limitedNo = 2; - if(songData.info.version['#text'] === '6') { // if song is released during exceed gear - if(MISSINGSONGS6.includes(i.toString())) { + // if song is released during exceed gear + if(songData.info.version['#text'] === '6') { + // Licensed songs released in Exceed Gear needs limited=3 to appear + if(LICENSED_SONGS6.includes(i.toString())) { limitedNo += 1; } else if(VALKYRIE_SONGS.includes(i.toString()) && (!U.GetConfig('enable_valk_songs') && info.model.split(":")[2].match(/^(G|H)$/g) == null)){ @@ -123,15 +109,15 @@ export const common: EPR = async (info, data, send) => { limited: K.ITEM('u8', limitedNo), }); } - } else if (songData.info.inf_ver['#text'] === '6') { // if song has new XCD track; wouldn't work without updated webui asset + } + // if song has new XCD track + 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 { - console.log("Restricted song: " + songData.info.title_name) } } } @@ -194,21 +180,6 @@ export const common: EPR = async (info, data, send) => { } } - // if(IO.Exists('handlers/test.json')) { - // let bufExtend = await IO.ReadFile('handlers/test.json') - // let testExtend = JSON.parse(bufExtend.toString()) - // if(testExtend.length > 0) { - // testExtend.forEach(td => { - // console.log("testExtend: " + JSON.stringify(td)) - // extend.push({ - // id: td['id'], - // type: td['type'], - // params: td['params'] - // }); - // }) - // } - // } - if(IO.Exists('webui/asset/config/events.json')) { const itemTypeList = {"track": 'e', "appeal": 'a', "crew": 'c', "pcb": 'b'} let bufEventData = await IO.ReadFile('webui/asset/json/events.json') @@ -216,7 +187,7 @@ export const common: EPR = async (info, data, send) => { let eventData = JSON.parse(bufEventData.toString()) let eventConfig = JSON.parse(bufEventConfig.toString()) 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']] !== undefined && eventConfig[eventData['events'][eventIter]['id']]['toggle']) { let stmpEvntInfo = STAMP_EVENTS6[eventData['events'][eventIter]['id']] let prmStr1Sel = '' @@ -230,22 +201,21 @@ export const common: EPR = async (info, data, send) => { if (stmpRwrd[stmpRwrdIter][1] === 'track') iID += stmpRwrd[stmpRwrdIter][3] prmStr5 += stmpRwrd[stmpRwrdIter][0] + ':' + itemTypeList[stmpRwrd[stmpRwrdIter][1]] + ':' + iID + (stmpRwrd.length - 1 === parseInt(stmpRwrdIter) ? '' : ' ') } - let prmStep = [ - 5, - stmpEvntInfo['info']['data'][stmpDataIter]['stps'], - 0, - stmpEvntInfo['info']['data'][stmpDataIter]['stps'], - 0, - '', - stmpEvntInfo['info']['stmpHd'], - '', - stmpEvntInfo['info']['stmpFt'], - prmStr5 - ] let newSelMainExtend = { 'type': 3, 'id': stmpEvntInfo['info']['data'][stmpDataIter]['stmpid'], - 'params': prmStep + 'params': [ + 5, + stmpEvntInfo['info']['data'][stmpDataIter]['stps'], + 0, + stmpEvntInfo['info']['data'][stmpDataIter]['stps'], + 0, + '', + stmpEvntInfo['info']['stmpHd'], + '', + stmpEvntInfo['info']['stmpFt'], + prmStr5 + ] } extend.push(newSelMainExtend) } @@ -256,7 +226,7 @@ export const common: EPR = async (info, data, send) => { 'id': stmpEvntInfo['info']['id'], 'params': [ 9, - stmpEvntInfo['info']['num'], + (stmpEvntInfo['info']['textstampval'] !== undefined) ? stmpEvntInfo['info']['textstampval'] : 0, 0, 0, 0, @@ -377,19 +347,6 @@ export const common: EPR = async (info, data, send) => { let catalog = [] let campaign = [] - // if(U.GetConfig('arena_szn') == 'debug') { - // for(let xxx = 1; xxx<=150; 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', 11), - // 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), @@ -400,7 +357,6 @@ export const common: EPR = async (info, data, send) => { param: K.ITEM('s32', ARENA[U.GetConfig('arena_szn')].arena_items[catalog_item].param), }) } - // } let valgene_info = [] let valgene_items = [] @@ -477,27 +433,53 @@ export const common: EPR = async (info, data, send) => { 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), - })), - })) - ), + (acc, s) => { + let courseData = 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', c.type), + course_id: K.ITEM('s16', c.id), + course_name: K.ITEM('str', c.name), + skill_level: K.ITEM('s16', c.level), + skill_type: K.ITEM('s16', 0), + 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), + })), + })) + acc = acc.concat(courseData) + if((info.model.split(":")[2] === 'G' || info.model.split(":")[2] === 'H') && s.hasGod !== undefined && s.hasGod === 1) { + courseData = courseData.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', c.type), + course_id: K.ITEM('s16', c.id), + course_name: K.ITEM('str', c.name), + skill_level: K.ITEM('s16', c.level), + skill_type: K.ITEM('s16', s.hasGod), + 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), + })), + })) + ) + acc = acc.concat(courseData) + } + return acc + }, [] ), }, @@ -512,12 +494,3 @@ export const common: EPR = async (info, data, send) => { export const log: EPR = async (info, data, send) => { send.success(); } - -export const unhandledt: EPR = async (info, data, send) => { - console.log("") - console.log("Unhandled: " + info.method + " | " + info.model + " | " + info.module) - console.log(JSON.stringify(info)) - console.log(JSON.stringify(data)) - console.log("") - return send.success() -} diff --git a/sdvx@asphyxia/handlers/profiles.ts b/sdvx@asphyxia/handlers/profiles.ts index 0a4dd45..412a0df 100644 --- a/sdvx@asphyxia/handlers/profiles.ts +++ b/sdvx@asphyxia/handlers/profiles.ts @@ -8,7 +8,7 @@ import { CourseRecord } from '../models/course_record'; import { Profile } from '../models/profile'; import { getVersion, IDToCode } from '../utils'; import { Mix } from '../models/mix'; -import { ARENA, EVENT_SONGS6, RESTRICTED_SONGS6 } from '../data/exg'; +import { ARENA, EVENT_SONGS6 } from '../data/exg'; async function getAutomationMixes(params: Param[]) { const mixids = params @@ -513,18 +513,21 @@ export const save: EPR = async (info, data, send) => { } // New course saving function found in sdvx 20220214 + // Updated for God mode const course = $(data).element('course'); if(!_.isNil(course)){ const sid = course.number('ssnid'); const cid = course.number('crsid'); + const stype = course.number('st'); if (!(_.isNil(sid) || _.isNil(cid))){ await DB.Upsert( refid, - { collection: 'course', sid, cid, version }, + { collection: 'course', sid, cid, stype, version }, { $max: { score: course.number('sc', 0), + exscore: course.number('ex', 0), clear: course.number('ct', 0), grade: course.number('gr', 0), rate: course.number('ar', 0), @@ -582,6 +585,7 @@ export const save: EPR = async (info, data, send) => { base: $(data).number('skill_base_id'), level: $(data).number('skill_level'), name: $(data).number('skill_name_id'), + type: $(data).number('skill_type'), }, } ); @@ -649,7 +653,7 @@ export const load: EPR = async (info, data, send) => { let eventData = JSON.parse(bufEventData.toString()) let eventConfig = JSON.parse(bufEventConfig.toString()) for(const eventIter in eventData['events']) { - if(eventData['events'][eventIter]['type'] === 'gift') { + if(eventData['events'][eventIter]['type'] === 'gift' && eventConfig[eventData['events'][eventIter]['id']] !== undefined) { if(typeof eventConfig[eventData['events'][eventIter]['id']]['toggle'] === "boolean") { if(eventConfig[eventData['events'][eventIter]['id']]['toggle']) { for(const itemIter in EVENT_SONGS6[eventData['events'][eventIter]['id']]) { @@ -735,10 +739,12 @@ export const load: EPR = async (info, data, send) => { const stampB = profile.stampB ? profile.stampB : 0; const stampC = profile.stampC ? profile.stampC : 0; const stampD = profile.stampD ? profile.stampD : 0; + const sysBG = profile.sysBG ? profile.sysBG : 0; + const bplSupport = profile.bplSupport ? profile.bplSupport : 0; const customize = []; - customize.push(bgm, subbg, nemsys, stampA, stampB, stampC, stampD); + customize.push(bgm, subbg, nemsys, stampA, stampB, stampC, stampD, 0, 0, 0, 0, sysBG); var tempCustom = params.findIndex((e) => (e.type == 2 && e.id == 2)) @@ -752,7 +758,6 @@ export const load: EPR = async (info, data, send) => { params[tempCustom].param = customize; } - let blasterpass = U.GetConfig('use_blasterpass') ? 1 : 0; var tempItem = U.GetConfig('unlock_all_navigators') ? unlockNavigators(items) : items; @@ -824,6 +829,8 @@ export const create: EPR = async (info, data, send) => { stampC: 0, stampD: 0, + sysBG: 0, + headphone: 0, musicID: 0, musicType: 0, @@ -832,7 +839,17 @@ export const create: EPR = async (info, data, send) => { mUserCnt: 0, boothFrame: [0, 0, 0, 0, 0], - playCount: 0 + playCount: 0, + dayCount: 0, + todayCount: 0, + playchain: 0, + maxPlayChain: 0, + weekCount: 0, + weekPlayCount: 0, + weekChain: 0, + maxWeekChain: 0, + + bplSupport: 0 }; await DB.Upsert(refid, { collection: 'profile' }, profile); diff --git a/sdvx@asphyxia/handlers/webui.ts b/sdvx@asphyxia/handlers/webui.ts index e2db05b..eb9e0c7 100644 --- a/sdvx@asphyxia/handlers/webui.ts +++ b/sdvx@asphyxia/handlers/webui.ts @@ -9,6 +9,7 @@ export const updateProfile = async (data: { name?: string; appeal?: string; akaname?: string; + bplSupport?: string; nemsys?: string; bgm?: string; subbg?: string; @@ -16,6 +17,7 @@ export const updateProfile = async (data: { stampB?: string; stampC?: string; stampD?: string; + sysBG?: string; }) => { if (data.refid == null) return; @@ -44,6 +46,11 @@ export const updateProfile = async (data: { if (!_.isNaN(validNemsys)) update.nemsys = validNemsys; } + if (data.bplSupport && data.bplSupport.length > 0) { + const validBplSupport = parseInt(data.bplSupport); + if (!_.isNaN(validBplSupport)) update.bplSupport = validBplSupport; + } + if (data.subbg && data.subbg.length > 0) { const validSubbg = parseInt(data.subbg); if (!_.isNaN(validSubbg)) update.subbg = validSubbg; @@ -74,6 +81,12 @@ export const updateProfile = async (data: { if (!_.isNaN(validStampD)) update.stampD = validStampD; } + if (data.sysBG && data.sysBG.length > 0) { + console.log(data.sysBG) + const validSysBG = parseInt(data.sysBG); + if (!_.isNaN(validSysBG)) update.sysBG = validSysBG; + } + await DB.Update( data.refid, { collection: 'profile' }, @@ -157,7 +170,7 @@ export const deleteMix = async (data: { code: string }) => { }; -export const copyResourcesFromGame = async (data: {}) => { +export const copyResourcesFromGame = async (data: {}, send: WebUISend) => { let mdbJsonFix = []; let mdbJsonFixFinal; let newJsonSongs = []; @@ -281,10 +294,6 @@ export const copyResourcesFromGame = async (data: {}) => { } }; IO.WriteFile('webui/asset/json/music_db.json', JSON.stringify(mdbJsonFixFinal, null, 4)); - if(!IO.Exists('webui/asset/json/music_db_' + version + '.json')){ - IO.WriteFile('webui/asset/json/music_db_' + version + '.json', JSON.stringify(mdbJsonFixFinal, null, 4)); - } - } else { console.log('Error reading music_db.xml. Check your "Exceed Gear Data Directory" config.') runErrors.push('[music_db] Error reading music_db.xml. Check your "Exceed Gear Data Directory" config.') @@ -456,7 +465,9 @@ export const copyResourcesFromGame = async (data: {}) => { await IO.WriteFile('webui/asset/json/data.json', JSON.stringify(resourceJsonData, null, 4)) await IO.WriteFile('webui/asset/json/appeal.json', JSON.stringify(apCardJsonData, null, 4)) - await IO.WriteFile('webui/asset/logs/copyResourcesFromGame.json', JSON.stringify({ + send.json( + { + status: 'ok', akaname: newAkanames, nemsys: newNemsysData, apCard: newAPCardData, @@ -468,21 +479,23 @@ export const copyResourcesFromGame = async (data: {}) => { jsonSongs: newJsonSongs.sort((a, b) => a[0] - b[0]), xcdSongs: newXCDSongs.sort((a, b) => a[0] - b[0]), errors: runErrors - }, null, 4)) + } + ) } export const preGeneRoll = async (data: { set: number, refid: string, items: [] -}) => { +}, send: WebUISend) => { let itemId = { 'crew': 11, 'stamp': 17, 'subbg': 18, 'bgm': 19, - 'nemsys': 20 + 'nemsys': 20, + 'sysbg': 21 } let preGeneSet = PREGENE.find(itemSet => itemSet.id === data.set) let finishedRolling = false @@ -529,8 +542,14 @@ export const preGeneRoll = async (data: { ) } let finalItemType = (Object.keys(preGeneSet.items)[rollWhat] === 'subbg') ? 'bg' : Object.keys(preGeneSet.items)[rollWhat] - await IO.WriteFile('webui/asset/logs/preGeneRollResult.json', JSON.stringify({'id': unobtainedItems[randomItemIndex], 'type': finalItemType})) finishedRolling = true + send.json( + { + status: 'ok', + id: unobtainedItems[randomItemIndex], + type: finalItemType + } + ) } else { console.log("No more " + Object.keys(preGeneSet.items)[rollWhat] + " items to get, will re-roll.") } diff --git a/sdvx@asphyxia/index.ts b/sdvx@asphyxia/index.ts index 9bdea2f..9648784 100644 --- a/sdvx@asphyxia/index.ts +++ b/sdvx@asphyxia/index.ts @@ -1,4 +1,4 @@ -import {common,log,unhandledt} from './handlers/common'; +import {common, log} from './handlers/common'; import {hiscore, rival, saveMix, loadMix, globalMatch} from './handlers/features'; import { updateProfile, @@ -36,12 +36,12 @@ export function register() { // R.Config('new_year_special',{ type: 'boolean', default: false, name:'Use New Year Special', desc:'Enable New Year Special BGM for login (doesn\'t work right now)'}); // R.Config('april_fools',{ type: 'boolean', default: false, name:'April Fools', desc:'Enable April Fools Event (doesn\'t work properly right now)'}); R.Config('use_blasterpass',{ type: 'boolean', default: true, name:'Use Blaster Pass', desc:'Enable Blaster Pass for VW and EG'}); - R.Config('unlock_all_valk_items', { type: 'boolean', default: false, name:'Unlock All Valkyrie and Premium Items', desc: 'Unlock Nemsys, BGM, Submonitor BG and Stamp Items (Valk crews not included; check \'unlock all navigators\' option)'}); + R.Config('unlock_all_valk_items', { type: 'boolean', default: false, name:'Unlock All Valkyrie and Premium Items', desc: 'Unlock Nemsys, BGM, Submonitor BG, System BG and Stamp Items (Valk crews not included; check \'unlock all navigators\' option)'}); 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('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_information' ,{ type: 'boolean', default: true, name:'Use Information', desc:'Enable the information section after entry.'}); + R.Config('use_information' ,{ type: 'boolean', default: true, name:'Use Asphyxia Information', desc:'Enable the Asphyxia information section after entry. Otherwise, it will try to look for official information data and display them.'}); R.Config('use_asphyxia_gameover',{ type: 'boolean', default: true, name:'Use Asphyxia Gameover', desc:'Enable the Asphyxia gameover message after ending the game.'}) R.WebUIEvent('copyResourcesFromGame', copyResourcesFromGame); @@ -98,16 +98,6 @@ 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)), @@ -126,8 +116,4 @@ export function register() { //logerrlevel: K.ITEM('s32', 0), //evtidnosendflg: K.ITEM('s32', 0) })); - - - // R.Unhandled(); - R.Unhandled(unhandledt); } diff --git a/sdvx@asphyxia/models/course_record.ts b/sdvx@asphyxia/models/course_record.ts index ab5b688..a8f92f3 100644 --- a/sdvx@asphyxia/models/course_record.ts +++ b/sdvx@asphyxia/models/course_record.ts @@ -5,7 +5,9 @@ export interface CourseRecord { sid: number; cid: number; + stype: number; score: number; + exscore: number; clear: number; grade: number; rate: number; diff --git a/sdvx@asphyxia/models/profile.ts b/sdvx@asphyxia/models/profile.ts index e9cd69f..851b327 100644 --- a/sdvx@asphyxia/models/profile.ts +++ b/sdvx@asphyxia/models/profile.ts @@ -41,8 +41,19 @@ export interface Profile { stampB: number; stampC: number; stampD: number; + sysBG: number; boothFrame: number[]; playCount: number; + dayCount: number; + todayCount: number; + playchain: number; + maxPlayChain: number; + weekCount: number; + weekPlayCount: number; + weekChain: number; + maxWeekChain: number; + + bplSupport: number; } diff --git a/sdvx@asphyxia/models/skill.ts b/sdvx@asphyxia/models/skill.ts index cd0bb8f..cc0c01c 100644 --- a/sdvx@asphyxia/models/skill.ts +++ b/sdvx@asphyxia/models/skill.ts @@ -6,4 +6,5 @@ export interface Skill { level: number; base: number; name: number; + type: number; } diff --git a/sdvx@asphyxia/templates/load.pug b/sdvx@asphyxia/templates/load.pug index a61271d..51b8ff0 100644 --- a/sdvx@asphyxia/templates/load.pug +++ b/sdvx@asphyxia/templates/load.pug @@ -31,6 +31,10 @@ game skill_level(__type="s16") #{skill.level} skill_base_id(__type="s16") #{skill.base} skill_name_id(__type="s16") #{skill.name} + skill_type(__type="s16") #{skill.type !== undefined ? skill.type : 0} + + if bplSupport + support_team_id(__type="s32") #{bplSupport} ea_shop packet_booster(__type="s32") 1 @@ -51,8 +55,9 @@ game course ssnid(__type="s16") #{course.sid} crsid(__type="s16") #{course.cid} + st(__type="s16") #{course.stype !== undefined ? course.stype : 0} sc(__type="s32") #{course.score} - ex(__type="s32") 0 + ex(__type="s32") #{course.exscore !== undefined ? course.exscore : 0} ct(__type="s16") #{course.clear} gr(__type="s16") #{course.grade} ar(__type="s16") #{course.rate} diff --git a/sdvx@asphyxia/webui/asset/js/generator.js b/sdvx@asphyxia/webui/asset/js/generator.js index e1264c7..c45bc13 100644 --- a/sdvx@asphyxia/webui/asset/js/generator.js +++ b/sdvx@asphyxia/webui/asset/js/generator.js @@ -1,4 +1,4 @@ -function countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys) { +function countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys, items_sysbg) { let obtained = 0, total = 0; if('crew' in geneItems.items) { obtained += items_crew.filter(crew => geneItems.items.crew.includes(crew['id'])).length @@ -20,6 +20,10 @@ function countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_b obtained += items_nemsys.filter(nemsys => geneItems.items.nemsys.includes(nemsys['id'])).length total += geneItems.items['nemsys'].length } + if('sysbg' in geneItems.items) { + obtained += items_sysbg.filter(sysbg => geneItems.items.sysbg.includes(sysbg['id'])).length + total += geneItems.items['sysbg'].length + } return [obtained, total] } @@ -47,18 +51,14 @@ async function getGeneratorEditionItems(gene_edition, itemSet) { } } -async function loadItems(itemSet, gene_edition, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys) { - console.log(gene_edition) +async function loadItems(itemSet, gene_edition, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys, items_sysbg) { let geneItems = await getGeneratorEditionItems(gene_edition, itemSet) - let itemCounts = countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys) + let itemCounts = countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys, items_sysbg) if(gene_edition === 'premium') { - console.log('naur') if(itemCounts[0] >= itemCounts[1]) $('#pregene-roll').attr('disabled', 'disabled') else $('#pregene-roll').removeAttr('disabled') } else if(gene_edition === 'valkyrie') { - console.log('yes1') - if(itemSet >= 1 && itemSet <= 5) { - console.log('yes2') + if([1,2,3,4,5,6,8,9,10].includes(itemSet)) { // available valgene sets in webui if(itemCounts[0] >= itemCounts[1]) $('#valgene-roll').attr('disabled', 'disabled') else $('#valgene-roll').removeAttr('disabled') } else $('#valgene-roll').attr('disabled', 'disabled') @@ -121,6 +121,16 @@ async function loadItems(itemSet, gene_edition, items_crew, items_stamp, items_s return 0; }), 'nemsys', items_nemsys) } + + if('sysbg' in geneItems.items) { + $('.item_banners').append('

System BG

') + $('.item_banners').append('

') + loadImages(geneItems.items['sysbg'].sort(function(a, b) { + if(a.id < b.id) { return -1; } + if(a.id > b.id) { return 1; } + return 0; + }), 'sysbg', items_sysbg) + } } async function loadValgeneData(gene_edition) { @@ -136,7 +146,14 @@ async function loadValgeneData(gene_edition) { $('#set_select').append('') } } - $('#set_select').val($("#set_select option").length) + let urlParams = new URLSearchParams(window.location.search); + return (urlParams.has('set') && urlParams.get('set') !== "") ? urlParams.get('set') : $("#set_select option").length +} + +function redirectAfterRoll() { + const urlParams = new URLSearchParams(location.search); + urlParams.set('set', $('#set_select').val()); + location.search = urlParams; } $(document).ready(async function() { @@ -146,14 +163,12 @@ $(document).ready(async function() { return 0; } - $('#roll-result').on('click', function(){location.reload()}) - $('html').keypress(function(e){ if([13, 27, 32].includes(e.keyCode) && $('.modal.is-active').length > 0) { - location.reload() + redirectAfterRoll() } }) - + $('.input').hide() $('.button').addClass('is-link') let refid = document.getElementsByName("refid")[0].value @@ -162,14 +177,16 @@ $(document).ready(async function() { let items_subbg = JSON.parse(document.getElementById("data-pass-subbg").innerText); let items_bgm = JSON.parse(document.getElementById("data-pass-bgm").innerText); let items_nemsys = JSON.parse(document.getElementById("data-pass-nemsys").innerText); + let items_sysbg = JSON.parse(document.getElementById("data-pass-sysbg").innerText); let gene_edition = document.getElementById("generator-edition").innerText; - await loadValgeneData(gene_edition) - loadItems($('#set_select').val(), gene_edition, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys) + let currentSet = await loadValgeneData(gene_edition) + $('#set_select').val(currentSet) + loadItems(currentSet, gene_edition, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys, items_sysbg) $('#set_select').change(function() { $('.count').text('') $('.item_banners').empty() - loadItems(parseInt($('#set_select').val()), gene_edition, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys) + loadItems(parseInt($('#set_select').val()), gene_edition, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys, items_sysbg) }) $('#pregene-roll, #valgene-roll').on('click', async function() { @@ -177,22 +194,20 @@ $(document).ready(async function() { $('#pregene-roll, #valgene-roll').attr('disabled', 'disabled') if(gene_edition === 'premium' && window.location.search.match(/(premium)/g) != undefined) { let geneItems = await getGeneratorEditionItems(gene_edition, parseInt($('#set_select').val())) - if(countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys)[0] >= countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys)[1]) { + if(countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys, items_sysbg)[0] >= countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys, items_sysbg)[1]) { alert("All items have been unlocked already.") } else { emit('preGeneRoll', { set: parseInt(document.getElementById('set_select').value), refid: refid, geneEdition: gene_edition, - items: items_crew.concat(items_stamp, items_subbg, items_bgm, items_nemsys) + items: items_crew.concat(items_stamp, items_subbg, items_bgm, items_nemsys, items_sysbg) }).then( - function() { - $.getJSON("static/asset/logs/preGeneRollResult.json", function(data) { - $('.modal-card-head').append('') - $('.modal-card-body').append('') - $('.modal-card-foot').append('') - $('.modal').addClass('is-active') - }) + function(response) { + $('.modal-card-head').append('') + $('.modal-card-body').append('') + $('.modal-card-foot').append('') + $('.modal').addClass('is-active') }) } } else { diff --git a/sdvx@asphyxia/webui/asset/js/preview.js b/sdvx@asphyxia/webui/asset/js/preview.js index b6cf8da..26db218 100644 --- a/sdvx@asphyxia/webui/asset/js/preview.js +++ b/sdvx@asphyxia/webui/asset/js/preview.js @@ -146,8 +146,32 @@ $(document).ready(function() { 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); + items_sysbg = JSON.parse(document.getElementById("data-pass-sysbg").innerText); unlock_all = (document.getElementById("data-pass-unlock-all").innerText === 'true'); - + + $.getJSON("static/asset/json/customize_data_ext.json", function(json) { + database = json; + + for (var i in json["supportTeams"]) { + $('[name="bplSupport"]').append($('