# MaNGOS

MaNGOS (Massively Network Game Object Server) era un progetto open source scritto in C++ facendo uso della programmazione orientata agli oggetti, volto a creare un applicativo server per MMORPG. Il progetto è sotto licenza GPL, e il codice sorgente delle nuove versioni viene costantemente distribuito nel servizio git di GitHub. Attualmente il progetto supporta il protocollo di rete del mmorpg World of Warcraft. MaNGOS non è considerato un emulatore server di uno specifico mmorpg, bensì è un progetto educativo per la programmazione ad oggetti in C++, a cui tutti gli utenti possono apportare il proprio contributo, aumentando così il patrimonio cognitivo di tutta la community di utenti/sviluppatori. Il progetto è stato creato originariamente da un programmatore tedesco, ma ha goduto di contributi da parte di sviluppatori provenienti da tutto il mondo (una buona parte è stata di nazionalità russa).
Nell'anno 2012, a causa di una lite interna tra il creatore del progetto e i suoi sviluppatori, il progetto si è fermato dividendosi in due progetti differenti: CMaNGOS e getMaNGOS. La maggior parte degli sviluppatori di MaNGOS hanno aderito al progetto di CMaNGOS, nonostante alcuni hanno di fatto aderito solo simbolicamente in quanto già inattivi da tempo (fra cui spicca la figura di VladimirMangos). Inoltre tutti i progetti satelliti di MaNGOS più importanti, come ScriptDev2, ACID e UDB, hanno deciso di supportare CMaNGOS. Per questi motivi CMaNGOS viene considerato dal grosso della comunità di MaNGOS come l'erede "legittimo" del progetto.
Nonostante il progetto originale si sia fermato e CMaNGOS, il suo principale erede, non gode attualmente di una comunità di sviluppatori attivi molto vasta, MaNGOS è di fatto il progetto su cui sono basati attualmente i framework per l'emulazione di server per World of Warcraft più comuni. Si pensi infatti al fatto che il framework TrinityCore è basato su MaNGOS, e rappresenta il framework più comunemente usato al giorno d'oggi per l'emulazione di World of Warcraft. Contrariamente alla natura originale dei progetti MaNGOS e TrinityCore, nati come progetti educativi ed a scopi puramente didattici, la quasi totalità dei server privati di World of Warcraft attualmente utilizza TrinityCore (o progetti da esso derivati, come SkyFire, AzerothCore, SunwellCore, OregonCore o ArkaniaCORE) per le versioni pari o superiori alla 3.x del client di gioco originale, e CMaNGOS per le versioni 1.x o 2.x del client di gioco originale. Per questo motivo molti sviluppatori MMORPG ritengono MaNGOS il "padre" dell'emulazione open source di World of Warcaft.

## Ulteriori informazioni

Tramite il repository ufficiale è possibile scaricare il pacchetto di sorgenti del programma, in modo che chiunque possa creare i binaries per il proprio sistema operativo tramite un apposito compilatore C++. Sul sito ufficiale del progetto esiste una sezione apposita in cui gli utenti possono inserire le proprie compilazioni, rendendole disponibili agli altri utenti.

### Funzionamento

Il programma principale si occupa fondamentalmente di gestire le connessioni dai client, estrapolare i dati dal database e gestire il mondo del mmorpg in questione. Il database su cui si appoggia il progetto MaNGOS è di tipo MySQL o PostgreSQL. La struttura del database è sviluppata dallo stesso team del progetto; per quanto riguarda i contenuti, esistono diversi team di sviluppo che, nel tempo, distribuiscono versioni sempre più aggiornate di database per MaNGOS ed i MMORPG da esso supportati.

#### UDB

Il UDB (o Unified Database) è un progetto open source nato per fornire una base dati al progetto MaNGOS. La struttura del database (di tipo MySQL) rimane comunque quella creata dal team di sviluppo di Mangos. Il UDB è un progetto nato dalla fusione di due team di sviluppo, nel mese di settembre 2007: il SilverDatabase e il MoDB.
I dati riguardano tutto ciò che si può trovare all'interno del mmorpg per cui è predisposto MaNGOS. I dati presenti nel database riguardano quindi fondamentalmente i PnG, gli item e le quest che devono essere presenti nel gioco.
Il progetto è costantemente aggiornato grazie alle segnalazioni create dagli utenti stessi, i quali, notando determinate mancanze in fase di test, possono segnalare queste ultime al team (o agli altri utenti), oppure provvedere a sviluppare i dati mancanti. Successivamente questi dati (o patch) potranno essere sottoposti all'attenzione degli sviluppatori, i quali decideranno se includerli all'interno della prossima release ufficiale. Le patch vengono sviluppate in linguaggio SQL.

#### ScriptDev2 & ACID

ScriptDev2 e ACID sono dei progetti open source il cui scopo è fornire un'intelligenza artificiale ai ad ogni aspetto del gioco. Mentre ACID è scritto in SQL, quindi aggiunge dei contenuti al database, quando si è davanti a qualcosa di troppo complesso si ricorre a ScriptDev2 che è scritto in C++.

### Patch

Affiancati allo sviluppo principale del programma, esistono diversi progetti di estensione portati avanti da utenti volontari. Queste estensioni (o patch) possono correggere gli aspetti più disparati del codice nativo del programma. Solitamente, col passare del tempo, se queste patch risultano stabili e affidabili, vengono integrate nel codice nativo di mangos. Ad esempio, con la release della Milestone "Eye of the Storm", è stata integrata la patch "Vmaps" o "LineOfSight", che permette al programma di gestire correttamente gli ambienti tridimensionali estratti dal client di gioco.
Solo le patch in stile "blizzlike" vengono integrate nel codice ufficiale, altre patch come il gruppo tra giocatori di fazione opposte (ally e orda) non vengono integrate nel codice ufficiale del MaNGOS poiché non sono nello stile blizzlike, ma vengono comunque rese disponibili nel forum per chi volesse usufruirne.

### MaNGOS Zero

MaNGOS Zero è un progetto basato sul codice di MaNGOS (più esattamente si tratta di un downgrade della branch 0.12 di MaNGOS) che mira a realizzare un applicativo game-server compatibile con l'originale client di World of Warcraft classico (versione 1.12.X), privo pertanto di alcuna espansione. Il progetto viene considerato "friendly" da MaNGOS: il progetto non è quindi ufficiale poiché il codice di quest'ultimo non è incluso nella branch ufficiale di MaNGOS, ma è considerato "amichevole" poiché alcuni sviluppatori del MaNGOS (tra cui VladimirMangos) contribuiscono con lo sviluppo di MaNGOS Zero.
Il relativo progetto che si occupa di fornire contenuti per il database di MaNGOS Zero è ZPDB (ZeroProject Database), i relativi script sono forniti dal progetto scriptdev0 (downgrade di scriptdev2) mentre per quanto riguarda ACID viene periodicamente distribuita ufficialmente (assieme alla normale versione di ACID) anche una versione per MaNGOS Zero.
Principale erede di ManGOS Zero è la branch mangos-classic di CMaNGOS, supportata anche dal progetto ClassicDB per i contenuti del database.
Al 2017 la community di https://www.getmangos.eu/ sta continuando a supportare un progetto didattico, cercando di migliorare la qualità del Core, dei contenuti lato database e correggendo i problemi, interagendo direttamente dai feedback degli utenti della community che testano autonomamente le modifiche.

## Roadmap

MaNGOS:
* Milestone 0.0.1 – Endeavour (13 settembre, 2005)
* Milestone 0.0.2 – Library (31 ottobre, 2005)
* Milestone 0.0.3 – Mango Carpet (Non distribuito pubblicamente)
* Milestone 0.1 – Lightbringer (4 dicembre, 2005)
* Milestone 0.5 – Stable Master (20 settembre, 2006)
* Milestone 0.6 – Black Dragonflight (29 gennaio, 2007)
* Milestone 0.7 – Eye of the Storm (24 agosto, 2007)
* Milestone 0.8 – Innkeeper (17 ottobre, 2007)
* Milestone 0.9 – Flight Master (18 dicembre, 2007)
* Milestone 0.10 - (17 aprile 2008)
* Milestone 0.11 - (22 luglio 2008)
* Milestone 0.12 - (30 ottobre 2008)
* Milestone 0.13 - (10 giugno 2009)
* Milestone 0.14 - (6 ottobre 2009)
* Milestone 0.15 - (10 gennaio 2010)
* Milestone 0.16 - (1º luglio 2010)
CMaNGOS:
* Milestone 0.17 - (17 novembre 2012)
* Milestone 0.18 - (3 settembre 2015)