Files

113 lines
3.9 KiB
C
Raw Permalink Normal View History

2025-01-09 17:45:40 +08:00
#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
};