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