Integrate physical radio calls and finite vehicle maintenance
This commit is contained in:
+20
-1
@@ -99,6 +99,9 @@ def packed_directories(packed):
|
||||
|
||||
|
||||
def packed_request(a):
|
||||
if getattr(a, 'external_addons', None) is not None:
|
||||
from packed_external import request
|
||||
return request(a, ROOT)
|
||||
candidate, session = getattr(a, 'packed_core', None), getattr(a, 'packed_session', None)
|
||||
addons = getattr(a, 'packed_addons', None)
|
||||
if candidate is None and addons is None and session is None:
|
||||
@@ -126,6 +129,9 @@ def packed_request(a):
|
||||
|
||||
def prepare_packed(packed):
|
||||
"""Called only while holding the ordinary runner's existing prefix lock."""
|
||||
if packed.get('schema_version') == 3:
|
||||
from packed_external import prepare
|
||||
return prepare(packed)
|
||||
packed['session'].mkdir(exist_ok=False)
|
||||
target = packed['input']
|
||||
target.mkdir(parents=True, exist_ok=False)
|
||||
@@ -142,6 +148,9 @@ def prepare_packed(packed):
|
||||
|
||||
|
||||
def packed_snapshot(packed, command, profile):
|
||||
if packed.get('schema_version') == 3:
|
||||
from packed_external import snapshot
|
||||
return snapshot(packed, command, profile)
|
||||
project = packed.get('project', 'core')
|
||||
manifest = packed_payload_inventory(packed['input'], project)
|
||||
if manifest != packed['manifest'] or packed_payload_inventory(packed['candidate'], project) != manifest:
|
||||
@@ -160,6 +169,9 @@ def packed_snapshot(packed, command, profile):
|
||||
|
||||
def packed_seal(packed, raw, session):
|
||||
"""Fail closed on changed/deleted inputs, retaining a useful failure record."""
|
||||
if packed.get('schema_version') == 3:
|
||||
from packed_external import seal
|
||||
return seal(packed, raw, session)
|
||||
metadata = json.loads(raw)
|
||||
unchanged, error = False, None
|
||||
try:
|
||||
@@ -189,6 +201,9 @@ def native_path(value, game_root):
|
||||
|
||||
|
||||
def packed_evidence(content, packed, steam, profile):
|
||||
if packed.get('schema_version') == 3:
|
||||
from packed_external import evidence
|
||||
return evidence(content, packed, steam, profile, sys.modules[__name__])
|
||||
project = packed.get('project', 'core')
|
||||
report = game_evidence(content, project)
|
||||
directories = packed_directories(packed)
|
||||
@@ -1282,7 +1297,10 @@ def run_locked(a, steam, compat, profile, packed=None):
|
||||
link = addons/'ArmaReforger'
|
||||
if not link.exists() and not link.is_symlink():
|
||||
link.symlink_to(vanilla, target_is_directory=True)
|
||||
if link.resolve() != vanilla.resolve() or any(x.name not in {'ArmaReforger', 'saves'} for x in addons.iterdir()) or any((addons/'saves').rglob('*.gproj')):
|
||||
if packed and packed.get('schema_version') == 3:
|
||||
from packed_external import prepare_profile
|
||||
prepare_profile(packed, steam, profile)
|
||||
elif link.resolve() != vanilla.resolve() or any(x.name not in {'ArmaReforger', 'saves'} for x in addons.iterdir()) or any((addons/'saves').rglob('*.gproj')):
|
||||
refuse('Private profile addons must contain only the installed vanilla link')
|
||||
run_id = uuid.uuid4().hex
|
||||
observation_nonce = run_id if getattr(a, 'observe_player_input', False) else None
|
||||
@@ -1452,6 +1470,7 @@ def main():
|
||||
packed_options = parser.add_mutually_exclusive_group()
|
||||
packed_options.add_argument('--packed-core', type=Path, help='Unqualified Core candidate directory containing exactly addon.gproj, data.pak and resourceDatabase.rdb')
|
||||
packed_options.add_argument('--packed-addons', type=Path, help='Unqualified complete core/ai/intel/map/chat packed directories; requires --project chat')
|
||||
parser.add_argument('--external-addons', type=Path, help='Explicit DEVELOPMENT packed Chat v3 only: audited installed RHS/WCS/BMP root; six private links, no broad workshop mount')
|
||||
parser.add_argument('--packed-session', type=Path, help='New /tmp/erri-packed-core-<name> or erri-packed-chat-<name> session; owns a fresh input copy and profile')
|
||||
parser.add_argument('--inspect-processes', action='store_true', help='Read-only process preflight report; never launch, lock, write a profile or configure audio')
|
||||
parser.add_argument('--inspect-headless-display', action='store_true', help='Read-only ownership inspection within the hidden display; no input sent, loose Core/Chat only')
|
||||
|
||||
Reference in New Issue
Block a user