KSubWorld.h
上传用户:dzyhzl
上传日期:2019-04-29
资源大小:56270k
文件大小:4k
源码类别:

模拟服务器

开发平台:

C/C++

  1. #ifndef KWorldH
  2. #define KWorldH
  3. #ifdef _SERVER
  4. #define MAX_SUBWORLD 80
  5. #else
  6. #define MAX_SUBWORLD 1
  7. #endif
  8. #define VOID_REGION -2
  9. //-------------------------------------------------------------
  10. #include "KEngine.h"
  11. #include "KRegion.h"
  12. #include "KWeatherMgr.h"
  13. #ifdef _SERVER
  14. #include "KMission.h"
  15. #include "KMissionArray.h"
  16. #define MAX_SUBWORLD_MISSIONCOUNT 10
  17. #define MAX_GLOBAL_MISSIONCOUNT 50
  18. typedef KMissionArray <KMission , MAX_TIMER_PERMISSION> KSubWorldMissionArray;
  19. typedef KMissionArray <KMission , MAX_GLOBAL_MISSIONCOUNT> KGlobalMissionArray;
  20. extern KGlobalMissionArray g_GlobalMissionArray;
  21. #endif
  22. //-------------------------------------------------------------
  23. #ifndef TOOLVERSION
  24. class KSubWorld
  25. #else
  26. class CORE_API KSubWorld
  27. #endif
  28. {
  29. public:
  30. int m_nIndex;
  31. int m_SubWorldID;
  32. #ifdef _SERVER
  33. KSubWorldMissionArray m_MissionArray;
  34. #endif
  35. KRegion* m_Region;
  36. #ifndef _SERVER
  37. int m_ClientRegionIdx[MAX_REGION];
  38. char m_szMapPath[FILE_NAME_LENGTH];
  39. //KLittleMap m_cLittleMap;
  40. #endif
  41. int m_nWorldRegionWidth; // SubWorld里宽几个Region
  42. int m_nWorldRegionHeight; // SubWorld里高几个Region
  43. int m_nTotalRegion; // SubWorld里Region个数
  44. int m_nRegionWidth; // Region的格子宽度
  45. int m_nRegionHeight; // Region的格子高度
  46. int m_nCellWidth; // Cell的像素宽度
  47. int m_nCellHeight; // Cell的像素高度
  48. int m_nRegionBeginX;
  49. int m_nRegionBeginY;
  50. int m_nWeather; // 天气变化
  51. DWORD m_dwCurrentTime; // 当前帧
  52. KWorldMsg m_WorldMessage; // 消息
  53. KList m_NoneRegionNpcList; // 不在地图上的NPC
  54. #ifdef _SERVER
  55. KWeatherMgr *m_pWeatherMgr;
  56. #endif
  57. private:
  58. public:
  59. KSubWorld();
  60. ~KSubWorld();
  61. void Activate();
  62. void GetFreeObjPos(POINT& pos);
  63. BOOL CanPutObj(POINT pos);
  64. void ObjChangeRegion(int nSrcRegionIdx, int nDesRegionIdx, int nObjIdx);
  65. void MissleChangeRegion(int nSrcRegionIdx, int nDesRegionIdx, int nObjIdx);
  66. void AddPlayer(int nRegion, int nIdx);
  67. void RemovePlayer(int nRegion, int nIdx);
  68. void Close();
  69. int GetDistance(int nRx1, int nRy1, int nRx2, int nRy2); // 像素级坐标
  70. void Map2Mps(int nR, int nX, int nY, int nDx, int nDy, int *nRx, int *nRy); // 格子坐标转像素坐标
  71. static void Map2Mps(int nRx, int nRy, int nX, int nY, int nDx, int nDy, int *pnX, int *pnY); // 格子坐标转像素坐标
  72. void Mps2Map(int Rx, int Ry, int * nR, int * nX, int * nY, int *nDx, int * nDy); // 像素坐标转格子坐标
  73. void GetMps(int *nX, int *nY, int nSpeed, int nDir, int nMaxDir = 64); // 取得某方向某速度下一点的坐标
  74. BYTE TestBarrier(int nMpsX, int nMpsY);
  75. BYTE TestBarrier(int nRegion, int nMapX, int nMapY, int nDx, int nDy, int nChangeX, int nChangeY); // 检测下一点是否为障碍
  76. BYTE TestBarrierMin(int nRegion, int nMapX, int nMapY, int nDx, int nDy, int nChangeX, int nChangeY); // 检测下一点是否为障碍
  77. BYTE GetBarrier(int nMpsX, int nMpsY); // 取得某点的障碍信息
  78. DWORD GetTrap(int nMpsX, int nMpsY);
  79. void MessageLoop();
  80. int FindRegion(int RegionID); // 找到某ID的Region的索引
  81. int FindFreeRegion(int nX = 0, int nY = 0);
  82. #ifdef _SERVER
  83. int RevivalAllNpc();//将地图上所有的Npc包括已死亡的Npc全部恢复成原始状态
  84. void BroadCast(const char* pBuffer, size_t uSize);
  85. BOOL LoadMap(int nIdx);
  86. void LoadObject(char* szPath, char* szFile);
  87. void NpcChangeRegion(int nSrcRegionIdx, int nDesRegionIdx, int nNpcIdx);
  88. void PlayerChangeRegion(int nSrcRegionIdx, int nDesRegionIdx, int nObjIdx);
  89. BOOL SendSyncData(int nIdx, int nClient);
  90. int GetRegionIndex(int nRegionID);
  91. int FindNpcFromName(const char * szName);
  92. #endif
  93. #ifndef _SERVER
  94. BOOL LoadMap(int nIdx, int nRegion);
  95. void NpcChangeRegion(int nSrcRegionIdx, int nDesRegionIdx, int nNpcIdx);
  96. void Paint();
  97. void Mps2Screen(int *Rx, int *Ry);
  98. void Screen2Mps(int *Rx, int *Ry);
  99. #endif
  100. private:
  101. void LoadTrap();
  102. void ProcessMsg(KWorldMsgNode *pMsg);
  103. #ifndef _SERVER
  104. void LoadCell();
  105. #endif
  106. };
  107. #ifndef TOOLVERSION
  108. extern KSubWorld SubWorld[MAX_SUBWORLD];
  109. #else 
  110. extern CORE_API KSubWorld SubWorld[MAX_SUBWORLD];
  111. #endif
  112. #endif