Como empacotar o cliente de MU Online para distribuição (instalador)
Aprenda a transformar a pasta do cliente de MU Online em um instalador profissional, com atalhos, registro de versão e verificação de integridade para distribuir aos jogadores.
Empacotar o cliente de MU Online é a etapa que separa um projeto amador de um servidor que passa credibilidade logo no primeiro contato. O jogador baixa um único arquivo, executa, escolhe a pasta, ganha um atalho na área de trabalho e abre o jogo. Nada de ZIP solto com dezenas de DLLs espalhadas, na
Empacotar o cliente de MU Online é a etapa que separa um projeto amador de um servidor que passa credibilidade logo no primeiro contato. O jogador baixa um único arquivo, executa, escolhe a pasta, ganha um atalho na área de trabalho e abre o jogo. Nada de ZIP solto com dezenas de DLLs espalhadas, nada de "extraia aqui e reze para funcionar". Um instalador bem feito reduz o suporte, diminui a taxa de desistência no download e ainda protege a integridade dos arquivos que você distribui.
Neste tutorial você vai montar, do zero, um instalador profissional para o cliente do seu servidor usando o Inno Setup (com menções ao NSIS como alternativa). Vamos cobrir a preparação da pasta base, o script de compilação, atalhos, ícone, verificação de versão, requisitos de sistema, assinatura digital e as armadilhas mais comuns que fazem o antivírus do jogador apagar seu cliente antes mesmo do primeiro login. Os valores citados (versões de DirectX, tamanho, nomes de pastas) são exemplos e variam por season/cliente.
Se você ainda não tem a base do servidor rodando, comece pelo guia como montar um servidor de MU Online e volte aqui quando o cliente já estiver conectando na sua Season.
Pré-requisitos
Antes de abrir qualquer ferramenta de empacotamento, tenha em mãos:
- Pasta do cliente já funcional e testada, conectando no IP/porta do seu servidor. Se o cliente não abre na sua máquina, ele não vai abrir empacotado.
- Main.exe editado (via editor de Main compatível com sua season) apontando para o IP público ou domínio, porta do Connect Server e serial correto.
- Arquivos de proteção (anti-cheat/packet, ex.: GameGuard, Themida wrap, ou o esquema que sua season usa) já integrados e testados.
- Inno Setup 6+ instalado (gratuito, em jrsoftware.org) ou NSIS 3+.
- Ícone .ico do servidor (256x256 recomendado) para o atalho e o executável do instalador.
- Espaço em disco equivalente a pelo menos 2x o tamanho do cliente, para gerar o setup sem apertos.
- Opcional, mas recomendado: certificado de assinatura de código (Code Signing) para reduzir alertas de antivírus.
Uma dica de ouro: crie uma pasta limpa chamada cliente_release e copie apenas os arquivos que o jogador precisa. Não inclua .pdb, logs, dumps, arquivos .bak, editores de Main ou ferramentas internas. Cada arquivo desnecessário aumenta o download e o risco de falso positivo.
Estrutura recomendada da pasta do cliente
Antes de empacotar, organize. Uma estrutura típica de cliente (varia por season/cliente) se parece com:
| Item | Função | Incluir no instalador? |
|---|---|---|
main.exe | Executável principal do jogo | Sim |
Data\ | Modelos, texturas, mapas (BMD/OZB/OZJ/OZT) | Sim |
Data\Local\ | Interface e textos localizados | Sim |
Music\ e Sound\ | Áudio | Sim (ou opcional) |
launcher.exe | Launcher/atualizador do servidor | Sim (recomendado) |
*.dll de proteção | Anti-cheat / DirectX wrappers | Sim |
readme.txt | Instruções e regras rápidas | Opcional |
*.pdb, *.log, dump\ | Depuração | Não |
Rode o cliente uma última vez a partir dessa pasta limpa. Se logar normalmente, ela está pronta para virar instalador.
Passo 1 — Escolhendo a ferramenta de empacotamento
Há três abordagens comuns:
- Inno Setup — o mais popular na cena de MU. Script legível (Pascal-like), documentação farta, suporte a compressão LZMA2 forte, páginas customizáveis e pós-instalação simples.
- NSIS — extremamente flexível e leve, gera instaladores menores, mas a linguagem de script é mais crua.
- Empacotadores comerciais (InstallShield, Advanced Installer) — bonitos, porém pagos e exagerados para o caso.
Para 90% dos servidores, Inno Setup é a escolha certa: gratuito, robusto e fácil de manter entre seasons. Seguiremos com ele.
Passo 2 — Criando o script do Inno Setup
Instale o Inno Setup e abra o Compiler. Você pode usar o assistente (Script Wizard), mas escrever o .iss manualmente dá muito mais controle. Crie um arquivo setup.iss ao lado da pasta cliente_release com o conteúdo abaixo (ajuste nomes, versões e caminhos ao seu projeto):
[Setup]
AppName=ViciadosMU Season X
AppVersion=1.0.0
AppPublisher=ViciadosMU
DefaultDirName={autopf}\ViciadosMU
DefaultGroupName=ViciadosMU
UninstallDisplayIcon={app}\main.exe
OutputBaseFilename=ViciadosMU_Setup_v1.0.0
Compression=lzma2/max
SolidCompression=yes
SetupIconFile=icone.ico
WizardStyle=modern
PrivilegesRequired=admin
ArchitecturesInstallIn64BitMode=x64
[Languages]
Name: "brazilian"; MessagesFile: "compiler:Languages\BrazilianPortuguese.isl"
[Files]
Source: "cliente_release\*"; DestDir: "{app}"; Flags: recursesubdirs createallsubdirs ignoreversion
[Icons]
Name: "{group}\ViciadosMU"; Filename: "{app}\main.exe"
Name: "{group}\Desinstalar ViciadosMU"; Filename: "{uninstallexe}"
Name: "{autodesktop}\ViciadosMU"; Filename: "{app}\main.exe"; Tasks: desktopicon
[Tasks]
Name: "desktopicon"; Description: "Criar atalho na Área de Trabalho"; GroupDescription: "Atalhos:"
[Run]
Filename: "{app}\main.exe"; Description: "Iniciar o jogo agora"; Flags: nowait postinstall skipifsilent
Cada seção tem um papel:
- [Setup] define nome, versão, pasta padrão (
{autopf}= Program Files), ícone e compressão.SolidCompression=yescomlzma2/maxcostuma render a melhor taxa para clientes de MU. - [Files] empacota tudo dentro de
cliente_release, recursivamente.ignoreversiongarante que os arquivos sejam sempre substituídos, evitando o clássico bug de DLL antiga não atualizada. - [Icons] cria os atalhos no menu Iniciar e, opcionalmente, na área de trabalho.
- [Tasks] transforma o atalho de desktop em uma opção marcável pelo jogador.
- [Run] oferece iniciar o jogo ao final da instalação.
Passo 3 — Compilando o instalador
No Inno Setup Compiler, abra o setup.iss e pressione F9 (ou Build > Compile). Ao final, o instalador aparecerá em Output\ViciadosMU_Setup_v1.0.0.exe. Teste-o em uma máquina limpa (ou máquina virtual) sem cliente instalado: essa é a única forma confiável de descobrir dependências faltando.
Durante o teste, confirme:
- A instalação escolhe pasta corretamente e cria atalhos.
- O jogo abre e conecta no servidor após instalar.
- A desinstalação remove os arquivos (guarde
Save/configs se necessário). - Nenhum arquivo essencial ficou de fora (teste em máquina que nunca teve MU).
Passo 4 — Requisitos de sistema e dependências
Clientes de MU costumam depender de DirectX 9.0c e, dependendo da season, de Visual C++ Redistributable e do .NET Framework (para launchers). Nunca assuma que a máquina do jogador tem tudo. Inclua os redistribuíveis e execute-os silenciosamente:
[Files]
Source: "redist\dxwebsetup.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
Source: "redist\vc_redist.x86.exe"; DestDir: "{tmp}"; Flags: deleteafterinstall
[Run]
Filename: "{tmp}\vc_redist.x86.exe"; Parameters: "/quiet /norestart"; StatusMsg: "Instalando componentes..."
Filename: "{tmp}\dxwebsetup.exe"; Parameters: "/Q"; StatusMsg: "Verificando DirectX..."
Isso elimina a esmagadora maioria dos erros de "o programa não pôde ser iniciado porque falta xxxx.dll". As versões exatas variam por season/cliente.
Passo 5 — Verificação de integridade e versão
Para evitar que o jogador rode um cliente corrompido pela metade (download interrompido), o instalador já garante a integridade dos arquivos internos via checksum do próprio .exe. Mas você deve também versionar o cliente para que o launcher saiba quando atualizar. Uma prática comum é gerar um arquivo version.txt na raiz com a versão e um hash da pasta:
version=1.0.0
build=20251026
data_hash=8f3c9e1a...
O launcher, ao abrir, lê esse arquivo, compara com o servidor de patch e baixa apenas o que mudou. Assim as próximas atualizações não exigem novo instalador completo.
Passo 6 — Assinatura digital (opcional, mas recomendada)
O maior inimigo da distribuição não é o jogador: é o antivírus. Instaladores empacotados, launchers e wrappers de proteção são frequentemente marcados como suspeitos. Assinar o .exe com um certificado de code signing reduz muito os falsos positivos e mostra o nome do seu projeto no aviso do Windows (em vez de "Editor desconhecido"). No Inno Setup, configure o assinante:
[Setup]
SignTool=meucert
E registre a ferramenta de assinatura (signtool.exe) nas preferências do Inno Setup. Sem certificado, ao menos submeta seu instalador aos formulários de "falso positivo" dos principais antivírus antes do lançamento.
Erros comuns e soluções
| Erro | Causa provável | Solução |
|---|---|---|
| Antivírus apaga o instalador | Falso positivo em wrapper/launcher | Assinar o .exe, submeter aos fornecedores, usar Themida com cautela |
| "Falta d3dx9_XX.dll" | DirectX ausente na máquina do jogador | Incluir e rodar dxwebsetup.exe /Q no [Run] |
| Cliente abre mas não conecta | Main.exe apontando para IP local/errado | Reeditar o Main com IP público e recompilar o setup |
| DLL antiga não atualiza | Falta a flag ignoreversion | Adicionar ignoreversion na seção [Files] |
| Instalador gigante | Incluiu Music/Sound sem compressão sólida | Ativar SolidCompression=yes e lzma2/max |
| Atalho não abre nada | Filename apontando para caminho errado | Usar {app}\main.exe, testar em máquina limpa |
| "Editor desconhecido" assusta jogadores | Executável não assinado | Obter certificado de code signing |
Boas práticas de distribuição
- Nunca distribua a pasta de desenvolvimento inteira. Sempre parta de uma
cliente_releaselimpa. - Hospede o instalador em pelo menos dois espelhos (ex.: um serviço de armazenamento e um mirror próprio), evitando ponto único de falha no dia do lançamento.
- Publique o hash MD5/SHA-256 do instalador no site para o jogador conferir integridade.
- Mantenha um changelog visível: jogadores confiam mais em projetos que documentam o que muda a cada versão.
- Teste em Windows 10 e 11 e, se possível, em máquina sem privilégios de administrador para ver o comportamento do UAC.
Checklist de lançamento
- Pasta
cliente_releaselimpa, sem arquivos de debug ou editores - Main.exe apontando para IP/porta/serial corretos e testado
- Arquivos de proteção integrados e validados
- Redistribuíveis (DirectX, VC++) incluídos e executando silenciosamente
- Script
.isscompilado sem avisos - Instalação testada em máquina/VM limpa (sem MU prévio)
- Atalhos de menu e desktop funcionando
- Jogo conecta ao servidor após instalar
- Desinstalação removendo arquivos corretamente
version.txtgerado para o launcher de patch- Instalador assinado (ou submetido a falso positivo nos antivírus)
- Hash SHA-256 publicado e dois espelhos de download ativos
Com o instalador pronto, testado em máquina limpa e assinado, seu servidor entrega uma primeira impressão de projeto sério. O próximo passo natural é reduzir o tamanho do download para que mais jogadores completem a instalação sem desistir no meio do caminho.
Perguntas frequentes
Preciso pagar por um instalador?
Não. Ferramentas como Inno Setup e NSIS são gratuitas e cobrem 99% das necessidades de um servidor de MU Online.
O antivírus acusa meu instalador como vírus, é normal?
Falsos positivos são comuns com launchers e instaladores empacotados. Assinar o executável com um certificado de código e submeter aos fornecedores de antivírus reduz drasticamente o problema.
Devo incluir o Main.exe já editado no instalador?
Sim, o cliente distribuído deve conter o Main já apontando para o IP/porta e serial do seu servidor, mais os arquivos de proteção configurados.
Qual a diferença entre instalador e arquivo compactado?
O compactado apenas descompacta arquivos; o instalador cria atalhos, registra a versão, valida requisitos e permite desinstalação limpa, passando mais confiança ao jogador.
Posso atualizar o cliente depois sem reinstalar?
Sim. O ideal é que o instalador coloque um launcher que faça patch incremental, evitando novos downloads completos a cada season.