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

📄 rpgdatabasetableprocess.cc

📁 五行MMORPG引擎系统V1.0
💻 CC
📖 第 1 页 / 共 2 页
字号:
	pGObject->m_dataNPC			= pRecord->data;
	//处理人物装备
	INTEGER_NPC_SLOTS(Equipments, DB::GEQUIPMENTS ,DB::FO_EQUIPS_ID, PCS_EQUIPMENTS, EQUIP_SLOTNUM);
	//处理背包
	INTEGER_NPC_SLOTS(BagGoods, DB::GBAGGOODS, DB::FO_BAGGOODS_ID, PCS_BAGGOODS, NPC_BAG_SLOTNUM);

	return true;
}




//bool RPGDatabase::IntegrateDialog(DB::GDIALOG* pRecord,	GDialog* pGObject)
DB_IMPLEMENT_INTEGRATE(GDIALOG,		Dialog )
{
	GDlgPiece*			pGPiece;

	AssertWarn(pRecord,"指定记录不可为空");
	pGObject->m_data			= pRecord->data;
	//处理Require数据
	

	pGObject->m_pRequire = ProcessEfficacyKey(pRecord->dwRequireID);

	pGPiece = ProcessDlgPieceKey(pRecord->dwPieceID);

	pGObject->SetDlgEntry(pGPiece);
	return pGPiece != NULL;
}

//bool RPGDatabase::IntegrateDlgPiece(DB::GDLGPIECE* pRecord, GDlgPiece*	pGObject, GDialog* pDialog)
DB_IMPLEMENT_INTEGRATE(GDLGPIECE,	DlgPiece )
{
	AssertWarn(pRecord,"指定记录不可为空");

	U32					n,
							dwPieceID,
							//dwPiece2ID,
							dwAnswerID;

	pGObject->m_data		= pRecord->data;

	pGObject->m_pCmd		= ProcessEfficacyKey(pRecord->dwCmdID);

	for(n=0; n<GDLG_ANSWER_NUM; n++)
	{
		///////////////////////////////////////
		//关联选项
		dwAnswerID	= pRecord->arAnswerIDs[n];
		pGObject->m_arAnswers[n] = ProcessDlgAnswerKey(dwAnswerID);

		/////////////////////////////////
		//关联Next
		dwPieceID	= pRecord->arNextIDs[n];
		pGObject->m_arNexts[n] =ProcessDlgPieceKey(dwPieceID);

		/////////////////////////////////
		//关联Next2
		dwPieceID	= pRecord->arNext2IDs[n];
		pGObject->m_arNext2s[n] =ProcessDlgPieceKey(dwPieceID);
	}

	return true;
}


//bool  RPGDatabase::IntegrateDlgAnswer(DB::GDLGANSWER*	pRecord,	GDlgAnswer*			pGObject)
DB_IMPLEMENT_INTEGRATE(GDLGANSWER,	DlgAnswer )
{
	AssertWarn(pRecord,"指定记录不可为空");
	pGObject->m_data		= pRecord->data;
	return true;
}






//bool RPGDatabase::IntegrateGoods(DB::GGOODS* pRecord,	RPG::GGoods* pGObject)
DB_IMPLEMENT_INTEGRATE(GGOODS, Goods)
{

	if(pGObject == NULL || pRecord == NULL)
		return false;

	pGObject->m_dataGoods = pRecord->data;
	if(!pGObject->AttachGoodsDefine())
		return false;

	pGObject->m_pGEfficacy	= ProcessEfficacyKey(pRecord->dwEfficacyID);
	pGObject->m_pRequire		= ProcessEfficacyKey(pRecord->dwRequireID);
	pGObject->m_pGoodsToNpc		= g_pRPGDataMan->GetNpc(pRecord->sToNpc);
	pGObject->m_pGoodsFromNpc	= g_pRPGDataMan->GetNpc(pRecord->sFromNpc);
	
	return true;
}



DB_IMPLEMENT_INTEGRATE(GEFFICACY, Efficacy)
{
	if(pGObject == NULL || pRecord == NULL)
		return false;
	pGObject->m_data		= pRecord->data;
	
	if(pGObject->IsGoodsType())
	{
		//注册物品功效
		pGObject->m_pGoodsEfficacy = ProcessEfficacyKey(pRecord->data.nGoodsEffID);
	}

	//自联引用,容易导致死循环,小心
	PROCESS_ASSOCIATE_TABLESELF_ID(Efficacy,pRecord->dwID,pGObject);

	return true;
}



DB_IMPLEMENT_INTEGRATE(GTASKBASE,		TaskBase)
{
	U32				n,dwID;

	if(pGObject == NULL || pRecord == NULL)
		return false;

	pGObject->m_data0			= pRecord->data;
	//pGObject->m_pOwnerNpc	= m_pCurNpc;

	//本场景Npc已经Integrate了,应该能在DataMan中找到;非本场景Npc也没必要出现,可为NULL
	if(pRecord->sToNpcName && pRecord->sToNpcName[0])
		pGObject->m_pToNpc	= g_pRPGDataMan->GetNpc(pRecord->sToNpcName);
	else
		pGObject->m_pToNpc	= NULL;

	//源Npc
	if(pRecord->sFromNpcName && pRecord->sFromNpcName[0])
		pGObject->m_pFromNpc	= g_pRPGDataMan->GetNpc(pRecord->sFromNpcName);
	else
		pGObject->m_pFromNpc	= m_pCurNpc;



	//处理 条件 目标
	pGObject->m_pGoal		= ProcessEfficacyKey(pRecord->dwGoalID);
	pGObject->m_pRequire	= ProcessEfficacyKey(pRecord->dwRequireID);
	pGObject->m_pPremium	= ProcessEfficacyKey(pRecord->dwPremiumID);
	pGObject->m_pGoalObject	= ProcessEfficacyKey(pRecord->dwGoalObjectID);
	//pGObject->m_pGoalResult	= ProcessEfficacyKey(pRecord->dwGoalResultID);

	//关联对话
	for(n=0; n<GTS_AMOUNT; n++)
	{
		dwID = pRecord->arDialogsID[n];
		pGObject->m_arStateDialogs[n] = ProcessDialogKey(dwID);
	}//for(n=0; n<GTS_AMOUNT; n++)

	return true;
}


DB_IMPLEMENT_INTEGRATE(GTASKSTATE,		TaskState)
{
	U32		n;
	GTask*	pTask;
	U32		nNum;
	//GNpc*		pNpc;
	if(pGObject == NULL || pRecord == NULL)
		return false;

	pTask						= ProcessTaskKey(pRecord->dwTaskID);
	if(!pTask)
		return FALSE;

	pGObject->m_pTask		= pTask;
	pGObject->m_nState	= pRecord->nState;
	pGObject->m_pNpc		= ProcessNpcKey(pRecord->sNpcName);
	//pNpc		= ProcessNpcKey(pRecord->sNpcName);
	if(pTask)
		pTask->UpdateToNpcState(pRecord->nState);
	
	//pGObject->SetTaskState(pTask,pRecord->nState, pNpc);
	nNum	= pTask->GetTaskPieceSize();
	pGObject->InitPieceStates(nNum);
	
	nNum = getMin(nNum,sizeof(pRecord->arPieceStates)/sizeof(EGTaskStates));
	for(n=0; n< nNum; n++)
	{
		pGObject->m_arPieceStates[n] = pRecord->arPieceStates[n];
	}//for

	return true;
}


DB_IMPLEMENT_INTEGRATE(GTASK,		Task)
{
	if(pGObject == NULL || pRecord == NULL)
		return false;

	m_pCurTask					= pGObject;
	pGObject->m_data			= pRecord->data;
	pGObject->m_pOwnerNpc	= m_pCurNpc;

	ProcessTaskBaseKey(pGObject, pRecord->dwTaskBaseID);

	//处理TaskPiece关联
	///////////////////////////////////
	//处理Npc关联任务
	PROCESS_ASSOCIATE_TABLE_ID(Task, TaskPiece, /*TASKPIECE,*/ pRecord->dwID ,pGObject);
	//任务优先级排序
   //dQsort(pGObject->m_arTaskPieces.address(),
			//pGObject->m_arTaskPieces.size(),
			//sizeof(GTaskPiece*),
			//TaskPiecePriorityCmp);
	m_pCurTask					= NULL;

	return true;
}


DB_IMPLEMENT_INTEGRATE(GTASKPIECE,	TaskPiece)
{

	if(pGObject == NULL || pRecord == NULL)
		return false;

	pGObject->m_pOwnerTask	= m_pCurTask;
	pGObject->m_data			= pRecord->data;
	ProcessTaskBaseKey(pGObject, pRecord->dwTaskBaseID);

	return true;
}









/////////////////////////////////////////////////////////////////
//排序比较函数
static S32 QSORT_CALLBACK DialogPriorityCmp(const void* a,const void* b)
{

	 const GDialog** p0 = (const GDialog**)a;
	 const GDialog** p1 = (const GDialog**)b;
	if(*p0 && *p1)
		return (*p1)->GetPriority() -  (*p0)->GetPriority();
	else if(!*p0 && *p1)
		return 1;
	return -1;
}

static S32 QSORT_CALLBACK TaskPriorityCmp(const void* a,const void* b)
{

	 const GTask** p0 = (const GTask**)a;
	 const GTask** p1 = (const GTask**)b;
	if(*p0 && *p1)
		return (*p1)->GetPriority() -  (*p0)->GetPriority();
	else if(!*p0 && *p1)
		return 1;
	return -1;
}


bool RPGDatabase::IntegrateNpcDat(GNpc* pNpc)
{
	if(!pNpc)
		return false;

	m_pCurNpc = pNpc;
	//U32 n;
	///////////////////////////////////
	//处理Npc关联Dialog
	PROCESS_ASSOCIATE_TABLE_NPC( Dialog/*, DIALOG*/ );

	//对话优先级排序
   dQsort(pNpc->m_arDialogs.address(),
			pNpc->m_arDialogs.size(),
			sizeof(GDialog*),
			DialogPriorityCmp);

	///////////////////////////////////
	//处理Npc关联任务
	PROCESS_ASSOCIATE_TABLE_NPC( Task/*, TASK*/ );
	//任务优先级排序
   dQsort(pNpc->m_arTasks.address(),
			pNpc->m_arTasks.size(),
			sizeof(GTask*),
			TaskPriorityCmp);


	m_pCurNpc = NULL;

	return true;
}


void	RPGDatabase::IntegrateGoodsList(U32 arIDs[], GGoods** parUnits,U32 nNum)
{
	AssertWarn(parUnits,"人物装备槽不能为NULL");
	U32	n;
	//GGoods*		pGGoods;
	//DB::GGOODS*	pRecordGoods;
	U32	dwID;

	for(n=0; n<nNum; n++)
	{
		dwID		= /*pRecord->*/arIDs[n];
		//pGGoods	= NULL;

		//if(dwID != DBNUL)
		//{
		//	pGGoods = g_pRPGDataMan->GetGoods(dwID);
		//	if(!pGGoods)
		//	{
		//		pRecordGoods = DB::SearchField(DB_TABLE(Goods), dwID, DB::FO_GGOODS_ID,DB_RECORDNUM(Goods));
		//		if(pRecordGoods)
		//		{
		//			pGGoods = g_pRPGDataMan->RegGoods(dwID);
		//			if(pGGoods)
		//				IntegrateGoods(pRecordGoods, pGGoods);
		//		}
		//	}
		//	//IntegrateGoods
		//}//if
		//parUnits[n] = pGGoods;
		parUnits[n] = ProcessGoodsKey(dwID);
	}//for
}





};//namespace RPG

⌨️ 快捷键说明

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