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

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Engine (c) 1999-2000 by Kingsoft
  3. // 
  4. // File: KLuaScript.h
  5. // Date: 2001-9-11 11:11:09
  6. // Code: Romandou
  7. // Desc:
  8. //---------------------------------------------------------------------------
  9. #ifndef KLuaScript_H
  10. #define KLuaScript_H
  11. //---------------------------------------------------------------------------
  12. #include "KScript.h"
  13. #ifndef __linux
  14. #ifdef _STANDALONE
  15. #include "LuaLib.h"
  16. #else
  17. #include "../include/LuaLib.h"
  18. #endif
  19. #else
  20. #include "LuaLib.h"
  21. #include <string.h>
  22. #endif
  23. #define MAINFUNCTIONNAME "main"
  24. #define LUA_CREATE_ERROR 1
  25. #define LUA_SCRIPT_LEN_ERROR 2
  26. #define LUA_SCRIPT_COMPILE_ERROR 3
  27. #define LUA_SCRIPT_EXECUTE_ERROR 4
  28. #define LUA_SCRIPT_NOT_NUMBER_ERROR 10
  29. #define LUA_SCRIPT_NOT_STRING_ERROR 11
  30. #define LUA_SCRIPT_NOT_TABLE_ERROR 12
  31. #define LUA_SCRIPT_STATES_IS_NULL 20
  32. typedef struct  {
  33. const char *name;
  34. lua_CFunction func;
  35. }TLua_Funcs;
  36. //---------------------------------------------------------------------------
  37. class ENGINE_API KLuaScript : public KScript
  38. {
  39. public:
  40. KLuaScript();
  41. virtual ~KLuaScript();
  42. KLuaScript( int StackSize);
  43. int Activate(){Execute(); return 1;};
  44. virtual BOOL Init();
  45. virtual void Exit();
  46. virtual BOOL Load(char* FileName);
  47. virtual BOOL Compile(char* FileName);
  48. virtual BOOL Execute();
  49. virtual BOOL CallFunction(LPSTR cFuncName, int nResults, LPSTR cFormat, ...);
  50. virtual BOOL RegisterFunction(LPSTR FuncName, void* Func);
  51. virtual void SetScriptName(LPSTR scpname){strcpy(m_szScriptName, scpname);};
  52. int  GetUserTag() { return m_UserTag; };
  53. BOOL RegisterFunctions( TLua_Funcs Funcs[], int n = 0 );
  54. BOOL LoadBuffer(PBYTE pBuffer, DWORD dwLen );
  55. void SafeCallBegin(int * pIndex);//记录当前堆栈栈顶位置,并保存到pIndex指向的数据中
  56. void SafeCallEnd (int nIndex);//恢复至调用之前栈顶位置。
  57. BOOL GetValuesFromStack(char * cFormat , ...);
  58. BOOL Stop();
  59. BOOL Resume();
  60. DWORD CreateTable();
  61. DWORD ModifyTable(LPSTR szTableName); 
  62. void SetGlobalName(LPSTR szName);
  63. inline void SetTableMember(int nIndex, int Id, const char * szString){Lua_SetTable_StringFromId(m_LuaState,  nIndex, Id, szString);};
  64. inline void SetTableMember(int nIndex, int Id, double nNumber){Lua_SetTable_DoubleFromId(m_LuaState,  nIndex, Id, nNumber);};
  65. inline void SetTableMember(int nIndex, int Id, int nNumber){Lua_SetTable_IntFromId(m_LuaState,  nIndex, Id, nNumber);};
  66. inline void SetTableMember(int nIndex, const char * szMemberName, Lua_CFunction CFun){Lua_SetTable_CFunFromName(m_LuaState,  nIndex, szMemberName, CFun);};
  67. inline void SetTableMember(int nIndex, int nId, Lua_CFunction CFun){Lua_SetTable_CFunFromId(m_LuaState,  nIndex, nId, CFun);};
  68. inline void SetTableMember(int nIndex, const char * szMemberName, char * szString){Lua_SetTable_StringFromName(m_LuaState,  nIndex, szMemberName, szString);};
  69. inline void SetTableMember(int nIndex, const char * szMemberName, int Number){Lua_SetTable_IntFromName(m_LuaState,  nIndex, szMemberName, Number);};
  70. inline void SetTableMember(int nIndex, const char * szMemberName, double Number){Lua_SetTable_DoubleFromName(m_LuaState,  nIndex, szMemberName, Number);};
  71. void ScriptError(int Error);
  72. void ScriptError(int , int);
  73. BOOL ExecuteCode();
  74. //private:
  75. void RegisterStandardFunctions();
  76. BOOL m_IsRuning;//是否该脚本有效
  77. char m_szScriptName[100];
  78. int  m_UserTag;
  79. Lua_State * m_LuaState;
  80. private:
  81. BOOL CallFunction(LPSTR cFuncName, int nResults, LPSTR cFormat, va_list vlist);
  82. };
  83. //---------------------------------------------------------------------------
  84. #endif //KLuaScript_H