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

📄 dbuser.cpp

📁 奇迹世界data 服务器代码,研究游戏的朋友有帮助
💻 CPP
📖 第 1 页 / 共 2 页
字号:
#include "StdAfx.h"
#include ".\dbuser.h"
#include <Struct.h>
#include "StructInQuery.h"
#include "DBProxyServer.h"
#include <ServerStruct.h>
#include "Handler_Common.h"
#include <PacketStruct_ServerCommon.h>
#include <PacketStruct_DG.h>
#include "DBUserManager.h"
#include <StructInPacket.h>
#include "ServerSession.h"
#include <Misc.h>

DBUser::DBUser(void)
{
}

DBUser::~DBUser(void)
{	
}

VOID DBUser::Init()
{
	ReInit();
	
	// 浇废 檬扁拳
	for( int i = 0 ; i < MAX_CHARACTER_SLOT_NUM ; ++i ) m_bOccupiedSlot[i] = FALSE;

	SetDBLoadState( eDB_LOAD_NONE );
	SetState( INIT_STATE );

	//某矫肺 犁荤侩登扁锭巩俊 ReInit()俊 持绢滴搁 救凳
	SetSelectedCharSlotIndex(0);
}

VOID DBUser::ReInit()
{
	SetNeedWarehouseToSave( FALSE );
	// 鸥捞赣 悸泼
	m_DBUpdateTimer.SetTimer( _DBP_UPDATE_CYCLE_DELAY );

	m_dwServerSessionIndex = 0;

	m_packet = 0;
	m_DisconnectedFromServer= UNKNOWN_SERVER;
	m_OrderNumber = 9;
}

VOID DBUser::Release()
{
	SetState( POOL_STATE );

	SetCacheState( CACHE_NONE );
}

VOID DBUser::CopyQUERY_CHARACTERTo( BYTE bySlotIndex, SelectCharQuery::sQUERY_RESULT * pCharInfo )
{
	ASSERT( bySlotIndex < MAX_CHARACTER_LIST_NUM );

	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_UserGuid							= pCharInfo->m_UserGuid;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_CharGuid							= pCharInfo->m_CharGuid;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_bySlot								= pCharInfo->m_bySlot;
	memcpy( m_pTotalInfo[bySlotIndex].m_pCharInfo.m_tszCharName, pCharInfo->m_tszCharName, MAX_CHARNAME_LENGTH );
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_byClassCode							= pCharInfo->m_byClass;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_LV									= pCharInfo->m_LV;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwRegion							= pCharInfo->m_iRegion;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_sLocationX							= pCharInfo->m_sX;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_sLocationY							= pCharInfo->m_sY;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_sLocationZ							= pCharInfo->m_sZ;

	
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwExp								= pCharInfo->m_iExp;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwMaxHP								= pCharInfo->m_iMaxHP;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwHP								= pCharInfo->m_iHP;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwMaxMP								= pCharInfo->m_iMaxMP;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwMP								= pCharInfo->m_iMP;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_Money								= pCharInfo->m_Money;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwRemainStat						= pCharInfo->m_iRemainStat;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwRemainSkill						= pCharInfo->m_iRemainSkill;
	ASSERT( pCharInfo->m_iSelectStyleCode <= USHRT_MAX );
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_wSelectStyleCode					= pCharInfo->m_iSelectStyleCode;	
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_byPKState							= pCharInfo->m_byPKState;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_byCharState							= pCharInfo->m_byCharState;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_StateTime							= pCharInfo->m_StateTime;

	memcpy( m_pTotalInfo[bySlotIndex].m_pCharInfo.m_tszTitleID, pCharInfo->m_tszTitleID, MAX_TITLEID_LENGTH );
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_TitleTime							= pCharInfo->m_TitleTime;

	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_bInventoryLock						= pCharInfo->m_bInventoryLock;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_sStrength							= pCharInfo->m_sStrength;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_sDexterity							= pCharInfo->m_sDexterity;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_sVitality							= pCharInfo->m_sVitality;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_sInteligence						= pCharInfo->m_sInteligence;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_sSpirit								= pCharInfo->m_sSpirit;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_sSkillStat1							= pCharInfo->m_sSkillStat1;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_sSkillStat2							= pCharInfo->m_sSkillStat2;

	// 虐, 倔奔, 赣府
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_byHeight							= pCharInfo->m_byHeight;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_byFace								= pCharInfo->m_byFace;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_byHair								= pCharInfo->m_byHair;

	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_PlayLimitedTime						= pCharInfo->m_iPlayLimitedTime;

	// PVP
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwPVPPoint							= pCharInfo->m_iPVPPoint;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwPVPScore							= pCharInfo->m_iPVPScore;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_byPVPGrade							= pCharInfo->m_byPVPGrade;
	//m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwPVPRanking						= pCharInfo->m_iPVPRanking;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwPVPMaxSeries						= pCharInfo->m_iPVPSeries;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwPVPMaxKill						= pCharInfo->m_iPVPMaxKill;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwPVPMaxDie							= pCharInfo->m_iPVPMaxDie;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwPVPTotalKill						= pCharInfo->m_iPVPKill;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwPVPTotalDie						= pCharInfo->m_iPVPDie;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwPVPTotalDraw						= pCharInfo->m_iPVPDraw;

	// 
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_UserPoint							= pCharInfo->m_UserPoint;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_byInvisibleOptFlag					= pCharInfo->m_byInvisibleOpt;

	// 辨靛
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_GuildGuid							= pCharInfo->m_GuildGuid;
	m_pTotalInfo[bySlotIndex].m_pCharInfo.m_GuildPosition						= pCharInfo->m_GuildPosition;
	memcpy( m_pTotalInfo[bySlotIndex].m_pCharInfo.m_tszGuildNickName,	pCharInfo->m_tszGuildNickName, sizeof(TCHAR)*MAX_CHARNAME_LENGTH );
	memcpy( m_pTotalInfo[bySlotIndex].m_pCharInfo.m_tszGuildName,		pCharInfo->m_tszGuildName, sizeof(TCHAR)*MAX_GUILDNAME_LENGTH );

	SerializeEquipItemStream( bySlotIndex, pCharInfo->m_pEquipItem, MAX_EQUIPITEMSTREAM_SIZE, SERIALIZE_STORE );
	SerializeInventoryItemStream( bySlotIndex, pCharInfo->m_pInventoryItem, MAX_INVENTORYITEMSTREAM_SIZE, SERIALIZE_STORE );
	SerializeTempInventoryItemStream( bySlotIndex, pCharInfo->m_pTempInventoryItem, MAX_TEMPINVENTORYITEMSTREAM_SIZE, SERIALIZE_STORE );
	SerializeSkillStream( bySlotIndex, pCharInfo->m_pSkill, MAX_SKILLSTREAM_SIZE, SERIALIZE_STORE );
	SerializeQuestStream( bySlotIndex, pCharInfo->m_pQuest, MAX_QUESTSTREAM_SIZE, SERIALIZE_STORE );
	SerializeMissionStream( bySlotIndex, pCharInfo->m_pMission, MAX_MISSIONSTREAM_SIZE, SERIALIZE_STORE );
	SerializeQuickStream( bySlotIndex, pCharInfo->m_pQuick, MAX_QUICKSTREAM_SIZE, SERIALIZE_STORE );
	SerializeStyleStream( bySlotIndex, pCharInfo->m_pStyle, MAX_STYLESTREAM_SIZE, SERIALIZE_STORE );
}

BOOL DBUser::IsEmptyStyle( BYTE bySlotIndex, POSTYPE pos )
{
	return (((STYLESTREAM *)m_pTotalInfo[bySlotIndex].m_StyleStream)[pos].StylePart.Code == 0);
}
BOOL DBUser::IsEmptyQuick( BYTE bySlotIndex, POSTYPE pos )
{
	return (((QUICKSTREAM *)m_pTotalInfo[bySlotIndex].m_QuickStream)[pos].QuickPart.SlotIdx == 0);
}
BOOL DBUser::IsEmptySkill( BYTE bySlotIndex, POSTYPE pos )
{
	return (((SKILLSTREAM *)m_pTotalInfo[bySlotIndex].m_SkillStream)[pos].SkillPart.wCode == 0);
}
BOOL DBUser::IsEmptyWarehouseItem( POSTYPE pos )
{
	return (((ITEMSTREAMEX *)m_pWarehouseStream)[pos].ItemPart.dwSerial == 0);
}
BOOL DBUser::IsEmptyEquipItem( BYTE bySlotIndex, POSTYPE pos )
{
	return (((ITEMSTREAMEX *)m_pTotalInfo[bySlotIndex].m_pEquipStream)[pos].ItemPart.dwSerial == 0);
}
BOOL DBUser::IsEmptyInventoryItem( BYTE bySlotIndex, POSTYPE pos )
{
	return (((ITEMSTREAMEX *)m_pTotalInfo[bySlotIndex].m_pInventoryStream)[pos].ItemPart.dwSerial == 0);
}
BOOL DBUser::IsEmptyTempInventoryItem( BYTE bySlotIndex, POSTYPE pos )
{
	return (((ITEMSTREAMEX *)m_pTotalInfo[bySlotIndex].m_pTempInventoryStream)[pos].ItemPart.dwSerial == 0);
}
VOID DBUser::SetStyle( BYTE bySlotIndex, POSTYPE pos, STYLESTREAM * IN pStream )
{
	ASSERT( pos < MAX_STYLE_SLOT_NUM );
	memcpy( &((STYLESTREAM *)m_pTotalInfo[bySlotIndex].m_StyleStream)[pos], pStream, sizeof(STYLESTREAM) );
}
VOID DBUser::GetStyle( BYTE bySlotIndex, POSTYPE pos, STYLESTREAM * OUT pStream )
{
	ASSERT( pos < MAX_STYLE_SLOT_NUM );
	memcpy( pStream, &((STYLESTREAM *)m_pTotalInfo[bySlotIndex].m_StyleStream)[pos], sizeof(STYLESTREAM) );
}
VOID DBUser::SetQuick( BYTE bySlotIndex, POSTYPE pos, QUICKSTREAM * IN pStream )
{
	ASSERT( pos < MAX_QUICK_SLOT_NUM );
	memcpy( &((QUICKSTREAM *)m_pTotalInfo[bySlotIndex].m_QuickStream)[pos], pStream, sizeof(QUICKSTREAM) );
}
VOID DBUser::GetQuick( BYTE bySlotIndex, POSTYPE pos, QUICKSTREAM * OUT pStream )
{
	ASSERT( pos < MAX_QUICK_SLOT_NUM );
	memcpy( pStream, &((QUICKSTREAM *)m_pTotalInfo[bySlotIndex].m_QuickStream)[pos], sizeof(QUICKSTREAM) );
}
VOID DBUser::SetSkill( BYTE bySlotIndex, POSTYPE pos, SKILLSTREAM * IN pStream )
{
	ASSERT( pos < MAX_SKILL_SLOT_NUM );
	memcpy( &((SKILLSTREAM *)m_pTotalInfo[bySlotIndex].m_SkillStream)[pos], pStream, sizeof(SKILLSTREAM) );
}

VOID DBUser::GetSkill( BYTE bySlotIndex, POSTYPE pos, SKILLSTREAM * OUT pStream )
{
	ASSERT( pos < MAX_SKILL_SLOT_NUM );
	memcpy( pStream, &((SKILLSTREAM *)m_pTotalInfo[bySlotIndex].m_SkillStream)[pos], sizeof(SKILLSTREAM) );
}

VOID DBUser::SetWarehouseItem( POSTYPE pos, ITEMSTREAMEX * IN pStream )
{
	ASSERT( pos < MAX_WAREHOUSE_SLOT_NUM );
	memcpy( &((ITEMSTREAMEX *)m_pWarehouseStream)[pos], pStream, sizeof(ITEMSTREAMEX) );
}

VOID DBUser::GetWarehouseItem( POSTYPE pos, ITEMSTREAMEX * OUT pStream )
{
	ASSERT( pos < MAX_WAREHOUSE_SLOT_NUM );
	memcpy( pStream, &((ITEMSTREAMEX *)m_pWarehouseStream)[pos], sizeof(ITEMSTREAMEX) );
}

VOID DBUser::SetEquipItem( BYTE bySlotIndex, POSTYPE pos, ITEMSTREAMEX * IN pStream )
{
	ASSERT( pos < MAX_EQUIPMENT_SLOT_NUM );
	memcpy( &((ITEMSTREAMEX *)m_pTotalInfo[bySlotIndex].m_pEquipStream)[pos], pStream, sizeof(ITEMSTREAMEX) );
}

VOID DBUser::GetEquipItem( BYTE bySlotIndex, POSTYPE pos, ITEMSTREAMEX * OUT pStream )
{
	ASSERT( pos < MAX_EQUIPMENT_SLOT_NUM );
	memcpy( pStream, &((ITEMSTREAMEX *)m_pTotalInfo[bySlotIndex].m_pEquipStream)[pos], sizeof(ITEMSTREAMEX) );
}
VOID DBUser::SetInventoryItem( BYTE bySlotIndex, POSTYPE pos, ITEMSTREAMEX * IN pStream )
{
	ASSERT( pos < MAX_INVENTORY_SLOT_NUM );
	memcpy( &((ITEMSTREAMEX *)m_pTotalInfo[bySlotIndex].m_pInventoryStream)[pos], pStream, sizeof(ITEMSTREAMEX) );
}

VOID DBUser::GetInventoryItem( BYTE bySlotIndex, POSTYPE pos, ITEMSTREAMEX * OUT pStream )
{
	ASSERT( pos < MAX_INVENTORY_SLOT_NUM );
	memcpy( pStream, &((ITEMSTREAMEX *)m_pTotalInfo[bySlotIndex].m_pInventoryStream)[pos], sizeof(ITEMSTREAMEX) );
}
VOID DBUser::SetTempInventoryItem( BYTE bySlotIndex, POSTYPE pos, ITEMSTREAMEX * IN pStream )
{
	ASSERT( pos < MAX_TEMPINVENTORY_SLOT_NUM );
	memcpy( &((ITEMSTREAMEX *)m_pTotalInfo[bySlotIndex].m_pTempInventoryStream)[pos], pStream, sizeof(ITEMSTREAMEX) );
}

VOID DBUser::GetTempInventoryItem( BYTE bySlotIndex, POSTYPE pos, ITEMSTREAMEX * OUT pStream )
{
	ASSERT( pos < MAX_TEMPINVENTORY_SLOT_NUM );
	memcpy( pStream, &((ITEMSTREAMEX *)m_pTotalInfo[bySlotIndex].m_pTempInventoryStream)[pos], sizeof(ITEMSTREAMEX) );
}

// OPT : @ 弥利拳 规过阑 茫酒扼!
VOID DBUser::ClearEquipItemStream( BYTE bySlotIndex )
{
	memset( m_pTotalInfo[bySlotIndex].m_pEquipStream, 0, MAX_EQUIPITEMSTREAM_SIZE );
}
VOID DBUser::ClearInventoryItemStream( BYTE bySlotIndex )
{
	memset( m_pTotalInfo[bySlotIndex].m_pInventoryStream, 0, MAX_INVENTORYITEMSTREAM_SIZE );
}
VOID DBUser::ClearTempInventoryItemStream( BYTE bySlotIndex )
{
	memset( m_pTotalInfo[bySlotIndex].m_pTempInventoryStream, 0, MAX_TEMPINVENTORYITEMSTREAM_SIZE );
}
VOID DBUser::ClearQuickStream( BYTE bySlotIndex )
{
	memset( m_pTotalInfo[bySlotIndex].m_QuickStream, 0, MAX_QUICKSTREAM_SIZE );
}
VOID DBUser::ClearStyleStream( BYTE bySlotIndex )
{
	memset( m_pTotalInfo[bySlotIndex].m_StyleStream, 0, MAX_STYLESTREAM_SIZE );
}
VOID DBUser::ClearSkillStream( BYTE bySlotIndex )
{
	memset( m_pTotalInfo[bySlotIndex].m_SkillStream, 0, MAX_SKILLSTREAM_SIZE );
}
VOID DBUser::ClearWarehouseStream()
{
	memset( m_pWarehouseStream, 0, MAX_WAREHOUSESTREAM_SIZE );
}
VOID DBUser::SerializeQuestStream( BYTE bySlotIndex, BYTE * pQuestStream, WORD wSize, eSERIALIZE eType )
{
	ASSERT( wSize == MAX_QUESTSTREAM_SIZE );

	if( eType == SERIALIZE_STORE )
		memcpy( m_pTotalInfo[bySlotIndex].m_pQuestStream, pQuestStream, wSize );
	else if( eType == SERIALIZE_LOAD )
		memcpy( pQuestStream, m_pTotalInfo[bySlotIndex].m_pQuestStream, wSize );
}

VOID DBUser::SerializeMissionStream( BYTE bySlotIndex, BYTE * pMissionStream, WORD wSize, eSERIALIZE eType )
{
	ASSERT( wSize == MAX_MISSIONSTREAM_SIZE );
	if( eType == SERIALIZE_STORE )
		memcpy( m_pTotalInfo[bySlotIndex].m_pMissionStream, pMissionStream, wSize );
	else if( eType == SERIALIZE_LOAD )
		memcpy( pMissionStream, m_pTotalInfo[bySlotIndex].m_pMissionStream, wSize );
}

VOID DBUser::SerializeCharInfo( BYTE bySlotIndex, BASE_PLAYERINFO & rCharInfo, eSERIALIZE eType )
{
	if( eType == SERIALIZE_STORE )
	{
		memcpy( (VOID *)&m_pTotalInfo[bySlotIndex].m_pCharInfo, &rCharInfo, sizeof(BASE_PLAYERINFO) );

		if( m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwHP == 0 )
			m_pTotalInfo[bySlotIndex].m_pCharInfo.m_dwHP = 1;
	}
	else if( eType == SERIALIZE_LOAD )
	{
		memcpy( (VOID *)&rCharInfo, &m_pTotalInfo[bySlotIndex].m_pCharInfo, sizeof(BASE_PLAYERINFO) );
	}
}

VOID DBUser::SerializeEquipItemStream( BYTE bySlotIndex, BYTE * pEquipStream, WORD wSize, eSERIALIZE eType )
{
	ASSERT( wSize == MAX_EQUIPITEMSTREAM_SIZE );
	ASSERT( bySlotIndex < MAX_CHARACTER_LIST_NUM );

	if( eType == SERIALIZE_STORE )
		memcpy( m_pTotalInfo[bySlotIndex].m_pEquipStream, pEquipStream, wSize );
	else if( eType == SERIALIZE_LOAD )
		memcpy( pEquipStream, m_pTotalInfo[bySlotIndex].m_pEquipStream, wSize );
}

VOID DBUser::SerializeTempInventoryItemStream( BYTE bySlotIndex, BYTE * pTempInventoryStream, WORD wSize, eSERIALIZE eType )
{
	ASSERT( wSize == MAX_TEMPINVENTORYITEMSTREAM_SIZE );
	if( eType == SERIALIZE_STORE )
		memcpy( m_pTotalInfo[bySlotIndex].m_pTempInventoryStream, pTempInventoryStream, wSize );
	else if( eType == SERIALIZE_LOAD )
		memcpy( pTempInventoryStream, m_pTotalInfo[bySlotIndex].m_pTempInventoryStream, wSize );
}
VOID DBUser::SerializeInventoryItemStream( BYTE bySlotIndex, BYTE * pInventoryStream, WORD wSize, eSERIALIZE eType )
{
	ASSERT( wSize == MAX_INVENTORYITEMSTREAM_SIZE );
	if( eType == SERIALIZE_STORE )
		memcpy( m_pTotalInfo[bySlotIndex].m_pInventoryStream, pInventoryStream, wSize );
	else if( eType == SERIALIZE_LOAD )
		memcpy( pInventoryStream, m_pTotalInfo[bySlotIndex].m_pInventoryStream, wSize );
}

VOID DBUser::SerializeSkillStream( BYTE bySlotIndex, BYTE * pSkillStream, WORD wSize, eSERIALIZE eType )

⌨️ 快捷键说明

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