GameSvr.h
上传用户:tt_chan
上传日期:2009-12-03
资源大小:4523k
文件大小:6k
源码类别:

模拟服务器

开发平台:

Visual C++

  1. #pragma once
  2. #include "../def/staticArray.h"
  3. #include "../def/_orzex/syncobj.h"
  4. #define _RUNGATE_STATUS_DISCONNECTED 0
  5. #define _RUNGATE_STATUS_GOOD 1
  6. #define _RUNGATE_STATUS_HEAVYTRAFFIC 2
  7. #define LOGPARAM_STR 1
  8. #define LOGPARAM_INT 2
  9. #define _NUM_OF_MAXUSER 5000
  10. #define HAM_ALL 0
  11. #define HAM_PEACE 1
  12. #define HAM_GROUP 2
  13. #define HAM_GUILD 3
  14. #define HAM_PKATTACK 4
  15. #define BAGGOLD 5000000
  16. #define USERMODE_PLAYGAME 1
  17. #define USERMODE_LOGIN 2
  18. #define USERMODE_LOGOFF 3
  19. #define USERMODE_NOTICE 4
  20. void MakeItemToDB(int nReadyUserInfo, char *pszUserId, char *pszCharName, _LPTMAKEITEMRCD lpMakeItemRcd);
  21. typedef struct tagOVERLAPPEDEX
  22. {
  23. OVERLAPPED Overlapped;
  24. INT nOvFlag;
  25. WSABUF DataBuf;
  26. CHAR Buffer[DATA_BUFSIZE * 2];
  27. int bufLen;
  28. } OVERLAPPEDEX, *LPOVERLAPPEDEX;
  29. typedef struct tag_TSENDBUFF
  30. {
  31. int nLen;
  32. char szData[DATA_BUFSIZE];
  33. }_TSENDBUFF, *_LPTSENDBUFF;
  34. class CGateInfo
  35. {
  36. public:
  37. SOCKET m_sock;
  38. BOOL m_fDoSending;
  39. CWHQueue m_xSendBuffQ;
  40. OVERLAPPEDEX OverlappedEx[2];
  41. public:
  42. CGateInfo();
  43. void SendGateCheck();
  44. void OpenNewUser(char *pszPacket);
  45. void xSend();
  46. int Send(_LPTSENDBUFF lpSendBuff);
  47. int Recv();
  48. bool HasCompletionPacket();
  49. char* ExtractPacket( char *pPacket );
  50. };
  51. class CUserInfo : public CIntLock, CStaticArray< CUserInfo >::IArrayData
  52. {
  53. public:
  54. bool m_bEmpty;
  55. int m_sock;
  56. char m_szUserID[12];
  57. char m_szCharName[14];
  58. int m_nUserGateIndex;
  59. int m_nUserServerIndex;
  60. int m_nCertification;
  61. int m_nClientVersion;
  62. CPlayerObject* m_pxPlayerObject;
  63. CGateInfo* m_pGateInfo;
  64. BYTE m_btCurrentMode;
  65. _THUMANRCD m_THumanRcd;
  66. int m_nNumOfMagics;
  67. int m_nNumOfGenItems;
  68. int m_nNumOfItems;
  69. CWHList<_LPTGENERALITEMRCD> m_lpTGenItemRcd;
  70. CWHList<_LPTHUMANMAGICRCD> m_lpTMagicRcd;
  71. CWHList<_LPTUSERITEMRCD> m_lpTItemRcd;
  72. _LPTHUMANMAGICRCD m_lpTMagicErgumSkill;
  73. BOOL m_fLongHitSkill;
  74. _LPTHUMANMAGICRCD m_lpTMagicBanwolSkill;
  75. BOOL m_fWideHitSkill;
  76. _LPTHUMANMAGICRCD m_lpTMagicFireSwordSkill;
  77. BOOL m_fFireHitSkill;
  78. DWORD m_dwLatestFireHitTime;
  79. _LPTHUMANMAGICRCD m_lpTMagicOneSwordSkill;
  80. _LPTHUMANMAGICRCD m_lpTMagicIlkwangSkill;
  81. _LPTHUMANMAGICRCD m_lpTMagicPowerHitSkill;
  82. BOOL m_fPowerHitSkill;
  83. BYTE m_btAttackSkillCount;
  84. BYTE m_btAttackSkillPointCount;
  85. _LPTHORSERCD m_lpTHorseRcd;
  86. public:
  87. CUserInfo();
  88. bool IsEmpty();
  89. void CloseAccount(char *pszName, int nCertification);
  90. void SaveHumanToDB(char *pszUserAddr);
  91. void CloseUserHuman();
  92. void DoClientCertification(char *pszPacket);
  93. void Operate();
  94. _LPTUSERITEMRCD GetItem(char *pszMakeIndex);
  95. __inline _LPTUSERITEMRCD GetUseItem(int nPosition) { return GetItem(m_THumanRcd.szTakeItem[nPosition]); }
  96. _LPTGENERALITEMRCD GetUseGenItem(char *pszMakeItemID);
  97. void RemoveGenItem(_LPTGENERALITEMRCD lptGenItemRcd);
  98. int EncodeMyMagicToServer(char *pszEncodeMsg, int nBuffSize, int& nPos);
  99. int EncodeMyMagic(char *pszEncodeMsg, int nBuffSize, int& nPos);
  100. int EncodeGenItem(char *pszEncodeMsg, int nBuffSize, int& nPos);
  101. int GetWeaponFeature();
  102. int GetDressFeature();
  103. void AddNewItem(char *pszItemName);
  104. void MakeGenItem(_LPTGENERALITEMRCD lpItemRcd);
  105. BOOL IsMyMagic(int nIndex);
  106. void AllowLongHitSkill(BOOL fFlag);
  107. void AllowWideHitSkill(BOOL fFlag);
  108. BOOL AllowFireHitSkill();
  109. int CalcBagWeight();
  110. int CalcWearWeightEx(int nIndex);
  111. int GetGenItemStdIdx(char *pszMakeIndex);
  112. int GetGenItemVal1(char *pszMakeIndex);
  113. int GetGenItemVal2(char *pszMakeIndex);
  114. BOOL UserDropItem(int nItemIndex, char *pszMakeIndex);
  115. BOOL UserDropGenItem(int nItemIndex, char *pszMakeIndex);
  116. BOOL IncGold(int nGold);
  117. BOOL DecGold(int nGold);
  118. _LPTHUMANMAGICRCD GetMagicRcdByID(int nID);
  119. _LPTHUMANMAGICRCD GetMagicRcdByKey(int nKey);
  120. _LPTGENERALITEMRCD CanUseBujuk();
  121. void SetGenItemVal1(int nVal);
  122. void ProcessUserMessage(char *pszPacket);
  123. __inline _LPTUSERITEMRCD GetWeapon() { return GetUseItem(U_WEAPON); }
  124. __inline _LPTUSERITEMRCD SetWeapon(char *pszMakeIndex) { memmove(m_THumanRcd.szTakeItem[U_WEAPON], pszMakeIndex, _MAKEITEMINDEX); }
  125. __inline void SetEmptyWeapon() { ZeroMemory(m_THumanRcd.szTakeItem[U_WEAPON], _MAKEITEMINDEX); m_THumanRcd.szTakeItem[U_WEAPON][0] = '0'; }
  126. __inline void SetEmptyDress() { ZeroMemory(m_THumanRcd.szTakeItem[U_DRESS], _MAKEITEMINDEX); m_THumanRcd.szTakeItem[U_DRESS][0] = '0'; }
  127. __inline void SetEmptyUseItem(int i) { ZeroMemory(m_THumanRcd.szTakeItem[i], _MAKEITEMINDEX); m_THumanRcd.szTakeItem[i][0] = '0'; }
  128. __inline _LPTUSERITEMRCD GetDress() { return GetUseItem(U_DRESS); }
  129. __inline _LPTUSERITEMRCD GetAccessory(int nPosition) { return GetUseItem(nPosition); }
  130. __inline _LPTGENERALITEMRCD GetRightHand() { return GetUseGenItem(m_THumanRcd.szTakeItem[U_RIGHTHAND]); }
  131. __inline BYTE GetGenderFeature() { return m_THumanRcd.btGender; }
  132. __inline char GetHairFeature() { return m_THumanRcd.szHair; }
  133. __inline BYTE GetHorseFeatureEx() { if (m_lpTHorseRcd) return m_lpTHorseRcd->btHorseType; else return 0; }
  134. __inline int GetJob() { return m_THumanRcd.btJob; }
  135. __inline void SetJob(int nJob) { if (nJob >= 0 && nJob < 3) m_THumanRcd.btJob = (BYTE)nJob; }
  136. __inline int GetAttackMode() { return (int)m_THumanRcd.btAttackMode; }
  137. __inline int GetMagicID(char *pszMakeIndex) { return GetGenItemVal2(pszMakeIndex); }
  138. __inline BOOL IsEnoughBag() { if (m_lpTItemRcd.GetCount() + m_lpTGenItemRcd.GetCount() >= USERITEMMAX) return FALSE; return TRUE; }
  139. __inline DWORD GetGold() { return m_THumanRcd.dwGold; }
  140. };
  141. void InsertLogMsg(UINT nID);
  142. void InsertLogMsg(LPTSTR lpszMsg);
  143. void InsertLogPacket(char *pszPacket);
  144. void InsertLogMsgParam(UINT nID, void *pParam, BYTE btFlags);