summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/crsm.cpp41
-rw-r--r--src/crsm.hpp2
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();