From 7d5a8ac14b62378ed56b5e6e643ac3ecdb576d6d Mon Sep 17 00:00:00 2001 From: James R Date: Wed, 15 Jan 2020 19:13:41 -0800 Subject: [PATCH] Allow G_BuildMapName outside of levels --- src/lua_baselib.c | 21 +++++++++++++++++++-- src/lua_script.h | 5 ++++- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/src/lua_baselib.c b/src/lua_baselib.c index 2a82ec512..d4d6e1a6d 100644 --- a/src/lua_baselib.c +++ b/src/lua_baselib.c @@ -2772,11 +2772,28 @@ static int lib_gAddGametype(lua_State *L) return 0; } +static int Lcheckmapnumber (lua_State *L, int idx) +{ + if (ISINLEVEL) + return luaL_optinteger(L, idx, gamemap); + else + { + if (lua_isnoneornil(L, idx)) + { + return luaL_error(L, + "G_BuildMapName can only be used " + "without a parameter while in a level." + ); + } + else + return luaL_checkinteger(L, idx); + } +} + static int lib_gBuildMapName(lua_State *L) { - INT32 map = luaL_optinteger(L, 1, gamemap); + INT32 map = Lcheckmapnumber(L, 1); //HUDSAFE - INLEVEL lua_pushstring(L, G_BuildMapName(map)); return 1; } diff --git a/src/lua_script.h b/src/lua_script.h index 8f27dcb4c..7d8aaa282 100644 --- a/src/lua_script.h +++ b/src/lua_script.h @@ -100,7 +100,10 @@ void COM_Lua_f(void); // uncomment if you want seg_t/node_t in Lua // #define HAVE_LUA_SEGS -#define INLEVEL if (gamestate != GS_LEVEL && !titlemapinaction)\ +#define ISINLEVEL \ + (gamestate == GS_LEVEL || titlemapinaction) + +#define INLEVEL if (! ISINLEVEL)\ return luaL_error(L, "This can only be used in a level!"); #endif