# MaNGOS

MaNGOS (Massively Network Game Object Server) es un proyecto de Código Abierto escrito en el lenguaje C/C++, distribuido bajo la licencia GPL de GNU versión número dos, es gratuito y posee la capacidad de ser modificado bajo los parámetros de la licencia antes mencionada, además es un programa multiparadigma, lo que quiere decir que se encuentra disponible para varios sistemas operativos, entre los que destacan Microsoft Windows, Linux, MacOS y Solaris, entre otros más.
El objetivo principal del proyecto consistía en diseñar un servidor emulado para el videojuego World of Warcraft propiedad de la compañía Blizzard Entertainment, usando git como controlador del versiones para el mantenimiento del repositorio principal del código del emulador.
El emulador existe y existirá únicamente con fines educativos y de no monetización de sus servicios, como también para la difusión de la filosofía del software libre y de código abierto. La comunidad de desarrollo no pretende ni ha pretendido obtener ganancias de sus operaciones, sin embargo admite donaciones para el mantenimiento de su página web.
El código del mismo está escrito en su mayoría en el lenguaje de programación C/C++ para el desarrollo del núcleo principal del emulador y utiliza el lenguaje SQL para la administración de sus bases de datos.

## Historia

El proyecto fue creado originalmente por un programador alemán apodado "TheLuda", sumado a esto, una gran parte de sus desarrolladores han sido de procedencia rusa.
En el año 2012 y debido a una disputa interna de sus miembros el proyecto fue dividido en dos secciones: CMaNGOS y GetMaNGOS. Si bien gran parte de los desarrolladores han ido a parar al primero ya citado, varios de ellos han tenido poca actividad dentro de lo que cabe en la comunidad y su permanencia posee un significado simbólico más que nada. Sumado a esto, proyectos satelitales del mismo tales como ScriptDev2, ACID y UDB han decidido apoyar a CMaNGOS (Continued MaNGOS), por lo cual este último proyecto es considerado el heredero legítimo de las operaciones de la comunidad inicial.
A pesar de la disolución del proyecto original, CMaNGOS, como se hace llamar su sucesor, no ha dejado de recibir mantenimiento por parte de diversos contribuyentes a lo ancho y largo del mundo, siendo así y hasta el día de hoy uno de los emuladores más usados dentro de la escena de la emulación de World of Wacraft, solo por detrás de TrinityCore y AzerothCore. Además de lo ya mencionado anteriormente, MaNGOS es considerado como el predecesor propiamente dicho de todos los emuladores de código abierto existentes en la actualidad para el videojuego World of Wacraft, ya que desde su código han partido diversas comunidades de desarrollo tales como SkyFire, AzerothCore, SunwellCore, OregonCore o ArkaniaCORE para las versiones 3.x.x en adelante del cliente de juego y CMaNGOS/VMaNGOS para las versiones 1.x.x o 2.x.x. Por esta misma razón, muchos desarrolladores dentro de la emulación del MMORPG consideran a MaNGOS el "padre" de la emulación de código abierto para World of Warcaft.
Ahora bien, la legalidad del proyecto es bastante clara, al ser fruto de la emulación (lo que quiere decir que es ajeno a Blizzard Entertainment) no contiene información o datos que violen propiamente los derechos de autoría, sumado a esto mismo, el programa está salvaguardado bajo una licencia que le permite su libre distribución y modificación, con lo cual queda completamente excluido de toda duda sobre su posible infracción de los Derechos de Autor.

## Operación

El programa principal o emulador es el que se ocupa básicamente de gestionar las conexiones dentro de los clientes de juego, extrayendo datos desde la Base de Datos hacia el servidor emulado y administrando el Servidor de Juego en su conjunto para hacer completamente funcional el mundo en el que interactúan los jugadores. La Base de Datos en la que se apoya el proyecto MaNGOS puede ser del tipo MySQL o PostgreSQL, según la disposición del usuario. La estructura de la misma es desarrollada por el propio equipo del proyecto y la comunidad de contribuyentes.
En cuanto al contenido, existen varios equipos de desarrollo que, con el tiempo, distribuyen versiones cada vez más actualizadas de la misma, tanto para el emulador con el que se esté desarrollando al momento como también para las demás versiones del mismo emulador.
Por medio de su repositorio oficial es posible descargar y compilar el código fuente del programa, utilizando un compilador específico para C/C++ como lo puede ser visual studio. Además, existe una sección especial dentro del sitio web oficial del proyecto en donde los usuarios pueden subir sus propias compilaciones, dejándolas a disposición de otros usuarios de la comunidad.

### Motor de secuencias de comandos

MaNGOS implementa su propio motor de secuencias de comandos que le permite crear módulos complejos de scripts independientes entre sí, los cuales son responsables de, por ejemplo, la inteligencia artificial de las criaturas del juego, los escenarios de en un campo de batalla concreto, las mazmorras y bandas del mismo, etc. Para ello y durante la inicialización del servidor se carga una biblioteca dinámica que contiene aquellos scripts previamente compilados. Esto permite cambiar arbitrariamente muchos aspectos dentro del mundo de juego (por ejemplo, el comportamiento de las criaturas) sin tener que recompilar el núcleo principal del emulador.

#### UDB

La Base de Datos Unificada (Unified DataBase) es un proyecto de código abierto dentro de la misma comunidad creado originalmente para proporcionar una base de datos al emulador principal.
Si bien la estructura (de tipo Mysql) es la misma desarrollada por el equipo de MaNGOS y su comunidad, UDB es un proyecto independiente resultante de la fusión de otras dos comunidades de desarrollo distintas: SilverDatabase y MoDB, esto en septiembre del año 2007.
La información dentro de la Base de Datos son en su mayoría textos, información de personajes, misiones, información general de los jugadores, objetos del juego, etc. El proyecto se actualiza constantemente gracias a los reportes y arreglos de sus propios usuarios, quienes ayudan informando sobre errores variados, como bien puede ser información faltante dentro de las tablas o también mal insertada y con valores no correspondientes a los originales, entre otras cosas más.

##### ScriptDev2 y ACID

ScriptDev2 y ACID son dos proyectos de código abierto cuyo objetivo es dotar de inteligencia artificial a todos los aspectos del juego, tales como criaturas, objetos, mazmorras, bandas, etc. Mientras que ACID está escrito principalmente en SQL, por lo cual añade información directa a la base de datos, ScriptDev2 es usado cuando hay que enfrentarse a problemas un poco más complejos dentro del emulador, siendo este último escrito en el lenguaje C/C++.

## Ramas y divisiones del proyecto

Debido al desacuerdo generalizado con el cambio drástico en la metodología de desarrollo, el equipo original se terminó dividiendo y la mayoría de los miembros continúan el desarrollo de MaNGOS bajo el proyecto de CMaNGOS (Continued MaNGOS), siendo su principal sitio web cmangos.net, sin embargo, una parte más pequeña retuvo el control sobre el antiguo repositorio de MaNGOS y el sitio web getmangos.eu.
Debido a la facilidad y el atractivo de crear tu propio fork o bifurcación del proyecto, existen alrededor de mil forks de distintas personas en Github. Por lo general, los desarrolladores de forks añaden correcciones menores a diferentes servidores, pero también existen algunos que poseen cambios colosales, que luego son compartidos con el repositorio principal.

### TrinityCore

Uno de los forks o bifurcaciones más grandes y en desarrollo constante más activos dentro del proyecto MaNGOS hasta el día de hoy es TrinityCore. Algunos contribuyentes externos fuera del equipo de desarrolladores oficiales de MaNGOS no estaban satisfechos con su política de desarrollo interno: los parches de actualizaciones sugeridos por la comunidad no se consideraban aptos para su inclusión dentro del repositorio principal, lo que a menudo obstaculizaba el desarrollo del emulador. Al final, se decidió combinar MaNGOS y ScriptDev2 en un solo proyecto, mismo que más tarde se denominaría bajo el nombre de TrinityCore, además de lo ya mencionado anteriormente, desarrollaron otro proyecto aparte llamado Trinity Database, el cual proporcionaría una base de datos para el nuevo emulador.

### MaNGOS Cero

MaNGOS Zero es un proyecto basado en el código de MaNGOS (más concretamente, es un downgrade de la rama 0.12 de MaNGOS) el cual pretende crear una aplicación cliente-servidor compatible con el juego clásico original de World of Warcraft (versión 1.12.X).
El proyecto es ajeno a MaNGOS, por tanto no es oficial ya que su código no está incluido en la rama oficial dentro de los repositorios de MaNGOS, sin embargo es considerado legítimo ya que algunos desarrolladores de MaNGOS contribuyen con el desarrollo activo del proyecto. ZPDB (ZeroProject Database) es la comunidad ligada a MaNGOS Zero que proporciona contenido para la Base de Datos del mismo, los scripts relacionados son proporcionados por el proyecto scriptdev0 (downgrade de scriptdev2), mientras que en lo que respecta a ACID, también se distribuye oficialmente una versión para MaNGOS Zero de forma periódica (junto con la versión normal de ACID).
El principal heredero de ManGOS Zero es la rama mangos-classic de CMaNGOS, que también cuenta con el apoyo del proyecto ClassicDB para contenidos de bases de datos. A partir del año 2017, la comunidad de MaNGOS sigue apoyando el proyecto, tratando de mejorar la calidad del emulador como el contenido del lado de la Base de Datos, y de paso corrigiendo problemas variados que se puedan presentar en la jugabilidad, con reportes dados por los propios usuarios.

## Versiones

* MaNGOS:
** Versión 0.0.1 – Endeavour (13 de septiembre del 2005)
** Versión 0.0.2 – Library (31 de octubre del 2005)
** Versión 0.0.3 – Mango Carpet (No distribuido públicamente)
** Versión 0.1 – Lightbringer (4 de diciembre del 2005)
** Versión 0.5 – Stable Master (20 de septiembre del 2006)
** Versión 0.6 – Black Dragonflight (29 de enero del 2007)
** Versión 0.7 – Eye of the Storm (24 de agosto del 2007)
** Versión 0.8 – Innkeeper (17 de octubre del 2007)
** Versión 0.9 – Flight Master (18 de diciembre del 2007)
** Versión 0.10 - (17 de abril del 2008)
** Versión 0.11 - (22 de julio del 2008)
** Versión 0.12 - (30 de octubre del 2008)
** Versión 0.13 - (10 de junio del 2009)
** Versión 0.14 - (6 de octubre del 2009)
** Versión 0.15 - (10 de enero del 2010)
** Versión 0.16 - (1 de julio del 2010)
* CMaNGOS:
** Versión 0.17 - (17 de noviembre del 2012)
** Versión 0.18 - (3 de septiembre del 2015)