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

📄 dbuser.h

📁 奇迹世界data 服务器代码,研究游戏的朋友有帮助
💻 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 + -