魔兽,怀旧一下

TrinityCore,WoWSimpleRegistration

大学期间WotLK是我最疯狂的一个版本了,去年11月中旬基于TrinityCore搭了wow3.3.5私服,运行了近3个月较为稳定,感兴趣的朋友可以来玩。

👉注册链接👈

1、项目介绍

目前主流平台有TrinityCore、AzerothCore、CMangos等等,各项目基本都是源于Mongos。

下面我引用一下论坛里大佬的介绍

首先,2004年WOW正式版还没出之前,流传出来的测试版客户端,已经吸引了爱好者们的热情,其中最有技术力的一批,就已经开始制作模拟器,来尝试提前体验wow。这就是最初的模拟器,历史和wow的历史一样长。最初的模拟器有很多种,Mangos是其中一种,那时候没有tc和az,大家都在Mangos团队中工作。 Mangos是名义上是制作通用的网游服务器端,实际上是制作仿官的wow服务器端。

随着wow的开放,版本的更新,Mangos团队的意见开始有所分裂。有许多人认为仿官是原则,这点是不能修改的,但是有的人希望在其中增加更有趣的设定和想法。于是团队分裂了,坚持仿官的留在Mangos里,想搞黑科技的分裂出去,建立了一个新的团队,叫做TrinityCore,他们就是原来Mangos团队中技术力最强的一群人。

Mangos团队分裂之后,很快就再次发生了分裂。原因我不知道,我只能猜测,可能是剩下的人对未来的态度也开始产生了分歧。毕竟官方内容就那么多,仿官很容易就走到了尽头,剩下的工作只不过是机械地填充内容和修bug而已。于是最终Mangos团队再次分裂成两部分,一部分技术能力强的团队成员,做出了一系列“最终版本”,就是MangosZero/MangosOne/MangosTwo/MangosThree系列,然后金盘洗手,不再更新——除了一个名为Madmax的人之外。这个Madmax大概是个欧洲人,他维持着getmengos的欧洲站,一个人继续更新MangosZero系列。

经历过两次分裂,最优秀和比较优秀的成员离去之后,剩下的Mangos成员剩下只有信仰而技术力低下的部分了,他们把团队改名为CMangos(意思是持续更新的Mangos,大概是和干一票就金盘洗手的MangosZero作为区分的意思),继续更新自己的Mangos。CMangos团队组织上比较正规,技术上很糟糕,很多陈年老bug修复不了,看出来他们很努力,但是效果似乎被只有一个人在更新的新版本MangosZero吊打——后者被用于作为诸多著名高品质112哔哔的基底,而前者只能用来开发开发个人娱乐向的单机版。

Mangos的故事讲完,接下来回头讲TrinityCore的故事。

TrinityCore从Mangos团队中分裂出来之后,他们立即搞了大量黑科技。于是他们的产品在市场中大受欢迎,逐渐成为哔哔界的主流。但是,很快,他们的团队的立团理念“追求更先进的技术实现”就带来了新的问题:他们修的bug很有限,但是他们在研究新的技术过程中,制造的bug却很多。他们的黑科技固然多,但是是以修复程度低为代价换来的,如果要开服,用TrinityCore来开服会很痛苦——要么就永远不更新,自己孤单地修,要么就是不断更新,为TC的不断重写框架买单,一次又一次重做自己的各种功能,疲于奔命。 在这种情况下,有一个选择了前者的服务器,做出来了一个稳定的,修复程度很高的哔哔。这个服务器就是SunWell,简称sw。他们用其中一个版本的tc为基底,不再追逐TrinityCore的更新,而是专注于修复和优化,于是得到了超出市场平均水准的优秀产品。不过,优秀的东西是需要用人心的成熟来守护,才能转化成巨大的收益的,然而sw的团队并没有成熟的人心,所以一段时间之后,sw的源码就流传出来了。当然,能流传出来的部分修复程度很低,毕竟修复不光是核心的事,也是数据库的事。不过就算这样,sw流出的代码也足够带来革命性的影响了。 所以短时间之内,出现了更新sw的网站,以及大量使用sw的哔哔。而TrinityCore被人们弃之不顾。 但是sw的网站毕竟不等于sw哔哔,也不是成熟的,有组织的团队维护的,在一段时间之后,最终也走向了终结,不再更新。

在sw消亡之后,sw带来的启发并没有消失,于是一个新的,有组织有活力的团队出现了。他们以“为提供更优秀的哔哔而开发”为立团理念,他们就是AzerothCore,简称az。 就像sw那样,他们选择一个版本的tc并且不再追逐其版本,同时融入sw源码中大量先进的部分。这样让AZ项目追随者的源码更新变得可靠而稳定,而且可以预期,AzerothCore的修复将会越来越好(尽管尚未超过sw哔哔曾经有的程度——而sw网站流出源码的程度,则早已超越了)。 同时,他们设计了一个粗糙但是简单的模块功能,并且在内核处遍布钩子,让大部分哔哔的特色功能可以纯粹以模块的形式制作——这样一方面能够提升debug效率,而且更重要的,是能帮助各个哔哔能很方便地紧跟AzerothCore的官方更新而更新,而不需要每次更新都要处理一大堆冲突。这样能让AzerothCore阵营的哔哔的水准下线是能随着AzerothCore团队的工作而很轻松地不断提高的。 最后,因为sw已经断更,而tc则永远在持续更新,所以AzerothCore也会陆续收录tc的先进功能,在不像tc那样老是颠覆旧有框架的基础上,增加tc的新东西。这样固然会让az的功能更新进度远落后于tc,但是az优秀的稳定性和可开发性则能够弥补这一遗憾。

两年前的话,AzerothCore还是只个新生团队,开发了模块功能但是没有什么值得一用的模块,但是今天,AzerothCore的模块生态已经很成熟了。分享的模块种类和数量都有很多,AzerothCore官方定期收录。

综上所述,在335版本,AzerothCore团队是一个对不管单机玩家还是哔哔开服者而言都是优势逐渐在变大的团队。所以越来越多的二次开发Core基于这个团队的产品。而只有对自己技术力非常自信,相信自己能一个人维持一个系列的开发者,才会选择更有格调的SW基底,或者有更多黑科技的tc基底。

不过在335以上的版本,哔哔和开发者就没有选择了。 因为Madmax一个人能力有限,不可能跟着官服版本开MangosFour,MangosFive,MangosSix,而CMangos连112的仿官都焦头烂额。所以,追求更强技术的TrinityCore是唯一的选择——紧跟官服版本,这本身就是技术挑战之一,是TrinityCore所选择迎战的方向。 虽然对于高版本也涌现了一些像AshamaneCore之类的,像AzerothCore那样基于某个版本的TC自己开发的品牌,但是他们的团队没有AzerothCore强,做不到AzerothCore的水准,只能说是一个比TC略微优秀的选择,优势并不太大。 而AzerothCore本身,只做335。

以上,就是诸多版本的恩怨情仇。 至于AC-Web之类的版本,他们都是有各自的基底的。一般而言,都是早期基于TC,后期基于AZ。

2、Ubuntu 20.04 TrinityCore 3.3.5 部署

TrinityCore的搭建,官方有详细的文档

①.需要的依赖

sudo apt-get update
sudo apt-get ``install` `git clang cmake ``make` `gcc g++ libmariadbclient-dev libssl-dev libbz2-dev libreadline-dev libncurses-dev libboost-all-dev mariadb-server p7zip libmariadb-client-lgpl-dev-compat
sudo update-alternatives --``install` `/usr/bin/cc` `cc ``/usr/bin/clang` `100
sudo update-alternatives --``install` `/usr/bin/c``++ c++ ``/usr/bin/clang` `100

②.git源码及编译准备

cd ~/
sudo git clone -b 3.3.5 git://github.com/TrinityCore/TrinityCore.git 
cd TrinityCore
sudo mkdir build
cd build
sudo cmake ../ -DCMAKE_INSTALL_PREFIX=/home/<username>/server  #<username>替换为自己的用户名

③.编译

这里耗时较长,建议使用screen单独开一个窗口。

sudo make -j <number of cores>  #自己设置CPU核心数
sudo make install 

这步完成后会在/home/<username>/server/bin文件夹下生成运行文件,/home/<username>/server/etc目录下生成配置文件。将etc目录下的worldserver.conf.distauthserver.conf.dist 分别复制一份成 worldserver.confauthserver.conf

worldserver.conf内找到DataDir = "."改为DataDir = "/home/<username>/server/data"

④.提取客户端dbc、maps、vmaps、mmaps

这里耗时较长,建议使用screen单独开一个窗口。

官方文档中dbc和maps是必要的,vmaps和mmaps是强推荐的。

Some of them are optional, but highly recommended:

Directory Branch
dbc all Mandatory
maps all Mandatory
vmaps all HIGHLY Recommended
mmaps all HIGHLY Recommended
cameras all Recommended
gt master only Mandatory

这里需要将客户端先上传,假设上传路径为 /home/<username>/client

dbc&maps

cd /home/<username>/client
sudo /home/<username>/server/bin/mapextractor
sudo mkdir /home/<username>/server/data  
sudo cp -r dbc maps /home/<username>/server/data

vmaps

cd /home/<username>/client
sudo /home/<username>/bin/vmap4extractor
sudo mkdir vmaps
sudo /home/<username>/server/bin/vmap4assembler Buildings vmaps
sudo cp -r vmaps /home/<username>/server/data

mmaps

cd /home/<username>/client
sudo mkdir mmaps
sudo /home/<username>/server/bin/mmaps_generator
sudo cp -r mmaps /home/<username>/server/data

官方文档中说明出现下面类似的结果代表成功。

When this is complete you may receive the following message which can be safely ignored.

Processing Map 724
[################################################################]
Extracting GameObject models...Extracting World\Wmo\Band\Final_Stage.wmo
No such file.
Couldn't open RootWmo!!!
Done!
 
Extract V4.00 2012_02. Work complete. No errors.

⑤.数据库设置

跑数据库之前修改配置文件/home/<username>/server/authserver.conf内的mysql的登录配置。

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

/home/<username>/server/worldserver.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"

It follows this structure:

Variablename = "MySQLIP;Port;Username;Password;database"  

各字段含义为Mysql的IP地址,Mysql的端口号,用户名,密码,数据库名。

下载官方的数据库建表模板

cd ~
sudo wegt https://raw.githubusercontent.com/TrinityCore/TrinityCore/3.3.5/sql/create/create_mysql.sql

#登录mysql后

source /home/<username>/create_mysql.sql

建完表之后下载TDB_full_world_335._*.sql的数据库至/home/<username>/server/bin目录下。

该文件在TrinityCore项目中下载

⑥.服务启动

开启认证服务

sudo /home/<username>/server/bin/authserver

tc-authserver

开启游戏服务端

sudo /home/<username>/server/bin/worldserver

wow-tc-worldserver

以上两个服务能够正常开启说明整个安装过程没有问题。

⑦.调试

设置服务器地址、游戏版本号等。

进入数据库auth>表realmlist

wow-auth-realmlist

address列为连接游戏服务的地址,可以是IP也可以是域名。gamebuild为客户端版本号,这里常见的有台服12340和国服13930。

网络端口要放开3724authserver和8085worldserver。

任务汉化(可选)

wow-zh-database

汉化数据库github搜一搜都能有,找到适合自己环境和版本的。进mysql跑一下source就行。

这些整完了把authserver服务和worldserver服务重新跑一遍。

⑧.客户端修改

魔兽客户端目录下Data\zhCNrealmlist.wtf文件内是否设置为SET realmlist "服务器IP或域名" (台服客户端为Data\zhTW)。

⑨.测试

进入worldserver后台创建账号,创建命令为account create <用户名> <密码>

完了打开客户端测试一下能不能进入魔兽世界吧。

wow_client_run

3、通过WoWSimpleRegistration项目提供前端注册Web

WoWSimpleRegistration是TrinityCore官方fork项目。该项目基于php,提供简单的账号注册页面,支持市面上大多数开源Wow环境。

Support : AzerothCore, TrinityCore, AshamaneCore, CMangos.

Requirement : PHP >= 7.0

Enable gmp, gd, soap, mbstring, pdo and pdo-mysql.

首先安装php及相关依赖

sudo apt install php-fpm php-opcache php-cli php-gd php-curl php-mysql php-mbstring php-gmp

添加/etc/php/7.4/fpm/pool.d/www.conf文件下的security.limit_extensions参数,解除限制 FPM 允许解析的脚本扩展名。

security.limit_extensions = .php .php3 .php4 .php5 .php7 .js .css .jpg .png .gif .html .htm

下载并解压WoWSimpleRegistration,可以到WoWSimpleRegistration这里找。

cd /var/www/html

sudo wget https://github.com/TrinityCore/WoWSimpleRegistration/archive/refs/tags/2.0.2.tar.gz

sudo tar -zxvf 2.0.2.tar.gz

安装nginx

sudo apt install nginx

增加nginx配置

cd /etc/nginx/conf.d/

sudo vi wow.conf

我的配置文件参考

server {
    listen  80;          # 监听端口
    server_name    _; # 自己PC的ip或者服务器的域名

		root /var/www/html/WoWSimpleRegistration-2.0.2;    # 文件路径
		index index.html index.htm index.php index.nginx-debian.html;
		location ~ \.php$ {
            include snippets/fastcgi-php.conf;
            fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;
  	 }
}

修改WoWSimpleRegistration配置文件

cd /application/config

sudo cp config.php.sample config.php

config.php进行配置,具体填什么选什么跟着注释走就行了。

比较重要的几个参数

Core Type:
0 = TrinityCore
1 = AzerothCore
2 = AshamaneCore
3 = Skyfire Project
4 = OregonCore
5 = CMangos
10 = etc
=====================================================================*/
$config['server_core'] = 0;   #TC选0(默认为0)


***************** GMP REQUIRED ********************
******Uncomment extension=gmp in your php.ini******
=====================================================================*/
$config['srp6_support'] = true; // READ COMMENTS, [Please ENABLE GMP]  #21年版本的TC都选true

查一下数据库的db名称

wow-dbname

/*===================================================================
You Auth/Realmd MySQL information.
db_auth_host
    Auth Database Host
db_auth_port
    Auth Database Port
db_auth_user
    Auth Database Username
db_auth_pass
    Auth Database Password
db_auth_dbname
    Auth Database DBName
=====================================================================*/
$config['db_auth_host'] = '127.0.0.1';
$config['db_auth_port'] = '3306';
$config['db_auth_user'] = 'root';
$config['db_auth_pass'] = 'root';
$config['db_auth_dbname'] = 'realmd'; #数据库的地址、端口、用户名、密码、db名称(TC为auth)
/*===================================================================
Your character's databases.
If your server has a lot of realms you can check the example at the bottom of the file.
=====================================================================*/
$config['realmlists'] = array(
    "1" => array(
        'realmid' => 1, // Realm ID
        'realmname' => "Realm 1", // Realm Name
        'db_host' => "127.0.0.1", // MySQL Host IP
        'db_port' => "3306", // MySQL Host Port
        'db_user' => "root", // MySQL username
        'db_pass' => 'root', // MySQL password
        'db_name' => "realm1_characters" // Characters database name  #db名称(TC为characters)
    )
);

配置好config.php文件后重启php-fpmnginx,整个项目搭建完毕。

我使用的是advance主题,可以看看我的效果👉注册链接👈。

tc-register1

tc-register2

comments powered by Disqus