Files
mir_server/server/LogicServer/entitysystem/EntityVarSubSystem.cpp
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

56 lines
2.0 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#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);
}