📄 rpgdatabasetableprocess.cc
字号:
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 + -