5分钟教你学会MangOs搭建魔兽私服

2月份新冠病毒肆虐,都被隔离在家。

无聊之中,随朋友玩了几天魔兽世界(怀旧服)。

我这六十年代骨灰级“大术士”心血来潮换了职业练了一个圣骑士。

你还别说,还真就找到了一丝当年的感觉。

然而,欢乐的时光特别快,复工之时讲拜拜。

随着逐步复工,要投入到繁忙的工作中了。那还有时间上线去怀旧呢?

不过作为别人传说中的技术大牛,我不由自主的萌生出:

“为什么不自己搭建一个魔兽世界的私人服务器,体验一下服务器是我家开的的感觉呢?”

说干就干,经过短暂的一些资料查询和研究。我搞明白了现在主流的魔兽私服(模拟服)搭建方式。并且自己都模拟试了试了,最后,我挑了一个相对最优秀的版本模拟了60年代(经典旧世)的魔兽世界。

客户端版本:1.12.1 5878,官方网址:wow.53in.cn。欢迎大家来休闲娱乐。

理论和实际上来讲,只要我愿意,我还可以搭建:燃烧远征、巫妖王、大灾变等等版本。

不过呢,我做这个只是为了纪念魔兽世界经典旧世(60年代)艾露恩服务器璀璨星城公会。所以,如果没什么必要,就不费那个劲了。反正现在都在混怀旧。我做的服务器再好,除了自娱自乐还能找多少人来玩呢?

言归正传,这里先做科普1:

现在非官方的魔兽服务器,统统使用的是模拟技术来模拟暴雪的魔兽服务端。

而模拟技术就要提到“MangOs”,它是一个开源的自由软件项目,是用c++和C#编程语言,实现的一个支持大型多人在线角色扮演游戏服务器的程序框架,在这个框架下,它理论上应该支持任何客户端的网络游戏,很多人就利用这个开源项目来实现魔兽私服。这就是MangOs。

我这里放一张图来给大家科普一下MangOs魔兽模拟服的一些分支和版本。

以下文字内容来源于网络摘抄:

一、大芒果 MaNGOS是什么

首先mangos项目是一个开源的自由软件(如同linux或者firefox),并且遵守其中最为严格的GPL协议,也就是保证源代码绝对的自由,要了解什么是开源软件,自由软件请自己搜索这方面的资料。其次开发小组一再强调,这是个研究,教育性质的对怎样开发大型网游的服务器端有好处的项目,是一个技术细节毫无保留向公众开放的软件,是一件很有意义的事情,如果你使用它作为盈利目的,那你本身就违反了软件的协议。所以任何利用mangos项目进行私服活动的组织和个人都违反了mangos的宗旨,mangos项目也不会对它们负责。

mangos的技术细节上是这样的,核心部分是个和特定游戏没有关系的核心框架程序,主要是进行进程调度,创造世界,建立心跳机制,处理网络接入等。数据库也是使用的开源数据库软件MySQL,编译器使用的是GCC。至于游戏内容数据库,游戏人物,时间,世界脚本,都是由这个核心程序所支持的扩展脚本来实现,所以有一些独立出来的项目专门模拟魔兽世界来开发支持mangos的核心程序。(参考百度百科 https://baike.baidu.com/item/Mangos/2115936?fr=aladdin)。

但是我的服务端这么好,怎么能证明我的性能强劲呢?于是就找了魔兽世界作为研究例子。从客户端分析协议反算出来数据接口,于是变有了Zero、One、Two等版本,那mangos 为什么会维护魔兽世界的各个版本,而不是只有一个版本呢,从服务端的角度来看, wow 的各个版本可以看作不同的游戏。如 60 级和 70 级这两个相邻版本内容差异至少在 30% 以上,非相邻版本的差异性就更大了,所以很多 bugfix 需要各个版本重复做的。

MaNGOS维护的版本目前有: 60地球时代,70TBC时代、80WLK时代、大灾变以及熊猫人5个版本。

官网:https://www.getmangos.eu

源码:https://github.com/mangos

维护的版本代码:

Mangos Zero – For Vanilla World of Warcraft 60

Mangos One – For World of Warcraft: The Burning Crusade TBC

Mangos Two – For World of Warcraft: The Wrath of the Lich King WLK

Mangos Three – For World of Warcraft: The Cataclysm CTM

Mangos Four – For World of Warcraft: Mists of Pandaria 熊猫人

二、CMaNGOS分离。

在MaNGOS团队合作一段时间后,团队之间的一些成员意见出现了分歧。于是部分成员开始脱离MaNGOS,自行组成CMaNGOS团队,基础代码也是在MaNGOS分离出来的,然后独立维护。

CMaNGOS维护的版本有三个,分别是:Classic 60年代、TBC 70、WoTLK 80年代。

官网:https://cmangos.net

源码:https://github.com/cmangos

三、TrinityCore建立

在这个时候,MaNGOS已经发展得比较成熟了,但不够统一,于是UDB领袖人物Brian提出整合MANGOS、SD2、UDB、ACID以及各种补丁的新版本TrinityCore(俗称TC),并由MANGOS技术组骨干成员进行研发,在技术和经验上都有很好的保证 。

TrinityCore维护的版本目前有2个,分别是:3.3.5a的WLK版本、master(7.3.2.25549)军团再临版本

官网:https://www.trinitycore.org

源码:https://github.com/TrinityCore

四、其他分支维护发展梳理

1、Nostalrius(简称N服)(1.12.1地球时代)Elysium-project魔兽世界最大的私服大约15万玩家,Nostalrius(下称N服),后来被暴雪娱乐以私服运营破坏了公司使用条款为由,正式起诉了N服的运营者,他们也无奈的宣布N服将被迫停服。在2016年4月10日服务器时间晚上11点,N服永久停服。但是N服要求暴雪重启怀旧服计划,如果嘉年华期间没有《魔兽世界》怀旧服的进一步消息,他们会重启怀旧服。暴雪在嘉年华结束后并没有给出确切消息,双方撕破脸皮。Nostalrius发布公告,将重启魔兽怀旧服,并公开所有的相关代码。同时将官推更名为“NostalriusBegins”,意为N服重新开始。

N服为了避免法律纠纷,将源码和玩家合并到E服,高峰时段同时在线玩家达到了30500人。并建立了源码项目:

elysium-project。然而,暴增的人数让E服长期排队,日常排队2W+,E服要增设新的服务器。不过,Nostalrius对于合作并不满意,他们认为现在服务器的状态与他们的目标是相反的。他们的目标是能够获得暴雪官方服务器。但现在却从‘粉丝服务器’变成了‘盗版服务器’,Nostalrius肩负的是要求暴雪开启60怀旧服的责任,于是,出现了分歧之后,Nostalrius决定撤出。

N服官网:https://en.nostalrius.org/

E服源码:https://github.com/elysium-project

2、LightsHope 项目

在E服发展壮大之后,团队内部两位核心成员利用GM权限出售金币和装备。其中一位名叫Sheena,他被指挪用了2000欧元,约15557人民币的捐助资金,这本来是用于维持项目继续的款项,被Sheena用于了“个人经济需求”。于是部分技术骨干成员不满这种情况,在暂停服务器,COPY一份数据之后成立了新的项目LightsHope,肩负N服的使命继续前行。

官网:https://lightshope.org

源码:https://github.com/LightsHope 目前迁移到 https://github.com/lh-server/core

五、修复程度对比

1.12.1版本   LH>classic>Zero

代码规范性与友好性   TC > Mangos

资源占用情况 LH > classic > ZERO

其他优化版本:WLK版本 比较完善的有

TrinityCore

源码 https://github.com/TrinityCore

AzerothCore  

官网:http://www.azerothcore.org

源码:https://github.com/azerothcore/azerothcore-wotlk

SunwellCore

官网:https://sunwell.pl/

如果你有耐心读取了以上摘抄内容,相信你也是个技术派。

我做了一些研究之后才明白了为什么暴雪会重启怀旧服(原来是被私服给逼得啊!)。

话不多说,开整!

考虑再三,我选择了CentOs来做游戏的服务端操作系统。

通过Git获得Mangos的源码之后自行编译搭建服务器。

这么做处于几方面的考虑。

  1. 我看不起Windows操作系统。
  2. 我更看不起那些Win系列一键安装包。
  3. 考虑的可持续运行的服务器,Centos肯定是不二之选。
  4. 不自己编译安装,怎么能进步呢?
  5. 万一后期自己想修改游戏,设计任务,添加物品呢?
  6. 没错,我就喜欢开手动挡。自动挡,那是给残疾人开的。

首先在本地安装虚拟机,虚拟一台纯净的Centos7操作系统。

把该打的补丁都给打了(yum update)

完了之后,咱们安装一些基础的组件和环境。

Yum install git cmake gcc patch autoconf mariadb-server mariadb-devel libtool zfstream gcc-c++ subversion boost-devel

如果有些组件提示没找到,无所谓。继续往下。

我编译安装的第一个版本是cmangos。

这个版本支持机器人,地图提取工具。在编译的时候可以添加参数。

cmake -DCMAKE_INSTALL_PREFIX= -DBUILD_EXTRACTORS=ON -DPCH=1 -DDEBUG=0 -DBUILD_PLAYERBOT=ON

编译参数中:

DCMAKE_INSTALL_PREFIX是指你的服务端安装目录,可以自定义。

DBUILD_EXTRACTORS是指是否安装地图提取工具

DBUILD_PLAYERBOT是指是否打开机器人

这里我做科普2:

首先是科普1我们提到过,MangOs是一个大型多人在线角色扮演的游戏服务器程序框架。理论上他是可以模拟所有的络游戏的。

既然,现在我们用它来模拟魔兽世界。那么肯定要对魔兽世界进行独立的一些补充(数据补充)。这就是上边地图提取工具那个参数的作用。我们需要上传一个魔兽客户端(你想要搭建的版本)的地图文件。然后我们使用地图提取工具,对客户端进行分析和提取。配上专用的数据库来模拟暴雪的游戏服务端。

至于那个机器人吗?那是个笑话,请自行忽略。

我们继续,我把整理好的搭建步骤列一个明细:

  1. 首先使用git选择一个自己喜欢的版本git到本地服务器。
  2. 然后设置编译参数开始编译。
  3. 提取地图放到服务端(下载别人编译好的可以不用自己提取)。
  4. 下载安装导入数据库(感谢Mangos使用了mysql数据库)
  5. 对服务器进行配置。
  6. 启动服务器。
  7. 配置客户端的服务器链接地址。
  8. 开始游戏。

这中间,我把一些别人不会告诉你的关键步骤做科普3:

  1. 在编译的时候需要用到gcc、cmake3、ace等几个核心支持。
  2. 某些特殊的服务器版本,不支持地图提取工具的参数。只能曲线救国去找,下载别人提取好的地图文件(我这里去找了个别人制作的win一键安装包,借用了他们的地图文件)。
  3. 数据库汉化是个细致的活儿。没有编程数据库基础的,建议曲线救国。
  4. 有些魔兽客户端版本,并没有太好的大脚插件支持。(反正我玩怀旧感觉大脚怀旧服专用版就做得很好,可惜不兼容我的1.12.1)

放几个链接仅做Mark:

Cmake3 安装

https://blog.csdn.net/weixin_38883338/article/details/86408749

Gcc 6

https://blog.csdn.net/Al_xin/article/details/92438055

ACE6.3.3

https://blog.csdn.net/u010587274/article/details/50965369

Git源码和数据库编译安装服务器

git clone git://github.com/cmangos/mangos-classic.git mangos

git clone git://github.com/cmangos/classic-db.git

ACE的编译安装和地图提取,确实有点耗费性能和时间,不过地图和数据库后期你熟悉了可以越过,而上述三个环境的安装是铁定要做的。

我们来说一下服务器的配置。

在编译好服务端,上传提取好的地图后。我们要设置两个文件来启动服务器。分别是etc目录下的:

  1. mangosd.conf(服务器参数配置)
  2. realmd.conf(账户认证服务配置)

有几个关键点,我整理如下:

  1. 首先是地图目录的配置,你可以写绝对路径,或者相对路径。只要写不正确,服务器启动不起来。会提示xxx.map exits之类的。意思就是找不到地图文件。
  2. 你要配置数据库的链接地址这里可以连接远程,本地都ok。只要连接地址、数据库用户名、密码、数据库名字正确就ok。
  3. 我们一般会配置一下进入游戏的欢迎语,人物出生的携带金钱和出生等级,还有打怪升级的经验倍数这些参数。
  4. 如果你需要做一些有特色的的东西。可能就涉及到修改数据库了。比如说人物出生送T3套装。这个就需要去数据库中进行配置。
  5. 如果你是为了让朋友一起来玩。就吧那个BindIP给注释掉。否则可能引起一些无法连上服务器的奇怪现象。

参数名称:

地图目录

DataDir = “../data” 

日志目录

LogsDir = “../logs”

游戏欢迎语

Motd= “游戏欢迎语”

出生等级

StartPlayerLevel = 1

出生携带金钱1000G

StartPlayerMoney = 10000000

杀怪经验5倍

Rate.XP.Kill    = 5

任务经验15倍

Rate.XP.Quest   = 15

探索地图10倍

Rate.XP.Explore = 10

数据库连接(应该有3-4条之多,按下面格式修改即可)

LoginDatabase.Info              = “地址;端口;用户名;密码;数据库”

配置结束,就是启动。

因为,我们搭建的服务器属于广域网,可以让朋友一起来玩的。那么肯定要对防火墙这些进行配置。否则防火墙会阻断服务端提供服务。

我们需要开启如下端口:

8085,9600,3724

把他们添加到你防火墙的白名单即可。

(当然,考虑安全呢你可以修改一下端口号。这我就不多费口舌了)

一些收尾工作:

  1. 主要是对服务器进行安全加固,例如修改ssh登录端口,禁止root登录。开启防火墙等等。
  2. 对游戏数据进行定时备份。毕竟是自己家的服务器,有时候可能会来做一些测试。数据备份显得就非常重要了。我反正是1小时已备份。这个用shell脚本去备份mysql数据库即可(注意清理)。
  3. 可以要制作一个网页,开放给新用户去注册、修改密码、下载客户端等等。这个就是另一项技术了。有机会我们再聊。

全文结束,为我的璀璨星城 wow做个小宣传:

璀璨星城 WOW 是为了纪念魔兽世界经典旧世(60年代)艾露恩服务器璀璨星城游戏公会而设立的魔兽世界怀旧服。完全公益免费。一切保持游戏的原汁原味。如果你曾经在这个世界奋斗过,我们期待您在这里重拾昔日时光!

公益服网址:wow.53in.cn

体验客户端版本:1.12.1 5878

网址有纯净客户端下载的磁力链,也有可用的绿色插件包,还有客户端的连接方法(欢迎来玩,这是一台真正的公益服务器)。

Qq群:596245670

然后为自己做个推荐,如果您有mangos这个项目的搭建困惑,或者对魔兽私服技术的交流需要,可以来找我共同研究。