forked from K0lb3/UnityPy
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathobject.py
More file actions
64 lines (52 loc) · 1.78 KB
/
Copy pathobject.py
File metadata and controls
64 lines (52 loc) · 1.78 KB
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
from ..enums import BuildTarget
from ..helpers import TypeTreeHelper
class Object:
type_tree: dict
def __init__(self, reader):
self.reader = reader
self.assets_file = reader.assets_file
self.type = reader.type
self.path_id = reader.path_id
self.version = reader.version
self.build_type = reader.build_type
self.platform = reader.platform
self.serialized_type = reader.serialized_type
self.byte_size = reader.byte_size
self.assets_manager = reader.assets_file.assets_manager
if self.platform == BuildTarget.NoTarget:
self._object_hide_flags = reader.read_u_int()
self.container = self.assets_file._container[
self.path_id] if self.path_id in self.assets_file._container else None
self.reader.reset()
if type(self) == Object:
self.__dict__.update(self.read_type_tree())
def has_struct_member(self, name: str) -> bool:
return self.serialized_type.m_Nodes and any([x.name == name for x in self.serialized_type.m_Nodes])
def dump(self) -> str:
self.reader.reset()
if getattr(self.serialized_type, 'nodes', None):
sb = []
TypeTreeHelper(self.reader).read_type_string(sb, self.serialized_type.nodes)
return ''.join(sb)
return ''
def read_type_tree(self) -> dict:
self.reader.reset()
if self.serialized_type.nodes:
self.type_tree = TypeTreeHelper(self.reader).read_value(self.serialized_type.nodes, 0)
else:
self.type_tree = {}
return self.type_tree
def get_raw_data(self) -> bytes:
self.reader.reset()
return self.reader.read_bytes(self.byte_size)
def __getattr__(self, item):
"""
If item not found in __dict__, read type_tree and check if it is in there.
"""
self.read_type_tree()
if item in self.type_tree:
return self.type_tree[item]
def __repr__(self):
return "<%s %s>" % (
self.__class__.__name__, self.name
)