3
2
forked from Dniel97/artemis

Merge branch 'develop' into fork_develop

This commit is contained in:
Dniel97 2023-09-07 15:09:36 +02:00
commit 08927db100
Signed by untrusted user: Dniel97
GPG Key ID: 6180B3C768FB2E08
7 changed files with 51 additions and 25 deletions

View File

@ -78,7 +78,10 @@ class ADBHeader:
self.protocol_ver = protocol_ver # u16 self.protocol_ver = protocol_ver # u16
self.cmd = cmd # u16 self.cmd = cmd # u16
self.length = length # u16 self.length = length # u16
self.status = ADBStatus(status) # u16 try:
self.status = ADBStatus(status) # u16
except ValueError as e:
raise ADBHeaderException(f"Status is incorrect! {e}")
self.game_id = game_id # 4 char + \x00 self.game_id = game_id # 4 char + \x00
self.store_id = store_id # u32 self.store_id = store_id # u32
self.keychip_id = keychip_id# 11 char + \x00 self.keychip_id = keychip_id# 11 char + \x00

View File

@ -85,6 +85,9 @@ class AimedbProtocol(Protocol):
return return
if head.keychip_id == "ABCD1234567" or head.store_id == 0xfff0:
self.logger.warning(f"Request from uninitialized AMLib: {vars(head)}")
handler, resp_code, name = self.request_list.get(head.cmd, (self.handle_default, None, 'default')) handler, resp_code, name = self.request_list.get(head.cmd, (self.handle_default, None, 'default'))
if resp_code is None: if resp_code is None:

View File

@ -140,9 +140,7 @@ class MuchaServlet:
def mucha_postprocess(self, data: dict) -> Optional[bytes]: def mucha_postprocess(self, data: dict) -> Optional[bytes]:
try: try:
urlencode = "" urlencode = "&".join(f"{k}={v}" for k, v in data.items())
for k, v in data.items():
urlencode += f"{k}={v}&"
return urlencode.encode() return urlencode.encode()

View File

@ -54,7 +54,7 @@ Games listed below have been tested and confirmed working.
In order to use the importer locate your game installation folder and execute: In order to use the importer locate your game installation folder and execute:
```shell ```shell
python read.py --series SDBT --version <version ID> --binfolder /path/to/game/folder --optfolder /path/to/game/option/folder python read.py --game SDBT --version <version ID> --binfolder /path/to/game/folder --optfolder /path/to/game/option/folder
``` ```
The importer for Chunithm will import: Events, Music, Charge Items and Avatar Accesories. The importer for Chunithm will import: Events, Music, Charge Items and Avatar Accesories.
@ -105,7 +105,7 @@ After a failed Online Battle the room will be deleted. The host is used for the
In order to use the importer you need to use the provided `Export.csv` file: In order to use the importer you need to use the provided `Export.csv` file:
```shell ```shell
python read.py --series SDCA --version <version ID> --binfolder titles/cxb/data python read.py --game SDCA --version <version ID> --binfolder titles/cxb/data
``` ```
The importer for crossbeats REV. will import Music. The importer for crossbeats REV. will import Music.
@ -160,11 +160,11 @@ For versions pre-dx
In order to use the importer locate your game installation folder and execute: In order to use the importer locate your game installation folder and execute:
DX: DX:
```shell ```shell
python read.py --series <Game Code> --version <Version ID> --binfolder /path/to/StreamingAssets --optfolder /path/to/game/option/folder python read.py --game <Game Code> --version <Version ID> --binfolder /path/to/StreamingAssets --optfolder /path/to/game/option/folder
``` ```
Pre-DX: Pre-DX:
```shell ```shell
python read.py --series <Game Code> --version <Version ID> --binfolder /path/to/data --optfolder /path/to/patch/data python read.py --game <Game Code> --version <Version ID> --binfolder /path/to/data --optfolder /path/to/patch/data
``` ```
The importer for maimai DX will import Events, Music and Tickets. The importer for maimai DX will import Events, Music and Tickets.
@ -196,7 +196,7 @@ Pre-Dx uses the same database as DX, so only upgrade using the SDEZ game code!
In order to use the importer locate your game installation folder and execute: In order to use the importer locate your game installation folder and execute:
```shell ```shell
python read.py --series SBZV --version <version ID> --binfolder /path/to/game/data/diva --optfolder /path/to/game/data/diva/mdata python read.py --game SBZV --version <version ID> --binfolder /path/to/game/data/diva --optfolder /path/to/game/data/diva/mdata
``` ```
The importer for Project Diva Arcade will all required data in order to use The importer for Project Diva Arcade will all required data in order to use
@ -243,7 +243,7 @@ python dbutils.py --game SBZV upgrade
In order to use the importer locate your game installation folder and execute: In order to use the importer locate your game installation folder and execute:
```shell ```shell
python read.py --series SDDT --version <version ID> --binfolder /path/to/game/folder --optfolder /path/to/game/option/folder python read.py --game SDDT --version <version ID> --binfolder /path/to/game/folder --optfolder /path/to/game/option/folder
``` ```
The importer for O.N.G.E.K.I. will all all Cards, Music and Events. The importer for O.N.G.E.K.I. will all all Cards, Music and Events.
@ -299,19 +299,19 @@ In order to use the importer you need to use the provided `.csv` files (which ar
option folders: option folders:
```shell ```shell
python read.py --series SDED --version <version ID> --binfolder titles/cm/cm_data --optfolder /path/to/cardmaker/option/folder python read.py --game SDED --version <version ID> --binfolder titles/cm/cm_data --optfolder /path/to/cardmaker/option/folder
``` ```
**If you haven't already executed the O.N.G.E.K.I. importer, make sure you import all cards!** **If you haven't already executed the O.N.G.E.K.I. importer, make sure you import all cards!**
```shell ```shell
python read.py --series SDDT --version <version ID> --binfolder /path/to/game/folder --optfolder /path/to/game/option/folder python read.py --game SDDT --version <version ID> --binfolder /path/to/game/folder --optfolder /path/to/game/option/folder
``` ```
Also make sure to import all maimai DX and CHUNITHM data as well: Also make sure to import all maimai DX and CHUNITHM data as well:
```shell ```shell
python read.py --series SDED --version <version ID> --binfolder /path/to/cardmaker/CardMaker_Data python read.py --game SDED --version <version ID> --binfolder /path/to/cardmaker/CardMaker_Data
``` ```
The importer for Card Maker will import all required Gachas (Banners) and cards (for maimai DX/CHUNITHM) and the hardcoded The importer for Card Maker will import all required Gachas (Banners) and cards (for maimai DX/CHUNITHM) and the hardcoded
@ -404,7 +404,7 @@ Gacha IDs up to 1140 will be loaded for CM 1.34 and all gachas will be loaded fo
In order to use the importer locate your game installation folder and execute: In order to use the importer locate your game installation folder and execute:
```shell ```shell
python read.py --series SDFE --version <version ID> --binfolder /path/to/game/WindowsNoEditor/Mercury/Content python read.py --game SDFE --version <version ID> --binfolder /path/to/game/WindowsNoEditor/Mercury/Content
``` ```
The importer for WACCA will import all Music data. The importer for WACCA will import all Music data.
@ -478,7 +478,7 @@ Below is a list of VIP rewards. Currently, VIP is not implemented, and thus thes
In order to use the importer locate your game installation folder and execute: In order to use the importer locate your game installation folder and execute:
```shell ```shell
python read.py --series SDEW --version <version ID> --binfolder /path/to/game/extractedassets python read.py --game SDEW --version <version ID> --binfolder /path/to/game/extractedassets
``` ```
The importer for SAO will import all items, heroes, support skills and titles data. The importer for SAO will import all items, heroes, support skills and titles data.

View File

@ -43,11 +43,11 @@ class BaseReader:
if __name__ == "__main__": if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Import Game Information") parser = argparse.ArgumentParser(description="Import Game Information")
parser.add_argument( parser.add_argument(
"--series", "--game",
action="store", action="store",
type=str, type=str,
required=True, required=True,
help="The game series we are importing.", help="The game we are importing.",
) )
parser.add_argument( parser.add_argument(
"--version", "--version",
@ -109,7 +109,7 @@ if __name__ == "__main__":
logger.setLevel(log_lv) logger.setLevel(log_lv)
coloredlogs.install(level=log_lv, logger=logger, fmt=log_fmt_str) coloredlogs.install(level=log_lv, logger=logger, fmt=log_fmt_str)
if args.series is None or args.version is None: if args.game is None or args.version is None:
logger.error("Game or version not specified") logger.error("Game or version not specified")
parser.print_help() parser.print_help()
exit(1) exit(1)
@ -134,7 +134,7 @@ if __name__ == "__main__":
titles = Utils.get_all_titles() titles = Utils.get_all_titles()
for dir, mod in titles.items(): for dir, mod in titles.items():
if args.series in mod.game_codes: if args.game in mod.game_codes:
handler = mod.reader(config, args.version, bin_arg, opt_arg, args.extra) handler = mod.reader(config, args.version, bin_arg, opt_arg, args.extra)
handler.read() handler.read()

View File

@ -38,7 +38,7 @@ class Mai2DeliverConfig:
@property @property
def content_folder(self) -> int: def content_folder(self) -> int:
return CoreConfig.get_config_field( return CoreConfig.get_config_field(
self.__config, "mai2", "server", "content_folder", default="" self.__config, "mai2", "deliver", "content_folder", default=""
) )
class Mai2UploadsConfig: class Mai2UploadsConfig:

View File

@ -228,12 +228,16 @@ class Mai2Servlet:
return zlib.compress(json.dumps(resp, ensure_ascii=False).encode("utf-8")) return zlib.compress(json.dumps(resp, ensure_ascii=False).encode("utf-8"))
def render_GET(self, request: Request, version: int, url_path: str) -> bytes: def render_GET(self, request: Request, version: int, url_path: str) -> bytes:
self.logger.info(f"v{version} GET {url_path}") self.logger.debug(f"v{version} GET {url_path}")
url_split = url_path.split("/") url_split = url_path.split("/")
if (url_split[0] == "api" and url_split[1] == "movie") or url_split[0] == "movie": if (url_split[0] == "api" and url_split[1] == "movie") or url_split[0] == "movie":
if url_split[2] == "moviestart": if url_split[2] == "moviestart":
return json.dumps({"moviestart":{"status":"OK"}}).encode() return json.dumps({"moviestart":{"status":"OK"}}).encode()
else:
request.setResponseCode(404)
return b""
if url_split[0] == "old": if url_split[0] == "old":
if url_split[1] == "ping": if url_split[1] == "ping":
@ -247,18 +251,36 @@ class Mai2Servlet:
elif url_split[1].startswith("friend"): elif url_split[1].startswith("friend"):
self.logger.info(f"v{version} old server friend inquire") self.logger.info(f"v{version} old server friend inquire")
return zlib.compress(b"{}") return zlib.compress(b"{}")
else:
request.setResponseCode(404)
return b""
elif url_split[0] == "usbdl": elif url_split[0] == "usbdl":
if url_split[1] == "CONNECTIONTEST": if url_split[1] == "CONNECTIONTEST":
self.logger.info(f"v{version} usbdl server test") self.logger.info(f"v{version} usbdl server test")
return zlib.compress(b"ok") return b""
elif self.game_cfg.deliver.udbdl_enable and path.exists(f"{self.game_cfg.deliver.content_folder}/usb/{url_split[-1]}"):
with open(f"{self.game_cfg.deliver.content_folder}/usb/{url_split[-1]}", 'rb') as f:
return f.read()
else:
request.setResponseCode(404)
return b""
elif url_split[0] == "deliver": elif url_split[0] == "deliver":
file = url_split[len(url_split) - 1] file = url_split[len(url_split) - 1]
self.logger.info(f"v{version} {file} deliver inquire") self.logger.info(f"v{version} {file} deliver inquire")
self.logger.debug(f"{self.game_cfg.deliver.content_folder}/net_deliver/{file}")
if not self.game_cfg.deliver.enable or not path.exists(f"{self.game_cfg.deliver.content_folder}/{file}"): if self.game_cfg.deliver.enable and path.exists(f"{self.game_cfg.deliver.content_folder}/net_deliver/{file}"):
return zlib.compress(b"") with open(f"{self.game_cfg.deliver.content_folder}/net_deliver/{file}", 'rb') as f:
return f.read()
else:
request.setResponseCode(404)
return b""
else: else:
return zlib.compress(b"{}") return zlib.compress(b"{}")