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

模拟服务器

开发平台:

C/C++

  1. #include "KCore.h"
  2. #include "KObjSet.h"
  3. #include "KNpcSet.h"
  4. #include "KSubWorld.h"
  5. #include "KNpc.h"
  6. #include "KIniFile.h"
  7. #include "KSubWorldSet.h"
  8. #include "KMissleSet.h"
  9. #include "LuaFuns.h"
  10. #include "KNpcTemplate.h"
  11. #include "KPlayerSet.h"
  12. #include "KPlayer.h"
  13. extern KNpcTemplate * g_pNpcTemplate[MAX_NPCSTYLE][MAX_NPC_LEVEL]; //0,0为起点
  14. KSubWorldSet g_SubWorldSet;
  15. KSubWorldSet::KSubWorldSet()
  16. {
  17. m_nLoopRate = 0;
  18. m_nGameVersion = ITEM_VERSION;
  19. #ifndef _SERVER
  20. m_dwPing = 0;
  21. #endif
  22. }
  23. int KSubWorldSet::SearchWorld(DWORD dwID)
  24. {
  25. for (int i = 0; i < MAX_SUBWORLD; i++)
  26. {
  27. if ((DWORD)SubWorld[i].m_SubWorldID == dwID)
  28. return i;
  29. }
  30. return -1;
  31. }
  32. BOOL KSubWorldSet::Load(LPSTR szFileName)
  33. {
  34. KIniFile IniFile;
  35. char szKeyName[32];
  36. int nWorldID;
  37. int nWorldCount = 0;
  38. IniFile.Load(szFileName);
  39. IniFile.GetInteger("Init", "Count", 1, &nWorldCount);
  40. if (nWorldCount > MAX_SUBWORLD)
  41. return FALSE;
  42. for (int i = 0; i < nWorldCount; i++)
  43. {
  44. sprintf((char*)szKeyName, "World%02d", i);
  45. IniFile.GetInteger("World", szKeyName, 1000, &nWorldID);
  46. #ifdef _SERVER
  47. SubWorld[i].m_nIndex = i;
  48. if (!SubWorld[i].LoadMap(nWorldID))
  49. {
  50. // LogError szWorldFile Not Load
  51. }
  52. #endif
  53. }
  54. return TRUE;
  55. }
  56. int nActiveRegionCount;
  57. void KSubWorldSet::MainLoop()
  58. {
  59. m_nLoopRate++;
  60. #ifndef _SERVER
  61. // if (!(m_nLoopRate % 20))
  62. // SendClientCmdPing();
  63. // 游戏音乐的处理
  64. this->m_cMusic.Play(SubWorld[0].m_SubWorldID, SubWorld[0].m_dwCurrentTime, Npc[Player[CLIENT_PLAYER_INDEX].m_nIndex].m_FightMode);
  65. #endif
  66. #ifdef _SERVER
  67. // g_GlobalMissionArray.Activate();
  68. #endif
  69. nActiveRegionCount = 0;
  70. for (int i = 0; i < MAX_SUBWORLD; i++)
  71. {
  72. SubWorld[i].Activate();
  73. #ifndef _SERVER
  74. NpcSet.CheckBalance();
  75. #endif
  76. }
  77. // if ((m_nLoopRate % 100) == 0)
  78. // printf("Region:%d:%dn", m_nLoopRate, nActiveRegionCount);
  79. #ifdef _SERVER
  80. PlayerSet.AutoSave();
  81. #endif
  82. }
  83. void KSubWorldSet::MessageLoop()
  84. {
  85. for (int i = 0; i < MAX_SUBWORLD; i++)
  86. {
  87. SubWorld[i].MessageLoop();
  88. }
  89. }
  90. BOOL KSubWorldSet::SendMessage(int nSubWorldID, DWORD dwMsgType, int nParam1, int nParam2, int nParam3)
  91. {
  92. KWorldMsgNode *pNode = NULL;
  93. pNode = new KWorldMsgNode;
  94. if (!pNode)
  95. return FALSE;
  96. pNode->m_dwMsgType = dwMsgType;
  97. pNode->m_nParam[0] = nParam1;
  98. pNode->m_nParam[1] = nParam2;
  99. pNode->m_nParam[2] = nParam3;
  100. if (pNode->m_dwMsgType == 4001) g_DebugLog("Send !!!!");
  101. return SubWorld[nSubWorldID].m_WorldMessage.Send(pNode);
  102. }
  103. void KSubWorldSet::Close()
  104. {
  105. for (int i = 0; i < MAX_SUBWORLD; i++)
  106. {
  107. SubWorld[i].Close();
  108. }
  109. NpcSet.RemoveAll();
  110. #ifndef _SERVER
  111. Player[CLIENT_PLAYER_INDEX].m_ItemList.RemoveAll();
  112. Player[CLIENT_PLAYER_INDEX].m_cTeam.Release();
  113. g_Team[0].Release();
  114. m_cMusic.Stop();
  115. #endif
  116. }
  117. #ifndef _SERVER
  118. void KSubWorldSet::Paint()
  119. {
  120. SubWorld[0].Paint();
  121. }
  122. #endif
  123. #ifdef _SERVER
  124. void KSubWorldSet::GetRevivalPosFromId(DWORD dwSubWorldId, int nRevivalId, POINT* pPos)
  125. {
  126. if (!pPos)
  127. return;
  128. // int nIdx = SearchWorld(dwSubWorldId);
  129. // if (nIdx >= 0)
  130. // {
  131. KIniFile IniFile;
  132. char szKeyName[32];
  133. char szSection[32];
  134. g_SetFilePath("\settings");
  135. IniFile.Load("RevivePos.ini");
  136. sprintf(szSection, "%d", dwSubWorldId);
  137. sprintf(szKeyName, "%d", nRevivalId);
  138. int nX = 51200;
  139. int nY = 102400;
  140. IniFile.GetInteger2(szSection, szKeyName, &nX, &nY);
  141. pPos->x = nX;
  142. pPos->y = nY;
  143. // }
  144. }
  145. #endif