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

📄 dbuser.cpp

📁 奇迹世界data 服务器代码,研究游戏的朋友有帮助
💻 CPP
📖 第 1 页 / 共 2 页
字号:
{
	ASSERT( wSize == MAX_SKILLSTREAM_SIZE );
	if( eType == SERIALIZE_STORE )
		memcpy( m_pTotalInfo[bySlotIndex].m_SkillStream, pSkillStream, wSize );
	else if( eType == SERIALIZE_LOAD )
		memcpy( pSkillStream, m_pTotalInfo[bySlotIndex].m_SkillStream, wSize );
}
VOID DBUser::SerializeQuickStream( BYTE bySlotIndex, BYTE * pQuickStream, WORD wSize, eSERIALIZE eType )
{
	ASSERT( wSize == MAX_QUICKSTREAM_SIZE );
	if( eType == SERIALIZE_STORE )
		memcpy( m_pTotalInfo[bySlotIndex].m_QuickStream, pQuickStream, wSize );
	else if( eType == SERIALIZE_LOAD )
		memcpy( pQuickStream, m_pTotalInfo[bySlotIndex].m_QuickStream, wSize );
}
VOID DBUser::SerializeStyleStream( BYTE bySlotIndex, BYTE * pStream, WORD wSize, eSERIALIZE eType )
{
	ASSERT( wSize == MAX_STYLESTREAM_SIZE );
	if( eType == SERIALIZE_STORE )
		memcpy( m_pTotalInfo[bySlotIndex].m_StyleStream, pStream, wSize );
	else if( eType == SERIALIZE_LOAD )
		memcpy( pStream, m_pTotalInfo[bySlotIndex].m_StyleStream, wSize );
}

VOID DBUser::SerializeWarehouseStream( BYTE * pWarehouseStream, WORD wSize, eSERIALIZE eType )
{
	ASSERT( wSize == MAX_WAREHOUSESTREAM_SIZE );
	if( eType == SERIALIZE_STORE )
		memcpy( m_pWarehouseStream, pWarehouseStream, wSize );
	else if( eType == SERIALIZE_LOAD )
		memcpy( pWarehouseStream, m_pWarehouseStream, wSize );
}


VOID DBUser::UpdateDataToDB()
{
	if( GetDBLoadState() == eDB_LOAD_AFTER )
		g_DBProxyServer.ExecuteUpdateCharacterInfo( this );
}


VOID DBUser::Update()
{
	if( m_DBUpdateTimer.IsExpired() )
	{
		// 某腐磐 沥焊, 酒捞袍沥焊 DB Insert

		UpdateDataToDB();
	}
}

BOOL DBUser::UpdateForTimeOut()
{
	if( m_CacheExpiredTimer.IsExpired() )
	{
		return FALSE;
	}

	return TRUE;
}

// Destroy窃荐俊辑 荤侩
VOID DBUser::StartCacheExpiredTimer() 
{ 
	m_CacheExpiredTimer.SetTimer( MAX_CACHE_TIMEOUT_DELAY_TIME );
	SetCacheState( CACHE_EXPIRING );
}

VOID DBUser::StopCacheExpiredTimer()
{
	m_CacheExpiredTimer.DisableCheckTime();	
	SetCacheState( CACHE_NONE );
}

VOID DBUser::SendAllDataToGameServer( ServerSession * pServerSession )
{
	// Game Server肺 某腐磐 沥焊 焊晨
	//---------------------------------------------
	// DG_CHARINFO_CHAR_ITEM_CMD
	//---------------------------------------------
	ASSERT(GetUserKey() != 0);
	DWORD dwUserKey = GetUserKey();

	MSG_DG_CHARINFO_CHAR_ITEM_CMD msg;
	msg.m_dwKey = dwUserKey;
	SerializeCharInfo( GetSelectedCharSlotIndex(), msg.m_CharacterInfo, SERIALIZE_LOAD );

	msg.m_ItemInfo.m_EquipCount = 0;
	ITEMSLOTEX * pSlot = msg.m_ItemInfo.m_Slot;
	POSTYPE total = 0;
	for(POSTYPE i=0;i<MAX_EQUIPMENT_SLOT_NUM;++i)
	{
		if( !IsEmptyEquipItem(GetSelectedCharSlotIndex(), i) )
		{
			pSlot[total].m_ItemPos = i;
			GetEquipItem(GetSelectedCharSlotIndex(), pSlot[total].m_ItemPos, &pSlot[total].m_Stream);
			++total;
			++msg.m_ItemInfo.m_EquipCount;
		}
	}
	msg.m_ItemInfo.m_InvenCount = 0;
	for(POSTYPE i=0;i<MAX_INVENTORY_SLOT_NUM;++i)
	{
		if( !IsEmptyInventoryItem(GetSelectedCharSlotIndex(), i) )
		{
			pSlot[total].m_ItemPos = i;
			GetInventoryItem(GetSelectedCharSlotIndex(), pSlot[total].m_ItemPos, &pSlot[total].m_Stream);
			++total;
			++msg.m_ItemInfo.m_InvenCount;
		}
	}

	msg.m_ItemInfo.m_TmpInvenCount = 0;
	for(POSTYPE i=0;i<MAX_TEMPINVENTORY_SLOT_NUM;++i)
	{
		if( !IsEmptyTempInventoryItem(GetSelectedCharSlotIndex(), i) )
		{
			pSlot[total].m_ItemPos = i;
			GetTempInventoryItem(GetSelectedCharSlotIndex(), pSlot[total].m_ItemPos, &pSlot[total].m_Stream);
			++total;
			++msg.m_ItemInfo.m_TmpInvenCount;
		}
	}
	pServerSession->SendPacket( &msg, msg.GetSize() );

	//---------------------------------------------
	// DG_CHARINFO_SKILL_CMD
	//---------------------------------------------
	MSG_DG_CHARINFO_SKILL_CMD msg2;
	msg2.m_dwKey = dwUserKey;
	msg2.m_SkillInfo.m_Count = 0;
	SKILLSLOT * pSkillSlot = msg2.m_SkillInfo.m_Slot;
	total = 0;
	for(POSTYPE i=0;i<MAX_SKILL_SLOT_NUM;++i)
	{
		if( !IsEmptySkill(GetSelectedCharSlotIndex(), i))
		{
			pSkillSlot[total].m_SkillPos = i;
			GetSkill(GetSelectedCharSlotIndex(), pSkillSlot[total].m_SkillPos, &pSkillSlot[total].m_Stream);
			++total;
			++msg2.m_SkillInfo.m_Count;
		}
	}
	pServerSession->SendPacket( &msg2, msg2.GetSize() );

	//---------------------------------------------
	// DG_CHARINFO_QUICK_CMD
	//--------------------------------------------
	MSG_DG_CHARINFO_QUICK_CMD msg3;
	msg3.m_dwKey = dwUserKey;
	msg3.m_QuickInfo.m_Count = 0;
	QUICKSLOT * pQuickSlot = msg3.m_QuickInfo.m_Slot;
	total = 0;
	for(POSTYPE i=0;i<MAX_QUICK_SLOT_NUM;++i)
	{
		if( !IsEmptyQuick(GetSelectedCharSlotIndex(), i))
		{
			pQuickSlot[total].m_QuickPos = i;
			GetQuick(GetSelectedCharSlotIndex(), pQuickSlot[total].m_QuickPos, &pQuickSlot[total].m_Stream);
			++total;
			++msg3.m_QuickInfo.m_Count;
		}
	}
	pServerSession->SendPacket( &msg3, msg3.GetSize() );

	//---------------------------------------------
	// DG_CHARINFO_STYLE_CMD
	//--------------------------------------------
	MSG_DG_CHARINFO_STYLE_CMD msg4;
	msg4.m_dwKey = dwUserKey;
	msg4.m_StyleInfo.m_Count = 0;
	STYLESLOT * pStyleSlot = msg4.m_StyleInfo.m_Slot;
	total = 0;
	for(POSTYPE i=0;i<MAX_STYLE_SLOT_NUM;++i)
	{
		if( !IsEmptyStyle(GetSelectedCharSlotIndex(), i))
		{
			pStyleSlot[total].m_StylePos = i;
			GetStyle(GetSelectedCharSlotIndex(), pStyleSlot[total].m_StylePos, &pStyleSlot[total].m_Stream);
			++total;
			++msg4.m_StyleInfo.m_Count;
		}
	}
	pServerSession->SendPacket( &msg4, msg4.GetSize() );

	//---------------------------------------------
	// DG_CHARINFO_QUEST_CMD
	//---------------------------------------------
	MSG_DG_CHARINFO_QUEST_CMD msg5;
	msg5.m_dwKey = dwUserKey;
	SerializeQuestStream( GetSelectedCharSlotIndex(), msg5.m_pQuestStream, MAX_QUESTSTREAM_SIZE, SERIALIZE_LOAD );
	SerializeMissionStream( GetSelectedCharSlotIndex(), msg5.m_pMissionStream, MAX_MISSIONSTREAM_SIZE, SERIALIZE_LOAD );
	pServerSession->SendPacket( &msg5, sizeof(msg5) );
}

VOID DBUser::MakeUpdateWarehouseQuery( UpdateWarehouseQuery * pQuery )
{
	char szQueryBuff[84];
	// 烙矫!!!
	if( GetWarehouseMoney() > LLONG_MAX )
		SetWarehouseMoney( LLONG_MAX );

	_snprintf( szQueryBuff, 84, "{?=call S_UpdateWarehouse (%u, ?, %u) }", GetUserGUID(), GetWarehouseMoney() );
	pQuery->SetQuery( szQueryBuff );
	pQuery->SetUserKey( GetUserKey() );

	SerializeWarehouseStream( pQuery->pParam[0].m_pWarehouseItem, MAX_WAREHOUSESTREAM_SIZE, SERIALIZE_LOAD );
	SUNLOG(eFULL_LOG,  "[DBUser::MakeUpdateWarehouseQuery] %s", szQueryBuff );
}

VOID DBUser::MakeUpdateCharacterQuery( UpdateCharacterQuery * pQuery )
{
	BYTE CharSlotIndex = GetSelectedCharSlotIndex();
	
	ASSERT( CharSlotIndex < MAX_CHARACTER_LIST_NUM );

	BASE_PLAYERINFO & Info = m_pTotalInfo[CharSlotIndex].m_pCharInfo;

	Info.m_Money	= BOUND_CHECK( 0, Info.m_Money, LLONG_MAX );
	Info.m_dwExp	= BOUND_CHECK( 0, Info.m_dwExp, INT_MAX );
	Info.m_LV		= BOUND_CHECK( 0, Info.m_LV, SHRT_MAX );

	
	static char buff[128];
	std::string queryString = "{?=call S_UpdateChar (";
	queryString += _ultoa(Info.m_CharGuid, buff, 10 );		//@CharGuid int
	queryString += ", ";
	queryString += _ultoa(Info.m_LV, buff, 10 );	//@LV int ,
	queryString += ", ";
	queryString += _itoa(Info.m_sStrength, buff, 10 ); //@Strength smallint  ,
	queryString += ", ";
	queryString += _itoa(Info.m_sDexterity, buff, 10 ); //@Dexterity smallint  ,
	queryString += ", ";
	queryString += _itoa(Info.m_sVitality, buff, 10 ); //@Vitality smallint  ,
	queryString += ", ";
	queryString += _itoa(Info.m_sInteligence, buff, 10 ); //@Inteligence smallint  ,
	queryString += ", ";
	queryString += _itoa(Info.m_sSpirit, buff, 10 ); //@Spirit smallint  ,
	queryString += ", ";
	queryString += _itoa(Info.m_sSkillStat1, buff, 10 ); //@SkillStat1 smallint  ,
	queryString += ", ";
	queryString += _itoa(Info.m_sSkillStat2, buff, 10 ); //@SkillStat2 smallint  ,
	queryString += ", ";
	queryString += _itoa(Info.m_UserPoint, buff, 10 );
	queryString += ", ";
	queryString += _ultoa(Info.m_dwExp, buff, 10 );	//@Exp int ,
	queryString += ", ";
	queryString += _ultoa(Info.m_dwMaxHP, buff, 10 ); //@MaxHP real  ,
	queryString += ", ";
	queryString += _ultoa(Info.m_dwHP, buff, 10 ); //@HP real  ,
	queryString += ", ";
	queryString += _ultoa(Info.m_dwMaxMP, buff, 10 ); //@MaxMP real  ,
	queryString += ", ";
	queryString += _ultoa(Info.m_dwMP, buff, 10 ); //@MP real  ,
	queryString += ", ";
	queryString += _ui64toa(Info.m_Money, buff, 10 ); //@Money int  ,
	queryString += ", ";
	queryString += _ultoa(Info.m_dwRemainStat, buff, 10 ); //@RemainStat int  ,
	queryString += ", ";
	queryString += _ultoa(Info.m_dwRemainSkill, buff, 10 ); //@RemainSkill int  ,
	queryString += ", ";
	queryString += _ultoa(Info.m_wSelectStyleCode, buff, 10 ); //@RightSelect tinyint  ,
	queryString += ", ";
	queryString += _ultoa(Info.m_byPKState, buff, 10 );//@PKState tinyint  ,
	queryString += ", ";
	queryString += _ultoa(Info.m_byCharState, buff, 10 );//@CharState tinyint  ,
	queryString += ", ";
	queryString += _ui64toa(Info.m_StateTime, buff, 10 );//@StateTime bigint,
	queryString += ", ";
	queryString += _ultoa(Info.m_dwRegion, buff, 10 ); //@Region int  ,
	queryString += ", ";
	queryString += _itoa(Info.m_sLocationX, buff, 10 );//@LocationX smallint  ,
	queryString += ", ";
	queryString += _itoa(Info.m_sLocationY, buff, 10 ); //@LocationY smallint  ,
	queryString += ", ";
	queryString += _itoa(Info.m_sLocationZ, buff, 10 ); //@LocationZ smallint  ,
	queryString += ", ";
	queryString += "'', "; //@TitleID varchar (10)  ,
	queryString += _ui64toa(Info.m_TitleTime, buff, 10 );//@TitleTime bigint  ,
	queryString += ", ";
	queryString += _itoa(Info.m_byInvisibleOptFlag, buff, 10 );//@ VisualOpt tinyint  ,
	queryString += ", ";
	queryString += _ultoa(Info.m_bInventoryLock, buff, 10 ); //@InventoryLock bit  ,
	queryString += ", ";
	queryString += "?, "; //@InventoryItem varbinary (480)  ,
	queryString += "?, "; //@TempInventoryItem varbinary (480)  ,
	queryString += "?, "; //@EquipItem varbinary (168)  ,
	queryString += "?, "; //@Skill varbinary (800)  ,
	queryString += "?, "; //@Quick varbinary (196)  ,
	queryString += "?, "; //@Style varbinary (8)  ,
	queryString += "?, "; //@Quest varbinary (500)  ,
	queryString += "? "; //@Mission varbinary (128) 
	queryString += ", ";
	queryString += _itoa(Info.m_PlayLimitedTime, buff, 10 );	//bigint
	//queryString += "0";	// 荤侩矫埃 酒流 备泅 救窃
	queryString += ", ";
	// PVP 
	queryString += _ultoa(Info.m_dwPVPPoint, buff, 10 );
	queryString += ", ";
	queryString += _ultoa(Info.m_dwPVPScore, buff, 10 );
	queryString += ", ";
	queryString += _ultoa(Info.m_byPVPGrade, buff, 10 );
	queryString += ", ";
	queryString += _ultoa(Info.m_dwPVPTotalDraw, buff, 10 );
	queryString += ", ";
	queryString += _ultoa(Info.m_dwPVPMaxSeries, buff, 10 );
	queryString += ", ";
	queryString += _ultoa(Info.m_dwPVPTotalKill, buff, 10 ); 
	queryString += ", ";
	queryString += _ultoa(Info.m_dwPVPTotalDie, buff, 10 );
	queryString += ", ";
	queryString += _ultoa(Info.m_dwPVPMaxKill, buff, 10 );
	queryString += ", ";
	queryString += _ultoa(Info.m_dwPVPMaxDie, buff, 10 );
	queryString += " )}";

	ASSERT( queryString.size() < 255 );
	if( queryString.size() >= 255 ) return;

//	SUNLOG(eFULL_LOG,  queryString.c_str() );

	pQuery->SetQuery( const_cast<char *>(queryString.c_str()) );
	pQuery->SetUserKey( GetUserKey() );

	SerializeEquipItemStream( CharSlotIndex, pQuery->pCharacterParam[0].m_pEquipItem, MAX_EQUIPITEMSTREAM_SIZE, SERIALIZE_LOAD );
	SerializeInventoryItemStream( CharSlotIndex, pQuery->pCharacterParam[0].m_pInventoryItem, MAX_INVENTORYITEMSTREAM_SIZE, SERIALIZE_LOAD );
	SerializeTempInventoryItemStream( CharSlotIndex, pQuery->pCharacterParam[0].m_pTempInventoryItem, MAX_TEMPINVENTORYITEMSTREAM_SIZE, SERIALIZE_LOAD );
	SerializeSkillStream( CharSlotIndex, pQuery->pCharacterParam[0].m_pSkill, MAX_SKILLSTREAM_SIZE, SERIALIZE_LOAD );
	SerializeQuestStream( CharSlotIndex, pQuery->pCharacterParam[0].m_pQuest, MAX_QUESTSTREAM_SIZE, SERIALIZE_LOAD );
	SerializeMissionStream( CharSlotIndex, pQuery->pCharacterParam[0].m_pMission, MAX_MISSIONSTREAM_SIZE, SERIALIZE_LOAD );
	SerializeQuickStream( CharSlotIndex, pQuery->pCharacterParam[0].m_pQuick, MAX_QUICKSTREAM_SIZE, SERIALIZE_LOAD );
	SerializeStyleStream( CharSlotIndex, pQuery->pCharacterParam[0].m_pStyle, MAX_STYLESTREAM_SIZE, SERIALIZE_LOAD );
}

⌨️ 快捷键说明

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