From b4d9732fe9281d58e6970f336054205471bec74c Mon Sep 17 00:00:00 2001 From: PlasmaPower Date: Sun, 29 May 2016 11:12:18 -0600 Subject: [PATCH] Added GetTeamNames to cScoreboard (#3217) Resolves #3210 --- Server/Plugins/APIDump/APIDesc.lua | 1 + Server/Plugins/Debuggers/Debuggers.lua | 13 +++++++++++++ Server/Plugins/Debuggers/Info.lua | 6 ++++++ src/Bindings/ManualBindings.cpp | 25 +++++++++++++++++++++++++ src/Scoreboard.cpp | 16 ++++++++++++++++ src/Scoreboard.h | 3 +++ 6 files changed, 64 insertions(+) diff --git a/Server/Plugins/APIDump/APIDesc.lua b/Server/Plugins/APIDump/APIDesc.lua index 43e805a50..0f399bd07 100644 --- a/Server/Plugins/APIDump/APIDesc.lua +++ b/Server/Plugins/APIDump/APIDesc.lua @@ -2196,6 +2196,7 @@ end GetObjective = { Params = "string", Return = "{{cObjective}}", Notes = "Returns the objective with the specified name." }, GetObjectiveIn = { Params = "DisplaySlot", Return = "{{cObjective}}", Notes = "Returns the objective in the specified display slot. Can be nil." }, GetTeam = { Params = "string", Return = "{{cTeam}}", Notes = "Returns the team with the specified name." }, + GetTeamNames = { Params = "", Return = "array table of strings", Notes = "Returns the names of all teams" }, RegisterObjective = { Params = "Name, DisplayName, Type", Return = "{{cObjective}}", Notes = "Registers a new scoreboard objective. Returns the {{cObjective}} instance, nil on error." }, RegisterTeam = { Params = "Name, DisplayName, Prefix, Suffix", Return = "{{cTeam}}", Notes = "Registers a new team. Returns the {{cTeam}} instance, nil on error." }, RemoveObjective = { Params = "string", Return = "bool", Notes = "Removes the objective with the specified name. Returns true if operation was successful." }, diff --git a/Server/Plugins/Debuggers/Debuggers.lua b/Server/Plugins/Debuggers/Debuggers.lua index c11052071..ae06b4fc9 100644 --- a/Server/Plugins/Debuggers/Debuggers.lua +++ b/Server/Plugins/Debuggers/Debuggers.lua @@ -2184,3 +2184,16 @@ end + +function HandleTeamsCmd(a_Split, a_Player) + local Scoreboard = a_Player:GetWorld():GetScoreBoard() + + a_Player:SendMessage("Teams: " .. table.concat(Scoreboard:GetTeamNames(), ", ")) + + return true +end + + + + + diff --git a/Server/Plugins/Debuggers/Info.lua b/Server/Plugins/Debuggers/Info.lua index 51406c27c..fa85f0532 100644 --- a/Server/Plugins/Debuggers/Info.lua +++ b/Server/Plugins/Debuggers/Info.lua @@ -208,6 +208,12 @@ g_PluginInfo = Handler = HandleBlkCmd, HelpString = "Gets info about the block you are looking at" }, + ["/teams"] = + { + Permission = "debuggers", + Handler = HandleTeamsCmd, + HelpString = "List the teams" + }, }, -- Commands ConsoleCommands = diff --git a/src/Bindings/ManualBindings.cpp b/src/Bindings/ManualBindings.cpp index 523244ed2..91e80acbc 100644 --- a/src/Bindings/ManualBindings.cpp +++ b/src/Bindings/ManualBindings.cpp @@ -2756,6 +2756,30 @@ static int tolua_cRoot_GetFurnaceRecipe(lua_State * tolua_S) +static int tolua_cScoreboard_GetTeamNames(lua_State * L) +{ + cLuaState S(L); + if ( + !S.CheckParamUserType(1, "cScoreboard") || + !S.CheckParamEnd(2) + ) + { + return 0; + } + + // Get the groups: + cScoreboard * Scoreboard = reinterpret_cast(tolua_tousertype(L, 1, nullptr)); + AStringVector Teams = Scoreboard->GetTeamNames(); + + // Push the results: + S.Push(Teams); + return 1; +} + + + + + static int tolua_cHopperEntity_GetOutputBlockPos(lua_State * tolua_S) { // function cHopperEntity::GetOutputBlockPos() @@ -3532,6 +3556,7 @@ void cManualBindings::Bind(lua_State * tolua_S) tolua_beginmodule(tolua_S, "cScoreboard"); tolua_function(tolua_S, "ForEachObjective", ForEach); tolua_function(tolua_S, "ForEachTeam", ForEach); + tolua_function(tolua_S, "GetTeamNames", tolua_cScoreboard_GetTeamNames); tolua_endmodule(tolua_S); tolua_beginmodule(tolua_S, "cStringCompression"); diff --git a/src/Scoreboard.cpp b/src/Scoreboard.cpp index 5e416c0d1..4dde5b2dd 100644 --- a/src/Scoreboard.cpp +++ b/src/Scoreboard.cpp @@ -416,6 +416,22 @@ cTeam * cScoreboard::GetTeam(const AString & a_Name) +AStringVector cScoreboard::GetTeamNames() +{ + AStringVector TeamNames; + + for (const auto & Team: m_Teams) + { + TeamNames.push_back(Team.first); + } + + return TeamNames; +} + + + + + cTeam * cScoreboard::QueryPlayerTeam(const AString & a_Name) { cCSLock Lock(m_CSTeams); diff --git a/src/Scoreboard.h b/src/Scoreboard.h index 092cfd8ed..597c502c7 100644 --- a/src/Scoreboard.h +++ b/src/Scoreboard.h @@ -256,6 +256,9 @@ public: // tolua_end + /** Retrieves the list of team names */ + AStringVector GetTeamNames(); + /** Send this scoreboard to the specified client */ void SendTo(cClientHandle & a_Client);