游戏中任务系统设计

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 mmTasks;
};

4、任务过程

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

5、任务状态

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

                 

 

你可能感兴趣的:(游戏开发)