@ -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 \n Verifique 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 \n Se ele não aparecer imediatamente no topo, reinicie o 3ds Max. " ,
" O menu do VR4Life foi instalado com sucesso! \n \n Se 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. \n Erro técnico: { str ( e ) } " ,
f " Falha ao instalar o menu. \n Erro 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 ( )