Como criar um servidor Tibia OTServ no Windows com TFS: guia técnico
Aprenda a criar um servidor Tibia OTServ no Windows com The Forgotten Server (TFS), MySQL e configuração de portas em uma VPS dedicada.
Rodar um OTServ próprio é um dos exercícios mais educativos para quem quer entender game servers — você lida com banco de dados, sockets TCP, scripting Lua e administração de sistema operacional ao mesmo tempo. The Forgotten Server (TFS) é o engine mais usado da cena de Open Tibia desde meados dos anos 2010, e a versão 1.x trouxe uma base de código C++ moderna que facilita muito a manutenção.
Este guia mostra o caminho completo para colocar um TFS 1.5 rodando no Windows Server 2022, com MySQL configurado, portas liberadas no firewall e o cliente conectando ao servidor. A persona aqui é o owner de OTServ iniciante ou intermediário que prefere ambiente Windows pela curva de aprendizado menor — mesmo que Linux ofereça vantagens de performance no longo prazo.
Tempo estimado de execução: 45 a 60 minutos, considerando download dos binários e download do mapa. A configuração reaproveita as builds pré-compiladas distribuídas pela comunidade, sem necessidade de compilar o TFS do zero.
Pré-requisitos
Antes de começar, confirme que você tem acesso administrativo a uma VPS Windows com IP público dedicado. OTServ não funciona em ambientes com CGNAT ou IP compartilhado porque precisa abrir portas de entrada para o cliente Tibia se conectar.
Windows Server 2022 (ou Windows 10/11 com acesso administrativo), no mínimo 4 GB de RAM e 2 vCPUs para sustentar 200-300 jogadores, 30 GB de disco livre, e acesso RDP (Remote Desktop) com usuário com permissão de administrador. A VPS precisa de IPv4 dedicado — sem CGNAT.
7171/TCP 7172/TCP 3306/TCP (local) 4 GB Preparando o ambiente Windows
Antes de baixar o TFS, instale as dependências de runtime que os binários pré-compilados esperam encontrar no sistema. Sem isso, o tfs.exe falha ao iniciar com mensagens crípticas sobre DLLs faltando.
Conecte na VPS via RDP usando o IP público, usuário Administrator e a senha fornecida no provisionamento. Use o cliente Remote Desktop padrão do Windows ou um cliente RDP de sua preferência.
Após o login, abra o PowerShell como administrador (botão direito no menu Iniciar, “Windows PowerShell (Admin)”). Todos os comandos a seguir rodam nesse contexto.
Instale o Visual C++ Redistributable 2015-2022 (x64), que é o runtime exigido pelas builds modernas do TFS:
Invoke-WebRequest -Uri "https://aka.ms/vs/17/release/vc_redist.x64.exe" -OutFile "$env:TEMP\vc_redist.x64.exe"
Start-Process -FilePath "$env:TEMP\vc_redist.x64.exe" -ArgumentList "/install","/quiet","/norestart" -WaitEsse pacote contém as bibliotecas C++ que o tfs.exe linka dinamicamente. Sem ele, o executável retorna erro “VCRUNTIME140.dll missing” ao tentar abrir.
Crie a estrutura de pastas onde o servidor vai rodar:
New-Item -ItemType Directory -Path "C:\otserv" -Force
New-Item -ItemType Directory -Path "C:\otserv\backup" -ForceManter o OTServ fora de C:\Program Files evita problemas de permissão de escrita do UAC quando o TFS tenta gerar logs ou atualizar arquivos de mundo.
Instalando MySQL para o banco de dados
O TFS usa MySQL (ou MariaDB) para armazenar contas, personagens, casas e estado persistente do mundo. Sem o banco rodando, o servidor não inicia.
Baixe o MySQL Community Server 8.0 (instalador MSI) em mysql.com/downloads. Durante a instalação, escolha “Developer Default” como tipo de setup — isso instala o MySQL Server, Workbench e os connectors.
Quando o assistente pedir para configurar uma senha de root, escolha uma senha forte e anote em um gerenciador de senhas. Você vai precisar dela em segundos.
Abra o MySQL Workbench e conecte na instância local. Execute o SQL abaixo para criar o banco de dados e o usuário dedicado do TFS:
CREATE DATABASE forgottenserver CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'otserv'@'localhost' IDENTIFIED BY 'TROQUE_ESSA_SENHA_FORTE';
GRANT ALL PRIVILEGES ON forgottenserver.* TO 'otserv'@'localhost';
FLUSH PRIVILEGES;Usar um usuário dedicado em vez de root reduz risco: se o TFS tiver bug de SQL injection (já aconteceu historicamente em scripts Lua), o estrago fica contido no banco do jogo.
Por padrão o MySQL escuta apenas em 127.0.0.1, o que é correto para esse cenário. NUNCA exponha a porta 3306 para a internet — sempre acesse o banco via SSH/RDP tunelado ou apenas localmente na VPS.
Baixando e configurando o TFS
Com runtime e banco prontos, baixe a build do TFS e importe o schema inicial.
Baixe a release mais recente do The Forgotten Server 1.5 em otland.net/forums (seção “Compiled Servers — Windows”). Procure por uma build “downgrade 8.60” se quiser o protocolo clássico mais popular, ou TFS 1.5 vanilla para protocolo 12.x moderno.
Extraia o ZIP em C:\otserv\. Você deve ter estrutura como:
C:\otserv\
tfs.exe
config.lua.dist
schema.sql
data\
notes\Importe o schema inicial no banco que você criou:
cd C:\otserv
mysql -u otserv -p forgottenserver < schema.sqlEsse comando cria todas as tabelas: accounts, players, houses, guilds, tile_store e outras. O TFS não roda sem essas tabelas presentes.
Copie config.lua.dist para config.lua e edite com os parâmetros do seu servidor:
ip = "SEU_IP_PUBLICO_AQUI"
loginProtocolPort = 7171
gameProtocolPort = 7172
statusProtocolPort = 7171
mysqlHost = "127.0.0.1"
mysqlUser = "otserv"
mysqlPass = "TROQUE_ESSA_SENHA_FORTE"
mysqlDatabase = "forgottenserver"
mysqlPort = 3306
serverName = "Meu OTServ"
ownerName = "Seu Nome"
worldType = "pvp"O campo ip é o erro mais comum: se ficar como 127.0.0.1 (default), o servidor responde apenas para conexões locais e jogadores externos veem “Cannot connect to login server”.
Liberando portas no firewall
O Windows Firewall bloqueia conexões de entrada por padrão. Você precisa criar regras explícitas para as portas do TFS.
Abra o PowerShell admin e crie as regras de entrada:
New-NetFirewallRule -DisplayName "OTServ Login" -Direction Inbound -Protocol TCP -LocalPort 7171 -Action Allow
New-NetFirewallRule -DisplayName "OTServ Game" -Direction Inbound -Protocol TCP -LocalPort 7172 -Action AllowConfirme que as regras foram criadas:
Get-NetFirewallRule -DisplayName "OTServ*" | Select-Object DisplayName, Enabled, DirectionVocê deve ver as duas regras com Enabled: True e Direction: Inbound.
Tentado por iniciantes para “resolver de uma vez”, desativar o Windows Firewall expõe RDP (porta 3389), MySQL (3306) e todos os serviços internos para a internet. Mantenha o firewall ativo e crie apenas as regras necessárias.
Iniciando o servidor e verificando
Com tudo configurado, é hora de subir o TFS e validar que tudo funciona.
Na pasta C:\otserv, dê duplo clique em tfs.exe (ou rode no PowerShell):
cd C:\otserv
.\tfs.exeVocê deve ver saída parecida com:
The Forgotten Server - Version 1.5
Loaded config.lua
Loaded items, monsters, NPCs, spells
Connected to MySQL
Loaded map
[OK] Server Online! - 127.0.0.1:7171Se aparecer erro de MySQL, revise mysqlPass em config.lua. Se aparecer erro de mapa, confirme que data/world/forgotten.otbm existe.
Verificação
Confirme que o servidor está aceitando conexões externas executando do seu computador local (não da VPS):
telnet SEU_IP_PUBLICO 7171
Se a tela ficar preta sem mensagem de erro, a porta está aberta e o TFS está respondendo. Pressione Ctrl+] e digite quit para sair.
Para testar com o cliente Tibia real, abra o OTClient ou cliente Tibia adaptado, vá em “Server” e configure: IP = seu IP público da VPS, porta = 7171. Crie uma conta via comando in-game ou direto via SQL e tente logar.
Resolução de problemas
”Cannot connect to login server” do lado do cliente
Causa mais comum: ip em config.lua está como 127.0.0.1 ou IP errado. Confirme com ipconfig o IP da interface de rede e ajuste. Em seguida verifique se a porta 7171 está realmente aberta usando um scanner externo como nmap a partir de outra máquina.
TFS fecha sozinho ao iniciar
Geralmente é Visual C++ Redistributable faltando ou versão errada. Confirme que instalou o pacote x64 2015-2022, não o x86. Outra causa comum: data/items/items.otb corrompido ou de versão diferente do protocolo configurado.
Lag/spike de latência com poucos jogadores
Quase sempre é script Lua mal otimizado. Use debug mode no config.lua (logFile = "logs/server.log") e revise scripts globais ou de eventos disparando queries SQL em loops. Em hardware adequado, TFS 1.5 sustenta tranquilamente algumas centenas de jogadores antes de saturar CPU.
Próximos passos
Com o OTServ rodando, considere os próximos pontos para evoluir o projeto:
- Configure backup automático do MySQL via Task Scheduler do Windows (export diário do dump SQL)
- Suba um site PHP com
login.phppara os clientes Tibia modernos buscarem informações do servidor (charlist API) - Adicione monitoramento de uptime externo para receber notificação se o
tfs.execair - Customize o mapa com Remere’s Map Editor ou crie quests Lua próprias
- Migre para protocolo moderno (12.x) se quiser features atuais do Tibia oficial
Se você está colocando o servidor em produção com base de jogadores real, uma VPS Hostini para jogos já vem com IPv4 dedicado, proteção DDoS especializada em portas de game (7171/7172) e baixa latência para o Brasil — o que importa muito quando seus jogadores são daqui.
Perguntas frequentes
Qual versão do TFS escolher para um OTServ novo em 2026?
TFS 1.5 (downgrade 8.60 ou 7.72) é a escolha mais comum para projetos novos por ter base de código moderna em C++17 e ampla disponibilidade de scripts. TFS 1.4 ainda é viável se você usa libs antigas. Evite TFS 0.4 a menos que tenha motivo nostálgico — manutenção e suporte da comunidade migraram para 1.x.
Por que meu cliente Tibia mostra 'Cannot connect to login server' mesmo com o OTServ rodando?
Quase sempre é uma das três causas: o IP em config.lua está como 127.0.0.1 em vez do IP público, a porta 7171 não está liberada no firewall do Windows, ou o login.php do site não aponta para o IP correto da VPS. Verifique os três antes de mexer no código.
Posso rodar OTServ no Windows ou Linux é obrigatório?
Windows roda OTServ sem problemas e é mais comum entre owners iniciantes pela familiaridade com a interface. Linux tende a oferecer melhor performance por core e custo menor de licenciamento, mas exige conforto com linha de comando. Para começar, Windows Server 2022 é uma escolha pragmática.
Quantos jogadores um OTServ aguenta em uma VPS de 4 GB de RAM?
Para TFS 1.5 com mapa custom moderado, 4 GB RAM e 2 vCPUs sustentam tranquilamente 200-300 jogadores online simultâneos. O gargalo geralmente aparece em scripts Lua mal otimizados (queries SQL em loops, eventos globais pesados) antes de saturar hardware.
Preciso de IP dedicado para rodar OTServ?
Sim, é praticamente obrigatório. Jogadores precisam de um IP estável para configurar no cliente Tibia ou no OTClient. IPs compartilhados (CGNAT) não permitem abrir as portas 7171 e 7172 para entrada. Toda VPS Hostini já vem com IPv4 dedicado por padrão.
Como proteger o OTServ contra ataques DDoS sem comprometer latência?
Use proteção em camada de rede que filtre tráfego malicioso antes de chegar ao servidor. O OTServ usa UDP/TCP em portas específicas (7171, 7172) — proteção genérica de HTTP não cobre. VPS com proteção DDoS dedicada para jogos filtra ataques volumétricos sem adicionar latência percebível.