summaryrefslogtreecommitdiffstats
path: root/source
diff options
context:
space:
mode:
Diffstat (limited to 'source')
-rw-r--r--source/LuaState.cpp188
-rw-r--r--source/LuaState.h50
-rw-r--r--source/Plugin_NewLua.cpp498
3 files changed, 459 insertions, 277 deletions
diff --git a/source/LuaState.cpp b/source/LuaState.cpp
index 117023755..e60a0f80c 100644
--- a/source/LuaState.cpp
+++ b/source/LuaState.cpp
@@ -38,7 +38,8 @@ extern "C"
cLuaState::cLuaState(const AString & a_SubsystemName) :
m_LuaState(NULL),
m_IsOwned(false),
- m_SubsystemName(a_SubsystemName)
+ m_SubsystemName(a_SubsystemName),
+ m_NumCurrentFunctionArgs(-1)
{
}
@@ -49,7 +50,8 @@ cLuaState::cLuaState(const AString & a_SubsystemName) :
cLuaState::cLuaState(lua_State * a_AttachState) :
m_LuaState(a_AttachState),
m_IsOwned(false),
- m_SubsystemName("<attached>")
+ m_SubsystemName("<attached>"),
+ m_NumCurrentFunctionArgs(-1)
{
}
@@ -187,6 +189,8 @@ bool cLuaState::LoadFile(const AString & a_FileName)
bool cLuaState::PushFunction(const char * a_FunctionName, bool a_ShouldLogFailure /* = true */)
{
+ ASSERT(m_NumCurrentFunctionArgs == -1); // If not, there's already something pushed onto the stack
+
if (!IsValid())
{
// This happens if cPlugin::Initialize() fails with an error
@@ -203,6 +207,8 @@ bool cLuaState::PushFunction(const char * a_FunctionName, bool a_ShouldLogFailur
lua_pop(m_LuaState, 1);
return false;
}
+ m_CurrentFunctionName.assign(a_FunctionName);
+ m_NumCurrentFunctionArgs = 0;
return true;
}
@@ -212,12 +218,17 @@ bool cLuaState::PushFunction(const char * a_FunctionName, bool a_ShouldLogFailur
bool cLuaState::PushFunctionFromRegistry(int a_FnRef)
{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs == -1); // If not, there's already something pushed onto the stack
+
lua_rawgeti(m_LuaState, LUA_REGISTRYINDEX, a_FnRef); // same as lua_getref()
if (!lua_isfunction(m_LuaState, -1))
{
lua_pop(m_LuaState, 1);
return false;
}
+ m_CurrentFunctionName = "<callback>";
+ m_NumCurrentFunctionArgs = 0;
return true;
}
@@ -227,6 +238,9 @@ bool cLuaState::PushFunctionFromRegistry(int a_FnRef)
void cLuaState::PushStringVector(const AStringVector & a_Vector)
{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
lua_createtable(m_LuaState, a_Vector.size(), 0);
int newTable = lua_gettop(m_LuaState);
int index = 1;
@@ -235,22 +249,184 @@ void cLuaState::PushStringVector(const AStringVector & a_Vector)
tolua_pushstring(m_LuaState, itr->c_str());
lua_rawseti(m_LuaState, newTable, index);
}
+ m_NumCurrentFunctionArgs += 1;
+}
+
+
+
+
+
+void cLuaState::PushUserType(void * a_Object, const char * a_Type)
+{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
+ tolua_pushusertype(m_LuaState, a_Object, a_Type);
+ m_NumCurrentFunctionArgs += 1;
+}
+
+
+
+
+
+void cLuaState::PushNumber(int a_Value)
+{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
+ tolua_pushnumber(m_LuaState, a_Value);
+ m_NumCurrentFunctionArgs += 1;
+}
+
+
+
+
+
+void cLuaState::PushNumber(double a_Value)
+{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
+ tolua_pushnumber(m_LuaState, a_Value);
+ m_NumCurrentFunctionArgs += 1;
+}
+
+
+
+
+
+void cLuaState::PushString(const char * a_Value)
+{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
+ tolua_pushstring(m_LuaState, a_Value);
+ m_NumCurrentFunctionArgs += 1;
+}
+
+
+
+
+
+void cLuaState::PushBool(bool a_Value)
+{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
+ tolua_pushboolean(m_LuaState, a_Value ? 1 : 0);
+ m_NumCurrentFunctionArgs += 1;
+}
+
+
+
+
+
+void cLuaState::PushObject(cWorld * a_World)
+{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
+ tolua_pushusertype(m_LuaState, a_World, "cWorld");
+ m_NumCurrentFunctionArgs += 1;
+}
+
+
+
+
+
+void cLuaState::PushObject(cPlayer * a_Player)
+{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
+ tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
+ m_NumCurrentFunctionArgs += 1;
+}
+
+
+
+
+
+void cLuaState::PushObject(cEntity * a_Entity)
+{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
+ tolua_pushusertype(m_LuaState, a_Entity, "cEntity");
+ m_NumCurrentFunctionArgs += 1;
+}
+
+
+
+
+
+void cLuaState::PushObject(cItem * a_Item)
+{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
+ tolua_pushusertype(m_LuaState, a_Item, "cItem");
+ m_NumCurrentFunctionArgs += 1;
+}
+
+
+
+
+
+void cLuaState::PushObject(cItems * a_Items)
+{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
+ tolua_pushusertype(m_LuaState, a_Items, "cItems");
+ m_NumCurrentFunctionArgs += 1;
+}
+
+
+
+
+
+void cLuaState::PushObject(cClientHandle * a_Client)
+{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
+ tolua_pushusertype(m_LuaState, a_Client, "cClientHandle");
+ m_NumCurrentFunctionArgs += 1;
+}
+
+
+
+
+
+void cLuaState::PushObject(cPickup * a_Pickup)
+{
+ ASSERT(IsValid());
+ ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+
+ tolua_pushusertype(m_LuaState, a_Pickup, "cPickup");
+ m_NumCurrentFunctionArgs += 1;
}
-bool cLuaState::CallFunction(int a_NumArgs, int a_NumResults, const char * a_FunctionName)
+bool cLuaState::CallFunction(int a_NumResults)
{
- ASSERT(lua_isfunction(m_LuaState, -a_NumArgs - 1));
+ ASSERT (m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
+ ASSERT(lua_isfunction(m_LuaState, -m_NumCurrentFunctionArgs - 1));
- int s = lua_pcall(m_LuaState, a_NumArgs, a_NumResults, 0);
+ int s = lua_pcall(m_LuaState, m_NumCurrentFunctionArgs, a_NumResults, 0);
if (ReportErrors(s))
{
- LOGWARNING("Error in %s calling function %s()", m_SubsystemName.c_str(), a_FunctionName);
+ LOGWARNING("Error in %s calling function %s()", m_SubsystemName.c_str(), m_CurrentFunctionName);
+ m_NumCurrentFunctionArgs = -1;
+ m_CurrentFunctionName.clear();
return false;
}
+ m_NumCurrentFunctionArgs = -1;
+ m_CurrentFunctionName.clear();
return true;
}
diff --git a/source/LuaState.h b/source/LuaState.h
index fca532d89..18c7c1354 100644
--- a/source/LuaState.h
+++ b/source/LuaState.h
@@ -8,6 +8,11 @@ The contained lua_State can be either owned or attached.
Owned lua_State is created by calling Create() and the cLuaState automatically closes the state
Or, lua_State can be attached by calling Attach(), the cLuaState doesn't close such a state
Attaching a state will automatically close an owned state.
+
+Calling a Lua function is done by pushing the function, either by PushFunction() or PushFunctionFromRegistry(),
+then pushing the arguments (PushString(), PushNumber(), PushUserData() etc.) and finally
+executing CallFunction(). cLuaState automatically keeps track of the number of arguments and the name of the
+function (for logging purposes), which makes the call less error-prone.
*/
@@ -22,6 +27,14 @@ Attaching a state will automatically close an owned state.
// fwd: lua.h
struct lua_State;
+class cWorld;
+class cPlayer;
+class cEntity;
+class cItem;
+class cItems;
+class cClientHandle;
+class cPickup;
+
@@ -80,13 +93,36 @@ public:
/// Pushes a string vector, as a table, onto the stack
void PushStringVector(const AStringVector & a_Vector);
+ /// Pushes a usertype of the specified class type onto the stack
+ void PushUserType(void * a_Object, const char * a_Type);
+
+ /// Pushes an integer onto the stack
+ void PushNumber(int a_Value);
+
+ /// Pushes a double onto the stack
+ void PushNumber(double a_Value);
+
+ /// Pushes a string onto the stack
+ void PushString(const char * a_Value);
+
+ /// Pushes a bool onto the stack
+ void PushBool(bool a_Value);
+
+ // Special family of functions that do PushUserType internally, but require one less parameter
+ void PushObject(cWorld * a_World);
+ void PushObject(cPlayer * a_Player);
+ void PushObject(cEntity * a_Entity);
+ void PushObject(cItem * a_Item);
+ void PushObject(cItems * a_Items);
+ void PushObject(cClientHandle * a_ClientHandle);
+ void PushObject(cPickup * a_Pickup);
+
/**
- Calls the function that has been pushed onto the stack by PushFunction.
+ Calls the function that has been pushed onto the stack by PushFunction(),
+ with arguments pushed by PushXXX().
Returns true if successful, logs a warning on failure.
- a_FunctionName is used only for the warning log message, the function
- to be called must be pushed by PushFunction() beforehand.
*/
- bool CallFunction(int a_NumArgs, int a_NumResults, const char * a_FunctionName);
+ bool CallFunction(int a_NumReturnValues);
/// If the status is nonzero, prints the text on the top of Lua stack and returns true
bool ReportErrors(int status);
@@ -104,6 +140,12 @@ protected:
whatever is given to the constructor
*/
AString m_SubsystemName;
+
+ /// Name of the currently pushed function (for the Push / Call chain)
+ AString m_CurrentFunctionName;
+
+ /// Number of arguments currently pushed (for the Push / Call chain)
+ int m_NumCurrentFunctionArgs;
} ;
diff --git a/source/Plugin_NewLua.cpp b/source/Plugin_NewLua.cpp
index 51d16c839..b3dac7912 100644
--- a/source/Plugin_NewLua.cpp
+++ b/source/Plugin_NewLua.cpp
@@ -78,9 +78,9 @@ bool cPlugin_NewLua::Initialize(void)
return false;
}
- tolua_pushusertype(m_LuaState, this, "cPlugin_NewLua");
+ m_LuaState.PushUserType(this, "cPlugin_NewLua");
- if (!m_LuaState.CallFunction(1, 1, "Initialize"))
+ if (!m_LuaState.CallFunction(1))
{
m_LuaState.Close();
return false;
@@ -109,7 +109,7 @@ void cPlugin_NewLua::OnDisable()
return;
}
- m_LuaState.CallFunction(0, 0, "OnDisable");
+ m_LuaState.CallFunction(0);
}
@@ -124,10 +124,8 @@ void cPlugin_NewLua::Tick(float a_Dt)
{
return;
}
-
- tolua_pushnumber( m_LuaState, a_Dt );
-
- m_LuaState.CallFunction(1, 0, FnName);
+ m_LuaState.PushNumber(a_Dt);
+ m_LuaState.CallFunction(0);
}
@@ -144,16 +142,16 @@ bool cPlugin_NewLua::OnBlockToPickups(cWorld * a_World, cEntity * a_Digger, int
return false;
}
- tolua_pushusertype(m_LuaState, a_World, "cWorld");
- tolua_pushusertype(m_LuaState, a_Digger, "cEntity");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushnumber (m_LuaState, a_BlockType);
- tolua_pushnumber (m_LuaState, a_BlockMeta);
- tolua_pushusertype(m_LuaState, &a_Pickups, "cItems");
+ m_LuaState.PushObject(a_World);
+ m_LuaState.PushObject(a_Digger);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushNumber(a_BlockType);
+ m_LuaState.PushNumber(a_BlockMeta);
+ m_LuaState.PushObject(&a_Pickups);
- if (!m_LuaState.CallFunction(8, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -177,10 +175,10 @@ bool cPlugin_NewLua::OnChat(cPlayer * a_Player, AString & a_Message)
return false;
}
- tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
- tolua_pushstring (m_LuaState, a_Message.c_str());
+ m_LuaState.PushObject(a_Player);
+ m_LuaState.PushString(a_Message.c_str());
- if (!m_LuaState.CallFunction(2, 2, FnName))
+ if (!m_LuaState.CallFunction(2))
{
return false;
}
@@ -208,11 +206,11 @@ bool cPlugin_NewLua::OnChunkAvailable(cWorld * a_World, int a_ChunkX, int a_Chun
return false;
}
- tolua_pushusertype(m_LuaState, a_World, "cWorld");
- tolua_pushnumber (m_LuaState, a_ChunkX);
- tolua_pushnumber (m_LuaState, a_ChunkZ);
+ m_LuaState.PushObject(a_World);
+ m_LuaState.PushNumber(a_ChunkX);
+ m_LuaState.PushNumber(a_ChunkZ);
- if (!m_LuaState.CallFunction(3, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -236,12 +234,12 @@ bool cPlugin_NewLua::OnChunkGenerated(cWorld * a_World, int a_ChunkX, int a_Chun
return false;
}
- tolua_pushusertype(m_LuaState, a_World, "cWorld");
- tolua_pushnumber (m_LuaState, a_ChunkX);
- tolua_pushnumber (m_LuaState, a_ChunkZ);
- tolua_pushusertype(m_LuaState, a_ChunkDesc, "cChunkDesc");
+ 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(4, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -255,7 +253,7 @@ bool cPlugin_NewLua::OnChunkGenerated(cWorld * a_World, int a_ChunkX, int a_Chun
-bool cPlugin_NewLua::OnChunkGenerating(cWorld * a_World, int a_ChunkX, int a_ChunkZ, cChunkDesc * a_pLuaChunk)
+bool cPlugin_NewLua::OnChunkGenerating(cWorld * a_World, int a_ChunkX, int a_ChunkZ, cChunkDesc * a_ChunkDesc)
{
cCSLock Lock(m_CriticalSection);
const char * FnName = GetHookFnName(cPluginManager::HOOK_CHUNK_GENERATING);
@@ -265,12 +263,12 @@ bool cPlugin_NewLua::OnChunkGenerating(cWorld * a_World, int a_ChunkX, int a_Chu
return false;
}
- tolua_pushusertype(m_LuaState, a_World, "cWorld");
- tolua_pushnumber (m_LuaState, a_ChunkX);
- tolua_pushnumber (m_LuaState, a_ChunkZ);
- tolua_pushusertype(m_LuaState, a_pLuaChunk, "cChunkDesc");
+ 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(4, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -294,11 +292,11 @@ bool cPlugin_NewLua::OnChunkUnloaded(cWorld * a_World, int a_ChunkX, int a_Chunk
return false;
}
- tolua_pushusertype(m_LuaState, a_World, "cWorld");
- tolua_pushnumber (m_LuaState, a_ChunkX);
- tolua_pushnumber (m_LuaState, a_ChunkZ);
+ m_LuaState.PushObject(a_World);
+ m_LuaState.PushNumber(a_ChunkX);
+ m_LuaState.PushNumber(a_ChunkZ);
- if (!m_LuaState.CallFunction(3, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -322,11 +320,11 @@ bool cPlugin_NewLua::OnChunkUnloading(cWorld * a_World, int a_ChunkX, int a_Chun
return false;
}
- tolua_pushusertype(m_LuaState, a_World, "cWorld");
- tolua_pushnumber (m_LuaState, a_ChunkX);
- tolua_pushnumber (m_LuaState, a_ChunkZ);
+ m_LuaState.PushObject(a_World);
+ m_LuaState.PushNumber(a_ChunkX);
+ m_LuaState.PushNumber(a_ChunkZ);
- if (!m_LuaState.CallFunction(3, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -350,10 +348,10 @@ bool cPlugin_NewLua::OnCollectingPickup(cPlayer * a_Player, cPickup * a_Pickup)
return false;
}
- tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
- tolua_pushusertype(m_LuaState, a_Pickup, "cPickup");
+ m_LuaState.PushObject(a_Player);
+ m_LuaState.PushObject(a_Pickup);
- if (!m_LuaState.CallFunction(2, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -377,11 +375,11 @@ bool cPlugin_NewLua::OnCraftingNoRecipe(const cPlayer * a_Player, const cCraftin
return false;
}
- tolua_pushusertype(m_LuaState, (void *)a_Player, "cPlayer");
- tolua_pushusertype(m_LuaState, (void *)a_Grid, "cCraftingGrid");
- tolua_pushusertype(m_LuaState, (void *)a_Recipe, "cCraftingRecipe");
+ m_LuaState.PushUserType((void *)a_Player, "cPlayer");
+ m_LuaState.PushUserType((void *)a_Grid, "cCraftingGrid");
+ m_LuaState.PushUserType((void *)a_Recipe, "cCraftingRecipe");
- if (!m_LuaState.CallFunction(3, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -405,10 +403,10 @@ bool cPlugin_NewLua::OnDisconnect(cPlayer * a_Player, const AString & a_Reason)
return false;
}
- tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
- tolua_pushstring (m_LuaState, a_Reason.c_str());
+ m_LuaState.PushObject(a_Player);
+ m_LuaState.PushString(a_Reason.c_str());
- if (!m_LuaState.CallFunction(2, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -432,22 +430,10 @@ bool cPlugin_NewLua::OnExecuteCommand(cPlayer * a_Player, const AStringVector &
return false;
}
- tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
-
- // Push the split:
- lua_createtable(m_LuaState, a_Split.size(), 0);
- int newTable = lua_gettop(m_LuaState);
- int index = 1;
- std::vector<std::string>::const_iterator iter = a_Split.begin(), end = a_Split.end();
- while(iter != end)
- {
- tolua_pushstring(m_LuaState, (*iter).c_str());
- lua_rawseti(m_LuaState, newTable, index);
- ++iter;
- ++index;
- }
+ m_LuaState.PushObject(a_Player);
+ m_LuaState.PushStringVector(a_Split);
- if (!m_LuaState.CallFunction(2, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -471,10 +457,10 @@ bool cPlugin_NewLua::OnHandshake(cClientHandle * a_Client, const AString & a_Use
return false;
}
- tolua_pushusertype(m_LuaState, a_Client, "cClientHandle");
- tolua_pushstring (m_LuaState, a_Username.c_str());
+ m_LuaState.PushUserType(a_Client, "cClientHandle");
+ m_LuaState.PushString (a_Username.c_str());
- if (!m_LuaState.CallFunction(2, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -498,10 +484,10 @@ bool cPlugin_NewLua::OnKilling(cEntity & a_Victim, cEntity * a_Killer)
return false;
}
- tolua_pushusertype(m_LuaState, &a_Victim, "cEntity");
- tolua_pushusertype(m_LuaState, a_Killer, "cEntity");
+ m_LuaState.PushObject(&a_Victim);
+ m_LuaState.PushObject(a_Killer);
- if (!m_LuaState.CallFunction(2, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -525,11 +511,11 @@ bool cPlugin_NewLua::OnLogin(cClientHandle * a_Client, int a_ProtocolVersion, co
return false;
}
- tolua_pushusertype (m_LuaState, a_Client, "cClientHandle");
- tolua_pushnumber (m_LuaState, a_ProtocolVersion);
- tolua_pushcppstring(m_LuaState, a_Username);
+ m_LuaState.PushObject(a_Client);
+ m_LuaState.PushNumber(a_ProtocolVersion);
+ m_LuaState.PushString(a_Username.c_str());
- if (!m_LuaState.CallFunction(3, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -553,15 +539,15 @@ bool cPlugin_NewLua::OnPlayerBreakingBlock(cPlayer & a_Player, int a_BlockX, int
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushnumber (m_LuaState, a_BlockFace);
- tolua_pushnumber (m_LuaState, a_BlockType);
- tolua_pushnumber (m_LuaState, a_BlockMeta);
+ m_LuaState.PushObject(&a_Player);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushNumber(a_BlockFace);
+ m_LuaState.PushNumber(a_BlockType);
+ m_LuaState.PushNumber(a_BlockMeta);
- if (!m_LuaState.CallFunction(7, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -585,15 +571,15 @@ bool cPlugin_NewLua::OnPlayerBrokenBlock(cPlayer & a_Player, int a_BlockX, int a
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushnumber (m_LuaState, a_BlockFace);
- tolua_pushnumber (m_LuaState, a_BlockType);
- tolua_pushnumber (m_LuaState, a_BlockMeta);
+ m_LuaState.PushObject(&a_Player);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushNumber(a_BlockFace);
+ m_LuaState.PushNumber(a_BlockType);
+ m_LuaState.PushNumber(a_BlockMeta);
- if (!m_LuaState.CallFunction(7, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -617,9 +603,9 @@ bool cPlugin_NewLua::OnPlayerEating(cPlayer & a_Player)
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
+ m_LuaState.PushObject(&a_Player);
- if (!m_LuaState.CallFunction(1, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -643,9 +629,9 @@ bool cPlugin_NewLua::OnPlayerJoined(cPlayer & a_Player)
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
+ m_LuaState.PushObject(&a_Player);
- if (!m_LuaState.CallFunction(1, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -669,14 +655,14 @@ bool cPlugin_NewLua::OnPlayerLeftClick(cPlayer & a_Player, int a_BlockX, int a_B
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushnumber (m_LuaState, a_BlockFace);
- tolua_pushnumber (m_LuaState, a_Status);
+ m_LuaState.PushObject(&a_Player);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushNumber(a_BlockFace);
+ m_LuaState.PushNumber(a_Status);
- if (!m_LuaState.CallFunction(6, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -700,9 +686,9 @@ bool cPlugin_NewLua::OnPlayerMoved(cPlayer & a_Player)
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
+ m_LuaState.PushObject(&a_Player);
- if (!m_LuaState.CallFunction(1, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -726,18 +712,18 @@ bool cPlugin_NewLua::OnPlayerPlacedBlock(cPlayer & a_Player, int a_BlockX, int a
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushnumber (m_LuaState, a_BlockFace);
- tolua_pushnumber (m_LuaState, a_CursorX);
- tolua_pushnumber (m_LuaState, a_CursorY);
- tolua_pushnumber (m_LuaState, a_CursorZ);
- tolua_pushnumber (m_LuaState, a_BlockType);
- tolua_pushnumber (m_LuaState, a_BlockMeta);
+ m_LuaState.PushObject(&a_Player);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushNumber(a_BlockFace);
+ m_LuaState.PushNumber(a_CursorX);
+ m_LuaState.PushNumber(a_CursorY);
+ m_LuaState.PushNumber(a_CursorZ);
+ m_LuaState.PushNumber(a_BlockType);
+ m_LuaState.PushNumber(a_BlockMeta);
- if (!m_LuaState.CallFunction(10, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -761,18 +747,18 @@ bool cPlugin_NewLua::OnPlayerPlacingBlock(cPlayer & a_Player, int a_BlockX, int
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushnumber (m_LuaState, a_BlockFace);
- tolua_pushnumber (m_LuaState, a_CursorX);
- tolua_pushnumber (m_LuaState, a_CursorY);
- tolua_pushnumber (m_LuaState, a_CursorZ);
- tolua_pushnumber (m_LuaState, a_BlockType);
- tolua_pushnumber (m_LuaState, a_BlockMeta);
+ m_LuaState.PushObject(&a_Player);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushNumber(a_BlockFace);
+ m_LuaState.PushNumber(a_CursorX);
+ m_LuaState.PushNumber(a_CursorY);
+ m_LuaState.PushNumber(a_CursorZ);
+ m_LuaState.PushNumber(a_BlockType);
+ m_LuaState.PushNumber(a_BlockMeta);
- if (!m_LuaState.CallFunction(10, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -796,16 +782,16 @@ bool cPlugin_NewLua::OnPlayerRightClick(cPlayer & a_Player, int a_BlockX, int a_
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushnumber (m_LuaState, a_BlockFace);
- tolua_pushnumber (m_LuaState, a_CursorX);
- tolua_pushnumber (m_LuaState, a_CursorY);
- tolua_pushnumber (m_LuaState, a_CursorZ);
+ m_LuaState.PushObject(&a_Player);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushNumber(a_BlockFace);
+ m_LuaState.PushNumber(a_CursorX);
+ m_LuaState.PushNumber(a_CursorY);
+ m_LuaState.PushNumber(a_CursorZ);
- if (!m_LuaState.CallFunction(8, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -829,10 +815,10 @@ bool cPlugin_NewLua::OnPlayerRightClickingEntity(cPlayer & a_Player, cEntity & a
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
- tolua_pushusertype(m_LuaState, &a_Entity, "cEntity");
+ m_LuaState.PushObject(&a_Player);
+ m_LuaState.PushObject(&a_Entity);
- if (!m_LuaState.CallFunction(2, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -856,9 +842,9 @@ bool cPlugin_NewLua::OnPlayerShooting(cPlayer & a_Player)
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
+ m_LuaState.PushObject(&a_Player);
- if (!m_LuaState.CallFunction(1, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -882,9 +868,9 @@ bool cPlugin_NewLua::OnPlayerSpawned(cPlayer & a_Player)
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
+ m_LuaState.PushObject(&a_Player);
- if (!m_LuaState.CallFunction(1, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -908,9 +894,9 @@ bool cPlugin_NewLua::OnPlayerTossingItem(cPlayer & a_Player)
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
+ m_LuaState.PushObject(&a_Player);
- if (!m_LuaState.CallFunction(1, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -934,18 +920,18 @@ bool cPlugin_NewLua::OnPlayerUsedBlock(cPlayer & a_Player, int a_BlockX, int a_B
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushnumber (m_LuaState, a_BlockFace);
- tolua_pushnumber (m_LuaState, a_CursorX);
- tolua_pushnumber (m_LuaState, a_CursorY);
- tolua_pushnumber (m_LuaState, a_CursorZ);
- tolua_pushnumber (m_LuaState, a_BlockType);
- tolua_pushnumber (m_LuaState, a_BlockMeta);
+ m_LuaState.PushObject(&a_Player);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushNumber(a_BlockFace);
+ m_LuaState.PushNumber(a_CursorX);
+ m_LuaState.PushNumber(a_CursorY);
+ m_LuaState.PushNumber(a_CursorZ);
+ m_LuaState.PushNumber(a_BlockType);
+ m_LuaState.PushNumber(a_BlockMeta);
- if (!m_LuaState.CallFunction(10, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -969,16 +955,16 @@ bool cPlugin_NewLua::OnPlayerUsedItem(cPlayer & a_Player, int a_BlockX, int a_Bl
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushnumber (m_LuaState, a_BlockFace);
- tolua_pushnumber (m_LuaState, a_CursorX);
- tolua_pushnumber (m_LuaState, a_CursorY);
- tolua_pushnumber (m_LuaState, a_CursorZ);
+ m_LuaState.PushObject(&a_Player);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushNumber(a_BlockFace);
+ m_LuaState.PushNumber(a_CursorX);
+ m_LuaState.PushNumber(a_CursorY);
+ m_LuaState.PushNumber(a_CursorZ);
- if (!m_LuaState.CallFunction(8, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -1002,18 +988,18 @@ bool cPlugin_NewLua::OnPlayerUsingBlock(cPlayer & a_Player, int a_BlockX, int a_
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushnumber (m_LuaState, a_BlockFace);
- tolua_pushnumber (m_LuaState, a_CursorX);
- tolua_pushnumber (m_LuaState, a_CursorY);
- tolua_pushnumber (m_LuaState, a_CursorZ);
- tolua_pushnumber (m_LuaState, a_BlockType);
- tolua_pushnumber (m_LuaState, a_BlockMeta);
+ m_LuaState.PushObject(&a_Player);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushNumber(a_BlockFace);
+ m_LuaState.PushNumber(a_CursorX);
+ m_LuaState.PushNumber(a_CursorY);
+ m_LuaState.PushNumber(a_CursorZ);
+ m_LuaState.PushNumber(a_BlockType);
+ m_LuaState.PushNumber(a_BlockMeta);
- if (!m_LuaState.CallFunction(10, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -1037,16 +1023,16 @@ bool cPlugin_NewLua::OnPlayerUsingItem(cPlayer & a_Player, int a_BlockX, int a_B
return false;
}
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushnumber (m_LuaState, a_BlockFace);
- tolua_pushnumber (m_LuaState, a_CursorX);
- tolua_pushnumber (m_LuaState, a_CursorY);
- tolua_pushnumber (m_LuaState, a_CursorZ);
+ m_LuaState.PushObject(&a_Player);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushNumber(a_BlockFace);
+ m_LuaState.PushNumber(a_CursorX);
+ m_LuaState.PushNumber(a_CursorY);
+ m_LuaState.PushNumber(a_CursorZ);
- if (!m_LuaState.CallFunction(8, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -1070,11 +1056,11 @@ bool cPlugin_NewLua::OnPostCrafting(const cPlayer * a_Player, const cCraftingGri
return false;
}
- tolua_pushusertype(m_LuaState, (void *)a_Player, "cPlayer");
- tolua_pushusertype(m_LuaState, (void *)a_Grid, "cCraftingGrid");
- tolua_pushusertype(m_LuaState, (void *)a_Recipe, "cCraftingRecipe");
+ m_LuaState.PushUserType((void *)a_Player, "cPlayer");
+ m_LuaState.PushUserType((void *)a_Grid, "cCraftingGrid");
+ m_LuaState.PushUserType((void *)a_Recipe, "cCraftingRecipe");
- if (!m_LuaState.CallFunction(3, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -1098,11 +1084,11 @@ bool cPlugin_NewLua::OnPreCrafting(const cPlayer * a_Player, const cCraftingGrid
return false;
}
- tolua_pushusertype(m_LuaState, (void *)a_Player, "cPlayer");
- tolua_pushusertype(m_LuaState, (void *)a_Grid, "cCraftingGrid");
- tolua_pushusertype(m_LuaState, (void *)a_Recipe, "cCraftingRecipe");
+ m_LuaState.PushUserType((void *)a_Player, "cPlayer");
+ m_LuaState.PushUserType((void *)a_Grid, "cCraftingGrid");
+ m_LuaState.PushUserType((void *)a_Recipe, "cCraftingRecipe");
- if (!m_LuaState.CallFunction(3, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -1126,10 +1112,10 @@ bool cPlugin_NewLua::OnTakeDamage(cEntity & a_Receiver, TakeDamageInfo & a_TDI)
return false;
}
- tolua_pushusertype(m_LuaState, &a_Receiver, "cEntity");
- tolua_pushusertype(m_LuaState, &a_TDI, "TakeDamageInfo");
+ m_LuaState.PushObject(&a_Receiver);
+ m_LuaState.PushUserType(&a_TDI, "TakeDamageInfo");
- if (!m_LuaState.CallFunction(2, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -1158,17 +1144,17 @@ bool cPlugin_NewLua::OnUpdatedSign(
return false;
}
- tolua_pushusertype(m_LuaState, (void *)a_World, "cWorld");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushstring (m_LuaState, a_Line1.c_str());
- tolua_pushstring (m_LuaState, a_Line2.c_str());
- tolua_pushstring (m_LuaState, a_Line3.c_str());
- tolua_pushstring (m_LuaState, a_Line4.c_str());
- tolua_pushusertype(m_LuaState, (void *)a_Player, "cPlayer");
+ m_LuaState.PushObject(a_World);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushString(a_Line1.c_str());
+ m_LuaState.PushString(a_Line2.c_str());
+ m_LuaState.PushString(a_Line3.c_str());
+ m_LuaState.PushString(a_Line4.c_str());
+ m_LuaState.PushObject(a_Player);
- if (!m_LuaState.CallFunction(9, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -1197,17 +1183,17 @@ bool cPlugin_NewLua::OnUpdatingSign(
return false;
}
- tolua_pushusertype(m_LuaState, (void *)a_World, "cWorld");
- tolua_pushnumber (m_LuaState, a_BlockX);
- tolua_pushnumber (m_LuaState, a_BlockY);
- tolua_pushnumber (m_LuaState, a_BlockZ);
- tolua_pushstring (m_LuaState, a_Line1.c_str());
- tolua_pushstring (m_LuaState, a_Line2.c_str());
- tolua_pushstring (m_LuaState, a_Line3.c_str());
- tolua_pushstring (m_LuaState, a_Line4.c_str());
- tolua_pushusertype(m_LuaState, (void *)a_Player, "cPlayer");
+ m_LuaState.PushObject(a_World);
+ m_LuaState.PushNumber(a_BlockX);
+ m_LuaState.PushNumber(a_BlockY);
+ m_LuaState.PushNumber(a_BlockZ);
+ m_LuaState.PushString(a_Line1.c_str());
+ m_LuaState.PushString(a_Line2.c_str());
+ m_LuaState.PushString(a_Line3.c_str());
+ m_LuaState.PushString(a_Line4.c_str());
+ m_LuaState.PushObject(a_Player);
- if (!m_LuaState.CallFunction(9, 5, "OnUpdatingSign"))
+ if (!m_LuaState.CallFunction(5))
{
return false;
}
@@ -1247,9 +1233,9 @@ bool cPlugin_NewLua::OnWeatherChanged(cWorld & a_World)
return false;
}
- tolua_pushusertype(m_LuaState, &a_World, "cWorld");
+ m_LuaState.PushObject(&a_World);
- if (!m_LuaState.CallFunction(1, 1, FnName))
+ if (!m_LuaState.CallFunction(1))
{
return false;
}
@@ -1273,10 +1259,10 @@ bool cPlugin_NewLua::OnWeatherChanging(cWorld & a_World, eWeather & a_NewWeather
return false;
}
- tolua_pushusertype(m_LuaState, &a_World, "cWorld");
- tolua_pushnumber (m_LuaState, a_NewWeather);
+ m_LuaState.PushObject(&a_World);
+ m_LuaState.PushNumber(a_NewWeather);
- if (!m_LuaState.CallFunction(2, 2, FnName))
+ if (!m_LuaState.CallFunction(2))
{
return false;
}
@@ -1313,14 +1299,11 @@ bool cPlugin_NewLua::HandleCommand(const AStringVector & a_Split, cPlayer * a_Pl
return false;
}
- // Push the split:
m_LuaState.PushStringVector(a_Split);
-
- // Push player:
- tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
+ m_LuaState.PushObject(a_Player);
// Call function:
- if (!m_LuaState.CallFunction(2, 1, __FUNCTION__))
+ if (!m_LuaState.CallFunction(1))
{
LOGWARNING("LUA error in %s. Stack size: %i", __FUNCTION__, lua_gettop(m_LuaState));
return false;
@@ -1352,23 +1335,12 @@ bool cPlugin_NewLua::HandleConsoleCommand(const AStringVector & a_Split, cComman
cCSLock Lock(m_CriticalSection);
// Push the function to be called:
- lua_rawgeti(m_LuaState, LUA_REGISTRYINDEX, cmd->second); // same as lua_getref()
+ m_LuaState.PushFunctionFromRegistry(cmd->second);
- // Push the split:
- lua_createtable(m_LuaState, a_Split.size(), 0);
- int newTable = lua_gettop(m_LuaState);
- int index = 1;
- std::vector<std::string>::const_iterator iter = a_Split.begin(), end = a_Split.end();
- while(iter != end)
- {
- tolua_pushstring(m_LuaState, (*iter).c_str());
- lua_rawseti(m_LuaState, newTable, index);
- ++iter;
- ++index;
- }
+ m_LuaState.PushStringVector(a_Split);
// Call function:
- if (!m_LuaState.CallFunction(1, 2, __FUNCTION__))
+ if (!m_LuaState.CallFunction(2))
{
LOGWARNING("Lua error in %s. Stack size: %i", __FUNCTION__, lua_gettop(m_LuaState));
return false;
@@ -1546,29 +1518,21 @@ AString cPlugin_NewLua::HandleWebRequest(const HTTPRequest * a_Request )
if( Tab )
{
- // LOGINFO("1. Stack size: %i", lua_gettop(m_LuaState) );
- lua_rawgeti( m_LuaState, LUA_REGISTRYINDEX, Tab->UserData); // same as lua_getref()
+ m_LuaState.PushFunctionFromRegistry(Tab->UserData);
- // LOGINFO("2. Stack size: %i", lua_gettop(m_LuaState) );
// Push HTTPRequest
- tolua_pushusertype( m_LuaState, (void*)a_Request, "const HTTPRequest" );
- // LOGINFO("Calling bound function! :D");
- int s = lua_pcall( m_LuaState, 1, 1, 0);
-
- if ( s != 0 )
+ m_LuaState.PushUserType((void*)a_Request, "const HTTPRequest");
+
+ if (!m_LuaState.CallFunction(1))
{
- std::string err = lua_tostring(m_LuaState, -1);
- LOGERROR("-- %s", err.c_str() );
- lua_pop(m_LuaState, 1);
- LOGINFO("error. Stack size: %i", lua_gettop(m_LuaState) );
- return err; // Show the error message in the web page, looks cool
+ return "Lua encountered error while processing the page request";
}
- if( !lua_isstring( m_LuaState, -1 ) )
+ if (!lua_isstring(m_LuaState, -1))
{
- LOGWARN("WARNING: WebPlugin tab '%s' did not return a string!", Tab->Title.c_str() );
- lua_pop(m_LuaState, 1); // Pop return value
- return std::string("WARNING: WebPlugin tab '") + Tab->Title + std::string("' did not return a string!");
+ 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);
@@ -1640,13 +1604,13 @@ bool cPlugin_NewLua::CallbackWindowClosing(int a_FnRef, cWindow & a_Window, cPla
ASSERT(a_FnRef != LUA_REFNIL);
cCSLock Lock(m_CriticalSection);
- lua_rawgeti(m_LuaState, LUA_REGISTRYINDEX, a_FnRef); // Push the function to be called
- tolua_pushusertype(m_LuaState, &a_Window, "cWindow");
- tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
- tolua_pushboolean (m_LuaState, a_CanRefuse ? 1 : 0);
+ m_LuaState.PushFunctionFromRegistry(a_FnRef);
+ m_LuaState.PushUserType(&a_Window, "cWindow");
+ m_LuaState.PushObject(&a_Player);
+ m_LuaState.PushBool(a_CanRefuse);
// Call function:
- if (!m_LuaState.CallFunction(3, 1, __FUNCTION__))
+ if (!m_LuaState.CallFunction(1))
{
LOGWARNING("LUA error in %s. Stack size: %i", __FUNCTION__, lua_gettop(m_LuaState));
return false;
@@ -1666,12 +1630,12 @@ void cPlugin_NewLua::CallbackWindowSlotChanged(int a_FnRef, cWindow & a_Window,
ASSERT(a_FnRef != LUA_REFNIL);
cCSLock Lock(m_CriticalSection);
- lua_rawgeti(m_LuaState, LUA_REGISTRYINDEX, a_FnRef); // Push the function to be called
- tolua_pushusertype(m_LuaState, &a_Window, "cWindow");
- tolua_pushnumber (m_LuaState, a_SlotNum);
+ m_LuaState.PushFunctionFromRegistry(a_FnRef);
+ m_LuaState.PushUserType(&a_Window, "cWindow");
+ m_LuaState.PushNumber(a_SlotNum);
// Call function:
- if (!m_LuaState.CallFunction(2, 0, __FUNCTION__))
+ if (!m_LuaState.CallFunction(0))
{
LOGWARNING("LUA error in %s. Stack size: %i", __FUNCTION__, lua_gettop(m_LuaState));
}