diff --git a/apps/openmw-mp/Script/LangLua/LangLua.cpp b/apps/openmw-mp/Script/LangLua/LangLua.cpp index 3515f9e25..b1ad3999f 100644 --- a/apps/openmw-mp/Script/LangLua/LangLua.cpp +++ b/apps/openmw-mp/Script/LangLua/LangLua.cpp @@ -133,20 +133,65 @@ boost::any LangLua::Call(const char *name, const char *argl, int buf, ...) { va_list vargs; va_start(vargs, buf); - std::vector args; - ScriptFunctions::GetArguments(args, vargs, argl); + int n_args = (int)(strlen(argl)); - return Call(name, argl, args); + lua_getglobal(lua, name); + + for (int index = 0; index < n_args; index++) + { + switch (argl[index]) + { + case 'i': + luabridge::Stack::push(lua,va_arg(vargs, unsigned int)); + break; + + case 'q': + luabridge::Stack::push(lua,va_arg(vargs, signed int)); + break; + + case 'l': + luabridge::Stack::push(lua, va_arg(vargs, unsigned long long)); + break; + + case 'w': + luabridge::Stack::push(lua, va_arg(vargs, signed long long)); + break; + + case 'f': + luabridge::Stack::push(lua, va_arg(vargs, double)); + break; + + case 'p': + luabridge::Stack::push(lua, va_arg(vargs, void*)); + break; + + case 's': + luabridge::Stack::push(lua, va_arg(vargs, const char*)); + break; + + case 'b': + luabridge::Stack::push(lua, (bool) va_arg(vargs, int)); + break; + + default: + throw runtime_error("C++ call: Unknown argument identifier " + argl[index]); + } + } + + va_end(vargs); + + luabridge::LuaException::pcall(lua, n_args, 1); + return boost::any(luabridge::LuaRef::fromStack(lua, -1)); } boost::any LangLua::Call(const char *name, const char *argl, const std::vector &args) { - int n_args = (int)(strlen(argl)) ; + int n_args = (int)(strlen(argl)); - lua_getglobal (lua, name); + lua_getglobal(lua, name); - for (intptr_t index = 0; index < n_args; index++) + for (int index = 0; index < n_args; index++) { switch (argl[index]) { @@ -186,6 +231,6 @@ boost::any LangLua::Call(const char *name, const char *argl, const std::vector