最近一直在搞任务系统,Bug有点多,所以一直没时间写blog,今天任务系统进入了一个全新的阶段,晚上给自己放松一下,有时间写写自己的感想了。

在动手做这个任务系统之前,我尝试着百度过相关内容,令我失望的是偌大的csdn一个合理答案都没有(我想找到的是实现方法),无奈之下只能自己从头开始规划。

任务系统和对话系统在我看来是分不开的,但是如果这个blog写上对话系统的话,那就完了,实在是有点多。只能先介绍我对任务系统的规划。

先前忘了说,我做的是ARPG游戏。

我这边的任务主要分为三种:

  • Hunting:常见的“帮我去打三只哥布林”这一类的任务。
  • Communicating:絮絮叨叨跟你扯家常的任务。
  • Collecting:常见的“帮我采摘五个葡萄”这种任务。

我把所有任务都存在了一个数据库中,关键信息有:

  • MissionID:任务的ID,是都有且唯一的。
  • NPCName:接任务的NPC的名字。
  • NPCFinish:完成任务时进行对话,领取奖励的NPC的名字,和接任务的NPC可以不是同一个人,比如“请帮我把这个送给小红”这种任务。
  • MissionType:任务的类型。1为Hunting,2为Communicating,3为Collecting。
  • TriggerDay:可以触发任务的日期,比如某个任务一定要在第五天之后才能做这一类。
  • State:任务的状态。0为待接取,1为已完成,2为进行中,3为待结算。
  • MissionDescription:任务的描述。
  • TargetName:任务目标,即Hunting的猎杀对象,Communicating的交流对象,Collecting的收集对象。
  • ProcessingCount:以及完成的数量,比如杀了几个。
  • TargetCount:需要完成的数量,例如要杀几个。
  • MissionReward:奖励。
  • MissionRewardNumber:奖励个数。

不同任务有不同的处理方法,这些处理方法触发的时间点也不相同,先放概念图:

大概写的比较清晰,就不做解释了。

详细代码不妨在这里,项目发出后会在github进行更新