diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2015-03-28 14:29:06 +0100 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2015-03-28 14:29:06 +0100 |
| commit | 0e0593acc8509b82425d91d2607c12871f03f786 (patch) | |
| tree | 5d9c0e8432e84029fc3c8dc1837d72053958e315 | |
| parent | a80915a8bf0d853839a66887d35f7b380e4b09e7 (diff) | |
| download | manager-0e0593acc8509b82425d91d2607c12871f03f786.tar.gz manager-0e0593acc8509b82425d91d2607c12871f03f786.zip | |
scenarios.lst now supports --league, to activate league for a specific
scenario in the autohosting list.
| -rw-r--r-- | ClientInfo.hpp | 10 | ||||
| -rw-r--r-- | crsm.cpp | 89 | ||||
| -rw-r--r-- | crsm.hpp | 6 |
3 files changed, 94 insertions, 11 deletions
diff --git a/ClientInfo.hpp b/ClientInfo.hpp index a9010eb..9c39c44 100644 --- a/ClientInfo.hpp +++ b/ClientInfo.hpp @@ -3,6 +3,7 @@ #include <QString> enum ClientInterface { + Auto = 0, Clonk = 1, IRC = 1 << 1, Management = 1 << 2 @@ -66,6 +67,13 @@ public: return ret; } + static inline ClientInfo autoClient() + { + ClientInfo ret; + ret.interface = Auto; + return ret; + } + inline bool operator==(const ClientInfo& other) { return other.interface == interface && other.nick == nick && (interface == Clonk ? other.pcName == pcName && other.CUID == CUID : true); @@ -78,6 +86,6 @@ public: inline QString toString() const { - return (!nick.isEmpty() ? nick + (interface == Clonk ? " (" + pcName + ")" : " (IRC)") : ""); + return interface == Auto ? "~auto~" : interface == Management ? management.name + " {CLI}" : (!nick.isEmpty() ? nick + (interface == Clonk ? " (" + pcName + ")" : " [IRC]") : ""); } }; @@ -334,8 +334,8 @@ void CRSM::nextScen() } else { - startScen(scenlist.at(current), args); - if(++current >= scenlist.length()) current = 0; + startScen(autolist.at(current), args); + if(++current >= autolist.length()) current = 0; } } @@ -549,7 +549,7 @@ void CRSM::newManagementData() ManagementConnection conn; conn.socket = sock; conn.name = data; - managementConnections.insert(sock, ManagementConnection(sock)); + managementConnections.insert(sock, conn); out(conn.name + " logged in on Management-Interface.\n"); replayOutputBuffer(sock); } @@ -733,6 +733,7 @@ void CRSM::readConfig() } } + void CRSM::readScenarios() { QFile scenfile("scenarios.lst"); @@ -744,14 +745,28 @@ void CRSM::readScenarios() scenfile.close(); } scenfile.open(QFile::ReadOnly); - scenlist = QString(scenfile.readAll()).trimmed().split("\n",QString::SkipEmptyParts); + QStringList scenlist = QString(scenfile.readAll()).trimmed().split("\n",QString::SkipEmptyParts); out("Scenarios in list:\n"); - foreach(const QString &scen, scenlist) + autolist.clear(); + foreach(const QString &args, scenlist) { - if(scenExists(scen)) - out(scen + "\n"); + ScenarioSettings scen(args, ClientInfo::autoClient()); + QStringList argList = args.split(' ', QString::KeepEmptyParts); + if(argList.first().trimmed() == "--league") + { + argList.removeFirst(); + scen.league = true; + scen.name = argList.join(' '); + } + if(scenExists(scen.name)) + { + out(scen.name + "\n"); + autolist.append(scen); + } else - out("WARNING: Scenario " + scen + " not found!\n"); + { + out("WARNING: Scenario " + scen.name + " not found!\n"); + } } out("\n"); @@ -897,7 +912,7 @@ QString CRSM::printQueue() { for(int i = 0; i<settings["UserListLength"].toInt(); i++) { - ret += "\t"+QString::number(i+1)+". "+(userlist.length()>i?userlist.at(i).name + " (" + userlist.at(i).wishClient.toString() + ")" + (userlist.at(i).league ? " in der Liga" : ""):scenlist.at((i-userlist.length() + current)%scenlist.length()) + " (auto)")+"\n"; + ret += "\t"+QString::number(i+1)+". "+(userlist.length()>i?userlist.at(i).name + " (" + userlist.at(i).wishClient.toString() + ")" + (userlist.at(i).league ? " in der Liga" : ""):autolist.at((i-userlist.length() + current)%autolist.length()).name + " " + autolist.at((i-userlist.length() + current)%autolist.length()).wishClient.toString() + (autolist.at((i-userlist.length() + current)%autolist.length()).league ? " in der Liga" : ""))+"\n"; } } else @@ -1281,6 +1296,13 @@ void CRSM::setupCmds() addCommand("modinfo", &CRSM::modinfo, IRC | Management, Moderator, "Listet alle Moderatoren auf."); addCommand("io", &CRSM::io, IRC, Moderator, "Schaltet den IO-Modus ein bzw. aus.", "", "Schaltet den IO-Modus ein bzw. aus. Im IO-Modus wird die Ausgabe vom Clonk-Server an den Privat-Chat weitergeleitet und der Privat-Chat wird an den Clonk-Server weitergeleitet. Clonk-Befehle mit \\ statt /."); + + if(settings["UseIrc"] == "true") + { + addCommand("join", &CRSM::join, IRC | Management, Moderator, "Betritt den angegebenen IRC-Channel, optional mit angegebenem Schlüssel.", "<channel> [channel-key]"); + addCommand("leave", &CRSM::leave, IRC | Management, Moderator, "Verlässt den angegebenen oder aktuellen IRC-Channel, optional mit angegebenem Grund.", "[channel] [reason]"); + } + addCommand("exit", &CRSM::exit, Management, UserType::Max, "Beendet den Server Mananger.", "", "Beendet den Server Mananger und falls ein Clonk-Server läuft auch diesen."); addCommand("exitdetach", &CRSM::exitDetach, Management, UserType::Max, "Beendet den Server Mananger, lässt den Clonk-Server weiterlaufen.", "", "Beendet den Server Mananger und falls ein Clonk-Server läuft, läuft dieser weiter."); addCommand("exitupdate", &CRSM::exitUpdate, Management, UserType::Max, "Zusätzlich zu exitdetach wird im laufenden Spiel angekündigt, dass der Server-Manager wegen eines Updates beendet wird."); @@ -1805,6 +1827,55 @@ CMD_FUNCTION_IMPL(set) } } +CMD_FUNCTION_IMPL(join) +{ + QStringList argList = args.split(' '); + static QRegExp chanExp("^#[^\\s]+$"); + if(argList.size() < 1 || argList.first().isEmpty()) + { + respond(client, "Kein Channel angegeben!\n"); + } + else if(chanExp.exactMatch(argList.first())) + { + QString chan = argList.first(); + argList.removeFirst(); + connection->sendCommand(IrcCommand::createJoin(chan, argList.join(' '))); + } + else + { + respond(client, "\"" + argList.first() + "\" ist kein gültiger Channel-Name.\n"); + } +} + +CMD_FUNCTION_IMPL(leave) +{ + QStringList argList = args.split(' '); + QString chan, reason; + if(!argList.isEmpty()) + { + chan = argList.first(); + argList.removeFirst(); + } + if(chan.isEmpty()) + { + chan = client.target; + } + reason = argList.join(' '); + if(reason.isEmpty()) + { + reason = client.toString(); + } + static QRegExp chanExp("^#[^\\s]+$"); + if(chanExp.exactMatch(chan)) + { + connection->sendCommand(IrcCommand::createPart(chan, reason)); + } + else + { + respond(client, "\"" + chan + "\" ist kein gültiger Channel-Name.\n"); + } +} + CMD_FUNCTION_IMPL(exit) { processManager->closeProgFifos(); @@ -100,8 +100,9 @@ private slots: void managementConnectionDisconnected(); private: - QStringList scenlist; + //QStringList scenlist; QList<ScenarioSettings> userlist; + QList<ScenarioSettings> autolist; QStringList args; QStringList ircModChecks; QStringList ircMods; @@ -200,6 +201,9 @@ private: CMD_FUNCTION(clientlist); CMD_FUNCTION(set); + CMD_FUNCTION(join); + CMD_FUNCTION(leave); + CMD_FUNCTION(exit); CMD_FUNCTION(exitDetach); CMD_FUNCTION(exitUpdate); |
