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

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Engine (c) 1999-2000 by Kingsoft
  3. // 
  4. // File: KLuaScriptSet.cpp
  5. // Date: 2001-10-18 11:11:18
  6. // Code: Romandou
  7. // Desc:
  8. //---------------------------------------------------------------------------
  9. #include "KWin32.h"
  10. /*
  11. #include "KDebug.h"
  12. #include "KLuaScriptSet.h"
  13. //---------------------------------------------------------------------------
  14. // 函数: KLuaScriptSet::KLuaScriptSet
  15. // 功能:
  16. // 返回:
  17. //---------------------------------------------------------------------------
  18. KLuaScriptSet::KLuaScriptSet()
  19. {
  20. KScriptSet::KScriptSet();
  21. m_nMaxScriptNum = MAXLUASCRIPTNUM;
  22. m_nNumPerClear =  NUMPERCLEAR;
  23. }
  24. //---------------------------------------------------------------------------
  25. // 函数: KLuaScriptSet::~KLuaScriptSet
  26. // 功能:
  27. // 返回:
  28. //---------------------------------------------------------------------------
  29. KLuaScriptSet::~KLuaScriptSet()
  30. {
  31. KScriptSet::~KScriptSet();
  32. }
  33. //---------------------------------------------------------------------------
  34. // 函数: KLuaScriptSet::CreateScript
  35. // 功能:
  36. // 参数: char * szKey
  37. // 参数: int StackSize
  38. // 返回: KScript * 
  39. //---------------------------------------------------------------------------
  40. KScript * KLuaScriptSet::CreateScript(char * szKey, int StackSize)
  41. {
  42. //清理
  43. ClearUpSet();
  44. if (szKey == NULL && StackSize < 0) return NULL;
  45. char * szFileName =  GetScriptFileNameFromKey(szKey);
  46. if (szFileName == NULL ) return NULL;
  47. KLuaScript * pScript = new KLuaScript(StackSize);
  48. if (! pScript) return NULL;
  49. //脚本对象的脚本名为关键字名
  50. if (! pScript->Init()) return NULL;
  51. if (! pScript->Load(szFileName)) return NULL;
  52. return pScript;
  53. }
  54. KScript * KLuaScriptSet::CreateScript(DWORD nKey, int StackSize)
  55. {
  56. //清理
  57. ClearUpSet();
  58. if (StackSize < 0) return NULL;
  59. char * szFileName =  GetScriptFileNameFromKey(nKey);
  60. if (szFileName == NULL ) return NULL;
  61. KLuaScript * pScript = new KLuaScript(StackSize);
  62. if (! pScript) return NULL;
  63. //脚本对象的脚本名为关键字名
  64. if (! pScript->Init()) return NULL;
  65. if (! pScript->Load(szFileName)) return NULL;
  66. return pScript;
  67. }
  68. //---------------------------------------------------------------------------
  69. // 函数: KLuaScriptSet::ClearUpSet
  70. // 功能:
  71. // 参数: void
  72. // 返回: BOOL 
  73. //---------------------------------------------------------------------------
  74. BOOL KLuaScriptSet::ClearUpSet(void)
  75. {
  76. TScript * pTScript = NULL;
  77. TScript * pDelTScript = NULL;
  78. if (GetCount() >= m_nMaxScriptNum) 
  79. {
  80. pTScript = m_pLestRecent;
  81. // printf("ClearUpSetn");
  82. for (DWORD i = 0; i < m_nNumPerClear;i++)
  83. {
  84. pDelTScript = pTScript;
  85. pTScript = pTScript->pMoreRecent;
  86. DeleteScript(pDelTScript->szKey);
  87. }
  88. return TRUE;
  89. }
  90. return FALSE;
  91. }
  92. //---------------------------------------------------------------------------
  93. // 函数: KLuaScriptSet::ClearUpSet
  94. // 功能: 按照最旧使用脚本的顺序删除nCount个脚本实例
  95. // 参数: DWORD nCount
  96. // 返回: int 返回实际删除的脚本数量
  97. //---------------------------------------------------------------------------
  98. DWORD KLuaScriptSet::ClearUpSet(DWORD nCount)
  99. {
  100. TScript * pTScript = NULL;
  101. TScript * pDelTScript = NULL;
  102. DWORD nUsedCount = GetCount();
  103. if (nUsedCount < nCount)
  104. nCount = nUsedCount;
  105. pTScript = m_pLestRecent;
  106. for (DWORD i = 0; i < nCount; i++)
  107. {
  108. pDelTScript = pTScript;
  109. pTScript = pTScript->pMoreRecent;
  110. DeleteScript(pDelTScript->szKey);
  111. }
  112. return nCount;
  113. }
  114. //---------------------------------------------------------------------------
  115. // 函数: KLuaScriptSet::SetMaxScriptNum
  116. // 功能:
  117. // 参数: DWORD nMaxCount
  118. // 返回: BOOL 
  119. //---------------------------------------------------------------------------
  120. BOOL KLuaScriptSet::SetMaxScriptNum(DWORD nMaxCount )
  121. {
  122. if (nMaxCount < 0)
  123. return FALSE;
  124. m_nMaxScriptNum = nMaxCount;
  125. return TRUE;
  126. }
  127. //---------------------------------------------------------------------------
  128. // 函数: KLuaScriptSet::SetNumPerClear
  129. // 功能:
  130. // 参数: DWORD nNumPerClear
  131. // 返回: BOOL 
  132. //---------------------------------------------------------------------------
  133. BOOL KLuaScriptSet::SetNumPerClear(DWORD nNumPerClear)
  134. {
  135. if (nNumPerClear < 0 )
  136. return FALSE;
  137. if (m_nMaxScriptNum < nNumPerClear)
  138. return FALSE;
  139. m_nNumPerClear = nNumPerClear;
  140. return TRUE;
  141. }
  142. BOOL KLuaScriptSet::Run(DWORD nKey)
  143. {
  144. KLuaScript *pScript ;
  145. pScript = (KLuaScript* ) this->GetScript(nKey,1,1);
  146. if (pScript)
  147. {
  148. return pScript->Execute();
  149. }
  150. return FALSE;
  151. }
  152. BOOL KLuaScriptSet::Run(char * szKey)
  153. {
  154. KLuaScript *pScript ;
  155. pScript = (KLuaScript* ) this->GetScript(szKey,1,1);
  156. if (pScript)
  157. {
  158. return pScript->Execute();
  159. }
  160. return FALSE;
  161. }
  162. BOOL KLuaScriptSet::RunFunction(DWORD nKey, char * szFuncName, int nResults, char * szFormat, ...)
  163. {
  164. KLuaScript * pScript;
  165. pScript = (KLuaScript *) this->GetScript(nKey, 1, 1);
  166. if (pScript)
  167. {
  168. va_list va;
  169. BOOL bResult;
  170. va_start(va, szFormat);
  171. bResult = pScript->CallFunction(szFuncName, nResults, szFormat, va);
  172. va_end(va);
  173. return bResult;
  174. }
  175. return FALSE;
  176. }
  177. BOOL KLuaScriptSet::RunFunction(char * szKey, char * szFuncName, int nResults, char * szFormat, ...)
  178. {
  179. KLuaScript * pScript;
  180. pScript = (KLuaScript *) this->GetScript(szKey, 1, 1);
  181. if (pScript)
  182. {
  183. va_list va;
  184. BOOL bResult;
  185. va_start(va, szFormat);
  186. bResult = pScript->CallFunction(szFuncName, nResults, szFormat, va);
  187. va_end(va);
  188. return bResult;
  189. }
  190. return FALSE;
  191. }
  192. */