diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/ClientInfo.hpp | 6 | ||||
| -rw-r--r-- | src/crsm.cpp | 38 | ||||
| -rw-r--r-- | src/crsm.hpp | 2 |
3 files changed, 40 insertions, 6 deletions
diff --git a/src/ClientInfo.hpp b/src/ClientInfo.hpp index 711bc71..c29ea40 100644 --- a/src/ClientInfo.hpp +++ b/src/ClientInfo.hpp @@ -31,6 +31,7 @@ public: ManagementConnection management; QString pcName = ""; + QStringList players; ClientInterface interface = Clonk; int CUID = 0; @@ -165,11 +166,12 @@ public: case Auto: break; case Clonk: { - if(parts.length() != 5) throw ConfigException("Cannot read corrupt ClientInfo with Clonk-ClientInterface: " + string.toStdString()); + if(parts.length() != 6) throw ConfigException("Cannot read corrupt ClientInfo with Clonk-ClientInterface: " + string.toStdString()); info.pcName = parts.at(1); info.CUID = parts.at(2).toInt(); info.nick = parts.at(3); info.activated = ConfigValueBase::getValue<bool>(parts.at(4)); + info.players = ConfigValueBase::getValue<QList<QString>>(parts.at(5)); break; } case IRC: @@ -196,7 +198,7 @@ public: switch(info.interface) { case Auto: break; - case Clonk: ret.append(info.pcName); ret.append(QString::number(info.CUID)); ret.append(info.nick); ret.append(ConfigValueBase::getStringValue(info.activated)); break; + case Clonk: ret.append(info.pcName); ret.append(QString::number(info.CUID)); ret.append(info.nick); ret.append(ConfigValueBase::getStringValue(info.activated)); ret.append(ConfigValueBase::getStringValue<QList<QString>>(info.players)); break; case IRC: ret.append(info.nick); break; case Management: ret.append(info.management.name); break; } diff --git a/src/crsm.cpp b/src/crsm.cpp index a5d052d..87bcbfe 100644 --- a/src/crsm.cpp +++ b/src/crsm.cpp @@ -118,7 +118,7 @@ ClientInfo* CRSM::parseClientInfo(QString& message) if(parts[0] == Config.Auto.Volatile.Clonk.ServerPCName) { - return nullptr; + return &Session.Clonk.Server; } int CUID = parts[1].toInt(); @@ -193,10 +193,22 @@ void CRSM::readServerOutput() { const QString& type = what.left(3); what = what.mid(5); - if(type == "Cnt") + + static ClientInfo* playerInfoClient = nullptr; + + if(type == "Plr" && playerInfoClient != nullptr) { - Session.CountDown = what.toInt(); - return; + playerInfoClient->players.append(what); + } + else + { + playerInfoClient = nullptr; + + if(type == "Cnt") + { + Session.CountDown = what.toInt(); + return; + } } ClientInfo* clientPtr = parseClientInfo(what); @@ -206,6 +218,20 @@ void CRSM::readServerOutput() } ClientInfo& client = *clientPtr; + if(type == "Pli" || type == "Pla") + { + playerInfoClient = clientPtr; + + if(type == "Pli") + { + playerInfoClient->players.clear(); + } + } + else if(clientPtr == &Session.Clonk.Server) + { + return; + } + if(type == "Msg" || type == "Mac" || type == "Snd") { bool isMeMessage = (type == "Mac"); @@ -780,6 +806,10 @@ void CRSM::startScen(const ScenarioSettings &scen, QStringList argList) Session.Scenario = scen; Session.IRC.UseIngameChat = Config.IRC.UseIngameChat; + + Session.Clonk.Server.pcName = Config.Auto.Volatile.Clonk.ServerPCName; + Session.Clonk.Server.nick = Config.Auto.Volatile.Clonk.ServerNick; + setSessionState(CRSMSession::Lobby); filename = scenarioFileName(scen.name); diff --git a/src/crsm.hpp b/src/crsm.hpp index a40e246..5b09d75 100644 --- a/src/crsm.hpp +++ b/src/crsm.hpp @@ -164,6 +164,7 @@ private: struct { ClientInfo Admin; Map(String, ClientInfo) Clients; + ClientInfo Server; QMap<ClientInfo, QDateTime> LeaveAdmins; } Clonk; @@ -188,6 +189,7 @@ private: ConfigVal(Clonk.Admin), ConfigVal(Clonk.Clients), + ConfigVal(Clonk.Server), ConfigVal(IRC.Admin), ConfigVal(IRC.UseIngameChat), |
