From 6708adcdfa9f0c3464f99c3b29b55ba652edd240 Mon Sep 17 00:00:00 2001 From: RedEnchilada Date: Fri, 11 Dec 2015 22:38:58 -0600 Subject: [PATCH] Fix NetVars hook --- src/lua_hook.h | 2 ++ src/lua_hooklib.c | 28 ++++++++++++++++++++++++++++ src/lua_script.c | 28 ++-------------------------- 3 files changed, 32 insertions(+), 26 deletions(-) diff --git a/src/lua_hook.h b/src/lua_hook.h index da2dcdc38..cfa9a1446 100644 --- a/src/lua_hook.h +++ b/src/lua_hook.h @@ -14,6 +14,7 @@ #include "r_defs.h" #include "d_player.h" +#include "blua/lua.h" enum hook { hook_NetVars=0, @@ -47,6 +48,7 @@ enum hook { }; extern const char *const hookNames[]; +void LUAh_NetArchiveHook(lua_CFunction archFunc); void LUAh_MapChange(void); // Hook for map change (before load) void LUAh_MapLoad(void); // Hook for map load void LUAh_PlayerJoin(int playernum); // Hook for Got_AddPlayer diff --git a/src/lua_hooklib.c b/src/lua_hooklib.c index 0415d23e6..273c70a12 100644 --- a/src/lua_hooklib.c +++ b/src/lua_hooklib.c @@ -173,6 +173,34 @@ int LUA_HookLib(lua_State *L) return 0; } +void LUAh_NetArchiveHook(lua_CFunction archFunc) +{ + int TABLESINDEX; + hook_p hookp; + + if (!gL) + return; + + TABLESINDEX = lua_gettop(gL); + + lua_settop(gL, 0); + + lua_pushvalue(gL, TABLESINDEX); + lua_pushcclosure(gL, archFunc, 1); + lua_pushnil(gL); + + for (hookp = roothook; hookp; hookp = hookp->next) + if (hookp->type == hook_NetVars) + { + lua_pushfstring(gL, FMT_HOOKID, hookp->id); + lua_gettable(gL, LUA_REGISTRYINDEX); + lua_pushvalue(gL, -2); + LUA_Call(gL, 1); + } + + lua_pop(gL, 2); +} + boolean LUAh_MobjHook(mobj_t *mo, enum hook which) { hook_p hookp; diff --git a/src/lua_script.c b/src/lua_script.c index a7315ad62..9925bac02 100644 --- a/src/lua_script.c +++ b/src/lua_script.c @@ -915,30 +915,6 @@ static void UnArchiveTables(void) } } -static void NetArchiveHook(lua_CFunction archFunc) -{ - int TABLESINDEX; - - if (!gL) - return; - - TABLESINDEX = lua_gettop(gL); - lua_getfield(gL, LUA_REGISTRYINDEX, "hook"); - I_Assert(lua_istable(gL, -1)); - lua_rawgeti(gL, -1, hook_NetVars); - lua_remove(gL, -2); - I_Assert(lua_istable(gL, -1)); - - lua_pushvalue(gL, TABLESINDEX); - lua_pushcclosure(gL, archFunc, 1); - lua_pushnil(gL); - while (lua_next(gL, -3) != 0) { - lua_pushvalue(gL, -3); // function - LUA_Call(gL, 1); - } - lua_pop(gL, 2); -} - void LUA_Step(void) { if (!gL) @@ -972,7 +948,7 @@ void LUA_Archive(void) } WRITEUINT32(save_p, UINT32_MAX); // end of mobjs marker, replaces mobjnum. - NetArchiveHook(NetArchive); // call the NetArchive hook in archive mode + LUAh_NetArchiveHook(NetArchive); // call the NetArchive hook in archive mode ArchiveTables(); if (gL) @@ -1003,7 +979,7 @@ void LUA_UnArchive(void) UnArchiveExtVars(th); // apply variables } while(mobjnum != UINT32_MAX); // repeat until end of mobjs marker. - NetArchiveHook(NetUnArchive); // call the NetArchive hook in unarchive mode + LUAh_NetArchiveHook(NetUnArchive); // call the NetArchive hook in unarchive mode UnArchiveTables(); if (gL)