稀土 2018-01-21
任务系统是游戏中最重要的系统之一,本文旨在设计一个轻量清晰的任务系统。通用易扩展是本系统关注的重点。任务系统中当角色的条件满足时,自动触发每一类型的任务,每个任务有其所需的完成条件,当角色完成了指定的操作后,则会触发任务自动完成,任务完成后一般玩家会领取对应的奖励,结束任务,此任务的生命周期结束,如果这个任务有后续任务,那么会自动触发下一个任务,从玩家角度讲,任务是一条故事线,所以经常会说主线、支线任务就是这个原因。
当设计任务时有如下几个重点:
任务需要以线的方式组织,一般都是在每个任务配置中指定下一个任务的id,每个任务线的第一个和最后一个比较特殊,第一个任务必须在角色属性满足条件下自动获得,而最后一个任务因为是故事线的结尾所以不能触发下一个任务,需要保持任务已结束的状态,如果故事线增加了后续任务,那么任务可以继续往下顺延。
任务需要满足条件才能接取,所谓的条件一般都是角色属性,比如角色等级。比如等级10级以上的可接取,为了抽象这个需求,任务可接条件设置两个字段角色属性类型和属性值,这个等级的例子就是等级:10。
任务接取后角色在游戏中做相关的操作,如果跟接取的任务相关,那么任务的进度会自动更新,那么二者是组合产生关联的呢?我们使用事件机制,玩家的游戏行为拆分出一系列的事件类型,用三个字段表示,事件类型,事件对象,事件值,比如打怪,事件类型为击杀怪物,事件对象为树妖,事件值为1。对应的任务完成条件也是这三个配置,不过任务配置中的值为目标值,另外有一种特殊情况比较常见就是状态完成条件,比如某任务需要角色达到100级完成,这个时候就用一个特殊的事件类型,属性表示状态类的完成条件,本例中配置就应该为属性:等级:100。
任务完成后需要触发下一个任务,但是如果下一个任务条件不满足,那么也不允许获得该任务,待角色属性成长后满足了条件再自动获得。
任务配置除了支持以上说的参数外,需要流出一些可扩展参数,比如任务奖励,任务绑定的npc,任务接、交过程中的对白、过场动画等。任务系统使用csv做配置,增加配置只需要增加字段就可以了,每个任务有map类型的参数字段保留了所有扩展配置。