113 lines
3.9 KiB
C
113 lines
3.9 KiB
C
|
|
#pragma once
|
|||
|
|
|
|||
|
|
class CEntity;
|
|||
|
|
|
|||
|
|
class CLogicScript :
|
|||
|
|
public CCustomLuaScript
|
|||
|
|
{
|
|||
|
|
public:
|
|||
|
|
typedef CCustomLuaScript Inherited;
|
|||
|
|
typedef wylib::misc::CRefObject<CCustomLuaPreProcessor::CLineRangeList> CSourceLineList;
|
|||
|
|
//脚本初始化函数名称
|
|||
|
|
static LPCSTR ScriptInitFnName;
|
|||
|
|
//脚本析构函数名称
|
|||
|
|
static LPCSTR ScriptUninitFnName;
|
|||
|
|
//向脚本中保存此脚本对象指针的名称
|
|||
|
|
static LPCTSTR ScriptInstanceKeyName;
|
|||
|
|
/* 脚本中申请的ActorPacket指针,保存指针以便在角色申请数据包后出现脚本错误从而无法flush数据包的时候回收数据包,
|
|||
|
|
如果脚本出错且数据包没有被回收,则会导致整个游戏引擎就此不能正常工作
|
|||
|
|
*/
|
|||
|
|
static struct CActorPacket *ScriptActorPacket;
|
|||
|
|
|
|||
|
|
public:
|
|||
|
|
CLogicScript();
|
|||
|
|
~CLogicScript();
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments: 覆盖父类设置脚本内容的函数,增加对代码原始行记录器的保存
|
|||
|
|
* Param LPCSTR sText:
|
|||
|
|
* Param const CSourceLineList * pLRList:
|
|||
|
|
* @Return bool:
|
|||
|
|
*/
|
|||
|
|
bool setScript(LPCSTR sText, CSourceLineList * pLRList);
|
|||
|
|
|
|||
|
|
//判断脚本中是否存在名为sFnName的函数
|
|||
|
|
bool FunctionExists(LPCSTR sFnName);
|
|||
|
|
/* 调用脚本函数,如果脚本调用成功,则函数返回true,否则返回false。
|
|||
|
|
* 当调用脚本失败时,函数返回false并在返回值列表中存储1个错误描述内容的字符串值
|
|||
|
|
* args 脚本参数列表
|
|||
|
|
* results 脚本返回值列表
|
|||
|
|
* nResultCount 期望的返回值数量,LUA_MULTRET表示不限制
|
|||
|
|
*/
|
|||
|
|
bool Call(LPCSTR sFnName, CScriptValueList &args, CScriptValueList &results, INT_PTR nResultCount = LUA_MULTRET);
|
|||
|
|
|
|||
|
|
bool CallModule(LPCSTR sModuleName,LPCSTR sFnName, CScriptValueList &args, CScriptValueList &results, INT_PTR nResultCount = LUA_MULTRET);
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments: 从文件加载脚本
|
|||
|
|
* Param LPCTSTR sFilePath:
|
|||
|
|
* @Return bool:
|
|||
|
|
*/
|
|||
|
|
bool LoadScript(LPCTSTR sFilePath);
|
|||
|
|
|
|||
|
|
//#ifdef _DEBUG
|
|||
|
|
/*
|
|||
|
|
* Comments: 保存脚本函数调用性能统计数据到文件
|
|||
|
|
* Param LPCTSTR sFilePath:
|
|||
|
|
* @Return void:
|
|||
|
|
*/
|
|||
|
|
void SaveProfiler(LPCTSTR sFilePath);
|
|||
|
|
|
|||
|
|
/*
|
|||
|
|
* Comments:执行一条或数条函数调用,声明等
|
|||
|
|
* Param LPCTSTR sFilePath:
|
|||
|
|
* @Return bool:
|
|||
|
|
*/
|
|||
|
|
bool LoadBuff(LPCTSTR sFilePath);
|
|||
|
|
|
|||
|
|
//#endif
|
|||
|
|
|
|||
|
|
VOID SetEntity(CEntity* pEntity){m_pNpcObject = pEntity;}
|
|||
|
|
|
|||
|
|
//检查脚本错误
|
|||
|
|
bool CheckScript(LPCTSTR sFilePath, char* sErr= NULL);
|
|||
|
|
|
|||
|
|
lua_State* GetLuaState()
|
|||
|
|
{
|
|||
|
|
return m_pLua;
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
//脚本调用错误处理分派函数
|
|||
|
|
static int ScriptCallErrorDispatcher(lua_State *L);
|
|||
|
|
protected:
|
|||
|
|
/* 以下函数集为本类中提供的虚函数集,如有必要,子类可以覆盖这些函数 */
|
|||
|
|
//调用脚本函数错误的处理函数
|
|||
|
|
virtual void ScriptCallError(LPCSTR sFnName, CScriptValueList &results);
|
|||
|
|
//脚本调用错误处理函数,函数应当返回处理错误后向lua中返回了多少个值
|
|||
|
|
virtual int HandleCallError();
|
|||
|
|
protected:
|
|||
|
|
/* 下列函数集为覆盖父类的相关处理函数 */
|
|||
|
|
//创建脚本虚拟机
|
|||
|
|
virtual lua_State* createLuaVM();
|
|||
|
|
//打开基础库。默认会打开base、string、math以及table库。返回true表示成功。
|
|||
|
|
virtual bool openBaseLibs();
|
|||
|
|
//注册本地函数库。返回true表示成功。
|
|||
|
|
virtual bool registLocalLibs();
|
|||
|
|
//调用脚本的初始化函数。函数返回true表示没有错误发生。本类未提供调用初始化函数的实际功能。
|
|||
|
|
virtual bool callInit();
|
|||
|
|
//调用脚本的卸载函数。函数返回true表示没有错误发生。本类未提供调用卸载函数的实际功能。
|
|||
|
|
virtual bool callFinal();
|
|||
|
|
//显示脚本错误内容
|
|||
|
|
virtual void showError(LPCTSTR sError);
|
|||
|
|
|
|||
|
|
protected:
|
|||
|
|
CEntity* m_pNpcObject; //脚本对象所属的角色对象,例如NPC对象
|
|||
|
|
LPCSTR m_sLastCall; //当前调用的脚本函数名称,再函数调用完成后指针不再有效
|
|||
|
|
CSourceLineList m_LRList; //原始代码行记录表,用于获取更精确的函数代码位置
|
|||
|
|
//#ifdef _DEBUG
|
|||
|
|
CCustomLuaProfiler m_Profiler; //脚本函数调用性能统计
|
|||
|
|
|
|||
|
|
//#endif
|
|||
|
|
};
|