魔兽世界 标签

TrinityCore一些常用的数据库查询脚本

  |   0 评论   |   0 浏览

1.查询在线用户

SELECT
    GUID AS 序号,
    ACCOUNT AS 账户,
    NAME AS 角色名称,
    ELT(
        RACE,
        '人类',
        '兽人',
        '矮人',
        '暗夜精灵',
        '亡灵',
        '牛头人',
        '侏儒',
        '巨魔',
        '',
        '血精灵',
        '德莱尼'
    ) AS 种族,
ELT(class,'战士','圣骑士','猎人','盗贼','牧师','死亡骑士','萨满','法师','术士','','德鲁伊') AS 职业,
LEVEL AS 等级,
ceil(money/10000) AS 金币,
arenapoints AS 竞技场点数,
totalHonorPoints AS 荣誉点数,
IF(ONLINE = 1,'在线','离线') AS 在线状态,
CONCAT(floor(totaltime/86400),'天', floor(MOD(totaltime,86400)/3600),'小时') AS 游戏时间
FROM
    characters
WHERE online = 1

2.查询任务及其相关信息

SELECT
	qt.id AS 任务ID,
	qt.questtype AS 任务类别,
	qt.logtitle AS 任务名称,
	qt.logDescription AS 任务简报,
	qt.questDescription AS 任务内容,
	qt.objectivetext1 AS 文本1,
	qt.objectivetext2 AS 文本2,
	qt.objectivetext3 AS 文本3,
	qt.objectivetext4 AS 文本4,
	it. NAME AS 道具名称1,
	ct. NAME AS 生物名称1,
	ct2. NAME AS 生物名称2,
	ct3. NAME AS 生物名称3,
	gt. NAME AS 事件名称1,
	gt2. NAME AS 事件名称2,
	gt3. NAME AS 事件名称3,
	gt4. NAME AS 事件名称4
FROM
	quest_template qt
LEFT JOIN item_template it ON qt.RequiredItemId1 = it.entry
LEFT JOIN creature_template ct ON qt.RequiredNpcOrGo1 = ct.entry
LEFT JOIN creature_template ct2 ON qt.RequiredNpcOrGo2 = ct2.entry
LEFT JOIN creature_template ct3 ON qt.RequiredNpcOrGo3 = ct3.entry
LEFT JOIN gameobject_template gt ON gt.entry = ABS(qt.RequiredNpcOrGo1)
LEFT JOIN gameobject_template gt2 ON gt2.entry = ABS(qt.RequiredNpcOrGo2)
LEFT JOIN gameobject_template gt3 ON gt3.entry = ABS(qt.RequiredNpcOrGo3)
LEFT JOIN gameobject_template gt4 ON gt4.entry = ABS(qt.RequiredNpcOrGo4)

 

基于TrinityCore的魔兽世界服务器架构规划

  |   0 评论   |   0 浏览
TrinityCore是一个开源项目,维护于GitHub。TrinityCore基于MaNGOS开源项目并做了大量改动与优化,目前已经独立出来并拥有大量维护者,拥有成熟的社区环境。 TrinityCore是一个魔兽世界服务端模拟器,目前经过多年的维护于优化,已经基本模拟了所有魔兽世界服务端的功能与特性,而且没有严重影响游戏运行的BUG。 TrinityCore开源项目目前在GitHub上面维护了两个最重要的分支,一个是6.x版本(最新版),一个是3.3.5版本(巫妖王之怒)。 下面我们就将基于TrinityCore开源项目(3.3.5分支)讨论如何规划一个魔兽世界的公益服务器。

〇、整体架构共分为三层

1.Client客户端
2.Server服务端
3.DataBase数据库
如下图所示:
服务器架构图
图中灰色框体内是TrinityCore开源项目部分,其他颜色框体是开服必须但是非TrinityCore部分。下面我们来分别说明:

一、客户端

1.WOW Client :游戏客户端,版本限制为3.3.5a(国服13930,台服12340)。
2.Launcher:登录器,使用C#编写的windows程序,提供登录功能。基于Jeakz's Launcher改造。

二、服务器

1.WEB Server:网站系统,基于通用CMS改造,提供账号注册、修改密码、服务器状态查询等功能。
2.World Server:游戏世界服务器,基于TrinityCore改造。支撑游戏运行的最重要的服务器。
3.Auth Server:鉴权服务器,基于TrinityCore,无改动。提供登录与服务器列表功能。

三、数据库

1.Web数据库:对应WEB Server服务器的数据库。
2.Characters数据库:角色数据库,存储所有角色人物相关的信息。TrinityCore提供建表SQL。
3.World数据库:世界数据库,存储整个魔兽世界的一切信息,包括NPC,怪物,装备,道具,任务,副本等等所有一切。TrinityCore提供建表SQL。
4.Auth数据库:权限数据库,存储服务器列表,玩家账户等信息。TrinityCore提供建表SQL。

在Windows系统上搭建TrinityCore开发环境

  |   0 评论   |   0 浏览

〇、前言

TrinityCore是一个魔兽世界服务端模拟器,我们可以通过TrinityCore来学习大型网络游戏服务端的编写,从中汲取营养来编写我们自己的游戏。

一、前期准备工作

CPU需要支持SSE2指令集 Boost版本大于等于1.59.0 MySQL数据库版本大于等于5.1.0 OpenSSL版本为1.0.x CMake版本大于等于3.3.2 MicroSoft Visual Studio (Community)版本大于等于14 (2015 update 3)

1.安装 Git Extensions

注意其中Git、MySYSGit和KDiff这三个软件必须全部安装,安装Git的时候,在路径选择那里选择“RunGit from the Windows Command Prompt”。MySYSGit和KDiff使用默认选项安装即可。

2.安装IDE

安装Visual Studio 2015,注意当安装VS2015时,默认是不支持C++的,我们需要手动选择Visual C++,选择自定义安装,然后将Visual C++选项选中,如下图所示:

12

3.安装MySQL

TrinityCore支持的MySQL版本为5.55.6,请勿使用5.7及以上版本。
  1. 下载安装包
  2. 在MySQL Configuration配置中,设置用户名为trinity,密码同样为trinity,并且确保该用户拥有localhost域访问权限。
  3. 建议将MySQL注册为服务,这样数据库就可以随Windows开机启动了。

4.选择一款数据库管理软件

1)SQLYog Community Edition(强烈推荐) 2)HeidiSQL (对新手友好) 3)MySQL Workbench(MySQL官方出品,个人感觉使用起来不太友好,但是是唯一可以建立模型的软件)

使用你安装好的数据库管理软件连接数据库,测试数据库是否安装成功。

5.安装Boost

下载对应 Visual Studio 2015 的版本:

1)64bit:http://sourceforge.net/projects/boost/files/boost-binaries/1.59.0/boost_1_59_0-msvc-14.0-64.exe/download

2)32bit:http://sourceforge.net/projects/boost/files/boost-binaries/1.59.0/boost_1_59_0-msvc-14.0-32.exe/download

Boost 1.59.0是可以使用的最低版本,推荐使用1.60.0版本。

64bit: https://sourceforge.net/projects/boost/files/boost-binaries/1.60.0/boost_1_60_0-msvc-14.0-64.exe/download

32bit: https://sourceforge.net/projects/boost/files/boost-binaries/1.60.0/boost_1_60_0-msvc-14.0-32.exe/download

安装到默认路径(C:\local\boost_1_XX_0),然后添加一个名为“BOOST_ROOT”的环境变量到你的安装路径,比如“C:/local/boost_1_60_0”。确保没有末尾斜杠,如下图所示:

boost_envs

注意:这张图片中的版本号为1_55_0,将它改为你的实际版本号。

6.安装CMake

下载cmake-3.6.2-win64-x64.msi 这个版本,不要下载RC (Release Candidate)版本。注意要下载64bit版本。如图所示: dcmake

7.安装OpenSSL

不要下载light版本,分为32和64位两个版本,下载对应版本即可。我们这里选择64bit版本,如图所示:

注意:不能选择最新版本1.1.0,必须选择1.0.x版本。

openssl

如果安装过程中提示没有VisualC++库的话请到网上自行下载安装。

二、代码编译

1.从GIT拉取代码

创建一个文件夹,在该文件夹上点击鼠标右键,选择“Git Extensions -> Clone”,如下图所示: git

3.3.5a版本仓库地址:

Repository to clone: https://github.com/TrinityCore/TrinityCore
Destination: D:\Trinity\Source
Subdirectory to create: <none>
Branch: 3.3.5
Personal Repository: Yes

6.x版本仓库地址:

Repository to clone: https://github.com/TrinityCore/TrinityCore
Destination: D:\Trinity\Source
Subdirectory to create: <none>
Branch: 6.x
Personal Repository: Yes

我们这里选择3.3.5的仓库拉取代码。

2.使用CMake生成VS2015使用的Visual C++ 工程

编译之前在硬盘上建立编译文件目录,比如“D:\Trinity\Build”。

1)运行CMake,如下图所示:

step2

2)点击 Browse Source... -> 选择源码目录(D:/Trinity/Source)

step3

3)点击 Browse Build... -> 选择编译目录(D:/Trinity/Build)

step4

4)点击 Configure

step5

5)确保 Use default native compilers 选项是选中状态

step6

6)选择Visual Studio 14 Win64

step7

7)点击Finish

step8

8)确保Tools是被选中状态。

step9

9)再次点击Configure

step10

10)点击Generate,VS所需的资源文件已经生成到D:/Trinity/Build目录了。

3.使用VS2015编译代码

使用VS2015打开D:/Trinity/Build目录下的TrinityCore.sln文件,经过一段时间的读取,VS加载了TrinityCore整个工程。我们选择菜单中的Build->Configuration Manager选项打开编译配置界面。

设置 Active SolutionConfiguration 为 Release。
设置 Active Solution Platform 为 Win64 (确保上面安装的软件全部实64位的)。
点击 Close 关闭对话框。

在 Solution Explorer 中右键单击 ALL_BUILD 选择 Clean。
清理完毕后再次右键单击ALL_BUILD 选择 Build。
现在就已经开始编译源码了,这个过程要花5-30分钟,视你的电脑配置而定。

完成后会提示:
========== Build: 22 succeeded, 0 failed, 0up-to-date, 0 skipped ==========

你可以在D:\Trinity\Build\bin\Release找到编译好的文件。
想要正常运行程序,你需要如下文件:

  • libeay32.dll
  • libmySQL.dll
  • ssleay32.dll
  • worldserver.conf.dist
  • worldserver.exe
  • authserver.conf.dist
  • authserver.exe
其中worldserver.conf.dist 、worldserver.exe 、authserver.conf.dist和authserver.exe是编译成果,libeay32.dll、libmySQL.dll和ssleay32.dll需要从以下路径(如果你安装软件的时候手动改过路径,请从你改过的路径中拷贝)手动拷贝过来:

libmySQL.dll - C:\Program Files\MySQL\MySQL Server 5.x\lib
libeay32.dll, ssleay32.dll - C:\OpenSSL-Win64\bin

至此,编译完成!

4.保持更新

在源码目录(D:\Trinity\Source)上点击右键,选择Git菜单中的Pull(拉取代码的意思)选项。

打开CMake软件,点击Configure,然后点击Generate。

使用VS2015重新编译。

完成!

三、导入数据库并准备资源文件

TrinityCore使用MySQL数据库,其中我们需要建立三个数据库,它们分别是authcharactersworld
  • Auth:权限数据库,存储服务器列表,玩家账户等信息。
  • Characters:角色数据库,存储所有角色人物相关的信息。
  • World:世界数据库,存储整个魔兽世界的一切信息,包括NPC,怪物,装备,道具,任务,副本等等所有一切。

1.下载数据脚本

下载world数据库sql脚本,地址如下:

https://github.com/TrinityCore/TrinityCore/releases/tag/TDB335.61

打开以上网址,选择TDB_full_335.61_2016_04_11.7z下载并解压缩。

2.导入数据库脚本

1)执行D:\Trinity\Source\TrinityCore\sql\create\create_mysql.sql。

2)选择auth数据库,执行D:\Trinity\Source\TrinityCore\sql\base\auth_database.sql脚本。

3)选择characters数据库,执行D:\Trinity\Source\TrinityCore\sql\base\characters_database.sql脚本

4)选择world数据库,执行刚刚下载解压缩的TDB_full_world_335.61_2016_04_11.sql脚本。

3.保持数据库更新

每次启动worldserver.exe时,会自动执行最新的SQL升级脚本,无需人工干预。

4.准备资源文件

除了数据库之外,服务器的运行还依赖以下资源文件:
目录 版本  是否必须
dbc all 必选
maps all 必选
vmaps all 强烈推荐
mmaps all 强烈推荐
cameras 3.3.5a only for now 推荐
gt 6.x only 必选

1)取得资源文件提取工具:

  • extractor.bat 批处理文件,我们主要通过这个文件执行命令提取资源文件。
  • mapextractor.exe 这个工具负责提取dbc和cameras文件。
  • vmap4extractor.exe 这个工具负责提取maps文件。
  • mmaps_generator.exe 这个工具负责提取mmaps文件。
  • vmap4assembler.exe 这个工具负责提取vmaps文件。
在D:\Trinity\Build\bin\Release目录中可以找到4个可执行文件,如图所示: %e8%b5%84%e6%ba%90%e6%8f%90%e5%8f%96%e5%b7%a5%e5%85%b7

在D:\Trinity\Source\TrinityCore\contrib目录中可以找到extractor.bat,如图所示:

%e6%89%b9%e5%a4%84%e7%90%86

将以上文件拷贝到魔兽世界3.3.5客户端的根目录中。

2)提取资源文件

双击运行extractor.bat,如下图所示: extractor

输入1然后回车,这时候会提取dbc和maps文件。

等待提取结束,然后输入2回车,这时候会提取vmaps文件。

等待提取结束,然后输入3回车,这时候会提取mmaps文件,注意该步骤将花费大量时间,如果PC性能一般,可能会用2-3个小时左右。

3)拷贝提取好的资源文件

提取结束后,在魔兽世界客户端根目录会多出5个文件夹,分别是Cameras、dbc、maps、mmaps和vmaps,将他们拷贝到我们编译后的服务端程序根目录中,如下图所示: %e8%b5%84%e6%ba%90

四、配置网络并启动

1.修改 authserver.conf 配置文件

修改authserver.conf.dist为authserver.conf,然后使用文本编辑器打开。

找到数据源配置(MYSQL SETTINGS)

修改LoginDatabaseInfo = "localhost;3306;trinity;trinity;auth"

2.修改 worldserve.conf 配置文件

修改worldserve.conf.dist为worldserve.conf,然后使用文本编辑器打开。

同样修改

LoginDatabaseInfo = "localhost;3306;trinity;trinity;auth"
WorldDatabaseInfo = "localhost;3306;trinity;trinity;world"
CharacterDatabaseInfo = "localhost;3306;trinity;trinity;characters"

注意:如果你的数据库是使用的是你自己设定的用户名和密码,请将红色字体对应修改为你自己设定的用户名的密码(红色字体部分前面是用户名,后面是密码)。

3.修改服务器IP地址

修改auth库中realmlist表中的address字段为你的公网IP地址,如下图所示: %e6%95%b0%e6%8d%ae%e5%ba%93ip%e5%9c%b0%e5%9d%80%e9%85%8d%e7%bd%ae

注意:如果你只是在本机测试,不在外网发布可以忽略这一步骤。

4.确认游戏客户端版本号

修改gamebuild字段为你的游戏客户端(国服为13930,台服为12340)。

5.启动服务器

运行authserver.exe,这个是登录与网关程序,启动成功如下图所示: authserver

运行worldserver.exe,这个是游戏主程序,启动成功如下图所示:

worldserver

6.创建账号并授予GM权限

在worldserver.exe的DOS窗口中输入如下命令:
  • 创建账号命令: account create <user> <pass>
  • 创建账号例子: account create test test
  • 授予GM权限命令: account set gmlevel <user> 3 -1
  • 授予GM权限例子: account set gmlevel test 3 -1

7.修改客户端的连接地址

在客户端根目录建立一个txt文本文件

在里面输入:

echo y | rd /s "Cache"
echo SET realmlist "127.0.0.1" > Data\zhTW\realmlist.wtf
echo SET realmlist "127.0.0.1" > Data\enTW\realmlist.wtf
echo SET realmlist "127.0.0.1" > Data\zhCN\realmlist.wtf
echo SET realmlist "127.0.0.1" > Data\enCN\realmlist.wtf
echo SET realmlist "127.0.0.1" > Data\enUS\realmlist.wtf
echo SET realmlist "127.0.0.1" > realmlist.wtf
start wow.exe
goto end

注意:如果你配置了公网IP地址,这里的127.0.0.1需要修改为你的公网IP地址才可以。

保存该文件,将扩展名改为bat并运行。

恭喜你,经过漫长的工作,你终于可以进入游戏了!这时你可以用刚才创建的GM账号进行游戏!你将在独属于你自己的世界中尽情遨游!

其他注意事项

  1. 如果你想在其他PC上运行TrinityCore,你可能会需要安装Microsoft Visual C++ 2015 Redistributable Package
  2. Windows XPWindows 2003 不被支持,请不要做无谓的尝试了。

附录

  • GM命令大全 https://trinitycore.atlassian.net/wiki/display/tc/GM+Commands
  • 日志配置 https://trinitycore.atlassian.net/wiki/display/tc/Logging+Configuration
原创文章,版权归作者刘小平所有,在保留作者姓名与原文地址的情况下允许转载。