from pathlib import Path import sys,os,subprocess,json,fcntl,time sys.path.insert(0,'/home/jakub/devel/escapistsrereintroduced/tools') from headless_game import assert_no_game,assert_prefix_idle,cleanup_owned_run base=Path('/tmp/erri-ai-19'); target=sys.argv[1] if len(sys.argv)>1 else 'indexed'; compat=base/'compat'; steam=Path.home()/'.local/share/Steam'; proton=steam/'steamapps/common/Proton - Experimental/proton' lock=(compat/'.erri-workbench.lock').open('a');fcntl.flock(lock,fcntl.LOCK_EX|fcntl.LOCK_NB); assert_no_game(); assert_prefix_idle(compat) cmd=['gamescope','--backend','headless','-W','1280','-H','720','-w','1280','-h','720','-r','30','--',str(proton),'run',str(steam/'steamapps/common/Arma Reforger Tools/Workbench/ArmaReforgerWorkbenchSteamDiag.exe'),'-gproj','Z:'+str(base/target/'addon.gproj'),'-profile','Z:'+str(base/(target+'-profile')),'-logconsole','-noBackend','-noSound','-disableCrashReporter','-wbModule=ResourceManager','-exitAfterInit'] env=os.environ.copy();env.update(STEAM_COMPAT_DATA_PATH=str(compat),STEAM_COMPAT_CLIENT_INSTALL_PATH=str(steam),WINEPREFIX=str(compat/'pfx')) profile=base/(target+'-profile'); (profile/'addons').mkdir(parents=True,exist_ok=True) if not (profile/'addons/ArmaReforger').exists():(profile/'addons/ArmaReforger').symlink_to(steam/'steamapps/common/Arma Reforger/addons/data',target_is_directory=True) (base/(target+'-command.json')).write_text(json.dumps(cmd,indent=2)) with (base/(target+'-launch.log')).open('w') as log: started=time.time(); p=subprocess.Popen(cmd,stdout=log,stderr=subprocess.STDOUT,env=env,cwd=steam/'steamapps/common/Arma Reforger Tools/Workbench',start_new_session=True) try: deadline=time.monotonic()+90 while p.poll() is None and time.monotonic()= started) content=logs[-1].read_text(errors="replace") if logs else "" if "Cannot initialize game project settings" in content or "Can't compile" in content: break if (base/target/"resourceDatabase.rdb").is_file() and "Creating game instance(ArmaReforgerScripted)" in content: time.sleep(3); break time.sleep(1) except subprocess.TimeoutExpired:pass finally:(base/(target+'-cleanup.json')).write_text(json.dumps(cleanup_owned_run(p,proton,env,compat),indent=2)) print((base/(target+'-cleanup.json')).read_text());print('index exists:',(base/target/'resourceDatabase.rdb').is_file())