henrique 2 months ago
parent fba61ac174
commit c81edc3a12

@ -1,77 +1,51 @@
import os import os
import sys import shutil
from pymxs import runtime as rt import pymxs
VERSION = "1.1.2" def instalar_menu_vr4life():
try:
def log(msg): # 1. Pega o nome exato do arquivo que você gerou no 3ds Max
print(f"[VR4Life Install Log] {msg}") # (Altere aqui se você salvou com outro nome)
nome_arquivo_mnx = "VR4Life.mnx"
def install_plugin():
rt.clearListener() # 2. Descobre a pasta atual onde este instalador Python está rodando
log(f"=== INSTALAÇÃO TOOLBAR v{VERSION} ===") diretorio_atual = os.path.dirname(os.path.realpath(__file__))
caminho_origem_mnx = os.path.join(diretorio_atual, nome_arquivo_mnx)
# 1. SETUP DE PASTAS
user_scripts_dir = rt.getDir(rt.name("userScripts")) # Trava de segurança: verifica se você não esqueceu de colocar o .mnx junto
plugin_dir = os.path.join(user_scripts_dir, "VR4Life_Plugin").replace("\\", "/") if not os.path.exists(caminho_origem_mnx):
pymxs.runtime.messageBox(
if plugin_dir not in sys.path: f"Erro na instalação: O arquivo '{nome_arquivo_mnx}' não foi encontrado na pasta.",
sys.path.insert(0, plugin_dir) title="VR4Life - Erro"
)
run_script = os.path.join(plugin_dir, "run_vr4life.py").replace("\\", "/") return False
update_script = os.path.join(plugin_dir, "vr4life_updater.py").replace("\\", "/")
# 3. Magia do pymxs: Pergunta ao 3ds Max onde fica a pasta UI daquele usuário
# 2. REGISTRO DE MACROS # Geralmente é C:\Users\[Nome]\AppData\Local\Autodesk\3dsMax\2026 - 64bit\ENU\en-US\UI\
log("Registrando Macros...") pasta_ui_usuario = pymxs.runtime.pathConfig.getDir(pymxs.runtime.name("userUI"))
mxs_macros = f''' caminho_destino_mnx = os.path.join(pasta_ui_usuario, nome_arquivo_mnx)
(
macroScript VR4Life_Open category:"VR4Life" buttonText:"Engine" tooltip:"Abrir VR4Life Engine" (on execute do python.ExecuteFile @"{run_script}") # 4. Copia o arquivo .mnx silenciosamente para a máquina do cliente
macroScript VR4Life_Update category:"VR4Life" buttonText:"Update" tooltip:"Atualizar Plugin" (on execute do python.ExecuteFile @"{update_script}") shutil.copy2(caminho_origem_mnx, caminho_destino_mnx)
)
''' # 5. Avisa no console interno do 3ds Max que deu certo (ótimo para debug)
rt.execute(mxs_macros) pymxs.runtime.print_(f"VR4Life: Arquivo de menu copiado com sucesso para {pasta_ui_usuario}\n")
# 3. CRIAÇÃO DA TOOLBAR (Barra de Ferramentas) # 6. Alerta final de sucesso na tela para a sua equipe
log("Criando Barra de Ferramentas...") pymxs.runtime.messageBox(
"O menu do VR4Life foi instalado com sucesso!\n\nSe ele não aparecer imediatamente no topo, reinicie o 3ds Max.",
toolbar_script = ''' title="VR4Life - Instalação Concluída"
(
local tbName = "VR4Life_Toolbar"
-- Se a barra existir, ela será atualizada
if (cui.getToolbarVisibility tbName) then (
cui.showToolbar tbName false
) )
return True
-- Cria a toolbar via CUI (Método compatível com 2026) except Exception as e:
try ( # Captura qualquer erro (falta de permissão no Windows, etc.)
cui.createToolbar tbName pymxs.runtime.messageBox(
cui.addMacroButton tbName "VR4Life" "VR4Life_Open" f"Falha ao instalar o menu.\nErro técnico: {str(e)}",
cui.addMacroButton tbName "VR4Life" "VR4Life_Update" title="VR4Life - Erro Fatal"
cui.showToolbar tbName true
"Toolbar Criada"
) catch (
"Erro ao criar Toolbar automaticamente"
) )
) return False
'''
tb_result = rt.execute(toolbar_script)
log(f"Resultado: {tb_result}")
# 4. EXECUÇÃO DA JANELA
if os.path.exists(run_script):
rt.python.ExecuteFile(run_script)
log(f"=== FINALIZADO v{VERSION} ===")
msg = f"VR4Life v{VERSION} Instalado!\n\n"
if tb_result == "Toolbar Criada":
msg += "Uma barra de ferramentas flutuante apareceu na tela.\nVocê pode acoplá-la onde preferir."
else:
msg += "Não foi possível criar a barra automaticamente.\nAdicione manualmente: Botão direito na barra de menus > VR4Life."
rt.messageBox(msg, title="VR4Life")
if __name__ == "__main__": # Dispara a função quando o script for rodado no 3ds Max
install_plugin() if __name__ == '__main__':
instalar_menu_vr4life()

@ -0,0 +1,10 @@
<?xml version="1.0" encoding="UTF-8"?>
<MaxMenuTransformations>
<CreateTopLevelMenu Id="167d260c-f391-4e63-b6a9-4798fbfcadc5" Title="Vr4Life"/>
<CreateMenuAction MenuId="167d260c-f391-4e63-b6a9-4798fbfcadc5" Id="a37d867e-3d05-4859-9a55-70cd394c8e72" ActionId="647394-VR4Life_Launcher`Immerse Games"/>
<CreateMenuAction MenuId="167d260c-f391-4e63-b6a9-4798fbfcadc5" Id="8df661bf-5425-4fbf-9ee3-ac14cd067b0c" ActionId="647394-VR4Life_Launcher`Immerse Games"/>
<DeleteItem Id="8df661bf-5425-4fbf-9ee3-ac14cd067b0c"/>
<DeleteItem Id="a37d867e-3d05-4859-9a55-70cd394c8e72"/>
<CreateMenuAction MenuId="167d260c-f391-4e63-b6a9-4798fbfcadc5" Id="d66e56ef-ecf4-4758-923e-b7ce929e440c" ActionId="647394-VR4Life_Launcher`Immerse Games"/>
<CreateMenuAction MenuId="167d260c-f391-4e63-b6a9-4798fbfcadc5" Id="071a64d3-3fe9-4674-b58a-b5e3047e3109" ActionId="647394-VR4Life_Update`Immerse Games"/>
</MaxMenuTransformations>
Loading…
Cancel
Save