summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMarkus Mittendrein <git@maxmitti.tk>2015-09-23 17:21:58 +0200
committerMarkus Mittendrein <git@maxmitti.tk>2015-09-23 17:21:58 +0200
commit320f479da036b14a4127c04d27cadd63cf4e1bf9 (patch)
treeb363cb804f173e2cf2a1da6bdc20e1a9800736fa
parent021dccaf2194ba273417743fe429caf0aa2157a7 (diff)
downloadmanager-320f479da036b14a4127c04d27cadd63cf4e1bf9.tar.gz
manager-320f479da036b14a4127c04d27cadd63cf4e1bf9.zip
Replace Session.Hosting and Session.Running with Session.State and set
IngameChannel-topic through CRSM::ircSetIngameChannelTopic.
-rw-r--r--src/crsm.cpp79
-rw-r--r--src/crsm.hpp4
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);