summaryrefslogtreecommitdiffstats
path: root/src/Bindings/PluginLua.cpp
diff options
context:
space:
mode:
authorTycho <work.tycho+git@gmail.com>2014-01-22 18:13:12 +0100
committerTycho <work.tycho+git@gmail.com>2014-01-22 18:13:12 +0100
commitc832fbeb8e3f06849adc6bf02f2310c3f0331bc8 (patch)
treeb990d233e6d63ecc398f77354975a01bf47466c5 /src/Bindings/PluginLua.cpp
parentActually implemented interfaces (diff)
parentMerge pull request #574 from tonibm19/patch-1 (diff)
downloadcuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.tar
cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.tar.gz
cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.tar.bz2
cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.tar.lz
cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.tar.xz
cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.tar.zst
cuberite-c832fbeb8e3f06849adc6bf02f2310c3f0331bc8.zip
Diffstat (limited to 'src/Bindings/PluginLua.cpp')
-rw-r--r--src/Bindings/PluginLua.cpp34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/Bindings/PluginLua.cpp b/src/Bindings/PluginLua.cpp
index 4c4664815..1d8c4c6ed 100644
--- a/src/Bindings/PluginLua.cpp
+++ b/src/Bindings/PluginLua.cpp
@@ -1469,6 +1469,40 @@ bool cPluginLua::AddHookRef(int a_HookType, int a_FnRefIdx)
+int cPluginLua::CallFunctionFromForeignState(
+ const AString & a_FunctionName,
+ cLuaState & a_ForeignState,
+ int a_ParamStart,
+ int a_ParamEnd
+)
+{
+ cCSLock Lock(m_CriticalSection);
+
+ // Call the function:
+ int NumReturns = m_LuaState.CallFunctionWithForeignParams(a_FunctionName, a_ForeignState, a_ParamStart, a_ParamEnd);
+ if (NumReturns < 0)
+ {
+ // The call has failed, an error has already been output to the log, so just silently bail out with the same error
+ return NumReturns;
+ }
+
+ // Copy all the return values:
+ int Top = lua_gettop(m_LuaState);
+ int res = a_ForeignState.CopyStackFrom(m_LuaState, Top - NumReturns + 1, Top);
+
+ // Remove the return values off this stack:
+ if (NumReturns > 0)
+ {
+ lua_pop(m_LuaState, NumReturns);
+ }
+
+ return res;
+}
+
+
+
+
+
AString cPluginLua::HandleWebRequest(const HTTPRequest * a_Request )
{
cCSLock Lock(m_CriticalSection);