diff --git a/install_vr4life.py b/install_vr4life.py index 82540f1..ab08b74 100644 --- a/install_vr4life.py +++ b/install_vr4life.py @@ -1,59 +1,75 @@ import os from pymxs import runtime as rt -def install_vr4life_clean(): +def install_vr4life_final(): 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 COM AS CATEGORIAS VISTAS NO SEU PRINT - # Usamos "Immerse Games" para bater com o que já existe no seu Menu Editor + # 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 macro_cmd = f""" macroScript VR4Life_Launcher category:"Immerse Games" +internalId:647394 tooltip:"Abrir VR4Life" ( - on execute do python.executeFile "{plugin_dir}/run_vr4life.py" + on execute do python.executeFile "{run_script}" ) macroScript VR4Life_Update category:"Immerse Games" +internalId:647394 tooltip:"Atualizar VR4Life" ( - on execute do python.executeFile "{plugin_dir}/vr4life_updater.py" + on execute do python.executeFile "{update_script}" ) """ rt.execute(macro_cmd) - # 3. CONSTRUÇÃO DO MENU (Lógica Babylon/Direct UI) - setup_script = """ + # 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 = """ ( - local menuMgr = menuMan - local mainMenuBar = menuMgr.getMainMenuBar() + global _vr_timer = dotNetObject "System.Windows.Forms.Timer" + _vr_timer.interval = 1000 + global _vr_tries = 0 - -- Limpar se já existir para não duplicar - local existingMenu = menuMgr.findMenu "VR4Life" - if existingMenu != undefined do menuMgr.unRegisterMenu existingMenu - - -- Criar o novo menu "VR4Life" - local newMenu = menuMgr.createMenu "VR4Life" - - -- Adicionar os itens usando o nome da macro e a categoria exata - local itemLauncher = menuMgr.createActionItem "VR4Life_Launcher" "Immerse Games" - local itemUpdate = menuMgr.createActionItem "VR4Life_Update" "Immerse Games" - - newMenu.addItem itemLauncher -1 - newMenu.addItem itemUpdate -1 - - -- Injetar na barra principal antes do Help - local subMenuItem = menuMgr.createSubMenuItem "VR4Life" newMenu - mainMenuBar.addItem subMenuItem (mainMenuBar.numItems()) - - menuMgr.updateMenuBar() + 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_script) - print(">> VR4Life: Menu instalado com sucesso via Script Direto.") + rt.execute(setup_ui_ms) + print(">> VR4Life: Scripts registrados. Aguardando interface aparecer...") return True except Exception as e: @@ -61,4 +77,4 @@ tooltip:"Atualizar VR4Life" return False if __name__ == "__main__": - install_vr4life_clean() \ No newline at end of file + install_vr4life_final() \ No newline at end of file