📄 gplayer.h
字号:
//GPlayer.h
/*/////////////////////////////////////////////////////////////////
李亦
liease@163.com 4040719
2006-7-14
/*/////////////////////////////////////////////////////////////////
#ifndef _RPG__GPLAYER_H_
#define _RPG__GPLAYER_H_
#ifndef _RPG__STDINCLUDE_H_
#include "rpg/core/stdinclude.h"
#endif
#ifndef _RPG__GCHARACTER_H_
#include "GCharacter.h"
#endif
#ifndef _RPG__GTASK_H_
#include "GTask.h"
#endif
#ifdef TGE_RPGCLIENT
class GuiCellArrayControl;
class Player;
#endif
namespace RPG
{
class GTask;
class GTaskPiece;
class GNpc;
class GTaskState;
typedef std::map<U32,GTaskState*> GTaskStateMap;
typedef GTaskStateMap::iterator GTaskStateMapIt;
typedef struct tagGPlayer
{
///////////////////////////////////////////////////////
StringTableEntry pMapIDName;
S32 nLeftSP; //可用技能点
S32 nWeight; //当前重量
S32 nWeightMax; //最大负重
}GPLAYER;
#define GPLAYER_SETTASKTO(Name,Type)\
inline BOOL Name##Task (GTask* pTask,GNpc* pNpc,U32 nPieceIndex=-1)\
{\
return SetTaskTo(pTask,pNpc,Type,nPieceIndex);\
}
#define GPLAYER_SETTASKTO2(Name,Type)\
BOOL Name##Task (GTask* pTask,GNpc* pNpc,U32 nPieceIndex=-1)
#define BEGIN_GPLAYER_SETTASKTO2(Name,Type)\
inline BOOL GPlayer::Name##Task (GTask* pTask,GNpc* pNpc,U32 nPieceIndex)\
{\
EGTaskStates nState = Type;
#define END_GPLAYER_SETTASKTO2(Name,Type)\
return SetTaskTo(pTask,pNpc,nState,nPieceIndex);}
//////////////////////////////////////////////////////
//玩家封装管理
class GPlayer : public GCharacter
{
typedef GCharacter Parent;
friend class RPGDatabase;
protected:
enum EGPlayerConstants
{
HASHSIZE = 16
};
GPLAYER m_dataPlayer;
public:
GGoodsArray m_arActions; //动作槽
GGoodsArray m_arKeyCells; //功能键槽
GTaskStateMap m_arTaskStates;
public:
enum EGPlayerMasks
{
//InitialUpdateMask = 1,//Parent::NextFreeMask,
};
enum EGPlayerClears
{
PCS_PROPERTY = BIT(Parent::PCS_LAST+1),
PCS_ACTIONS = BIT(Parent::PCS_LAST+2),
PCS_KEYCELLS = BIT(Parent::PCS_LAST+3),
};
public:
//构造/析构函数
GPlayer();
virtual ~GPlayer();
public:
void SetCharacter(EGCareer career,EGClan clan,EGZone zone,U32 dwLevel=0);
void ClearData(U32 dwState);
inline STE GetMapIDName(){return m_dataPlayer.pMapIDName;}
///@name 客户端处理
///@{
#ifdef TGE_RPGCLIENT
public:
void OnPlayerEnteredWorld();
void OutputEntryTask();
bool LoadPCSelectorPlayerDatablock(int nIndex);
void EquipsToUIGrid(Vector<GGoods*>& arGoods,GuiCellArrayControl* pUI,U32 nBase,U32 nAmout);
void EquipsToUIEquipSlotArming(GuiCellArrayControl* pUI){EquipsToUIGrid(m_arEquipments, pUI, 0, EQUIP_SLOTARMING_NUM);}
void EquipsToUIEquipSlotAdorn (GuiCellArrayControl* pUI){EquipsToUIGrid(m_arEquipments, pUI, EQUIP_SLOTARMING_NUM, EQUIP_SLOTADORN_NUM);}
void EquipsToUIBagGrid (GuiCellArrayControl* pUI){EquipsToUIGrid(m_arBagGoods, pUI,0, BAG_SLOTNUM);}
#endif
///@}
///@name 任务状态处理
///@{
protected:
public:
BOOL SetTaskTo(GTask* pTask,GNpc* pNpc,EGTaskStates nState,U32 nPieceIndex=-1);
GPLAYER_SETTASKTO(ReadyAccept,GTS_FREE2);
GPLAYER_SETTASKTO(Accept,GTS_RUNNING);
GPLAYER_SETTASKTO(ReadyGoal,GTS_RUNNING2);
GPLAYER_SETTASKTO(Goal,GTS_PREMIUM);
//GPLAYER_SETTASKTO(ReadyPremium,GTS_PREMIUM2);
GPLAYER_SETTASKTO(Premium,GTS_FINISHED);
BOOL GetFitTask(GTask*& pTask,GTaskPiece*& pPiece,EGTaskStates& nState,GNpc* pNpc);
EGTaskStates GetTaskState(U32 dwID);
GTaskState* GetTaskStatePtr(U32 dwID);
BOOL GetCurTaskPiece(GTask*& pTask,GTaskPiece*& pPiece,EGTaskStates& state, GNpc* pNpc);
BOOL IsFitToNpc(GTask* pTask,GNpc* pNpc);
BOOL IsTaskFinished(GTaskBase* pTask);
BOOL IsTaskRunning(GTask* pTask);
BOOL IsAllPieceFinished(GTask* pTask);
void AddTaskState(GTaskState* pTaskState);
GTaskState* InsertTaskState(GTask* pTask,EGTaskStates state,GNpc* pNpc);
///@}
void SetMoveTo (Point3F& pt,BOOL bPressDown);
bool PlayMotion (StringTableEntry pIconTag);
public:
//bool OnNewDataBlock(RPGBaseData* dptr);
//bool OnNewGameBase(GameBase* dptr);
void ProcessTick(const Move *move);
void InterpolateTick(F32 delta);
void AdvanceTime(F32 dt);
//void PreprocessMove(Move *move) {}
U32 packUpdate (NetConnection *conn, U32 mask, BitStream *stream);
void unpackUpdate(NetConnection *conn, BitStream *stream);
//bool onAdd();
//void onRemove();
//void inspectPostApply();
static void initPersistFields();
static void consoleInit();
public:
DECLARE_CONOBJECT(GPlayer);
};//GPlayer
/////////////////////////////////////////////////////////////////
//
extern GPlayer* g_pGPlayer;
/////////////////////////////////////////////////////////////////
inline GTaskState* GPlayer::GetTaskStatePtr(U32 dwID)
{
GTaskStateMapIt it = m_arTaskStates.find(dwID);
if(it == m_arTaskStates.end())
return NULL;
return (*it).second;
}
//BEGIN_GPLAYER_SETTASKTO2(Premium,GTS_FINISHED)
//{
// if(pTask->CanRepeat())
// nState = GTS_REPEATEND;
//}
//END_GPLAYER_SETTASKTO2(Premium,GTS_FINISHED)
};//namespace RPG
#endif //_RPG__GPLAYER_H_
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -