34 lines
831 B
C++
34 lines
831 B
C++
|
|
// Call a Lua function from TS, return true if success - result will be on Lua
|
|
// stack
|
|
#include "BlFuncs.hpp"
|
|
#include "BlHooks.hpp"
|
|
#include "luainterp.hpp"
|
|
|
|
bool bll_LuaCall(const char* fname, int argc, const char* argv[]) {
|
|
lua_getglobal(gL, fname);
|
|
for (int i = 0; i < argc; i++) {
|
|
lua_pushstring(gL, argv[i]);
|
|
}
|
|
if (bll_pcall(gL, argc, 1)) {
|
|
bll_printError(gL, "call", fname);
|
|
return false;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
// TS lib function: luacall
|
|
const char* bll_ts_luacall(ADDR obj, int argc, const char* argv[]) {
|
|
if (argc < 2)
|
|
return "";
|
|
|
|
if (!bll_LuaCall(argv[1], argc - 2, &argv[2])) {
|
|
return "";
|
|
}
|
|
|
|
char* retbuf = BlReturnBuffer(BLL_ARG_MAX);
|
|
bll_toarg(gL, retbuf, -1, false); // provide returned value to ts
|
|
lua_pop(gL, 1); // pop returned value
|
|
return retbuf;
|
|
}
|