随着网络游戏的发展,任务越来越成为游戏的重要内容之一,甚至专门出现了标榜任务为游戏主要玩法的网络游戏,任务成为了游戏中玩家获得乐趣的重要手段,也是游戏的特色之一,精彩的任务系统,不但能丰富游戏乐趣,也是重要的道具和经验来源,下面从服务器端和客户端两方面,以一个数值策划的角度出发,通过数据结构和操作流程来论述任务系统。至于任务在具体游戏中的规划则略去,以提供一个通用的框架模板. 本文不涉及具体任务的设计以及任务规划.也不包括任务撰写方式在数据结构和流程上的优化方法.任务的脚本实现也不在讨论之列.
一,概述
任务系统数据结构要包含的内容分两部分,服务器部分和客户端部分.
服务器部分:任务完成标识表,任务变量记录表 客户端部分:任务文字说明表
二,设计理念 任务完成标识表其实只是一个简单的字符串,一般将此字符串存储在角色数据里的在一个字段中,用二进制的位表示任务的完成情况,使用时将此字符串按每2位读取一次的方式读取到一个独立的数组中(使用2位来表示一个任务的情况,00表示任务未接,11表示已经完成,01表示已接未完成,10表示接了失败),按照数组的下标来对应相应的任务(如第18组数据对第18号任务,第2000组对应第2000号任务)即使需要记录2048个任务,也只需花费很少的数据空间.甚至为了节约起见,只用一位二进制来记录任务的 完成情况(0未完成,1完成),一个字符就可以记录八个任务的完成情况,很节省吧.
任务变量记录表是一组数据,被存储在服务器端的角色数据里,主要记录任务的完成情况,一般通过记录任务的编号(体现在任务完成标识表里就是被阅读后的数组下标),任务变量名,任务变量值等来获得一个任务的具体完成情况,为了保证数据的节约,这个表是有大小限制的,也就是说,这种方式,玩家同时可接的任务数量是有上限的,不过这不是大问题,很多游戏都是这么做的,EQ,WoW~
任务文字说明表就完全是客户端的文字说明显示了,服务器通过阅读任务变量记录表统计出角色当前有的任务编号,发给客户端,客户端通过编号显示任务日志.很简单,没什么好说的
三,表结构说明 好,现在我们要做一个任务系统,假设游戏中最终有2048个任务(不少了,wow共有3000个任务,而且还只是玩家层面的任务数量,实际上一个系列的七八个任务可能只用了一个任务完成标识,其余是通过任务变量来区别的),玩家同时可接的任务数量为20个任务完成标识表
数据名 数据类型 长度 字段说明
MissionFlag Int数组 2048字节 完成标记
说明:此字符串存储在角色数据中,为2进制,暂定2048字节,存储在一个字段中,可标记2048个任务(以后如果需要增加任务数量,可增加标记字节)。使用1位来表示一个任务的情况,0表示任务未接,表示已经完成,使用数组下标来和全部任务的顺序列表来对应,以获得角色的任务完成情况。
任务变量记录表 数据名 数据类型 长度 字段说明 MissionID Int 16 任务编号 MissionName char 16 任务变量名 Missionvalue char 16 任务变量值
说明:变量表为100条记录(假定可以支持20个任务),任务变量并配合任务完成标记对其进行删改。 任务编号(MissionID):对应的任务编号,是任务变量属于哪号任务的标志。 任务变量名(MissionName):任务变量量名,如time,num等等,随意,用来简单表示记录的是什么。 任务变量值(Missionvalue):编号对应的值,也就是time,num等的值是多少,任务脚本将自行构造语句解悉其具体内容.
三、任务文字说明表 数据名 数据类型 长度 字段说明 MissionID Int 32 任务编号 MissionName char 16 任务变量名 Missionvalue char 16 任务变量值 MissionText 任务日志说明
说明:记录在客户端的步骤说明表,根据比对任务编号、变量和其值,来显示不同的任务日志。 任务编号(MissionID):从服务端任务变量表中完全复制过来的数据。 任务变量名(MissionName):同上 任务变量值(Missionvalue):同上 任务日志说明(MissionText):于以上三条记录相对应的时候,任务日志所显示的说明文字。
四,数据操作流程 服务端两个任务库的操作 1、接下任务时的操作 角色获得需要使用任务变量的任务前,先检查任务变量表是否为空,如任务变量已经全部被使用,则不能获得此任务。如有任务变量表有多余空间,则角色接下任务,再将相应数值写入变量表。 2、完成任务时候的操作 判断角色任务完成标记字符串,当角色完全完成一个任务时,将角色任务完成标记字符串根据数组下标对应此任务的标记设置为1,并删除所有任务变量表中此任务相关的任务变量记录。
任务变量的具体数值和标识,由脚本自行控制,因此在制作任务时,需要制作exl表格,记录任务和其编号已及使用的任务变量已及值的对应含义,方便撰写脚本时候备查使用。
客户端日志查询 1、(可选)客户端打开任务日志,首先查询任务完成标识表,忽略所有未接任务。所有已完成任务通过读取客户端任务说明表直接显示已经完成(这里有两种做法,如果不想对已经完成的任务进行说明,这步可以不用,如果想详细说明,需要再扩展一张表,一般不会有人想详细列出已经完成的任务吧,所以无视本条内容吧)。 2、查询任务变量记录表,统计出所有被记录的任务编号,然后根据其任务变量名和值,读取客户端任务文字说明表中能符合其编号和任务变量名和值的记录,把其中的文字部分显示出来。
用以上完成标识和任务变量分开存储的方式,能够海量的记录人物的任务完成情况而又不会浪费很多空间,通过简单读取任务完成情况表就可以迅速的获得人物几千个任务的完成情况,通过查询任务变量记录表则可以轻松获得任务的具体步骤的内容,以完成标识来维护任务变量表,太晚了磕睡,写的很草,自己都感觉深涩难懂,深更半夜也没机会举例子说明了,有程序基础的应该能看懂吧。
|