cPlugin_NewLua is now completely rewritten to use templated LuaState calls.
parent
9e34a878ef
commit
cc920ea929
|
@ -200,7 +200,25 @@ bool cLuaState::LoadFile(const AString & a_FileName)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cLuaState::PushFunction(const char * a_FunctionName, bool a_ShouldLogFailure /* = true */)
|
bool cLuaState::HasFunction(const char * a_FunctionName)
|
||||||
|
{
|
||||||
|
if (!IsValid())
|
||||||
|
{
|
||||||
|
// This happens if cPlugin::Initialize() fails with an error
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
lua_getglobal(m_LuaState, a_FunctionName);
|
||||||
|
bool res = (!lua_isnil(m_LuaState, -1) && lua_isfunction(m_LuaState, -1));
|
||||||
|
lua_pop(m_LuaState, 1);
|
||||||
|
return res;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
bool cLuaState::PushFunction(const char * a_FunctionName)
|
||||||
{
|
{
|
||||||
ASSERT(m_NumCurrentFunctionArgs == -1); // If not, there's already something pushed onto the stack
|
ASSERT(m_NumCurrentFunctionArgs == -1); // If not, there's already something pushed onto the stack
|
||||||
|
|
||||||
|
@ -212,11 +230,8 @@ bool cLuaState::PushFunction(const char * a_FunctionName, bool a_ShouldLogFailur
|
||||||
|
|
||||||
lua_getglobal(m_LuaState, a_FunctionName);
|
lua_getglobal(m_LuaState, a_FunctionName);
|
||||||
if (!lua_isfunction(m_LuaState, -1))
|
if (!lua_isfunction(m_LuaState, -1))
|
||||||
{
|
|
||||||
if (a_ShouldLogFailure)
|
|
||||||
{
|
{
|
||||||
LOGWARNING("Error in %s: Could not find function %s()", m_SubsystemName.c_str(), a_FunctionName);
|
LOGWARNING("Error in %s: Could not find function %s()", m_SubsystemName.c_str(), a_FunctionName);
|
||||||
}
|
|
||||||
lua_pop(m_LuaState, 1);
|
lua_pop(m_LuaState, 1);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -229,7 +244,7 @@ bool cLuaState::PushFunction(const char * a_FunctionName, bool a_ShouldLogFailur
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cLuaState::PushFunctionFromRegistry(int a_FnRef)
|
bool cLuaState::PushFunction(int a_FnRef)
|
||||||
{
|
{
|
||||||
ASSERT(IsValid());
|
ASSERT(IsValid());
|
||||||
ASSERT(m_NumCurrentFunctionArgs == -1); // If not, there's already something pushed onto the stack
|
ASSERT(m_NumCurrentFunctionArgs == -1); // If not, there's already something pushed onto the stack
|
||||||
|
@ -545,6 +560,45 @@ void cLuaState::Push(TakeDamageInfo * a_TDI)
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cLuaState::Push(cWindow * a_Window)
|
||||||
|
{
|
||||||
|
ASSERT(IsValid());
|
||||||
|
ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
|
||||||
|
|
||||||
|
tolua_pushusertype(m_LuaState, a_Window, "cWindow");
|
||||||
|
m_NumCurrentFunctionArgs += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cLuaState::Push(cPlugin_NewLua * a_Plugin)
|
||||||
|
{
|
||||||
|
ASSERT(IsValid());
|
||||||
|
ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
|
||||||
|
|
||||||
|
tolua_pushusertype(m_LuaState, a_Plugin, "cPlugin_NewLua");
|
||||||
|
m_NumCurrentFunctionArgs += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
void cLuaState::Push(const HTTPRequest * a_Request)
|
||||||
|
{
|
||||||
|
ASSERT(IsValid());
|
||||||
|
ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
|
||||||
|
|
||||||
|
tolua_pushusertype(m_LuaState, (void *)a_Request, "HTTPRequest");
|
||||||
|
m_NumCurrentFunctionArgs += 1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
void cLuaState::GetReturn(int a_StackPos, bool & a_ReturnedVal)
|
void cLuaState::GetReturn(int a_StackPos, bool & a_ReturnedVal)
|
||||||
{
|
{
|
||||||
a_ReturnedVal = (tolua_toboolean(m_LuaState, a_StackPos, a_ReturnedVal ? 1 : 0) > 0);
|
a_ReturnedVal = (tolua_toboolean(m_LuaState, a_StackPos, a_ReturnedVal ? 1 : 0) > 0);
|
||||||
|
|
|
@ -45,6 +45,9 @@ class cChunkDesc;
|
||||||
class cCraftingGrid;
|
class cCraftingGrid;
|
||||||
class cCraftingRecipe;
|
class cCraftingRecipe;
|
||||||
struct TakeDamageInfo;
|
struct TakeDamageInfo;
|
||||||
|
class cWindow;
|
||||||
|
class cPlugin_NewLua;
|
||||||
|
struct HTTPRequest;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -120,16 +123,18 @@ public:
|
||||||
*/
|
*/
|
||||||
bool LoadFile(const AString & a_FileName);
|
bool LoadFile(const AString & a_FileName);
|
||||||
|
|
||||||
|
/// Returns true if a_FunctionName is a valid Lua function that can be called
|
||||||
|
bool HasFunction(const char * a_FunctionName);
|
||||||
|
|
||||||
/** Pushes the function of the specified name onto the stack.
|
/** Pushes the function of the specified name onto the stack.
|
||||||
Returns true if successful.
|
Returns true if successful. Logs a warning on failure (incl. m_SubsystemName)
|
||||||
If a_ShouldLogFail is true, logs a warning on failure (incl. m_SubsystemName)
|
|
||||||
*/
|
*/
|
||||||
bool PushFunction(const char * a_FunctionName, bool a_ShouldLogFailure = true);
|
bool PushFunction(const char * a_FunctionName);
|
||||||
|
|
||||||
/** Pushes a function that has been saved into the global registry, identified by a_FnRef.
|
/** Pushes a function that has been saved into the global registry, identified by a_FnRef.
|
||||||
Returns true if successful. Logs a warning on failure
|
Returns true if successful. Logs a warning on failure
|
||||||
*/
|
*/
|
||||||
bool PushFunctionFromRegistry(int a_FnRef);
|
bool PushFunction(int a_FnRef);
|
||||||
|
|
||||||
/** Pushes a function that is stored in a table ref.
|
/** Pushes a function that is stored in a table ref.
|
||||||
Returns true if successful, false on failure. Doesn't log failure.
|
Returns true if successful, false on failure. Doesn't log failure.
|
||||||
|
@ -159,12 +164,27 @@ public:
|
||||||
void Push(const cCraftingGrid * a_Grid);
|
void Push(const cCraftingGrid * a_Grid);
|
||||||
void Push(const cCraftingRecipe * a_Recipe);
|
void Push(const cCraftingRecipe * a_Recipe);
|
||||||
void Push(TakeDamageInfo * a_TDI);
|
void Push(TakeDamageInfo * a_TDI);
|
||||||
|
void Push(cWindow * a_Window);
|
||||||
|
void Push(cPlugin_NewLua * a_Plugin);
|
||||||
|
void Push(const HTTPRequest * a_Request);
|
||||||
|
|
||||||
|
/// Call any 0-param 0-return Lua function in a single line:
|
||||||
|
template <typename FnT>
|
||||||
|
bool Call(FnT a_FnName)
|
||||||
|
{
|
||||||
|
if (!PushFunction(a_FnName))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
return CallFunction(0);
|
||||||
|
}
|
||||||
|
|
||||||
/// Call any 1-param 0-return Lua function in a single line:
|
/// Call any 1-param 0-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
|
typename FnT,
|
||||||
typename ArgT1
|
typename ArgT1
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -174,11 +194,26 @@ public:
|
||||||
return CallFunction(0);
|
return CallFunction(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Call any 2-param 0-return Lua function in a single line:
|
||||||
|
template<
|
||||||
|
typename FnT, typename ArgT1, typename ArgT2
|
||||||
|
>
|
||||||
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2)
|
||||||
|
{
|
||||||
|
if (!PushFunction(a_FnName))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Push(a_Arg1);
|
||||||
|
Push(a_Arg2);
|
||||||
|
return CallFunction(0);
|
||||||
|
}
|
||||||
|
|
||||||
/// Call any 1-param 1-return Lua function in a single line:
|
/// Call any 1-param 1-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
typename ArgT1, typename RetT1
|
typename FnT, typename ArgT1, typename RetT1
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1, const cRet & a_Mark, RetT1 & a_Ret1)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, const cRet & a_Mark, RetT1 & a_Ret1)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -196,9 +231,9 @@ public:
|
||||||
|
|
||||||
/// Call any 2-param 1-return Lua function in a single line:
|
/// Call any 2-param 1-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
typename ArgT1, typename ArgT2, typename RetT1
|
typename FnT, typename ArgT1, typename ArgT2, typename RetT1
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, const cRet & a_Mark, RetT1 & a_Ret1)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, const cRet & a_Mark, RetT1 & a_Ret1)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -217,9 +252,9 @@ public:
|
||||||
|
|
||||||
/// Call any 3-param 1-return Lua function in a single line:
|
/// Call any 3-param 1-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
typename ArgT1, typename ArgT2, typename ArgT3, typename RetT1
|
typename FnT, typename ArgT1, typename ArgT2, typename ArgT3, typename RetT1
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, const cRet & a_Mark, RetT1 & a_Ret1)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, const cRet & a_Mark, RetT1 & a_Ret1)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -239,9 +274,9 @@ public:
|
||||||
|
|
||||||
/// Call any 4-param 1-return Lua function in a single line:
|
/// Call any 4-param 1-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename RetT1
|
typename FnT, typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename RetT1
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, const cRet & a_Mark, RetT1 & a_Ret1)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, const cRet & a_Mark, RetT1 & a_Ret1)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -262,9 +297,9 @@ public:
|
||||||
|
|
||||||
/// Call any 5-param 1-return Lua function in a single line:
|
/// Call any 5-param 1-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5, typename RetT1
|
typename FnT, typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5, typename RetT1
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, const cRet & a_Mark, RetT1 & a_Ret1)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, const cRet & a_Mark, RetT1 & a_Ret1)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -286,10 +321,10 @@ public:
|
||||||
|
|
||||||
/// Call any 6-param 1-return Lua function in a single line:
|
/// Call any 6-param 1-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5, typename ArgT6,
|
typename FnT, typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5, typename ArgT6,
|
||||||
typename RetT1
|
typename RetT1
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, ArgT6 a_Arg6, const cRet & a_Mark, RetT1 & a_Ret1)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, ArgT6 a_Arg6, const cRet & a_Mark, RetT1 & a_Ret1)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -312,10 +347,10 @@ public:
|
||||||
|
|
||||||
/// Call any 7-param 1-return Lua function in a single line:
|
/// Call any 7-param 1-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5, typename ArgT6,
|
typename FnT, typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5, typename ArgT6,
|
||||||
typename ArgT7, typename RetT1
|
typename ArgT7, typename RetT1
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, ArgT6 a_Arg6, ArgT7 a_Arg7, const cRet & a_Mark, RetT1 & a_Ret1)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, ArgT6 a_Arg6, ArgT7 a_Arg7, const cRet & a_Mark, RetT1 & a_Ret1)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -339,10 +374,10 @@ public:
|
||||||
|
|
||||||
/// Call any 8-param 1-return Lua function in a single line:
|
/// Call any 8-param 1-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5, typename ArgT6,
|
typename FnT, typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5, typename ArgT6,
|
||||||
typename ArgT7, typename ArgT8, typename RetT1
|
typename ArgT7, typename ArgT8, typename RetT1
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, ArgT6 a_Arg6, ArgT7 a_Arg7, ArgT8 a_Arg8, const cRet & a_Mark, RetT1 & a_Ret1)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, ArgT6 a_Arg6, ArgT7 a_Arg7, ArgT8 a_Arg8, const cRet & a_Mark, RetT1 & a_Ret1)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -367,10 +402,10 @@ public:
|
||||||
|
|
||||||
/// Call any 9-param 1-return Lua function in a single line:
|
/// Call any 9-param 1-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5, typename ArgT6,
|
typename FnT, typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5, typename ArgT6,
|
||||||
typename ArgT7, typename ArgT8, typename ArgT9, typename RetT1
|
typename ArgT7, typename ArgT8, typename ArgT9, typename RetT1
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, ArgT6 a_Arg6, ArgT7 a_Arg7, ArgT8 a_Arg8, ArgT9 a_Arg9, const cRet & a_Mark, RetT1 & a_Ret1)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, ArgT6 a_Arg6, ArgT7 a_Arg7, ArgT8 a_Arg8, ArgT9 a_Arg9, const cRet & a_Mark, RetT1 & a_Ret1)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -396,10 +431,10 @@ public:
|
||||||
|
|
||||||
/// Call any 10-param 1-return Lua function in a single line:
|
/// Call any 10-param 1-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5, typename ArgT6,
|
typename FnT, typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5, typename ArgT6,
|
||||||
typename ArgT7, typename ArgT8, typename ArgT9, typename ArgT10, typename RetT1
|
typename ArgT7, typename ArgT8, typename ArgT9, typename ArgT10, typename RetT1
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, ArgT6 a_Arg6, ArgT7 a_Arg7, ArgT8 a_Arg8, ArgT9 a_Arg9, ArgT10 a_Arg10, const cRet & a_Mark, RetT1 & a_Ret1)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, ArgT6 a_Arg6, ArgT7 a_Arg7, ArgT8 a_Arg8, ArgT9 a_Arg9, ArgT10 a_Arg10, const cRet & a_Mark, RetT1 & a_Ret1)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -424,11 +459,32 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// Call any 1-param 2-return Lua function in a single line:
|
||||||
|
template<
|
||||||
|
typename FnT, typename ArgT1, typename RetT1, typename RetT2
|
||||||
|
>
|
||||||
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, const cRet & a_Mark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
||||||
|
{
|
||||||
|
if (!PushFunction(a_FnName))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
Push(a_Arg1);
|
||||||
|
if (!CallFunction(2))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
GetReturn(-2, a_Ret1);
|
||||||
|
GetReturn(-1, a_Ret2);
|
||||||
|
lua_pop(m_LuaState, 2);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
/// Call any 2-param 2-return Lua function in a single line:
|
/// Call any 2-param 2-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
typename ArgT1, typename ArgT2, typename RetT1, typename RetT2
|
typename FnT, typename ArgT1, typename ArgT2, typename RetT1, typename RetT2
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, const cRet & a_Mark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, const cRet & a_Mark, RetT1 & a_Ret1, RetT2 & a_Ret2)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -448,11 +504,11 @@ public:
|
||||||
|
|
||||||
/// Call any 9-param 5-return Lua function in a single line:
|
/// Call any 9-param 5-return Lua function in a single line:
|
||||||
template<
|
template<
|
||||||
typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5,
|
typename FnT, typename ArgT1, typename ArgT2, typename ArgT3, typename ArgT4, typename ArgT5,
|
||||||
typename ArgT6, typename ArgT7, typename ArgT8, typename ArgT9,
|
typename ArgT6, typename ArgT7, typename ArgT8, typename ArgT9,
|
||||||
typename RetT1, typename RetT2, typename RetT3, typename RetT4, typename RetT5
|
typename RetT1, typename RetT2, typename RetT3, typename RetT4, typename RetT5
|
||||||
>
|
>
|
||||||
bool Call(const char * a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, ArgT6 a_Arg6, ArgT7 a_Arg7, ArgT8 a_Arg8, ArgT9 a_Arg9, const cRet & a_Mark, RetT1 & a_Ret1, RetT2 & a_Ret2, RetT3 & a_Ret3, RetT4 & a_Ret4, RetT5 & a_Ret5)
|
bool Call(FnT a_FnName, ArgT1 a_Arg1, ArgT2 a_Arg2, ArgT3 a_Arg3, ArgT4 a_Arg4, ArgT5 a_Arg5, ArgT6 a_Arg6, ArgT7 a_Arg7, ArgT8 a_Arg8, ArgT9 a_Arg9, const cRet & a_Mark, RetT1 & a_Ret1, RetT2 & a_Ret2, RetT3 & a_Ret3, RetT4 & a_Ret4, RetT5 & a_Ret5)
|
||||||
{
|
{
|
||||||
if (!PushFunction(a_FnName))
|
if (!PushFunction(a_FnName))
|
||||||
{
|
{
|
||||||
|
@ -480,6 +536,7 @@ public:
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/// Retrieve value returned at a_StackPos, if it is a valid bool. If not, a_ReturnedVal is unchanged
|
/// Retrieve value returned at a_StackPos, if it is a valid bool. If not, a_ReturnedVal is unchanged
|
||||||
void GetReturn(int a_StackPos, bool & a_ReturnedVal);
|
void GetReturn(int a_StackPos, bool & a_ReturnedVal);
|
||||||
|
|
||||||
|
|
|
@ -72,29 +72,22 @@ bool cPlugin_NewLua::Initialize(void)
|
||||||
} // for itr - Files[]
|
} // for itr - Files[]
|
||||||
|
|
||||||
// Call intialize function
|
// Call intialize function
|
||||||
if (!m_LuaState.PushFunction("Initialize"))
|
bool res = false;
|
||||||
|
if (!m_LuaState.Call("Initialize", this, cLuaState::Return, res))
|
||||||
{
|
{
|
||||||
|
LOGWARNING("Error in plugin %s: Cannot call the Initialize() function. Plugin is temporarily disabled.", GetName().c_str());
|
||||||
m_LuaState.Close();
|
m_LuaState.Close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_LuaState.PushUserType(this, "cPlugin_NewLua");
|
if (!res)
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(1))
|
|
||||||
{
|
{
|
||||||
|
LOGINFO("Plugin %s: Initialize() call failed, plugin is temporarily disabled.", GetName().c_str());
|
||||||
m_LuaState.Close();
|
m_LuaState.Close();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lua_isboolean(m_LuaState, -1))
|
return true;
|
||||||
{
|
|
||||||
LOGWARNING("Error in plugin %s: Initialize() must return a boolean value!", GetName().c_str());
|
|
||||||
m_LuaState.Close();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bSuccess = (tolua_toboolean(m_LuaState, -1, 0) > 0);
|
|
||||||
return bSuccess;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -104,12 +97,11 @@ bool cPlugin_NewLua::Initialize(void)
|
||||||
void cPlugin_NewLua::OnDisable(void)
|
void cPlugin_NewLua::OnDisable(void)
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
if (!m_LuaState.PushFunction("OnDisable", false)) // false = don't log error if not found
|
if (!m_LuaState.HasFunction("OnDisable"))
|
||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
m_LuaState.Call("OnDisable");
|
||||||
m_LuaState.CallFunction(0);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -144,31 +136,6 @@ bool cPlugin_NewLua::OnChat(cPlayer * a_Player, AString & a_Message)
|
||||||
bool res = false;
|
bool res = false;
|
||||||
m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CHAT), a_Player, a_Message, cLuaState::Return, res, a_Message);
|
m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CHAT), a_Player, a_Message, cLuaState::Return, res, a_Message);
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
/*
|
|
||||||
const char * FnName = GetHookFnName(cPluginManager::HOOK_CHAT);
|
|
||||||
ASSERT(FnName != NULL);
|
|
||||||
if (!m_LuaState.PushFunction(FnName))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_LuaState.PushObject(a_Player);
|
|
||||||
m_LuaState.PushString(a_Message.c_str());
|
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(2))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bRetVal = (tolua_toboolean(m_LuaState, -2, 0) > 0);
|
|
||||||
if (lua_isstring(m_LuaState, -1))
|
|
||||||
{
|
|
||||||
a_Message = tolua_tostring(m_LuaState, -1, "");
|
|
||||||
}
|
|
||||||
lua_pop(m_LuaState, 2);
|
|
||||||
return bRetVal;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -179,33 +146,8 @@ bool cPlugin_NewLua::OnChunkAvailable(cWorld * a_World, int a_ChunkX, int a_Chun
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
bool res = false;
|
bool res = false;
|
||||||
if (!m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CHUNK_AVAILABLE), a_World, a_ChunkX, a_ChunkZ, cLuaState::Return, res))
|
m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CHUNK_AVAILABLE), a_World, a_ChunkX, a_ChunkZ, cLuaState::Return, res);
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
/*
|
|
||||||
const char * FnName = GetHookFnName(cPluginManager::HOOK_CHUNK_AVAILABLE);
|
|
||||||
ASSERT(FnName != NULL);
|
|
||||||
if (!m_LuaState.PushFunction(FnName))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_LuaState.PushObject(a_World);
|
|
||||||
m_LuaState.PushNumber(a_ChunkX);
|
|
||||||
m_LuaState.PushNumber(a_ChunkZ);
|
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(1))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bRetVal = (tolua_toboolean(m_LuaState, -1, 0) > 0);
|
|
||||||
lua_pop(m_LuaState, 1);
|
|
||||||
return bRetVal;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -218,29 +160,6 @@ bool cPlugin_NewLua::OnChunkGenerated(cWorld * a_World, int a_ChunkX, int a_Chun
|
||||||
bool res = false;
|
bool res = false;
|
||||||
m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CHUNK_GENERATED), a_World, a_ChunkX, a_ChunkZ, a_ChunkDesc, cLuaState::Return, res);
|
m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CHUNK_GENERATED), a_World, a_ChunkX, a_ChunkZ, a_ChunkDesc, cLuaState::Return, res);
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
/*
|
|
||||||
const char * FnName = GetHookFnName(cPluginManager::HOOK_CHUNK_GENERATED);
|
|
||||||
ASSERT(FnName != NULL);
|
|
||||||
if (!m_LuaState.PushFunction(FnName))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_LuaState.PushObject(a_World);
|
|
||||||
m_LuaState.PushNumber(a_ChunkX);
|
|
||||||
m_LuaState.PushNumber(a_ChunkZ);
|
|
||||||
m_LuaState.PushUserType(a_ChunkDesc, "cChunkDesc");
|
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(1))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bRetVal = (tolua_toboolean(m_LuaState, -1, 0) > 0);
|
|
||||||
lua_pop(m_LuaState, 1);
|
|
||||||
return bRetVal;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -253,29 +172,6 @@ bool cPlugin_NewLua::OnChunkGenerating(cWorld * a_World, int a_ChunkX, int a_Chu
|
||||||
bool res = false;
|
bool res = false;
|
||||||
m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CHUNK_GENERATING), a_World, a_ChunkX, a_ChunkZ, a_ChunkDesc, cLuaState::Return, res);
|
m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CHUNK_GENERATING), a_World, a_ChunkX, a_ChunkZ, a_ChunkDesc, cLuaState::Return, res);
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
/*
|
|
||||||
const char * FnName = GetHookFnName(cPluginManager::HOOK_CHUNK_GENERATING);
|
|
||||||
ASSERT(FnName != NULL);
|
|
||||||
if (!m_LuaState.PushFunction(FnName))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_LuaState.PushObject(a_World);
|
|
||||||
m_LuaState.PushNumber(a_ChunkX);
|
|
||||||
m_LuaState.PushNumber(a_ChunkZ);
|
|
||||||
m_LuaState.PushUserType(a_ChunkDesc, "cChunkDesc");
|
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(1))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bRetVal = (tolua_toboolean(m_LuaState, -1, 0) > 0);
|
|
||||||
lua_pop(m_LuaState, 1);
|
|
||||||
return bRetVal;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -286,33 +182,8 @@ bool cPlugin_NewLua::OnChunkUnloaded(cWorld * a_World, int a_ChunkX, int a_Chunk
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
bool res = false;
|
bool res = false;
|
||||||
if (!m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CHUNK_UNLOADED), a_World, a_ChunkX, a_ChunkZ, cLuaState::Return, res))
|
m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CHUNK_UNLOADED), a_World, a_ChunkX, a_ChunkZ, cLuaState::Return, res);
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
/*
|
|
||||||
const char * FnName = GetHookFnName(cPluginManager::HOOK_CHUNK_UNLOADED);
|
|
||||||
ASSERT(FnName != NULL);
|
|
||||||
if (!m_LuaState.PushFunction(FnName))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_LuaState.PushObject(a_World);
|
|
||||||
m_LuaState.PushNumber(a_ChunkX);
|
|
||||||
m_LuaState.PushNumber(a_ChunkZ);
|
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(1))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bRetVal = (tolua_toboolean(m_LuaState, -1, 0) > 0);
|
|
||||||
lua_pop(m_LuaState, 1);
|
|
||||||
return bRetVal;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -323,34 +194,9 @@ bool cPlugin_NewLua::OnChunkUnloading(cWorld * a_World, int a_ChunkX, int a_Chun
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
bool res = false;
|
bool res = false;
|
||||||
if (!m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CHUNK_UNLOADING), a_World, a_ChunkX, a_ChunkZ, cLuaState::Return, res))
|
m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CHUNK_UNLOADING), a_World, a_ChunkX, a_ChunkZ, cLuaState::Return, res);
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
/*
|
|
||||||
const char * FnName = GetHookFnName(cPluginManager::HOOK_CHUNK_UNLOADING);
|
|
||||||
ASSERT(FnName != NULL);
|
|
||||||
if (!m_LuaState.PushFunction(FnName))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_LuaState.PushObject(a_World);
|
|
||||||
m_LuaState.PushNumber(a_ChunkX);
|
|
||||||
m_LuaState.PushNumber(a_ChunkZ);
|
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(1))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bRetVal = (tolua_toboolean(m_LuaState, -1, 0) > 0);
|
|
||||||
lua_pop(m_LuaState, 1);
|
|
||||||
return bRetVal;
|
|
||||||
}
|
|
||||||
*/
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -362,27 +208,6 @@ bool cPlugin_NewLua::OnCollectingPickup(cPlayer * a_Player, cPickup * a_Pickup)
|
||||||
bool res = false;
|
bool res = false;
|
||||||
m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_COLLECTING_PICKUP), a_Player, a_Pickup, cLuaState::Return, res);
|
m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_COLLECTING_PICKUP), a_Player, a_Pickup, cLuaState::Return, res);
|
||||||
return res;
|
return res;
|
||||||
|
|
||||||
/*
|
|
||||||
const char * FnName = GetHookFnName(cPluginManager::HOOK_COLLECTING_PICKUP);
|
|
||||||
ASSERT(FnName != NULL);
|
|
||||||
if (!m_LuaState.PushFunction(FnName))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_LuaState.PushObject(a_Player);
|
|
||||||
m_LuaState.PushObject(a_Pickup);
|
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(1))
|
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bRetVal = (tolua_toboolean(m_LuaState, -1, 0) > 0);
|
|
||||||
lua_pop(m_LuaState, 1);
|
|
||||||
return bRetVal;
|
|
||||||
*/
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -393,10 +218,7 @@ bool cPlugin_NewLua::OnCraftingNoRecipe(const cPlayer * a_Player, const cCraftin
|
||||||
{
|
{
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
bool res = false;
|
bool res = false;
|
||||||
if (!m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CRAFTING_NO_RECIPE), (cPlayer *)a_Player, a_Grid, a_Recipe, cLuaState::Return, res))
|
m_LuaState.Call(GetHookFnName(cPluginManager::HOOK_CRAFTING_NO_RECIPE), (cPlayer *)a_Player, a_Grid, a_Recipe, cLuaState::Return, res);
|
||||||
{
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -823,29 +645,9 @@ bool cPlugin_NewLua::HandleCommand(const AStringVector & a_Split, cPlayer * a_Pl
|
||||||
}
|
}
|
||||||
|
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
|
bool res = false;
|
||||||
// Push the function to be called:
|
m_LuaState.Call(cmd->second, a_Split, a_Player, cLuaState::Return, res);
|
||||||
if (!m_LuaState.PushFunctionFromRegistry(cmd->second))
|
return res;
|
||||||
{
|
|
||||||
LOGWARNING("Command handler function for \"%s\" is invalid", cmd->first.c_str());
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
m_LuaState.Push(a_Split);
|
|
||||||
m_LuaState.Push(a_Player);
|
|
||||||
|
|
||||||
// Call function:
|
|
||||||
if (!m_LuaState.CallFunction(1))
|
|
||||||
{
|
|
||||||
LOGWARNING("LUA error in %s. Stack size: %i", __FUNCTION__, lua_gettop(m_LuaState));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle return value:
|
|
||||||
bool RetVal = (tolua_toboolean(m_LuaState, -1, 0) > 0);
|
|
||||||
lua_pop(m_LuaState, 1); // Pop return value
|
|
||||||
|
|
||||||
return RetVal;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -865,29 +667,14 @@ bool cPlugin_NewLua::HandleConsoleCommand(const AStringVector & a_Split, cComman
|
||||||
}
|
}
|
||||||
|
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
|
bool res = false;
|
||||||
// Push the function to be called:
|
AString str;
|
||||||
m_LuaState.PushFunctionFromRegistry(cmd->second);
|
m_LuaState.Call(cmd->second, a_Split, cLuaState::Return, res, str);
|
||||||
|
if (res && !str.empty())
|
||||||
m_LuaState.Push(a_Split);
|
|
||||||
|
|
||||||
// Call function:
|
|
||||||
if (!m_LuaState.CallFunction(2))
|
|
||||||
{
|
{
|
||||||
LOGWARNING("Lua error in %s. Stack size: %i", __FUNCTION__, lua_gettop(m_LuaState));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Handle return values:
|
|
||||||
if (lua_isstring(m_LuaState, -1))
|
|
||||||
{
|
|
||||||
AString str = tolua_tocppstring(m_LuaState, -1, "");
|
|
||||||
a_Output.Out(str);
|
a_Output.Out(str);
|
||||||
}
|
}
|
||||||
bool RetVal = (tolua_toboolean(m_LuaState, -2, 0) > 0);
|
return res;
|
||||||
lua_pop(m_LuaState, 2); // Pop return values
|
|
||||||
|
|
||||||
return RetVal;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -943,11 +730,7 @@ bool cPlugin_NewLua::CanAddHook(cPluginManager::PluginHook a_Hook)
|
||||||
}
|
}
|
||||||
|
|
||||||
// Check if the function is available
|
// Check if the function is available
|
||||||
lua_getglobal(m_LuaState, FnName);
|
if (m_LuaState.HasFunction(FnName))
|
||||||
bool res = lua_isfunction(m_LuaState, -1);
|
|
||||||
lua_pop(m_LuaState, 1);
|
|
||||||
|
|
||||||
if (res)
|
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1039,10 +822,12 @@ AString cPlugin_NewLua::HandleWebRequest(const HTTPRequest * a_Request )
|
||||||
|
|
||||||
std::pair< std::string, std::string > TabName = GetTabNameForRequest(a_Request);
|
std::pair< std::string, std::string > TabName = GetTabNameForRequest(a_Request);
|
||||||
std::string SafeTabName = TabName.second;
|
std::string SafeTabName = TabName.second;
|
||||||
if( SafeTabName.empty() )
|
if (SafeTabName.empty())
|
||||||
|
{
|
||||||
return "";
|
return "";
|
||||||
|
}
|
||||||
|
|
||||||
sWebPluginTab* Tab = 0;
|
sWebPluginTab * Tab = 0;
|
||||||
for (TabList::iterator itr = GetTabs().begin(); itr != GetTabs().end(); ++itr)
|
for (TabList::iterator itr = GetTabs().begin(); itr != GetTabs().end(); ++itr)
|
||||||
{
|
{
|
||||||
if ((*itr)->SafeTitle.compare(SafeTabName) == 0) // This is the one! Rawr
|
if ((*itr)->SafeTitle.compare(SafeTabName) == 0) // This is the one! Rawr
|
||||||
|
@ -1052,28 +837,15 @@ AString cPlugin_NewLua::HandleWebRequest(const HTTPRequest * a_Request )
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if( Tab )
|
if (Tab != NULL)
|
||||||
{
|
{
|
||||||
m_LuaState.PushFunctionFromRegistry(Tab->UserData);
|
AString Contents = Printf("WARNING: WebPlugin tab '%s' did not return a string!", Tab->Title.c_str());
|
||||||
|
if (!m_LuaState.Call(Tab->UserData, a_Request, cLuaState::Return, Contents))
|
||||||
// Push HTTPRequest
|
|
||||||
m_LuaState.PushUserType((void*)a_Request, "const HTTPRequest");
|
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(1))
|
|
||||||
{
|
{
|
||||||
return "Lua encountered error while processing the page request";
|
return "Lua encountered error while processing the page request";
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!lua_isstring(m_LuaState, -1))
|
RetVal += Contents;
|
||||||
{
|
|
||||||
LOGWARNING("WebPlugin tab '%s' did not return a string!", Tab->Title.c_str());
|
|
||||||
lua_pop(m_LuaState, 1); // Pop return value
|
|
||||||
return Printf("WARNING: WebPlugin tab '%s' did not return a string!", Tab->Title.c_str());
|
|
||||||
}
|
|
||||||
|
|
||||||
RetVal += tolua_tostring(m_LuaState, -1, 0);
|
|
||||||
lua_pop(m_LuaState, 1); // Pop return value
|
|
||||||
// LOGINFO("ok. Stack size: %i", lua_gettop(m_LuaState) );
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return RetVal;
|
return RetVal;
|
||||||
|
@ -1140,21 +912,9 @@ bool cPlugin_NewLua::CallbackWindowClosing(int a_FnRef, cWindow & a_Window, cPla
|
||||||
ASSERT(a_FnRef != LUA_REFNIL);
|
ASSERT(a_FnRef != LUA_REFNIL);
|
||||||
|
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
m_LuaState.PushFunctionFromRegistry(a_FnRef);
|
bool res;
|
||||||
m_LuaState.PushUserType(&a_Window, "cWindow");
|
m_LuaState.Call(a_FnRef, &a_Window, &a_Player, a_CanRefuse, cLuaState::Return, res);
|
||||||
m_LuaState.Push(&a_Player);
|
return res;
|
||||||
m_LuaState.Push(a_CanRefuse);
|
|
||||||
|
|
||||||
// Call function:
|
|
||||||
if (!m_LuaState.CallFunction(1))
|
|
||||||
{
|
|
||||||
LOGWARNING("LUA error in %s. Stack size: %i", __FUNCTION__, lua_gettop(m_LuaState));
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool bRetVal = (tolua_toboolean(m_LuaState, -1, false) > 0);
|
|
||||||
lua_pop(m_LuaState, 1);
|
|
||||||
return bRetVal;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1166,15 +926,7 @@ void cPlugin_NewLua::CallbackWindowSlotChanged(int a_FnRef, cWindow & a_Window,
|
||||||
ASSERT(a_FnRef != LUA_REFNIL);
|
ASSERT(a_FnRef != LUA_REFNIL);
|
||||||
|
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
m_LuaState.PushFunctionFromRegistry(a_FnRef);
|
m_LuaState.Call(a_FnRef, &a_Window, a_SlotNum);
|
||||||
m_LuaState.PushUserType(&a_Window, "cWindow");
|
|
||||||
m_LuaState.Push(a_SlotNum);
|
|
||||||
|
|
||||||
// Call function:
|
|
||||||
if (!m_LuaState.CallFunction(0))
|
|
||||||
{
|
|
||||||
LOGWARNING("LUA error in %s. Stack size: %i", __FUNCTION__, lua_gettop(m_LuaState));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue