Chinaunix首页 | 论坛 | 博客
  • 博客访问: 375199
  • 博文数量: 37
  • 博客积分: 6000
  • 博客等级: 准将
  • 技术积分: 1266
  • 用 户 组: 普通用户
  • 注册时间: 2006-03-16 19:52
文章分类

全部博文(37)

文章存档

2011年(1)

2010年(7)

2009年(12)

2008年(17)

我的朋友

分类: C/C++

2009-09-13 00:45:53

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) |
给主人留下些什么吧!~~