Featured image of post vanilla魔兽vmangos编译教程

vanilla魔兽vmangos编译教程

魔兽模拟器vmangos编译过程记录

魔兽世界作为80后一代人的青春回忆,每当回想起来,和曾经的朋友一起战斗的情形,总是热血澎湃。作为魔兽最经典的版本60级香草时代,是魔兽历史上最成功的版本之一,承载着太多的回忆,我比你多一个世界。闲话不说,进入正题,编译vmangos魔兽模拟器。

简介 vmangos版本

github地址 vmangos是Elysium/LightsHope代码库的独立延续,后来团队开源了,是目前60级版本修复最好的,基本没有重大问题。

硬件要求

ubuntu系统服务器版本上编译,ubuntu版本是ubuntu-22.04.3-live-server-amd64。
硬件要求:
1.cpu要求2核,内存4G以上
2.mysql数据库要求5.5或以上
3.g++ Compiler
4.CMake(英语:CMake)
5.Git
依赖:
ACE
TBB
OpenSSL
Zlib

安装步骤

1.安装编译器g++

sudo apt install g++

2.安装ace库

ACE库是必不可少的,因为它用于网络、线程和文件系统访问。

1
2
sudo apt install -qq libace-dev
export ACE_ROOT=/usr/include/ace

3.安装TBB库

1
2
sudo apt install -y libtbb-dev
export TBB_ROOT_DIR=/usr/include/tbb

安装libreadline-dev

1
2
sudo apt install libreadline-dev
//代码更新

4.安装git

git用于拉取代码库,如果拉取速度太慢,可以先下载到本地,然后再上传到服务器。

1
sudo apt install git

5.安装cmake

1
sudo apt install cmake

6. 安装mysql连接库

1
sudo apt-get install libmysqlclient-dev

7. 安装openSSH

用于服务器和客户端之间数据加密传输

1
2
sudo apt-get install openssl
sudo apt-get install libssl-dev

8. 安装压缩库Zlib

数据传输进行压缩,可以节省带宽

1
sudo apt install build-essential checkinstall zlib1g-dev -y

9.下载源码

1
2
3
mkdir vmangos
cd vmangos
git clone -b development https://github.com/vmangos/core

10.配置编译环境

1
2
3
mkdir build
cd build
cmake ~/vmangos -DDEBUG=0 -DSUPPORTED_CLIENT_BUILD=5875 -DUSE_EXTRACTORS=0 -DCMAKE_INSTALL_PREFIX=~/vmangos

以下是其中每个的含义。

DDEBUG = 0 此设置允许您选择是要在“调试”还是“发布”模式下进行编译。服务器在 Release 模式下的运行会更流畅,因此将 Debug 设置为 0。

SUPPORTED_CLIENT_BUILD=5875 由于这是一个渐进式模拟器,因此您可以指定要支持的确切客户端版本。最终的 Vanilla 补丁 1.12.1 的内部版本号是 5875。您可以在登录屏幕的左下角看到客户端的内部版本号。仅支持每个主要补丁的最终版本。这意味着你可以玩 1.8.4,但不能玩 1.8.0。

USE_EXTRACTORS=1 服务器需要地图地形数据才能知道任何东西的位置。此数据是使用多种工具从游戏客户端中提取的,你可以选择使用此设置来构建这些工具。如果您已经拥有来自其他地方的映射文件,则可以将其设置为 0。

CMAKE_INSTALL_PREFIX=~/vmangos 此设置允许您选择在编译完成后复制二进制文件的位置。

11.编译程序

到这步就可以开始编译程序了

1
nproc

查看cpu核心数 编译

1
2
make -j4
make install

这里make -j4表示是4个核心 等待编译完成后会在家目录下生产一个vmangos目录。

1
bin  build  cmake  CMakeLists.txt  contrib  CONTRIBUTING.md  core  dep  etc  LICENSE  README.md  sql  src

这是目录结构文件,在bin目录中就包含可执行文件,realmd和mangosd,在bin目录下新建data和logs文件夹,data用于存放客户端提取的DBC、Map、VMap 和 MMap 文件.这些是服务器运行所必须的。dbc 路径还必须包含从中提取文件的客户端的内部版本号。如果您不确定确切的构建是什么,可以在登录屏幕的左下角看到它。1.12.1 客户端的内部版本号为 5875。

12.设置数据库

我在服务器上已经安装了mysql8.0,进入mysql命令行工具。

1
sudo mysql

执行创建数据库命令

1
2
3
4
5
6
7
CREATE DATABASE IF NOT EXISTS realmd DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

CREATE DATABASE IF NOT EXISTS characters DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

CREATE DATABASE IF NOT EXISTS mangos DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

CREATE DATABASE IF NOT EXISTS logs DEFAULT CHARSET utf8 COLLATE utf8_general_ci;

创建账号

1
2
3
4
5
6
7
8
9
create user mangos identified by 'mangos';
GRANT ALL PRIVILEGES ON realmd.* TO 'mangos'@'%';
//grant all on realmd.* to mangos@'localhost' identified by 'mangos' with grant option;
GRANT ALL PRIVILEGES ON characters.* TO 'mangos'@'%';
//grant all on characters.* to mangos@'localhost' identified by 'mangos' with grant option;
GRANT ALL PRIVILEGES ON mangos.* TO 'mangos'@'%';
//grant all on mangos.* to mangos@'localhost' identified by 'mangos' with grant option;
GRANT ALL PRIVILEGES ON logs.* TO 'mangos'@'%';
//grant all on logs.* to mangos@'localhost' identified by 'mangos' with grant option;

下载基本数据库 https://github.com/brotalnia/database Alt text Alt text 上传到vmangos/sql目录,使用tar -zxvf world_full_14_june_2021.7z解压缩出来数据库 进入mysql命令行

1
2
3
4
5
6
7
mysql -u mangos -p realmd < logon.sql

mysql -u mangos -p logs < logs.sql

mysql -u mangos -p characters < characters.sql

mysql -u mangos -p mangos < world_full_08_june_2018.sql

执行完毕后,进入前/vmangos/sql/migrations目录执行文件merge.sh,会生成 Alt text 这几个文件一次导入数据库

1
2
3
4
5
6
mysql -u mangos -p characters <  characters_db_updates.sql
mysql -u mangos -p realmd < logon_db_updates.sql

mysql -u mangos -p logs < logs_db_updates.sql

mysql -u mangos -p mangos < world_db_updates.sql

13.修改配置文件

设置客户端提取文件目录和日志目录

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
RealmID = 1
DataDir = "./data"
LogsDir = "./logs"
HonorDir = "./logs"
LoginDatabase.Info              = "127.0.0.1;3306;mangos;mangos;realmd"
LoginDatabase.Connections       = 1
LoginDatabase.WorkerThreads     = 1
WorldDatabase.Info              = "127.0.0.1;3306;mangos;mangos;mangos"
WorldDatabase.Connections       = 1
WorldDatabase.WorkerThreads     = 1
CharacterDatabase.Info          = "127.0.0.1;3306;mangos;mangos;characters"
CharacterDatabase.Connections   = 1
CharacterDatabase.WorkerThreads = 1
LogsDatabase.Info               = "127.0.0.1;3306;mangos;mangos;logs"
LogsDatabase.Connections        = 1
LogsDatabase.WorkerThreads      = 1
MaxPingTime = 30
WorldServerPort = 8085
BindIP = "0.0.0.0"

同样修改账号任务服务器配置

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
LoginDatabaseInfo = "127.0.0.1;3306;mangos;mangos;realmd"
LogsDir = "./logs"
PatchesDir = "./patches"
MaxPingTime = 30
RealmServerPort = 3724
BindIP = "0.0.0.0"
PidFile = ""
LogLevel = 0
LogTime = 0
LogFile = "Realmd.log"
LogTimestamp = 0
LogFileLevel = 0
UseProcessors = 0
ProcessPriority = 1
WaitAtStartupError = 0
MinRealmListDelay = 1
RealmsStateUpdateDelay = 20
WrongPass.MaxCount = 0
WrongPass.BanTime = 600
WrongPass.BanType = 0
ReqEmailVerification = 0
ReqEmailSince = 0
GeoLocking = 0
StrictVersionCheck = 1
SendMail = 0
MailFrom = ""
MailCertChecks = 1
SendGridKey = ""
GeolockGUID = ""
MaxSessionDuration = 300

设置realmlist表

进去mysql命令行执行

1
2
INSERT INTO realmlist (id, name, address, port, icon, realmflags, timezone, allowedSecurityLevel)
VALUES ('1', '艾泽拉斯', '127.0.0.1', '8085', '1', '0', '1', '0'); 

此处ip地址设置为127.0.0.1只能本机访问,如果要外网访问要设置成公网ip可以用域名。 最后更改客户端的realmlist文件设置就可以登录游戏了。

注册账号

在运行mangosd最后输入

1
account create 账号 密码

Alt text 出现这个错误在logon.sql中修改增加一条语句 ``platform varchar(255) ,

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
CREATE TABLE IF NOT EXISTS `account` (
  `id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'Identifier',
  `username` varchar(32) NOT NULL,
  `gmlevel` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `sessionkey` longtext,
  `v` longtext,
  `s` longtext,
  `reg_mail` varchar(255) NOT NULL DEFAULT '',
  `token_key` varchar(100) NOT NULL DEFAULT '',
  `email` text,
  `joindate` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `last_ip` varchar(30) NOT NULL DEFAULT '0.0.0.0',
  `last_attempt_ip` varchar(15) NOT NULL DEFAULT '127.0.0.1',
  `last_local_ip` varchar(30) NOT NULL DEFAULT '127.0.0.1',
  `failed_logins` int(11) unsigned NOT NULL DEFAULT '0',
  `locked` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `lock_country` varchar(2) NOT NULL DEFAULT '00',
  `last_login` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `last_pwd_reset` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `online` tinyint(4) NOT NULL DEFAULT '0',
  `expansion` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `mutetime` bigint(40) NOT NULL DEFAULT '0',
  `mutereason` varchar(255) NOT NULL DEFAULT '',
  `muteby` varchar(50) NOT NULL DEFAULT '',
  `locale` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `os` varchar(4) NOT NULL DEFAULT '',
  `recruiter` int(11) NOT NULL DEFAULT '0',
  `current_realm` tinyint(3) unsigned NOT NULL DEFAULT '0',
  `banned` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `mail_verif` tinyint(1) unsigned NOT NULL DEFAULT '0',
  `remember_token` varchar(100) NOT NULL DEFAULT '',
  `flags` int(10) unsigned NOT NULL DEFAULT '0',
  `security` varchar(255) DEFAULT NULL,
  `platform` varchar(255) ,
  `pass_verif` varchar(255) DEFAULT NULL COMMENT 'Web recover password',
  `email_verif` tinyint(1) NOT NULL DEFAULT '0' COMMENT 'Email verification',
  `email_check` varchar(255) DEFAULT NULL,
  `nostalrius_token` varchar(255) DEFAULT NULL,
  `nostalrius_token_enabled` tinyint(1) NOT NULL DEFAULT '0',
  `nostalrius_email` text,
  `nostalrius_reason` text,
  `geolock_pin` int(11) DEFAULT '0',
  PRIMARY KEY (`id`),
  UNIQUE KEY `idx_username` (`username`),
  KEY `idx_gmlevel` (`gmlevel`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC COMMENT='Account System';

重新执行

1
mysql -u mangos -p realmd < logon.sql