Fix issue #1009 (minetest.get_connected_players() returns non-existing players)

This commit is contained in:
kwolekr 2013-11-17 02:57:40 -05:00
parent a55c073ce9
commit 86ef7147b6
3 changed files with 17 additions and 1 deletions

@ -53,7 +53,9 @@ end)
function minetest.get_connected_players() function minetest.get_connected_players()
local temp_table = {} local temp_table = {}
for index, value in pairs(player_list) do for index, value in pairs(player_list) do
table.insert(temp_table, value) if value:is_player_connected() then
table.insert(temp_table, value)
end
end end
return temp_table return temp_table
end end

@ -621,6 +621,16 @@ int ObjectRef::l_is_player(lua_State *L)
return 1; return 1;
} }
// is_player_connected(self)
int ObjectRef::l_is_player_connected(lua_State *L)
{
NO_MAP_LOCK_REQUIRED;
ObjectRef *ref = checkobject(L, 1);
Player *player = getplayer(ref);
lua_pushboolean(L, (player != NULL && player->peer_id != 0));
return 1;
}
// get_player_name(self) // get_player_name(self)
int ObjectRef::l_get_player_name(lua_State *L) int ObjectRef::l_get_player_name(lua_State *L)
{ {
@ -1148,6 +1158,7 @@ const luaL_reg ObjectRef::methods[] = {
luamethod(ObjectRef, get_luaentity), luamethod(ObjectRef, get_luaentity),
// Player-only // Player-only
luamethod(ObjectRef, is_player), luamethod(ObjectRef, is_player),
luamethod(ObjectRef, is_player_connected),
luamethod(ObjectRef, get_player_name), luamethod(ObjectRef, get_player_name),
luamethod(ObjectRef, get_look_dir), luamethod(ObjectRef, get_look_dir),
luamethod(ObjectRef, get_look_pitch), luamethod(ObjectRef, get_look_pitch),

@ -158,6 +158,9 @@ private:
// is_player(self) // is_player(self)
static int l_is_player(lua_State *L); static int l_is_player(lua_State *L);
// is_player_connected(self)
static int l_is_player_connected(lua_State *L);
// get_player_name(self) // get_player_name(self)
static int l_get_player_name(lua_State *L); static int l_get_player_name(lua_State *L);