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

📄 gplayer.h

📁 五行MMORPG引擎系统V1.0
💻 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 + -