56 lines
2.0 KiB
C++
56 lines
2.0 KiB
C++
#include "StdAfx.h"
|
||
#include "EntityVarSubSystem.h"
|
||
|
||
void CActorVarSubSystem::OnDbRetData(INT_PTR nCmd,INT_PTR nErrorCode,CDataPacketReader &reader )
|
||
{
|
||
if(m_pEntity ==NULL) return;
|
||
if(nCmd == jxInterSrvComm::DbServerProto::dcLoadVar && nErrorCode == jxInterSrvComm::DbServerProto::reSucc)
|
||
{
|
||
m_Var.loadFromMemory(reader.getOffsetPtr(), reader.getAvaliableLength());
|
||
|
||
// 读取禁言数据
|
||
m_pEntity->GetChatSystem()->LoadFromScriptData();
|
||
//m_pEntity->GetBuffSystem()->LoadFromScriptData();
|
||
}
|
||
else if(nCmd == jxInterSrvComm::DbServerProto::dcLoadVar && nErrorCode != jxInterSrvComm::DbServerProto::reSucc)
|
||
{
|
||
OutputMsg(rmError,_T("装载玩家[%s]的装备的数据出错,actorid=%u"),((CActor*)m_pEntity)->GetEntityName(),m_pEntity->GetProperty<unsigned int>(PROP_ENTITY_ID));
|
||
}
|
||
m_pEntity->OnFinishOneInitStep(eMSG_USR_LOGIN_DATA_ACTORVARSUB_SYSTEM);
|
||
}
|
||
|
||
void CActorVarSubSystem::Save(PACTORDBDATA pData)
|
||
{
|
||
if(m_pEntity ==NULL) return;
|
||
|
||
CDataClient *pDBClient = GetLogicServer()->GetDbClient();
|
||
|
||
CDataPacket& dataPacket = pDBClient->allocProtoPacket(jxInterSrvComm::DbServerProto::dcSaveVar);
|
||
dataPacket << m_pEntity->GetRawServerIndex() << GetLogicServer()->GetServerIndex();
|
||
dataPacket << (unsigned int) m_pEntity->GetProperty<unsigned int>(PROP_ENTITY_ID); //玩家ID
|
||
//m_Var.set("2",222);
|
||
//m_Var.set("1","111");
|
||
size_t savesize = 0;
|
||
CCLVariant *pContinueVar = &m_Var;
|
||
|
||
dataPacket.setLength(4096);//预留4K空间
|
||
INT_PTR nReserverCount =0;
|
||
while (true)
|
||
{
|
||
savesize = pContinueVar->saveToMemory(dataPacket.getOffsetPtr(), dataPacket.getAvaliableCapacity(), &pContinueVar);
|
||
dataPacket.adjustOffset(savesize);
|
||
if (!pContinueVar)
|
||
break;
|
||
//这里修改了一处死循环,问题是大小大于4096将无法申请空间
|
||
dataPacket.setLength(dataPacket.getLength() + 4096);//每次增长4K
|
||
//OutputMsg(rmWaning,_T("actor id=%u, the var data too large"),(unsigned int ) m_pEntity->GetProperty<unsigned int>(PROP_ENTITY_ID));
|
||
nReserverCount ++;
|
||
if(nReserverCount >10)
|
||
{
|
||
break;
|
||
}
|
||
}
|
||
|
||
pDBClient->flushProtoPacket(dataPacket);
|
||
}
|