www.pudn.com > MirGui.rar > MirGame.h


// MirGame.h: interface for the CMirGame class. 
// 
////////////////////////////////////////////////////////////////////// 
 
#if !defined(AFX_MIRGAME_H__C95390B9_4D2A_4493_917D_9AE1FF626D68__INCLUDED_) 
#define AFX_MIRGAME_H__C95390B9_4D2A_4493_917D_9AE1FF626D68__INCLUDED_ 
 
#if _MSC_VER > 1000 
#pragma once 
#endif // _MSC_VER > 1000 
#include  
#include  
#include  
#include "mirmsg.h" 
#include "mirsocket.h" 
#include "mirminimap.h" 
#include "mirgamemap.h" 
typedef struct 
{ 
	char	Name[64]; 
	int		prof; 
	int		sex; 
	int		level; 
	int		hair; 
}CHARBASEINFO; 
typedef struct 
{ 
	CHARBASEINFO	Chars[2]; 
	int				CharCount; 
	int				ActiveChar; 
}SELCHARINFO; 
 
typedef struct 
{ 
	int min; 
	int max; 
}MAXMININFO; 
typedef struct 
{ 
	int low; 
	int hi; 
}LOWHIINFO; 
 
typedef struct 
{ 
	DWORD	dwServerId; 
	char	Name[64]; 
	int		prof; 
	int		sex; 
	int		level; 
	int		hair; 
	int		pos_x; 
	int		pos_y; 
	LOWHIINFO	AC; 
	LOWHIINFO	MAC; 
	LOWHIINFO	DC; 
	LOWHIINFO	MC; 
	LOWHIINFO	SC; 
	MAXMININFO	HandWeight; 
	MAXMININFO	BodyWeight; 
	MAXMININFO	BagWeight; 
	MAXMININFO	Hp; 
	MAXMININFO	Mp; 
	MAXMININFO	Exp; 
	int		Zhunque; 
	int		Minjie; 
	int		MagicAgainst; 
	int		PoisonAgainst; 
	int		PoisonRecover; 
	int		HpRecover; 
	int		MpRecover; 
}CHARACTERINFO; 
enum	__SEX 
{ 
	MAN = 0, 
	WOMAN = 1, 
}; 
 
enum	__PROF 
{ 
	FIGHTER = 0, 
	MAGICMAN = 1, 
	TAOSHI = 2, 
}; 
 
enum	__GAMESTATE 
{ 
	MGS_NOCONNECTION, 
	MGS_GATECONNECTED, 
	MGS_WAITINGCHECKINFO, 
	MGS_MAKECLIENTINFO, 
	MGS_WAITINGCHECKPASS, 
	MGS_CLIENTCHECKPASSED, 
	MGS_MODIFYPASSWORDWAIT, 
	MGS_REGNEWACCOUNTWAIT, 
	MGS_LOGINWAITING, 
	MGS_SELECTSERVER, 
	MGS_WAITFORSELCHARADDRESS, 
	MGS_GOTSELCHARADDRESS, 
	MGS_SELCHARCONNECTED, 
	MGS_WAITFORSELCHARVERIFY, 
	MGS_WAITFORSELCHAR, 
	MGS_WAITFORGAMESERVERADDRESS, 
	MGS_GAMESERVERCONNECTED, 
	MGS_WAITFORGAMESERVERVERIFY, 
	MGS_WAITFORENTERGAME, 
	MGS_ENTEREDGAME, 
}; 
 
enum	__MSGCMD 
{ 
	 
}; 
 
 
enum	__ERRINFO 
{ 
	ERR_LOGIN_OK, 
	ERR_LOGIN_WRONGPASSWORD, 
	ERR_LOGIN_NOTREGISTERED, 
	ERR_LOGIN_WRONGPASSWORDTHREETIMES, 
	ERR_MODIFYPASS_OK, 
	ERR_MODIFYPASS_WRONGPASSWORD, 
	ERR_REGNEWACCOUNT_OK, 
	ERR_REGNEWACCOUNT_NAMEUSED, 
	ERR_REGNEWACCOUNT_WRONGCHAR, 
 
}; 
enum	__ATTACKMODE 
{ 
	ATM_ALL,	//	全体攻击模式	 
	ATM_PIECE,	//	和平 
	ATM_GROUP,	//	编组 
	ATM_GUILD,	//	行会 
	ATM_ENEMY,	//	敌我 
}; 
 
enum	__CHARSTATE 
{ 
	CST_NORMAL,				//	正常状态 
	CST_GREENPOISON	= 1,	//	绿毒 
	CST_REDPOISON = 2,		//	红毒 
	CST_PAUSED = 4,			//	麻痹 
	CST_ACTING = 8,			//	动作中(等待#+GOOD或者#+FAIL) 
}; 
 
enum	__ACTION 
{ 
	ACT_STAND,			//	站立,无动作 
	ACT_WALK,			//	走路 
	ACT_RUN,			//	跑步 
	ACT_ATTACK,			//	攻击 
	ACT_SKILL,			//	魔法技能攻击 
}; 
 
enum	__DIRECTION 
{ 
	DIR_UP = 0, 
	DIR_UR = 1, 
	DIR_RT = 2, 
	DIR_DR = 3, 
	DIR_DN = 4, 
	DIR_DL = 5, 
	DIR_LT = 6, 
	DIR_UL = 7, 
}; 
 
#define		MSGQUEUELEN		1024 
typedef char	TMSGLINE[MSGLENGTH]; 
class CMsgQueue2 
{ 
public: 
	CMsgQueue2() 
	{ 
		m_iGet = 0; 
		m_iPut = 0; 
		Clear(); 
	}; 
	virtual ~CMsgQueue2() 
	{ 
		Clear(); 
	}; 
	int NextPos( int now ) 
	{ 
		now++; 
		if( now >= MSGQUEUELEN ) 
			now = 0; 
		return now; 
	} 
	int	PutMsg( char * pMsg ) 
	{ 
		int iNext = NextPos( m_iPut ); 
 
		if( pMsg == NULL ) 
			return 0; 
		if( iNext == m_iGet ) 
		{ 
			return 0; 
		} 
		strcpy( m_Msgs[m_iPut], pMsg ); 
		m_iPut = iNext; 
		return 1; 
	}; 
 
	int GetMsg( char * pMsg ) 
	{ 
		if( m_iGet == m_iPut ) 
			return 0; 
		strcpy( pMsg, m_Msgs[m_iGet] ); 
//		printf( "m_iPut = %d, m_iGet = %d\n", m_iPut, m_iGet ); 
		m_iGet = NextPos( m_iGet ); 
		return 1; 
	}; 
	int	Clear() 
	{ 
		memset( (void*)m_Msgs, 0, sizeof( TMSGLINE ) * MSGQUEUELEN ); 
		return 1; 
	}; 
private: 
	TMSGLINE	m_Msgs[MSGQUEUELEN]; 
	int			m_iGet; 
	int			m_iPut; 
}; 
 
typedef char	TSTRING[256]; 
 
enum _action 
{ 
	ACTION_STAND, 
	ACTION_WALK, 
	ACTION_ATTACK, 
	ACTION_RUN, 
	ACTION_TRUN, 
	ACTION_RUNTHROUGH, 
}; 
typedef struct 
{ 
	int x; 
	int y; 
	int dir; 
	int action; 
}ACTION_LAST; 
 
DWORD	MessageProc( PVOID * p ); 
 
class CMirGame   
{ 
public: 
	friend	DWORD	MessageProc( PVOID * p ); 
 
	void Walk( int dir ); 
	BOOL SelectChar( char * charname ); 
	BOOL GetSelCharInfo( SELCHARINFO * pInfo ); 
	BOOL EnterServer( char * ServerName ); 
	BOOL Login( char * username, char * password ); 
	BOOL OpenGateServer( char * ip ); 
	int	 GetString( char * string ); 
public: 
	void	LogToList( HWND hList, char * line ); 
	void	LogChat( char * line,... ); 
	void	LogSystem( char * line,... ); 
public: 
	BOOL EnterGame( int CharIndex ); 
	BOOL CloseAll(); 
	BOOL EnterSelCharServer(); 
	BOOL CloseGateServer(); 
	BOOL InitLogSystem( HWND hSysLog, HWND hChatLog, int MaxLine); 
	BOOL GetMsgInfo( SOCKET	s ); 
	BOOL GetMsg( MMSG * pMsg ); 
 
public: 
	BOOL RunThrough( int dir ); 
	CMirMiniMap * GetMiniMap(); 
	CMirGameMap * GetGameMap(); 
	void SetCharacterPos( int x, int y ); 
	void Turn( int dir ); 
	void Run(int dir ); 
	void HandleCommand( char * command ); 
	BOOL CloseSelCharServer(); 
	BOOL Logout(); 
	BOOL Say( char * word, ...); 
	BOOL StartGame(); 
	CMirGame(); 
	virtual ~CMirGame(); 
private: 
	CMsgQueue2	m_MsgQueue; 
	DWORD	m_dwGameState; 
	SOCKET	m_sGate; 
	SOCKET	m_sSelChar; 
	SOCKET	m_sGame; 
	SELCHARINFO	m_SelCharInfo; 
	BOOL	m_bInGame; 
	char	m_Account[32]; 
	char	m_SelCharIp[20]; 
	char	m_GameServerIp[20]; 
	int		m_SelCharPort; 
	int		m_GameServerPort; 
	char	m_SID[32]; 
private: 
	void ActionFail(); 
	void ActionOk(); 
	BOOL CanDoAction(); 
 
private: 
	 
	int			m_LeftHours; 
	HWND		m_hSysLog; 
	HWND		m_hChatLog; 
	TSTRING		m_StringList[20]; 
	int			m_MaxLogLine; 
	char	*	m_tmpBuffer; 
	char	*	m_tmpBuffer2; 
	char	*	m_MsgLeftBuf; 
	ACTION_LAST	m_LastAction; 
	CHARACTERINFO	m_CharSelf; 
	CMirMsg			m_MirMsg; 
	CMirSocket		m_MirSocket; 
	CMirMiniMap		m_MiniMap; 
	CMirGameMap		m_GameMap; 
}; 
 
#endif // !defined(AFX_MIRGAME_H__C95390B9_4D2A_4493_917D_9AE1FF626D68__INCLUDED_)