From c6e3f780e735be6a7890e8a2bd61bbd75db85f61 Mon Sep 17 00:00:00 2001 From: James R Date: Thu, 18 Aug 2022 18:14:23 -0700 Subject: [PATCH] Revert "Merge branch 'consoleplayer-dedicated' into 'next'" This reverts commit 5ec44ba3fa0d33313d52d2cb9df5a71abc2de45d, reversing changes made to 4c5d69b71497bdc5080386357a91c437a63f253f. --- src/dehacked.c | 7 ++++--- src/lua_playerlib.c | 31 +++++++++++++++---------------- src/lua_script.c | 8 -------- src/lua_script.h | 1 - 4 files changed, 19 insertions(+), 28 deletions(-) diff --git a/src/dehacked.c b/src/dehacked.c index 9e46522e..6e21e787 100644 --- a/src/dehacked.c +++ b/src/dehacked.c @@ -9740,10 +9740,11 @@ static inline int lib_getenum(lua_State *L) lua_pushinteger(L, mapmusposition); return 1; } else if (fastcmp(word,"server")) { - return LUA_PushServerPlayer(L); + if ((!multiplayer || !(netgame || demo.playback)) && !playeringame[serverplayer]) + return 0; + LUA_PushUserdata(L, &players[serverplayer], META_PLAYER); + return 1; } else if (fastcmp(word,"consoleplayer")) { // Player controlling the console, basically our local player - if (consoleplayer == serverplayer) - return LUA_PushServerPlayer(L); if (consoleplayer < 0 || !playeringame[consoleplayer]) return 0; LUA_PushUserdata(L, &players[consoleplayer], META_PLAYER); diff --git a/src/lua_playerlib.c b/src/lua_playerlib.c index e00af595..26561a4d 100644 --- a/src/lua_playerlib.c +++ b/src/lua_playerlib.c @@ -27,35 +27,25 @@ static int lib_iteratePlayers(lua_State *L) { INT32 i = -1; - if (lua_gettop(L) < 2) { //return luaL_error(L, "Don't call players.iterate() directly, use it as 'for player in players.iterate do end'."); lua_pushcfunction(L, lib_iteratePlayers); return 1; } - lua_settop(L, 2); lua_remove(L, 1); // state is unused. - if (!lua_isnil(L, 1)) i = (INT32)(*((player_t **)luaL_checkudata(L, 1, META_PLAYER)) - players); - - i++; - - if (i == serverplayer) - { - return LUA_PushServerPlayer(L); - } - - for (; i < MAXPLAYERS; i++) + for (i++; i < MAXPLAYERS; i++) { if (!playeringame[i]) continue; + if (!players[i].mo) + continue; LUA_PushUserdata(L, &players[i], META_PLAYER); return 1; } - return 0; } @@ -68,10 +58,10 @@ static int lib_getPlayer(lua_State *L) lua_Integer i = luaL_checkinteger(L, 2); if (i < 0 || i >= MAXPLAYERS) return luaL_error(L, "players[] index %d out of range (0 - %d)", i, MAXPLAYERS-1); - if (i == serverplayer) - return LUA_PushServerPlayer(L); if (!playeringame[i]) return 0; + if (!players[i].mo) + return 0; LUA_PushUserdata(L, &players[i], META_PLAYER); return 1; } @@ -132,6 +122,8 @@ static int lib_iterateDisplayplayers(lua_State *L) if (i > splitscreen || !playeringame[displayplayers[i]]) return 0; // Stop! There are no more players for us to go through. There will never be a player gap in displayplayers. + if (!players[displayplayers[i]].mo) + continue; LUA_PushUserdata(L, &players[displayplayers[i]], META_PLAYER); lua_pushinteger(L, i); // push this to recall what number we were on for the next function call. I suppose this also means you can retrieve the splitscreen player number with 'for p, n in displayplayers.iterate'! return 2; @@ -152,6 +144,8 @@ static int lib_getDisplayplayers(lua_State *L) return 0; if (!playeringame[displayplayers[i]]) return 0; + if (!players[displayplayers[i]].mo) + return 0; LUA_PushUserdata(L, &players[displayplayers[i]], META_PLAYER); return 1; } @@ -190,7 +184,12 @@ static int player_get(lua_State *L) else if (fastcmp(field,"name")) lua_pushstring(L, player_names[plr-players]); else if (fastcmp(field,"mo")) - LUA_PushUserdata(L, plr->mo, META_MOBJ); + { + if (plr->spectator) + lua_pushnil(L); + else + LUA_PushUserdata(L, plr->mo, META_MOBJ); + } else if (fastcmp(field,"cmd")) LUA_PushUserdata(L, &plr->cmd, META_TICCMD); else if (fastcmp(field,"playerstate")) diff --git a/src/lua_script.c b/src/lua_script.c index 5aff5380..ef1d2544 100644 --- a/src/lua_script.c +++ b/src/lua_script.c @@ -369,14 +369,6 @@ void LUA_PushUserdata(lua_State *L, void *data, const char *meta) lua_remove(L, -2); // remove LREG_VALID } -int LUA_PushServerPlayer(lua_State *L) -{ - if ((!multiplayer || !(netgame || demo.playback)) && !playeringame[serverplayer]) - return 0; - LUA_PushUserdata(L, &players[serverplayer], META_PLAYER); - return 1; -} - // When userdata is freed, use this function to remove it from Lua. void LUA_InvalidateUserdata(void *data) { diff --git a/src/lua_script.h b/src/lua_script.h index 5e2e171f..b3ca16bc 100644 --- a/src/lua_script.h +++ b/src/lua_script.h @@ -46,7 +46,6 @@ void LUA_DumpFile(const char *filename); #endif fixed_t LUA_EvalMath(const char *word); void LUA_PushUserdata(lua_State *L, void *data, const char *meta); -int LUA_PushServerPlayer(lua_State *L); void LUA_InvalidateUserdata(void *data); void LUA_InvalidateLevel(void); void LUA_InvalidateMapthings(void);