平行世界概要设计.docx
- 文档编号:27290814
- 上传时间:2023-06-28
- 格式:DOCX
- 页数:14
- 大小:461.57KB
平行世界概要设计.docx
《平行世界概要设计.docx》由会员分享,可在线阅读,更多相关《平行世界概要设计.docx(14页珍藏版)》请在冰豆网上搜索。
平行世界概要设计
平行世界概要设计
拟制:
Steve
日期:
2004-09-20
审核:
日期:
深圳市腾讯计算机系统有限公司
版权所有不得复制
文档历史
修订日期
修订内容
协议版本
修订人
2004-9-20
创建
V0.1
Steve
目录
第一章前言4
第二章平行世界架构4
2.1平行世界的影响4
2.2平行世界的构成5
2.3数据结构7
2.4平行世界实例的创建、进入和删除9
2.4.1创建9
2.4.2进入10
2.4.3删除11
2.4.4对原有C/S协议的影响12
第三章平行世界实例的存储13
第一章
前言
平行世界完全实现在ZoneServer端,没有任何数据库相关的操作。
本概要设计主要描述平行世界在ZoneServer上的实现方式。
为了便于描述,本文档中作如下约定:
地图数据:
指该地图内含的、静态的信息,如阻挡信息、链接信息、事件区信息等等。
地图:
地图具有自己的大小、位置以及地图数据,地图描述的是游戏世界的静态属性。
副本地图:
表明该地图具有和其对应的主地图一样的地图数据,引入副本地图是为了共享地图数据。
地图实例:
地图的一个运行时实例。
地图实例是构成游戏世界的最基本单位,地图实例不仅包含静态信息(地图数据),而且包含动态信息(地图上的对象)。
地图数据、地图、副本地图、地图实例的关系如下:
注:
副本地图与地图之间的对应根据具体的需要,在某些情况下可以去掉这一对应关系,地图实例直接与地图相关联。
第二章平行世界架构
2.1平行世界的影响
在引入平行世界之前,地图实例是在游戏世界初始化的时候统一创建的,创建后在后续的运行过程中不会发生变化。
引入平行世界之后,地图实例在运行过程中会不断的创建、删除,而且也把地图实例分成了两类,一类是不会动态创建的地图实例(非平行世界中的地图),另一类是动态创建、删除的地图实例(平行世界中的地图)。
平行世界的引入,并不影响到“地图”和“地图数据”。
所以,对于平行世界的讨论,只涉及到“地图实例”和“副本地图”层面。
2.2平行世界的构成
每一个平行世界都是多个副本地图的集合,不同的平行世界,对应于不同的副本地图集合。
平行世界具有自己的一些属性,如平行世界的名字,异常切换点等等。
平行世界描述的是静态属性,即其静态构成。
平行世界存在于游戏世界中的对应部分叫平行世界实例。
每一个平行世界可以用平行世界ID来标识,相当于一个模板,平行世界实例使用平行世界实例ID来标识,每一个平行世界实例都跟一个平行世界相对应。
在引入平行世界之前,地图实例是与副本地图是一一对应的。
所以为了标识一个地图实例,只需要使用副本地图的ID来标识就可以了。
引入平行世界之后,地图实例和副本地图之间是n:
1的关系,因此不能简单的使用副本地图的ID来标识地图实例。
为了标识地图实例,使用如下的方式:
地图实例ID(4Byte)=平行世界实例ID(2Byte)+地图副本ID(2Byte)。
对于非平行世界的地图实例,其平行世界实例ID为0。
对于平行世界的地图实例,其平行世界实例ID在1----32767之间。
平行世界ID用来区分该地图实例是否处在平行世界实例中以及处在哪个平行世界实例中。
地图副本ID用来标识该地图实例使用的静态资源。
原有的地图连接信息在连接的时候指定的是副本地图ID,而现在地图实例需要既指定副本地图ID,还需要指定平行世界实例ID,这样就导致了原有的链接信息无法使用。
按照目前的设定,一个地图实例,要么连接到同一平行世界实例中的其他地图实例,要么连接到非平行世界中的地图实例,因此只需要额外的信息来确定链接点是否属于平行世界即可。
为了继续沿用原来的地图链接信息,需要作如下约定:
副本地图ID大于10000小于32767的是专为平行世界使用的副本地图。
对于平行世界的副本地图ID:
平行世界内的副本地图ID=10000+100*平行世界ID+平行世界内编号。
这样,可以支持227个平行世界,每个平行世界最多可以有100张地图。
副本地图ID小于10000的是专为非平行世界使用的副本地图。
非平行世界内的副本地图ID=内部编号。
按如上约定,通过副本地图ID就可以知道该链接点是属于平行世界的还是属于非平行世界的。
2.3数据结构
平行世界实例是与组队相关的。
平行世界实例的创建、进入和退出也是与组队的状态变化相关的。
因此,在原组队的数据结构中还需要增加一个平行世界实例ID。
对于各种ID作如下命名约定:
MapIndex:
副本地图ID,副本地图ID为0表示该副本地图不存在;
MapInstID:
地图实例ID;
PworldInstID:
平行世界实例ID,平行世界实例ID为0表示不在平行世界中;
PworldID:
平行世界ID;
MapInstID=PworldInstID+MapIndex
组队的数据结构:
structtagZoneTeam
{
WORLDUNIQUEIDstTID;
intiFlags;
charszName[CS_MAX_NAME_LEN];
charszLeader[CS_MAX_NAME_LEN];
intiCount;
intiPworldInstID;//newadded
intiPworldInstPos;//newadded,用于快速索引
ZONETEAMMEMBERmembers[CS_MAX_TEAM_MEMBER];
};
平行世界的数据结构:
structtagZonePworld
{
intiPworldID;//平行世界ID
intiMap;//该平行世界中的地图数。
intiArea;//该平行世界的总区域数。
intiMonster;//该平行世界的总怪物数。
intiNPC;//该平行世界的总NPC数。
intiExpMapIndex;//异常切换地图。
PositionstExpPos;//异常切换点。
charszName[CS_MAX_NAME_LEN];//该平行世界的名字
shortanMapIndex[CS_MAX_PWORLD_MAP];//该平行世界中的副本地图ID列表。
};
平行世界实例的数据结构:
structtagZoneMapInstIdx
{
intiMapInstID;
intiMapInstPos;
};
structtagZonePworldInst
{
intiPworldInstID;//该平行世界实例的ID
intiPworldID;//该实例对应的平行世界的ID
intiPworldPos;//该实例对应的平行世界的快速索引
time_ttStart;//平行世界实例的创建时间
WORLDUNIQUEIDstTID;//与该平行世界实例相关的组队ID
ZONEMAPINSTIDXastMapInstIdx[CS_MAX_PWORLD_MAP];
};
地图实例的数据结构:
structtagZoneMapInst
{
intiMapInstID;//地图实例ID
intiMapPos;//副本地图快速索引
intiAreaPos;//区域实例的位置。
};
副本地图的数据结构,沿用原来的MapIndex结构。
原有的区域信息分成两个部分,一部分是区域信息(静态信息,事件信息),另一部分是区域实例信息(动态信息);
typedefstruct{
intiTotal;
intaiID[MAX_AREA_PROC];
}AreaProc;
typedefAreaProcArea;
structAreaInst
{
intiAnimate;
intaiAnimate[MAX_AREA_ANIMATE];
intiInanimate;
intaiInanimate[MAX_AREA_INANIMATE];
};
则整个数据流程图为:
2.4平行世界实例的创建、进入和删除
2.4.1创建
玩家能否创建平行世界实例,由脚本进行判断。
本流程图主要描述实际的创建过程。
2.4.2进入
进入的条件判断由脚本来处理,本流程中暂不考虑该问题。
2.4.3删除
删除一个平行世界实例的触发条件有两个:
1.平行世界实例中没有任何一个玩家存在。
2.平行时间实例存在的时间超过了规定的最大时间。
删除的流程如下:
2.4.4对原有C/S协议的影响
在进入游戏时或者切换地图时(CS_CMD_ENTERWORLD)发送的消息里,除了副本地图ID外,还需要包括平行世界实例ID和平行世界的名字。
第三章平行世界实例的存储
由于平行世界的引入,增大了“副本地图”、“地图实例”、“区域”、“区域实例”的数据存储要求,同时新增了“平行世界实例”、“平行世界”的数据存储。
由于副本地图的数量不多,顶多在几百个左右。
现有的“副本地图”、“地图实例”、“区域”等的存储不超过10M。
引入平行世界后,“副本地图”、“地图实例”、“区域”等的存储可以控制在20M以内。
“平行世界”的数量在几十左右,而且每个“平行世界”数据结构需要的存储数量很少,所以平行世界的存储量可以忽略。
“平行世界实例”的数量可以控制在500左右,每个“平行世界实例”数据结构的大小约为256个字节,总的存储量在128K左右。
主要的数据存储量在“区域实例”的存储上,每个“区域实例”需要的存储约为2K。
目前企划案的设定如下:
按照目前的设计,东方世界的平行世界个数会控制在15个以内。
根据以下假设:
Ø假设每台服务器最多可以支撑2000人同时在线
Ø假设平均有20%的玩家会进入平行世界
Ø对于组队任务,假设平均每个组队的人数为4人
由此可知每台服务器上最多可有100个副本地图同时存在。
Ø假设目前东方世界所有的平行世界存放在一台服务器上
那么每个平行世界平均对应6~7个左右的副本地图。
Ø假设每个副本地图的地图大小平均为8×8=64屏
那么每台服务器上总的副本地图的大小为6400屏左右。
Ø假设每台服务器上可以存在的最大怪物数为40000个,
Ø假设50%的怪物是副本地图中的怪物
那么每台服务器上的副本地图最多可以存在的怪物为20000个。
怪物的平均密度约为每屏3个。
一个区域的大小为4屏,以6400屏计算,存储容量为6400/4*2K=3.2M,如果允许20000屏,则存储容量为20000/4*2K=10M,都是可以接受的数值。
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 平行 世界 概要 设计
![提示](https://static.bdocx.com/images/bang_tan.gif)