mirror of
https://git.do.srb2.org/STJr/SRB2.git
synced 2024-11-30 08:00:56 +00:00
Fix NetVars hook
This commit is contained in:
parent
c9e7467817
commit
6ee0398a1f
3 changed files with 32 additions and 26 deletions
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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)
|
||||||
|
|
Loading…
Reference in a new issue