mirror of
https://gitea.tendokyu.moe/Lannamokia/SEGAfs-GUI.git
synced 2026-09-22 21:27:54 +03:00
应用补丁
This commit is contained in:
@@ -0,0 +1,2 @@
|
||||
__pycache__/segafs_gui.cpython-313.pyc
|
||||
test_version_fix.py
|
||||
+56
-1
@@ -468,7 +468,7 @@ class SegaFSGUI:
|
||||
'second': self.second_var.get(),
|
||||
'milli': 0,
|
||||
},
|
||||
'game_version': {'release': 0, 'minor': 0, 'major': int(self.game_version_var.get()) if self.game_version_var.get().isdigit() else 0} if self.container_type_var.get() != 2 else self.game_version_var.get().encode('utf-8')[:4].ljust(4, b'\x00'),
|
||||
'game_version': self._parse_game_version() if self.container_type_var.get() != 2 else self.game_version_var.get().encode('utf-8')[:4].ljust(4, b'\x00'),
|
||||
'block_size': int(self.block_size_var.get(), 16),
|
||||
'header_block_count': 8,
|
||||
'unk2': 0,
|
||||
@@ -489,6 +489,61 @@ class SegaFSGUI:
|
||||
}
|
||||
return config
|
||||
|
||||
def _parse_game_version(self):
|
||||
"""解析游戏版本号为Version结构
|
||||
|
||||
支持多种格式:
|
||||
- "A041" -> major=0x41, minor=0x0A, release=0x00 (字母+数字格式)
|
||||
- "1.2.3" -> major=1, minor=2, release=3 (点分格式)
|
||||
- "123" -> major=123, minor=0, release=0 (纯数字格式)
|
||||
"""
|
||||
version_str = self.game_version_var.get().strip()
|
||||
|
||||
if not version_str:
|
||||
return {'release': 0, 'minor': 0, 'major': 0}
|
||||
|
||||
# 处理字母+数字格式 (如 "A041")
|
||||
if len(version_str) >= 2 and version_str[0].isalpha():
|
||||
try:
|
||||
# 第一个字符作为minor版本 (A=10, B=11, etc.)
|
||||
minor = ord(version_str[0].upper()) - ord('A') + 10
|
||||
# 剩余数字作为major版本
|
||||
major_str = version_str[1:]
|
||||
if major_str.isdigit():
|
||||
major = int(major_str)
|
||||
else:
|
||||
# 如果不是纯数字,尝试解析为十六进制
|
||||
major = int(major_str, 16) if all(c in '0123456789ABCDEFabcdef' for c in major_str) else 0
|
||||
return {'release': 0, 'minor': minor, 'major': major}
|
||||
except (ValueError, IndexError):
|
||||
pass
|
||||
|
||||
# 处理点分格式 (如 "1.2.3")
|
||||
if '.' in version_str:
|
||||
try:
|
||||
parts = version_str.split('.')
|
||||
major = int(parts[0]) if len(parts) > 0 and parts[0].isdigit() else 0
|
||||
minor = int(parts[1]) if len(parts) > 1 and parts[1].isdigit() else 0
|
||||
release = int(parts[2]) if len(parts) > 2 and parts[2].isdigit() else 0
|
||||
return {'release': release, 'minor': minor, 'major': major}
|
||||
except (ValueError, IndexError):
|
||||
pass
|
||||
|
||||
# 处理纯数字格式
|
||||
if version_str.isdigit():
|
||||
return {'release': 0, 'minor': 0, 'major': int(version_str)}
|
||||
|
||||
# 尝试解析为十六进制
|
||||
try:
|
||||
if all(c in '0123456789ABCDEFabcdef' for c in version_str):
|
||||
major = int(version_str, 16)
|
||||
return {'release': 0, 'minor': 0, 'major': major}
|
||||
except ValueError:
|
||||
pass
|
||||
|
||||
# 默认返回
|
||||
return {'release': 0, 'minor': 0, 'major': 0}
|
||||
|
||||
def generate_container_thread(self):
|
||||
"""在后台线程中生成容器"""
|
||||
try:
|
||||
|
||||
Reference in New Issue
Block a user