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

📄 gplayer.cc

📁 五行MMORPG引擎系统V1.0
💻 CC
📖 第 1 页 / 共 2 页
字号:
	//}
	return GTS_NULL;
}


BOOL GPlayer::GetCurTaskPiece(GTask*& pTask,GTaskPiece*& pPiece,EGTaskStates& state, GNpc* pNpc)
{
	U32				n;
	//EGTaskStates	state;
	GTaskState*		pState;
	
	//从玩家任务状态,获取任务状态对话
	//pGPlayer->GetTaskState(pTask);
	for(GTaskStateMapIt it=m_arTaskStates.begin(); it != m_arTaskStates.end(); it++)
	{
		pState = (*it).second;
		if(!pState)
			continue;

		if(pState->IsFinished())
			continue;

		pTask = (GTask*)pState->GetTask();
		if(pTask == NULL)
			continue;


		//是否为本Npc拥有的任务
		//if(pNpc && pNpc->ExistTask(pTask) || !pNpc)
		if(!pNpc || pTask->IsOwnerNpc(pNpc))
		{
			if(pState->GetFitPiece(pPiece, state,U32(-1)))
				return TRUE;
		}//if
	}//for

laFailed:
	{
		pTask		= NULL;
		pPiece	= NULL;
		state		= GTS_NULL;
	}
	return FALSE;
}



BOOL GPlayer::IsFitToNpc(GTask* pTask,GNpc* pNpc)
{
	GTaskState*		pState;
	if(!pTask)
		return FALSE;

	pState = GetTaskStatePtr(pTask->GetID());
	if(!pState)
		return FALSE;
	return pState->IsFitToNpc(pNpc);
}





BOOL GPlayer::IsTaskFinished(GTaskBase* pBase)
{
	U32 n;
	GTaskState*	 pState;
	GTask*		pTask;

	if(!pBase)
		return FALSE;

	//任务片段处理
	if(pBase->IsTaskPiece())
	{
		GTaskPiece* pPiece = static_cast<GTaskPiece*>(pBase);
		if(pPiece)
		{	
			pTask = pPiece->GetOwnerTask();
			if(pTask)
			{
				pState = GetTaskStatePtr(pTask->GetID());
				if(!pState)
					return FALSE;
				return pState->IsTaskFinished(pPiece->GetIndex());
			}
		}
		return FALSE;
	}

	//整体任务处理
	else if(pBase->IsTask())
	{
		GTask* pTask = static_cast<GTask*>(pBase);
		if(pTask)
		{
			pState = GetTaskStatePtr(pTask->GetID());
			if(!pState)
				return FALSE;
			return pState->IsTaskFinished(-1);
		}
	}

	return FALSE;
}


BOOL GPlayer::IsTaskRunning(GTask* pTask)
{
	GTaskState*		pState;
	EGTaskStates	state;
	if(!pTask)
		return FALSE;

	pState = GetTaskStatePtr(pTask->GetID());
	if(!pState)
		return FALSE;
	state = pState->GetState();
	return state >= GTS_RUNNING && state < GTS_FINISHED;
}


BOOL GPlayer::IsAllPieceFinished(GTask* pTask)
{
	GTaskState* pState;
	if(!pTask)
		return FALSE;

	pState = GetTaskStatePtr(pTask->GetID());
	if(!pState)
		return FALSE;
	return pState->IsAllPieceFinished();
}


void GPlayer::AddTaskState(GTaskState* pTaskState)
{
	U32 dwID;
	if(!pTaskState || !pTaskState->GetTask())
		return;

	dwID = pTaskState->GetTask()->GetID();
	m_arTaskStates[dwID] = pTaskState;
}


GTaskState* GPlayer::InsertTaskState(GTask* pTask,EGTaskStates state, GNpc* pNpc)
{
	GTaskState	*pState;
	U32			dwID;

	if(!pTask)
		return NULL;

	dwID	= pTask->GetID();

	//确认任务状态
	GTaskStateMapIt	it = m_arTaskStates.find(dwID);
	if(it == m_arTaskStates.end() || it->second == NULL)
	{
		pState = g_pRPGDataMan->NewTaskState();
		m_arTaskStates[dwID] = pState;

		pState->SetTaskState(pTask,state, pNpc);
		pState->InitPieceStates(pTask->GetTaskPieceSize());
	}
	else
		pState = it->second;

	return pState;
}


void GPlayer::SetMoveTo(Point3F& pt,BOOL bPressDown)
{
	AIPlayer* pPlayer = dynamic_cast<AIPlayer*>( GetGameBase() );
	if(pPlayer)
	{
		pPlayer->setMoveTo(pt,false,bPressDown);
	}
}

bool GPlayer::PlayMotion(StringTableEntry pIconTag)
{
	GGoods*	pGoods;
	char		iconTag[256];
	dSprintf(iconTag,256,"%s%s",PRE_MOTION,pIconTag);
	STE		pIconLabel = StringTable->lookup(iconTag);

	if(pIconLabel)
	{
		for(U32 n=ACTION_MOTION_INDEX; n<ACTION_MOTION_INDEX+ACTION_MOTION_AMOUNT; n++)
		{
			pGoods = m_arActions[n];
			if(pGoods == NULL)
				continue;
			//Con::printf(pGoods->GetIconLabel());
			if(pGoods->GetIconLabel() == pIconLabel)
			{
				return Parent::PlayMotion(pIconTag);
			}
		}//for
	}//if

#ifdef TGE_RPGCLIENT
#endif

	RPGChat::OutputTipF(TIP_MOTION_NONE, pIconTag);
	return false;
}
//
//
//U32 GPlayer::AddGoodsToBag(GGoods* pGGoods,GGoodsArray*&	pOwnerAdd)
//{
//	//按任务、普通等物品类别,分别加到各槽中
//	U32 nAdd = m_arBagGoods.AddGoods(pGGoods);
//	if(nAdd == -1)
//	{
//		pOwnerAdd = NULL;
//		return -1;
//	}
//
//	pOwnerAdd = &m_arBagGoods;
//	return nAdd;
//}
//
//U32 GPlayer::ApplyGoodsToEquip(GGoods* pGGoods, U32 nBagIndex, GGoodsArray*&	pOwnerAdd)
//{
//	U32			slot;
//	GGoods*		pGEquip;
//
//	if(pGGoods == NULL || !pGGoods->IsGoodsType(GGT_EQUIP) )
//		return -1;
//
//	// 1.取得装备类型,确定装备槽
//	slot		= pGGoods->GetSubType();
//	if(slot >= EQUIP_SLOTNUM)
//		return -1;
//
//	// 2.卸下装备槽装备、并且放在背包中(通常在要待装备位置)
//	pGEquip	= m_arEquipments[slot];
//	m_arBagGoods[nBagIndex] = pGEquip;
//
//	// 3.把待装备装在槽中
//	m_arEquipments[slot] = pGGoods;
//
//	pOwnerAdd = &m_arEquipments;
//	return slot;
//}


//----------------------------------------------------------------------------
void GPlayer::ProcessTick(const Move* pMove)
{
	Parent::ProcessTick(pMove);
}

void GPlayer::InterpolateTick(F32 delta)
{
	Parent::InterpolateTick(delta);
}

void GPlayer::AdvanceTime(F32 fTime)
{
	Parent::AdvanceTime(fTime);
}



//U32 GPlayer::GetPacketDataChecksum(GameConnection*)
//{
//   return 0;
//}

//void GPlayer::WritePacketData(GameConnection*, BitStream*)
//{
//}
//
//void GPlayer::ReadPacketData(GameConnection*, BitStream*)
//{
//}


U32 GPlayer::packUpdate(NetConnection *conn, U32 mask, BitStream *stream)
{
	return Parent::packUpdate(conn, mask, stream);
   // Check the mask for the ScaleMask; if it's true, pass that in.
   //if (stream->writeFlag( mask & ScaleMask ) ) {
   //    mathWrite( *stream, Parent::getScale() );
   //}
   //if (stream->writeFlag((mask & DataBlockMask) && m_pDataBlock != NULL)) {
   //   stream->writeRangedU32(m_pDataBlock->getId(),
   //                          DataBlockObjectIdFirst,
   //                          DataBlockObjectIdLast);
   //}

   // cafTODO: ControlMask
   return 0;
}

void GPlayer::unpackUpdate(NetConnection *con, BitStream *stream)
{
	Parent::unpackUpdate(con, stream);
   //if (stream->readFlag()) {
   //   VectorF scale;
   //   mathRead( *stream, &scale );
   //   setScale( scale );
   //}
   //if (stream->readFlag()) {
   //   RPGBaseData* dptr = 0;
   //   SimObjectId id = stream->readRangedU32(DataBlockObjectIdFirst,
   //                                          DataBlockObjectIdLast);

   //   if (!Sim::findObject(id,dptr) || !SetDataBlock(dptr))
   //      con->setLastError("Invalid packet GPlayer::unpackUpdate()");
   //}
}


//----------------------------------------------------------------------------
//ConsoleMethod( GPlayer, GetDataBlock, S32, 2, 2, "()"
//              "Return the datablock this GPlayer is using.")
//{
//   return object->GetDataBlock()? object->GetDataBlock()->getId(): 0;
//}




void GPlayer::initPersistFields()
{
   Parent::initPersistFields();

   addField("mapIDName",		TypeCaseString,		Offset(m_dataPlayer.pMapIDName,   GPlayer));

}

void GPlayer::consoleInit()
{
   Parent::consoleInit();
//   Con::addVariable("GPlayer::boundingBox", TypeBool, &gShowBoundingBox);
}


ConsoleMethod( GPlayer, LoadPCSelectorPlayerDatablock, bool , 3, 3, "Object.LoadPCSelectorPlayerDatablock(nIndex)")
{
	//Player* pPlayer = dynamic_cast<Player*>(Sim::findObject(argv[3]));

	return object->LoadPCSelectorPlayerDatablock(dAtoi(argv[2]));
}



#ifdef TGE_RPGCLIENT

///////////////////////////////////////////////////////////////////////
///@name UI界面更新接口
///@{
#define GPLAYER_TOUI_ConsoleMethod(NAME,FNAME)\
ConsoleMethod( GPlayer, EquipsToUI##NAME, void , 3, 3, "Object.EquipsToUI"##FNAME##"(uiBag)")\
{\
	GuiCellArrayControl* pUIBag;\
	if(Sim::findObject(argv[2], pUIBag))\
		object->EquipsToUI##NAME(pUIBag);\
}

//ConsoleMethod( GPlayer, EquipsToUIEquipSlotArming, void , 3, 3, "Object.EquipsToUIEquipSlotArming(uiBag)")
//{
//	GuiCellArrayControl* pUIBag;
//	if(Sim::findObject(argv[2], pUIBag))
//		object->EquipsToUIEquipSlotLeft(pUIBag);
//}

//gGPlayer.EquipsToUIEquipSlotArming("PlayUIBagArming");
//gGPlayer.EquipsToUIEquipSlotAdorn("PlayUIBagAdorn");
//gGPlayer.EquipsToUIBagGrid(0,"PlayUIBagGrid0");

GPLAYER_TOUI_ConsoleMethod(EquipSlotArming,"EquipSlotArming");
GPLAYER_TOUI_ConsoleMethod(EquipSlotAdorn,"EquipSlotAdorn");


ConsoleMethod( GPlayer, EquipsToUIBagGrid, void , 4, 4, "Object.EquipsToUIEquipSlotArming(uiBag,nIndex)")
{
	GuiCellArrayControl* pUIBag;
	char szUIName[128];
	dSprintf(szUIName, 128, "%s%s",argv[2], argv[3]);
	if(Sim::findObject(szUIName, pUIBag))
		object->EquipsToUIBagGrid(pUIBag);
}

ConsoleMethod( GPlayer, SetMoveTo, void , 4, 4, "Object.SetMoveTo(pt, bPressDown)")
{
   Point3F v( 0.0f, 0.0f, 0.0f );
   dSscanf( argv[2], "%g %g %g", &v.x, &v.y, &v.z );
   bool bPressDown = dAtob(argv[3]);
   object->SetMoveTo( v, bPressDown);
}

//由PlayUi::onWake调用
ConsoleMethod(GPlayer,OnPlayerEnteredWorld,void,2,2,"OnPlayerEnteredWorld()")
{
	object->OnPlayerEnteredWorld();
}

/// @}





#endif


//ConsoleMethod( GPlayer, AttachTSDatablock, bool , 3, 3, "Object.AttachTSDatablock(gameBaseData)")
//{
//	PlayerData* pPlayerData = dynamic_cast<PlayerData*>(Sim::getDataBlockGroup()->findObject(argv[2]));
//
//	return object->AttachTSDatablock(pPlayerData);
//}



};//namespace RPG

⌨️ 快捷键说明

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