Ceci est une ancienne révision du document !
Installer un serveur DAoC sous Linux
Les infos contenues dans cet article fonctionnent avec Ubuntu 20.04. Le moteur de serveur de jeu utilisé est développé en C#. Il faut donc installer un environnement mono suffisamment récent et à jour pour le faire fonctionner. On va voir ici les étapes pour faire fonctionner tout ce bazar. On aura besoin des composants ci-dessous :
- base de données : MariaDB
- framework .NET/C# : mono
- moteur de jeu : fork de Dawn of Light : DOLSharp-1127
- base de données du jeu (mobs, sorts, etc) : Eve Of Darkness
Packages à installer
apt install mono-complete mono-devel git unzip mariadb-server nuget
Création d'un utilisateur dol dédié :
On créé un user dol dont le home directory /home/dol servira de référence pour toutes les commandes passées.
Création de la base de données :
Après avoir installé MariaDB on peut créer la base de données (UTF8, important), l'utilisateur et on ajuste les droits.
CREATE DATABASE dol CHARACTER SET utf8; CREATE USER 'dol'@'%' IDENTIFIED BY 'YourPassword'; GRANT SELECT , INSERT , UPDATE , CREATE , INDEX , ALTER , CREATE TEMPORARY TABLES , CREATE VIEW , SHOW VIEW , CREATE ROUTINE, ALTER ROUTINE, EXECUTE, DROP, DELETE \ ON `dol` . * TO 'dol'@'%' IDENTIFIED BY 'YourPassword';
Import des données :
Plusieurs bases de données sont disponibles, certaines plus ou moins à jour ou fidèles par rapport aux serveurs officiels. Ici on part sur la base Eve of Darkness qui est un énième fork mais qui est plutôt fidèle à ce qu'on trouve sur https://camelot.allakhazam.com/. Je détaille comment récupérer et importer les données, c'est pas forcément très intuitif :
git clone https://github.com/Eve-of-Darkness/db-public.git cd db-public mv src/scripts/config/config.example.yml src/scripts/config/config.yml cd src/scripts/bin/linux/ ./concat mysql -u dol -p dol < ./public-db.sql
Récupération et compilation du moteur de jeu
Encore une fois ce n'est pas forcément très bien documenté et on ne cross-compile pas du C# sous Linux tous les jours. On récupère le fork DOLsharp-1127 qui permet de faire fonctionner les clients les plus récents ( > version 1.124). Si vous souhaitez faire fonctionner des clients plus anciens il faut utiliser le dépôt https://github.com/Dawn-of-Light/DOLSharp. Celui-ci est peut-être parfois plus à jour mais ne supporte correctement que la version 1.109.
Avant de lancer la compilation, on patche pour permettre aux joueurs d'ouvrir une fenêtre de train à n'importe quel endroit dans le jeu. C'est un choix personnel non obligatoire. Le champ à modifier dans la table ServerProperty est allow_train_everywhere (⇒ valeur : True / False).
mkdir work/ git clone https://github.com/Los-Ojos/DOLSharp-1127 cd DOLSharp-1127 sed -i '/SharpZipLib/a <package id="MySql.Data" version="6.10.9" targetFramework="net45" />' DOLServer/packages.config nuget restore DOLServer/packages.config -SolutionDirectory ./ sed -i 's/if (client.Account.PrivLevel == (int)ePrivLevel.Player \&\& (trainer == null || trainer.CanTrain(client.Player) == false))/if (\!DOL.GS.ServerProperties.Properties.ALLOW_TRAIN_ANYWHERE \&\& client.Account.PrivLevel == (int)ePrivLevel.Player)/g' GameServer/commands/playercommands/train.cs sed -i "s/if (client.Account.PrivLevel == (int)ePrivLevel.Player)/if (\!DOL.GS.ServerProperties.Properties.ALLOW_TRAIN_ANYWHERE \&\& client.Account.PrivLevel == (int)ePrivLevel.Player)/g" GameServer/packets/Client/168/PlayerTrainRequestHandler.cs sed -i '/BACKUP_DELETED_CHARACTERS/a /// <summary>\n/// Allow players to /train without having a trainer present\n/// </summary>\n[ServerProperty("classes", "allow_train_anywhere", "Allow players to use the /train command to open a trainer window anywhere in the world?", true)]\npublic static bool ALLOW_TRAIN_ANYWHERE { get; set; }' GameServer/serverproperty/ServerProperties.cs # Compilation MONO_IOMAP=case msbuild /p:Configuration=Release "Dawn of Light.sln" ln -s /home/dol/work/DOLSharp-1127/Release /home/dol/live
On créé un lien symbolique vers le moteur compilé, c'est plus simple. Lors de la première compilation il est normal d'avoir des erreurs. Avant la première exécution du moteur il faut créer un répertoire config avec le fichier serverconfig.xml dont voici le contenu ci-dessous. Les paramètres importants sont :
EnableUPNP qui doit être à False ; la chaîne DBConnectionString qui doit contenir les infos de connexion à la base de données. Le DBType est quant à lui positionné à MySQL (bien qu'on utilise MariaDB).
dol@dolct:~$ cat /home/dol/live/config/serverconfig.xml <?xml version="1.0" encoding="utf-8"?> <root> <Server> <Port>10300</Port> <IP>0.0.0.0</IP> <RegionIP>0.0.0.0</RegionIP> <RegionPort>10400</RegionPort> <UdpIP>0.0.0.0</UdpIP> <UdpPort>10400</UdpPort> <EnableUPnP>False</EnableUPnP> <DetectRegionIP>True</DetectRegionIP> <ServerName>Dawn Of Light</ServerName> <ServerNameShort>DOLSERVER</ServerNameShort> <LogConfigFile>./config/logconfig.xml</LogConfigFile> <ScriptCompilationTarget>./lib/GameServerScripts.dll</ScriptCompilationTarget> <ScriptAssemblies>System.dll,System.Xml.dll</ScriptAssemblies> <EnableCompilation>True</EnableCompilation> <AutoAccountCreation>True</AutoAccountCreation> <GameType>Normal</GameType> <CheatLoggerName>cheats</CheatLoggerName> <GMActionLoggerName>gmactions</GMActionLoggerName> <InvalidNamesFile>./config/invalidnames.txt</InvalidNamesFile> <DBType>MySQL</DBType> <DBConnectionString>Server=localhost;Database=dol;User ID=dol;Password=YourPassword;Treat Tiny As Boolean=False</DBConnectionString> <DBAutosave>True</DBAutosave> <DBAutosaveInterval>5</DBAutosaveInterval> <CpuUse>1</CpuUse> </Server> </root>
Customisation de la base de données
UPDATE `dol`.`ServerProperty` SET `Value`='True' WHERE `Key`='disable_tutorial'; UPDATE `dol`.`ServerProperty` SET `Value`='Bienvenue sur le serveur DAoC NDLP !' WHERE `Key`='motd'; UPDATE `dol`.`ServerProperty` SET `Value`='Bienvenue sur le serveur DAoC NDLP !' WHERE `Key`='starting_msg'; UPDATE `dol`.`ServerProperty` SET `Value`='1.5' WHERE `Key`='xp_rate'; UPDATE `dol`.`ServerProperty` SET `Value`='1' WHERE `Key`='starting_level'; UPDATE `dol`.`ServerProperty` SET `Value`='1.5' WHERE `Key`='money_drop'; UPDATE `dol`.`ServerProperty` SET `Value`='True' WHERE `Key`='allow_all_realms'; UPDATE `dol`.`ServerProperty` SET `Value`='True' WHERE `Key`='allow_all_realms_df'; UPDATE `dol`.`ServerProperty` SET `Value`='0.30' WHERE `Key`='health_regen_rate'; UPDATE `dol`.`ServerProperty` SET `Value`='0.75' WHERE `Key`='endurance_regen_rate'; UPDATE `dol`.`ServerProperty` SET `Value`='0.75' WHERE `Key`='mana_regen_rate'; UPDATE `dol`.`ServerProperty` SET `Value`='True' WHERE `Key`='allow_train_everywhere';
Lancement et contrôle du bon fonctionnement
cd /home/dol mono --debug --gc=sgen --server ./DOLServer.exe
Il est 'normal' d'obtenir des erreurs et warnings. A la fin on doit obtenir :
[11:04:11,901] Server is now listening to incoming connections! [11:04:11,906] Start Memory base.Start(): 1537MB [11:04:11,906] base.Start(): True [11:04:11,909] Finish Memory base.Start(): 1537MB [11:04:12,670] GameServer is now open for connections! > [11:04:21,765] -stats- Mem=1140MB Clients=0 Down=0kb/s (0MB) Up=0kb/s (0MB) In=0pck/s (0K) Out=0pck/s (0K) Pool=199/200(2) IOCP=200/200(2) GH/OH=39/1078 RegionTime1=14775t/s (1133) CPU=0.0%
Connexion au serveur
Pour se connecter au serveur créé, il est nécessaire de lancer le jeu via Daoc Portal après avoir récupéré le client DAoC officiel : https://darkageofcamelot.com/sites/daoc/files/downloads/DAoCSetup.exe
⇒ La version de la dll game.dll requise est : 1.127
Ressources utilisées dans cet article
http://www.dolserver.net/ https://github.com/Dawn-of-Light/DOLSharp https://github.com/Los-Ojos/DOLSharp-1127 http://losojos-001-site1.btempurl.com/Index https://files.ndlp.info/DAoC/
Un serveur DAoC est disponible à cette adresse : daoc-gs.ndlp.info:10300