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

模拟服务器

开发平台:

C/C++

  1. #include "KCore.h"
  2. //#include "MyAssert.H"
  3. #include "KPlayer.h"
  4. #include "KPlayerTask.h"
  5. #include "KTaskFuns.h"
  6. #include "KNpc.h"
  7. #include "KSubWorldSet.h"
  8. #ifndef _SERVER
  9. KTabFile g_StringResourseTabFile;
  10. char* g_GetStringRes(int nStringID, char * szString, int nMaxLen)
  11. {
  12. char szStringId[10];
  13. sprintf(szStringId, "%d", nStringID);
  14. g_StringResourseTabFile.GetString(szStringId, "STRING", "", szString, nMaxLen);
  15. return szString;
  16. }
  17. #endif
  18. #ifdef _SERVER
  19. KTabFile g_MissionTabFile;
  20. int g_WayPointPriceUnit = 1;//WayPoint表格中价格的单位量,WayPoint价格 = 单位量 * 表格数值
  21. int g_StationPriceUnit = 1; //Station表格中价格的单位量,Station价格 = 单位量 * 表格数值
  22. int g_DockPriceUnit = 1;
  23. int g_GetPriceToWayPoint(int nStationId, int nWayPoint)
  24. {
  25. if (g_WayPointPriceTabFile.GetWidth() < nStationId)
  26. {
  27. _ASSERT(0);
  28. return 0;
  29. }
  30. if (g_WayPointPriceTabFile.GetHeight() < nWayPoint)
  31. {
  32. _ASSERT(0);
  33. return 0;
  34. }
  35. if (*(g_pWayPointPriceTab + (nStationId - 1) * g_WayPointPriceTabFile.GetWidth() + nWayPoint - 1) < 0)
  36. {
  37. g_WayPointPriceTabFile.GetInteger(nWayPoint + 1, nStationId + 1, 0, (g_pWayPointPriceTab + (nStationId - 1) * g_WayPointPriceTabFile.GetWidth() + nWayPoint - 1));
  38. }
  39. return  g_WayPointPriceUnit * (*(g_pWayPointPriceTab + (nStationId - 1) * g_WayPointPriceTabFile.GetWidth() + nWayPoint - 1));
  40. }
  41. int g_GetPriceToStation(int nStationId, int nNextStationId)
  42. {
  43. if (nStationId == nNextStationId) return 0;
  44. if (g_StationPriceTabFile.GetWidth() < nStationId)
  45. {
  46. _ASSERT(0);
  47. return 0;
  48. }
  49. if (g_StationTabFile.GetHeight() < nNextStationId)
  50. {
  51. _ASSERT(0);
  52. return 0;
  53. }
  54. if (*(g_pStationPriceTab + (nStationId - 1) * g_StationPriceTabFile.GetWidth() + nNextStationId - 1) < 0)
  55. {
  56. int t;
  57. g_StationPriceTabFile.GetInteger(nNextStationId + 1, nStationId + 1, 0, &t);
  58. *(g_pStationPriceTab + (nStationId - 1) * g_StationPriceTabFile.GetWidth() + nNextStationId - 1) = t;
  59. }
  60. return  g_StationPriceUnit * (*(g_pStationPriceTab + (nStationId - 1) * g_StationPriceTabFile.GetWidth() + nNextStationId - 1));
  61. }
  62. int g_GetPriceToDock(int nCurDockId, int nNextDockId)
  63. {
  64. if (nCurDockId == nNextDockId)
  65. {
  66. return 0;
  67. }
  68. if (g_DockPriceTabFile.GetWidth() < nCurDockId)
  69. {
  70. _ASSERT(0);
  71. return 0;
  72. }
  73. if (g_DockTabFile.GetHeight()  - 1< nNextDockId)
  74. {
  75. _ASSERT(0);
  76. return 0;
  77. }
  78. if (*(g_pDockPriceTab + (nCurDockId - 1) * g_DockPriceTabFile.GetWidth() + nNextDockId - 1) < 0)
  79. {
  80. int t;
  81. g_DockPriceTabFile.GetInteger(nNextDockId + 1, nCurDockId + 1, 0, &t);
  82. *(g_pDockPriceTab + (nCurDockId - 1) * g_DockPriceTabFile.GetWidth() + nNextDockId - 1) = t;
  83. }
  84. return  g_DockPriceUnit * (*(g_pDockPriceTab + (nCurDockId - 1) * g_DockPriceTabFile.GetWidth() + nNextDockId - 1));
  85. }
  86. KTimerTaskFun::KTimerTaskFun()
  87. {
  88. m_dwTimeTaskTime = 0;
  89. m_dwTimerTaskId = 0;
  90. m_dwIntervalTime = 0;
  91. }
  92. KTabFile KTimerTaskFun::m_TimerTaskTab;
  93. BOOL KTimerTaskFun::Init()
  94. {
  95. m_TimerTaskTab.Clear();
  96. if (!m_TimerTaskTab.Load(TIMERTASK_SETTINGFILE))
  97. {
  98. g_DebugLog("[TASK]Can Not Load %s,ERRRROR!", TIMERTASK_SETTINGFILE);
  99. return FALSE;
  100. }
  101. return TRUE;
  102. }
  103. BOOL KTimerTaskFun::Activate(PF_TimerCallBackFun TimerCallBackFun)
  104. {
  105. if (m_dwTimeTaskTime && m_dwTimeTaskTime <=  g_SubWorldSet.GetGameTime())
  106. {
  107. //自动设置下一个周期时间
  108. m_dwTimeTaskTime = g_SubWorldSet.GetGameTime() + m_dwIntervalTime; 
  109. if (m_dwTimerTaskId)
  110. {
  111. char szTimerScript[MAX_PATH];
  112. g_TimerTask.GetTimerTaskScript(szTimerScript, m_dwTimerTaskId, MAX_PATH);
  113. TimerCallBackFun(m_pTimerOwner, szTimerScript);
  114. }
  115. }
  116. return TRUE;
  117. }
  118. BOOL KTimerTaskFun::SaveTask(KPlayer * pPlayer)
  119. {
  120. if (!pPlayer)
  121. {
  122. return FALSE;
  123. }
  124. pPlayer->m_cTask.SetSaveVal(TASKVALUE_TIMERTASK_TAST, 0);
  125. pPlayer->m_cTask.SetSaveVal(TASKVALUE_TIMERTASK_RESTTIME, 0);
  126. if (m_dwTimerTaskId)
  127. {
  128. int nRestTime = m_dwTimeTaskTime - g_SubWorldSet.GetGameTime();
  129. if (nRestTime > 0)
  130. {
  131. pPlayer->m_cTask.SetSaveVal(TASKVALUE_TIMERTASK_TAST, m_dwTimerTaskId);
  132. pPlayer->m_cTask.SetSaveVal(TASKVALUE_TIMERTASK_RESTTIME, nRestTime);
  133. }
  134. }
  135. return TRUE;
  136. }
  137. BOOL KTimerTaskFun::LoadTask(KPlayer * pPlayer)
  138. {
  139. if (!pPlayer) 
  140. {
  141. return FALSE;
  142. }
  143. int nTimerTaskId = pPlayer->m_cTask.GetSaveVal(TASKVALUE_TIMERTASK_TAST);
  144. int nRestTime = pPlayer->m_cTask.GetSaveVal(TASKVALUE_TIMERTASK_RESTTIME);
  145. m_dwTimerTaskId = 0;
  146. m_dwTimeTaskTime = 0;
  147. if (nRestTime > 0)
  148. {
  149. int nAtTime = nRestTime + g_SubWorldSet.GetGameTime();
  150. m_dwTimerTaskId = nTimerTaskId;
  151. m_dwTimeTaskTime = nAtTime;
  152. }
  153. return TRUE;
  154. }
  155. void KTimerTaskFun::GetTimerTaskScript(char * szScriptFileName, unsigned short usTimerTaskId, size_t nScriptFileLen)
  156. {
  157. if (!szScriptFileName)
  158. return ;
  159. szScriptFileName[0] = 0;
  160. char szTaskId[20];
  161. sprintf(szTaskId, "%d", usTimerTaskId);
  162. m_TimerTaskTab.GetString(szTaskId, "SCRIPT", "", szScriptFileName, nScriptFileLen);
  163. }
  164. KTimerTaskFun g_TimerTask;
  165. int g_PlayerTimerCallBackFun(void * pOwner, char * szScriptFileName)
  166. {
  167. if (!pOwner)
  168. return 0;
  169. KPlayer * pPlayer = (KPlayer * )pOwner;
  170. pPlayer->ExecuteScript(szScriptFileName, "OnTimer", 0);
  171. return 1;
  172. };
  173. #endif