summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/ClientInfo.hpp6
-rw-r--r--src/crsm.cpp38
-rw-r--r--src/crsm.hpp2
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),