📄 dbuser.cpp
字号:
#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 + -