From 990f070f520bc67795963fe60ca986feac3c8aae Mon Sep 17 00:00:00 2001 From: drmext <71258889+drmext@users.noreply.github.com> Date: Sat, 28 Oct 2023 23:44:56 +0000 Subject: [PATCH] Fix --- core_common.py | 2 +- modules/iidx/iidx31music.py | 15 ++++ modules/iidx/iidx31pc.py | 159 +++++++++++++++++++++++------------- requirements.txt | 2 +- start.bat | 26 +++--- start.sh | 14 ++-- 6 files changed, 137 insertions(+), 81 deletions(-) diff --git a/core_common.py b/core_common.py index f38b78f..8cd066d 100644 --- a/core_common.py +++ b/core_common.py @@ -139,7 +139,7 @@ async def core_process_request(request): if request.compress == "lz77": xml_dec = EamuseLZ77.decode(xml_dec) - xml = KBinXML(xml_dec) + xml = KBinXML(xml_dec, convert_illegal_things=True) root = xml.xml_doc xml_text = xml.to_text() request.is_binxml = KBinXML.is_binary_xml(xml_dec) diff --git a/modules/iidx/iidx31music.py b/modules/iidx/iidx31music.py index 96f82a8..751d327 100644 --- a/modules/iidx/iidx31music.py +++ b/modules/iidx/iidx31music.py @@ -541,3 +541,18 @@ async def iidx31music_arenaCPU(request: Request): response_body, response_headers = await core_prepare_response(request, response) return Response(content=response_body, headers=response_headers) + + +@router.post("/{gameinfo}/IIDX31music/retry") +async def iidx31music_retry(request: Request): + request_info = await core_process_request(request) + + response = E.response( + E.IIDX31music( + E.session(session_id=1), + status=0, + ) + ) + + response_body, response_headers = await core_prepare_response(request, response) + return Response(content=response_body, headers=response_headers) diff --git a/modules/iidx/iidx31pc.py b/modules/iidx/iidx31pc.py index 30744a0..aa4a1a3 100644 --- a/modules/iidx/iidx31pc.py +++ b/modules/iidx/iidx31pc.py @@ -106,35 +106,7 @@ async def iidx31pc_get(request: Request): rivals[idx]["hand"] = rival_profile["hand"] rivals[idx]["head"] = rival_profile["head"] - current_time = round(time()) - - skins = [ - calculate_folder_mask(profile), - profile["explosion"], - profile["explosion_size"], - profile["turntable"], - profile["judgestring"], - profile["note"], - 0, - profile["soundpreview"], - 0, - profile["effector_type"], - profile["bgm"], - profile["alternate_hcn"], - profile["kokokara_start"], - profile["sudden"], - profile["grapharea"], - 0, - profile["keybeam"], - 0, - profile["fullcombo"], - 0, - ] - # unknown: - # profile["judge_pos"], - # profile["categoryvoice"], - # profile["frame"], - # profile["effector_lock"], + # current_time = round(time()) response = E.response( E.IIDX31pc( @@ -225,12 +197,33 @@ async def iidx31pc_get(request: Request): __size=5 * 4, ), E.skin( - skins, + [ + calculate_folder_mask(profile), + profile["explosion"], + profile["explosion_size"], + profile["turntable"], + profile["judgestring"], + profile["note"], + profile.get("note_size", 0), + profile["soundpreview"], + profile["effector_lock"], + profile["effector_type"], + profile["bgm"], + profile["alternate_hcn"], + profile["kokokara_start"], + profile["sudden"], + profile["grapharea"], + profile.get("lift", 0), + profile["keybeam"], + profile.get("keybeam_size", 1), + profile["fullcombo"], + 0, + ], __type="s16", ), E.tdjskin( [ - 0, + profile.get("submonitor", 0), 0, 0, 0, @@ -238,33 +231,26 @@ async def iidx31pc_get(request: Request): __type="s16", ), E.skin_customize_flg( - skin_frame_flg=0, - skin_turntable_flg=0, - skin_bomb_flg=0, - skin_bgm_flg=0, - skin_lane_flg0=0, - skin_lane_flg1=0, - skin_lane_flg2=0, - skin_lane_flg3=0, - skin_lane_flg4=0, - skin_lane_flg5=0, - skin_notes_flg=0, - skin_fullcombo_flg=0, - skin_keybeam_flg=0, - skin_judgestring_flg=0, + skin_frame_flg=-1, + skin_turntable_flg=-1, + skin_bomb_flg=-1, + skin_bgm_flg=-1, + skin_lane_flg0=-1, + skin_lane_flg1=-1, + skin_lane_flg2=-1, + skin_lane_flg3=-1, + skin_lane_flg4=-1, + skin_lane_flg5=-1, + skin_notes_flg=-1, + skin_fullcombo_flg=-1, + skin_keybeam_flg=-1, + skin_judgestring_flg=-1, # skin_bgm_flg=profile["skin_customize_flag_bgm"], # skin_lane_flg3=profile["skin_customize_flag_lane"], ), E.tdjskin_customize_flg( - skin_submonitor_flg=0, + skin_submonitor_flg=-1, ), - # *[ - # E.skin_equip( - # skin_id=idx, - # skin_num=skin, - # ) - # for idx, skin in enumerate(skins) - # ], E.spdp_rival( flg=-1 ), # required for rivals to load after switching spdp in music select @@ -568,6 +554,23 @@ async def iidx31pc_get(request: Request): ) ), ), + E.music_memo( + *[ + E.folder( + E.music_id( + profile.get(f"music_memo_{fi}_{ps}_mids", [0] * 10), + __type="s32", + ), + play_style=ps, + folder_id=fi, + name=profile.get( + f"music_memo_{fi}_{ps}_name", f"FOLDER {str(fi+1).zfill(2)}" + ), + ) + for fi in range(10) + for ps in range(2) + ], + ), # ), # E.event_1( # E.flyer_data( @@ -828,13 +831,13 @@ async def iidx31pc_common(request: Request): E.play_video(), E.music_retry(), E.world_tourism(open_list=1), - E.bpl_battle(phase=1), + # E.bpl_battle(phase=1), E.display_asio_logo(), # E.force_rom_check(), E.lane_gacha(), # E.fps_fix(), # E.save_unsync_log(), - E.tourism_booster(), + # E.tourism_booster(), expire=600, ) ) @@ -955,6 +958,17 @@ async def iidx31pc_save(request: Request): if concentration is not None: game_profile["lightning_setting_concentration"] = int(concentration.text) + music_memo = request_info["root"][0].find("music_memo") + if music_memo is not None: + folders = music_memo.findall("folder") + for f in folders: + fi = f.attrib["folder_id"] + fn = f.attrib["name"] + ps = f.attrib["play_style"] + mids = [int(x) for x in f.find("music_id").text.split(" ")] + game_profile[f"music_memo_{fi}_{ps}_name"] = fn + game_profile[f"music_memo_{fi}_{ps}_mids"] = mids + # lightning_customize_flg = request_info["root"][0].find("lightning_customize_flg") # if lightning_customize_flg is not None: # for k in [ @@ -1015,6 +1029,37 @@ async def iidx31pc_save(request: Request): int(x) for x in point.text.split(" ") ] + skin_equips = request_info["root"][0].findall("skin_equip") + skin_equips = [] if skin_equips is None else skin_equips + skin = { + 1: "explosion", + 2: "explosion_size", + 3: "turntable", + 4: "judgestring", + 5: "note", + 6: "note_size", + 13: "sudden", + 14: "grapharea", + 15: "lift", + 16: "keybeam", + 17: "keybeam_size", + 18: "fullcombo", + } + for skin_equip in skin_equips: + skin_id = int(skin_equip.attrib["skin_id"]) + if skin_id in skin: + game_profile[skin[skin_id]] = int(skin_equip.attrib["skin_no"]) + + tdjskin_equips = request_info["root"][0].findall("tdjskin_equip") + tdjskin_equips = [] if tdjskin_equips is None else tdjskin_equips + tdjskin = { + 0: "submonitor", + } + for tdjskin_equip in tdjskin_equips: + skin_id = int(tdjskin_equip.attrib["skin_id"]) + if skin_id in tdjskin: + game_profile[tdjskin[skin_id]] = int(tdjskin_equip.attrib["skin_no"]) + notes_radars = request_info["root"][0].findall("notes_radar") notes_radars = [] if notes_radars is None else notes_radars for notes_radar in notes_radars: @@ -1146,9 +1191,13 @@ async def iidx31pc_reg(request: Request): "judgestring": 0, "soundpreview": 0, "grapharea": 0, + "lift": 0, "effector_lock": 0, "effector_type": 0, "explosion_size": 0, + "note_size": 0, + "keybeam_size": 0, + "submonitor": 0, "alternate_hcn": 0, "kokokara_start": 0, "d_auto_adjust": 0, diff --git a/requirements.txt b/requirements.txt index c0ceb47..12a5b2c 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,5 +1,5 @@ fastapi -kbinxml +kbinxml>=2.0 pycryptodomex python-multipart tinydb diff --git a/start.bat b/start.bat index 49e233c..3a12f39 100644 --- a/start.bat +++ b/start.bat @@ -4,21 +4,16 @@ TITLE MB cd /d %~dp0 -if exist .venv\Scripts\activate.bat ( - ( - REM goto :make_venv_portable - :start_server - .venv\Scripts\activate.bat - python pyeamu.py - ) -) else ( - ( - :create_venv - python -m venv .venv - .venv\Scripts\activate.bat - python -m pip install -U -r requirements.txt - python pyeamu.py - ) +REM goto :make_venv_portable + +if not exist .venv\Scripts\activate.bat ( + python -m venv .venv +) + +( + .venv\Scripts\activate.bat + python -m pip install -r requirements.txt + python pyeamu.py ) echo: @@ -72,4 +67,3 @@ setlocal enabledelayedexpansion endlocal del %activate% rename "%activatetemp%" activate.bat -goto :start_server diff --git a/start.sh b/start.sh index b15c591..d3c1fd0 100644 --- a/start.sh +++ b/start.sh @@ -1,6 +1,6 @@ #!/bin/bash -ver="3.11" +ver="3.12" py="python$ver" if ! command -v $py &> /dev/null @@ -9,13 +9,11 @@ then exit fi -if [ -d .venv/ ] +if [ ! -d .venv/ ] then - source .venv/bin/activate - $py pyeamu.py -else $py -m venv .venv - source .venv/bin/activate - $py -m pip install -U -r requirements.txt - $py pyeamu.py fi + +source .venv/bin/activate +$py -m pip install -r requirements.txt +$py pyeamu.py