示例#1
0
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)
示例#2
0
    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] = []
示例#3
0
 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()
示例#4
0
 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())
示例#5
0
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)
示例#6
0
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
示例#7
0
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]
示例#8
0
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]
示例#9
0
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)
示例#10
0
def fixture_loader() -> AssetLoader:
    arkman = ArkSteamManager()
    loader = arkman.getLoader()
    return loader
示例#11
0
def fixture_loader(arkman: ArkSteamManager) -> AssetLoader:
    loader = arkman.getLoader()
    return loader
示例#12
0
def fixture_loader(config: ConfigFile) -> AssetLoader:
    arkman = ArkSteamManager(config=config)
    loader = arkman.getLoader()
    return loader