/** * @luafunc table Team::getPlayers() * * @brief Get a table containing all players on a team. * * @code * local players = team:getPlayers() * for i, v in ipairs(players) do * print(v:getName()) * end * @endcode * * @return A table of \link LuaPlayerInfo LuaPlayerInfos \endlink currently on this * team. */ S32 Team::lua_getPlayers(lua_State *L) { ServerGame *game = GameManager::getServerGame(); TNLAssert(game->getPlayerCount() == game->getClientCount(), "Mismatched player counts!"); S32 pushed = 0; lua_newtable(L); // Create a table, with no slots pre-allocated for our data for(S32 i = 0; i < game->getClientCount(); i++) { ClientInfo *clientInfo = game->getClientInfo(i); if(clientInfo->getTeamIndex() == mTeamIndex) { clientInfo->getPlayerInfo()->push(L); pushed++; // Increment pushed before using it because Lua uses 1-based arrays lua_rawseti(L, 1, pushed); } } for(S32 i = 0; i < game->getRobotCount(); i ++) { if(game->getBot(i)->getTeam() == mTeamIndex) { game->getBot(i)->getPlayerInfo()->push(L); pushed++; // Increment pushed before using it because Lua uses 1-based arrays lua_rawseti(L, 1, pushed); } } return 1; }
/** * @luafunc table LuaGameInfo::getPlayers() * * @brief Get a list of the players in the game. * * @return A table containing the LuaPlayerInfo for each player (and robot) in * the game */ S32 LuaGameInfo::lua_getPlayers(lua_State *L) { ServerGame *game = mServerGame; S32 pushed = 0; // Count of pushed objects lua_newtable(L); // Create a table, with no slots pre-allocated for our data for(S32 i = 0; i < game->getClientCount(); i++) { ClientInfo *clientInfo = game->getClientInfo(i); if(clientInfo->getPlayerInfo() == NULL || clientInfo->isRobot()) // Skip defunct players and bots continue; clientInfo->getPlayerInfo()->push(L); pushed++; // Increment pushed before using it because Lua uses 1-based arrays lua_rawseti(L, 1, pushed); } for(S32 i = 0; i < game->getRobotCount(); i ++) { game->getBot(i)->getPlayerInfo()->push(L); pushed++; // Increment pushed before using it because Lua uses 1-based arrays lua_rawseti(L, 1, pushed); } return 1; }