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应该也能轻松解决。
另外我使用的是vc2008在vista系统中没有问题,其他版本没有尝试,可能会有些问题。
代码分析将陆续完成,因为我是新人,技术水平和表达能力有限~欢迎拍砖
代码:
这里的是纯粹的服务器代码,源地址:
用户名:anonymous,密码:空 可以使用svn工具(如Tortoise SVN)获取.这里强烈推荐安装一个Tortoise SVN,获取各种开源代码都十分方便,后面的很多资源也都是用SVN获取。
另外需要pcre,zlib、mysql和OpenSSL几个库,在branches\3_8_stable\dep\目录中有。这个目录是稳定版本,但是\trunk\目录中的应该是最新的(加入了vmap)
数据库:
首先需要安装一个MySql、SQLite或者PostGres数据库,然后就是数据库结构。
帐号数据库和角色数据库在代码的Sql目录中有。还需要一个游戏世界数据库,曾经用过ACDB,但是结构不是很吻合,这里使用了NCDB能够成功跑起来。
NCDB(ascent的一个数据库版本)SVN地址:
帐号密码需要到上注册论坛并邮件激活才可以用。
资源
DBC、Map等可以使用extras目录中的工具ad.exe和mpqe.exe从wow客户端中导出。大概1G左右。
脚本代码:
Moon++ :
(AI脚本很不错)
AspireDev:
svn://svn.AspireDev.org/AspireDev (外加功能脚本)
OpenAscentScript:
Lua++:
OpenAscentScript:
安装数据库:
1. 创建数据库:accounts(帐号数据库用于登录)
2. 在accounts中运行Ascent\sql\下的character_structure.sql和logon_structure.sql。然后还有sql\*****_updates\目录的更新也根据需要导入吧(看你用的是哪个版本的代码了)。
3. 创建数据库:ncdb(游戏世界数据库)。
4. 然后就是安装游戏世界数据库。按照官方的方法一直安装不成功,最后在nc-db.info上dfighter发布的一个安装好的导出脚本。 导入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的原作者也放弃开发了。
如果是真的,我真为那些人感到羞愧,丫的太有才了,这手段都能想得出来。
阅读(1008) | 评论(0) | 转发(0) |