魔兽世界私服Trinity,从源码开始

本文详细介绍了如何从源码开始搭建魔兽世界私服Trinity的过程,包括所需工具的安装、源码编译、数据库配置、地图文件生成及客户端配置等内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

根据这篇文章弄了几天,终于弄好了~~步骤基本正确,是因为Trinity的版本在不断更新,所以按照这个步骤弄现在会出现问题。弄好的支持国服13930,不过服务器里面是英文的。不过没关系,我主要是要创建起这个环境,方便调试和研究WOW服务端的架构和细节。下一步就是调试跟踪代码了~~  ^ _ ^


魔兽世界私服Trinity,从源码开始

缘起因由

在一个无所事事的周末下午,突然想起魔兽世界,官方的账号很久没有上了,里面的大小号现在连满级都不是。以前曾经搭过传奇和星际争霸战网的私服自娱自乐,也听说过魔兽世界有开源的服务端模拟,既然兴致来了就小小的研究一下。

目前魔兽世界的私服比较流行的是MaNGOS和Trinity,二者都是模拟魔兽世界服务端。MaNGOS“号称”是一个研究型项目,目的是为了学习大规模的C++项目开发,有道理,不过我不信。Trinity是基于MaNGOS的代码开发的,以前主要是为了合并用户提交的补丁代码而设立的一个项目,不过现在已经单独独立出来了,主要开发成员包括以前MaNGOS的一些老人,现在的主要工作包括清理代码、优化、提供一个更好的服务端内核。

二者现在的代码提交和更新都很频繁,但是具体是否会合并对方的代码就不清楚了。总而言之,也就是说,我感觉Trinity大概也许应该是目前最好的一个魔兽世界服务端模拟了。作为一个程序员来说,玩游戏还在其次,看看代码才是件有意思的事情。整个过程记录在案http://log4think.com/setup_wow_private_server,以便事后查询。

安装基本工具

现在尝试一下从源码开始搭个魔兽世界的服务器,从源码开始主要还是想顺便看看代码的情况,就基于Trinity来做吧。至于客户端的情况,截止到2011年6月12日,中国国服魔兽世界最新的版本是3.3.5 13930-巫妖王之怒。

先装几样基本的工具软件,先是下载源码用的,由于MaNGOS和Trinity都是托管在GitHub上,所以得用Git才能下到源码:
Git for Windows: 在这里下
Git 的图形化工具TortoiseGit: 在这里下

然后是编译工具和库:
OpenSSL: 在这里下
CMake: 在这里下
Visual Studio 2010 Express: 在这里下,这个是Visual Studio的免费版本。如果装了要钱的Visual Studio 2010,就不必装这个了。

运行环境:
MySQL: 在这里下,安装后也包含编译需要的头文件和库。
MySQL的图形化客户端: 在这里下
Microsoft Visual C++ 2010 Redistributable Package: x86版本的在这里下x64版本的在这里下
.Net Framework 3.5: 在这里下。非必需,而且Visual Studio 2010里面好像带,有了就不必装了。

生成项目文件

各个工具都下载、安装完毕(具体细节可Google之,不赘述了),准备工作做完之后,开始下代码编译。
1、建一个目录,譬如 D:\Trinity
2、进入这个目录,右键Git Clone... ,Url那里填入 https://github.com/TrinityCore/TrinityCore.git, 点OK。不喜欢图形化工具的可以直接进到新建的目录里面,跑命令 git clone https://github.com/TrinityCore/TrinityCore.git 。 会自动建立一个名为TrinityCore作为源码目录,然后就是等着代码下完。
3、在D:\Trinity下建一个目录是Build等下放编译结果文件
4、运行CMake的图形化工具(开始菜单里CMake下的CMake (cmake-gui))
5、点Browse Source... , 选D:\Trinity\TrinityCore
6、Browse Build... ,选:\Trinity\Build
7、点Configure,出一个对话框
8、确保勾选了 Use default native compilers,下拉框里面选Visual Studio 10,至于是32位还是64位版本的,根据自己的情况选
9、点Finish,CMake工具会搜索源码配置,分析出一些编译选项来。确保cmake-gui下面的信息提示里面没有ERROR字样,否则根据具体错误修正后重来。
10、在cmake-gui上面的编译选项里面选中SCRIPTS、SERVERS、TOOLS、USE_COREPCH、USE_SCRIPTPCH,不要选USE_MYSQL_SOURCES。
11、最后点Generate,CMake会在D:\Trinity\Build下面生成Visual Stdio 2010的项目文件。

配置完成后,我的是这样:

可能出现的问题:
1、第10步里面_GIT_EXEC应该是msysgit中git的绝对路径,如果没有则是msysgit安装的时候没有把自己加到系统路径里面去。
2、如果下面出现红色的ERROR提示,类似于

Could not copy from: D:/dev/cmake/share/cmake-2.8/Templates/CMakeVSMacros2.vsmacros
      to: C:/Documents and Settings/Administrator/ÎÒµÄÎĵµ/Visual Studio 2010/Projects/VSMacros80/CMakeMacros/CMakeVSMacros2.vsmacros

这个好像是因为CMake没法识别中文路径,把“我的文档”的位置改一下吧,改成路径不带中文的。或者直接自己把提示中的CMakeVSMacros2.vsmacros拷到“我的文档”下的Visual Studio 2010/Projects/VSMacros80/CMakeMacros/。

编译源码

0、如果你的魔兽世界客户端是3.3.5 13930,那么记得给代码打个认证补丁以支持13930,具体请参考另一篇文章 http://log4think.com/wow_3-3-5_13930_auth_patch
1、在Visual Studio里面打开D:\Trinity\Build\TrinityCore.sln,先Build -> Clean Solution,然后Build -> Build Solution
2、默认是生成Debug,结果在D:\Build\bin\Debug下面,从MySQL的安装目录下的Lib目录里面拷一个libmySQL.dll到这个目录下,libeay32.dll和ssleay32.dll是OpenSSL的,应该默认加到系统路径下了,如果后面提示找不到就从OpenSSL的安装目录里面拷过来。

安装数据库

简短截说,
1、从https://github.com/TrinityCore/TrinityCore/downloads下载最新的(或者符合你的客户端版本号的)魔兽世界数据文件,
2、用MySQL图形化工具,导入 D:\Trinity\TrinityCore\sql\create\create_mysql.sql 执行建立三个数据库,
auth数据库中导入 D:\Trinity\TrinityCore\sql\base\auth_database.sql 执行,
characte数据库中导入 D:\Trinity\TrinityCore\sql\base\character_database.sql 执行,
world数据库中导入第一步中下载的TDB_full_???.sql文件执行,
最终建立auth、character、world三个数据库。

生成地图文件

1、在D:\Build\bin\Debug下面建一个makevmaps3_simple.bat文件,内容为

vmap3extractor.exe
md vmaps
vmap3assembler.exe Buildings vmaps

pause

执行,会从魔兽世界的客户端目录里面解压缩服务端需要的地图出来。根据机器速度不同,大概需要20分钟到一个小时的时间。运行结束的时候会给个提示“Press any key...”,按任意键结束。生成vmaps和buildings目录,buildings 目录无用可以删除。
2、假设魔兽世界的客户端目录在D:\WOW下面,在D:\Build\bin\Debug下运行 mapextractor.exe -i "d:\WOW" ,会生成maps和dbc目录。这个工具会根据客户端的雨中在dbc目录下生成不同的dbc语言版本。 如果是中文的客户端,会提取出中文的dbc数据。

配置服务器

1、在D:\Build\bin\Debug下有worldserver.conf.dist和authserver.conf.dist两个文件,分别是游戏服务器和认证服务器的配置模板文件。
2、复制一份worldserver.conf.dist并改名为worldserver.conf,配置游戏服务器

LoginDatabaseInfo = "127.0.0.1;3306;root;trinity;auth"
WorldDatabaseInfo = "127.0.0.1;3306;root;trinity;world"
CharacterDatabaseInfo = "127.0.0.1;3306;root;trinity;characters"

分别是认证数据库、世界数据库、玩家角色数据库的地址,root后面的trinity是MySQL中root的密码,改成你在安装MySQL时设置的root密码。

之前生成了vmap文件,这个是地图的相关数据,服务器可以根据这个来判断怪物和玩家之间是否可见(是否有墙,是否在建筑物的同一层上)。没有这个的话,怪物会穿墙打你,或者从楼下直接漂上来打你... 服务器配置这里默认情况下是开启vmap数据检测的。如果想开启vmap检测,则将下面这些配置的值改成0

vmap.enableLOS = 1
vmap.enableHeight = 1
vmap.petLOS = 1
vmap.enableIndoorCheck = 1
DetectPosCollision = 1

3、复制一份authserver.conf.dist并改名为authserver.conf,配置认证服务器

LoginDatabaseInfo = "127.0.0.1;3306;root;trinity;auth"

同样,把trinity改成MySQL的root密码。

4、检查数据库auth里面realmlist表里面的记录,记录中port的值应该和worldserver.conf 里面的 WorldServerPort = 8085这一项的值一样(这里是8085)。同时,gamebuild的值应该和你客户端的版本号是一致的(登陆界面右下角,当前最新的是13930)。如果realmlist里面没有记录,则应该加一条。

修改客户端配置

客户端默认是去登陆官方服务器,需要修改一下地址改成让客户端登陆我们自己架设的游戏服务器。假设魔兽世界客户端安装在D:\WOW下面,到D:\WOW\Data\zhCN下面,备份realmlist.wtf文件。该文件原来的内容是

set realmList cn.logon.warcraftchina.com
set patchlist cn.version.warcraftchina.com
set realmlistbn ""
set portal cn

将其内容改成

SET realmlist "127.0.0.1"
SET patchlist "127.0.0.1"

注册用户账号

客户端后登录会发现没有账号可用,注册账号的办法有两种:
第一种方法是通过SQL语句直接在数据库里面加

INSERT INTO account
(username, sha_pass_hash, email)
VALUES
('用户名',SHA1(CONCAT(UPPER('用户名'),':',UPPER('密码'))), '邮件地址')

替换命令中的 用户名、密码、邮件地址 即可。

第二种方法最简单,后面启动游戏服务器worldserver之后,在这个命令窗口可以输入GM命令:

create account 用户名 密码

如何和朋友一起玩

如果想配个私服和朋友一起玩,那么需要一个公网IP地址。机房里面没有服务器没有关系,可以搭在自己家里的服务器上,然后去http://ip138.com上查到自己的IP地址,把127.0.0.1相关的地址都改成自己的IP地址就可以了。如果是通过ADSL路由上的网,去ADSL路由配置里面把自己的内外IP地址设置为DMZ主机地址开放给外网即可。
此外,如果是跑服务端的服务器有花生壳的动态域名或者自己的域名(比如我的 http://log4think.com),可以将127.0.0.1改成自己的域名。前面在wowserver和authserver中的地址中配置的127.0.0.1都要改,因为服务端要提供这个地址给客户端。MySQL相关的127.0.0.1地址不用改,要改也行,不过就是还得去配MySQL的外网访问的相关安全设置。

同时,如果是要搭在公网上对外提供服务,建议单独找个机器做auth服务器(配置不用太好),不同的游戏区跑在不同的服务器上(这个配置要好一点),每个服务器上都要跑worldserver。把服务器列表加到auth数据库里面的realmlist表里就是。

友情提示:提供公网服务小心被盛大告。

启动游戏

1、运行D:\Build\bin\Debug\authserver.exe
2、运行D:\Build\bin\Debug\worldserver.exe
3、运行客户端wow.exe
如果运气好的话...
反正我运气不错...

相关的可能还需要一些配置和改动,不过目前我的这个版本能够正常运行,其它的未来再写吧。在此之前,至少可以先研究下源代码...

退而求其次

如果只是想玩玩游戏,可以下个别人做好的包 TCCN-3.3.5-Trinity8400.exe ,安装好启动web服务器和wow服务器,注册个账号就可以进去玩了,简单的无需解释了。不过这个有人数限制,具体限制多少人我也不清楚,总之做公网服务是没戏的。

相关的几个小问题:
连接服务器断开的话,到这里下个补丁覆盖。
登入后没有服务器列表的话,看看客户端的版本号(登陆界面的右下角),然后把auth数据库realmlist表里面的记录最后一项gamebuild改为看到的版本号(比如13930) 。

开发调试

既然是从源码编译的,因此如果中间出了任何问题都是可以通过调试的方式去解决的。调试方法很简单,几个简单的手段
1、抓包,分析数据记录
2、启动编译好的程序,开Visual Studio,附加到该进程上,下断点跟踪
3、进入游戏,进行操作,Visual Studio中如果下了正确的断点,就会在相关的位置停下

参考资料

二者的一些相关网站列举如下:
MaNGOS 官网: http://getmangos.com/
MaNGOS 代码库: http://github.com/mangos
更多MaNGOS的链接: http://getmangos.com/wiki/

Trinity 官网: http://www.trinitycore.info
Trinity 项目首页: http://trinitycore.github.com/
Trinity 代码库: https://github.com/TrinityCore/TrinityCore

本站后续相关文章可以在 http://log4think.com/category/practice/fun/wow-trinity/ 找到。
本文全文参考Trinity官方文档 http://www.trinitycore.info/How-to:Win


欢迎使用睿博!魔兽世界公会系统(RB!DKP),本系统为网络游戏魔兽世界玩家公会用网站平台,您可以使用本系统快速建立属于您自己的公会网站。系统主体部分为DKP系统,DKP系统拥有完善的功能,支持市面上主流的记分/查分插件,方便、快捷、准确的DKP记录及处理使您在公会管理中事半功倍,辅助性公会公告/制度/语音等自由方便的在线编辑设计,使您不需要懂得网站设计也能完善自己的公会网站,免费稳定的系统升级,保证了系统的持久稳定发展,系统完美支持魔兽世界国服/台服,祝您使用愉快。 睿博!魔兽世界发展历史:   2005年,魔兽世界国服公测,我们发布了SP.WoWSystem ,为全球首套ASP平台的DKP系统(当时全球范围内只有PHP平台的EQDKP系统),也是国内第一套自主DKP系统;   2008年,魔兽世界国服发布燃烧的远征,我们发布了LS!DKP ,更进一步完善系统以配合新的游戏格局需求;   2009年,魔兽世界全球发布巫妖王之怒,我们发布了RB!DKP系统(定名,订立系统所属睿博软件),并制定了本系统的发展规划,定制了系统的发展方向,确保了系统的更新及技术支持,完全重写所有代码,建立了更加完善的DKP系统模式,完美支持更多的插件,并完美支持国服/台服;   我们会再接再厉,使系统更加完善、功能更贴近公会网站的发展需求,并持续对相关插件进行同步更新,再次感谢您对睿博!魔兽世界公会系统(RB!DKP)的支持。
<think>好的,用户想在他的ARM架构的Linux开发板上安装并运行TrinityCore魔兽世界服务端,还要让公网能访问,之后还要做优化。首先,我得理清楚步骤,可能遇到的问题,以及如何解决。 首先,TrinityCore主要是为x86架构设计的,可能在ARM上会有兼容性问题。虽然官方可能不支持ARM,但用户可能已经查到有社区移植的版本,或者需要自己编译。我需要确认TrinityCore是否有ARM的兼容版本,或者需要用户自己处理依赖和编译问题。 然后是系统要求,ARM开发板的性能可能有限,尤其是如果用的是树莓派之类的设备,内存和CPU可能不够。用户需要至少满足TrinityCore的最低要求,但实际可能需要更高的配置,特别是运行魔兽世界服务端,数据库和地图提取都需要资源。 接下来是编译步骤,可能需要安装依赖库,比如OpenSSL、Boost、MySQL开发包等。在ARM上编译大型项目可能需要较长时间,而且可能遇到缺少ARM支持的库的问题,需要用户自己处理。 数据库配置方面,用户需要安装MySQL或MariaDB,并导入SQL文件。这部分可能比较标准,但要注意ARM架构下的MySQL性能问题,可能需要优化配置。 网络配置方面,要让公网访问,需要设置端口转发,开放3724和8085端口(或者对应的版本端口)。同时,可能需要配置防火墙,或者使用反向代理,比如Nginx,来管理流量,提升安全性。 优化方面,可能需要调整数据库配置,使用缓存,优化查询语句。对于服务端本身,调整线程数量,限制玩家数量,降低资源消耗。还有定期备份,监控资源使用情况,日志管理等等。可能还要考虑使用轻量级Linux发行版,减少后台进程,释放更多资源给服务端。 另外,安全性也是重点,公网开放后容易被攻击,需要设置强密码,更新系统补丁,可能配置Fail2ban来防止暴力破解。还有考虑使用Docker容器化部署,方便管理和迁移。 用户可能需要详细的步骤指导,比如如何交叉编译,如何处理编译错误,如何配置数据库,以及具体的优化参数设置。可能还要提醒用户注意法律问题,因为运行魔兽世界私服可能违反暴雪的条款。 总结下来,回答需要分步骤:环境准备、源码获取与编译、数据库配置、服务端配置、网络设置、优化方法、安全措施。每个步骤需要详细说明可能遇到的问题和解决办法,特别是ARM架构相关的问题。</think>在ARM架构的Linux开发板上部署TrinityCore魔兽世界服务端并实现公网访问,需要解决架构兼容性、性能优化和网络配置等问题。以下是分步骤实现方案及后续优化方法: --- ### **一、基础环境准备** 1. **系统要求** - 推荐系统:Ubuntu Server ARM版 / Debian ARM版 - 最低硬件要求(取决于玩家数量): - 4核CPU(如树莓派4B或性能更强的开发板) - 4GB RAM(建议8GB以上) - 32GB存储空间(地图文件需额外15GB) 2. **依赖安装** ```bash sudo apt update sudo apt install git cmake clang libmysqlclient-dev libssl-dev libboost-system-dev libbz2-dev libreadline-dev libncurses-dev mariadb-server ``` 3. **数据库配置** ```bash sudo mysql_secure_installation # 创建专用数据库用户并授权 ``` --- ### **二、TrinityCore源码编译(ARM适配关键)** 1. **获取社区适配版本** ```bash git clone -b arm-port https://github.com/TrinityCore/TrinityCore.git cd TrinityCore ``` 2. **ARM架构编译参数** ```bash mkdir build && cd build cmake .. -DCMAKE_C_COMPILER=clang -DCMAKE_CXX_COMPILER=clang++ \ -DTOOLS=1 -DWITH_WARNINGS=1 -DCMAKE_INSTALL_PREFIX=~/server make -j$(nproc) # 根据CPU核心数调整编译线程 make install ``` > **注意**:若遇到`boost`库兼容性问题,需手动编译ARM适配版本。 --- ### **三、服务端配置** 1. **地图数据提取** - 在x86机器提取后传输至ARM板: ```bash ./mapextractor ./vmap4extractor ./vmap4assembler ``` 2. **核心配置文件** - 修改`authserver.conf`和`worldserver.conf`: ```conf LoginDatabaseInfo = "127.0.0.1;3306;trinity;trinity;auth" WorldDatabaseInfo = "127.0.0.1;3306;trinity;trinity;world" CharacterDatabaseInfo = "127.0.0.1;3306;trinity;trinity;characters" ``` --- ### **四、公网访问配置** 1. **端口转发** ```bash sudo iptables -t nat -A PREROUTING -p tcp --dport 3724 -j REDIRECT --to-port 3724 sudo iptables -t nat -A PREROUTING -p tcp --dport 8085 -j REDIRECT --to-port 8085 ``` 2. **动态DNS(可选)** - 使用`ddclient`或`no-ip`服务绑定域名。 3. **反向代理(提升安全性)** ```nginx # Nginx示例配置 location /wowserver { proxy_pass http://localhost:8085; proxy_set_header X-Real-IP $remote_addr; } ``` --- ### **五、性能优化方法** 1. **数据库优化** ```sql -- InnoDB缓冲池调整(my.cnf) innodb_buffer_pool_size = 1G # 根据内存调整 query_cache_type = 0 # 禁用查询缓存 ``` 2. **服务端参数调优** ```conf # worldserver.conf PlayerLimit = 50 # 限制并发玩家数 UpdateTimeDiff = 100 # 降低世界更新频率 ``` 3. **系统级优化** ```bash # 使用cgroups限制资源 sudo cgcreate -g cpu,memory:/wowserver echo "50000" > /sys/fs/cgroup/cpu/wowserver/cpu.cfs_quota_us echo "4G" > /sys/fs/cgroup/memory/wowserver/memory.limit_in_bytes ``` --- ### **六、安全加固** 1. **防火墙策略** ```bash sudo ufw allow 22/tcp # 仅开放必要端口 sudo ufw allow 80/tcp sudo ufw enable ``` 2. **服务隔离** ```bash sudo useradd -r -s /bin/false wowuser chown -R wowuser:wowuser ~/server ``` 3. **日志监控** ```bash # 使用logrotate管理日志 /var/log/trinitycore/*.log { daily rotate 7 compress missingok } ``` --- ### **七、扩展建议** 1. **容器化部署(Docker)** ```dockerfile FROM arm64v8/ubuntu:20.04 RUN apt update && apt install -y ... # 精简依赖 COPY compiled-server /opt/server ``` 2. **自动化运维** - 使用Ansible部署脚本 - Prometheus + Grafana监控资源指标 --- ### **常见问题排查** 1. **崩溃问题**:检查`gdb`生成的core dump文件 2. **延迟过高**:使用`vmstat 1`监控CPU等待I/O情况 3. **数据库瓶颈**:通过`SHOW PROCESSLIST`分析慢查询 部署完成后,建议通过`stress-ng`进行压力测试验证稳定性。最终性能取决于硬件配置,树莓派4B可支持约20-50人同时在线。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值