Roadmap del Core

Roadmap de desarrollo del core

Fuente única de verdad para todo el trabajo del core de firelands-next. Esta página fusiona los roadmaps anteriores (fases, matriz de paridad, pipeline VMap, StormLib, C++20, plan MapService, plan SpellManager) en un único tracker vivo.

Cliente objetivo: WoW Cataclysm 4.3.4 / build 15595.


Leyenda de estados

Usa estos símbolos en toda la página. Actualiza una fila cuando se cumpla el próximo criterio de esa fila.

SímboloEstadoSignificado
HechoEntregado, probado o validado manualmente, docs actualizadas
🔄En cursoImplementación parcial o rama activa
PendienteAcotado y priorizado; no iniciado
📋PlanificadoDirección acordada; menor prioridad o bloqueado por dependencia
BloqueadoEsperando otro hito

Convención de checkboxes: [x] = hecho · [~] = en curso · [ ] = pendiente


Objetivos principales

PrioridadObjetivoEstado
Obj 0Cliente estable: login → world → ≥ 5 min idle sin crashes
Obj 1Paridad incremental de subsistemas vs referencia (ver matriz)🔄
Obj 2Scripting de gameplay Lua-first (sin Smart Scripts SQL)🔄
Obj 3Datos de colisión idénticos a referencia (vmap/mmap) en runtime🔄

Panel de progreso

Snapshot 2026-05-24. Los conteos son manuales — actualizar al cerrar hitos.

TrackHechoEn cursoPendiente
Fases core (1–6)420
Subsistemas (matriz)3124
Pipeline extractores (Tools 1–4 + runtime)623
Arquitectura / ops224
Toolchain (C++20)1 fase1 fase

Foco actual (corto plazo): combate de criaturas + SMSG_UPDATE_OBJECT para unidades → aceptar/completar misión → auras/efectos → generador mmap → colisión en runtime.


Fases core (alto nivel)

Fase 1 — Fundamentos y Auth ✅

ÍtemEstado
Esqueleto del proyecto (CMake / C++20), logging, conectores DB
Auth SRP-6a + login exitoso

Fase 2 — Sistema de reinos ✅

ÍtemEstado
Tabla realmlist, CMD_REALM_LIST + SMSG_REALM_LIST

Fase 3 — Esqueleto servidor world ✅

ÍtemEstado
App worldserver + config YAML
CMSG_AUTH_SESSION + validación de sesión

Fase 4 — Gestión de personajes ✅

ÍtemEstado
Esquema DB de personajes
CMSG_CHAR_ENUM / create / delete
Player create info — spawn, hechizos, skills desde world DB

Fase 5 — Entrar al mundo 🔄

La mayoría de criterios de estabilidad cumplidos; quedan items de pulido.

  • CMSG_PLAYER_LOGIN, orden SMSG del login burst, spawn SMSG_UPDATE_OBJECT
  • Relay de movimiento + chat; fix crash #132 (talents/specs)
  • Probes post-login: ACKs mínimos (mail, calendar, zone, LFG, cemetery, …)
  • Dos clientes mismo mapa: cross CreateObject al login
  • Idle ≥ 5 min validado; Network.TimeSyncPeriodMs configurable
  • Spot-check orden de payload del login burst vs referencia
  • Chatter post-login: ignore seguro o handler completo (sin loops / asserts)

Fase 6 — Mecánicas de gameplay 🔄

  • Matriz de paridad (este documento)
  • Host Lua MVP + hooks WorldService
  • Hechizos — cast mínimo (GCD + SMSG_SPELL_START/GO + lista de fallos)
  • Menús gossip DB + npc_text + líneas de misiones en UI gossip
  • Faseo de zonaPhaseShift, gates área/misión, SMSG_PHASE_SHIFT_CHANGE
  • Escritorio tickets GM — persistencia, claim/reply/close, UI gossip
  • [~] Criaturas — pipeline spawn, SMSG_UPDATE_OBJECT unidad, hooks combate
  • [~] Flujo misiones — handlers gossip query; opcodes accept/complete + refresh fase en eventos quest
  • Loot — flujo básico take-item
  • Instancias + scripts de instancia (Lua)
  • Colisión real (vmap/mmap) — Pipeline VMap
  • Battlegrounds / arena (tras mundo abierto estable)

Matriz de paridad de subsistemas

Sección viva — actualizar Estado y Próximo criterio al cerrar hitos.

Subsistemafirelands-nextEstadoPróximo criterio
Auth / SRPAuthSession, SRPService
Realm listRealmListServiceSpot-check paridad campos paquete
Character DBMySqlCharacterRepositoryParidad esquema vs SQL ref
Player create infoPlayerCreateInfoService, migraciones 60–62Regenerar bundles tras editar datos
World socket / cryptoWorldSession, WorldCrypt🔄Casos límite header vs ref
Opcodes / packetsWorldOpcodes.h, shared/network/packets/🔄Matriz cobertura login + world
Secuencia login jugadorWorldSessionLoginFlow🔄Spot-check byte-a-byte SMSG críticos
MovimientoHandleMovement, Map🔄Filtro opcode + baseline anticheat
Map / gridMap, MapService, MapRegistry🔄IDs instancia multi-mapa
Visibilidad / broadcastBroadcastPacketToNearby🔄Rango visibilidad real
ChatHandleMessageChat🔄Paridad guild / party / whisper
ScriptingLuaGameScriptHost🔄Expandir superficie C++→Lua + sandbox
FaseoPhaseShift, WorldSessionPhasing🔄Accept/complete misión dispara refresh fase
Criaturas / GOsTipos domain + hooks spawn🔄Update fields unidad + engagement combate
Combate / hechizosSpellManager, WorldSessionCombat🔄Auras + costes desde DBC; primer efecto daño/cura
Misiones / gossipGossip + líneas + handlers parciales🔄Opcodes accept/complete + writes PlayerQuestProgressStore
LootFlujo básico take-item
Colisión / pathIMapCollisionQueries + stub🔄Cablear Collision.DataRoot a vmap/mmap real
InstanciasId instancia en Map + hooks reset
DBC storesSpellEntryDbcStore, catálogos parciales🔄Plantillas críticas unit/item
GM / staffCommandService, tickets, aparienciaExtender comandos según necesidad
Battlegrounds📋Tras mundo abierto estable
Anticheat📋Baseline validación movimiento

Orden de prioridad: criaturas/combate → misiones → auras/efectos → datos colisión → instancias.


Tracks detallados

Misiones y gossip

HitoEstadoNotas
SMSG_GOSSIP_MESSAGE / SMSG_GOSSIP_COMPLETE desde DBLua-first + fallback IGossipRepository
npc_text + CMSG_NPC_TEXT_QUERYSMSG_NPC_TEXT_UPDATEMigraciones 33–34 + import ref
Líneas de misiones en menú gossipMostradas en UI gossip
CMSG_QUESTGIVER_* hello / status / query🔄Handlers en WorldSessionGossip.cpp
Aceptar / completar / recompensa misiónCablear PlayerQuestProgressStore; llamar RefreshPlayerPhaseVisibilityFromQuestProgress
Datos plantilla misión + import SQLTras flujo opcodes

Ver Gossip y texto NPC y Sistema de fases.

Combate y hechizos (SpellManager)

Fusionado del plan de implementación SpellManager.

FaseAlcanceEstado
AEsqueleto SpellManager; delegación desde WorldSession; GCD + START/GO/FAILURE
BISpellDefinitionStore, SpellDefinition, merge DBC + spell_dbc al arranque🔄
CValidación mundo — rango (parcial), LoS cuando exista colisión🔄
DPrimer efecto jugable — daño o cura directa + update fields
ECooldowns, coste power, apply/remove aura
FPipeline efectos extensible; batching / tuning perf📋

Reglas de rendimiento (hot path): lookup O(1), sin MySQL por cast, sin mutex global en cast, checks baratos antes de LoS.

Criaturas y entidades mundo

HitoEstado
Tipos domain Creature / GameObject
Bootstrap spawn DB + faseo en spawn
SMSG_UPDATE_OBJECT para jugador (CreateObject)
Update fields unidad para criaturas (vida, flags, nivel)🔄
Engagement combate + baseline threat🔄
Opcodes interacción GO

MapService y operaciones world

Fusionado del plan de aislamiento MapService.

HitoEstadoUbicación
Value object MapSnapshotdomain/world/MapSnapshot.h
Timing de tick en MapMap::RecordTickTime, CreateSnapshot
Wrapper MapServiceapplication/services/MapService
MapRegistry reemplaza mapa raw en WorldServiceapplication/services/MapRegistry
Panel FTXUI Map StatusWorldFtxuiConsole
Shutdown graceful — drenaje sesionesAsyncNetworkServer::StopGraceful
Validación config fail-fast al arranqueTodas las claves YAML antes de bind
Estado mapa vía realm-link a auth📋Telemetría ops opcional

Refactor de red

HitoEstado
Split WorldSession en worldsession/*.cpp
Helpers tipados en shared/network/packets/🔄
Extraer read/write repetidos a tipos wire compartidos🔄

Extractores y pipeline de colisión

Plan maestro: Pipeline VMap. Hitos MPQ: Roadmap StormLib.

WoW 4.3.4 Data/  →  Tool 1 (.map)  →  Tool 2 (Buildings/)  →  Tool 3 (vmaps/)  →  Tool 4 (mmaps/)  →  runtime world
#ComponenteTarget CMakeEstadoSiguiente paso
Cadena patch MPQFirelandsExtractCommon
Extract DBC / DB2firelands-dbc-extractor
Mapas cliente rawfirelands-map-extractor
1.map servidor + tilelist + Camerasfirelands-map-extractor-vmapHardening paridad vs salida ref
2Extract VMap4firelands-vmap4-extractorSplit modular opcional
3Assemble VMap4firelands-vmap4-assemblerTests integración
4Generar MMAP (Recast/Detour)firelands-mmap-generatorPortar generador ref
TUI orquesta pipeline completofirelands-extractors🔄Tools 1–4 desde FTXUI
Runtime IMapCollisionQueriesworld🔄Reemplazar stub; cargar vmap + mmap

Criterio de cierre colisión: generar dataset con Tools 1–4 → cablear VMapManager2 + Detour en world → tests integración (LoS, altura, path spot-checks).


Toolchain — C++20

Detalle: Migración C++20.

HitoEstado
Fase 1 — CMAKE_CXX_STANDARD 20, docs, SPDLOG_USE_STD_FORMAT
std::span en ByteBuffer
Coroutines Boost.Asio C++20 en infrastructure/network/
Trial builds — matriz completa compiladores (Linux, Windows)
Fase 2 — designated initializers, using enum

Estabilidad del cliente

Definición de hecho (corto plazo)

  • Entrar al mundo sin crash
  • ≥ 5 min idle sin desconexión
  • SMSG_TIME_SYNC_REQ periódico (no encadenado en cada respuesta)
  • Spot-check orden payload login burst vs referencia
  • Manejo seguro de todos los opcodes probe post-login

Checklist ACK mínimos post-login ✅

Mail time, calendar pending, zone update, guild bank withdraw, LFG vacío, cemetery list — implementados. Battlefield status = no-op intencional sin cola.

Validación idle (manual)

  1. Entrar al mundo; permanecer idle ≥ 5 minutos (sin chat/comandos)
  2. Confirmar sin crash del cliente ni desconexión inesperada del servidor
  3. Opcional: Log.Level: trace; ajustar Network.TimeSyncPeriodMs en worldserver.yaml

Changelog de estabilidad

FechaNota
2026-04-29Fix crash #132; ACKs probe post-login
2026-04-30Cross CreateObject al login; cast hechizo mínimo
2026-05-03Network.TimeSyncPeriodMs; guía validación idle
2026-05-05Validación idle ≥ 5 min completa
2026-05-18Menús gossip entregados; npc_text landed
2026-05-23Faseo de zona, docs playercreateinfo, migraciones fase 53–59
2026-05-24Roadmap core unificado (esta página); MapService + panel Map Status

Cómo actualizar este roadmap

  1. Cerrar un hito en código → actualizar Estado de la fila y marcar el checkbox.
  2. Añadir línea al Changelog de estabilidad para mejoras visibles al usuario.
  3. Incrementar updatedDate en frontmatter.
  4. Los docs de detalle (phase-system, vmap-pipeline, etc.) guardan el detalle técnico; esta página es el índice y tracker.

En duda, usar ✅ solo tras tests o validación manual — no solo merge a main.


Documentación relacionada

TemaPágina
ArquitecturaArquitectura
Gossip y texto NPCGossip y texto NPC
Sistema de fasesSistema de fases
Player create infoPlayer create info
Tickets GMTickets GM
Scripting LuaScripting Lua
Pipeline VMap / mmapPipeline VMap
StormLib / MPQStormLib
Migración C++20Migración C++20
ContribuirContribuir

Copias legacy en el repo firelands-next (docs/EN/ROADMAP.md, docs/ES/ROADMAP.md, planes extractores) redirigen aquí — editar solo esta página wiki.