summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/cat/LegacyLuaAPI.cpp2
-rw-r--r--src/cat/LuaScriptHelper.h1
-rw-r--r--src/cat/LuaScriptInterface.cpp35
3 files changed, 34 insertions, 4 deletions
diff --git a/src/cat/LegacyLuaAPI.cpp b/src/cat/LegacyLuaAPI.cpp
index 45b7f96..2166b14 100644
--- a/src/cat/LegacyLuaAPI.cpp
+++ b/src/cat/LegacyLuaAPI.cpp
@@ -664,7 +664,7 @@ void luacon_hook(lua_State * l, lua_Debug * ar)
}
}
-static int luaL_tostring (lua_State *L, int n) {
+int luaL_tostring (lua_State *L, int n) {
luaL_checkany(L, n);
switch (lua_type(L, n)) {
case LUA_TNUMBER:
diff --git a/src/cat/LuaScriptHelper.h b/src/cat/LuaScriptHelper.h
index fde1eb4..d1679a6 100644
--- a/src/cat/LuaScriptHelper.h
+++ b/src/cat/LuaScriptHelper.h
@@ -9,6 +9,7 @@ extern Graphics * luacon_g;
extern Renderer * luacon_ren;
extern bool *luacon_currentCommand;
+extern int luaL_tostring(lua_State* l, int n);
extern std::string *luacon_lastError;
extern int *lua_el_func, *lua_el_mode, *lua_gr_func;
diff --git a/src/cat/LuaScriptInterface.cpp b/src/cat/LuaScriptInterface.cpp
index 74757e5..8d499a0 100644
--- a/src/cat/LuaScriptInterface.cpp
+++ b/src/cat/LuaScriptInterface.cpp
@@ -2119,14 +2119,43 @@ int LuaScriptInterface::Command(std::string command)
}
else
{
- int ret;
+ int level = lua_gettop(l), ret;
+ std::string text = "";
lastError = "";
currentCommand = true;
+ std::string tmp = "return " + command;
ui::Engine::Ref().LastTick(clock());
- if((ret = luaL_dostring(l, command.c_str())))
+ luaL_loadbuffer(l, tmp.c_str(), tmp.length(), "@console");
+ if(lua_type(l, -1) != LUA_TFUNCTION)
{
+ lua_pop(l, 1);
+ luaL_loadbuffer(l, command.c_str(), command.length(), "@console");
+ }
+ if(lua_type(l, -1) != LUA_TFUNCTION)
lastError = luacon_geterror();
- //Log(LogError, lastError);
+ else
+ {
+ ret = lua_pcall(l, 0, LUA_MULTRET, 0);
+ if(ret)
+ lastError = luacon_geterror();
+ else
+ {
+ for(level++;level<=lua_gettop(l);level++)
+ {
+ luaL_tostring(l, level);
+ if(text.length())
+ text += ", " + std::string(luaL_optstring(l, -1, ""));
+ else
+ text = std::string(luaL_optstring(l, -1, ""));
+ lua_pop(l, 1);
+ }
+ if(text.length())
+ if(lastError.length())
+ lastError += "; " + text;
+ else
+ lastError = text;
+
+ }
}
currentCommand = false;
return ret;