summaryrefslogtreecommitdiffstats
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
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.
-rw-r--r--ClientInfo.hpp10
-rw-r--r--crsm.cpp89
-rw-r--r--crsm.hpp6
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]") : "");
}
};
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();
diff --git a/crsm.hpp b/crsm.hpp
index d04df39..0d15134 100644
--- a/crsm.hpp
+++ b/crsm.hpp
@@ -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);