diff --git a/README.md b/README.md index 325be10..2815f96 100644 --- a/README.md +++ b/README.md @@ -1,8 +1,8 @@ # SOUND VOLTEX -**Plugin Version:** fork-6.0.3.5 +**Plugin Version:** fork-6.0.3.6 -**Supported game versions:** EXCEED GEAR (2024080500) +**Supported game versions:** EXCEED GEAR (2024082700) **Unsupported game versions:** Every other game, as they're untested. @@ -16,6 +16,22 @@ Changelog =========== +## fork-6.0.3.6 + +### New: + +1. Main: + - ARENA Rank Season 15 (ARENA BATTLE, point system) + - ARENA STATION 15: no new songs/charts + - PREMIUM GENERATOR Vol. 5 (Near & Noah EG Set) + - Complete the set to get alternate style for Near & Noah. + +2. Misc: + - Added missing licensed songs released prior to EXCEED GEAR. + - [GitHub](https://github.com/22vv0/asphyxia_plugins/issues/4) + - Misc WebUI fixes. + + ## fork-6.0.3.5 ### New: @@ -37,22 +53,6 @@ Changelog - Run asset update to pull webui assets from game files. -## fork-6.0.3.4 - -### New: - -1. Main: - - 2024070900 support - - Added ARENA season 14 (rank match: MEGAMIX BATTLE) - - ARENA STATION set 14 added. - - Added TAMANEKO Adventure: new unlock system where you complete map missions and earn food for TAMANEKO. Completing maps unlocks new songs and new XCD charts. - - Track Liberation map can be enabled/disabled in the main settings. - - Check 'Unlocking Events -> Stamp Events -> TAMA猫アドベンチャー (TAMANEKO Adventure)' to toggle the event. - -2. Misc: - - Updated Achievements list. - - ### Todo: 1. Figure out how to use image (png) files to appear in information/news popup. diff --git a/data/exg.ts b/data/exg.ts index c85710d..a6822cd 100644 --- a/data/exg.ts +++ b/data/exg.ts @@ -62,15 +62,16 @@ export const INFORMATION6 = { } 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', - '1866', '1867', '1871', '1872', '1873', '1874', '1857', '1858', '1860', '1861', - '1862', '1856', '1859', '1863', '1864', '1865', '1903', '1904', '1911', '1916', - '1917', '1960', '1961', '1962', '2028', '2029', '1912', '1913', '2030', '2031', - '2032', '2033', '2034', '2035', '2036', '1905', '1882', '2058', '2069', '2070', - '2071', '2072', '2073', '2074', '2075', '2076', '2066', '2067', '2068', '2165', - '2166', '2167', '2172', '2173', '2174', '2175', '2184' + '158', '940', '1056', '1057', '1337', '1338', '1339', '1340', '1341', '1342', + '1343', '1344', '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', '1866', '1867', '1871', '1872', '1873', '1874', '1857', '1858', + '1860', '1861', '1862', '1856', '1859', '1863', '1864', '1865', '1903', '1904', + '1911', '1916', '1917', '1960', '1961', '1962', '2028', '2029', '1912', '1913', + '2030', '2031', '2032', '2033', '2034', '2035', '2036', '1905', '1882', '2058', + '2069', '2070', '2071', '2072', '2073', '2074', '2075', '2076', '2066', '2067', + '2068', '2165', '2166', '2167', '2172', '2173', '2174', '2175', '2184' ] export const STAMP_EVENTS6 = { @@ -2114,6 +2115,117 @@ export const ARENA = { param: 8, } ] + }, + 'Season 15 (ARENA BATTLE 2024/09/05~2024/09/30)': { + details: { + season: 15, + rule: 1, + rank_match_target: 0, + time_start: BigInt(Date.parse('05 Sep 2024 00:00:00 GMT')), + time_end: BigInt(Date.parse('30 Sep 2024 23:59:59 GMT')), + shop_start: BigInt(Date.parse('05 Sep 2024 00:00:00 GMT')), + shop_end: BigInt(Date.parse('30 Sep 2024 23:59:59 GMT')), + is_open: 1, + is_shop: 1 + }, + arena_items: [ + { + catalog_id: 1, + catalog_type: 1, + price: 5000, + item_type: 0, + item_id: 2077, + param: 23, + }, + { + catalog_id: 1, + catalog_type: 1, + price: 5000, + item_type: 0, + item_id: 2078, + param: 23, + }, + { + 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, + } + ] } } @@ -2655,6 +2767,15 @@ export const PREGENE = [ "subbg": [464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482] }, probability: [0.05, 0.39, 0.6] + }, + { + id: 12, + items: { + "crew": [161], + "stamp": [384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396], + "subbg": [498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514] + }, + probability: [0.05, 0.39, 0.6] } ] diff --git a/handlers/common.ts b/handlers/common.ts index b6fb691..03a06c8 100644 --- a/handlers/common.ts +++ b/handlers/common.ts @@ -125,6 +125,16 @@ export const common: EPR = async (info, data, send) => { limited: K.ITEM('u8', limitedNo), }); } + // Licensed songs released pre-exceed gear + else if (LICENSED_SONGS6.includes(i.toString())) { + for(let j = 0; j < 5; j++) { + songs.push({ + music_id: K.ITEM('s32', i), + music_type: K.ITEM('u8', j), + limited: K.ITEM('u8', limitedNo), + }); + } + } } } } diff --git a/handlers/webui.ts b/handlers/webui.ts index ff5c226..e3f1a5d 100644 --- a/handlers/webui.ts +++ b/handlers/webui.ts @@ -5,6 +5,7 @@ import { Skill } from '../models/skill'; import { getVersion, IDToCode, GetCounter } from '../utils'; import { Mix } from '../models/mix'; import { Rival } from '../models/rival'; +import { Item } from '../models/item'; import { PREGENE, COURSES6} from '../data/exg'; import { textureslist } from '../data/webui' import * as fs from 'fs'; @@ -810,6 +811,24 @@ export const preGeneRoll = async (data: { set: number, refid: string, items: [] } else console.log('pregeneset none') } +export const preGeneReward = async (data: { reward: [], refid: string }, send: WebUISend) => { + let reward = Object.values(data.reward) + let rewardItem = await DB.Find(data.refid, {collection: 'item', type: reward[0], id: reward[1], param: reward[2]}) + if(rewardItem.length === 0) { + DB.Upsert(data.refid, { collection: "item", type: reward[0], id: reward[1] }, { $set: { param: reward[2] } }) + send.json({ + received: true, + reward: reward + }) + } else { + send.json({ + received: false, + reward: reward + }) + } +} + + export const manageEvents = async (data: { eventConfig: {} }) => { IO.WriteFile('webui/asset/config/events.json', JSON.stringify(data.eventConfig, null, 4)); } diff --git a/index.ts b/index.ts index c4c3d8f..8fd3ed8 100644 --- a/index.ts +++ b/index.ts @@ -9,6 +9,7 @@ import { getRivalScores, addRival, preGeneRoll, + preGeneReward, manageEvents, manageStartupFlags } from './handlers/webui'; @@ -51,6 +52,7 @@ export function register() { R.WebUIEvent('getRivalScores', getRivalScores); R.WebUIEvent('addRival', addRival); R.WebUIEvent('preGeneRoll', preGeneRoll); + R.WebUIEvent('preGeneReward', preGeneReward); R.WebUIEvent('manageEvents', manageEvents); R.WebUIEvent('manageStartupFlags', manageStartupFlags); R.WebUIEvent('updateProfile', updateProfile); diff --git a/webui/asset/js/detail.js b/webui/asset/js/detail.js index 563d93d..95f37dc 100644 --- a/webui/asset/js/detail.js +++ b/webui/asset/js/detail.js @@ -83,7 +83,7 @@ function getMedal(clear) { function getAppealCard(appeal) { var result = appeal_db["appeal_card_data"]["card"].filter(object => object["@id"] == appeal); - return "static/asset/ap_card/" + ((result.length > 0) ? result[0]["info"]["texture"] : 'ap_06_0001') + ".jpg" + return "static/asset/ap_card/" + ((result.length > 0) ? result[0]["info"]["texture"] : 'ap_06_0001') + ".png" } function getSongLevel(musicid, type) { diff --git a/webui/asset/js/generator.js b/webui/asset/js/generator.js index 07fb5a6..1e66a94 100644 --- a/webui/asset/js/generator.js +++ b/webui/asset/js/generator.js @@ -55,7 +55,10 @@ async function loadItems(itemSet, gene_edition, items_crew, items_stamp, items_s let geneItems = await getGeneratorEditionItems(gene_edition, itemSet) let itemCounts = countGeneItems(geneItems, items_crew, items_stamp, items_subbg, items_bgm, items_nemsys, items_sysbg) if(gene_edition === 'premium') { - if(itemCounts[0] >= itemCounts[1]) $('#pregene-roll').attr('disabled', 'disabled') + if(itemCounts[0] >= itemCounts[1]) { + $('#pregene-roll').attr('disabled', 'disabled') + checkSetReward(geneItems) + } else $('#pregene-roll').removeAttr('disabled') } else if(gene_edition === 'valkyrie') { $('#valgene-roll').attr('disabled', 'disabled') @@ -126,6 +129,24 @@ function redirectAfterRoll() { location.search = urlParams; } +function checkSetReward(geneItems) { + let refid = document.getElementsByName("refid")[0].value + if ('reward' in geneItems) { + emit('preGeneReward', { + reward: geneItems.reward, + refid: refid + }).then( + function(response) { + if(response.data.received) { + $('.modal-card-head').append('') + $('.modal-card-body').append('') + $('.modal-card-foot').append('') + $('.modal').addClass('is-active') + } + }) + } +} + $(document).ready(async function() { if(document.getElementById("data-pass-unlock-all").innerText === 'true') { $('.card-content').text("The \"Unlock All Valkyrie and Premium Items\" option is enabled. You wouldn't need this.") diff --git a/webui/asset/json/data.json b/webui/asset/json/data.json index 1a65d87..b09cc25 100644 --- a/webui/asset/json/data.json +++ b/webui/asset/json/data.json @@ -2591,87 +2591,87 @@ { "value": 498, "type": "slideshow", - "name": "subbg_0498" + "name": "Second Game" }, { "value": 499, "type": "slideshow", - "name": "subbg_0499" + "name": "archive::zip" }, { "value": 500, "type": "normal", - "name": "subbg_0500.png" + "name": "XROSS THE XOUL" }, { "value": 501, "type": "normal", - "name": "subbg_0501.png" + "name": "Inixia" }, { "value": 502, "type": "normal", - "name": "subbg_0502.png" + "name": "Dawn of Asia(Alkome Remix)" }, { "value": 503, "type": "normal", - "name": "subbg_0503.png" + "name": "EXCEED GEAR クライマックスシーズン" }, { "value": 504, "type": "video", - "name": "subbg_0504.mp4" + "name": "ゲーム背景(HEAVENLY)" }, { "value": 505, "type": "video", - "name": "subbg_0505.mp4" + "name": "ゲーム背景(LIVESTAGE)" }, { "value": 506, "type": "video", - "name": "subbg_0506.mp4" + "name": "ゲーム背景(赤い月)" }, { "value": 507, "type": "video", - "name": "subbg_0507.mp4" + "name": "ゲーム背景(夜の海)" }, { "value": 508, "type": "video", - "name": "subbg_0508.mp4" + "name": "ゲーム背景(桜)" }, { "value": 509, "type": "video", - "name": "subbg_0509.mp4" + "name": "ゲーム背景(Firestorm)" }, { "value": 510, "type": "video", - "name": "subbg_0510.mp4" + "name": "ゲーム背景(マサカリブレイド)" }, { "value": 511, "type": "video", - "name": "subbg_0511.mp4" + "name": "ゲーム背景(月光乱舞)" }, { "value": 512, "type": "video", - "name": "subbg_0512.mp4" + "name": "全てを真紅に染め上げる" }, { "value": 513, "type": "video", - "name": "subbg_0513.mp4" + "name": "10年の軌跡、重ねる奇跡。" }, { "value": 514, "type": "video", - "name": "subbg_0514.mp4" + "name": "今宵、新たなキセキを穿つ" } ], "bgm": [ @@ -9132,6 +9132,214 @@ { "value": 1532, "name": "東方Project 06 4" + }, + { + "value": 1533, + "name": "おしゃべりニアノア 001 1" + }, + { + "value": 1534, + "name": "おしゃべりニアノア 001 2" + }, + { + "value": 1535, + "name": "おしゃべりニアノア 001 3" + }, + { + "value": 1536, + "name": "おしゃべりニアノア 001 4" + }, + { + "value": 1537, + "name": "おしゃべりニアノア 002 1" + }, + { + "value": 1538, + "name": "おしゃべりニアノア 002 2" + }, + { + "value": 1539, + "name": "おしゃべりニアノア 002 3" + }, + { + "value": 1540, + "name": "おしゃべりニアノア 002 4" + }, + { + "value": 1541, + "name": "おしゃべりニアノア 003 1" + }, + { + "value": 1542, + "name": "おしゃべりニアノア 003 2" + }, + { + "value": 1543, + "name": "おしゃべりニアノア 003 3" + }, + { + "value": 1544, + "name": "おしゃべりニアノア 003 4" + }, + { + "value": 1545, + "name": "おしゃべりニアノア 004 1" + }, + { + "value": 1546, + "name": "おしゃべりニアノア 004 2" + }, + { + "value": 1547, + "name": "おしゃべりニアノア 004 3" + }, + { + "value": 1548, + "name": "おしゃべりニアノア 004 4" + }, + { + "value": 1549, + "name": "おしゃべりグレイス 008 1" + }, + { + "value": 1550, + "name": "おしゃべりグレイス 008 2" + }, + { + "value": 1551, + "name": "おしゃべりグレイス 008 3" + }, + { + "value": 1552, + "name": "おしゃべりグレイス 008 4" + }, + { + "value": 1553, + "name": "おしゃべりマキシマ 006 1" + }, + { + "value": 1554, + "name": "おしゃべりマキシマ 006 2" + }, + { + "value": 1555, + "name": "おしゃべりマキシマ 006 3" + }, + { + "value": 1556, + "name": "おしゃべりマキシマ 006 4" + }, + { + "value": 1557, + "name": "おしゃべりつまぶき 006 1" + }, + { + "value": 1558, + "name": "おしゃべりつまぶき 006 2" + }, + { + "value": 1559, + "name": "おしゃべりつまぶき 006 3" + }, + { + "value": 1560, + "name": "おしゃべりつまぶき 006 4" + }, + { + "value": 1561, + "name": "おしゃべりかなで 006 1" + }, + { + "value": 1562, + "name": "おしゃべりかなで 006 2" + }, + { + "value": 1563, + "name": "おしゃべりかなで 006 3" + }, + { + "value": 1564, + "name": "おしゃべりかなで 006 4" + }, + { + "value": 1565, + "name": "おしゃべり雷刀 004 1" + }, + { + "value": 1566, + "name": "おしゃべり雷刀 004 2" + }, + { + "value": 1567, + "name": "おしゃべり雷刀 004 3" + }, + { + "value": 1568, + "name": "おしゃべり雷刀 004 4" + }, + { + "value": 1569, + "name": "おしゃべり雷刀 005 1" + }, + { + "value": 1570, + "name": "おしゃべり雷刀 005 2" + }, + { + "value": 1571, + "name": "おしゃべり雷刀 005 3" + }, + { + "value": 1572, + "name": "おしゃべり雷刀 005 4" + }, + { + "value": 1573, + "name": "おしゃべり烈風刀 004 1" + }, + { + "value": 1574, + "name": "おしゃべり烈風刀 004 2" + }, + { + "value": 1575, + "name": "おしゃべり烈風刀 004 3" + }, + { + "value": 1576, + "name": "おしゃべり烈風刀 004 4" + }, + { + "value": 1577, + "name": "おしゃべり烈風刀 005 1" + }, + { + "value": 1578, + "name": "おしゃべり烈風刀 005 2" + }, + { + "value": 1579, + "name": "おしゃべり烈風刀 005 3" + }, + { + "value": 1580, + "name": "おしゃべり烈風刀 005 4" + }, + { + "value": 1581, + "name": "おしゃべり紅刃 009 1" + }, + { + "value": 1582, + "name": "おしゃべり紅刃 009 2" + }, + { + "value": 1583, + "name": "おしゃべり紅刃 009 3" + }, + { + "value": 1584, + "name": "おしゃべり紅刃 009 4" } ], "akaname": [ diff --git a/webui/asset/json/valgene_data.json b/webui/asset/json/valgene_data.json index 217d639..8df6005 100644 --- a/webui/asset/json/valgene_data.json +++ b/webui/asset/json/valgene_data.json @@ -112,6 +112,17 @@ "stamp": [368, 369, 370, 371, 372, 373, 374, 375, 376, 377], "subbg": [464, 465, 466, 467, 468, 469, 470, 471, 472, 473, 474, 475, 476, 477, 478, 479, 480, 481, 482] } + }, + { + "id": 12, + "name": "Premium Generator Vol. 5", + "jpn_exc": false, + "items": { + "crew": [161], + "stamp": [384, 385, 386, 387, 388, 389, 390, 391, 392, 393, 394, 395, 396], + "subbg": [498, 499, 500, 501, 502, 503, 504, 505, 506, 507, 508, 509, 510, 511, 512, 513, 514] + }, + "reward": [11, 161, 5, "crew", "NEAR & NOAH (EXCEED GEAR) Alternate Style"] } ], "valgene":[