接受任务,提交任务,显示任务
玩家里面应该有一个容器,用来存放已接收的任务,
任务NPC里面也应该有一个容器,用来存放开启的任务
接受任务:
1.不同NPC对应不同任务:
任务数据里面应该对应包含NPCID属性。由此实现不同npc对应不同任务(同商店)
2.NPC里面有开启的任务,和没开启的任务:
任务数据应该具有是否开启的属性,满足条件开启任务,否则不开启,NPC里面只显示开启的任务。
3.接受任务后,玩家任务窗口里应当显示当前任务,以及任务进度。完成任务后,任务属性应当变为已完成。
如何实现任务进度?
提交任务:
当当前任务完成时,提交任务成功,并获取相应奖励。
显示任务:
玩家应当包含一个装有已接任务的容器,定义对任务属性的数据更新和渲染(装备和技能是否也是如此?装备和任务系统是否可以都继承某个窗口类,所以玩家里面应该包含装备管理者、技能管理者、任务管理者的成员去进行管理),当按下某个建的时候,gameMgr对任务进行数据更新和渲染。对窗口基类进行数据更新、以及渲染。(battle我是直接归游戏管理者管理了,事实上,让其属于map管理(battl只需要enemy和player数据,map中均可以拿到),这样battle也能够变成一个窗口延伸了。)
任务是商品吗?任务不应当是商品。任务应当单独配表
三、不同任务不同的达成条件:
1.杀怪 2.找npc 3.购买相关物品
四、完成任务后获取相关奖励
1.经验、金币
2.装备
3.开启相应任务
具体实现:
整个任务系统包含三个类:CMission类、MissionMgr类、CMissionNpc类、CRecivedMission类
四个类分别进行:CMission:任务的逻辑处理,如获取奖励,判断任务是否完成等。
CMissionMgr类:创建所有任务、并对其初始化,获取已接任务和已解锁任务分别传给CRecivedMission类和CMissionNpc类。
CMissionNpc类:任务NPC的处理,和商店买卖物品类似的功能,处理任务的接受、提交、对话等
CRecivedMission类:玩家的任务窗口,用于显示已经接受的任务、以及任务描述等
源代码:
CMission类:
#pragma once
#include "Talk.h"
class CMission
{
public:
CMission();
~CMission();
void getReward();
int getID()
{
return m_nID;
};
void initMission(SMissionDt* data);
void showName();
void showDescripe();
void showSchedule();
void updataIsAchieve();
CTalk* getTalk(){ return m_pTalk; }
CTalk* getFinishTalk(){ return m_pFinishTalk; }
int getNpcID(){ return m_nNpcID; };
GETTER_SETTER(bool, isAchieve, m_bIsAchieve);
GETTER_SETTER(bool, isRecived, m_bIsRecived);
GETTER_SETTER(bool, isUnlock, m_bIsUnlocked);
private:
int m_nID;
int m_nNpcID;
char m_szName[32];
char m_szDescripe[128];
CTalk* m_pTalk;
CTalk* m_pFinishTalk;
};
MissionMgr类:
#pragma once
#include "Mission.h"
class CMissionMgr
{
public:
CMissionMgr();
~CMissionMgr();
void creatAllMission();
vector<CMission*>getUnlockMission();
vector<CMission*>getRecivedMission();
CMission* getMission(int nID);
private:
vector<CMission*>m_vecMissions;
};
CMissionNpc类: