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

介绍

任务系统是游戏中最重要的系统之一,本文旨在设计一个轻量清晰的任务系统。通用易扩展是本系统关注的重点。任务系统中当角色的条件满足时,自动触发每一类型的任务,每个任务有其所需的完成条件,当角色完成了指定的操作后,则会触发任务自动完成,任务完成后一般玩家会领取对应的奖励,结束任务,此任务的生命周期结束,如果这个任务有后续任务,那么会自动触发下一个任务,从玩家角度讲,任务是一条故事线,所以经常会说主线、支线任务就是这个原因。

设计

当设计任务时有如下几个重点:

  1. 任务需要以线的方式组织,一般都是在每个任务配置中指定下一个任务的id,每个任务线的第一个和最后一个比较特殊,第一个任务必须在角色属性满足条件下自动获得,而最后一个任务因为是故事线的结尾所以不能触发下一个任务,需要保持任务已结束的状态,如果故事线增加了后续任务,那么任务可以继续往下顺延。

  2. 任务需要满足条件才能接取,所谓的条件一般都是角色属性,比如角色等级。比如等级10级以上的可接取,为了抽象这个需求,任务可接条件设置两个字段角色属性类型和属性值,这个等级的例子就是等级:10。

  3. 任务接取后角色在游戏中做相关的操作,如果跟接取的任务相关,那么任务的进度会自动更新,那么二者是组合产生关联的呢?我们使用事件机制,玩家的游戏行为拆分出一系列的事件类型,用三个字段表示,事件类型,事件对象,事件值,比如打怪,事件类型为击杀怪物,事件对象为树妖,事件值为1。对应的任务完成条件也是这三个配置,不过任务配置中的值为目标值,另外有一种特殊情况比较常见就是状态完成条件,比如某任务需要角色达到100级完成,这个时候就用一个特殊的事件类型,属性表示状态类的完成条件,本例中配置就应该为属性:等级:100。

  4. 任务完成后需要触发下一个任务,但是如果下一个任务条件不满足,那么也不允许获得该任务,待角色属性成长后满足了条件再自动获得。

  5. 任务配置除了支持以上说的参数外,需要流出一些可扩展参数,比如任务奖励,任务绑定的npc,任务接、交过程中的对白、过场动画等。任务系统使用csv做配置,增加配置只需要增加字段就可以了,每个任务有map<string, string>类型的参数字段保留了所有扩展配置。

任务操作的时序图

任务操作的状态图

总结

  1. 系统中大量使用了事件机制,增加了易用性和可扩展性。角色上线载入数据,使用事件机制,避免了与数据库模块产生耦合,同时也很好的支持了异步和同步模式。
  2. 任务系统与客户端的协议细节没有做实现,这个使用者在确定的事件下hook到然后通知客户端即可,完全不需要修改任务系统。
  3. 任务系统的接口都已适配到脚本层,利用h2engine 的通用脚本层,无论是Python,lua,js,php都可以使用相同的接口调用任务系统。
  4. GitHub地址: https://github.com/fanchy/h2engine
  5. 关于任务系统使用的属性管理器:http://www.cnblogs.com/zhiranok/p/h2engine_propmgr.html
  6. 关于游戏服务器引擎h2engine:http://www.cnblogs.com/zhiranok/p/ffengine.html

更多精彩文章 http://h2cloud.org/

游戏服务器设计之任务系统相关推荐

  1. (转)FPS游戏服务器设计的问题

    FPS游戏服务器设计的问题 出处:http://www.byteedu.com/thread-20-1-1.html 一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称 ...

  2. FPS游戏服务器设计的问题

    一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由 . 二.学习 这是两篇网上找到的文章,写非常不错. 当时笔试的时 ...

  3. FPS游戏服务器设计的问题 转

    一.追溯 去gameloft笔试,有一个题目是说: 叫你去设计一个FPS(第一人称射击游戏),你是要用TCP呢还是要用UDP,说明理由 . 二.学习 这是两篇网上找到的文章,写非常不错. 当时笔试的时 ...

  4. 游戏服务器设计之NPC系统

    游戏服务器设计之NPC系统 简介 NPC系统是游戏中非常重要的系统,设计的好坏很大程度上影响游戏的体验.NPC在游戏中有如下作用: 引导玩家体验游戏内容,一般游戏内有很多主线.支线任务,而任务的介绍. ...

  5. mmorpg 游戏服务器设计

    MMORPG不同于其它的局域网的网络游戏,它是一个面向整个Internet的连接人数过万的网络游戏,因此他的服务器端设计则极为重要 服务器的基本设置 在大型网络游戏里,通常设计为C/S结构,客户端不再 ...

  6. 游戏服务器设计(转)

    有段时间没有研究技术了,这次正好看到了新版的mangos,较之以前我看的版本有了比较大的完善,于是再次浏览了下他的代码,也借此机会整理下我在游戏服务器开发方面的一些心得,与大家探讨. 另外由于为避免与 ...

  7. 棋牌游戏服务器设计(1)

    一.项目划分 框架依赖的模块 1.高性能webserver--express模块 热更新 语音对话 2.websocket模块--ws 3.mysql模块-->mysql 4.redis模块-- ...

  8. 游戏服务器设计(C#)简单版

    背景 充分利用c#中的task机制,设计高并发,无锁(针对业务逻辑)的服务器架构 gateserver 处理客户端连接.交互的服务器 永久性设计,与游戏项目无关,无需新代码维护 gameserver ...

  9. 游戏服务器设计之观察者模式

    在阎宏博士的<JAVA与模式>一书中开头是这样描述观察者(Observer)模式的: 观察者模式是对象的行为模式,又叫发布-订阅(Publish/Subscribe)模式.模型-视图(Mo ...

最新文章

  1. iPhone 13便宜到上热搜!王守义诚不我欺
  2. 10 号发工资和 20 号发工资的公司,区别竟然这么大?
  3. query 防止ajax重复提交
  4. 初步了解Linux proc文件系统
  5. 查找计算机视觉、模式识别、图像处理领域的国际会议和会议排名
  6. android热修复原理底层替换,Android 热修复 - 各框架原理学习及对比
  7. iOS 根据日期判断星座源代码
  8. linux安装自带mysql吗_Linux下安装mysql
  9. linux脚本怎么发送到桌面,如何在Linux上使用Zenity创建简单的图形Shell脚本
  10. unity找到特定一个物体的子物体,多个子物体有相同的名称
  11. foremost使用简介
  12. sdk环境变量配置失败问题
  13. java base64转二进制_使用Java将Base64转换为二进制
  14. html中img显示图片的两种常用方式
  15. 如何卸载avast free antivirus软件?
  16. Android架构之高可用移动网络连接
  17. 前端知识点整理(待续)
  18. 全面了解Windows Server 2003 和 Windows XP 附带的系统服务
  19. 用C#(入门) 双色球摇奖机 随机数实现
  20. 机器学习工程师 — Udacity 基于CNN和迁移学习创建狗品种分类器

热门文章

  1. 无人机MAVROS保姆级配置及模拟、真机飞行(全)
  2. Android 9闪屏页面适配问题
  3. 2021-07-23大连东软实训第四天---vue
  4. git合并分支导致代码丢失问题,记录勉励自己
  5. 第三篇:如何精准表达,高效沟通
  6. SMD软件建模总结(一)
  7. ORIGIN 9.0 拟合曲线延伸
  8. 【软考高项笔记】第1章 信息化发展1.4 数字中国
  9. Oracle19c安装goldengate
  10. 16进制与ASCII互相转换