OlympusCore (Cataclysm 4.3.4) - Wiki Educativa
Esta wiki documenta OlympusCore, un emulador de World of Warcraft: Cataclysm (4.3.4), con fines estrictamente educativos y de aprendizaje técnico. Su contenido refleja un análisis exhaustivo de la arquitectura del núcleo, el sistema de scripts, la inteligencia artificial de NPCs, encuentros de raid, mecánicas de instancias y la integración de características personalizadas.
La información incluida se obtuvo a través de estudio, pruebas prácticas, depuración de scripts, experimentación con instancias y análisis de la interacción entre sistemas, con el objetivo de comprender cómo se implementan y coordinan las distintas funcionalidades dentro del emulador.
Este material no incluye la distribución del emulador y se comparte únicamente como recurso pedagógico (repack). La guía sirve como referencia técnica, didáctica y de desarrollo, orientada a estudiantes, desarrolladores y entusiastas que buscan profundizar en la ingeniería y personalización de servidores privados de WoW.
Cada sección detalla conceptos clave, patrones de scripting, arquitectura de IA, eventos, habilidades y coordinación de encuentros, permitiendo al lector entender tanto la lógica subyacente como las mejores prácticas de desarrollo en un entorno de emulación.
La wiki fomenta un aprendizaje responsable y ético, respetando los derechos de propiedad intelectual de Blizzard Entertainment y limitando su alcance a fines educativos y de investigación técnica.
Documentación realizada por Jorge Luis Ramirez Lorenzo. Última actualización: 29 de septiembre de 2025.
Resumen de la Wiki
- Scripting Framework: Arquitectura base de scripts, registro y carga de módulos.
- Boss Encounters: IA, fases, habilidades y coordinación de jefes de raid.
- World NPCs: Comportamientos especiales, seguridad, eventos y servicios para jugadores.
- Custom Features: Scripts personalizados, extensiones de servidor y mejoras educativas.
- Instancias y Mecánicas: Estado de encuentros, mobs, trash y gestión de instancias.
Notas Educativas
Esta wiki es un recurso para aprender sobre la implementación de servidores privados de WoW, prácticas de scripting, IA de NPCs y diseño de encuentros.
Se recomienda revisar cada sección de la wiki de manera secuencial para comprender la integración entre scripts, eventos, habilidades y la arquitectura del núcleo OlympusCore.
Todos los contenidos reflejan un estudio práctico y educativo; no se promueve la distribución de software con copyright.
Descripción general
OlympusCore es un emulador de servidor de World of Warcraft diseñado para la expansión Cataclysm (parche 4.3.4). Basado en TrinityCore, ofrece una plataforma completa de servidor de juego capaz de albergar partidas multijugador con mejoras y modificaciones personalizadas.
El servidor gestiona las conexiones de los clientes, mantiene el estado del mundo, procesa las acciones de los jugadores y guarda datos persistentes de los personajes usando múltiples bases de datos. OlympusCore soporta las mecánicas completas del juego: progresión de personajes, sistema de hechizos, combate, gremios e instancias.
Descripción general de la arquitectura del sistema
OlympusCore sigue una arquitectura en capas, con separación clara entre:
- Configuration & Scripts — administración de configuración y sistema de scripts.
- Persistence Layer — pools de bases de datos y persistencia.
- Core Game Systems — lógica del juego (mundo, sesiones, objetos, hechizos).
- Application Layer — punto de entrada, orquestación y servicios.
Elementos principales:
Application Layer ├─ main() Entry Point ├─ Command Line Processing ├─ Master Class └─ Service Orchestration Core Game Systems ├─ World Singleton (Game State Management) ├─ WorldSession (Client Connection Handler) ├─ ObjectMgr (Game Entity Management) └─ SpellMgr (Magic System Management) Persistence Layer ├─ WorldDatabaseWorkerPool (Static Game Content) ├─ CharacterDatabaseWorkerPool (Player Data) ├─ LoginDatabaseWorkerPool (Authentication) └─ BlizzDatabaseWorkerPool (CMS Integration)
Arquitectura de la Base de Datos
El servidor utiliza una arquitectura multi-base de datos para segmentar tipos de datos y responsabilidades.
Static Content Management] CPool[CharacterDatabaseWorkerPool
Player Persistence] LPool[LoginDatabaseWorkerPool
Account Authentication] BPool[BlizzDatabaseWorkerPool
Vote/Donation Points] end subgraph DBs [Databases] WDB[World Database
Creatures, Quests, Spells, Items, Loot Tables] CDB[Character Database
Player Characters, Inventory, Progress] LDB[Login Database
Accounts, Realms, Access Control] BDB[BlizzCMS Database
VP/DP Currency, Web Integration] end DBPools --> WPool DBPools --> CPool DBPools --> LPool DBPools --> BPool WPool --> WDB CPool --> CDB LPool --> LDB BPool --> BDB
Database Connections └─ Database Worker Pools ├─ WorldDatabaseWorkerPool (Static Content Management) ├─ CharacterDatabaseWorkerPool (Player Persistence) ├─ LoginDatabaseWorkerPool (Account Authentication) └─ BlizzDatabaseWorkerPool (Vote/Donation Points) Databases ├─ World Database │ ├─ Creatures, Quests, Spells │ └─ Items, Loot Tables ├─ Character Database │ ├─ Player Characters │ └─ Inventory, Progress ├─ Login Database │ ├─ Accounts, Realms │ └─ Access Control └─ BlizzCMS Database ├─ VP/DP Currency └─ Web Integration
Componentes clave
Lista de los componentes más importantes del sistema, con su propósito y clases/clasificaciones principales.
Componente | Propósito | Clases / Referencias |
---|---|---|
Application Entry | Inicio del servidor y ciclo de vida. | main() , Master |
World Management | Coordinación del estado global y sesiones. | World , WorldSession |
Database Layer | Persistencia multi-base de datos y pooling. | *DatabaseWorkerPool , *DatabaseConnection |
Configuration | Gestión de parámetros y configuración. | sConfigMgr , worldserver.conf |
Scripting | Contenido personalizado y mejoras a través de scripts. | ScriptMgr , AddSC_* |
Características del servidor
OlympusCore extiende TrinityCore con varias mejoras propias que uso en mi servidor:
- Sistema de XP dinámico: multiplicadores de experiencia por horarios (CONFIG_XP_BOOST_DAYMASK).
- Progresión de títulos PvP: recompensas automáticas por kills honorables.
- Reset de duelos: restauración de cooldowns y recursos tras duelos.
- Integración con BlizzCMS: gestión de votos (VP) y puntos de donación (DP) mediante base de datos dedicada.
- Configuración avanzada: múltiples opciones y ajustes en
worldserver.conf
.
Ejemplos de scripts relacionados:
src/server/scripts/World/boosted_xp.cpp
(sistema XP dinámico)src/server/scripts/World/system_pvptitles.cpp
(títulos PvP)src/server/scripts/World/duel_reset.cpp
(reset de duelos)
Sistema de construcción y dependencias
OlympusCore utiliza CMake para compilación multiplataforma con dependencias en:
- Bibliotecas Boost: Versión 1.67+ (Linux) o 1.78+ (Windows) para utilidades del sistema
- OpenSSL: Funciones criptográficas y comunicaciones seguras
- MySQL: Conectividad de base de datos y funcionalidad ORM
- ACE Framework: Programación de red y primitivas de multihilo
La integración de Boost está configurada en
dep/boost/CMakeLists.txt:12-61
con definiciones de compilación específicas para un rendimiento óptimo.
Entorno de desarrollo
Entorno Windows
- Windows 10/11
- Visual Studio 2017 o superior
- OpenSSL 1.1.1 / 3.x
- MySQL 5.7 / 8.x
- CMake 3.8+
- Boost 1.78
Entorno Linux (Debian 10/11)
- GCC 7.4.0 / 10.2.1 o Clang 6.0.0 / 11.0.1
- OpenSSL 1.1.1 / 3.x
- MySQL 5.7 / 8.x
- CMake 3.8+
- Boost 1.67 / 1.74
Requisitos de datos del juego
El servidor requiere datos extraídos del cliente del juego:
- MMAPS: Datos de mallas de navegación para el pathfinding
- DBC: Archivos de cliente que contienen reglas y constantes del juego
- VMAPS: Mapas de visibilidad para cálculos de línea de visión
- MAPS: Mapas de terreno y alturas para validación de movimiento
Fuentes
Fragmentos y referencias extraídas de mi árbol de código y archivos de configuración:
src/server/worldserver/Main.cpp
(líneas: 74–158)src/server/worldserver/Master.cpp
(líneas: 114–364, 367–488)src/server/game/World/World.h
(líneas: 103–433, 649–715)src/server/shared/Database/Implementation/BlizzDatabase.h
(líneas: 17–37)src/server/shared/Database/DatabaseEnv.h
(líneas: 42–46)src/server/scripts/World/boosted_xp.cpp
,system_pvptitles.cpp
,duel_reset.cpp
CMakeLists.txt
,README
Arquitectura del servidor
OlympusCore implementa una arquitectura distribuida de servidor privado de World of Warcraft
compuesta por dos aplicaciones principales: worldserver
y authserver
.
Este documento ofrece una visión general de la infraestructura del servidor, las relaciones entre componentes y la organización del sistema.
La arquitectura sigue el principio de separación de responsabilidades:
authserver
maneja la autenticación y la gestión de reinos, mientras que
worldserver
administra el mundo del juego, las sesiones de jugadores y las mecánicas de jugabilidad.
Ambas aplicaciones comparten infraestructura común para la conectividad de base de datos, la gestión de configuración y el manejo de hilos.
Arquitectura general del sistema
OlympusCore implementa una arquitectura de doble servidor donde authserver
y
worldserver
operan como procesos separados con responsabilidades distintas.
El sistema utiliza bases de datos MySQL para la persistencia y soporta operación multi-hilo para escalabilidad.
Resumen de arquitectura de doble servidor
- Configuración:
authserver.conf
,worldserver.conf
- Capa de base de datos:
LoginDatabase
,WorldDatabase
,CharacterDatabase
,BlizzDatabase
- World Server:
main()
,Master
,WorldServerSignalHandler
,sWorld
,sWorldSocketMgr
- Auth Server:
main()
,AuthServerSignalHandler
,RealmAcceptor
,sRealmList
- Cliente WoW: Conexiones de login/autenticación y tráfico de juego
Puntos de entrada de la aplicación
Aplicación | Punto de entrada | Configuración | Clase principal |
---|---|---|---|
authserver | main() |
authserver.conf |
RealmAcceptor |
worldserver | main() |
worldserver.conf |
Master |
Componentes de infraestructura clave
- Gestión de configuración:
sConfigMgr
,authserver.conf
,worldserver.conf
- Gestión de red:
sWorldSocketMgr
,WorldSocket
,RealmAcceptor
- Núcleo del juego:
Master
,sWorld
- Autenticación:
sRealmList
- Bases de datos: Worker Pools para World, Characters, Login y BlizzCMS
Responsabilidades de los componentes
Componente | Tipo | Responsabilidad |
---|---|---|
Master | Aplicación | Gestión del ciclo de vida, orquestación de hilos |
sWorld | Núcleo del juego | Estado del juego, gestión de sesiones, bucle de actualización |
sConfigMgr | Infraestructura | Carga y acceso a configuración |
sWorldSocketMgr | Red | Gestión de conexiones de clientes |
sRealmList | Autenticación | Mantenimiento de la lista de reinos |
Database Worker Pools | Datos | Operaciones asíncronas de base de datos |
Arquitectura de hilos y concurrencia
Ambos servidores implementan arquitecturas multi-hilo para manejar operaciones concurrentes.
worldserver
utiliza un modelo más complejo debido a sus requisitos de procesamiento en tiempo real.
- WorldRunnable: Prioridad más alta, ejecuta el bucle principal del juego
- CliRunnable: Prioridad normal, procesamiento de comandos de consola
- RARunnable: Prioridad normal, administración remota
- TCSoapRunnable: Prioridad normal, servicios web SOAP
- FreezeDetectorRunnable: Prioridad más alta, detección de bloqueos
Manejo de señales y gestión de servicios
Ambos servidores implementan un sistema completo de manejo de señales para apagados seguros y capacidades de gestión de servicios, especialmente importantes en entornos de producción.
- Señales soportadas: SIGINT, SIGTERM, SIGBREAK (Windows)
- Acciones de apagado:
World::StopNow()
, limpieza de hilos y salida de procesos - Soporte de servicios Windows: Instalación, ejecución y desinstalación (solo en worldserver)
- PID Files: Soportados en ambos servidores
Punto de Entrada de la Aplicación y Gestión de Servicios
Archivos fuente relevantes: Esta sección cubre los puntos de entrada principales para los ejecutables worldserver
y authserver
, su gestión del ciclo de vida de servicios, arquitectura de hilos y manejo de señales. Para más detalles sobre el sistema World y el bucle de juego, ver World System and Configuration. Para la gestión de conexiones de base de datos, ver Database Layer and Object Management.
Visión General
OlympusCore consiste en dos aplicaciones de servidor principales que manejan diferentes aspectos de un servidor privado de World of Warcraft:
- worldserver: Servidor principal del mundo que gestiona sesiones de jugadores, lógica de juego y simulación del mundo.
- authserver: Servidor de autenticación que maneja inicio de sesión, listas de reinos y validación de cuentas.
Ambas aplicaciones siguen patrones similares para inicialización, carga de configuración y gestión de servicios, pero difieren en arquitectura de ejecución e hilos.
Puntos de Entrada de la Aplicación
Worldserver
Se inicia en src/server/worldserver/Main.cpp
(líneas 80-170). Secuencia de inicio:
- main()
- Analizar argumentos de línea de comandos
- Cargar
worldserver.conf
- Mostrar banner
- Crear y ejecutar instancia Master
- Retornar código de salida
Operaciones de servicio en Windows: instalar/desinstalar servicio, ejecutar como servicio.
Argumentos soportados:
- -c config_file → especificar archivo de configuración
- -s install/uninstall → instalar o eliminar servicio (Windows)
- --service → ejecutar como servicio (Windows)
Authserver
Se inicia en src/server/authserver/Main.cpp
(líneas 84-250). Secuencia de inicio:
- main()
- Analizar argumentos de línea de comandos
- Cargar
authserver.conf
- Mostrar banner
- Inicializar ACE Reactor
- Inicializar base de datos
- Cargar lista de reinos
- Iniciar Network Acceptor
- Ejecutar Reactor Event Loop
- Apagado y limpieza
Arquitectura de Gestión de Servicios
Ciclo de Vida de la Clase Master (worldserver)
- Configuración OpenSSL & Crypto
- Crear archivo PID
- Inicializar bases de datos
- Inicializar configuración del mundo
- Configurar manejadores de señales
- Lanzar hilos de servicio
- Iniciar servicios de red
- Marcar servidor como listo
- Esperar señal de apagado
- Limpieza y cierre de bases de datos
Hilos principales: WorldRunnable, CliRunnable, RARunnable, TCSoapRunnable, FreezeDetectorRunnable
Inicialización de Base de Datos
Servidor | Bases de Datos | Claves de Configuración | Hilos de Trabajo |
---|---|---|---|
worldserver | World, Character, Login, Blizz | WorldDatabaseInfo, CharacterDatabaseInfo, LoginDatabaseInfo, BlizzDatabaseInfo | Configurable por base de datos |
authserver | Login | LoginDatabaseInfo | Monohilo |
Gestión de Hilos
Modelo Worldserver
- Arquitectura multihilo con cada servicio en su propio hilo
- Prioridad más alta para World y FreezeDetector
- Hilos CLI y SOAP creados según configuración
Modelo Authserver
- Monohilo basado en ACE Reactor
- Hilo principal ejecuta Event Loop
- RealmAcceptor gestiona conexiones entrantes
- Manejo de eventos y ping periódico a base de datos
Manejo de Señales y Apagado
Secuencia de Apagado
Worldserver:
- Señal procesada por WorldServerSignalHandler
- Llamada a World::StopNow()
- Hilo de mundo detiene bucle de juego y limpia
- Master espera cierre de hilos
- Cierre de bases de datos
- Salida con código de estado
Authserver:
- Señal activa stopEvent = true
- Event Loop finaliza
- Cierre de base de datos
- Proceso finaliza normalmente
Configuración y Sistema de Banner
Ambos servidores usan olympus::Banner
para mostrar:
- ASCII Art de OlympusCore
- Nombre y versión de la aplicación
- Ruta de configuración
- Versiones de dependencias (OpenSSL, ACE, Boost)
Características Específicas de Plataforma
Soporte de Servicio en Windows
- Service Name: worldserver
- Display Name: TrinityCore world service
- Description: Emulador TrinityCore de World of Warcraft (world service)
Afinidad y Prioridad de Procesos
Configuración | Clave | Propósito |
---|---|---|
Process Affinity | UseProcessors | Asignación de cores vía bitmask |
Process Priority | ProcessPriority | Establecer HIGH_PRIORITY_CLASS |
World System y Configuración
Archivos fuente relevantes: Esta sección explica el sistema singleton World
, que actúa como coordinador central de operaciones del servidor, gestión de configuración, manejo de sesiones y temporización del bucle de juego. La clase World
administra el estado principal del servidor, sesiones de jugadores y comportamientos definidos por configuración.
Arquitectura Singleton World
La clase World
implementa un patrón singleton y sirve como punto central de coordinación para todas las operaciones del servidor:
- Estado global: manejo del estado del servidor, incluyendo número de jugadores, estado de apagado y flags operativos
- Gestión de sesiones: administra todas las sesiones activas y colas de espera
- Integración de configuración: carga y proporciona acceso a todas las configuraciones del servidor
- Orquestación de temporizadores: coordina intervalos de actualización de mapas, clima, eventos y sistemas periódicos
- Gestión de rates: aplica multiplicadores configurables de experiencia, drops, reputación y otras mecánicas de juego
Gestión de Configuración
El sistema World
implementa un marco completo de configuración que carga ajustes desde worldserver.conf
y los hace disponibles globalmente:
Estructura del Archivo de Configuración
- CONNECTIONS AND DIRECTORIES: RealmID, DataDir, conexiones a base de datos
- PERFORMANCE SETTINGS: UseProcessors, Compression, PlayerLimit
- SERVER LOGGING: PidFile, PacketLogFile, ChatLogs
- SERVER SETTINGS: GameType, RealmZone, MaxPlayerLevel
- WARDEN SETTINGS: Warden.Enabled, Warden.NumMemChecks
- PLAYER INTERACTION: AllowTwoSide.*, TalentsInspecting
- CREATURE SETTINGS: ThreatRadius, Rate.Creature.*
- CHAT SETTINGS: ChatFlood.*, Channel.RestrictedLfg
Carga y Validación de Configuración
El método World::LoadConfigSettings()
realiza validaciones extensas, incluyendo rango de valores, dependencias y logging de errores, aplicando valores por defecto en caso de configuración inválida.
Categorías Principales de Configuración
Categoría | Claves de Configuración | Propósito | Ejemplos |
---|---|---|---|
Base de Datos & Core | LoginDatabaseInfo, RealmID, DataDir | Identidad del servidor y almacenamiento de datos | Conexiones a bases, identificación del reino |
Performance | PlayerLimit, Compression, GridUnload | Optimización de servidor | Capacidad de jugadores, manejo de memoria |
Game Mechanics | MaxPlayerLevel, StartPlayerLevel, Expansion | Parámetros centrales de juego | Límites de nivel, condiciones de inicio |
Player Interaction | AllowTwoSide.*, TalentsInspecting | Funciones sociales y cross-facción | Restricciones de facción, inspección de talentos |
Creature Behavior | ThreatRadius, Rate.Creature.* | Mecánicas de NPC y criaturas | Radio de aggro, estadísticas de criaturas |
Chat & Communication | ChatFlood.*, ChatLevelReq.* | Control del chat | Protección de spam, nivel requerido |
Gestión de Sesiones
El sistema World
gestiona todas las conexiones de jugadores mediante un marco que controla ciclo de vida de sesiones, límites de capacidad, colas y tolerancia a desconexiones recientes.
Flujo de Procesamiento de Sesiones
- Reciente desconexión → bypass de cola
- Verificación de límite de jugadores
- Cola de espera para exceso de jugadores
- Activación de sesión
Estadísticas de Sesiones
- Sesiones activas:
GetActiveSessionCount()
- Sesiones en cola:
GetQueuedSessionCount()
- Pico histórico activo:
m_maxActiveSessionCount
- Pico histórico en cola:
m_maxQueuedSessionCount
- Total de sesiones:
GetActiveAndQueuedSessionCount()
Bucle de Juego y Sistema de Temporización
El sistema World
coordina temporizadores para todos los subsistemas mediante IntervalTimer
y WorldTimers
, gestionando actualizaciones de mapas, eventos periódicos y mantenimiento.
Temporizadores Críticos de Rendimiento
- Map Updates:
MapUpdateInterval
(default 100ms) - Grid Cleanup:
GridCleanUpDelay
(default 5 min) - Weather Changes:
ChangeWeatherInterval
(10 min) - Player Saves:
PlayerSaveInterval
(15 min) - Database Ping:
MaxPingTime
(30 min)
Características Configurables de Juego
El sistema permite funcionalidades configurables:
- Boost de Experiencia: Multiplicadores según día y hora (
XP.Boost.Daymask
,RATE_XP_BOOST
) - Bono PvP: Bonus de experiencia por kills PvP (
RATE_BONUS_XP_PVP_VALUE
) - Bono de Mazmorras: Bonus de experiencia por completar dungeons (
RATE_BONUS_XP_DUNGEON_VALUE
) - Títulos opcionales: Remoción de requisitos de logros (
CONFIG_BONUS_TITLE_REQUIREMENT
)
Database Layer y Gestión de Objetos
Archivos fuente relevantes: Esta sección cubre la capa de integración de base de datos y el sistema de gestión de objetos en OlympusCore, proporcionando almacenamiento persistente para entidades del juego, gestión de plantillas y manejo del ciclo de vida de los objetos.
Propósito y Arquitectura del Sistema
La capa de base de datos es la base para todos los datos persistentes del juego, ofreciendo caching, gestión de plantillas y asignación de GUID para entidades del juego. Está construida sobre tres bases de datos principales:
- WorldDatabase: datos estáticos del juego
- CharacterDatabase: datos de jugadores
- LoginDatabase: autenticación
ObjectMgr - Funcionalidad Principal
La clase ObjectMgr
es el hub central para la gestión de datos estáticos del juego, proporcionando métodos de acceso, caching y soporte de localización.
- Almacenes de plantillas:
CreatureTemplate
,CreatureAddon
,EquipmentInfo
,CreatureModelInfo
- Contadores GUID:
_hiCreatureGuid
,_hiItemGuid
,_hiCharGuid
, etc. - Métodos de carga:
LoadCreatureTemplates()
,LoadCreatureAddons()
,LoadEquipmentTemplates()
- Arreglos de información de jugadores:
_playerInfo[race][class]
Carga y Validación de Plantillas
El ObjectMgr
carga plantillas de datos estáticos durante el inicio del servidor con validación exhaustiva:
- CreatureTemplate:
creature_template
→_creatureTemplateStore
- CreatureAddon:
creature_template_addon
→_creatureTemplateAddonStore
- EquipmentInfo:
creature_equip_template
→_equipmentInfoStore
- CreatureModelInfo:
creature_model_info
→_creatureModelStore
Gestión de GUIDs
Se mantienen contadores únicos para todas las entidades del juego, asegurando que no haya conflictos durante la creación de objetos:
- _hiCharGuid, _hiCreatureGuid, _hiItemGuid, _hiGoGuid, _hiPetGuid, _hiVehicleGuid, _hiDoGuid, _hiCorpseGuid, _hiMoTransGuid
- Métodos:
GenerateNewGuid()
,MAKE_NEW_GUID()
Capa de Abstracción de Base de Datos
Se utilizan Prepared Statements para operaciones seguras y eficientes, manteniendo separación entre datos de mundo y de personajes.
- WorldDatabaseConnection:
DoPrepareStatements()
para datos de mundo - CharacterDatabaseConnection:
DoPrepareStatements()
para datos de personajes - Tipos de operaciones: Template Loading, Entity Management, Player Data, Guild System, Achievement System
Soporte de Localización
El ObjectMgr
soporta múltiples idiomas para el contenido textual visible por el jugador:
- Locales: enUS, deDE, frFR, etc. (hasta 8 idiomas)
- Almacenes:
_creatureLocaleStore
,_gossipMenuItemsLocaleStore
,_pointOfInterestLocaleStore
- Métodos:
AddLocaleString()
,GetLocaleString()
Creación de Objetos y Resolución de Plantillas
El ObjectMgr
proporciona métodos para crear objetos del juego desde plantillas, manejando selección de display, flags y randomización de modelos:
- Métodos principales:
GetCreatureTemplate(entry)
,ChooseCreatureFlags()
,ChooseDisplayId()
,GetCreatureModelRandomGender()
- Flujo de creación:
Creature::Create()
→LoadFromDB()
→LoadCreatureAddon()
- Soporte de herencia de plantillas y randomización de género en modelos alternativos
Build System y Dependencias
Archivos fuente relevantes: Esta sección cubre el sistema de compilación basado en CMake de OlympusCore, incluyendo la gestión de dependencias externas, compilación de objetivos y configuraciones específicas por plataforma.
Visión General del Sistema de Compilación
OlympusCore utiliza CMake como sistema principal de construcción (versión mínima requerida 3.8), organizado en múltiples bibliotecas y ejecutables que forman el servidor completo.
Estructura del Proyecto CMake
CMakeLists.txt
: Configuración raíz del proyecto OlympusCorecmake/options.cmake
: Configuración de opciones de compilacióncmake/genrev.cmake
: Generación de información de revisióndep/CMakeLists.txt
: Gestión de dependencias externascmake/macros/FindMySQL.cmake
: Detección de MySQL/MariaDBsrc/CMakeLists.txt
: Raíz de código fuentesrc/server/authserver/CMakeLists.txt
: Ejecutable authserversrc/server/worldserver/CMakeLists.txt
: Ejecutable worldserversrc/server/game/CMakeLists.txt
: Librería de lógica de juegosrc/server/scripts/CMakeLists.txt
: Librería de scriptssrc/server/shared/CMakeLists.txt
: Librería compartidasrc/server/collision/CMakeLists.txt
: Librería de colisiones
Dependencias Externas
El sistema de compilación gestiona varias dependencias críticas:
Dependencia | Propósito | Método de Detección | Requerido |
---|---|---|---|
ACE | Redes y threading | find_package(ACE REQUIRED) | Sí |
OpenSSL | Operaciones criptográficas | find_package(OpenSSL REQUIRED) | Sí |
MySQL/MariaDB | Conectividad de base de datos | FindMySQL.cmake | Sí |
Boost | Utilidades de sistema y algoritmos | find_package(Boost COMPONENTS ...) | Sí |
Threads | Soporte multi-threading | find_package(Threads REQUIRED) | Unix solo |
Detección de MySQL/MariaDB
Soporta tanto MySQL como MariaDB en diferentes plataformas:
- Windows: busca MariaDB 10.5-10.9 en rutas estándar de Program Files
- Unix: usa
mysql_config
si está disponible, o rutas estándar del sistema
Configuración y Opciones de Compilación
- Tipo de compilación por defecto:
Release
- Protección contra cambios de código fuente y compilación in-source
- Control de precompiled headers (
USE_COREPCH
,USE_SCRIPTPCH
)
Generación de Información de Revisión
Se genera automáticamente un header revision_data.h
con metadatos del build:
_REVISION, _HASH, _DATE, _BRANCH
VER_COMPANYNAME_STR
yVER_LEGALCOPYRIGHT_STR
Objetivos Principales y Librerías
- Librerías:
shared
,game
,collision
,scripts
- Ejecutables:
authserver
,worldserver
Compilación de Scripts
Macro dinámica que recopila fuentes de múltiples directorios:
macro(PrepareScripts name out)
file(GLOB_RECURSE found ${name}/*.h ${name}/*.cpp)
list(APPEND ${out} ${found})
endmacro()
Rutas de Inclusión
- authserver: Authentication/, Realms/, Server/
- game: Entities/, Spells/, AI/, Handlers/
- scripts: Todas las includes de juego + scripts
- collision: Management/, Maps/, Models/
Configuraciones por Plataforma
El build system maneja diferencias entre Windows y Unix mediante compilación condicional:
- Windows: incluye archivos de recursos, copia post-build de
authserver.conf.dist
- Unix: enlaza con librerías externas (MySQL, OpenSSL, ACE, Boost) y define rutas de configuración
Control de Compilación de Dependencias
- Dependencias comunes: ACE, Boost, MySQL/MariaDB
- Linux: readline, zlib, bzip2, threads
- Windows: dependencias integradas
- Opcionales según configuración: jemalloc, g3dlite, recastnavigation, gsoap, StormLib, json, etc.
Core Game Entity System
Archivos fuente relevantes: Esta sección describe la jerarquía de entidades y los sistemas de gestión que sustentan todos los objetos de juego en OlympusCore, incluyendo Object
, WorldObject
, el sistema de tipos, gestión de ciclo de vida, sincronización de valores y gestión espacial en grids.
Jerarquía de Tipos de Entidad
El sistema de entidades se construye con una estructura de clases jerárquica, donde Object
es la clase base de todas las entidades.
- Object: GetGUID(), GetTypeId(), isType(), AddToWorld(), RemoveFromWorld(), Set/GetUInt32Value()
- WorldObject: GetPosition(), Relocate(), GetPhaseMask(), GetMap(), SetPhaseMask()
- Unit: Set/GetHealth(), isAlive(), CastSpell(), GetAI()
- GameObject: GetGoType(), SetGoState(), UseDoorOrButton()
- Player: GetSession(), GetGroup(), TeleportTo()
- Creature: AI(), SetReactState(), isWorldBoss()
- DynamicObject: GetCaster(), GetSpellInfo()
Sistema de Identificación de Tipos
TypeID | TypeMask | Tipo de Entidad | Descripción |
---|---|---|---|
TYPEID_OBJECT | TYPEMASK_OBJECT | Object | Entidad base |
TYPEID_UNIT | TYPEMASK_UNIT | Unit | Entidades de combate |
TYPEID_PLAYER | TYPEMASK_PLAYER | Player | Personajes jugadores |
TYPEID_GAMEOBJECT | TYPEMASK_GAMEOBJECT | GameObject | Objetos interactivos |
TYPEID_DYNAMICOBJECT | TYPEMASK_DYNAMICOBJECT | DynamicObject | Efectos de hechizos |
El método isType()
utiliza operaciones bitwise para comprobación eficiente en tiempo de ejecución.
Ciclo de Vida de Objetos y Gestión
- Creación: _InitValues() y _Create()
- Entrada en Mundo: AddToWorld() y registro en sistema de grids
- Estado Activo: Participa en actualizaciones e interacciones
- Salida de Mundo: RemoveFromWorld() y limpieza de referencias
- Destrucción: Limpieza de arrays y referencias
Sistema de Valores y Actualizaciones
El sistema de valores sincroniza datos entre servidor y cliente, con detección de cambios y transmisión eficiente:
- Array de Valores:
m_uint32Values[]
- UpdateMask: Rastrea campos modificados
- Métodos: Get/Set UInt32, Float, UInt64; ApplyModUInt32Value(); Set/RemoveFlag()
- Bloques de Actualización: _BuildValuesUpdate(), WorldPacket
Sistemas Espaciales y Gestión de Grids
- Particionamiento del mundo en grids y celdas
- Mapas, coordenadas y referencias de grid
- Notificadores:
- VisibleNotifier: cambios de visibilidad
- GridUpdater: actualizaciones por tiempo
- RelocationNotifier: movimiento entre grids
- MessageDistDeliverer: distribución de paquetes según proximidad
Identificación de Entidades y GUIDs
- GUIDs globalmente únicos
- Formato PackGUID para transmisión de red
- GuidHigh2TypeId() convierte GUIDs a TypeID sin acceder al objeto
Posición e Integración de Movimiento
- Sistema de coordenadas 3D con orientación
- Asociación a mapas específicos
- Gestión de fases para visibilidad por jugador
- Soporte de relocación y consultas espaciales
Object Hierarchy
Archivos fuente relevantes: Esta sección cubre la jerarquía de objetos que representa todas las entidades del juego, desde la clase base Object
hasta WorldObject
, incluyendo sincronización de campos, gestión de GUID, actualizaciones para clientes e integración en grids.
Arquitectura de la Clase Base Object
La clase Object
proporciona servicios esenciales como identificación única, almacenamiento de datos basado en campos y sincronización con clientes.
Sistema de Identificación de Objetos
Cada objeto tiene un GUID de 64 bits compuesto por:
- GUID Low (32-bit): Identificador de instancia
- GUID Mid (16-bit): Entry ID
- GUID High (16-bit): Type Identifier
Tipos de entidad principales:
- TYPEID_ITEM
- TYPEID_UNIT
- TYPEID_PLAYER
- TYPEID_GAMEOBJECT
- TYPEID_DYNAMICOBJECT
- TYPEID_CORPSE
- TYPEID_AREATRIGGER
Arquitectura del Sistema de Campos
Los objetos usan un sistema de campos dinámico para almacenar y sincronizar datos con los clientes:
m_uint32Values[]
: array de campos_changesMask
: UpdateMask de cambiosm_valuesCount
: cantidad de campos- Acceso tipo seguro:
m_int32Values
,m_uint32Values
,m_floatValues
- Métodos: Get/Set UInt32, Float
Extensiones Espaciales de WorldObject
WorldObject
extiende Object
con funcionalidad espacial, integración con mapas y visibilidad:
- Posición:
m_positionX, Y, Z
, orientación - Métodos de movimiento: Relocate(), MovePosition()
- Mapas:
m_currMap
,m_InstanceId
,m_phaseMask
- Visibilidad:
m_stealth
,m_invisibility
y arrays de detección
Gestión de Fases y Visibilidad
Soporte para sigilo, invisibilidad y visibilidad basada en fases:
- canSeeOrDetect(), CanNeverSee()
- InSamePhase()?, CanAlwaysSee()
- Detección de sigilo y invisibilidad:
m_stealth vs m_stealthDetect
,m_invisibility vs m_invisibilityDetect
Sistema de Actualización y Sincronización con Clientes
Los objetos sincronizan su estado con los clientes mediante un sistema eficiente de actualización:
- Bloques de actualización: BuildUpdate(), BuildCreateUpdateBlockForPlayer()
- Determinación de tipo de actualización: UPDATETYPE_CREATE_OBJECT, UPDATETYPE_CREATE_OBJECT2
- Manejo de UpdateMask: _SetUpdateBits(), _SetCreateBits(), _BuildValuesUpdate()
- Serialización: ByteBuffer
Visibilidad y Seguridad de Campos
- Flags base: UF_FLAG_PUBLIC, UF_FLAG_PRIVATE
- Flags por tipo: Items, Units/Players, GameObjects
- Relaciones: UF_FLAG_OWNER, UF_FLAG_PARTY_MEMBER, UF_FLAG_SPECIAL_INFO
Integración con Grids y Consultas Espaciales
- Referencias: GridObject, GridReference, GridRefManager, MapObject
- Celdas y posición:
Cell _currentCell
,_moveState
,_newPosition
- Métodos de búsqueda espacial: VisitNearbyObject(), VisitNearbyGridObject(), VisitNearbyWorldObject()
- Encuentros cercanos: FindNearestCreature(), FindNearestGameObject(), FindNearestPlayer()
Gestión del Ciclo de Vida de Objetos
- Creación: Object(), _InitValues(), _Create(), SetUInt64Value(OBJECT_FIELD_GUID), SetUInt16Value(OBJECT_FIELD_TYPE), AddToWorld()
- Integración en mundo: m_inWorld = true, ClearUpdateMask()
- Salida de mundo: RemoveFromWorld(), m_inWorld = false, ClearUpdateMask()
- Destrucción y limpieza: ~Object(), sObjectAccessor->RemoveUpdateObject(), delete[] m_uint32Values, ~WorldObject(), ResetMap()
Unit System and Combat
Archivos fuente relevantes: Esta sección cubre el sistema Unit, base de todas las entidades de combate en OlympusCore. La clase Unit
sirve como base para jugadores y criaturas, proporcionando mecánicas de combate, movimiento, lanzamiento de hechizos y gestión de estados.
Arquitectura Core de Unit
La clase Unit
es abstracta y gestiona:
- Movimientos y pathfinding:
MotionMaster
- Gestión de amenazas y aggro:
ThreatManager
- Hechizos y efectos: Spell System
- Efectos persistentes: Aura System
- Control de comportamiento: AI System
- Control de mascotas/minions:
CharmInfo
Jerarquía de clases principales:
- WorldObject > Unit > Player/Creature
- TempSummon, Pet, Totem, Guardian
Mecánicas de Combate y Sistema de Daño
- Tipos de daño: DIRECT_DAMAGE, SPELL_DIRECT_DAMAGE, DOT, NODAMAGE
- Fases de combate: Validación de ataque, Cálculo de daño, Mitigación (armor/resist/absorb), Aplicación final de daño
- Sistema de Procs: Eventos que disparan efectos
- Gestión de amenaza: ThreatManager y cálculo de victim
- Sistema de ataque: BASE_ATTACK, OFF_ATTACK, RANGED_ATTACK
- Alcance de combate: GetCombatReach(), IsWithinMeleeRange(), GetLeewayBonusRange()
Estados de Unidad y Movimiento
- Flags de estado: UNIT_STATE_*
- Estados de muerte: ALIVE, CORPSE, DEAD
- Estados de combate: In/Out of Combat
- Movimiento: UNIT_STATE_MOVING, ROAMING, CHASE, FLEEING, ROOT, STUNNED, CONFUSED, POSSESSED, CASTING
- Movimiento spline: MoveSpline(), UpdateSplineMovement(), UpdateSplinePosition()
- Gestión de velocidad: baseMoveSpeed[], m_speed_rate[], UpdateSpeed()
Integración de Hechizos
- Sistema de interrupción y validación: CanCast(), SPELL_STATE_PREPARING, SPELL_STATE_CASTING
- Estados de hechizos activos: CURRENT_GENERIC_SPELL, CURRENT_CHANNELED_SPELL, CURRENT_AUTOREPEAT_SPELL
- Impacto de movimiento, daño, stun/silence y muerte sobre hechizos
- Sistema de cooldown global: GlobalCooldownMgr, HasGlobalCooldown(), AddGlobalCooldown()
Integración con AI y Comportamiento
- Unidad integrada con AI: UnitAI, CreatureAI
- Eventos AI: UpdateAI(), SelectVictim(), EnterCombat(), JustDied(), SpellHit()
- Gestión de amenaza y target: ThreatManager, AddThreat(), getVictim()
- Habilidades reactivas: m_reactiveTimer[], UpdateReactives()
- Control de mascotas: CharmInfo, GetCharmInfo(), Pet AI
Ciclo de Actualización y Rendimiento
- Ciclo Unit::Update(p_time) optimizado para cientos de unidades
- Actualización condicional: eventos, hechizos activos, cooldowns, threat, timers, reactivas, auras, movimiento, MotionMaster, guardian speed, orientación
- Consideraciones de rendimiento: frecuencia variable por tipo de unidad, actualizaciones time-sliced, optimización para raids grandes
- Validación de estado: ASSERT(!m_procDeep), validación de timers y consistencia de hechizos
Player and Group Management
Archivos fuente relevantes: Esta sección cubre el sistema de entidades Player y la coordinación de grupos en OlympusCore. Incluye arquitectura de la clase Player, formación de grupos, interacción social y coordinación multijugador.
Arquitectura de la Entidad Player
La clase Player
representa personajes controlados por humanos y extiende Unit
con funcionalidades específicas:
- Seguimiento de logros:
AchievementMgr
- Reputación de facciones:
ReputationMgr
- Sistema de arqueología:
ArcheologyMgr
- Gestión de talentos:
PlayerTalentInfo
- Gestión de fases:
PhaseMgr
- Sistema social:
PlayerSocial
- Intercambios de items:
TradeData
- Gestión de grupos y gremios:
Group
yGuild
Componentes Core del Player
- m_achievementMgr: seguimiento y recompensas de logros
- m_reputationMgr: gestión de reputación
- m_social: amigos y lista de ignorados
- _talentMgr: asignación de puntos de talento
- phaseMgr: sistema de phasing para instancias
Creación e Inicialización del Player
- ObjectMgr y CharacterDatabase preparan la información del jugador
- Se inicializan valores base: raza, clase, género
- InitDisplayIds() establece la apariencia
- Se guarda la información del personaje en la base de datos
Arquitectura del Sistema de Grupos
- Tipos de grupo: PARTY (5), RAID (40), BG, LFG
- Gestión de miembros: MemberSlotList y GroupRefManager
- Invitaciones pendientes: InvitesList
- Bind de instancias: BoundInstancesMap
- Métodos de loot: LootMethod y Roll
Gestión de Miembros de Grupo
- Agregar miembro:
AddMember(Player*)
- Eliminar miembro:
RemoveMember(uint64, RemoveMethod)
- Cambiar líder:
ChangeLeader(uint64)
- Asignar roles LFG:
SetLfgRoles(uint64, uint8)
Sistema Social
- Gestión de amigos y lista de ignorados a través de
PlayerSocial
- Operaciones asincrónicas con base de datos
Sistema de Intercambio
- Clase
TradeData
gestiona items y oro - Componentes:
m_player
,m_trader
,m_items[7]
,m_money
,m_spell
,m_accepted
Sistemas de Recompensas y Progresión
- Clase
KillRewarder
gestiona XP, honor y reputación - Factores considerados: tamaño y nivel del grupo, nivel del jugador, tipo de instancia, membresía de guild
Gestión de Instancias y Dificultad
- Bind de grupo a instancias:
InstanceGroupBind
- Herencia automática de bind si el líder posee bind permanente
- Escalado de dificultad: Dungeons (Normal/Heroic), Raids (10/25 Normal/Heroic)
Sistema de Loot y Rolls
- Distribución de items mediante sistema de roll
- Tipos de roll: PASS, NEED, GREED, DISENCHANT
- Ciclo de roll: crear objeto, enviar SMSG_LOOT_START_ROLL, recolectar votos, asignar item
Integración de Bots
- Sistema NPC bot que se integra con player y group
- Componentes:
BotHelper
,NpcBotMap[MAX_NPCBOTS]
- Configuración: maxNpcBots, follow distance, reducción XP
- Efectos: XP distribuido reducido, loot FFA, limitaciones de instancias según configuración
Game Mechanics
Archivos fuente relevantes: Esta sección cubre los sistemas principales de mecánicas de juego en OlympusCore, enfocándose en hechizos, selección de objetivos y ejecución de efectos.
Spell System Overview
El sistema de hechizos proporciona un marco unificado para manejar habilidades de jugadores, hechizos de NPC, efectos de objetos y interacciones ambientales.
Core Spell Architecture
- Data Management
- Spell Execution Pipeline
- Core Spell Classes: Spell, SpellInfo, SpellCastTargets, SpellValue
- Client Request Processing: CMSG_CAST_SPELL, CMSG_USE_ITEM
- SpellMgr: gestor global de hechizos y efectos
Spell Data Management
- SpellEntry (DBC) → SpellInfo
- SpellEffectEntry → SpellEffectInfo
- SpellScalingEntry → SpellMgr
- mSpellChains, mSpellTargetPositions, mSpellBonusMap, mSpellProcMap
Spell Casting Pipeline
- Procesamiento de solicitud del cliente
- Creación y preparación del spell:
new Spell()
,prepare()
- Selección de objetivos:
SelectSpellTargets()
- Validación:
CheckCast()
- Ejecución:
cast()
, manejo de efectos
Target Selection System
Soporta objetivos explícitos (seleccionados por el jugador) e implícitos (determinados por los efectos del hechizo).
- Explicit: SelectExplicitTargets()
- Implicit: SelectEffectImplicitTargets()
- Tipos de objetivo: UNIT, GAMEOBJECT, ITEM, DEST_LOCATION, AREA, CONE, NEARBY, CHANNEL
Spell Effect System
Los efectos son las unidades fundamentales de funcionalidad de hechizos, desde daño y curación hasta invocaciones.
- Effect Handler: SpellEffects[TOTAL_SPELL_EFFECTS]
- Acceso a
SpellEffectInfo
: puntos base, valores misceláneos, info de objetivos
Common Effect Types
ID | Handler Function | Propósito |
---|---|---|
2 | EffectSchoolDMG | Daño según escuela de hechizo |
3 | EffectDummy | Efectos personalizados |
6 | EffectApplyAura | Aplica auras persistentes |
10 | EffectHeal | Restaura salud |
24 | EffectCreateItem | Crea ítems en inventario |
28 | EffectSummonType | Invoca criaturas u objetos |
Spell Targeting Mechanics
- Tipos de referencia: SpellImplicitTargetInfo → categoría de selección, tipo de objeto, referencia, chequeo de amistad/enemigo
- Tipos de objeto: UNIT, GOBJ, ITEM, DEST
- Categorías de selección: AREA, CONE, NEARBY, DEFAULT
Target Flag System
- Unit Flags: TARGET_FLAG_UNIT, TARGET_FLAG_UNIT_ENEMY, TARGET_FLAG_UNIT_ALLY, TARGET_FLAG_UNIT_PARTY, TARGET_FLAG_UNIT_RAID
- Location Flags: TARGET_FLAG_SOURCE_LOCATION, TARGET_FLAG_DEST_LOCATION
- Object Flags: TARGET_FLAG_GAMEOBJECT, TARGET_FLAG_ITEM
- Special Flags: TARGET_FLAG_CORPSE_ALLY
Aura System Integration
El sistema de hechizos se integra con el sistema de auras para efectos persistentes:
- Aplicación:
EffectApplyAura()
- Tipos de aura: SPELL_AURA_MOD_STAT, SPELL_AURA_PERIODIC_DAMAGE, SPELL_AURA_MOD_RESISTANCE, SPELL_AURA_MOD_INCREASE_SPEED
- Reglas de apilamiento y duración gestionadas por SpellMgr
Skill System Integration
Soporte para mecánicas basadas en habilidades, como arqueología:
- Hechizos de arqueología usan castFlags especiales (0x8)
- Procesamiento de fragmentos y keystones
- Validación de proyecto de investigación
- Creación de artefactos
Spell System
Archivos fuente relevantes: Este sistema es el marco principal de habilidades mágicas en OlympusCore, encargado de manejar la preparación, selección de objetivos, ejecución de efectos y gestión de datos de los hechizos.
Purpose and Scope
Procesa solicitudes de hechizos del cliente, valida condiciones, ejecuta efectos y administra auras persistentes.
Core Architecture
- Effect Execution
- Casting Engine
- Spell Management
- Network Layer
- SpellHandler:
HandleCastSpellOpcode()
,HandleUseItemOpcode()
,HandleCancelCastOpcode()
- SpellMgr (Singleton):
SpellInfo
, Spell Chains & Ranks, DBC Data Loading - Spell (Active Instance):
SpellValue
,SpellCastTargets
,prepare()
,cast()
- SpellEffects Array, SpellEffectInfo
- Target Selection: Unit System, Player System, WorldObject, Aura System
Class Relationships
- SpellMgr: mSpellInfoMap, mSpellChains,
GetSpellInfo(spellId)
,IsSpellValid()
,LoadSpellRanks()
- SpellInfo: Id, Effects[MAX_SPELL_EFFECTS],
GetExplicitTargetMask()
,IsPositive()
,CheckExplicitTarget()
- Spell: m_caster, m_targets, m_spellValue,
prepare(targets)
,cast()
,SelectSpellTargets()
- SpellCastTargets: m_objectTarget, m_src, m_dst,
Read(data, caster)
,SetUnitTarget()
- SpellEffectInfo: Effect, ApplyAuraName, TargetA/B,
CalcValue()
,CalcRadius()
Spell Casting Lifecycle
- Client Request → SpellHandler → SpellMgr → Spell → EffectHandler
- Preparación:
prepare()
, validación conCheckCast()
- Selección de objetivos:
SelectSpellTargets()
,SelectExplicitTargets()
- Ejecución:
cast()
,ExecuteEffects()
- Feedback al cliente: SMSG_SPELL_GO, SMSG_CAST_FAILED, SMSG_SPELL_FAILURE
Spell State Management
Phase | State | Key Methods | Purpose |
---|---|---|---|
Creation | SPELL_STATE_NULL | Constructor, InitExplicitTargets() | Inicializa instancia y targeting básico |
Preparation | SPELL_STATE_PREPARING | prepare(), CheckCast() | Valida condiciones de lanzamiento |
Targeting | SPELL_STATE_CASTING | SelectSpellTargets(), SelectExplicitTargets() | Determina objetivos afectados |
Execution | SPELL_STATE_TRAVELING | cast(), ExecuteEffects() | Aplica efectos |
Cleanup | SPELL_STATE_FINISHED | finish(), Destructor | Limpia recursos y estado |
Targeting System
- Componentes: SpellImplicitTargetInfo, SpellCastTargets, SpellDestination
- Métodos: InitExplicitTargets(), SelectExplicitTargets(), SelectEffectImplicitTargets()
- Tipos de objetivos: Unit, Area, Destination, GameObject, Channel
Target Types and Flags
- Special Targets: TARGET_FLAG_CORPSE_ALLY, TARGET_FLAG_CORPSE_ENEMY, TARGET_FLAG_STRING
- Object Targets: TARGET_FLAG_GAMEOBJECT, TARGET_FLAG_GAMEOBJECT_ITEM, TARGET_FLAG_ITEM, TARGET_FLAG_TRADE_ITEM
- Location Targets: TARGET_FLAG_SOURCE_LOCATION, TARGET_FLAG_DEST_LOCATION
- Unit Targets: TARGET_FLAG_UNIT_ALLY, TARGET_FLAG_UNIT_ENEMY, TARGET_FLAG_UNIT_PARTY, TARGET_FLAG_UNIT_RAID
Effect System
Los efectos se ejecutan mediante un array de punteros a funciones, mapeando tipos de efecto a handlers:
- Damage: EffectSchoolDMG
- Healing: EffectHeal
- Aura: EffectApplyAura
- Summon: EffectSummonType
- Teleport: EffectTeleportUnits
- Dummy: EffectDummy
- InstaKill: EffectInstaKill
- Create Item: EffectCreateItem
Data Management
SpellMgr gestiona carga, validación y acceso a datos de hechizos:
- Mapas: mSpellInfoMap, mSpellChains, mSpellReq, mSpellTargetPositions, mSpellBonusMap, mSpellThreatMap, mSpellLinkedMap, mSpellProcEventMap
- Métodos: LoadSpellInfoStore(), LoadSpellRanks(), LoadSpellRequired(), IsSpellValid(), GetSpellInfo(), GetSpellChainNode(), GetSpellBonusData(), GetSpellProcEvent()
Network Integration
- Handlers: HandleCastSpellOpcode(), HandleUseItemOpcode(), HandleCancelCastOpcode(), HandleCancelAuraOpcode()
- Client Packets: CMSG_CAST_SPELL, CMSG_USE_ITEM, CMSG_CANCEL_CAST, CMSG_CANCEL_AURA
- Server Responses: SMSG_SPELL_START, SMSG_SPELL_GO, SMSG_CAST_FAILED, SMSG_SPELL_FAILURE
Aura System
Archivos fuente relevantes: Este sistema gestiona los efectos mágicos persistentes aplicados a unidades, incluyendo buffs, debuffs, daño periódico y modificaciones temporales a propiedades de la unidad.
Core Architecture
- Aura: Contenedor de efecto persistente (m_duration, m_procCharges, m_stackAmount)
- AuraApplication: Instancia aplicada a un objetivo específico (slot, sincronización con cliente)
- AuraEffect: Modificaciones individuales a propiedades de unidad (m_effects array)
- Unit: Entidad objetivo
- SpellInfo: Definición de efecto
- WorldObject: Propietario espacial
- SpellMgr: Gestión de datos
- ObjectMgr: Gestión de entidades
- ScriptMgr: Handlers personalizados
Aura Lifecycle Management
- Creation:
Aura::TryCreate()
,BuildEffectMaskForOwner()
- Application:
Aura::Create()
,_InitEffects()
,_ApplyForTarget()
,AuraApplication constructor
- Update:
UpdateOwner()
,UpdateTargetMap()
- Stack & Charge:
ModStackAmount()
,ModCharges()
- Removal:
Remove()
,_UnapplyForTarget()
,_HandleEffect(false)
,_DeleteRemovedApplications()
Client Synchronization
- Visible Aura Slots:
SetVisibleAura()
,GetVisibleAura()
- Update Packets:
BuildUpdatePacket()
,ClientUpdate()
- Aura Flags:
_InitFlags()
, AFLAG_* constants - Stack/Charge Display: cantidad de stacks, cargas y duración
Stacking and Charge Mechanics
- Gestión de stacks:
ModStackAmount()
,SetStackAmount()
, recalcula efectos conChangeAmount()
yCalculateAmount()
- Sistema de cargas:
ModCharges()
,IsUsingCharges()
, eliminación automática cuando las cargas llegan a cero - Proc Events: disparos en combate o lanzamiento de hechizo
Integration with Other Systems
- World System Integration
- Unit System Integration
- Aura System Core
- Spell System Integration: Spell Casting, Spell Effects, Spell Modifiers
- Unit Properties, Combat Mechanics, Movement Control
- Area Effects, Zone Auras, Spell Linking
Persistence and State Management
- Save State:
CanBeSaved()
, exclusión de auras temporales o de vehículos - Load State:
SetLoadedState()
, restauración de duración, cargas y stacks - Recalculation:
RecalculateAmountOfEffects()
Map and Spatial Systems
Archivos fuente relevantes: Este sistema gestiona la infraestructura espacial del mundo de juego, la posición de objetos y la visibilidad de jugadores.
Map Architecture Overview
- Map: Clase base que maneja áreas persistentes y funcionalidad espacial central
- InstanceMap: Maneja contenido instanciado como mazmorras y raids, con sistemas de reseteo
- BattlegroundMap: Especializada para instancias PvP
- MapInstanced: Gestiona múltiples instancias de la misma plantilla de mapa
Grid and Cell System
- Grids: 64x64 que cubren todo el mapa
- Cells: Cada grid contiene 8x8 celdas para colocar objetos con precisión
- Contenedores: WorldObjects (objetos activos) y GridObjects (objetos pasivos)
- Coordenadas:
GridCoord
yCellCoord
para indexación espacial - Constantes: MAX_NUMBER_OF_GRIDS = 64, MAX_NUMBER_OF_CELLS = 8, TOTAL_NUMBER_OF_CELLS_PER_MAP = 512
Map Loading and Data Management
- Archivos Map: Terreno base, altura, líquidos y áreas
- VMap: Colisiones visuales para line-of-sight y detección de colisión
- MMap: Navegación y pathfinding
- Validación de archivos mediante valores magic esperados
- Directorios:
maps/
,vmaps/
,mmaps/
Object Management
- Ciclo de vida completo de objetos:
AddToMap()
,RemoveFromMap()
,Relocate()
- Contenedores: WorldObjects (actualizaciones frecuentes), GridObjects (mínimas)
- Listas de movimiento para cambios de grid/celda
- Relocalización de criaturas y jugadores con
CreatureRelocation()
yPlayerRelocation()
Visibility and Update System
- Rango de visibilidad:
GetVisibilityRange()
,DEFAULT_VISIBILITY_DISTANCE
- Marcado de celdas alrededor de jugadores activos para actualizar objetos
- Patrón visitor:
TypeContainerVisitor
procesa objetos en celdas marcadas - Actualización de objetos con
Trinity::ObjectUpdater
- Notificaciones de relocación:
ProcessRelocationNotifies()
Movement and Relocation
- Tipos de movimiento: misma celda (inmediato), celda/grid diferente (diferido)
- Listas de movimiento (
MoveList
) para cambios diferidos - Actualización de visibilidad y grid automático para objetos activos
- Funciones clave:
ComputeCellCoord()
,EnsureGridLoadedForActiveObject()
,AddCreatureToMoveList()
,UpdateObjectVisibility()
Instance Management
- Tipos de instancias: mazmorra, raid, escenario
- Control de estado:
InstanceMap
,InstanceScript
- Mecánicas de reseteo: automáticas o manuales,
INSTANCE_RESET_ALL
,INSTANCE_RESET_GROUP_DISBAND
- Gestión de jugadores: elegibilidad, binding, máximo de jugadores, estados de jefes
- Lógica personalizada para encuentros y progresos de instancia
Scripting Framework
Archivos fuente relevantes: Este framework permite implementar lógica personalizada, NPCs, hechizos, eventos y comportamientos sin modificar el núcleo del motor del juego.
Script Loading Architecture
El sistema centralizado registra todos los scripts durante el arranque del servidor. Se carga de forma modular según categorías:
AddScripts()
,AddSC_SmartScripts()
,AddSpellsScripts()
AddCommandsScripts()
,AddCustomScripts()
,AddDarkmoonFairScripts()
AddWorldScripts()
,AddEasternKingdomsScripts()
,AddKalimdorScripts()
AddOutlandScripts()
,AddNorthrendScripts()
,AddMaelstromScripts()
AddOutdoorPvPScripts()
,AddEventsScripts()
,AddNPCBotScripts()
- Integración con anticheat:
sAnticheatMgr->StartScripts()
Script Type Hierarchy
- CreatureScript →
ScriptedAI
: NPCs, comportamiento e interacciones - BossAI: IA de jefes
- SpellScriptLoader →
SpellScript
: Efectos de hechizos personalizados - AuraScript: Efectos persistentes de hechizos
- PlayerScript: Eventos de jugador
- InstanceScript: Gestión de instancias
- GameObjectScript: Interacción con objetos del mundo
Script Registration Patterns
Todos los scripts siguen un patrón de registro consistente implementando métodos virtuales y registrándose mediante funciones loader dedicadas:
Tipo de Script | Clase Base | Uso Principal | Métodos Clave |
---|---|---|---|
CreatureScript | ScriptedAI | NPCs y comportamientos | OnGossipHello, OnGossipSelect, UpdateAI |
SpellScriptLoader | SpellScript | Efectos de hechizos | HandleDummy, FilterTargets, Register |
SpellScriptLoader | AuraScript | Efectos persistentes de hechizos | HandleApply, OnRemove, Register |
PlayerScript | N/A | Eventos de jugador | OnUpdateZone, OnLogin, OnLogout |
Example Registration Implementation
// DarkmoonFairScripts.cpp
void AddDarkmoonFairScripts()
{
new npc_darkmoon_mallet();
new npc_wack_a_gnoll_barrel();
new spell_cognez_dummy();
new spell_magic_wings();
new darkmoon_fair_playerscript();
}
Event-Driven Script Execution
Los scripts se integran mediante callbacks y ciclos de actualización del juego:
- Interacciones de NPCs:
OnGossipHello()
,OnGossipSelect()
- Validación de quests y lanzamiento de hechizos:
HasItemCount()
,CastSpell()
,HandleDummy()
- Integración con
SpellSystem
,Creature
,WorldSession
yPlayer
Zone-Specific Script Organization
AddEasternKingdomsScripts()
→ zonas de Eastern Kingdoms (Stormwind, Ironforge, Undercity)AddKalimdorScripts()
→ zonas de Kalimdor (Orgrimmar, Thunder Bluff, Darnassus)AddNorthrendScripts()
→ zonas de Northrend (Icecrown Citadel, Ulduar)AddMaelstromScripts()
→ zonas de Cataclysm (Deepholm, The Stonecore)AddEventsScripts()
→ eventos de temporada
Custom Enhancement Integration
Soporta extensiones del servidor mediante scripts personalizados, como:
AddCustomScripts()
,AddLeoDevScripts()
- Características como boost de nivel, teletransportes y quests personalizadas
Development Scripts Integration
Los Development Scripts proporcionan herramientas y funcionalidades enfocadas en pruebas y desarrollo de contenido del servidor. Estos scripts se cargan mediante AddLeoDevScripts()
y no dependen de compilación condicional.
- Herramientas de depuración de eventos y NPCs
- Pruebas de IA de criaturas y hechizos
- Registro de métricas de scripts y rendimiento
void AddLeoDevScripts() { new dev_event_logger(); new dev_npc_spawner(); new dev_spell_tester(); // ... otros scripts de desarrollo }
Fuente: src/server/scripts/Development/leo_dev_scripts.cpp
Zone Script Examples
Los scripts de zona se organizan modularmente por región o mazmorra. Cada módulo implementa sus AddSC_*
específicos, permitiendo mantener un sistema escalable y organizado.
Ejemplo: Maelstrom
void AddMaelstromScripts() { AddSC_kezan(); AddSC_deepholm(); AddSC_lost_isle(); AddSC_boss_corborus(); // Stonecore AddSC_boss_azil(); // ... otros contenidos de la zona }
Fuente: src/server/scripts/Maelstrom/maelstrom_script_loader.cpp
Ejemplo: Eastern Kingdoms
void AddEasternKingdomsScripts() { AddSC_elwynn_forest(); AddSC_westfall(); AddSC_duskwood(); AddSC_boss_lord_overseer(); // ... otros contenidos de la zona }
Fuente: src/server/scripts/EasternKingdoms/eastern_kingdoms_loader.cpp
Ejemplo: Outland
void AddOutlandScripts() { AddSC_nagrand(); AddSC_shadowmoon_valley(); AddSC_hellfire_peninsula(); AddSC_boss_kaelthas(); // ... otros contenidos de la zona }
Fuente: src/server/scripts/Outland/outland_loader.cpp
Integration Summary
El sistema de carga de scripts del OlympusCore asegura que todos los contenidos —desde SmartScripts hasta scripts de desarrollo— se registren en el orden correcto, integrándose completamente con el motor del juego. Esto garantiza:
- Compatibilidad con la arquitectura TrinityCore
- Carga ordenada de scripts por categoría y zona
- Soporte para extensiones personalizadas y herramientas de desarrollo
- Mantenimiento de la coherencia de eventos, IA de criaturas y efectos de hechizos
Fuentes: src/server/game/Scripting/ScriptLoader.cpp
, src/server/scripts/Custom/custom_script_loader.cpp
Custom Enhancement Scripts
Estos scripts proporcionan características de calidad de vida y mejoras de gameplay específicas del servidor Olympus-Cata. Implementan NPCs interactivos, comandos y sistemas automáticos que extienden la funcionalidad base del juego.
Level Booster System
Permite a los nuevos jugadores alcanzar el nivel máximo con equipo, oro y hechizos asignados automáticamente. Incluye medidas anti-abuso mediante seguimiento de cuenta e IP.
- NPC:
npc_level_booster
– ofrece el servicio de boost - Login Announcement:
npc_level_boosterAnnouncer
- AI NPC:
gambler_passivesAI
OnGossipSelect: GiveLevel(85) ModifyMoney(50000000) learnSpell(...) StoreNewItemInBestSlots(...) CompleteQuest(...)
Fuentes: src/server/scripts/Custom/Mod_Level_Booster.cpp
Teleportation System
NPC de teletransporte que permite viajar rápidamente entre ciudades, mazmorras y raids, con validación de facción y estado de combate.
- Menu principal: Ciudades, Mazmorras, Raids, PvP
- Submenú de mazmorras y raids con portales de entrada
- Validación:
getAttackers().empty()
,GetTeam()
OnGossipHello: Faction-based menu Dungeon submenu Raid submenu City teleports
Fuente: src/server/scripts/Custom/Mod_Teleport.cpp
Global Chat System
Implementa un canal de comunicación mundial mediante el comando .world
con formato basado en rol y seguridad del jugador.
- SEC_PLAYER: Texto verde con iconos de facción
- SEC_MODERATOR: Azul/rojo con iconos de facción
- SEC_GAMEMASTER: Verde claro
- SEC_ADMINISTRATOR: Verde brillante
- SEC_CONSOLE: Cyan
Fuente: src/server/scripts/Custom/Mod_World_Chat.cpp
Cross-Faction PvE System
Permite que jugadores de la Alianza y la Horda participen juntos en PvE alineando temporalmente la facción de los jugadores según el líder del grupo.
Faction Alignment: OnLogin, OnUpdateZone getGroup()->getLeaderGUID() setFaction(leader->getFaction())
Fuente: src/server/scripts/Custom/Mod_Cfpve.cpp
Instance Reset System
Permite a los jugadores limpiar manualmente los lockouts de instancias mediante NPC.
CreatureScript: instance_Reset Unbind all instance saves
Fuente: src/server/scripts/Custom/npc_instance_reset.cpp
Profession Training System
NPC que enseña profesiones mediante tokens, con validación de nivel, límite de profesiones y skill cap.
- Item requerido:
MARK_ITEM (100605)
- Nivel mínimo: 80
- Máximo 2 profesiones principales
- Skill máximo: 525
Fuente: src/server/scripts/Custom/Mod_Profession.cpp
Login Announcement System
Proporciona notificaciones globales de conexión y desconexión de jugadores, filtrando miembros del staff y mostrando colores de facción.
Fuente: src/server/scripts/Custom/Mod_Announcer.cpp
Integration Patterns
- Registro de scripts mediante
AddSC_*
- Manejo de eventos:
OnLogin
,OnGossipHello
,OnGossipSelect
- Integración con base de datos:
LoginDatabase
yCharacterDatabase
- Interacción con el jugador:
ChatHandler
,GossipSystem
, métodos directos dePlayer
- Soporte de configuración:
sConfigMgr->GetBoolDefault
Game Content Implementation
Esta sección documenta la implementación de contenido específico del juego, incluyendo encuentros de raids, mecánicas de mazmorras y NPCs del mundo. Se centra en cómo el framework de scripting crea mecánicas complejas, IA personalizada y interacciones especializadas.
Content Implementation Architecture
- Game Data / Core Systems / Script Framework Layer / Content Layer
- Boss Encounters:
boss_sinestra.cpp
- World NPCs:
npc_*.cpp
- Custom Spells:
spell_*.cpp
- Achievements:
achievement_*.cpp
- Base Classes:
CreatureScript
,SpellScriptLoader
,ScriptedAI
,InstanceScript
- Systems: EventMap, SummonList, Spell System, Aura System, Creature Template, Instance Data
Fuente: src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_sinestra.cpp
Boss Encounter Structure
Los encuentros combinan AI de criaturas, scripts de hechizos y gestión de instancias para crear peleas multi-fase complejas.
- Custom Spells / Event Management / Boss AI / Add Management / SummonList
- Fases basadas en salud y recursos: Phase 0-3
- Habilidades principales:
SPELL_FLAME_BREATH
,NPC_TWILIGHT_WHELP
,NPC_SHADOW_ORB
Core Boss AI Pattern
Componente | Propósito | Métodos Clave |
---|---|---|
boss_sinestraAI | Lógica principal | UpdateAI(), EnterCombat(), Reset() |
EventMap events | Temporización de habilidades | ScheduleEvent(), ExecuteEvent() |
SummonList summons | Seguimiento de adds | Summon(), DespawnAll() |
Phase Variables | Gestión de estado | Health thresholds, custom flags |
Event Scheduling and Management
Se utiliza EventMap
para la temporización precisa de habilidades y fases.
- Eventos de combate:
EVENT_FLAME_BREATH
,EVENT_WRACK
,EVENT_SUMMON_WHELP
- Eventos de fase:
EVENT_SUMMON_CALEN
,EVENT_TWILIGHT_EXTINCTION
- Eventos utilitarios:
EVENT_MELEE_CHECK
,EVENT_WIPE
- Métodos clave:
events.ScheduleEvent()
,events.Update(diff)
,events.ExecuteEvent()
Add and NPC Implementation
Los adds requieren AI independiente mientras coordinan con el encuentro principal.
- Ejemplos:
npc_sinestra_calen
,npc_sinestra_twilight_whelp
,npc_sinestra_shadow_orb
,npc_sinestra_pulsing_twilight_egg
- Coordinación mediante
boss_sinestraAI
ySummonList
- Acciones:
DoAction()
,ACTION_START_EGG
,ACTION_WIPE
Custom Spell Implementation
Los encuentros utilizan SpellScriptLoader
para comportamientos de hechizos personalizados:
- Modificadores de aura:
spell_sinestra_wrack
,spell_sinestra_mana_barrier
- Overrides de targeting:
spell_sinestra_twilight_slicer
- Handlers de efectos:
spell_sinestra_twilight_extinction
- Métodos:
OnEffectApply
,OnEffectRemove
,OnEffectPeriodic
,OnObjectAreaTargetSelect
Achievement Integration
Se pueden incluir criterios de logros personalizados que rastrean la ejecución mecánica:
- Ejemplo:
achievement_i_cant_hear_you_over_the_sound_of_how_awesome_i_am
- Métodos:
OnCheck()
,AllowAchieve()
- Verificación de jugador y estado de la instancia
Script Registration and Loading
Todos los scripts de encuentros deben registrarse para ser reconocidos por el servidor.
- Función de registro:
AddSC_boss_sinestra()
- Instancias:
new boss_sinestra()
,new npc_sinestra_*()
,new spell_sinestra_*()
- Logros:
new achievement_*()
- Integración con ScriptLoader y runtime binding
Fuente: src/server/scripts/EasternKingdoms/BastionOfTwilight/boss_sinestra.cpp
Boss Encounters and Instance Scripts
Esta sección cubre la implementación de encuentros de jefes de raid y scripts de instancias dentro de OlympusCore. Se centra en frameworks de IA, gestión de fases, integración de hechizos y mecánicas de encuentros.
Boss Encounter Architecture
- Spell Systems / Instance Integration / Event Management
- Framework de Encuentros:
CreatureScript
,ScriptedAI
,BossAI
,EventMap
,Phase Management
,InstanceScript
- Frames de Encuentro (UI) / Achievement Data / SpellScriptLoader / AuraScript / Target Selection
Fuentes: boss_sinestra.cpp
, boss_morchok.cpp
Boss AI Implementation Patterns
Los jefes implementan clases heredando de CreatureScript
con IA interna derivada de ScriptedAI
o BossAI
.
- boss_sinestraAI: EventMap, SummonList, InstanceScript, fase, Reset(), EnterCombat(), UpdateAI(), DoAction()
- boss_ds_morchokAI: EventMap, KohcromSummoned, crystalCount, Reset(), EnterCombat(), DamageTaken(), UpdateAI()
Event-Driven AI System
Componente | Propósito | Ejemplo |
---|---|---|
events.ScheduleEvent() | Programar habilidades futuras | events.ScheduleEvent(EVENT_FLAME_BREATH, 25000) |
events.ExecuteEvent() | Procesar eventos en cola | while(uint32 eventId = events.ExecuteEvent()) |
events.SetPhase() | Gestión de fases del encuentro | events.SetPhase(PHASE_TWO) |
events.Reset() | Limpiar todos los eventos | Llamado en Reset() |
Phase Management Systems
Los encuentros multi-fase utilizan transiciones condicionadas:
- Phase0: Normal abilities (Flame Breath, Wrack, Shadow Orbs, Whelps)
- Phase1: Mana Barrier, Twilight Extinction, Summon Calen
- Phase2: Egg Vulnerability, Twilight Infusion
- Phase3: Final Phase, Enhanced Abilities
Phase Transition Logic
Chequeo de Fase | Condición | Acción |
---|---|---|
Basado en Salud | me->HealthBelowPct(30) | Trigger Phase 1 |
Basado en Recursos | me->GetPower(POWER_MANA) < 1 | Entrar Phase 2 |
Basado en Evento | eggs >= 2 | Progress to Phase 3 |
Basado en Tiempo | EVENT_CONTINUE_PHASE_2 | Return to Phase 1 |
Spell and Effect Integration
- Custom Spell Scripts: SpellScriptLoader, AuraScript
- Target Filtering / Line-of-sight / Health Conversion / Conditional Effects
- Ejemplos:
spell_sinestra_twilight_slicer
,spell_sinestra_mana_barrier
,spell_ds_resonating_crystal_explosion
Instance-Specific Mechanics
- InstanceScript: gestión central de estados
- Boss State: NOT_STARTED / IN_PROGRESS / DONE
- EnterCombat(), JustDied(), DoAction(), GetData()
- Integración de UI y tracking de logros
Multi-Creature Coordination
- Shared Health: dividir daño entre jefes (Morchok/Kohcrom)
- Synchronized Events: comunicación DoAction() cross-creature
- Add Management: SummonList para adds (Sinestra)
- Vehicle Systems: mecánicas de transporte (Earthen Vortex)
Trash Mob and Environment Systems
- Gestión de trash y elementos ambientales: NPCs dinámicos y triggers
- Ejemplos:
npc_ds_earthen_destroyer
,npc_ds_ancient_water_lord
,npc_ds_twilight_siege_captain
- AI avanzado: pathing, coordinación de combate, interacción ambiental
- AreaTrigger Scripts y eventos RP de instancia
Registration and Integration
Ejemplo de registro de encounter:
void AddSC_boss_sinestra()
{
new boss_sinestra();
new npc_sinestra_calen();
new npc_sinestra_twilight_spitecaller();
// ... additional creature scripts
new spell_sinestra_twilight_extinction();
new spell_sinestra_wrack();
// ... spell scripts
}
Fuente: boss_sinestra.cpp
, boss_morchok.cpp
World NPCs and Zone Scripts
Esta sección cubre la implementación de NPCs especiales y scripts de zona dentro de OlympusCore. Incluye NPCs que aparecen en múltiples zonas y proporcionan funcionalidades esenciales como seguridad, misiones, eventos y servicios especializados.
System Overview
- NPCs de mundo globales con funcionalidades centrales
- Implementación de seguridad, progresión de misiones, eventos y servicios
- Archivo principal:
npcs_special.cpp
con más de 20 tipos de NPCs especializados
NPC Script Architecture
- Core Script Types:
CreatureScript
,ScriptedAI
,ScriptedGossip
,npc_escortAI
- Categorías de NPCs: Security, Quest, Event, Service, Pet/Summon
- Ejemplos de NPCs:
npc_air_force_bots
,npc_doctor
,npc_sayge
,npc_mount_vendor
,npc_t12_mirror_image
- Registro de scripts:
ScriptLoader
yNPC Script Registry
Security and Area Control Systems
Air Force Bot Network
- Automatización de seguridad en zonas de no vuelo
- Detección y respuesta usando múltiples NPCs coordinados
- Componentes: Timer Management, Response System, Detection Layer
- Tipos de spawn:
SPAWNTYPE_TRIPWIRE_ROOFTOP
,SPAWNTYPE_ALARMBOT
- Acciones:
SummonGuard()
,AttackStart()
,AURA_CHECK_TIMER
,playerCheckMap
- SpawnAssociation Table: mapeo de NPCs activadores a guardianes según facción y zona
Guardian NPCs
- Control de acceso instantáneo a zonas prohibidas
- Propiedades:
UNIT_FLAG_NON_ATTACKABLE
,UpdateAI()
,isAttackReady()
- Hechizos:
SPELL_DEATHTOUCH
,resetAttackTimer()
Quest and Event NPCs
Triage System
- Simulación de emergencia médica para líneas de misiones específicas
- Coordinación entre doctores y pacientes dinámicos
- NPCs involucrados:
npc_doctor
,npc_injured_patient
- Mecánicas:
SummonPatientTimer
,ModifyHealth(-5)
,PatientSaved()
,PatientDied()
- Hasta 15 pacientes rastreados; falla automática si mueren más de 5
Darkmoon Faire Fortune Teller
- NPC
npc_sayge
ofrece buffs de estadísticas mediante diálogo interactivo - Escenarios de elección y hechizos asociados:
SPELL_DMG
,SPELL_RES
,SPELL_ARM
,SPELL_SPI
- Tiempo de reutilización: 2 horas
Service and Vendor NPCs
Mount Vendor System
- Vendedores de monturas basados en reputación y raza
- Ejemplo de asignaciones: RACE_HUMAN → Stormwind, RACE_DWARF → Ironforge, RACE_ORC → Orgrimmar, RACE_TAUREN → Thunder Bluff
- Funciones principales:
getRace()
,GetReputationRank()
,ADD_GOSSIP_ITEM
,SEND_GOSSIP_MENU
Rogue Trainer Enhancements
- Capacidades adicionales: reset de talentos, objetos de misión especiales
Pet and Summon NPCs
Mirror Image System
- Copias inteligentes de magos que ayudan en combate según talentos
- Funciones:
InitializeAI()
,GetPrimaryTalentTree()
- Hechizos:
SPELL_GLYPH_OF_MIRROR_IMAGE
,SPELL_ARCANE_BLAST
,SPELL_FIREBALL
,SPELL_FROSTBOLT
Snake Trap Serpents
- NPCs invocados por cazadores con comportamiento diferenciado y aplicación de venenos
- Timers: VIPER_TIMER 3000ms, VENOMOUS_SNAKE_TIMER 1500ms
- Hechizos:
SPELL_MIND_NUMBING_POISON
,SPELL_CRIPPLING_POISON
,SPELL_DEADLY_POISON
NPC Registration and Loading
- Todos los NPCs de mundo se registran mediante el sistema central de ScriptLoader
- Clases heredan de
CreatureScript
y definen IA específica con métodos virtuales - Métodos clave:
GetAI()
,OnGossipHello()
,OnQuestAccept()
,UpdateAI()
,SpellHit()
- Disponibilidad inmediata al iniciar el servidor y spawn en cualquier zona según funcionalidad
Custom Features and Extensions
Esta sección cubre el sistema de carga de scripts personalizados y el marco de extensiones para mejoras y modificaciones específicas del servidor en OlympusCore. Permite ampliar la funcionalidad base de TrinityCore con características únicas para Olympus.
Custom Script Loading Framework
- Mecanismo centralizado de carga integrado con el scripting core
- Punto de entrada principal:
AddCustomScripts()
durante la inicialización del servidor
Script Registration Architecture
ScriptLoader::LoadDatabase()
→AddCustomScripts()
- Categorías de scripts registrados:
- Arena & PvP:
AddSC_solo_queue()
,AddSC_arena_spectator()
,AddSC_arena_anti_draw()
- Player Services:
AddSC_npc_level_booster()
,AddSC_npc_teleport()
,AddSC_npc_profession()
- Transmogrification:
AddSC_PWS_Transmogrification()
,AddSC_CS_Transmogrification()
- Communication:
AddSC_world_chat()
,AddSC_mod_announcer()
,AddSC_auto_stream_announcer()
- Level Progression:
AddSC_LearnSpellsOnLevelUp()
,AddSC_LevelUpScripts()
,AddSC_skip_StarterArea()
- Administrative:
AddSC_RestrictGMIsland()
,AddSC_instance_Reset()
,AddSC_custom_vip_system()
- Utility:
AddSC_SpellRegulator()
,AddSC_StabilityTest()
,AddSC_npcbuff()
Custom Script Categories
Categoría | Scripts | Propósito |
---|---|---|
Arena & PvP | solo_queue, arena_spectator, arena_anti_draw | Mejoras en PvP y espectador |
Player Services | npc_level_booster, npc_teleport, npc_profession, npc_reset_quest_status, npcbuff | Mejoras y conveniencia para personajes |
Transmogrification | PWS_Transmogrification, CS_Transmogrification | Modificación de apariencia de equipo |
Communication | world_chat, mod_announcer, auto_stream_announcer | Sistemas de mensajería global |
Level Progression | LearnSpellsOnLevelUp, LevelUpScripts, skip_StarterArea | Modificaciones de avance de personajes |
Administrative | RestrictGMIsland, instance_Reset, custom_vip_system | Gestión de servidor y funciones VIP |
Utility | SpellRegulator, StabilityTest, npcbuff | Depuración y optimización del servidor |
Integration with Core Systems
- Integración completa con TrinityCore mediante patrón estándar de registro de scripts
- Convención de nombres:
AddSC_*
- Llamadas durante la inicialización del servidor para registrar scripts personalizados
Extension Development Framework
- Fases del registro de scripts:
- Declaración: Funciones declaradas en headers
- Registro: Funciones llamadas dentro de
AddCustomScripts()
- Implementación: Archivos de script individuales definen la lógica
- Tipos de scripts soportados:
CreatureScript
: IA de NPCsPlayerScript
: Eventos de jugadorWorldScript
: Eventos globalesCommandScript
: Comandos personalizadosSpellScript
: Modificaciones de hechizos
Modular Enhancement Architecture
- Activación selectiva de características mediante comentarios o preprocesador C++
- Separación limpia: cada característica en un archivo independiente
- Integración consistente: mismos patrones de registro y eventos
- Mantenimiento aislado: actualizaciones individuales sin afectar otros scripts
- Ejemplos de activación:
- Desactivado:
/* AddSC_Skirmish_npc(); */
- Activo:
AddSC_solo_queue();
- Condicional:
#ifdef FEATURE_FLAG AddSC_custom_feature(); #endif