From bc459830aefea2a7f641ddb194e83cc6d1ec2bf0 Mon Sep 17 00:00:00 2001 From: henrique Date: Mon, 23 Feb 2026 22:16:45 -0300 Subject: [PATCH] dwqdqw --- install_vr4life.py | 99 +++++++++++++++++++++------------------------- 1 file changed, 46 insertions(+), 53 deletions(-) diff --git a/install_vr4life.py b/install_vr4life.py index ab08b74..54539cb 100644 --- a/install_vr4life.py +++ b/install_vr4life.py @@ -1,75 +1,68 @@ import os from pymxs import runtime as rt -def install_vr4life_final(): +def install_vr4life_babylon_style(): try: # 1. PEGAR CAMINHOS plugin_dir = os.path.dirname(os.path.realpath(__file__)).replace("\\", "/") - run_script = f"{plugin_dir}/run_vr4life.py" - update_script = f"{plugin_dir}/vr4life_updater.py" - - # 2. REGISTRAR AS MACROS (Isso não depende da UI, então funciona direto) - # Usamos 647394 como ID fixo para bater com seu arquivo .mnx + startup_dir = rt.getDir(rt.name("userStartupScripts")) + loader_ms = os.path.join(startup_dir, "VR4Life_Menu_Loader.ms") + + # 2. CRIAR O SCRIPT DE INICIALIZAÇÃO (O "Segredo" do Babylon) + # Este arquivo ficará na pasta Startup e rodará sempre que o Max abrir + ms_code = f""" +( + fn setupVR4LifeMenu = ( + if menuMan != undefined and menuMan.getMainMenuBar() != undefined then ( + local mainBar = menuMan.getMainMenuBar() + local existing = menuMan.findMenu "VR4Life" + if existing != undefined do menuMan.unRegisterMenu existing + + local vMenu = menuMan.createMenu "VR4Life" + -- Usamos os IDs e Nomes que estao no seu arquivo .mnx + local item1 = menuMan.createActionItem "VR4Life_Launcher" "Immerse Games" + local item2 = menuMan.createActionItem "VR4Life_Update" "Immerse Games" + + vMenu.addItem item1 -1 + vMenu.addItem item2 -1 + + local subM = menuMan.createSubMenuItem "VR4Life" vMenu + mainBar.addItem subM (mainBar.numItems()) + menuMan.updateMenuBar() + return true + ) + return false + ) + -- Tenta executar agora e deixa um gatilho para o startup + setupVR4LifeMenu() + callbacks.addScript #systemStartup "setupVR4LifeMenu()" id:#VR4LifeMenu +) +""" + with open(loader_ms, "w", encoding="utf-8") as f: + f.write(ms_code) + + # 3. REGISTRAR AS MACROS (Para os botões funcionarem) macro_cmd = f""" macroScript VR4Life_Launcher category:"Immerse Games" internalId:647394 -tooltip:"Abrir VR4Life" ( - on execute do python.executeFile "{run_script}" + on execute do python.executeFile "{plugin_dir}/run_vr4life.py" ) macroScript VR4Life_Update category:"Immerse Games" internalId:647394 -tooltip:"Atualizar VR4Life" ( - on execute do python.executeFile "{update_script}" + on execute do python.executeFile "{plugin_dir}/vr4life_updater.py" ) """ rt.execute(macro_cmd) - - # 3. O "ESPERADOR" (TIMER) - Resolve o erro de 'undefined' - # Ele vai tentar 10 vezes, a cada 1 segundo, até o menuMan aparecer - setup_ui_ms = """ - ( - global _vr_timer = dotNetObject "System.Windows.Forms.Timer" - _vr_timer.interval = 1000 - global _vr_tries = 0 - - dotNet.addEventHandler _vr_timer "Tick" (fn onTick s e = ( - _vr_tries += 1 - if menuMan != undefined and menuMan.getMainMenuBar() != undefined then ( - -- Se o menuMan acordou, a gente mata o erro 'undefined' aqui - local mainBar = menuMan.getMainMenuBar() - local existing = menuMan.findMenu "VR4Life" - if existing != undefined do menuMan.unRegisterMenu existing - - local vMenu = menuMan.createMenu "VR4Life" - local item1 = menuMan.createActionItem "VR4Life_Launcher" "Immerse Games" - local item2 = menuMan.createActionItem "VR4Life_Update" "Immerse Games" - - vMenu.addItem item1 -1 - vMenu.addItem item2 -1 - - local subM = menuMan.createSubMenuItem "VR4Life" vMenu - mainBar.addItem subM (mainBar.numItems()) - menuMan.updateMenuBar() - - s.stop() - s.dispose() - format ">> VR4Life: Interface carregada com sucesso!\\n" - ) else if _vr_tries > 10 do ( - s.stop() - s.dispose() - format ">> VR4Life Erro: Timeout aguardando interface.\\n" - ) - )) - _vr_timer.start() - ) - """ - rt.execute(setup_ui_ms) - print(">> VR4Life: Scripts registrados. Aguardando interface aparecer...") + + # Executa o loader agora mesmo para tentar criar o menu sem reiniciar + rt.fileIn(loader_ms) + + print(f">> VR4Life: Loader criado em {loader_ms}. Verifique o menu no topo.") return True except Exception as e: @@ -77,4 +70,4 @@ tooltip:"Atualizar VR4Life" return False if __name__ == "__main__": - install_vr4life_final() \ No newline at end of file + install_vr4life_babylon_style() \ No newline at end of file