henrique 2 months ago
parent c81edc3a12
commit 9c88be9560

@ -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>

@ -4,48 +4,50 @@ import pymxs
def instalar_menu_vr4life(): def instalar_menu_vr4life():
try: try:
# 1. Pega o nome exato do arquivo que você gerou no 3ds Max nome_arquivo_mnx = "vr4life.mnx"
# (Altere aqui se você salvou com outro nome)
nome_arquivo_mnx = "VR4Life.mnx"
# 2. Descobre a pasta atual onde este instalador Python está rodando # A GRANDE MUDANÇA: Em vez de __file__, vamos direto na pasta
diretorio_atual = os.path.dirname(os.path.realpath(__file__)) # temporária onde o mzp.run extraiu os arquivos!
caminho_origem_mnx = os.path.join(diretorio_atual, nome_arquivo_mnx) pasta_temp_windows = os.environ.get('TEMP')
pasta_extracao_mzp = os.path.join(pasta_temp_windows, "VR4Life_Install")
caminho_origem_mnx = os.path.join(pasta_extracao_mzp, nome_arquivo_mnx)
# Trava de segurança: verifica se você não esqueceu de colocar o .mnx junto # Verifica se achou no temp
if not os.path.exists(caminho_origem_mnx): if not os.path.exists(caminho_origem_mnx):
pymxs.runtime.messageBox( pymxs.runtime.messageBox(
f"Erro na instalação: O arquivo '{nome_arquivo_mnx}' não foi encontrado na pasta.", f"Erro: O arquivo '{nome_arquivo_mnx}' não foi encontrado na pasta de extração:\n{caminho_origem_mnx}\n\nVerifique se o arquivo está dentro do .mzp com o nome exato (em minúsculo).",
title="VR4Life - Erro" title="VR4Life - Erro"
) )
return False return False
# 3. Magia do pymxs: Pergunta ao 3ds Max onde fica a pasta UI daquele usuário # Acha a pasta de interface do usuário do 3ds Max
# Geralmente é C:\Users\[Nome]\AppData\Local\Autodesk\3dsMax\2026 - 64bit\ENU\en-US\UI\ pasta_macros = pymxs.runtime.pathConfig.getDir(pymxs.runtime.name("userMacros"))
pasta_ui_usuario = pymxs.runtime.pathConfig.getDir(pymxs.runtime.name("userUI")) pasta_enu = os.path.dirname(pasta_macros)
pasta_ui_usuario = os.path.join(pasta_enu, "en-US", "UI")
if not os.path.exists(pasta_ui_usuario):
os.makedirs(pasta_ui_usuario)
caminho_destino_mnx = os.path.join(pasta_ui_usuario, nome_arquivo_mnx) caminho_destino_mnx = os.path.join(pasta_ui_usuario, nome_arquivo_mnx)
# 4. Copia o arquivo .mnx silenciosamente para a máquina do cliente # Faz a cópia
shutil.copy2(caminho_origem_mnx, caminho_destino_mnx) shutil.copy2(caminho_origem_mnx, caminho_destino_mnx)
# 5. Avisa no console interno do 3ds Max que deu certo (ótimo para debug) pymxs.runtime.print_(f"VR4Life: Menu copiado com sucesso para {pasta_ui_usuario}\n")
pymxs.runtime.print_(f"VR4Life: Arquivo de menu copiado com sucesso para {pasta_ui_usuario}\n")
# 6. Alerta final de sucesso na tela para a sua equipe
pymxs.runtime.messageBox( pymxs.runtime.messageBox(
"O menu do VR4Life foi instalado com sucesso!\n\nSe ele não aparecer imediatamente no topo, reinicie o 3ds Max.", "O menu do VR4Life foi instalado com sucesso!\n\nSe ele não aparecer imediatamente no topo, reinicie o 3ds Max.",
title="VR4Life - Instalação Concluída" title="VR4Life - Sucesso!"
) )
return True return True
except Exception as e: except Exception as e:
# Captura qualquer erro (falta de permissão no Windows, etc.)
pymxs.runtime.messageBox( pymxs.runtime.messageBox(
f"Falha ao instalar o menu.\nErro técnico: {str(e)}", f"Falha ao instalar o menu.\nErro técnico: {str(e)}",
title="VR4Life - Erro Fatal" title="VR4Life - Erro Fatal"
) )
return False return False
# Dispara a função quando o script for rodado no 3ds Max
if __name__ == '__main__': if __name__ == '__main__':
instalar_menu_vr4life() instalar_menu_vr4life()
Loading…
Cancel
Save