随着网络游戏的发展,任务越来越成为游戏的重要内容之一,甚至专门出现了标榜任务为游戏主要玩法的网络游戏,任务成为了游戏中玩家获得乐趣的重要手段,也是游戏的特色之一,精彩的任务系统,不但能丰富游戏乐趣,也是重要的道具和经验来源,下面从服务器端和客户端两方面,以一个数值策划的角度出发,通过数据结构和操作流程来论述任务系统。至于任务在具体游戏中的规划则略去,以提供一个通用的框架模板.

本文不涉及具体任务的设计以及任务规划.也不包括任务撰写方式在数据结构和流程上的优化方法.任务的脚本实现也不在讨论之列.

一,概述

任务系统数据结构要包含的内容分两部分,服务器部分和客户端部分.

服务器部分:任务完成标识表,任务变量记录表

客户端部分:任务文字说明表

二,设计理念

任务完成标识表其实只是一个简单的字符串,一般将此字符串存储在角色数据里的在一个字段中,用二进制的位表示任务的完成情况,使用时将此字符串按每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、查询任务变量记录表,统计出所有被记录的任务编号,然后根据其任务变量名和值,读取客户端任务文字说明表中能符合其编号和任务变量名和值的记录,把其中的文字部分显示出来。

用以上完成标识和任务变量分开存储的方式,能够海量的记录人物的任务完成情况而又不会浪费很多空间,通过简单读取任务完成情况表就可以迅速的获得人物几千个任务的完成情况,通过查询任务变量记录表则可以轻松获得任务的具体步骤的内容,以完成标识来维护任务变量表,太晚了磕睡,写的很草,自己都感觉深涩难懂,深更半夜也没机会举例子说明了,有程序基础的应该能看懂吧。

游戏服务器 脚本任务系统,任务系统实现(数据结构和处理流程版)相关推荐

  1. 游戏服务器设计之任务系统

    游戏服务器设计之任务系统 介绍 任务系统是游戏中最重要的系统之一,本文旨在设计一个轻量清晰的任务系统.通用易扩展是本系统关注的重点.任务系统中当角色的条件满足时,自动触发每一类型的任务,每个任务有其所 ...

  2. 游戏服务器 脚本任务系统,游戏任务系统入门——任务系统详解

    其实这篇文章应该在<任务设计入门--试着自己编辑一个任务!>之前写出来会更好让人理解. 不过谁让我懒呢,所以想到哪里就写到哪里.今天这篇补上,欢迎各位拍砖. 一.任务系统是什么? 任务系统 ...

  3. 游戏服务器 脚本任务系统,玩家杀死野怪系统自动触发任务系统的脚本

    一个架设比较好的奇迹私服中gm怎样才能做到野怪死亡触发执行任务设置,这个功能可以说是游戏中非常基础的一个功能,杀死怪物之后系统自动统计杀死野怪的数量来自动提醒玩家是否已经完成了任务,杀死怪物的时候还会 ...

  4. 独立游戏 Godot游戏开发日志2游戏本地化对话和任务系统

    独立游戏 Godot游戏开发日志2游戏本地化对话和任务系统 开发日志2: 这段时间里我做了游戏本地化系统,对话和任务系统. 首先说说游戏本地化,大多数人可能会采用csv这种翻译格式,但是认为小游戏,没 ...

  5. 从零搭建游戏服务器,拢共分几步?

    现代的电子游戏,不管是端游还是手游,网络游戏还是单机游戏,或多或少都会需要一些网络功能.从验证正版,到登录注册,再到多人交互,实时对战,都需要服务器端的支持. 游戏服务器端,是一个长期运行的程序,还要 ...

  6. 从零搭建游戏服务器,编译过程和环境部署教程详解

    现代的电子游戏,不管是端游还是手游,网络游戏还是单机游戏,或多或少都会需要一些网络功能.从验证正版,到登录注册,再到多人交互,实时对战,都需要服务器端的支持. 游戏服务器端,是一个长期运行的程序,还要 ...

  7. java游戏服务器必备

    推荐阅读: 我的CSDN 我的博客园 QQ群:704621321 对于一个新手,想接触游戏服务器,一定会有个疑问--使用Java开发服务器需要学习什么? Java语言,由于学习成本低,开发速度快,稳定 ...

  8. lt;转载gt;游戏服务器开发都要学什么?

    2018年3月3日 欢迎扫二维码关注公众号,获取技术干货 近来遇到有很多人想从其它开发领域转到游戏服务器开发行业上来,他们或许觉得游戏服务器开发工资高,或许觉得做游戏服务器需要掌握的技术更高级,可以锻 ...

  9. 游戏服务器开发(基本需求)

    1,团队沟通 基本上不管做什么开发,都是一个团队来完成的,游戏也是如此,游戏团队一般由老板,总经理,CTO(技术主管),主策划(领导一些人,包括数值策划,系统策划,特效策划),主美(领导一些人,包括原 ...

最新文章

  1. 基于Salmon的转录组定量流程
  2. android启动白屏的分析,Android 启动白屏,跳转黑屏以及冷启动优化
  3. CCS3的过渡、变换、动画以及响应式布局、弹性布局
  4. 修改telnet的用户名密码_远程管理设备telnet的N种设置方法
  5. (97)FPGA边沿检测(上升沿检测)
  6. SQL Server 2008 (R2) 单机版安装的先决条件
  7. java 支付宝转账_Java 支付宝支付,退款,单笔转账到支付宝账户(支付宝订单退款)...
  8. 阻塞、非阻塞、同步、异步的区别
  9. 算法笔记(二)抽牌法产生随机全排列
  10. .net项目开发工具接口说明
  11. 微信小程序不行了?连接应用场景面临挑战
  12. 计算机组成原理中总线包括,计算机组成原理复习题
  13. java中替换的快捷键是什么_idea替换快捷键,批量处理对象的操作
  14. 请教FlashCs3导入图片时出现无法导入问题。
  15. oop思想php,避免OOP的形式,POP的思想
  16. 解决ubuntu无法连接网络问题
  17. 网站头像html,分享一个非常强大的头像在线生成网站
  18. python提取支付宝的账单_python爬取支付宝账单
  19. 【HDOJ】6441--Find Integer
  20. 禅道安装/禅道远程数据库连接

热门文章

  1. 鸿蒙系统chr,一分钟告诉您一汽丰田奕泽相比原版CHR有何不同
  2. 《图解HTTP》全书内容表述
  3. 算法设计与分析 屈婉玲教授(第三章)
  4. Unity之Shader
  5. leetcode每日一题 521. 最长特殊序列 Ⅰ 脑筋急转弯
  6. PGSQL的distinct
  7. python纵向输出_如何垂直显示列表?
  8. C语言qsort详解
  9. TCP会话开始与结束
  10. datax源码解析-JobContainer的初始化阶段解析