mirror of
https://git.do.srb2.org/KartKrew/Kart-Public.git
synced 2024-12-26 12:21:19 +00:00
Updated NetArchiveHook to lua_hooklib.c
Fixes I_Assert failure crash due to hooks working differently now.
This commit is contained in:
parent
fc35c8557e
commit
0b704ba618
2 changed files with 27 additions and 25 deletions
|
@ -768,4 +768,28 @@ boolean LUAh_HurtMsg(player_t *player, mobj_t *inflictor, mobj_t *source)
|
||||||
return hooked;
|
return hooked;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void LUAh_NetArchiveHook(lua_CFunction archFunc)
|
||||||
|
{
|
||||||
|
hook_p hookp;
|
||||||
|
|
||||||
|
if (!gL || !(hooksAvailable[hook_NetVars/8] & (1<<(hook_NetVars%8))))
|
||||||
|
return;
|
||||||
|
|
||||||
|
// stack: tables
|
||||||
|
I_Assert(lua_gettop(gL) > 0);
|
||||||
|
I_Assert(lua_istable(gL, -1));
|
||||||
|
|
||||||
|
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); // tables
|
||||||
|
LUA_Call(gL, 1);
|
||||||
|
}
|
||||||
|
|
||||||
|
// pop tables
|
||||||
|
lua_pop(gL, 1);
|
||||||
|
}
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -915,29 +915,7 @@ static void UnArchiveTables(void)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static void NetArchiveHook(lua_CFunction archFunc)
|
void LUAh_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)
|
||||||
{
|
{
|
||||||
|
@ -972,7 +950,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 +981,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