前言

刚水好的一篇博客被VSCode吞了,也是够够的,好吧我重来。 本打算分享一下这周内做的GRpc的简单封装呢,手里没代码,那就先把任务系统了结吧。

任务对象

因为涉及到任务奖励的分发,需要记录奖励的领取状态,落后的社会生产力不能满足人民日益增长的物质文化需求,于是大笔一挥增加了任务奖励的领取状态。

{
  "type" : 0 //日常、周常、成就
  "mode" : 0 //任务具体枚举类型
  "cfgId" : 0 //对应静态配置ID,用于查询具体
  "num" : 0 //任务需求数量、名次、等级
  "rewardState" : 0 //0:未领取,1:已领取
}
  • 状态切换
  1. 任务未完成:任务对象num达到奖励未要求的阈值
  2. 任务已完成:任务对象num达到奖励要求的阈值
  3. 奖励未领取:任务已完成,且rewardState为0
  4. 奖励已领取:任务已完成,且rewardState为1

奖励发送

我们采取的是,玩家主动请求任务奖励的方式来领取对应的奖励。

  • 日常、周常
  1. 奖励未领取状态
  2. rewardState置为已领取状态
  3. 删除任务对象
  4. 触发ALL型任务
  5. 发送任务奖励
  • 成就

成就设计到统计成就点、展示成就完成时间、人前显圣晒的心理,成就领取完奖励就不予删除。

  1. 奖励未领取状态
  2. rewardState置为已领取状态
  3. 触发ALL型任务
  4. 发送任务奖励

任务动态增加

任务不可能一成不变,实现动态增加是一个硬性的需求。

  • 日常、周常

日常、周常有刷新时间,只要达到刷新时间清除所有已创建任务对象,重新载入所有任务对象即可。

  • 成就

成就因为没有刷新时间,所以需要一定的策略。

  1. 成就ID必须增量增加。
  2. 成就有删减ID不回收。
  3. 线上阶段,ID有删除操作一般禁止,或者做额外策略。
  4. 线上阶段,ID对应任务类型变更禁止。
  5. 任意阶段修改ID对应Num值,允许。
  6. 角色创建,角色身上绑定最大成就ID
  7. 玩家登录,对比自身最大成就ID和当前最大成就ID
  8. 成就有更新,增加(自身最大成就ID, 当前最大成就ID]内所有成就。

当前成就的策略向应用到日常、周常上也可以。

小结

2个篇幅任务系统总算完结了,也算是一个比较长的一篇博客了,当然项目中的任务系统肯定要比此复杂,但基本样子应该差距不算太大。