📄 gtask.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>A_HOLD;}
inline BOOL CanRepeat() const{return m_data0.dwAction>A_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 + -