⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 gtask.h

📁 五行MMORPG引擎系统V1.0
💻 H
字号:
//GTask.h
/*/////////////////////////////////////////////////////////////////

   李亦
	liease@163.com 4040719
	2006-7-14
/*/////////////////////////////////////////////////////////////////
#ifndef _RPG__GTASK_H_
#define _RPG__GTASK_H_


#ifndef _RPG__GOBJECT_H_
#include "GObject.h"
#endif

#ifndef _RPG__GEFFICACY_H_
#include "GEfficacy.h"
#endif

#ifndef _RPG__GIDOBJECT_H_
#include "GIDObject.h"
#endif


namespace RPG
{
class GDialog;
class GNpc;
class GCharacter;
class GPlayer;
class GTask;



typedef struct tagGTaskBase
{
	STE				sName;
	EGTaskActions	dwAction;
	STE				sDesc;
}GTASKBASE;


/////////////////////////////////////////////
//任务片段
typedef struct tagGTaskPiece
{
	//STE				sName;
	//STE				sDesc;
}GTASKPIECE;


/////////////////////////////////////////////
//任务
typedef struct tagGTask 
{
	//STE				sName;
	EGTaskTypes		type;
	S32				nPriority;
	//STE				sDesc;
}GTASK;




#define DECLARE_TASKBASE_CMD(Name)\
inline const BOOL Has##Name() const{return m_p##Name != NULL;}\
inline CSTR Get##Name##EffText(const GGOODSREF& ref)\
{\
	if(!m_p##Name)		return "";	return m_p##Name->GetEfficacyText( ref );\
}\
inline CSTR Get##Name##ReqText(const GGOODSREF& ref)\
{\
	if(!m_p##Name)		return "";	return m_p##Name->GetRequireText(ref );\
}\
inline BOOL CheckOut##Name(const GGOODSREF& ref)\
{\
	if(!m_p##Name)		return TRUE;	return m_p##Name->CheckOut(ref );\
}\
inline BOOL TakeOut##Name(const GGOODSREF& ref)\
{\
	if(!m_p##Name)		return TRUE;	return m_p##Name->TakeOut(ref );\
}\
inline BOOL Check##Name(const GGOODSREF& ref)\
{\
	if(!m_p##Name)		return TRUE;	return m_p##Name->CheckRequire(ref );\
}\
inline BOOL Execute##Name(const GGOODSREF& ref)\
{\
	if(!m_p##Name)		return TRUE;	return m_p##Name->ApplyTo(ref );\
}\
inline BOOL Create##Name(const GGOODSREF& ref)\
{\
	if(!m_p##Name)		return TRUE;	return m_p##Name->CreateBy(ref);\
}


/////////////////////////////////////////////
//任务基本封装
class GTaskBase
{
	friend class RPGDatabase;

protected:
	enum
	{
		GTB_NONE,
		GTB_PIECE,
		GTB_TASK
	};
protected:
	GEfficacy*		m_pRequire;
	GEfficacy*		m_pGoal;
	GEfficacy*		m_pPremium;
	GNpc*				m_pFromNpc;//相关Npc
	GNpc*				m_pToNpc;//相关Npc
	GEfficacy*		m_pGoalObject;	//目标物件
	//GEfficacy*		m_pGoalResult;	//目标结果
	GTASKBASE		m_data0;
	GDialog*			m_arStateDialogs[GTS_AMOUNT];
	//GNpc*				m_pOwnerNpc;//宿主Npc

	U32				m_dwTaskType;
public:
	GTaskBase();

	BOOL ExecuteGoalNpc(GNpc* pToNpc,GPlayer* pPlayer,EGTaskStates nState);
	virtual BOOL ExecuteTask(GNpc* pNpc,GPlayer* pPlayer,EGTaskStates nState)=0;
	virtual BOOL IsOwnerNpc(GNpc* pNpc) const=0;

	virtual EGTaskStates UpdateTaskState(GPlayer* pChar,GNpc* pNpc,EGTaskStates nState);
	//EGTaskStates GetTaskState(GPlayer* pChar,EGTaskStates nState);
	GDialog*		GetStateDialog(EGTaskStates nState);
	

#ifdef TGE_RPGCLIENT
	void UpdateToNpcState(EGTaskStates nState);
#endif

	//////////////////////////////////////////////////
	BOOL IsFitRequire(GCharacter* pChar);
	DECLARE_TASKBASE_CMD(Goal);
	DECLARE_TASKBASE_CMD(Premium);
	DECLARE_TASKBASE_CMD(GoalObject);
	DECLARE_TASKBASE_CMD(Require);


public:
	inline BOOL		IsToNpcRunning2()		const{return m_pToNpc && m_pGoal==NULL;}
	inline  GNpc*	GetToNpc()				const{return m_pToNpc;}
	inline  GNpc*	GetFromNpc()			const{return m_pFromNpc;}
	inline  BOOL	IsToNpc(GNpc* pNpc)	const{return pNpc != NULL && m_pToNpc == pNpc;}
	inline  STE		GetTaskName()			const{return m_data0.sName;}
	inline  STE		GetTaskDesc()			const{return m_data0.sDesc;}
	inline  BOOL	IsHold()					const{return m_data0.dwAction&GTA_HOLD;}
	inline  BOOL	CanRepeat()				const{return m_data0.dwAction&GTA_REPEAT;}

	inline  BOOL   IsTaskPiece()			const{return m_dwTaskType==GTB_PIECE;}
	inline  BOOL   IsTask()					const{return m_dwTaskType==GTB_TASK;}

public:
	//static BOOL GetFromToNpc(const const GGOODSREF& ref,U32 dwGoodsType,GNpc*& pGoodsFrom,GNpc*& pGoodsTo);
	//static BOOL GetFromToNpc(GTaskBase* pTask,GNpc* pNpc,U32 dwGoodsType,GNpc*& pGoodsFrom,GNpc*& pGoodsTo,BOOL bCreateGoods);
};




/////////////////////////////////////////////
//任务片段封装
class GTaskPiece : public GIDObject,public GTaskBase
{
	typedef GIDObject Parent;
	friend class RPGDatabase;
protected:
	GTASKPIECE	m_data;
	GTask*		m_pOwnerTask;
	U32			m_nIndex;
public:
	GTaskPiece();

	BOOL ExecuteTask(GNpc* pNpc,GPlayer* pPlayer,EGTaskStates nState);

	inline GTask* GetOwnerTask(){return m_pOwnerTask;}
	BOOL IsOwnerNpc(GNpc* pNpc) const;
	BOOL IsOwnerTask(GTask* pTask) const;
	inline U32 GetIndex()const{return m_nIndex;}
	inline void SetIndex(U32 n){m_nIndex = n;}

public:
	//GDialog* GetStateDialog(EGTaskStates nState);
	//U32				m_nOrder;
};//GTaskPiece



#define DECLARE_TASK_MEMBER(Name)\
protected:\
	Vector<G##Name*>		m_ar##Name##s;\
public:\
	inline Vector<G##Name*>& Get##Name##s() {return m_ar##Name##s;}\
	inline U32  Get##Name##Size() {return m_ar##Name##s.size();}\
	inline G##Name*  Get##Name(U32 nIndex)const\
		{\
			if(nIndex >= m_ar##Name##s.size()) return NULL;\
			return m_ar##Name##s[nIndex];\
		}\
	inline U32 Add##Name	(G##Name* pGObject)\
		{\
			U32 n = m_ar##Name##s.addExist(pGObject);\
			if(n != -1)\
				pGObject->SetIndex(n);\
			return n;\
		}


#define DECLARE_GTASK_PRY(Name,NAME)\
	inline const BOOL	IsType##Name()		const{return m_data.type == GTT_##NAME;}

/////////////////////////////////////////////////////////////////
/// 任务管理封装
class GTask: public GObject,public GTaskBase
{
	typedef  GObject Parent;
	friend class RPGDatabase;
protected:
	GTASK				m_data;
	//Vector<GTaskPiece*>	m_arPieces;
	GNpc*				m_pOwnerNpc;//宿主Npc

public:
	//构造/析构函数
	GTask();
	~GTask();


public:
	//EGTaskStates UpdateTaskState(GPlayer* pChar,GNpc* pNpc,EGTaskStates nState);
	BOOL IsToNpcOfPiece(GNpc* pNpc);
	BOOL ExecuteTask(GNpc* pNpc,GPlayer* pPlayer,EGTaskStates nState);

	///@name 属性存取
	///@{
	DECLARE_TASK_MEMBER(TaskPiece);

	DECLARE_GTASK_PRY(Entry,ENTRY);
	DECLARE_GTASK_PRY(FreshMan,FRESHMAN);


	inline S32	GetPriority()  const{return m_data.nPriority;}
	inline BOOL	IsOwnerNpc(GNpc* pNpc)	const{return pNpc != NULL && m_pOwnerNpc == pNpc;}
	///@}

public:
	static void initPersistFields();
	//static void consoleInit();

	DECLARE_CONOBJECT(GTask);
};//class GTask
//////////////////////////////////////////////////
//
extern GTask*	g_pGTask;


//////////////////////////////////////////////////
inline BOOL GTaskBase::IsFitRequire(GCharacter* pChar)	
{
	if(!m_pRequire) 
		return TRUE;
	return m_pRequire->CheckRequire(pChar); 
}

inline BOOL	GTaskPiece::IsOwnerNpc(GNpc* pNpc)		const
{
	return m_pOwnerTask && m_pOwnerTask->IsOwnerNpc(pNpc);
}
inline BOOL	GTaskPiece::IsOwnerTask(GTask* pTask)	const
{
	return pTask != NULL && m_pOwnerTask == pTask;
}



};//namespace RPG
#endif //_GTASK_H_

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -