游戏中有各种各样的任务,完成任务领取奖励理所当然,如果每做一种任务,每完成任务的一步就单独给一个奖励的话会显得非常很乱,而且每次有新的任务就需要重新写代码,这样扩展性也太差了。所以需要一种统一机制来处理完成任务给奖励这个问题,策划通过配置就能给玩家发放任务奖励。需求为根据等级不同,完成不同的任务的奖励道具也要不同。可以用如下规则标记一个唯一任务:唯一任务id=功能id*10000000+分支id,这样只要已知任务id,就能对应奖励了。大致实现如下:
//奖励道具结构体
struct TaskFall
{
public:
int propid;//道具id
int num;//道具数量
TaskFall() {
propid = 0;
num = 0;
...
}
};
//存储单个任务奖励道具结构体
struct TaskFallSave
{
public:
TaskFallSave(){}
bool parse(...);//解析奖励配置
void get_prop(...);
...
private:
map<int, vector<TaskFall>> falls;//等级,奖励
...
};
//所有任务奖励管理
class TaskFallMgr:public Singleton<TaskFallMgr>
{
public:
void init();
TaskFallSave& get_fall_prop(int taskid);
...
private:
map<int, TaskFallSave> all_fall;//任务id,任务奖励
//map<int,map<int,int>> task_exp;//如果是给任务经验等基本数据类型的,可以不用TaskFall和TaskFallSave两个结构体
...
}
总的流程为根据配置文件中的配的任务功能id和分支id算出来任务id,再根据任务id找到对应的TaskFallSave对象,然后根据玩家的等级找到相应的奖励,从而实现需求。
1194

被折叠的 条评论
为什么被折叠?



