MirGame.h
上传用户:marco7834
上传日期:2010-02-24
资源大小:82k
文件大小:6k
源码类别:

游戏引擎

开发平台:

Visual C++

  1. // MirGame.h: interface for the CMirGame class.
  2. //
  3. //////////////////////////////////////////////////////////////////////
  4. #if !defined(AFX_MIRGAME_H__C95390B9_4D2A_4493_917D_9AE1FF626D68__INCLUDED_)
  5. #define AFX_MIRGAME_H__C95390B9_4D2A_4493_917D_9AE1FF626D68__INCLUDED_
  6. #if _MSC_VER > 1000
  7. #pragma once
  8. #endif // _MSC_VER > 1000
  9. #include <windows.h>
  10. #include <stdio.h>
  11. #include <stdlib.h>
  12. #include "mirmsg.h"
  13. #include "mirsocket.h"
  14. #include "mirminimap.h"
  15. #include "mirgamemap.h"
  16. typedef struct
  17. {
  18. char Name[64];
  19. int prof;
  20. int sex;
  21. int level;
  22. int hair;
  23. }CHARBASEINFO;
  24. typedef struct
  25. {
  26. CHARBASEINFO Chars[2];
  27. int CharCount;
  28. int ActiveChar;
  29. }SELCHARINFO;
  30. typedef struct
  31. {
  32. int min;
  33. int max;
  34. }MAXMININFO;
  35. typedef struct
  36. {
  37. int low;
  38. int hi;
  39. }LOWHIINFO;
  40. typedef struct
  41. {
  42. DWORD dwServerId;
  43. char Name[64];
  44. int prof;
  45. int sex;
  46. int level;
  47. int hair;
  48. int pos_x;
  49. int pos_y;
  50. LOWHIINFO AC;
  51. LOWHIINFO MAC;
  52. LOWHIINFO DC;
  53. LOWHIINFO MC;
  54. LOWHIINFO SC;
  55. MAXMININFO HandWeight;
  56. MAXMININFO BodyWeight;
  57. MAXMININFO BagWeight;
  58. MAXMININFO Hp;
  59. MAXMININFO Mp;
  60. MAXMININFO Exp;
  61. int Zhunque;
  62. int Minjie;
  63. int MagicAgainst;
  64. int PoisonAgainst;
  65. int PoisonRecover;
  66. int HpRecover;
  67. int MpRecover;
  68. }CHARACTERINFO;
  69. enum __SEX
  70. {
  71. MAN = 0,
  72. WOMAN = 1,
  73. };
  74. enum __PROF
  75. {
  76. FIGHTER = 0,
  77. MAGICMAN = 1,
  78. TAOSHI = 2,
  79. };
  80. enum __GAMESTATE
  81. {
  82. MGS_NOCONNECTION,
  83. MGS_GATECONNECTED,
  84. MGS_WAITINGCHECKINFO,
  85. MGS_MAKECLIENTINFO,
  86. MGS_WAITINGCHECKPASS,
  87. MGS_CLIENTCHECKPASSED,
  88. MGS_MODIFYPASSWORDWAIT,
  89. MGS_REGNEWACCOUNTWAIT,
  90. MGS_LOGINWAITING,
  91. MGS_SELECTSERVER,
  92. MGS_WAITFORSELCHARADDRESS,
  93. MGS_GOTSELCHARADDRESS,
  94. MGS_SELCHARCONNECTED,
  95. MGS_WAITFORSELCHARVERIFY,
  96. MGS_WAITFORSELCHAR,
  97. MGS_WAITFORGAMESERVERADDRESS,
  98. MGS_GAMESERVERCONNECTED,
  99. MGS_WAITFORGAMESERVERVERIFY,
  100. MGS_WAITFORENTERGAME,
  101. MGS_ENTEREDGAME,
  102. };
  103. enum __MSGCMD
  104. {
  105. };
  106. enum __ERRINFO
  107. {
  108. ERR_LOGIN_OK,
  109. ERR_LOGIN_WRONGPASSWORD,
  110. ERR_LOGIN_NOTREGISTERED,
  111. ERR_LOGIN_WRONGPASSWORDTHREETIMES,
  112. ERR_MODIFYPASS_OK,
  113. ERR_MODIFYPASS_WRONGPASSWORD,
  114. ERR_REGNEWACCOUNT_OK,
  115. ERR_REGNEWACCOUNT_NAMEUSED,
  116. ERR_REGNEWACCOUNT_WRONGCHAR,
  117. };
  118. enum __ATTACKMODE
  119. {
  120. ATM_ALL, // 全体攻击模式
  121. ATM_PIECE, // 和平
  122. ATM_GROUP, // 编组
  123. ATM_GUILD, // 行会
  124. ATM_ENEMY, // 敌我
  125. };
  126. enum __CHARSTATE
  127. {
  128. CST_NORMAL, // 正常状态
  129. CST_GREENPOISON = 1, // 绿毒
  130. CST_REDPOISON = 2, // 红毒
  131. CST_PAUSED = 4, // 麻痹
  132. CST_ACTING = 8, // 动作中(等待#+GOOD或者#+FAIL)
  133. };
  134. enum __ACTION
  135. {
  136. ACT_STAND, // 站立,无动作
  137. ACT_WALK, // 走路
  138. ACT_RUN, // 跑步
  139. ACT_ATTACK, // 攻击
  140. ACT_SKILL, // 魔法技能攻击
  141. };
  142. enum __DIRECTION
  143. {
  144. DIR_UP = 0,
  145. DIR_UR = 1,
  146. DIR_RT = 2,
  147. DIR_DR = 3,
  148. DIR_DN = 4,
  149. DIR_DL = 5,
  150. DIR_LT = 6,
  151. DIR_UL = 7,
  152. };
  153. #define MSGQUEUELEN 1024
  154. typedef char TMSGLINE[MSGLENGTH];
  155. class CMsgQueue2
  156. {
  157. public:
  158. CMsgQueue2()
  159. {
  160. m_iGet = 0;
  161. m_iPut = 0;
  162. Clear();
  163. };
  164. virtual ~CMsgQueue2()
  165. {
  166. Clear();
  167. };
  168. int NextPos( int now )
  169. {
  170. now++;
  171. if( now >= MSGQUEUELEN )
  172. now = 0;
  173. return now;
  174. }
  175. int PutMsg( char * pMsg )
  176. {
  177. int iNext = NextPos( m_iPut );
  178. if( pMsg == NULL )
  179. return 0;
  180. if( iNext == m_iGet )
  181. {
  182. return 0;
  183. }
  184. strcpy( m_Msgs[m_iPut], pMsg );
  185. m_iPut = iNext;
  186. return 1;
  187. };
  188. int GetMsg( char * pMsg )
  189. {
  190. if( m_iGet == m_iPut )
  191. return 0;
  192. strcpy( pMsg, m_Msgs[m_iGet] );
  193. // printf( "m_iPut = %d, m_iGet = %dn", m_iPut, m_iGet );
  194. m_iGet = NextPos( m_iGet );
  195. return 1;
  196. };
  197. int Clear()
  198. {
  199. memset( (void*)m_Msgs, 0, sizeof( TMSGLINE ) * MSGQUEUELEN );
  200. return 1;
  201. };
  202. private:
  203. TMSGLINE m_Msgs[MSGQUEUELEN];
  204. int m_iGet;
  205. int m_iPut;
  206. };
  207. typedef char TSTRING[256];
  208. enum _action
  209. {
  210. ACTION_STAND,
  211. ACTION_WALK,
  212. ACTION_ATTACK,
  213. ACTION_RUN,
  214. ACTION_TRUN,
  215. ACTION_RUNTHROUGH,
  216. };
  217. typedef struct
  218. {
  219. int x;
  220. int y;
  221. int dir;
  222. int action;
  223. }ACTION_LAST;
  224. DWORD MessageProc( PVOID * p );
  225. class CMirGame  
  226. {
  227. public:
  228. friend DWORD MessageProc( PVOID * p );
  229. void Walk( int dir );
  230. BOOL SelectChar( char * charname );
  231. BOOL GetSelCharInfo( SELCHARINFO * pInfo );
  232. BOOL EnterServer( char * ServerName );
  233. BOOL Login( char * username, char * password );
  234. BOOL OpenGateServer( char * ip );
  235. int  GetString( char * string );
  236. public:
  237. void LogToList( HWND hList, char * line );
  238. void LogChat( char * line,... );
  239. void LogSystem( char * line,... );
  240. public:
  241. BOOL EnterGame( int CharIndex );
  242. BOOL CloseAll();
  243. BOOL EnterSelCharServer();
  244. BOOL CloseGateServer();
  245. BOOL InitLogSystem( HWND hSysLog, HWND hChatLog, int MaxLine);
  246. BOOL GetMsgInfo( SOCKET s );
  247. BOOL GetMsg( MMSG * pMsg );
  248. public:
  249. BOOL RunThrough( int dir );
  250. CMirMiniMap * GetMiniMap();
  251. CMirGameMap * GetGameMap();
  252. void SetCharacterPos( int x, int y );
  253. void Turn( int dir );
  254. void Run(int dir );
  255. void HandleCommand( char * command );
  256. BOOL CloseSelCharServer();
  257. BOOL Logout();
  258. BOOL Say( char * word, ...);
  259. BOOL StartGame();
  260. CMirGame();
  261. virtual ~CMirGame();
  262. private:
  263. CMsgQueue2 m_MsgQueue;
  264. DWORD m_dwGameState;
  265. SOCKET m_sGate;
  266. SOCKET m_sSelChar;
  267. SOCKET m_sGame;
  268. SELCHARINFO m_SelCharInfo;
  269. BOOL m_bInGame;
  270. char m_Account[32];
  271. char m_SelCharIp[20];
  272. char m_GameServerIp[20];
  273. int m_SelCharPort;
  274. int m_GameServerPort;
  275. char m_SID[32];
  276. private:
  277. void ActionFail();
  278. void ActionOk();
  279. BOOL CanDoAction();
  280. private:
  281. int m_LeftHours;
  282. HWND m_hSysLog;
  283. HWND m_hChatLog;
  284. TSTRING m_StringList[20];
  285. int m_MaxLogLine;
  286. char * m_tmpBuffer;
  287. char * m_tmpBuffer2;
  288. char * m_MsgLeftBuf;
  289. ACTION_LAST m_LastAction;
  290. CHARACTERINFO m_CharSelf;
  291. CMirMsg m_MirMsg;
  292. CMirSocket m_MirSocket;
  293. CMirMiniMap m_MiniMap;
  294. CMirGameMap m_GameMap;
  295. };
  296. #endif // !defined(AFX_MIRGAME_H__C95390B9_4D2A_4493_917D_9AE1FF626D68__INCLUDED_)