Configuración de Desarrollador

Configuración de Desarrollador

Prerrequisitos

  • CMake 3.10+ (3.20+ recomendado)
  • Compilador C++20 (Clang 15+, GCC 12+, MSVC 2022 17.4+)
  • Sistema de build Ninja (obligatorio — no usar Make)
  • Python 3.8+ (scripts de fusión e importación SQL)
  • MySQL 8.0 / MariaDB (Docker recomendado)
  • Git
  • Opcional: ccache (auto-detectado), Docker para base de datos

Inicio Rápido

1. Clonar el Repositorio

git clone https://github.com/FirelandsProject/firelands-next
cd firelands-next

2. Configurar la Construcción

cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
  • Generador: DEBE usar Ninja
  • ccache: Auto-detectado si está instalado
  • Unity builds: Opcional con -DENABLE_UNITY_BUILD=ON
  • Las pruebas se construyen por defecto como FirelandsUnitTests

3. Construir

ninja -C build                         # Full build + tests
ninja -C build auth world              # Auth and world servers
ninja -C build FirelandsDevTools       # CLI account/realm tool

4. Iniciar Base de Datos

docker-compose up -d db

Credenciales (Docker):

AjusteValor
Imagenmysql:8.0
Puerto3306
Rootroot / root
Usuario appfirelands / firelands
Bases de datosfirelands_auth, firelands_characters, firelands_world

En el primer arranque se cargan automáticamente los SQL bundled de sql/bundled/.

5. Ejecutar Servidores

./build/bin/auth    # Auth server (config: authserver.yaml)
./build/bin/world   # World server (config: worldserver.yaml)

Sobrescribir configuración:

export FIRELANDS_AUTH_CONFIG=/path/to/authserver.yaml
export FIRELANDS_WORLD_CONFIG=/path/to/worldserver.yaml

Ambos servidores usan consola interactiva FTXUI con TTY. Logs por defecto en logs/firelands-auth.log y logs/firelands-world.log.

Archivos de Configuración

authserver.yaml

SecciónPropósito
Network.PortPuerto TCP auth (por defecto 3724)
Network.RestPortPuerto REST login (por defecto 8081)
RealmLink.*Listener realm-link opcional para métricas en vivo
Database.*URI JDBC de base auth
Log.*Rotación de archivos, nivel de log

worldserver.yaml

SecciónPropósito
Network.PortPuerto TCP world (por defecto 8085)
RealmLink.*Conexión saliente al realm-link de auth
Database.AuthUri / CharactersUri / WorldUriTres conexiones de BD
Scripting.ScriptsDirectoryRuta scripts Lua (por defecto scripts/lua)
Data.DbcPathDBC del cliente para hechizos/objetos
Rates.*Multiplicadores de XP, drop, etc.
Collision.DataRootRuta de datos vmap/colisiones
Console.*Ajustes de consola interactiva

Construir Pruebas

ninja -C build FirelandsUnitTests
ctest --test-dir build           # Run all tests
ctest --test-dir build -R <pattern>  # Run specific tests

Herramientas SQL

# Merge migrations into bundled schema
python3 tools/merge_migrations.py
# or
cmake --build build --target merge-migrations

# Importar datos world (gossip, npc_text, fases, …)
python3 tools/sql/import_ref_gossip.py
python3 tools/sql/import_ref_npc_text.py
python3 tools/sql/import_ref_quest_gossip.py

Dependencias (Obtenidas vía CMake)

LibreríaVersiónPropósito
OpenSSL(system/FetchContent)SRP-6a, cifrado
Boost.Thread(FetchContent)Red Asio (corrutinas C++20)
GoogleTest1.14.0Pruebas unitarias e integración
spdlog1.14.1Registro
MariaDB Connector/C3.3.8Cliente MySQL
MariaDB Connector/C++1.1.7MySQL C++
nlohmann/json3.11.2Análisis JSON
yaml-cpp0.8.0Configuración YAML
Lua5.4.7Scripting de juego
FTXUI5.0.0Interfaz de consola
StormLib9.26Archivos MPQ (extractores)

Multiplataforma

  • Windows: MSVC o MinGW
  • Linux: GCC o Clang
  • macOS: Apple Clang

Usar std::filesystem para rutas y std::thread para hilos. #ifdef de plataforma solo en adaptadores de infrastructure cuando sea inevitable.

Estructura del Proyecto

RutaContenido
src/Todo el código C++ (capas + ejecutables)
tests/Pruebas unitarias e integración (~90 archivos)
sql/init/Esquema base por base de datos
sql/migrations/Migraciones incrementales (~26 archivos)
sql/bundled/Bundles de despliegue fusionados
scripts/lua/Scripts Lua de gameplay
tools/extractors/Extractores de datos del cliente
tools/vmap/Pipeline VMap (map_extractor, vmap4_*)
data/Referencia de ruta DBC del cliente
docker/Grants de init MySQL

Prerrequisitos por plataforma

macOS

brew install cmake ninja python3 git mariadb
brew install ccache   # opcional
docker-compose up -d db

Linux (Ubuntu/Debian)

sudo apt update
sudo apt install -y cmake ninja-build python3 git mariadb-server libmariadb-dev zlib1g-dev libbz2-dev liblua5.4-dev

Windows

Visual Studio 2022+, CMake, Ninja, Docker Desktop.

Integración con IDE

  • VSCode: extensión C/C++ + .clangd; compile_commands.json generado por CMake
  • CLion: abrir CMakeLists.txt como modelo de proyecto

Tareas comunes

Ver Contribuir para migraciones, comandos GM y flujo TDD.

./build/bin/FirelandsDevTools account admin password admin@example.com 3
./build/bin/FirelandsDevTools realm 1 "Firelands Test" 127.0.0.1 8085

Solución de problemas

ProblemaSolución
Errores de build / PCHrm -rf build && cmake -B build -G Ninja -DCMAKE_BUILD_TYPE=Debug
Conexión BDdocker-compose ps; credenciales en YAML
Cliente no conectaCliente 4.3.4 build 15595; puertos 3724 y 8085

Siguientes pasos