From 08891d085155004d6d1933e481fe95fc3ef40e37 Mon Sep 17 00:00:00 2001 From: zaphkito Date: Sun, 5 May 2024 05:41:14 +0000 Subject: [PATCH] mai2: some improve for DX earlier version and return game code in uri (#125) Attention: There are all talking about maimai DX and newer version, not Pre-DX dx and newer version request these but no used, they are just exist in game code, only found `oldServerUrl` used in SDEZ 1.00, this should also fix SDGA and SDGB try to visit `ServerUrl + movieServerUrl` although that just because of SEGA shit code tested work ![image](/attachments/f2c79134-4651-4976-8278-bbcf268f424a) Reviewed-on: https://gitea.tendokyu.moe/Hay1tsme/artemis/pulls/125 Co-authored-by: zaphkito Co-committed-by: zaphkito --- titles/chuni/index.py | 6 +++- titles/cm/base.py | 2 +- titles/mai2/base.py | 4 +-- titles/mai2/dx.py | 18 +++++++--- titles/mai2/index.py | 81 +++++++++++++++++++++++++------------------ 5 files changed, 69 insertions(+), 42 deletions(-) diff --git a/titles/chuni/index.py b/titles/chuni/index.py index b102d5e..f781898 100644 --- a/titles/chuni/index.py +++ b/titles/chuni/index.py @@ -272,7 +272,11 @@ class ChuniServlet(BaseServlet): self.logger.info(f"v{version} {endpoint} request from {client_ip}") self.logger.debug(req_data) - endpoint = endpoint.replace("C3Exp", "") if game_code == "SDGS" else endpoint + endpoint = ( + endpoint.replace("C3Exp", "") + if game_code == "SDGS" + else endpoint + ) func_to_find = "handle_" + inflection.underscore(endpoint) + "_request" handler_cls = self.versions[internal_ver](self.core_cfg, self.game_cfg) diff --git a/titles/cm/base.py b/titles/cm/base.py index e4fd1cb..4a49832 100644 --- a/titles/cm/base.py +++ b/titles/cm/base.py @@ -51,7 +51,7 @@ class CardMakerBase: { "modelKind": 1, "type": 1, - "titleUri": f"{uri}/{self._parse_int_ver(games_ver['maimai'])}/Maimai2Servlet/", + "titleUri": f"{uri}/SDEZ/{self._parse_int_ver(games_ver['maimai'])}/Maimai2Servlet/", }, # ONGEKI { diff --git a/titles/mai2/base.py b/titles/mai2/base.py index a75a94f..90597d1 100644 --- a/titles/mai2/base.py +++ b/titles/mai2/base.py @@ -26,10 +26,10 @@ class Mai2Base: self.date_time_format = "%Y-%m-%d %H:%M:%S" if not self.core_config.server.is_using_proxy and Utils.get_title_port(self.core_config) != 80: - self.old_server = f"http://{self.core_config.server.hostname}:{Utils.get_title_port(cfg)}/197/MaimaiServlet/" + self.old_server = f"http://{self.core_config.server.hostname}:{Utils.get_title_port(cfg)}/SDEY/197/MaimaiServlet/" else: - self.old_server = f"http://{self.core_config.server.hostname}/197/MaimaiServlet/" + self.old_server = f"http://{self.core_config.server.hostname}/SDEY/197/MaimaiServlet/" async def handle_get_game_setting_api_request(self, data: Dict): # if reboot start/end time is not defined use the default behavior of being a few hours ago diff --git a/titles/mai2/dx.py b/titles/mai2/dx.py index 8d6e738..4423824 100644 --- a/titles/mai2/dx.py +++ b/titles/mai2/dx.py @@ -5,6 +5,7 @@ import json from random import randint from core.config import CoreConfig +from core.utils import Utils from titles.mai2.base import Mai2Base from titles.mai2.config import Mai2Config from titles.mai2.const import Mai2Constants @@ -15,6 +16,15 @@ class Mai2DX(Mai2Base): super().__init__(cfg, game_cfg) self.version = Mai2Constants.VER_MAIMAI_DX + # DX earlier version need a efficient old server uri to work + # game will auto add MaimaiServlet endpoint behind return uri + # so do not add "MaimaiServlet" + if not self.core_config.server.is_using_proxy and Utils.get_title_port(self.core_config) != 80: + self.old_server = f"http://{self.core_config.server.hostname}:{Utils.get_title_port(cfg)}/SDEY/197/" + + else: + self.old_server = f"http://{self.core_config.server.hostname}/SDEY/197/" + async def handle_get_game_setting_api_request(self, data: Dict): # if reboot start/end time is not defined use the default behavior of being a few hours ago if self.core_config.title.reboot_start_time == "" or self.core_config.title.reboot_end_time == "": @@ -48,10 +58,10 @@ class Mai2DX(Mai2Base): "rebootEndTime": reboot_end, "movieUploadLimit": 100, "movieStatus": 1, - "movieServerUri": self.old_server + "movie/", - "deliverServerUri": self.old_server + "deliver/" if self.can_deliver and self.game_config.deliver.enable else "", - "oldServerUri": self.old_server + "old", - "usbDlServerUri": self.old_server + "usbdl/" if self.can_deliver and self.game_config.deliver.udbdl_enable else "", + "movieServerUri": "", + "deliverServerUri": "", + "oldServerUri": self.old_server, + "usbDlServerUri": "", "rebootInterval": 0, }, "isAouAccession": False, diff --git a/titles/mai2/index.py b/titles/mai2/index.py index d194305..ad02648 100644 --- a/titles/mai2/index.py +++ b/titles/mai2/index.py @@ -141,31 +141,26 @@ class Mai2Servlet(BaseServlet): def get_routes(self) -> List[Route]: return [ - Route("/{version:int}/MaimaiServlet/api/movie/{endpoint:str}", self.handle_movie, methods=['GET', 'POST']), - Route("/{version:int}/MaimaiServlet/old/{endpoint:str}", self.handle_old_srv), - Route("/{version:int}/MaimaiServlet/old/{endpoint:str}/{placeid:str}/{keychip:str}/{userid:int}", self.handle_old_srv_userdata), - Route("/{version:int}/MaimaiServlet/old/{endpoint:str}/{userid:int}", self.handle_old_srv_userdata), - Route("/{version:int}/MaimaiServlet/old/{endpoint:str}/{userid:int}", self.handle_old_srv_userdata), - Route("/{version:int}/MaimaiServlet/usbdl/{endpoint:str}", self.handle_usbdl), - Route("/{version:int}/MaimaiServlet/deliver/{endpoint:str}", self.handle_deliver), - Route("/{version:int}/MaimaiServlet/{endpoint:str}", self.handle_mai, methods=['POST']), + Route("/{game:str}/{version:int}/MaimaiServlet/api/movie/{endpoint:str}", self.handle_movie, methods=['GET', 'POST']), + Route("/{game:str}/{version:int}/MaimaiServlet/old/{endpoint:str}", self.handle_old_srv), + Route("/{game:str}/{version:int}/MaimaiServlet/old/{endpoint:str}/{placeid:str}/{keychip:str}/{userid:int}", self.handle_old_srv_userdata), + Route("/{game:str}/{version:int}/MaimaiServlet/old/{endpoint:str}/{userid:int}", self.handle_old_srv_userdata), + Route("/{game:str}/{version:int}/MaimaiServlet/old/{endpoint:str}/{userid:int}", self.handle_old_srv_userdata), + Route("/{game:str}/{version:int}/MaimaiServlet/usbdl/{endpoint:str}", self.handle_usbdl), + Route("/{game:str}/{version:int}/MaimaiServlet/deliver/{endpoint:str}", self.handle_deliver), + Route("/{game:str}/{version:int}/MaimaiServlet/{endpoint:str}", self.handle_mai, methods=['POST']), Route("/{game:str}/{version:int}/Maimai2Servlet/{endpoint:str}", self.handle_mai2, methods=['POST']), ] def get_allnet_info(self, game_code: str, game_ver: int, keychip: str) -> Tuple[str, str]: - if game_code in {Mai2Constants.GAME_CODE_DX, Mai2Constants.GAME_CODE_DX_INT}: - path = f"{game_code}/{game_ver}" - else: - path = game_ver - if not self.core_cfg.server.is_using_proxy and Utils.get_title_port(self.core_cfg) != 80: return ( - f"http://{self.core_cfg.server.hostname}:{Utils.get_title_port(self.core_cfg)}/{path}/", + f"http://{self.core_cfg.server.hostname}:{Utils.get_title_port(self.core_cfg)}/{game_code}/{game_ver}/", f"{self.core_cfg.server.hostname}", ) return ( - f"http://{self.core_cfg.server.hostname}/{path}/", + f"http://{self.core_cfg.server.hostname}/{game_code}/{game_ver}/", f"{self.core_cfg.server.hostname}", ) @@ -289,25 +284,43 @@ class Mai2Servlet(BaseServlet): internal_ver = 0 client_ip = Utils.get_ip_addr(request) encrypted = False - - if version < 105: # 1.0 - internal_ver = Mai2Constants.VER_MAIMAI_DX - elif version >= 105 and version < 110: # PLUS - internal_ver = Mai2Constants.VER_MAIMAI_DX_PLUS - elif version >= 110 and version < 115: # Splash - internal_ver = Mai2Constants.VER_MAIMAI_DX_SPLASH - elif version >= 115 and version < 120: # Splash PLUS - internal_ver = Mai2Constants.VER_MAIMAI_DX_SPLASH_PLUS - elif version >= 120 and version < 125: # UNiVERSE - internal_ver = Mai2Constants.VER_MAIMAI_DX_UNIVERSE - elif version >= 125 and version < 130: # UNiVERSE PLUS - internal_ver = Mai2Constants.VER_MAIMAI_DX_UNIVERSE_PLUS - elif version >= 130 and version < 135: # FESTiVAL - internal_ver = Mai2Constants.VER_MAIMAI_DX_FESTIVAL - elif version >= 135 and version < 140: # FESTiVAL PLUS - internal_ver = Mai2Constants.VER_MAIMAI_DX_FESTIVAL_PLUS - elif version >= 140: # BUDDiES - internal_ver = Mai2Constants.VER_MAIMAI_DX_BUDDIES + + if game_code == "SDEZ": # JP + if version < 110: # 1.0 + internal_ver = Mai2Constants.VER_MAIMAI_DX + elif version >= 110 and version < 114: # PLUS + internal_ver = Mai2Constants.VER_MAIMAI_DX_PLUS + elif version >= 114 and version < 117: # Splash + internal_ver = Mai2Constants.VER_MAIMAI_DX_SPLASH + elif version >= 117 and version < 120: # Splash PLUS + internal_ver = Mai2Constants.VER_MAIMAI_DX_SPLASH_PLUS + elif version >= 120 and version < 125: # UNiVERSE + internal_ver = Mai2Constants.VER_MAIMAI_DX_UNIVERSE + elif version >= 125 and version < 130: # UNiVERSE PLUS + internal_ver = Mai2Constants.VER_MAIMAI_DX_UNIVERSE_PLUS + elif version >= 130 and version < 135: # FESTiVAL + internal_ver = Mai2Constants.VER_MAIMAI_DX_FESTIVAL + elif version >= 135 and version < 140: # FESTiVAL PLUS + internal_ver = Mai2Constants.VER_MAIMAI_DX_FESTIVAL_PLUS + elif version >= 140: # BUDDiES + internal_ver = Mai2Constants.VER_MAIMAI_DX_BUDDIES + elif game_code == "SDGA": # Int + if version < 105: # 1.0 + internal_ver = Mai2Constants.VER_MAIMAI_DX + elif version >= 105 and version < 110: # PLUS + internal_ver = Mai2Constants.VER_MAIMAI_DX_PLUS + elif version >= 110 and version < 115: # Splash + internal_ver = Mai2Constants.VER_MAIMAI_DX_SPLASH + elif version >= 115 and version < 120: # Splash PLUS + internal_ver = Mai2Constants.VER_MAIMAI_DX_SPLASH_PLUS + elif version >= 120 and version < 125: # UNiVERSE + internal_ver = Mai2Constants.VER_MAIMAI_DX_UNIVERSE + elif version >= 125 and version < 130: # UNiVERSE PLUS + internal_ver = Mai2Constants.VER_MAIMAI_DX_UNIVERSE_PLUS + elif version >= 130 and version < 135: # FESTiVAL + internal_ver = Mai2Constants.VER_MAIMAI_DX_FESTIVAL + elif version >= 135 and version < 140: # FESTiVAL PLUS + internal_ver = Mai2Constants.VER_MAIMAI_DX_FESTIVAL_PLUS if all(c in string.hexdigits for c in endpoint) and len(endpoint) == 32: # If we get a 32 character long hex string, it's a hash and we're