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

📄 gplayer.cc

📁 五行MMORPG引擎系统V1.0
💻 CC
📖 第 1 页 / 共 2 页
字号:
//GPlayer.cc
/*/////////////////////////////////////////////////////////////////

   李亦
	liease@163.com 4040719
	2006-7-18
/*/////////////////////////////////////////////////////////////////

#include "rpg/gobjects/GPlayer.h"
#include "rpg/RPGSetting.h"
#include "rpg/RPGChat.h"
#include "rpg/core/tIDDictionary.h"
#include "rpg/gobjects/GNpc.h"
#include "rpg/gobjects/GScene.h"
#include "rpg/gobjects/GTaskState.h"
#include "rpg/gobjects/GTask.h"
#include "rpg/RPGDataMan.h"

#ifdef TGE_RPGCLIENT
#include "game/aiPlayer.h"
#include "gui/containers/guiCellArrayCtrl.h"
#include "gui/controls/guiCellButtonCtrl.h"
#endif


namespace RPG
{

GPlayer*	g_pGPlayer = NULL;

IMPLEMENT_CO_NETOBJECT_V1(GPlayer);


GPlayer::GPlayer()
//:m_arTaskStates(HASHSIZE)
{
	m_dwRPGTypes |= GOT_PLAYER;
	m_arEquipments.SetArrayType(GGAR_EQUIPARMING);
	m_arActions.SetArrayType(GGAR_ACTIONBASE);
	m_arKeyCells.SetArrayType(GGAR_FUNCKEYBAR);

	ClearData(PCS_ALL);

	//std::allocator<GPlayer> a;a.
}

GPlayer::~GPlayer()
{
}

//----------------------------------------------------------------------------

//bool GPlayer::onAdd()
//{
//   if (!Parent::onAdd())
//      return false;
//   return true;
//}
//
//
//void GPlayer::onRemove()
//{
//   Parent::onRemove();
//}


//bool GPlayer::OnNewDataBlock(RPGBaseData* dptr)
//{
//   return true;
//}
//
//bool GPlayer::OnNewGameBase(GameBase* dptr)
//{
//   return true;
//}



//void GPlayer::inspectPostApply()
//{
//   Parent::inspectPostApply();
//   GSetMaskBits(ExtendedInfoMask);
//}

//void tagGPlayer::ResetData()
//{
//	Parent::ResetData();
//
//	nLeftSP	= 0;
//
//}


void GPlayer::ClearData(U32 dwState)
{
	U32 n;
	//装备槽
	if(dwState & PCS_EQUIPMENTS)
	{
		m_arEquipments.setSize(EQUIP_SLOTNUM);
		for(n = 0; n < EQUIP_SLOTNUM; n++)
			m_arEquipments[n] = NULL;
	}

	//背包槽
	if(dwState & PCS_BAGGOODS)
	{
		m_arBagGoods.setSize(BAG_SLOTNUM);			
		for(n = 0; n < BAG_SLOTNUM; n++)
			m_arBagGoods[n] = NULL;
	}

	//技能槽
	if(dwState & PCS_SKILLS)
	{
		m_arSkills.setSize(SKILL_SLOTNUM);	
		for(n = 0; n < SKILL_SLOTNUM; n++)
			m_arSkills[n] = NULL;
	}

	if(dwState & PCS_ACTIONS)
	{
		m_arActions.setSize(ACTION_AMOUNT);	
		for(n = 0; n < ACTION_AMOUNT; n++)
			m_arActions[n] = NULL;
	}

	if(dwState & PCS_KEYCELLS)
	{
		m_arKeyCells.setSize(KEY_CELL_AMOUNT);	
		for(n = 0; n < KEY_CELL_AMOUNT; n++)
			m_arKeyCells[n] = NULL;
	}

}


void GPlayer::SetCharacter(EGCareer career,EGClan clan,EGZone zone,U32 dwLevel)
{
	Parent::SetCharacter( career, clan, zone, dwLevel);
	m_dataPlayer.nLeftSP	= dwLevel * RPG_UPGRADESP;
}




#ifdef TGE_RPGCLIENT


void GPlayer::OnPlayerEnteredWorld()
{
	//输出欢迎信息
	RPGChat::OutputTipF(TIP_WELCOME,  GetCharName(),	
					g_pRPGSetting ? g_pRPGSetting->GetGameName() : "本系统");

	//先调用.输出入手任务
	OutputEntryTask();

	//后调用
	if(g_pGScene)
		g_pGScene->UpdateAllTaskNpc(this);
}


void GPlayer::OutputEntryTask()
{
	GTask*		pTask;//,GTaskPiece*& pPiece,EGTaskStates& nState,
	GNpc*			pNpc;
	GTaskState*	pState;

	for(GTaskStateMapIt it=m_arTaskStates.begin(); it!= m_arTaskStates.end(); it++)
	{
		pState = it->second;
		if(!pState)
			continue;
		if(!pState->IsValid())
			continue;

		pState->UpdateToNpcState();

		pTask = (GTask*)pState->GetTask();
		if(!pTask || !pTask->IsTypeEntry())
			continue;

		pNpc	= (GNpc*)pState->GetNpc();

		if(pNpc)
			RPGChat::OutputTipF(TIP_ENTRY_TASK, 
								pNpc->GetCharName(),
								pNpc->GetXInt(),
								pNpc->GetYInt(),
								pTask->GetTaskName());
		else
			RPGChat::OutputTipF(TIP_ENTRY_TASK2, pTask->GetTaskName());
	}//for
}


bool GPlayer::LoadPCSelectorPlayerDatablock(int nIndex)
{

	if(nIndex < 0 || nIndex >= RPG_PC_MAX)
		return false;

		
	StringTableEntry sTSName 		= GetTSName();
	StringTableEntry sPathTitle	= GetPathTitle();
	
	CSTR sShapeFile	= avar("models/chars/%s/%s.dts",sPathTitle,sTSName);

	Con::evaluatef("datablock PlayerData(PCSelectorPlayerDatablock%d){\nshapeFile = \"%s\";\n};",
						nIndex,
						sShapeFile);

	SimDataBlock *pDBlock = dynamic_cast<SimDataBlock*>
		(Sim::getDataBlockGroup()->findObject(avar("PCSelectorPlayerDatablock%d",nIndex)));
	if(pDBlock)
	{	
		char errorBuf[256];
		return pDBlock->preload(false,errorBuf);
	}
	 return false;//AttachTSDatablock(dynamic_cast<PlayerData*>(pDBlock));
}

void GPlayer::EquipsToUIGrid(Vector<GGoods*>& arGoods,GuiCellArrayControl* pUI,U32 nBase,U32 nAmout)
{
	if(pUI == NULL)
		return;

	GGoods*	pGoods;
	U32		n;
	U32		nMax;

	pUI->initCells(nAmout);

	Vector<StringTableEntry>& arCellNames	= pUI->GetCellNames();
	Vector<GuiCellButtonCtrl*>& arBtns		= pUI->GetCellBtns();

	/////////////////////////////////////////////////////////////
	//设置图标
	nMax = nBase + nAmout;
	for(n=nBase; n< nMax; n++)
	{
		pGoods = arGoods[n];
		if(pGoods == NULL)
		{	
			arCellNames[n] = StringTable->getBlank();
		}
		else
		{	
			arCellNames[n] = pGoods->GetIconLabel();
		}
	}//for
	pUI->createCells();

	////////////////////////////////////////////////////////////////
	//更新提示信息
	//for(n=nBase; n< nMax; n++)
	//{
	//	if(arBtns[n] == NULL)
	//		continue;

	//	pGoods = arGoods[n];
	//	if(pGoods == NULL)
	//	{	
	//		arBtns[n]->setTipText(NULL);
	//	}
	//	else
	//	{	
	//		arBtns[n]->setTipText(pGoods->GetDesc());
	//	}
	//}//for

}


#endif

BOOL GPlayer::SetTaskTo(GTask* pTask,GNpc* pNpc,EGTaskStates nState,U32 nPieceIndex)
{
	GTaskState	*pState;
	if(!pNpc)
		return FALSE;

	pState = InsertTaskState(pTask, nState, pNpc);
	if(!pState)
		return FALSE;

	if(!pTask->GetTaskPieceSize())
	{
		if(nState >= GTS_FINISHED)
		{	
			if(pTask->CanRepeat())
				nState = GTS_FREE;
		}
		pState->SetState(nState);
		pState->SetCurPiece(NULL,GTS_NULL);
		return TRUE;
	}

	if(nPieceIndex == -1)
	{
		//准备下一任务片段状态
		if(nState >= GTS_FINISHED)
		{	
			pState->ExecuteAllPiecePossible(pNpc,this,-1,FALSE);
			//pState->SetPieceState(0,GTS_FREE);
			if(pTask->CanRepeat())
				nState = GTS_FREE;
		}
		pState->SetState(nState);
	}
	else
	{
		pState->SetPieceState(nPieceIndex,nState);
		if(nState >= GTS_FINISHED)
			pState->ExecuteAllPiecePossible(pNpc,this,nPieceIndex+1, FALSE);
			//pState->SetPieceState(nPieceIndex+1,GTS_FREE);
	}



	return TRUE;
}

//BOOL GPlayer::GoalTask(GTask* pTask,GNpc* pNpc,U32 nPieceIndex)
//{
//	GTaskState	*pState;
//
//	if(!pNpc)
//		return FALSE;
//
//	pState = InsertTaskState(pTask);
//	if(!pState)
//		return FALSE;
//
//	//第一次接受任务状态
//	if(nPieceIndex == -1)
//	{
//		pState->SetPieceState(0,GTS_COMMITTED);
//	}
//	//接受
//	else
//	{
//		pState->SetPieceState(nPieceIndex,GTS_COMMITTED);
//	}
//
//	return TRUE;
//}





BOOL GPlayer::GetFitTask(GTask*& pTask,GTaskPiece*& pPiece,EGTaskStates& nState,GNpc* pToNpc)
{
	GTaskState*	pState;
	if(!pToNpc)
		return FALSE;

	for(GTaskStateMapIt it=m_arTaskStates.begin(); it!= m_arTaskStates.end(); it++)
	{
		pState = it->second;
		if(!pState)
			continue;
		//if(!pState->IsValid())
		if(pState->IsFinished())
			continue;
		if(pState->GetFitPiece(pPiece, nState, pToNpc) )
		{	
			pTask = (GTask*)pState->GetTask();
			if(pPiece)
				nState = pPiece->UpdateTaskState(this, pToNpc, nState);
			else
				nState = pTask->UpdateTaskState(this, pToNpc, nState);
			return TRUE;
		}
	}//for
	return FALSE;
}




EGTaskStates GPlayer::GetTaskState(U32 dwID)
{
	EGTaskStates	nState;
	GTaskPiece*		pPiece;
	GTask*			pTask;
	GTaskState*		pState;

	//if(n >= m_arTaskStates.size())
	//	return GTS_NULL;
	GTaskStateMapIt it = m_arTaskStates.find(dwID);
	if(it == m_arTaskStates.end())
		return GTS_NULL;
	pState = (*it).second;
	if(!pState)
		return GTS_NULL;
	//GTASKSTATE& taskState = m_arTaskStates[dwID];

	pTask = (GTask*)pState->GetTask();
	if(!pTask)
		return GTS_NULL;

	nState = pTask->UpdateTaskState(this,NULL, pState->GetState());
	pState->SetTaskState(nState);
	//taskState.nState = nState;
	if(nState >= GTS_FINISHED)
		return nState;
	

	if(pState->GetFitPiece(pPiece,nState,(U32)-1))
	{
		if(nState != GTS_NULL)
			return nState;
	}
	//pPiece = pState->pTaskPiece;
	//if(pPiece)
	//{
	//	nState = pPiece->UpdateTaskState(pState->nPieceState, this);
	//	taskState.nPieceState = nState;
	//	if(nState >= GTS_FINISHED)
	//		return nState;

⌨️ 快捷键说明

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