Fix NetVars hook

This commit is contained in:
RedEnchilada 2015-12-11 22:38:58 -06:00
parent c9e7467817
commit 6ee0398a1f
3 changed files with 32 additions and 26 deletions

View file

@ -14,6 +14,7 @@
#include "r_defs.h" #include "r_defs.h"
#include "d_player.h" #include "d_player.h"
#include "blua/lua.h"
enum hook { enum hook {
hook_NetVars=0, hook_NetVars=0,
@ -47,6 +48,7 @@ enum hook {
}; };
extern const char *const hookNames[]; extern const char *const hookNames[];
void LUAh_NetArchiveHook(lua_CFunction archFunc);
void LUAh_MapChange(void); // Hook for map change (before load) void LUAh_MapChange(void); // Hook for map change (before load)
void LUAh_MapLoad(void); // Hook for map load void LUAh_MapLoad(void); // Hook for map load
void LUAh_PlayerJoin(int playernum); // Hook for Got_AddPlayer void LUAh_PlayerJoin(int playernum); // Hook for Got_AddPlayer

View file

@ -173,6 +173,34 @@ int LUA_HookLib(lua_State *L)
return 0; 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) boolean LUAh_MobjHook(mobj_t *mo, enum hook which)
{ {
hook_p hookp; hook_p hookp;

View file

@ -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) void LUA_Step(void)
{ {
if (!gL) if (!gL)
@ -972,7 +948,7 @@ void LUA_Archive(void)
} }
WRITEUINT32(save_p, UINT32_MAX); // end of mobjs marker, replaces mobjnum. 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(); ArchiveTables();
if (gL) if (gL)
@ -1003,7 +979,7 @@ void LUA_UnArchive(void)
UnArchiveExtVars(th); // apply variables UnArchiveExtVars(th); // apply variables
} while(mobjnum != UINT32_MAX); // repeat until end of mobjs marker. } 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(); UnArchiveTables();
if (gL) if (gL)