1. Ponto de partida
main.cpp
É a porta de entrada do programa. Pense nele como o vigia da portaria: quando você “liga” o servidor, é ele quem carrega as configurações iniciais, inicializa bancos de dados, redes e tudo mais, e só então passa o controle para o cérebro central do jogo.
2. Carregando configurações e banco de dados
ConfigManager
Responsável por ler o arquivo config.lua (e outros arquivos de configuração). É como o gerente que consulta a lista de “tudo o que precisa ser ajustado”: ip, portas, limites de jogadores, nomes de tabelas no banco etc.
Database / DatabaseMySql
Conecta, consulta e grava informações no banco de dados (usuários, personagens, histórico). Imagine um atendente de banco que recebe cheques (queries), busca seu dinheiro (dados) e devolve ao jogo.
3. Camada de rede
NetworkMessage, InputMessage, OutputMessage
Gerenciam o trânsito de bytes entre cliente e servidor. Pense neles como carteiros: empacotam (OutputMessage) as cartas (dados) para enviar, e desempacotam (InputMessage) as que chegam.
ProtocolLogin
Lida com a “porta de entrada” dos jogadores: autenticação de usuário/senha, versão do cliente. É como o recepcionista do clube que confere sua carteirinha antes de você entrar.
ProtocolGame
Depois de entrar, todo o bate‑papo em jogo, movimentos, ataques, pegas de item, tudo passa por aqui. É o maître que coordena cada ação do cliente para dentro do salão do jogo.
RSA / Cryptography
Responsável por criptografia dos pacotes sensíveis (senhas, chaves). Funciona como uma caixa‑forte que garante que só o servidor leia certos dados.
4. “Cérebro” do jogo
Game
Classe central que mantém o “loop” do servidor: dispara eventos periódicos, processa ações em fila, verifica timers. É o maestro de uma orquestra, garantindo que todo componente execute sua parte no tempo certo.
Scheduler
Agenda tarefas para acontecerem “amanhã” ou daqui a X segundos, como regenerar vida, status ou executar scripts em momentos específicos. Seria o calendário/agenda do servidor.
5. Mundo e posicionamento
Map
Armazena a planta baixa do mundo: quais tiles existem e quais itens e criaturas estão em cada um. É o “planta da cidade” na prancheta.
Tile
Representa um quadrado do mapa. Sabe o que está em cima (itens, chão) e quem está nele (criaturas). Imagine um quadrado de terreno que pode ter um carro, uma árvore e uma pessoa.
Position
Guarda as coordenadas (x, y, z). É como um endereço: rua (x), número (y) e andar (z).
6. Tudo que está no mapa
Thing (classe‐pai)
Abstração de “coisa” genérica no mundo: pode ser um Item, uma Creature, um Effect. Como dizer “objeto” antes de especificar se é uma mesa ou uma cadeira.
Item / ItemType
Tudo que você pega ou usa: espada, poção, livro. ItemType descreve as propriedades (peso, valor, se empilha).
StaticText / Text
Mensagens fixas no mapa (placas, diálogos automáticos).
7. Seres vivos
Creature (classe‐pai de tudo que anda)
Toda “criatura” (jogador, monstro, NPC) herda desta classe. Guarda vida, mana, condições (paralisado, envenenado).
Player
Extensão de Creature para quem controla o personagem: inventário, conta, skills, vocação. É você no jogo.
Monster
Extensão de Creature para inimigos automáticos. Tem IA simples, spawn configurado em mapas.
Npc
“Monstro” amigável que conversa. Pode executar scripts Lua quando você fala com ele, dando quests ou vendendo itens.
8. Combate e magia
Combat
Calcula danos de ataques físicos: verifica força, defesa, distância, elementos. Como um árbitro que aplica regras de pancadaria.
Spells / Magic
Trata de magias: fogo, cura, buffs. Cada feitiço é configurado e executado por aqui, descontando mana e aplicando efeitos.
9. Comunicação
Chat, ChatChannel, ChatManager
Gerenciam canais de conversa (“gíria”, “grupos”, “público”), quem ouve o quê. Funciona como um sistema de rádio onde cada canal é uma frequência.
10. Scripting e eventos
ScriptManager / LuaScriptInterface
Carregam e executam scripts Lua que definem comportamentos dinâmicos: quests, diálogos de NPC, triggers de mapa. É o “laboratório de cenários” do servidor, permitindo alterar lógica sem recompilar C++.
11. Tarefas agendadas
TaskSystem
Uma camada extra sobre o Scheduler para criar missões diárias, eventos de mundo (festas, invasões). Pensa nelas como lembretes automáticos que disparam rewards.
12. Gestão de casas e cidades
HouseManager / House
Controlam construção e propriedade de casas no jogo: quem pode entrar, mobília, taxas de aluguel.
Town / Towns
Guardam dados de vilas e cidades: posições de templo, preço de transporte, nomes.
13. Perfis e vocações
Vocation / VocationManager
Define “classes” de personagens (guerreiro, mago, paladino), habilidades iniciais, gains de skill. É como o RH que define cargos e benefícios de cada funcionário.
14. Spawn de monstros e itens
Spawns
Lê arquivos de configuração para gerar monstros e itens automaticamente em mapas, em intervalos definidos.
15. Registro de eventos
Log / Logger
Grava tudo que acontece (logins, erros, mensagens de debug) em arquivos de texto. É a “ata de reuniões” do servidor.
Como usar este guia
Comece pelo “Game”: entenda como o loop principal chama cada componente.
Veja o “Map” e “Tile”: visualize como o mundo é montado.
Estude “Creature” → “Player” e “Monster”: é aí que a maioria das regras de jogo acontece.
Explore “ProtocolGame”: descubra como as ações do jogador viram dados no servidor.
Abra os scripts Lua: aqui você verá como quests e diálogos são criados sem tocar em C++.
Cada classe tem centenas de linhas, mas todas se encaixam nesses blocos de função. Ao entender o papel de cada “setor” (rede, mundo, criaturas, combate, scripts), você ficará confortável para navegar na SOURCE do TFS 1.x e até modificar o que precisar. Bom estudo!
[Hidden Content]