|
1 | 1 | from pyffi.formats.nif import NifFormat |
2 | 2 | from os import path |
3 | | -from sys import exit, stdout |
| 3 | +from sys import argv, exit, stdout |
4 | 4 |
|
5 | | -UIX_PATH = "../../../Private/UIX/UIX FILES/Data Files/" |
| 5 | +# UIX_PATH = "../../../Private/UIX/UIX FILES/Data Files/" |
6 | 6 | # UIX_PATH = "../../../Private/UIX/UIX FILES/Data Files/Meshes/TOE/RedMoonGa01.NIF" |
7 | 7 |
|
8 | | -if not path.exists(UIX_PATH): |
9 | | - exit("Path `{0}` not found.".format(UIX_PATH)) |
10 | | - |
11 | 8 |
|
12 | 9 | def find_external_assets(data, assets): |
13 | 10 | """ recursively find any external assets linked into a nif""" |
@@ -50,20 +47,33 @@ def find_external_assets(data, assets): |
50 | 47 | find_external_assets(data.decal_3_texture.source, assets) |
51 | 48 |
|
52 | 49 |
|
53 | | -for stream, data in NifFormat.walkData(UIX_PATH): |
54 | | - try: |
55 | | - print(stream.name, sep='', end=', ', file=stdout, flush=True) |
56 | | - data.read(stream) |
57 | | - assets = [] |
58 | | - find_external_assets(data.roots, assets) |
59 | | - assets = set(assets) # remove duplicates |
60 | | - assets_string = "{0}".format(b', '.join(assets).decode(encoding="ISO-8859-1")) |
61 | | - print(assets_string, sep=', ', end='\n', file=stdout, flush=True) |
62 | | - # import pdb; pdb.set_trace() |
63 | | - except ValueError as ex: |
64 | | - print(" Error: {0}".format(str(ex.args)), sep='', end='\n', file=stdout, flush=True) |
65 | | - except Exception as ex: |
66 | | - print(ex) |
67 | | - raise |
| 50 | +def walk_nif(nif_path, use_stdout=True): |
| 51 | + if not path.exists(nif_path): |
| 52 | + exit("Path `{0}` not found.".format(nif_path)) |
| 53 | + |
| 54 | + all_assets = [] |
| 55 | + for stream, data in NifFormat.walkData(nif_path): |
| 56 | + try: |
| 57 | + if use_stdout: |
| 58 | + print(stream.name, sep='', end=', ', file=stdout, flush=True) |
| 59 | + data.read(stream) |
| 60 | + assets = [] |
| 61 | + find_external_assets(data.roots, assets) |
| 62 | + assets = set(assets) # remove duplicates |
| 63 | + assets_string = "{0}".format(b', '.join(assets).decode(encoding="ISO-8859-1")) |
| 64 | + all_assets.append(assets_string) |
| 65 | + if use_stdout: |
| 66 | + print(assets_string, sep=', ', end='\n', file=stdout, flush=True) |
| 67 | + except ValueError as ex: |
| 68 | + print(" Error with {0}: {1}".format(stream.name, str(ex.args)), sep='', end='\n', file=stdout, flush=True) |
| 69 | + except Exception as ex: |
| 70 | + print(ex) |
| 71 | + raise |
| 72 | + return all_assets |
68 | 73 |
|
69 | 74 |
|
| 75 | +if __name__ == "__main__": |
| 76 | + if len(argv) == 2: |
| 77 | + walk_nif(argv[1]) |
| 78 | + else: |
| 79 | + exit("No path given.") |
0 commit comments