def main(): arkman = ArkSteamManager() loader = arkman.getLoader() config = get_global_config() assetname = sys.argv[1] if len(sys.argv) > 1 else None if not assetname: print('Usage: python ueexport.py <assetname>') sys.exit(1) assetname = find_asset(assetname, loader) if not assetname: print("Not found") sys.exit(1) asset = loader[assetname] assert asset.default_export if not asset.default_export: print("Asset has no default export") sys.exit(2) export = asset.default_export data = sanitise_output(export.properties) pprint(data) save_as_json(data, f'output/{asset.name}.{export.name}.json', pretty=True)
def __init__(self, arkman: ArkSteamManager, git: GitManager, config=get_global_config()): self.config: ConfigFile = config self.arkman: ArkSteamManager = arkman self.loader: AssetLoader = arkman.getLoader() self.git = git self.roots: List[ExportRoot] = []
def __init__(self, arkman: ArkSteamManager, modids: Set[str], config: ConfigFile): self.config = config self.arkman = arkman self.modids = modids self.loader = arkman.getLoader() self.discoverer = ark.discovery.SpeciesDiscoverer(self.loader) self.game_version = self.arkman.getGameVersion()
def __init__(self, arkman: ArkSteamManager, modids: Set[str], config: ConfigFile): self.config = config self.arkman = arkman self.modids = modids self.loader = arkman.getLoader() self.game_version = self.arkman.getGameVersion() self.discoverer = Discoverer(self.loader, remove_assets_from_cache=True) self.discoverer.register_asset_tester(CompositionSublevelTester())
def _explore_path( path: str, is_mod: bool, arkman: ArkSteamManager, verbose: bool = False) -> Generator[Tuple[str, str], None, None]: n = 0 includes = set(arkman.config.optimisation.SearchInclude) mod_excludes = set(arkman.config.optimisation.SearchIgnore) core_excludes = set( ['/Game/Mods/.*', *arkman.config.optimisation.SearchIgnore]) excludes = mod_excludes if is_mod else core_excludes loader = arkman.getLoader() with ue_parsing_context(properties=False, bulk_data=False): asset_iterator = loader.find_assetnames( path, include=includes, exclude=excludes, extension=ue.hierarchy.asset_extensions, return_extension=True) for (assetname, ext) in asset_iterator: n += 1 if verbose and n % 200 == 0: logger.info(assetname) try: asset = loader.load_asset(assetname, quiet=not verbose) except AssetLoadException: logger.warning("Failed to load asset: %s", assetname) continue try: export: ExportTableItem for export in ue.hierarchy._find_exports_to_store(asset, ext): parent = ue.hierarchy._get_parent_cls(export) fullname = export.fullname if not parent: raise ValueError( f"Unexpected missing parent for export: {fullname}" ) if not fullname: raise ValueError( f"Unexpected empty export name: {export.asset.assetname}.{export.name}" ) yield (fullname, parent) except AssetLoadException: logger.warning("Failed to check parentage of %s", assetname) # Remove maps from the cache immediately as they are large and cannot be inherited from if ext == '.umap': loader.cache.remove(assetname)
def initialise_hierarchy(arkman: ArkSteamManager, config: ConfigFile = get_global_config()): version_key = _gather_version_data(arkman, config) loader = arkman.getLoader() gen_fn = lambda _: _generate_hierarchy(loader) output_path = f'{config.settings.DataDir}/asset_hierarchy' data = cache_data(version_key, output_path, gen_fn, force_regenerate=config.dev.ClearHierarchyCache) ue.hierarchy.tree = data
def collect_asset(assetname: str) -> UAsset: arkman = ArkSteamManager() loader = arkman.getLoader() # config = get_global_config() assetname = find_asset(args.assetname, loader) if not assetname: print("Asset not found") sys.exit(1) return loader[assetname]
def collect_asset(assetname: str) -> UAsset: config = get_global_config() config.settings.SkipInstall = True arkman = ArkSteamManager(config=config) if args.ovi: # Hierarchy is needed for proxies in the Oviraptor target. arkman.ensureSteamCmd() arkman.ensureGameUpdated() arkman.ensureModsUpdated(config.mods) initialise_hierarchy(arkman) loader = arkman.getLoader() # config = get_global_config() assetname = find_asset(args.assetname, loader) if not assetname: print("Asset not found") sys.exit(1) return loader[assetname]
from deepdiff import DeepDiff import ark.mod import ark.properties from ark.export_asb_values import values_for_species from automate.ark import ArkSteamManager, readModData from ue.asset import UAsset from ue.base import UEBase from ue.loader import AssetLoader from ue.properties import * from ue.stream import MemoryStream from ue.utils import * arkman = ArkSteamManager() loader = arkman.getLoader() version_string = None #%% Helpers replace_name = lambda match: f'{species_names[int(match.group(1))]}' # replace_stat = lambda match: f'stat.{stat_names[int(match.group(1))]}.{stat_fields[int(match.group(2))]}' SPECIES_REGEX = re.compile(r"root\['species'\]\[(\d+)\]") STAT_REGEX = re.compile(r"statsRaw\[(\d+)\]\[(\d+)\]") JOIN_LINES_REGEX = re.compile(r"(?:\n\t+)?(?<=\t)([\d.-]+,?)(?:\n\t+)?") def clean_diff_output(diff): diff = SPECIES_REGEX.sub(replace_name, diff) diff = re.sub(r"\['(.*?)'\]", r'.\1', diff)
def fixture_loader() -> AssetLoader: arkman = ArkSteamManager() loader = arkman.getLoader() return loader
def fixture_loader(arkman: ArkSteamManager) -> AssetLoader: loader = arkman.getLoader() return loader
def fixture_loader(config: ConfigFile) -> AssetLoader: arkman = ArkSteamManager(config=config) loader = arkman.getLoader() return loader