diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2015-11-03 14:35:55 +0100 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2015-11-03 14:35:55 +0100 |
| commit | 696bb2b7c3a029d206d8b1c58d0801ee5342c3a3 (patch) | |
| tree | ecb7e65abd42daf57b03325b2039f46dbcc69146 /src | |
| parent | 45c38ee93e39bcde8d91cc7cd1f990059ced0595 (diff) | |
| download | manager-696bb2b7c3a029d206d8b1c58d0801ee5342c3a3.tar.gz manager-696bb2b7c3a029d206d8b1c58d0801ee5342c3a3.zip | |
Allow users skipping their own wishes
Diffstat (limited to 'src')
| -rw-r--r-- | src/crsm.cpp | 51 | ||||
| -rw-r--r-- | src/crsm.hpp | 1 |
2 files changed, 46 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) { diff --git a/src/crsm.hpp b/src/crsm.hpp index 509d8be..cc9ad44 100644 --- a/src/crsm.hpp +++ b/src/crsm.hpp @@ -288,6 +288,7 @@ private: void writeFiles(bool writeSession = false, bool writeNoConfig = false); void checkActivity(ClientInfo& client); + int findWishFromUser(const ClientInfo& client); CMD_FUNCTION(help); CMD_FUNCTION(passToClonk); |
