From 3e1f9825ca03733a6f69561e36ffb758f6809a3a Mon Sep 17 00:00:00 2001
From: Salanto <support@salanto.de>
Date: Thu, 11 Mar 2021 22:42:47 +0100
Subject: [PATCH] motd. Can't get simpler than that.

---
 bin/config_sample/config.ini | 1 +
 include/aoclient.h           | 4 +++-
 include/server.h             | 1 +
 src/commands.cpp             | 6 ++++++
 src/packets.cpp              | 1 +
 src/server.cpp               | 9 +++++++++
 6 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/bin/config_sample/config.ini b/bin/config_sample/config.ini
index a33f95d..65ed954 100644
--- a/bin/config_sample/config.ini
+++ b/bin/config_sample/config.ini
@@ -9,6 +9,7 @@ ms_port=27016
 port=27016
 server_description=This is a placeholder server description. Tell the world of AO who you are here!
 server_name=An Unnamed Server
+motd=Sample MOTD.
 webao_enable=true
 webao_port=27017
 auth=simple
diff --git a/include/aoclient.h b/include/aoclient.h
index a7d987f..fa8f91d 100644
--- a/include/aoclient.h
+++ b/include/aoclient.h
@@ -183,6 +183,7 @@ class AOClient : public QObject {
     //// Commands
     void cmdDefault(int argc, QStringList argv);
     void cmdHelp(int argc, QStringList argv);
+    void cmdMOTD(int argc, QStringList argv);
     // Authentication
     void cmdLogin(int argc, QStringList argv);
     void cmdChangeAuth(int argc, QStringList argv);
@@ -298,7 +299,8 @@ class AOClient : public QObject {
         {"forcepos", {ACLFlags.value("CM"), 2, &AOClient::cmdForcePos}},
         {"currentmusic", {ACLFlags.value("NONE"), 0, &AOClient::cmdCurrentMusic}},
         {"pm", {ACLFlags.value("NONE"), 2, &AOClient::cmdPM}},
-        {"evidence_mod", {ACLFlags.value("CHANGE_EVI_MOD"), 1, &AOClient::cmdEvidenceMod}}
+        {"evidence_mod", {ACLFlags.value("CHANGE_EVI_MOD"), 1, &AOClient::cmdEvidenceMod}},
+        {"motd", {ACLFlags.value("NONE"), 0, &AOClient::cmdMOTD}}
     };
 
     QString partial_packet;
diff --git a/include/server.h b/include/server.h
index 152fc37..cd003b3 100644
--- a/include/server.h
+++ b/include/server.h
@@ -52,6 +52,7 @@ class Server : public QObject {
     void broadcast(AOPacket packet, int area_index);
     void broadcast(AOPacket packet);
     QString getServerName();
+    QString getMOTD();
     int getDiceValue(QString value_type);
     int getCharID(QString char_name);
 
diff --git a/src/commands.cpp b/src/commands.cpp
index 1b173d9..cb213b8 100644
--- a/src/commands.cpp
+++ b/src/commands.cpp
@@ -857,6 +857,12 @@ void AOClient::cmdPM(int arc, QStringList argv)
     target_client->sendServerMessage("Message from " + ooc_name + " (" + QString::number(id) + "): " + message);
 }
 
+void AOClient::cmdMOTD(int argc, QStringList argv)
+{
+    QString MOTD = server->getMOTD();
+    sendServerMessage(MOTD);
+}
+
 QStringList AOClient::buildAreaList(int area_idx)
 {
     QStringList entries;
diff --git a/src/packets.cpp b/src/packets.cpp
index cabbb8c..6628b43 100644
--- a/src/packets.cpp
+++ b/src/packets.cpp
@@ -112,6 +112,7 @@ void AOClient::pktLoadingDone(AreaData* area, int argc, QStringList argv, AOPack
     sendPacket("BN", {area->background});
     sendPacket("OPPASS", {"DEADBEEF"});
     sendPacket("DONE");
+    sendServerMessage(server->getMOTD());
 }
 
 void AOClient::pktCharPassword(AreaData* area, int argc, QStringList argv, AOPacket packet)
diff --git a/src/server.cpp b/src/server.cpp
index 0f4d23a..5c036dc 100644
--- a/src/server.cpp
+++ b/src/server.cpp
@@ -182,6 +182,15 @@ int Server::getDiceValue(QString value_type)
     return value;
 }
 
+QString Server::getMOTD()
+{
+    QSettings settings("config/config.ini", QSettings::IniFormat);
+    settings.beginGroup("Options");
+    QString MOTD = settings.value("motd", "No MOTD has been set.").toString();
+    QString f_MOTD = "=== MOTD ===\r\n" + MOTD + "\r\n============='";
+    return f_MOTD;
+}
+
 AOClient* Server::getClient(QString ipid)
 {
     for (AOClient* client : clients) {