diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2015-11-03 14:20:59 +0100 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2015-11-03 14:35:21 +0100 |
| commit | 45c38ee93e39bcde8d91cc7cd1f990059ced0595 (patch) | |
| tree | 86fe9268ee17e61e6a6f160729fc0e8ede71a99a /src | |
| parent | c1158aa594146eb90fd35f7a1f57924df218b8fc (diff) | |
| download | manager-45c38ee93e39bcde8d91cc7cd1f990059ced0595.tar.gz manager-45c38ee93e39bcde8d91cc7cd1f990059ced0595.zip | |
Allow skipping of indexed wish from list
Diffstat (limited to 'src')
| -rw-r--r-- | src/crsm.cpp | 41 | ||||
| -rw-r--r-- | src/crsm.hpp | 2 |
2 files changed, 35 insertions, 8 deletions
diff --git a/src/crsm.cpp b/src/crsm.cpp index 572eb11..ca7dda3 100644 --- a/src/crsm.cpp +++ b/src/crsm.cpp @@ -935,12 +935,12 @@ void CRSM::ircCheckModCmd(const QString &nick, CmdFunctionRef func, QString arg) ircCheckUserStatus(ClientInfo::ircClient(nick), ClientInfo::ircClient(nick), &CRSM::ircModCmd); } -QString CRSM::skipScen() +QString CRSM::skipScen(int pos) { - if(userlist.length() > 0) + if(userlist.length() > pos) { QString skipped = userlist.first().name + " (" + userlist.first().wishClient.toString() + ")"; - userlist.removeFirst(); + userlist.removeAt(pos); return skipped; } else @@ -1353,7 +1353,7 @@ void CRSM::setupCmds() addCommand("set comment", &CRSM::passToClonk, Clonk | IRC | Management, Moderator, "Setzt den Netzwerkkommentar, bzw. entfernt ihn, wenn kein Kommentar angegeben wird.", "[Kommentar]"); addCommand("set raw", &CRSM::setRaw, Clonk | IRC | Management, Moderator, "Setzt beliebige /set-Werte.", "<Option> [Wert]"); - addCommand("skip", &CRSM::skip, Clonk | IRC | Management, Moderator, "Entfernt das nächste Szenario aus der Wunschliste."); + addCommand("skip", &CRSM::skip, Clonk | IRC | Management, Moderator, "Entfernt das nächste Szenario (oder das auf [Warteschlangenposition]) aus der Wunschliste.", "[Warteschlangenposition]"); addCommand("next", &CRSM::next, Clonk | IRC | Management, Moderator, "Versucht das aktuelle Szenario zu überspringen."); addCommand("kill", &CRSM::kill, IRC | Management, Moderator, "Tötet den Clonk-Server, vorausgesetzt es läuft einer.", "", "Tötet den Clonk-Server, vorausgesetzt es läuft einer. Bitte nur verwenden wenn " + Config.CRSM.CommandSign + "next nicht funktioniert."); addCommand("clear", &CRSM::clear, Clonk | IRC | Management, Moderator, "Löscht die Wunschliste."); @@ -2028,14 +2028,41 @@ CMD_FUNCTION_IMPL(autohost) CMD_FUNCTION_IMPL(skip) QString skipped; - if((skipped = skipScen()) != "") + int pos = 0; + bool ok; + if(!args.isEmpty()) { - respond(client, "\"" + skipped + "\" übersprungen.\n"); + pos = args.toInt(&ok) - 1; + if(!ok || pos < 0) + { + respond(client, "Die Warteschlangenposition muss eine positive ganze Zahl sein!\n"); + return SyntaxFail; + } + if(pos >= userlist.length()) + { + if(!autoHost || (pos -= userlist.length()) >= nextAutoScens.length() - userlist.length()) + { + respond(client, "Die angegebene Position ist höher, als die Warteschlange lang ist.\n"); + return Success; + } + else + { + skipped = nextAutoScens.at(pos).name; + nextAutoScens.removeAt(pos); + updateNextAutoScens(); + respond(client, "\"" + skipped + "\" übersprungen.\n"); + return Success; + } + } } - else + if(userlist.length() == 0) { respond(client, "Userliste ist leer!\n"); } + else if((skipped = skipScen(pos)) != "") + { + respond(client, "\"" + skipped + "\" übersprungen.\n"); + } return Success; } diff --git a/src/crsm.hpp b/src/crsm.hpp index 0fd17be..509d8be 100644 --- a/src/crsm.hpp +++ b/src/crsm.hpp @@ -240,7 +240,7 @@ private: QString listScenarios(QString commandArgs); QString printQueue(); void ircCheckModCmd(const QString &nick, CmdFunctionRef func, QString arg = ""); - QString skipScen(); + QString skipScen(int pos); bool skipCurrent(); void writeToServer(const QString& message); void writeConfig(); |
