Ascent代码分析1-运行环境架设

来源:互联网 发布:网络管理分为哪两类 编辑:程序博客网 时间:2024/05/22 06:30

Ascent是一个魔兽世界服务器的模拟器开源项目,也就是现在使用的比较广泛的魔兽世界私服之一(还有个就是Mangos,Ascent的性能相对较高,有私服广告称,四核服务器能带1000玩家,根据其他人的反应应该差距不会太大。另外感觉ascent的代码相对mangos实现较为简洁易懂,所以稍微研究一下。

程序主要有LogonServer,RealmServer,voicechat,world四个。(Voicechat顾名思义,应该是只管语音聊天的,不管他了先。)
实际上只需要LogonServer和world就可以运行。
LogonServer是登录服务器,RealmServer是区域服务器(如一区的卡德罗斯服务器),world则是游戏世界服务器。
    当玩家登陆时,先由LogonServer验证密码并生成一个SessionKey,然后如果启动RealmServer就返回注册的战区列表,选择服务器后连接相应的world服务器.world会向LogonServer索取用户的Session信息进行认证。
    World中基本不包含游戏逻辑和数据,只提供一些接口。脚本都以动态库的形式实现。当服务器启动时会搜索脚本目录中的脚本动态库,并加载安装。
    数据库一般有三个:accounts,character和world.就是帐号、角色和世界数据库.当然如果不怕乱也可以放在一个数据库里。

因为暴雪曾对其采取过法律手段打击,所以目前程序、脚本、数据库、资源被分为多个项目分别开发.在这里只是关心服务器代码架构学习研究,对游戏内容没有特别研究。

下面列出了大概的环境搭建步骤大方向和相关资源,其中可能有些细节比较繁琐没有仔细说明(比如配置),baidu或者google应该也能轻松解决。

另外我使用的是vc2008vista系统中没有问题,其他版本没有尝试,可能会有些问题。

 

代码分析将陆续完成,因为我是新人,技术水平和表达能力有限~欢迎拍砖

 

代码:

这里的是纯粹的服务器代码,源地址:

http://mmoforge.org/svn/ascent/ 

用户名:anonymous,密码:空  可以使用svn工具(Tortoise SVN)获取.这里强烈推荐安装一个Tortoise SVN,获取各种开源代码都十分方便,后面的很多资源也都是用SVN获取。

另外需要pcre,zlibmysqlOpenSSL几个库,在branches/3_8_stable/dep/目录中有。这个目录是稳定版本,但是/trunk/目录中的应该是最新的(加入了vmap

数据库:

       首先需要安装一个MySqlSQLite或者PostGres数据库,然后就是数据库结构。

帐号数据库和角色数据库在代码的Sql目录中有。还需要一个游戏世界数据库,曾经用过ACDB,但是结构不是很吻合,这里使用了NCDB能够成功跑起来。

       NCDBascent的一个数据库版本)SVN地址:

       http://nc-db.info/svn/ncdb/

       帐号密码需要到http://nc-db.info/上注册论坛并邮件激活才可以用。

 

资源

DBCMap等可以使用extras目录中的工具ad.exempqe.exewow客户端中导出。大概1G左右。

                       

脚本代码:

Moon++ :

http://mmoforge.org/svn/moon  (AI脚本很不错)

AspireDev:

svn://svn.AspireDev.org/AspireDev  (外加功能脚本)

OpenAscentScript:

http://mmoforge.org/svn/oas

Lua++:

http://mmoforge.org/svn/luaplusplus

OpenAscentScript:

http://mmoforge.org/svn/oas

 

 

安装数据库:

1.      创建数据库:accounts(帐号数据库用于登录)

2.      accounts中运行Ascent/sql/下的character_structure.sqllogon_structure.sql。然后还有sql/*****_updates/目录的更新也根据需要导入吧(看你用的是哪个版本的代码了)。

3.      创建数据库:ncdb(游戏世界数据库)。

4.      然后就是安装游戏世界数据库。按照官方的方法一直安装不成功,最后在nc-db.info上dfighter发布的一个安装好的导出脚本。http://project.nc-db.info/projects/list_files/ncdb 导入mysql就能正确运行。下面是官方的方法(相当罗嗦,仅供参考):

5.      ncdb中运行下Ascent/sql/下的world_structure.sql

6.      打开ncdb目录。

7.      修改win-install.bat中数据库连接密码。

8.      保存后安装数据库和changesets

9.      安装php运行环境,拷贝webinstaller目录中的文件到php目录,然后打开网页安装。

但是这个安装过程总出错,还会导致数据库中已安装的数据丢失。一直不知道是怎么回事。

 

编译代码:

1.      设置附加库目录(我是直接设置到vc目录中了)。

主要就是前面说的几个库

2.      使用pcre的静态库需要#define PCRE_STATIC,或者在工程预处理器定义中添加PCRE_STATIC,否则会有链接错误。

3.      修改ascent-realmserver工程master.cpp Line 49左右,配置正确的数据库连接帐号以及数据库连接池容量(默认是1,但是不知道被谁占用了,会在后面一直阻塞,所以要改成2+)。

4.      编译

5.      拷贝Ascent/src目录下的四个.conf文件到/Ascent/bin/debug/目录,根据说明配置。主要是数据库连接和帐号,以及各个服务器间的认证信息。

6.      拷贝需要的相关文件(dbc必须,script_bin会自动搜索存在的加载, map…..),运行

7.      修改客户端的reamlist.wtf,地址改为127.0.0.1,直接运行wow.exe

8.      添加帐号:在accounts数据库的accounts表中添加,acc是个自增字段,login是用户名,pass就是密码。服务器的帐号认证是缓存到内存中的,在数据库中添加完帐号在logonserver中输入reload重新载入帐号。

到这里应该可以登录,创建人物并进入游戏。

 

编译脚本:

       要把前面的脚本代码拷贝到Ascent/src/scripts/中编译,会在debug/script_bin/目录中生成动态库脚本。

 

==============================================================

ps:另外求证一八卦:

传闻说刚开始曾有人拿ascent的代码出来改改在国内卖钱,后来又有人免费放出来。结果用来赚钱的那拨人就ddos攻击国外的ascent源码服务器。直接后果是ascent的很多网站都屏蔽了中国的ip(反正我是打不开),然后ascent的原作者也放弃开发了。

如果是真的,我真为那些人感到羞愧,丫的太有才了,这手段都能想得出来。

            
原创粉丝点击