游戏中任务系统设计

mac2024-10-24  75

1、任务分类

         游戏中任务可以分为主线任务、支线任务、日常任务、周任务、节日活动任务,其中周任务和节日任务可以根据设定的日期进行开启关闭,属于重复性任务。

2、游戏条件

        各类任务开启条件:1、玩家等级 2、玩家攻击力3、前置任务等等

        完成条件:玩家进行任务进度是否达成

        任务关闭:1、玩家领取奖励后关闭任务。2、时间过期

3、任务逻辑类型:

      任务逻辑有多种,这个往往跟游戏内容相关,比如 杀怪、采集、聊天、升级、完成某家物品等等。每种任务逻辑配置成一张表,例如杀怪类,有任务id,场景(或副本)id,npc id等,这样执行任务判断时直接根据配置表进行判断,任务进行是否一致,然后进行任务进度计算。

      也有一些任务逻辑可以配置成脚本,程序根据脚本内容进行判断。

       简单任务逻辑处理方式(伪代码):

void kill_boss() { //玩家杀死怪物 TaskTrigger->updateTask(player,taskid, npcid); } class TaskLogic { public: virtual bool logic(tableElement *pelem, int n, ...) = 0; //tableElement代表策划配置表 }; class KillBossTaskLogic : public TaskLogic { public: bool logic(tableElement *pelem, int n, ...) { va_list arg; va_start(arg, n); int bossid = va_arg(arg, int); if (bossid == pelem->bossid) { return true; } va_end(arg); return false; } }; class Task { public: //根据任务分类进行逻辑初始化 void SetLogic(TaskLogic *pLogic); void updateTask(std::tuple& t) { if(pLogic->logic(t)) { process+=1; } } int process; //进度计数 int taskid; int tasktype; enum taskstate; TaskLogic* pLogic; }; class TaskTrigger{ public: void updateTask(player,taskid, npcid) { for(auto& it : mmTasks) { it.second->updateTask(npcid); } } void AddTask(); void DelTask(); std::map<taskid, task> mmTasks; };

4、任务过程

      接收任务(将任务内容放到玩家身上)------->任务进行中(进行进度计数,也有一些直接判断完成任务例如聊天)-------->任务完成(根据配置逻辑判断任务是否完成)-------->任务奖励发放(玩家领取或者自动发放)------->领取新的任务。

5、任务状态

      不可接任务、可接任务、任务进行中、任务完成(未领取奖励)、任务完成(领取奖励)

                 

 

最新回复(0)