# wow private server

Déployer un serveur privé pour World Of Warcrfat via [cmangos](https://cmangos.net) compatible versions Classic (1.12.x), Burning Crusade (2.4.3) et Wrath Of The Litch King (3.3.5a)

## Pre requis

- Linux 🐧
- Docker :whale:
- Clients:

|                  Game name                 | Game version |  Keyword  |  client download  |
|--------------------------------------------|--------------|-----------|-------------------|
|             World of Warcraft®             |  **v1.12.x** | `classic` | https://archive.org/download/World_of_Warcraft_Client_and_Installation_Archive/ISO/WoW-1.12.1_install.rar |
|   World of Warcraft: The Burning Crusade®  |  **v2.4.3**  |   `tbc`   | https://archive.org/download/World_of_Warcraft_Client_and_Installation_Archive/ISO/WoW-2.4.3_install.rar |
| World of Warcraft: Wrath of the Link King® |  **v3.3.5a** |  `wotlk`  | somewher in the web ;) |

## Comment ça marche ?

3 services sont nécessaires:
- Mangosd : c'est l'émulateur qui simule le serveur WOW ainsi que l'authentification.
- Realmd : C'est le processus qui gère le 'realm', le serveur de jeu avec les évènements et les aasets.
- Base de données qui persiste aussi bien les comptes que les personnages s'y rattachant ainsi que leur progressions respectives.

## Configuration

- Renseigner dans le fichier `.env` :
    - Le chemin absolue vers le client WOW (Classic, tbc ou wotlk)
    - La version de WOW correspondante au client ()
    - La TimeZone (TZ)
    - Mots de passe database

## Installation

### Extraire les maps du client 
```bash
./docker/run.sh extract
```

> Choisir l'import en HD avec le plus de CPU possible car c'est long ☕

### Builder les images

```bash
./scripts//build_docker_image.sh wotlk 2
#                    version / nb threads
```

> L'image builder récupère le code source de cmangos pour le compiler, c'est long aussi ☕

### Peupler la base de données

- Lançer la base de données:
```bash
docker compose up database
```

> Laisser tourner et ouvrir un autre terminal

- Dans un autre terminal, lançer le script d'import des données du jeu:
```bash
./docker/run.sh init-db
```

> Patienter le temps de la mise en place de la base de données ☕

### Création du Realm

```bash
./scripts/create_realm.sh <NOM_DU_REALM> <IP_ADRESS_SERVER>
```

<!-- ```bash
docker exec  <wow-mangosd> 

# delete realm par défaut
DELETE FROM realmlist WHERE id = 1;
# Créer son realm
INSERT INTO realmlist (id, name, address, port, icon, realmflags, timezone, allowedSecurityLevel)
    VALUES ('1', 'NOM', '127.0.0.1', '8085', '1', '0', '1', '0');
```

> Modifier le `NOM`, l'adresse `IP` du serveur (sauf si sur la même machine que le client) et la timezone si différent de Paris -->

### Inteface pour créer les comptes 

Dans le dossier `registration/` se trouve une interface pour créer des comptes et gérer les changements de mots de passe

[WOWSimpleREGISTRATION](/registration/README.md)

:warning: Utiliser un user admin (gmlevel 3) dans `registration/application/config/config.php` pour se connecter au processus d'écoute de `mangosd` (via SOAP) à configurer dans config/mangosd/mangosd.conf (lignes 1731 à 1735)

### TO DO 

- [x] admin create account OK, change password OK
- [ ] make registration get vars from .env
- [ ] script install ask version and client path and do all