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

模拟服务器

开发平台:

C/C++

  1. //---------------------------------------------------------------------------
  2. // Sword3 Engine (c) 1999-2000 by Kingsoft
  3. // 
  4. // File: KStepLuaScript.h
  5. // Date: 2001-9-11 11:11:09
  6. // Code: Romandou
  7. // Desc:
  8. //---------------------------------------------------------------------------
  9. #ifndef KStepLuaScript_H
  10. #define KStepLuaScript_H
  11. //---------------------------------------------------------------------------
  12. #include "KScript.h"
  13. #include "KLuaScript.h"
  14. #include "KMemClass.h"
  15. #include "KMemClass1.h"
  16. #include "KLubCmpl_Blocker.h"
  17. #define MainBlockBeginString "function main()"
  18. #define MainBlockEndString "end;--main"
  19. struct TScriptMsg
  20. {
  21. char * szMessage;
  22. char * szMsgData;
  23. Lua_State* StateAddr;
  24. TScriptMsg * NextMsg;
  25. };
  26. typedef enum
  27. {
  28. ssRunIdle, // 并未加载脚本
  29. ssRunMain, // 脚本正在执行
  30. ssRunFunc, // 函数正在执行
  31. ssRunResume, //暂时返回
  32. ssRunWaitMsg, //等待某个消息发生
  33. }
  34. RunStatus;
  35. //---------------------------------------------------------------------------
  36. class  ENGINE_API KStepLuaScript : public KLuaScript
  37. {
  38. public:
  39. KStepLuaScript();
  40. virtual ~KStepLuaScript();
  41. KStepLuaScript( int StackSize);
  42. int Active();
  43. BOOL GetNextLine(LPBYTE lpByte, char * szLin);
  44. BOOL ExeLine(LPSTR szLine);
  45. BOOL CheckLine(LPSTR szLine);//检查将执行的Lua语句是否符合条件,如不能有for goto 
  46. BOOL GetExeBufferFromFile(char * filename);//获得当前文件中执行段的语句
  47. BOOL GetExeBuffer(void *, int len);//获得执行段的语句
  48. BOOL Load(LPSTR szFileName);
  49. void SeekBegin(){m_CurPos = 0; };
  50. void SeekToExeBegin(){m_CurPos = m_FirstExecuteLine;};
  51. void RunMain(){ m_Status = ssRunMain; };
  52. void RunFunc(){ m_Status = ssRunFunc; };
  53. void RunIdle(){ m_Status = ssRunIdle;};
  54. void RunResume(){ m_Status = ssRunResume;};
  55. void RunWaitMsg(){ m_Status = ssRunWaitMsg; };
  56. BOOL IsRunMain(){ return m_Status == ssRunMain; };
  57. BOOL IsRunFunc(){ return m_Status == ssRunFunc; };
  58. BOOL IsRunIdle(){ return m_Status == ssRunIdle;};
  59. BOOL IsRunResume(){ return m_Status == ssRunResume; };
  60. BOOL IsRunWaitMsg(){return m_Status == ssRunWaitMsg;};
  61. KMemClass m_Memory;
  62. BOOL SendMessage(KStepLuaScript * pSendedScript, char * szMessageName, char * szData);
  63. BOOL AddMessage(Lua_State * L, char * szMessageName, char * szData);
  64. LPSTR GetWaitingMsg(){return m_szWaitingMsg;};
  65. void PosUp();
  66. void GotoLabel( LPSTR szLabelName);
  67. int GetStatus(){return m_Status; };
  68. private:
  69. TScriptMsg  *m_pMsgQueue;
  70. RunStatus m_Status;       // 脚本的状态
  71. BOOL m_ScriptStyle; //该脚本所属类型是否为主类型   或附属类型
  72. long m_CurLine;
  73. long m_BufLen;
  74. long m_CurPos;
  75. long m_FirstExecuteLine;
  76. long m_EndExecuteLine;
  77. char m_szFilename[32];
  78. char m_szWaitingMsg[40];
  79. };
  80. //---------------------------------------------------------------------------
  81. #endif //KStepLuaScript_H