summaryrefslogtreecommitdiffstats
path: root/crsm.cpp
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2015-03-28 14:29:06 +0100
committerMarkus Mittendrein <git@maxmitti.tk>2015-03-28 14:29:06 +0100
commit0e0593acc8509b82425d91d2607c12871f03f786 (patch)
tree5d9c0e8432e84029fc3c8dc1837d72053958e315 /crsm.cpp
parenta80915a8bf0d853839a66887d35f7b380e4b09e7 (diff)
downloadmanager-0e0593acc8509b82425d91d2607c12871f03f786.tar.gz
manager-0e0593acc8509b82425d91d2607c12871f03f786.zip
scenarios.lst now supports --league, to activate league for a specific
scenario in the autohosting list.
Diffstat (limited to 'crsm.cpp')
-rw-r--r--crsm.cpp89
1 files changed, 80 insertions, 9 deletions
diff --git a/crsm.cpp b/crsm.cpp
index 44ef4c5..af05fc0 100644
--- a/crsm.cpp
+++ b/crsm.cpp
@@ -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();