diff options
| author | Markus Mittendrein <git@maxmitti.tk> | 2015-09-23 17:21:58 +0200 |
|---|---|---|
| committer | Markus Mittendrein <git@maxmitti.tk> | 2015-09-23 17:21:58 +0200 |
| commit | 320f479da036b14a4127c04d27cadd63cf4e1bf9 (patch) | |
| tree | b363cb804f173e2cf2a1da6bdc20e1a9800736fa /src | |
| parent | 021dccaf2194ba273417743fe429caf0aa2157a7 (diff) | |
| download | manager-320f479da036b14a4127c04d27cadd63cf4e1bf9.tar.gz manager-320f479da036b14a4127c04d27cadd63cf4e1bf9.zip | |
Replace Session.Hosting and Session.Running with Session.State and set
IngameChannel-topic through CRSM::ircSetIngameChannelTopic.
Diffstat (limited to 'src')
| -rw-r--r-- | src/crsm.cpp | 79 | ||||
| -rw-r--r-- | src/crsm.hpp | 4 |
2 files changed, 47 insertions, 36 deletions
diff --git a/src/crsm.cpp b/src/crsm.cpp index 212402e..d54ce2c 100644 --- a/src/crsm.cpp +++ b/src/crsm.cpp @@ -221,25 +221,19 @@ void CRSM::readServerOutput() static QRegExp lobbyStartExp(R"((?:Los geht's!|Action go!)\s*)"); if(lobbyStartExp.exactMatch(what)) { - Session.Running = true; - - if(Config.IRC.UseIngameChat && !Config.IRC.IngameChannel.isEmpty()) - { - connection->sendCommand(IrcCommand::createTopic(Config.IRC.IngameChannel, "Aktuelles Szenario: " + Session.ScenarioName + " | Lädt | Ingamechat ist " + (Session.IrcUseIngameChat ? "" : "de") + "aktviert.")); - } + Session.State = CRSMSession::Loading; + ircSetIngameChannelTopic(); } static QRegExp startExp("^Start!\\s*$"); if(startExp.exactMatch(what)) { + Session.State = CRSMSession::Running; if(!Session.League) { writeToServer(QString("/set maxplayer 0\n")); } - if(Config.IRC.UseIngameChat && !Config.IRC.IngameChannel.isEmpty()) - { - connection->sendCommand(IrcCommand::createTopic(Config.IRC.IngameChannel, "Aktuelles Szenario: " + Session.ScenarioName + " | Läuft | Ingamechat ist " + (Session.IrcUseIngameChat ? "" : "de") + "aktviert.")); - } + ircSetIngameChannelTopic(); } @@ -308,7 +302,7 @@ void CRSM::readInput() processManager->closeProgFifos(); Config.Auto.ProcessManager.ReattachId.clear(); finish = true; - if(!Session.Hosting) + if(Session.State == CRSMSession::None) scenarioFinished(); return; } @@ -354,7 +348,6 @@ void CRSM::readInput() void CRSM::nextScen() { - Session.Hosting = true; if(userlist.length()>0) { startScen(userlist.at(0), args); @@ -406,7 +399,7 @@ void CRSM::scenarioFinished() nextScen(); else if(!Config.IRC.IngameChannel.isEmpty()) { - connection->sendCommand(IrcCommand::createTopic(Config.IRC.IngameChannel, "Kein laufendes Spiel.")); + ircSetIngameChannelTopic(); QFile lastScenFile(LAST_SCEN_FILE_NAME); QFile curScenFile(CUR_SCEN_FILE_NAME); curScenFile.open(QFile::ReadOnly); @@ -537,17 +530,7 @@ void CRSM::ircMessageReceived(IrcMessage *message) QRegExp modeExp("^\\+[a-zA-Z]*(a|o)"); if(message->parameters().size() >= 3 && message->parameters().at(0) == Config.IRC.IngameChannel && modeExp.exactMatch(message->parameters().at(1)) && message->parameters().at(2) == Config.IRC.Nick) { - if(Config.IRC.UseIngameChat && !Config.IRC.IngameChannel.isEmpty()) - { - if(!Session.Hosting) - { - connection->sendCommand(IrcCommand::createTopic(Config.IRC.IngameChannel, "Kein laufendes Spiel.")); - } - else - { - connection->sendCommand(IrcCommand::createTopic(Config.IRC.IngameChannel, "Aktuelles Szenario: " + Session.ScenarioName + " | Ingamechat ist " + (Session.IrcUseIngameChat ? "" : "de") + "aktviert.")); - } - } + ircSetIngameChannelTopic(); } } } @@ -683,10 +666,8 @@ void CRSM::startScen(const ScenarioSettings &scen, QStringList argList) Session.ScenarioName = scen.name; Session.IrcUseIngameChat = Config.IRC.UseIngameChat; - if(Config.IRC.UseIngameChat && !Config.IRC.IngameChannel.isEmpty()) - { - connection->sendCommand(IrcCommand::createTopic(Config.IRC.IngameChannel, "Aktuelles Szenario: " + Session.ScenarioName + " | Lobby | Ingamechat ist " + (Session.IrcUseIngameChat ? "" : "de") + "aktviert.")); - } + Session.State = CRSMSession::Lobby; + ircSetIngameChannelTopic(); filename = scen.name; while(Config.Hosting.Alias.contains(filename)) filename = Config.Hosting.Alias.value(filename); @@ -1157,7 +1138,7 @@ QString CRSM::ircActivateIngameChat(bool activated) if(Config.IRC.UseIngameChat && !Config.IRC.IngameChannel.isEmpty()) { Session.IrcUseIngameChat = activated; - connection->sendCommand(IrcCommand::createTopic(Config.IRC.IngameChannel, "Aktuelles Szenario: " + Session.ScenarioName + " | Ingamechat ist " + (Session.IrcUseIngameChat ? "" : "de") + "aktviert.")); + ircSetIngameChannelTopic(); return "Ingamechat wurde " + (Session.IrcUseIngameChat ? QString("") : QString("de")) + "aktviert."; } else @@ -1214,6 +1195,36 @@ QStringList CRSM::listC4Folder(const QString &path) return ret; } +void CRSM::ircSetIngameChannelTopic() +{ + if(Config.IRC.UseIngameChat && !Config.IRC.IngameChannel.isEmpty()) + { + if(Session.State == CRSMSession::None) + { + connection->sendCommand(IrcCommand::createTopic(Config.IRC.IngameChannel, "Kein laufendes Spiel.")); + } + else + { + QString statusText = ""; + switch(Session.State) + { + case CRSMSession::Lobby: + statusText = "Lobby"; + break; + case CRSMSession::Loading: + statusText = "Lädt "; + break; + case CRSMSession::Running: + statusText = "Läuft"; + break; + default: + break; + } + connection->sendCommand(IrcCommand::createTopic(Config.IRC.IngameChannel, "Aktuelles Szenario: " + Session.ScenarioName + " | " + statusText + " | Ingamechat ist " + (Session.IrcUseIngameChat ? "" : "de") + "aktviert.")); + } + } +} + void CRSM::addCommand(const QString &name, CmdFunction func, int interfaces, UserType userType, const QString &shortDescription, const QString &argList, const QString &longDescription) { cmds.insert(name.trimmed(), CmdFunctionRef(name.trimmed(), func, interfaces, userType, shortDescription, argList, longDescription)); @@ -1533,7 +1544,7 @@ void CRSM::prepareAndConnectIrc() if(Config.IRC.UseIngameChat && !Config.IRC.IngameChannel.isEmpty()) { connection->sendCommand(IrcCommand::createJoin(Config.IRC.IngameChannel)); - connection->sendCommand(IrcCommand::createTopic(Config.IRC.IngameChannel, "Kein laufendes Spiel.")); + ircSetIngameChannelTopic(); } else { @@ -1559,7 +1570,7 @@ void CRSM::exit() if(processManager != nullptr) processManager->closeProgFifos(); Config.Auto.ProcessManager.ReattachId.clear(); finish = true; - if(!Session.Hosting) + if(Session.State == CRSMSession::None) scenarioFinished(); } @@ -1673,9 +1684,9 @@ CMD_FUNCTION_IMPL(host) { userlist << scen; respond(client, "Szenario " + scen.name + " wurde der Warteschlange" + (scen.league ? " mit Liga" : "") + " hinzugefügt.\n"); - if(userlist.length() == 1 && !Session.UserWish && !Session.Running && Session.Hosting && Session.Clonk.Clients.size() > 0) + if(userlist.length() == 1 && !Session.UserWish && !Session.Running && Session.State != CRSMSession::None && Session.Clonk.Clients.size() > 0) respond(client, "Überrede alle Spieler zu leaven und dein Wunsch wird sofort gehostet ;-)\n"); - else if(!Session.Hosting) + else if(Session.State == CRSMSession::None) { nextScen(); } @@ -1721,7 +1732,7 @@ CMD_FUNCTION_IMPL(autohost) { autoHost = true; respond(client, "Automatisches Hosting aktiviert.\n"); - if(!Session.Hosting) + if(Session.State == CRSMSession::None) { nextScen(); } diff --git a/src/crsm.hpp b/src/crsm.hpp index 117df9d..d8f6d0d 100644 --- a/src/crsm.hpp +++ b/src/crsm.hpp @@ -109,10 +109,9 @@ private: struct CRSMSession { bool IrcUseIngameChat = false; bool League = false; - bool Running = false; + enum {None = -1, Lobby = 0, Loading = 1, Running = 2} State = None; bool UserWish = false; int CountDown = -1; - bool Hosting = false; QString ScenarioName = ""; @@ -182,6 +181,7 @@ private: void stopAliasWishEditing(); QString ircActivateIngameChat(bool activated = true); QStringList listC4Folder(const QString &path); + void ircSetIngameChannelTopic(); void addCommand(const QString& name, CmdFunction func, int interfaces = Clonk | IRC, UserType userType = User, const QString& shortDescription = "", const QString &argList = "", const QString &longDescription = ""); bool cmdExists(const QString& name, ClientInterface interface); |
