7 Star 19 Fork 1

Comitaro / Master Duel 汉化版本切换

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
index.py 3.35 KB
一键复制 编辑 原始数据 按行查看 历史
Comitaro 提交于 2023-02-18 00:59 . fix: 修复\n错误,优化代码
import json
from typing import Callable
from os import path
from crack_key import crack_key
from decrypt import card_decrypt
from encrypt import card_encrypt
from hint import CardRawData, Status
from move import copy_to_local, copy_to_original
from pack import card_pack
from process import card_process
from translate import card_translate
from unpack import card_unpack
from utils import make_dir, get_resource_path
def main(
path_game_root: str,
set_status: Callable[[str], None] = lambda _: print(_),
set_status_msg: Callable[[str], None] = lambda _: print(_),
log: Callable[[str], None] = lambda _: print(_),
network_error_cb: Callable[[], None] = lambda: None,
custom_trans: bool = True,
custom_font: bool = False,
output_to_local: bool = False,
dev_mode: bool = True,
):
try:
make_dir(get_resource_path("output"))
set_status_msg("安装中...")
# 首先 copy到本地
set_status(Status.obtaining)
path_data_unity3d = copy_to_local(path_game_root, get_resource_path("."))
set_status(Status.unpacking)
card_data = card_unpack(path_data_unity3d)
set_status(Status.cracking)
m_iCryptoKey = crack_key(card_data["ja-jp"]["CARD_NAME"])
# m_iCryptoKey = 63 # 现在为了减少时间先写死...
set_status(Status.decrypting)
card_data = card_decrypt(card_data, m_iCryptoKey)
set_status(Status.processing)
card_raw_data = card_process(card_data)
with open(
path.join(get_resource_path("resources"), "card.json"), "r", encoding="utf8"
) as f:
archived_Data: CardRawData = json.load(f)
if custom_trans:
set_status(Status.translating)
# 恢复则无需翻译
card_raw_data = card_translate(
archived_Data,
card_raw_data,
progress_update_cb=(lambda _: None)
if dev_mode
else (lambda p: set_status(f"{Status.translating}: {p}")),
network_error_cb=network_error_cb,
dev_mode=dev_mode,
)
set_status(Status.encrypting)
card_encrypt_data = card_encrypt(
card_data, card_raw_data, m_iCryptoKey, custom_trans=custom_trans
)
set_status(Status.packing)
card_pack(
card_encrypt_data, get_resource_path("input"), get_resource_path("output")
)
# 复制回去
set_status(Status.overriding)
copy_to_original(
path_game_root,
path_pack=get_resource_path("output"),
dir_font=get_resource_path("resources"),
custom_font=custom_font,
output_to_local=output_to_local,
)
set_status(Status.success)
set_status_msg("翻译成功!")
except IOError as e:
# 这儿对应无权限
print(e)
log(str(e))
set_status(Status.error_io)
set_status_msg('请以管理员身份运行本程序,\n或者勾选下面的"输出到本地目录"。')
except Exception as e:
print(e)
log(str(e))
set_status(Status.failed)
if __name__ == "__main__":
# 测试
main(
r"E:\Program Files (x86)\Steam\steamapps\common\Yu-Gi-Oh! Master Duel",
custom_trans=False,
custom_font=False,
output_to_local=True
)
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/fetiss/master-duel-chinese-switch.git
git@gitee.com:fetiss/master-duel-chinese-switch.git
fetiss
master-duel-chinese-switch
Master Duel 汉化版本切换
master

搜索帮助

344bd9b3 5694891 D2dac590 5694891