summaryrefslogtreecommitdiffstats
path: root/src/crsm.cpp
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2015-11-03 14:35:55 +0100
committerMarkus Mittendrein <git@maxmitti.tk>2015-11-03 14:35:55 +0100
commit696bb2b7c3a029d206d8b1c58d0801ee5342c3a3 (patch)
treeecb7e65abd42daf57b03325b2039f46dbcc69146 /src/crsm.cpp
parent45c38ee93e39bcde8d91cc7cd1f990059ced0595 (diff)
downloadmanager-696bb2b7c3a029d206d8b1c58d0801ee5342c3a3.tar.gz
manager-696bb2b7c3a029d206d8b1c58d0801ee5342c3a3.zip
Allow users skipping their own wishes
Diffstat (limited to 'src/crsm.cpp')
-rw-r--r--src/crsm.cpp51
1 files changed, 45 insertions, 6 deletions
diff --git a/src/crsm.cpp b/src/crsm.cpp
index ca7dda3..8502f62 100644
--- a/src/crsm.cpp
+++ b/src/crsm.cpp
@@ -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 (oder das auf [Warteschlangenposition]) aus der Wunschliste.", "[Warteschlangenposition]");
+ addCommand("skip", &CRSM::skip, Clonk | IRC | Management, User, "Entfernt das nächste (eigene) 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.");
@@ -1772,6 +1772,20 @@ void CRSM::checkActivity(ClientInfo &client)
}
}
+int CRSM::findWishFromUser(const ClientInfo &client)
+{
+ int i = 0;
+ foreach(const ScenarioSettings& wish, userlist)
+ {
+ if(wish.wishClient == client)
+ {
+ return i;
+ }
+ ++i;
+ }
+ return -1;
+}
+
CMD_FUNCTION_IMPL(help)
bool longHelp = (args == "long");
if(args.isEmpty() || longHelp)
@@ -2047,13 +2061,38 @@ CMD_FUNCTION_IMPL(skip)
}
else
{
- skipped = nextAutoScens.at(pos).name;
- nextAutoScens.removeAt(pos);
- updateNextAutoScens();
- respond(client, "\"" + skipped + "\" übersprungen.\n");
- return Success;
+ if(userType >= Moderator)
+ {
+ skipped = nextAutoScens.at(pos).name;
+ nextAutoScens.removeAt(pos);
+ updateNextAutoScens();
+ respond(client, "\"" + skipped + "\" übersprungen.\n");
+ return Success;
+ }
+ else
+ {
+ pos = -2;
+ }
}
}
+ else if(userlist.at(pos).wishClient != client)
+ {
+ pos = -2;
+ }
+ if(pos == -2)
+ {
+ respond(client, "Nur Moderatoren dürfen fremde Wünsche entfernen.\n");
+ return RightsFail;
+ }
+ }
+ else if(userType < Moderator)
+ {
+ pos = findWishFromUser(client);
+ if(pos == -1)
+ {
+ respond(client, "Von dir ist kein Wunsch vorhanden.\n");
+ return Success;
+ }
}
if(userlist.length() == 0)
{