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

模拟服务器

开发平台:

C/C++

  1. #ifndef KMISSIONARRAY_H
  2. #define KMISSIONARRAY_H
  3. #include "KTaskFuns.h"
  4. #include "KMission.h"
  5. #define MAX_MISSIONARRAY_VALUE_COUNT 100
  6. //管理Mission的集合
  7. template <class T, size_t ulSize>
  8. class KMissionArray : public KLinkArrayTemplate<T,  ulSize>
  9. {
  10. int m_MissionValue[MAX_MISSIONARRAY_VALUE_COUNT];
  11. public:
  12. BOOL Activate()
  13. {
  14. unsigned long ulActiveCount = GetUsedCount();
  15. if (ulActiveCount == 0)
  16. return FALSE;
  17. int nIdx = 0;
  18. for (int i = 0; i < ulActiveCount ; i ++)
  19. {
  20. nIdx = m_UseIdx.GetNext(nIdx);
  21. _ASSERT(nIdx);
  22. if (!nIdx)
  23. {
  24. break;
  25. }
  26. m_Data[nIdx].Activate();
  27. }
  28. return TRUE;
  29. };
  30. void SetMissionValue(unsigned long ulValueId, int nValue)
  31. {
  32. if (ulValueId >= MAX_MISSIONARRAY_VALUE_COUNT)
  33. return ;
  34. m_MissionValue[ulValueId] = nValue;
  35. };
  36. int GetMissionValue(unsigned long ulValueId) const
  37. {
  38. if (ulValueId >= MAX_MISSIONARRAY_VALUE_COUNT)
  39. return 0;
  40. return m_MissionValue[ulValueId];
  41. };
  42. unsigned long FindSame(T *pMission)
  43. {
  44. int nIdx = 0;
  45. while(1)
  46. {
  47. nIdx = m_UseIdx.GetNext(nIdx);
  48. if (!nIdx)
  49. break;
  50. if (pMission->GetMissionId() == m_Data[nIdx].GetMissionId())
  51. return nIdx;
  52. }
  53. return 0;
  54. };
  55. BOOL RemovePlayer(unsigned long ulPlayerIndex)
  56. {
  57. unsigned long ulActiveCount = GetUsedCount();
  58. if (ulActiveCount == 0)
  59. return FALSE;
  60. int nIdx = 0;
  61. for (int i = 0; i < ulActiveCount ; i ++)
  62. {
  63. nIdx = m_UseIdx.GetNext(nIdx);
  64. _ASSERT(nIdx);
  65. if (!nIdx)
  66. {
  67. break;
  68. }
  69. m_Data[nIdx].RemovePlayer(ulPlayerIndex);
  70. }
  71. return TRUE;
  72. }
  73. };
  74. //管理定时触发器的集合
  75. template <class T, size_t ulSize, PF_TimerCallBackFun CallFun>
  76. class KTimerFunArray :public KLinkArrayTemplate < T, ulSize>
  77. {
  78. public:
  79. char m_szScriptFile[MAX_PATH];
  80. BOOL Activate()
  81. {
  82. unsigned long ulActiveCount = GetUsedCount();
  83. if (ulActiveCount == 0)
  84. return FALSE;
  85. int nIdx = 0;
  86. for (int i = 0; i < ulActiveCount ; i ++)
  87. {
  88. nIdx = m_UseIdx.GetNext(nIdx);
  89. // _ASSERT(nIdx);
  90. if (!nIdx)
  91. {
  92. break;
  93. }
  94. m_Data[nIdx].Activate(CallFun);
  95. }
  96. return TRUE;
  97. };
  98. unsigned long FindSame(T *pTask)
  99. {
  100. int nIdx = 0;
  101. while(1)
  102. {
  103. nIdx = m_UseIdx.GetNext(nIdx);
  104. if (!nIdx)
  105. break;
  106. if (pTask->GetTaskId() == m_Data[nIdx].GetTaskId())
  107. return nIdx;
  108. }
  109. return 0;
  110. };
  111. };
  112. #endif