diff --git a/server/endpoint.cpp b/server/endpoint.cpp index 8c25fc5..7b12f00 100644 --- a/server/endpoint.cpp +++ b/server/endpoint.cpp @@ -1060,11 +1060,14 @@ bool Endpoint::ProcessCommand(const char *chat, std::string *response) { Game *game = game_; bool lobby = false; + bool all = false; dword roomid = roomid_; std::string roomid_str; if (GetArgument(chat, 1, &roomid_str)) { if (strcmp(roomid_str.c_str(), "lobby") == 0) { lobby = true; + } else if (strcmp(roomid_str.c_str(), "all") == 0) { + all = true; } else { base::Format::ToDword(roomid_str.c_str(), 10, &roomid); room = server_.lobby().FindRoom(roomid); @@ -1090,11 +1093,57 @@ bool Endpoint::ProcessCommand(const char *chat, std::string *response) { std::vector responses; if (lobby) { responses = server_.lobby().GetIdsString(this); + if (responses.empty()) { + *response = "There are no players in the lobby."; + return true; + } + } else if (all) { + // Vector for saving temp info + std::vector r; + + // Add lobby players to responses + r = server_.lobby().GetIdsString(this); + responses.insert(responses.end(), r.begin(), r.end()); + + // Iterate over all the rooms + std::vector roomIds = server_.lobby().GetRoomIds(); + std::vector::iterator itRooms = roomIds.begin(); + for (; itRooms != roomIds.end(); itRooms++) { + // Add the room's players to responses + room = server_.lobby().FindRoom((*itRooms)); + r = room->GetIdsString(this); + responses.insert(responses.end(), r.begin(), r.end()); + + // Iteratre over all the room's games + std::vector gameIds = room->GetGameIds(); + std::vector::iterator itGame = gameIds.begin(); + for (; itGame != gameIds.end(); itGame++) { + // Add the game's players to responses + game = room->FindGame((*itGame)); + r = game->GetIdsString(this); + responses.insert(responses.end(), r.begin(), r.end()); + } + } + + // This shouldn't happen + if (responses.empty()) { + *response = "There are no players on the server."; + return true; + } + } else { if (game != NULL) { responses = game->GetIdsString(this); + if (responses.empty()) { + *response = "There are no players in that game."; + return true; + } } else if (room != NULL) { responses = room->GetIdsString(this); + if (responses.empty()) { + *response = "There are no players in that room."; + return true; + } } } @@ -1253,15 +1302,15 @@ bool Endpoint::ProcessCommand(const char *chat, std::string *response) { case kModeratorCommandHelp: if (IsAdmin()) { if (state_ == ES_GAME) { - *response = "/ids [lobby] [roomid] [gameid], /mute [minutes], /unmute , /ban [minutes], /rooms, /kill , /games , /names , /w , /m, /title , /clear, /filter, /sig, /see, /perm , /reg , /swap, /anon, /rules, /flag [msg], /help."; + *response = "/ids [all] [lobby] [roomid] [gameid], /mute [minutes], /unmute , /ban [minutes], /rooms, /kill , /games , /names , /w , /m, /title , /clear, /filter, /sig, /see, /perm , /reg , /swap, /anon, /rules, /flag [msg], /ann [msg], /help."; } else { - *response = "/ids [lobby] [roomid] [gameid], /mute [minutes], /unmute , /kick [minutes], /ban [minutes], /rooms, /kill , /games , /names , /w , /m, /title , /clear, /filter, /sig, /see, /perm , /reg , /rules, /flag [msg], /help."; + *response = "/ids [all] [lobby] [roomid] [gameid], /mute [minutes], /unmute , /kick [minutes], /ban [minutes], /rooms, /kill , /games , /names , /w , /m, /title , /clear, /filter, /sig, /see, /perm , /reg , /rules, /flag [msg], /ann [msg], /help."; } } else { if (state_ == ES_GAME) { - *response = "/ids [lobby] [roomid] [gameid], /mute [minutes], /unmute , /rooms, /games , /w , /m, /title , /sig, /see, /swap, /anon, /rules, /flag [msg], /help."; + *response = "/ids [all] [lobby] [roomid] [gameid], /mute [minutes], /unmute , /rooms, /games , /w , /m, /title , /sig, /see, /swap, /anon, /rules, /flag [msg], /help."; } else { - *response = "/ids [lobby] [roomid] [gameid], /mute [minutes], /unmute , /kick [minutes], /rooms, /games , /w , /m, /title , /sig, /see, /rules, /flag [msg], /help."; + *response = "/ids [all] [lobby] [roomid] [gameid], /mute [minutes], /unmute , /kick [minutes], /rooms, /games , /w , /m, /title , /sig, /see, /rules, /flag [msg], /help."; } } break; diff --git a/server/game.cpp b/server/game.cpp index b02786a..f2ce8e2 100644 --- a/server/game.cpp +++ b/server/game.cpp @@ -891,10 +891,10 @@ std::vector Game::GetIdsString(Endpoint *endpoint) { char ip[32]; (*it)->xpump().socket()->GetRemoteAddress().IPAsString(ip, sizeof(ip)); - responses.push_back(base::Format::ToString("%s: id %d ip %s\n", + responses.push_back(base::Format::ToString("%s: id %d ip %s", (*it)->name(), server_.GetChatterId(endpoint, *it), ip)); } else { - responses.push_back(base::Format::ToString("%s: id %d\n", + responses.push_back(base::Format::ToString("%s: id %d", (*it)->name(), server_.GetChatterId(endpoint, *it))); } }