cLuaState now tracks the function name and number of args
This commit is contained in:
parent
2151bb8f5b
commit
2030bd47c8
@ -38,7 +38,8 @@ extern "C"
|
|||||||
cLuaState::cLuaState(const AString & a_SubsystemName) :
|
cLuaState::cLuaState(const AString & a_SubsystemName) :
|
||||||
m_LuaState(NULL),
|
m_LuaState(NULL),
|
||||||
m_IsOwned(false),
|
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) :
|
cLuaState::cLuaState(lua_State * a_AttachState) :
|
||||||
m_LuaState(a_AttachState),
|
m_LuaState(a_AttachState),
|
||||||
m_IsOwned(false),
|
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 */)
|
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())
|
if (!IsValid())
|
||||||
{
|
{
|
||||||
// This happens if cPlugin::Initialize() fails with an error
|
// 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);
|
lua_pop(m_LuaState, 1);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
m_CurrentFunctionName.assign(a_FunctionName);
|
||||||
|
m_NumCurrentFunctionArgs = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -212,12 +218,17 @@ bool cLuaState::PushFunction(const char * a_FunctionName, bool a_ShouldLogFailur
|
|||||||
|
|
||||||
bool cLuaState::PushFunctionFromRegistry(int a_FnRef)
|
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()
|
lua_rawgeti(m_LuaState, LUA_REGISTRYINDEX, a_FnRef); // same as lua_getref()
|
||||||
if (!lua_isfunction(m_LuaState, -1))
|
if (!lua_isfunction(m_LuaState, -1))
|
||||||
{
|
{
|
||||||
lua_pop(m_LuaState, 1);
|
lua_pop(m_LuaState, 1);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
m_CurrentFunctionName = "<callback>";
|
||||||
|
m_NumCurrentFunctionArgs = 0;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -227,6 +238,9 @@ bool cLuaState::PushFunctionFromRegistry(int a_FnRef)
|
|||||||
|
|
||||||
void cLuaState::PushStringVector(const AStringVector & a_Vector)
|
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);
|
lua_createtable(m_LuaState, a_Vector.size(), 0);
|
||||||
int newTable = lua_gettop(m_LuaState);
|
int newTable = lua_gettop(m_LuaState);
|
||||||
int index = 1;
|
int index = 1;
|
||||||
@ -235,22 +249,184 @@ void cLuaState::PushStringVector(const AStringVector & a_Vector)
|
|||||||
tolua_pushstring(m_LuaState, itr->c_str());
|
tolua_pushstring(m_LuaState, itr->c_str());
|
||||||
lua_rawseti(m_LuaState, newTable, index);
|
lua_rawseti(m_LuaState, newTable, index);
|
||||||
}
|
}
|
||||||
|
m_NumCurrentFunctionArgs += 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
bool cLuaState::CallFunction(int a_NumArgs, int a_NumResults, const char * a_FunctionName)
|
void cLuaState::PushUserType(void * a_Object, const char * a_Type)
|
||||||
{
|
{
|
||||||
ASSERT(lua_isfunction(m_LuaState, -a_NumArgs - 1));
|
ASSERT(IsValid());
|
||||||
|
ASSERT(m_NumCurrentFunctionArgs >= 0); // A function must be pushed to stack first
|
||||||
|
|
||||||
int s = lua_pcall(m_LuaState, a_NumArgs, a_NumResults, 0);
|
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_NumResults)
|
||||||
|
{
|
||||||
|
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, m_NumCurrentFunctionArgs, a_NumResults, 0);
|
||||||
if (ReportErrors(s))
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
m_NumCurrentFunctionArgs = -1;
|
||||||
|
m_CurrentFunctionName.clear();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -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
|
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
|
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.
|
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
|
// fwd: lua.h
|
||||||
struct lua_State;
|
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
|
/// Pushes a string vector, as a table, onto the stack
|
||||||
void PushStringVector(const AStringVector & a_Vector);
|
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.
|
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
|
/// If the status is nonzero, prints the text on the top of Lua stack and returns true
|
||||||
bool ReportErrors(int status);
|
bool ReportErrors(int status);
|
||||||
@ -104,6 +140,12 @@ protected:
|
|||||||
whatever is given to the constructor
|
whatever is given to the constructor
|
||||||
*/
|
*/
|
||||||
AString m_SubsystemName;
|
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;
|
||||||
} ;
|
} ;
|
||||||
|
|
||||||
|
|
||||||
|
@ -78,9 +78,9 @@ bool cPlugin_NewLua::Initialize(void)
|
|||||||
return false;
|
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();
|
m_LuaState.Close();
|
||||||
return false;
|
return false;
|
||||||
@ -109,7 +109,7 @@ void cPlugin_NewLua::OnDisable()
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
m_LuaState.CallFunction(0, 0, "OnDisable");
|
m_LuaState.CallFunction(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -124,10 +124,8 @@ void cPlugin_NewLua::Tick(float a_Dt)
|
|||||||
{
|
{
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
m_LuaState.PushNumber(a_Dt);
|
||||||
tolua_pushnumber( m_LuaState, a_Dt );
|
m_LuaState.CallFunction(0);
|
||||||
|
|
||||||
m_LuaState.CallFunction(1, 0, FnName);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@ -144,16 +142,16 @@ bool cPlugin_NewLua::OnBlockToPickups(cWorld * a_World, cEntity * a_Digger, int
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, a_World, "cWorld");
|
m_LuaState.PushObject(a_World);
|
||||||
tolua_pushusertype(m_LuaState, a_Digger, "cEntity");
|
m_LuaState.PushObject(a_Digger);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockType);
|
m_LuaState.PushNumber(a_BlockType);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockMeta);
|
m_LuaState.PushNumber(a_BlockMeta);
|
||||||
tolua_pushusertype(m_LuaState, &a_Pickups, "cItems");
|
m_LuaState.PushObject(&a_Pickups);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(8, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -177,10 +175,10 @@ bool cPlugin_NewLua::OnChat(cPlayer * a_Player, AString & a_Message)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
|
m_LuaState.PushObject(a_Player);
|
||||||
tolua_pushstring (m_LuaState, a_Message.c_str());
|
m_LuaState.PushString(a_Message.c_str());
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(2, 2, FnName))
|
if (!m_LuaState.CallFunction(2))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -208,11 +206,11 @@ bool cPlugin_NewLua::OnChunkAvailable(cWorld * a_World, int a_ChunkX, int a_Chun
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, a_World, "cWorld");
|
m_LuaState.PushObject(a_World);
|
||||||
tolua_pushnumber (m_LuaState, a_ChunkX);
|
m_LuaState.PushNumber(a_ChunkX);
|
||||||
tolua_pushnumber (m_LuaState, a_ChunkZ);
|
m_LuaState.PushNumber(a_ChunkZ);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(3, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -236,12 +234,12 @@ bool cPlugin_NewLua::OnChunkGenerated(cWorld * a_World, int a_ChunkX, int a_Chun
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, a_World, "cWorld");
|
m_LuaState.PushObject(a_World);
|
||||||
tolua_pushnumber (m_LuaState, a_ChunkX);
|
m_LuaState.PushNumber(a_ChunkX);
|
||||||
tolua_pushnumber (m_LuaState, a_ChunkZ);
|
m_LuaState.PushNumber(a_ChunkZ);
|
||||||
tolua_pushusertype(m_LuaState, a_ChunkDesc, "cChunkDesc");
|
m_LuaState.PushUserType(a_ChunkDesc, "cChunkDesc");
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(4, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
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);
|
cCSLock Lock(m_CriticalSection);
|
||||||
const char * FnName = GetHookFnName(cPluginManager::HOOK_CHUNK_GENERATING);
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, a_World, "cWorld");
|
m_LuaState.PushObject(a_World);
|
||||||
tolua_pushnumber (m_LuaState, a_ChunkX);
|
m_LuaState.PushNumber(a_ChunkX);
|
||||||
tolua_pushnumber (m_LuaState, a_ChunkZ);
|
m_LuaState.PushNumber(a_ChunkZ);
|
||||||
tolua_pushusertype(m_LuaState, a_pLuaChunk, "cChunkDesc");
|
m_LuaState.PushUserType(a_ChunkDesc, "cChunkDesc");
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(4, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -294,11 +292,11 @@ bool cPlugin_NewLua::OnChunkUnloaded(cWorld * a_World, int a_ChunkX, int a_Chunk
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, a_World, "cWorld");
|
m_LuaState.PushObject(a_World);
|
||||||
tolua_pushnumber (m_LuaState, a_ChunkX);
|
m_LuaState.PushNumber(a_ChunkX);
|
||||||
tolua_pushnumber (m_LuaState, a_ChunkZ);
|
m_LuaState.PushNumber(a_ChunkZ);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(3, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -322,11 +320,11 @@ bool cPlugin_NewLua::OnChunkUnloading(cWorld * a_World, int a_ChunkX, int a_Chun
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, a_World, "cWorld");
|
m_LuaState.PushObject(a_World);
|
||||||
tolua_pushnumber (m_LuaState, a_ChunkX);
|
m_LuaState.PushNumber(a_ChunkX);
|
||||||
tolua_pushnumber (m_LuaState, a_ChunkZ);
|
m_LuaState.PushNumber(a_ChunkZ);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(3, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -350,10 +348,10 @@ bool cPlugin_NewLua::OnCollectingPickup(cPlayer * a_Player, cPickup * a_Pickup)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
|
m_LuaState.PushObject(a_Player);
|
||||||
tolua_pushusertype(m_LuaState, a_Pickup, "cPickup");
|
m_LuaState.PushObject(a_Pickup);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(2, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -377,11 +375,11 @@ bool cPlugin_NewLua::OnCraftingNoRecipe(const cPlayer * a_Player, const cCraftin
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_Player, "cPlayer");
|
m_LuaState.PushUserType((void *)a_Player, "cPlayer");
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_Grid, "cCraftingGrid");
|
m_LuaState.PushUserType((void *)a_Grid, "cCraftingGrid");
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_Recipe, "cCraftingRecipe");
|
m_LuaState.PushUserType((void *)a_Recipe, "cCraftingRecipe");
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(3, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -405,10 +403,10 @@ bool cPlugin_NewLua::OnDisconnect(cPlayer * a_Player, const AString & a_Reason)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
|
m_LuaState.PushObject(a_Player);
|
||||||
tolua_pushstring (m_LuaState, a_Reason.c_str());
|
m_LuaState.PushString(a_Reason.c_str());
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(2, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -432,22 +430,10 @@ bool cPlugin_NewLua::OnExecuteCommand(cPlayer * a_Player, const AStringVector &
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
|
m_LuaState.PushObject(a_Player);
|
||||||
|
m_LuaState.PushStringVector(a_Split);
|
||||||
|
|
||||||
// Push the split:
|
if (!m_LuaState.CallFunction(1))
|
||||||
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;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(2, 1, FnName))
|
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -471,10 +457,10 @@ bool cPlugin_NewLua::OnHandshake(cClientHandle * a_Client, const AString & a_Use
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, a_Client, "cClientHandle");
|
m_LuaState.PushUserType(a_Client, "cClientHandle");
|
||||||
tolua_pushstring (m_LuaState, a_Username.c_str());
|
m_LuaState.PushString (a_Username.c_str());
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(2, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -498,10 +484,10 @@ bool cPlugin_NewLua::OnKilling(cEntity & a_Victim, cEntity * a_Killer)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Victim, "cEntity");
|
m_LuaState.PushObject(&a_Victim);
|
||||||
tolua_pushusertype(m_LuaState, a_Killer, "cEntity");
|
m_LuaState.PushObject(a_Killer);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(2, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -525,11 +511,11 @@ bool cPlugin_NewLua::OnLogin(cClientHandle * a_Client, int a_ProtocolVersion, co
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype (m_LuaState, a_Client, "cClientHandle");
|
m_LuaState.PushObject(a_Client);
|
||||||
tolua_pushnumber (m_LuaState, a_ProtocolVersion);
|
m_LuaState.PushNumber(a_ProtocolVersion);
|
||||||
tolua_pushcppstring(m_LuaState, a_Username);
|
m_LuaState.PushString(a_Username.c_str());
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(3, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -553,15 +539,15 @@ bool cPlugin_NewLua::OnPlayerBreakingBlock(cPlayer & a_Player, int a_BlockX, int
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
|
m_LuaState.PushObject(&a_Player);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockFace);
|
m_LuaState.PushNumber(a_BlockFace);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockType);
|
m_LuaState.PushNumber(a_BlockType);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockMeta);
|
m_LuaState.PushNumber(a_BlockMeta);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(7, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -585,15 +571,15 @@ bool cPlugin_NewLua::OnPlayerBrokenBlock(cPlayer & a_Player, int a_BlockX, int a
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
|
m_LuaState.PushObject(&a_Player);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockFace);
|
m_LuaState.PushNumber(a_BlockFace);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockType);
|
m_LuaState.PushNumber(a_BlockType);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockMeta);
|
m_LuaState.PushNumber(a_BlockMeta);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(7, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -617,9 +603,9 @@ bool cPlugin_NewLua::OnPlayerEating(cPlayer & a_Player)
|
|||||||
return false;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -643,9 +629,9 @@ bool cPlugin_NewLua::OnPlayerJoined(cPlayer & a_Player)
|
|||||||
return false;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -669,14 +655,14 @@ bool cPlugin_NewLua::OnPlayerLeftClick(cPlayer & a_Player, int a_BlockX, int a_B
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
|
m_LuaState.PushObject(&a_Player);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockFace);
|
m_LuaState.PushNumber(a_BlockFace);
|
||||||
tolua_pushnumber (m_LuaState, a_Status);
|
m_LuaState.PushNumber(a_Status);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(6, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -700,9 +686,9 @@ bool cPlugin_NewLua::OnPlayerMoved(cPlayer & a_Player)
|
|||||||
return false;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -726,18 +712,18 @@ bool cPlugin_NewLua::OnPlayerPlacedBlock(cPlayer & a_Player, int a_BlockX, int a
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
|
m_LuaState.PushObject(&a_Player);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockFace);
|
m_LuaState.PushNumber(a_BlockFace);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorX);
|
m_LuaState.PushNumber(a_CursorX);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorY);
|
m_LuaState.PushNumber(a_CursorY);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorZ);
|
m_LuaState.PushNumber(a_CursorZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockType);
|
m_LuaState.PushNumber(a_BlockType);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockMeta);
|
m_LuaState.PushNumber(a_BlockMeta);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(10, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -761,18 +747,18 @@ bool cPlugin_NewLua::OnPlayerPlacingBlock(cPlayer & a_Player, int a_BlockX, int
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
|
m_LuaState.PushObject(&a_Player);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockFace);
|
m_LuaState.PushNumber(a_BlockFace);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorX);
|
m_LuaState.PushNumber(a_CursorX);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorY);
|
m_LuaState.PushNumber(a_CursorY);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorZ);
|
m_LuaState.PushNumber(a_CursorZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockType);
|
m_LuaState.PushNumber(a_BlockType);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockMeta);
|
m_LuaState.PushNumber(a_BlockMeta);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(10, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -796,16 +782,16 @@ bool cPlugin_NewLua::OnPlayerRightClick(cPlayer & a_Player, int a_BlockX, int a_
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
|
m_LuaState.PushObject(&a_Player);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockFace);
|
m_LuaState.PushNumber(a_BlockFace);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorX);
|
m_LuaState.PushNumber(a_CursorX);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorY);
|
m_LuaState.PushNumber(a_CursorY);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorZ);
|
m_LuaState.PushNumber(a_CursorZ);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(8, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -829,10 +815,10 @@ bool cPlugin_NewLua::OnPlayerRightClickingEntity(cPlayer & a_Player, cEntity & a
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
|
m_LuaState.PushObject(&a_Player);
|
||||||
tolua_pushusertype(m_LuaState, &a_Entity, "cEntity");
|
m_LuaState.PushObject(&a_Entity);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(2, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -856,9 +842,9 @@ bool cPlugin_NewLua::OnPlayerShooting(cPlayer & a_Player)
|
|||||||
return false;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -882,9 +868,9 @@ bool cPlugin_NewLua::OnPlayerSpawned(cPlayer & a_Player)
|
|||||||
return false;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -908,9 +894,9 @@ bool cPlugin_NewLua::OnPlayerTossingItem(cPlayer & a_Player)
|
|||||||
return false;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -934,18 +920,18 @@ bool cPlugin_NewLua::OnPlayerUsedBlock(cPlayer & a_Player, int a_BlockX, int a_B
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
|
m_LuaState.PushObject(&a_Player);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockFace);
|
m_LuaState.PushNumber(a_BlockFace);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorX);
|
m_LuaState.PushNumber(a_CursorX);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorY);
|
m_LuaState.PushNumber(a_CursorY);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorZ);
|
m_LuaState.PushNumber(a_CursorZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockType);
|
m_LuaState.PushNumber(a_BlockType);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockMeta);
|
m_LuaState.PushNumber(a_BlockMeta);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(10, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -969,16 +955,16 @@ bool cPlugin_NewLua::OnPlayerUsedItem(cPlayer & a_Player, int a_BlockX, int a_Bl
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
|
m_LuaState.PushObject(&a_Player);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockFace);
|
m_LuaState.PushNumber(a_BlockFace);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorX);
|
m_LuaState.PushNumber(a_CursorX);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorY);
|
m_LuaState.PushNumber(a_CursorY);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorZ);
|
m_LuaState.PushNumber(a_CursorZ);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(8, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1002,18 +988,18 @@ bool cPlugin_NewLua::OnPlayerUsingBlock(cPlayer & a_Player, int a_BlockX, int a_
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
|
m_LuaState.PushObject(&a_Player);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockFace);
|
m_LuaState.PushNumber(a_BlockFace);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorX);
|
m_LuaState.PushNumber(a_CursorX);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorY);
|
m_LuaState.PushNumber(a_CursorY);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorZ);
|
m_LuaState.PushNumber(a_CursorZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockType);
|
m_LuaState.PushNumber(a_BlockType);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockMeta);
|
m_LuaState.PushNumber(a_BlockMeta);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(10, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1037,16 +1023,16 @@ bool cPlugin_NewLua::OnPlayerUsingItem(cPlayer & a_Player, int a_BlockX, int a_B
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
|
m_LuaState.PushObject(&a_Player);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockFace);
|
m_LuaState.PushNumber(a_BlockFace);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorX);
|
m_LuaState.PushNumber(a_CursorX);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorY);
|
m_LuaState.PushNumber(a_CursorY);
|
||||||
tolua_pushnumber (m_LuaState, a_CursorZ);
|
m_LuaState.PushNumber(a_CursorZ);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(8, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1070,11 +1056,11 @@ bool cPlugin_NewLua::OnPostCrafting(const cPlayer * a_Player, const cCraftingGri
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_Player, "cPlayer");
|
m_LuaState.PushUserType((void *)a_Player, "cPlayer");
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_Grid, "cCraftingGrid");
|
m_LuaState.PushUserType((void *)a_Grid, "cCraftingGrid");
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_Recipe, "cCraftingRecipe");
|
m_LuaState.PushUserType((void *)a_Recipe, "cCraftingRecipe");
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(3, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1098,11 +1084,11 @@ bool cPlugin_NewLua::OnPreCrafting(const cPlayer * a_Player, const cCraftingGrid
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_Player, "cPlayer");
|
m_LuaState.PushUserType((void *)a_Player, "cPlayer");
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_Grid, "cCraftingGrid");
|
m_LuaState.PushUserType((void *)a_Grid, "cCraftingGrid");
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_Recipe, "cCraftingRecipe");
|
m_LuaState.PushUserType((void *)a_Recipe, "cCraftingRecipe");
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(3, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1126,10 +1112,10 @@ bool cPlugin_NewLua::OnTakeDamage(cEntity & a_Receiver, TakeDamageInfo & a_TDI)
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_Receiver, "cEntity");
|
m_LuaState.PushObject(&a_Receiver);
|
||||||
tolua_pushusertype(m_LuaState, &a_TDI, "TakeDamageInfo");
|
m_LuaState.PushUserType(&a_TDI, "TakeDamageInfo");
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(2, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1158,17 +1144,17 @@ bool cPlugin_NewLua::OnUpdatedSign(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_World, "cWorld");
|
m_LuaState.PushObject(a_World);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushstring (m_LuaState, a_Line1.c_str());
|
m_LuaState.PushString(a_Line1.c_str());
|
||||||
tolua_pushstring (m_LuaState, a_Line2.c_str());
|
m_LuaState.PushString(a_Line2.c_str());
|
||||||
tolua_pushstring (m_LuaState, a_Line3.c_str());
|
m_LuaState.PushString(a_Line3.c_str());
|
||||||
tolua_pushstring (m_LuaState, a_Line4.c_str());
|
m_LuaState.PushString(a_Line4.c_str());
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_Player, "cPlayer");
|
m_LuaState.PushObject(a_Player);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(9, 1, FnName))
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1197,17 +1183,17 @@ bool cPlugin_NewLua::OnUpdatingSign(
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_World, "cWorld");
|
m_LuaState.PushObject(a_World);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockX);
|
m_LuaState.PushNumber(a_BlockX);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockY);
|
m_LuaState.PushNumber(a_BlockY);
|
||||||
tolua_pushnumber (m_LuaState, a_BlockZ);
|
m_LuaState.PushNumber(a_BlockZ);
|
||||||
tolua_pushstring (m_LuaState, a_Line1.c_str());
|
m_LuaState.PushString(a_Line1.c_str());
|
||||||
tolua_pushstring (m_LuaState, a_Line2.c_str());
|
m_LuaState.PushString(a_Line2.c_str());
|
||||||
tolua_pushstring (m_LuaState, a_Line3.c_str());
|
m_LuaState.PushString(a_Line3.c_str());
|
||||||
tolua_pushstring (m_LuaState, a_Line4.c_str());
|
m_LuaState.PushString(a_Line4.c_str());
|
||||||
tolua_pushusertype(m_LuaState, (void *)a_Player, "cPlayer");
|
m_LuaState.PushObject(a_Player);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(9, 5, "OnUpdatingSign"))
|
if (!m_LuaState.CallFunction(5))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1247,9 +1233,9 @@ bool cPlugin_NewLua::OnWeatherChanged(cWorld & a_World)
|
|||||||
return false;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1273,10 +1259,10 @@ bool cPlugin_NewLua::OnWeatherChanging(cWorld & a_World, eWeather & a_NewWeather
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
tolua_pushusertype(m_LuaState, &a_World, "cWorld");
|
m_LuaState.PushObject(&a_World);
|
||||||
tolua_pushnumber (m_LuaState, a_NewWeather);
|
m_LuaState.PushNumber(a_NewWeather);
|
||||||
|
|
||||||
if (!m_LuaState.CallFunction(2, 2, FnName))
|
if (!m_LuaState.CallFunction(2))
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
@ -1313,14 +1299,11 @@ bool cPlugin_NewLua::HandleCommand(const AStringVector & a_Split, cPlayer * a_Pl
|
|||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Push the split:
|
|
||||||
m_LuaState.PushStringVector(a_Split);
|
m_LuaState.PushStringVector(a_Split);
|
||||||
|
m_LuaState.PushObject(a_Player);
|
||||||
// Push player:
|
|
||||||
tolua_pushusertype(m_LuaState, a_Player, "cPlayer");
|
|
||||||
|
|
||||||
// Call function:
|
// 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));
|
LOGWARNING("LUA error in %s. Stack size: %i", __FUNCTION__, lua_gettop(m_LuaState));
|
||||||
return false;
|
return false;
|
||||||
@ -1352,23 +1335,12 @@ bool cPlugin_NewLua::HandleConsoleCommand(const AStringVector & a_Split, cComman
|
|||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
|
|
||||||
// Push the function to be called:
|
// 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:
|
m_LuaState.PushStringVector(a_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;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Call function:
|
// 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));
|
LOGWARNING("Lua error in %s. Stack size: %i", __FUNCTION__, lua_gettop(m_LuaState));
|
||||||
return false;
|
return false;
|
||||||
@ -1546,29 +1518,21 @@ AString cPlugin_NewLua::HandleWebRequest(const HTTPRequest * a_Request )
|
|||||||
|
|
||||||
if( Tab )
|
if( Tab )
|
||||||
{
|
{
|
||||||
// LOGINFO("1. Stack size: %i", lua_gettop(m_LuaState) );
|
m_LuaState.PushFunctionFromRegistry(Tab->UserData);
|
||||||
lua_rawgeti( m_LuaState, LUA_REGISTRYINDEX, Tab->UserData); // same as lua_getref()
|
|
||||||
|
|
||||||
// LOGINFO("2. Stack size: %i", lua_gettop(m_LuaState) );
|
|
||||||
// Push HTTPRequest
|
// Push HTTPRequest
|
||||||
tolua_pushusertype( m_LuaState, (void*)a_Request, "const HTTPRequest" );
|
m_LuaState.PushUserType((void*)a_Request, "const HTTPRequest");
|
||||||
// LOGINFO("Calling bound function! :D");
|
|
||||||
int s = lua_pcall( m_LuaState, 1, 1, 0);
|
|
||||||
|
|
||||||
if ( s != 0 )
|
if (!m_LuaState.CallFunction(1))
|
||||||
{
|
{
|
||||||
std::string err = lua_tostring(m_LuaState, -1);
|
return "Lua encountered error while processing the page request";
|
||||||
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
|
|
||||||
}
|
}
|
||||||
|
|
||||||
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() );
|
LOGWARNING("WebPlugin tab '%s' did not return a string!", Tab->Title.c_str());
|
||||||
lua_pop(m_LuaState, 1); // Pop return value
|
lua_pop(m_LuaState, 1); // Pop return value
|
||||||
return std::string("WARNING: WebPlugin tab '") + Tab->Title + std::string("' did not return a string!");
|
return Printf("WARNING: WebPlugin tab '%s' did not return a string!", Tab->Title.c_str());
|
||||||
}
|
}
|
||||||
|
|
||||||
RetVal += tolua_tostring(m_LuaState, -1, 0);
|
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);
|
ASSERT(a_FnRef != LUA_REFNIL);
|
||||||
|
|
||||||
cCSLock Lock(m_CriticalSection);
|
cCSLock Lock(m_CriticalSection);
|
||||||
lua_rawgeti(m_LuaState, LUA_REGISTRYINDEX, a_FnRef); // Push the function to be called
|
m_LuaState.PushFunctionFromRegistry(a_FnRef);
|
||||||
tolua_pushusertype(m_LuaState, &a_Window, "cWindow");
|
m_LuaState.PushUserType(&a_Window, "cWindow");
|
||||||
tolua_pushusertype(m_LuaState, &a_Player, "cPlayer");
|
m_LuaState.PushObject(&a_Player);
|
||||||
tolua_pushboolean (m_LuaState, a_CanRefuse ? 1 : 0);
|
m_LuaState.PushBool(a_CanRefuse);
|
||||||
|
|
||||||
// Call function:
|
// 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));
|
LOGWARNING("LUA error in %s. Stack size: %i", __FUNCTION__, lua_gettop(m_LuaState));
|
||||||
return false;
|
return false;
|
||||||
@ -1666,12 +1630,12 @@ 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);
|
||||||
lua_rawgeti(m_LuaState, LUA_REGISTRYINDEX, a_FnRef); // Push the function to be called
|
m_LuaState.PushFunctionFromRegistry(a_FnRef);
|
||||||
tolua_pushusertype(m_LuaState, &a_Window, "cWindow");
|
m_LuaState.PushUserType(&a_Window, "cWindow");
|
||||||
tolua_pushnumber (m_LuaState, a_SlotNum);
|
m_LuaState.PushNumber(a_SlotNum);
|
||||||
|
|
||||||
// Call function:
|
// 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));
|
LOGWARNING("LUA error in %s. Stack size: %i", __FUNCTION__, lua_gettop(m_LuaState));
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user