diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2015-04-20 17:36:17 +0200 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2015-04-20 17:36:17 +0200 |
| commit | bbd9118633963232ad1f357cba4b99394d2f4f82 (patch) | |
| tree | 84823b1e69546c5958a344544b02e54ffa62f45c /crsm.cpp | |
| parent | f8e811491c7413689896efdf452493d114644221 (diff) | |
| download | manager-bbd9118633963232ad1f357cba4b99394d2f4f82.tar.gz manager-bbd9118633963232ad1f357cba4b99394d2f4f82.zip | |
Added command !removeplr.
Added basic anti spam for same scenarios and the same user.
Diffstat (limited to 'crsm.cpp')
| -rw-r--r-- | crsm.cpp | 66 |
1 files changed, 53 insertions, 13 deletions
@@ -683,6 +683,8 @@ void CRSM::readConfig() lists.clear(); settings.clear(); settings["EmptyTimer"] = "60"; + settings["MaxUserWishes"] = "2"; + settings["MaxScenWishes"] = "2"; QFile config(CONFIG_FILE_NAME); if(!config.exists() || !config.open(QIODevice::ReadOnly | QIODevice::Text)) { @@ -1336,7 +1338,7 @@ void CRSM::setupCmds() addCommand("help", &CRSM::help, Clonk | IRC | Management, User, "Zeigt die Hilfe an.", "[long¦Befehlsname]", "Listet alle verfügbaren Befehle auf. Mit long werden alle verfügbaren Befehle mit Kurzbeschreibung aufgelistet."); addCommand("stop", &CRSM::passToClonk, Clonk | IRC | Management, Admin, "Stoppt einen laufenden Countdown."); addCommand("start", &CRSM::passToClonk, Clonk | IRC | Management, Admin, "Startet den Countdown.", "[Countdownzeit in s]"); - addCommand("teamdist", &CRSM::passToClonk, Clonk | IRC | Management, Admin, "Ändert die Teamverteilung.", "<none¦free¦host¦random¦radnominv>"); + addCommand("teamdist", &CRSM::passToClonk, Clonk | IRC | Management, Admin, "Ändert die Teamverteilung.", "<none¦free¦host¦random¦randominv>"); addCommand("plrteam", &CRSM::passToClonk, Clonk | IRC, Admin, "Ändert das Team eines Spielers.", "<Spieler> <neues Team>", "Verschiebt <Spieler> in das <neue Team>."); addCommand("pause", &CRSM::passToClonk, Clonk | IRC | Management, Admin, "Pausiert das Spiel."); addCommand("unpause", &CRSM::passToClonk, Clonk | IRC | Management, Admin, "Setzt das pausierte Spiel fort."); @@ -1349,9 +1351,10 @@ void CRSM::setupCmds() addCommand("centralctrl", &CRSM::passToClonk, Clonk | IRC | Management, Admin, "Aktiviert den zentralen Netzwerkmodus."); addCommand("decentralctrl", &CRSM::passToClonk, Clonk | IRC | Management, Admin, "Aktiviert den dezentralen Netzwerkmodus."); addCommand("newscriptplayer", &CRSM::passToClonk, Clonk | IRC | Management, Admin, "Fügt in der Lobby einen Script spieler hinzu.", "[Spielername]"); + addCommand("removeplr", &CRSM::passToClonk, Clonk | IRC | Management, Admin, "Entfernt einen Spieler in der Lobby.", "[Spielername]"); addCommand("nodebug", &CRSM::passToClonk, Clonk | IRC | Management, Admin, "Deaktiviert den Debug-Modus zwingend für alle."); - addCommand("autohost", &CRSM::autohost, Clonk | IRC | Management, Moderator, "Deaktiviert den Debug-Modus zwingend für alle."); - addCommand("noautohost", &CRSM::autohost, Clonk | IRC | Management, Moderator, "Deaktiviert den Debug-Modus zwingend für alle."); + addCommand("autohost", &CRSM::autohost, Clonk | IRC | Management, Moderator, "Aktiviert Auto-Hosting."); + addCommand("noautohost", &CRSM::autohost, Clonk | IRC | Management, Moderator, "Deaktiviert Auto-Hosting."); addCommand("set", &CRSM::set, Clonk | IRC | Management, Admin, "Setzt diverse Einstellungen entsprechend dem /set Befehl von Clonk.", "<maxplayer¦password¦faircrew¦teamcolors¦runtimejoin> [on¦off¦<Passwort>¦<Spieleranzahl>]"); addCommand("skip", &CRSM::skip, Clonk | IRC | Management, Moderator, "Entfernt das nächste Szenario aus der Wunschliste."); @@ -1497,6 +1500,40 @@ void CRSM::replayOutputBuffer(QTcpSocket *socket, bool clear) } } +bool CRSM::scenAllowed(const ScenarioSettings &scen, const ClientInfo &client, UserType userType) +{ + if(userType >= UserType::Moderator) + { + return true; + } + QString scenName = scen.name; + while(maps["Alias"].contains(scenName)) + scenName = maps["Alias"].value(scenName); + + int scenCount = 0; + int userCount = 0; + foreach(const ScenarioSettings& setting, userlist) + { + userCount += (setting.wishClient == client); + + QString otherScenName = setting.name; + while(maps["Alias"].contains(otherScenName)) + otherScenName = maps["Alias"].value(otherScenName); + + scenCount += (otherScenName == scenName); + } + if(scenCount >= settings["MaxScenWishes"].toInt()) + { + respond(client, "Dieses Szenario ist jetzt oft genug in der Wunschliste!\n"); + return false; + } + if(userCount >= settings["MaxUserWishes"].toInt()) + { + respond(client, "Von dir sind jetzt genug Wünsche in der Liste!\n"); + return false; + } +} + CMD_FUNCTION_IMPL(help) { bool longHelp = args == "long"; @@ -1607,17 +1644,20 @@ CMD_FUNCTION_IMPL(host) } if(scenExists(scen.name)) { - userlist << scen; - respond(client, "Szenario " + scen.name + " wurde der Warteschlange" + (scen.league ? " mit Liga" : "") + " hinzugefügt.\n"); - if(userlist.length() == 1 && session["userwish"] != "true" && session["running"] != "true" && session["hosting"] == "true" && clients.size() > 0) - respond(client, "Überrede alle Spieler zu leaven und dein Wunsch wird sofort gehostet ;-)\n"); - else if(session["hosting"] != "true") + if(scenAllowed(scen, client, userType)) { - nextScen(); - } - else if(clients.size() == 0) - { - processManager->closeProgFifos(); + userlist << scen; + respond(client, "Szenario " + scen.name + " wurde der Warteschlange" + (scen.league ? " mit Liga" : "") + " hinzugefügt.\n"); + if(userlist.length() == 1 && session["userwish"] != "true" && session["running"] != "true" && session["hosting"] == "true" && clients.size() > 0) + respond(client, "Überrede alle Spieler zu leaven und dein Wunsch wird sofort gehostet ;-)\n"); + else if(session["hosting"] != "true") + { + nextScen(); + } + else if(clients.size() == 0) + { + processManager->closeProgFifos(); + } } } else |
