-
Notifications
You must be signed in to change notification settings - Fork 2
/
Copy pathsearch.py
50 lines (42 loc) · 1.7 KB
/
search.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
import json
import os
import UnityPy
from typing import Callable
def search_card_obj_list(path_game_root: str, log: Callable[[str], None]) -> dict[str, str]:
card_obj_name = (
'CARD_Desc',
'CARD_Indx',
'CARD_Name',
'Card_Part',
'Card_Pidx',
'CARD_Prop',
)
log("Debug scanning option has been enabled: " + path_game_root)
card_obj_list = {}
for root, dirs, files in os.walk(os.path.join(path_game_root, 'LocalData')):
for file in files:
file_path = os.path.join(root, file)
try:
env = UnityPy.load(file_path)
for obj in env.objects:
if obj.type.name == "TextAsset":
data = obj.read()
name = data.name
if name in card_obj_name:
unity_asset_path = data.assets_file.container.keys()[0]
if 'zh-cn' not in unity_asset_path: # 不是中文的跳过
continue
if 'v140' in unity_asset_path: # 忽略旧版本文件
continue
log("FileName: {}, UnityPath: {}, AssetPath: {}".format(name, unity_asset_path, file_path))
if name not in card_obj_list:
card_obj_list[name] = file
except Exception as e:
log('Error: ' + str(e))
continue
if len(card_obj_list) >= len(card_obj_name):
break
if len(card_obj_list) >= len(card_obj_name):
break
log(json.dumps(card_obj_list))
return card_obj_list