📄 dbuser.h
字号:
#pragma once
#include <Timer.h>
#include "DBUserManager.h"
struct BASE_PLAYERINFO;
struct SERVER_CHARACTER_PART;
class ServerSession;
enum eDBPROXY_CACHE_STATE
{
CACHE_NONE,
CACHE_EXPIRING,
};
enum eMSG_DG_CHARINFO
{
eMSG_DG_CHARINFO_CHAR_ITEM_CMD = (1<<0),
eMSG_DG_CHARINFO_SKILL_CMD = (1<<1),
eMSG_DG_CHARINFO_QUICK_CMD = (1<<2),
eMSG_DG_CHARINFO_STYLE_CMD = (1<<3),
eMSG_DG_CHARINFO_QUEST_CMD = (1<<4),
eMSG_DG_CHARINFO_WAREHOUSE_CMD = (1<<5),
eMSG_DG_CHARINFO_ALL = (1<<6)-1,
};
enum eDB_SAVE_STATE
{
eDB_SAVE_NONE,
eDB_SAVE_BEFORE,
eDB_SAVE_AFTER,
};
enum eDB_LOAD_STATE
{
eDB_LOAD_NONE,
eDB_LOAD_BEFORE,
eDB_LOAD_AFTER,
};
class DBUser
{
enum {
_DBP_UPDATE_CYCLE_DELAY = 1000*60*5, //< 烙矫 : 5盒 掉饭捞
};
public:
enum eDBUSER_STATE {
POOL_STATE, //< 钱俊 粮犁窍绰 惑怕
INIT_STATE, //< 单捞磐啊 蜡瓤茄 惑怕, 老馆利牢 惑怕
};
DBUser(void);
~DBUser(void);
VOID ReInit();
VOID Init();
VOID Release();
VOID Update();
BOOL UpdateForTimeOut();
VOID UpdateDataToDB();
//VOID CopyCharInfo( BYTE CharSlotIndex, sCharacterList * pCharInfoIn );
VOID CopyQUERY_CHARACTERTo( BYTE CharSlotIndex, SelectCharQuery::sQUERY_RESULT * pCharInfoIn );
inline DWORD GetUserKey() { return m_dwUserKey; }
inline VOID SetUserKey( DWORD key ) { m_dwUserKey = key; }
BOOL IsEmptyStyle( BYTE bySlotIndex, POSTYPE pos );
BOOL IsEmptyQuick( BYTE bySlotIndex, POSTYPE pos );
BOOL IsEmptySkill( BYTE bySlotIndex, POSTYPE pos );
BOOL IsEmptyWarehouseItem( POSTYPE pos );
BOOL IsEmptyEquipItem( BYTE bySlotIndex, POSTYPE pos );
BOOL IsEmptyInventoryItem( BYTE bySlotIndex, POSTYPE pos );
BOOL IsEmptyTempInventoryItem( BYTE bySlotIndex, POSTYPE pos );
VOID SetQuick( BYTE bySlotIndex, POSTYPE pos, QUICKSTREAM * IN pStream );
VOID GetQuick( BYTE bySlotIndex, POSTYPE pos, QUICKSTREAM * OUT pStream );
VOID SetStyle( BYTE bySlotIndex, POSTYPE pos, STYLESTREAM * IN pStream );
VOID GetStyle( BYTE bySlotIndex, POSTYPE pos, STYLESTREAM * OUT pStream );
VOID SetSkill( BYTE bySlotIndex, POSTYPE pos, SKILLSTREAM * IN pStream );
VOID GetSkill( BYTE bySlotIndex, POSTYPE pos, SKILLSTREAM * OUT pStream );
VOID SetWarehouseItem( POSTYPE pos, ITEMSTREAMEX * IN pStream );
VOID GetWarehouseItem( POSTYPE pos, ITEMSTREAMEX * OUT pStream );
VOID SetEquipItem( BYTE bySlotIndex, POSTYPE pos, ITEMSTREAMEX * IN pStream );
VOID GetEquipItem( BYTE bySlotIndex, POSTYPE pos, ITEMSTREAMEX * OUT pStream );
VOID SetInventoryItem( BYTE bySlotIndex, POSTYPE pos, ITEMSTREAMEX * IN pStream );
VOID GetInventoryItem( BYTE bySlotIndex, POSTYPE pos, ITEMSTREAMEX * OUT pStream );
VOID SetTempInventoryItem( BYTE bySlotIndex, POSTYPE pos, ITEMSTREAMEX * IN pStream );
VOID GetTempInventoryItem( BYTE bySlotIndex, POSTYPE pos, ITEMSTREAMEX * OUT pStream );
//VOID SerializeEquipItem( BYTE CharSlotIndex, EQUIP_ITEM_INFO & ItemInfo, eSERIALIZE eType );
VOID ClearEquipItemStream( BYTE bySlotIndex );
VOID ClearInventoryItemStream( BYTE bySlotIndex );
VOID ClearTempInventoryItemStream( BYTE bySlotIndex );
VOID ClearSkillStream( BYTE bySlotIndex );
VOID ClearQuickStream( BYTE bySlotIndex );
VOID ClearStyleStream( BYTE bySlotIndex );
VOID ClearQuestStream( BYTE bySlotIndex ){ memset( m_pTotalInfo[bySlotIndex].m_pQuestStream, 0, MAX_QUESTSTREAM_SIZE );}
VOID ClearMissionStream( BYTE bySlotIndex ){ memset( m_pTotalInfo[bySlotIndex].m_pMissionStream, 0, MAX_MISSIONSTREAM_SIZE );}
VOID ClearWarehouseStream();
VOID SerializeCharInfo( BYTE bySlotIndex, BASE_PLAYERINFO & rCharInfo, eSERIALIZE eType = SERIALIZE_LOAD );
VOID SerializeQuestStream( BYTE bySlotIndex, BYTE * pMissionStream, WORD wSize, eSERIALIZE eType );
VOID SerializeMissionStream( BYTE bySlotIndex, BYTE * pMissionStream, WORD wSize, eSERIALIZE eType );
VOID SerializeEquipItemStream( BYTE bySlotIndex, BYTE * pEquipStream, WORD wSize, eSERIALIZE eType );
// VOID SerializeEquipItemStream( BYTE * pEquipStream, WORD wSize, eSERIALIZE eType = SERIALIZE_LOAD );
VOID SerializeInventoryItemStream( BYTE bySlotIndex, BYTE * pInventoryStream, WORD wSize, eSERIALIZE eType = SERIALIZE_LOAD );
VOID SerializeTempInventoryItemStream( BYTE bySlotIndex, BYTE * pTempInventoryStream, WORD wSize, eSERIALIZE eType = SERIALIZE_LOAD );
VOID SerializeSkillStream( BYTE bySlotIndex, BYTE * pSkillStream, WORD wSize, eSERIALIZE eType = SERIALIZE_LOAD );
VOID SerializeQuickStream( BYTE bySlotIndex, BYTE * pQuickStream, WORD wSize, eSERIALIZE eType = SERIALIZE_LOAD );
VOID SerializeStyleStream( BYTE bySlotIndex, BYTE * pStream, WORD wSize, eSERIALIZE eType = SERIALIZE_LOAD );
// [taiyo]:捣窍绊 酒捞袍窍绊 胶飘覆阑 钦摹搁 救瞪鳖?
VOID SerializeWarehouseStream( BYTE * pWarehouseStream, WORD wSize, eSERIALIZE eType = SERIALIZE_LOAD );
VOID SetWarehouseMoney( MONEY money ) { m_WarehouseMoney = money; }
MONEY GetWarehouseMoney(){ return m_WarehouseMoney; }
inline BYTE GetSelectedCharSlotIndex() { return m_bySelectedCharSlotIndex; }
inline VOID SetSelectedCharSlotIndex( BYTE index ) { ASSERT(index<MAX_CHARACTER_LIST_NUM); m_bySelectedCharSlotIndex = index; }
// 急琶等 某腐磐狼 GUID
inline CHARGUID GetSelectedCharGuid() { return m_pTotalInfo[m_bySelectedCharSlotIndex].m_pCharInfo.m_CharGuid; }
inline BASE_PLAYERINFO & GetSelectedCharInfo() { return m_pTotalInfo[m_bySelectedCharSlotIndex].m_pCharInfo; }
//BOOL GetEmptySlot( BYTE & slotIndex );
inline VOID SetOccupiedSlot( BYTE bySlotIndex, BOOL val ){ m_bOccupiedSlot[bySlotIndex] = val; }
inline BOOL IsValidSlot( BYTE bySlotIndex ) { if( bySlotIndex >= MAX_CHARACTER_LIST_NUM) return FALSE; return m_bOccupiedSlot[bySlotIndex]; }
// inline const char * GetUserID() { return m_pszUserID; }
// inline VOID SetUserID( const char * ps ) { strncpy( m_pszUserID, ps, ID_MAX_LEN ); m_pszUserID[ID_MAX_LEN-1]=0; }
inline USERGUID GetUserGUID() { return m_pTotalInfo[m_bySelectedCharSlotIndex].m_pCharInfo.m_UserGuid; }
//inline VOID SetUserGUID( DWORD guid ) { m_dwUserGUID = guid; }
//*林狼IsValidSlot()龋免饶 荤侩窍扼!
//inline DWORD GetCharGUID( BYTE bySlotIdx ) { ASSERT(IsValidSlot(bySlotIdx)); return m_pTotalInfo[m_bySelectedCharSlotIndex].m_pCharInfo.m_dwCharGuid; }
//inline VOID SetCharGUID( BYTE bySlotIdx, DWORD guid ) { ASSERT(IsValidSlot(bySlotIdx)); m_pTotalInfo[m_bySelectedCharSlotIndex].m_pCharInfo.m_dwCharGuid = guid; }
VOID StartCacheExpiredTimer();
VOID StopCacheExpiredTimer();
inline eDBPROXY_CACHE_STATE GetCacheState() { return m_eCacheState; }
// 楷搬等 Agent狼 ServerSessionIndex
inline DWORD GetServerSessionIndex() { return m_dwServerSessionIndex; }
inline VOID SetServerSessionIndex( DWORD dwIndex ) { m_dwServerSessionIndex = dwIndex; }
inline VOID SetState( eDBUSER_STATE state ) { m_eDBUserState = state; }
inline eDBUSER_STATE GetState() { return m_eDBUserState; }
//inline VOID SetNumberOfCreatedChars( BYTE byCharNum ){ m_byCharNum = byCharNum; }
//inline BYTE GetNumberOfCreatedChars() { return m_byCharNum; }
VOID SendAllDataToGameServer( ServerSession * pServerSession );
VOID MakeUpdateCharacterQuery( UpdateCharacterQuery * pQuery );
VOID MakeUpdateWarehouseQuery( UpdateWarehouseQuery * pQuery );
VOID SetDBSaveState( eDB_SAVE_STATE state ) {m_DBSaveState = state; }
eDB_SAVE_STATE GetDBSaveState() { return m_DBSaveState; }
VOID SetDBLoadState( eDB_LOAD_STATE state ) {m_DBLoadState = state; }
eDB_LOAD_STATE GetDBLoadState() { return m_DBLoadState; }
BOOL IsNeedWarehouseToSave() { return m_bNeedToSave; }
VOID SetNeedWarehouseToSave(BOOL v) { m_bNeedToSave = v; }
protected:
inline VOID SetCacheState( eDBPROXY_CACHE_STATE eState ) { m_eCacheState = eState; }
private:
// char m_pszUserID[ID_MAX_LEN];
// BYTE m_byCharNum;
BOOL m_bOccupiedSlot[MAX_CHARACTER_LIST_NUM];
DWORD m_dwUserKey;
DWORD m_dwServerSessionIndex;
BYTE m_bySelectedCharSlotIndex;
/// SKILL 包访 某浆
util::Timer m_DBUpdateTimer;
util::Timer m_CacheExpiredTimer;
eDBUSER_STATE m_eDBUserState;
eDBPROXY_CACHE_STATE m_eCacheState;
// 芒绊
MONEY m_WarehouseMoney;
BYTE m_pWarehouseStream[MAX_WAREHOUSESTREAM_SIZE];
BOOL m_bNeedToSave;
struct DBUSER_TOTAL_INFO
{
BASE_PLAYERINFO m_pCharInfo;
BYTE m_pInventoryStream[MAX_INVENTORYITEMSTREAM_SIZE];
BYTE m_pTempInventoryStream[MAX_TEMPINVENTORYITEMSTREAM_SIZE];
BYTE m_pEquipStream[MAX_EQUIPITEMSTREAM_SIZE];
BYTE m_SkillStream[MAX_SKILLSTREAM_SIZE];
BYTE m_QuickStream[MAX_QUICKSTREAM_SIZE];
BYTE m_StyleStream[MAX_STYLESTREAM_SIZE];
BYTE m_pQuestStream[MAX_QUESTSTREAM_SIZE];
BYTE m_pMissionStream[MAX_MISSIONSTREAM_SIZE];
} m_pTotalInfo[MAX_CHARACTER_LIST_NUM];
enum { MAX_CACHE_TIMEOUT_DELAY_TIME = 1*1000*60, }; //< 1盒
public:
// 叼滚弊侩 糕滚甸!!!!!!!!!!!!!!!
WORD m_packet;
eSERVER_TYPE m_DisconnectedFromServer;
BYTE m_OrderNumber;
eDB_SAVE_STATE m_DBSaveState;
eDB_LOAD_STATE m_DBLoadState;
};
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -