diff --git a/bin/config_sample/config.ini b/bin/config_sample/config.ini index a33f95d..eaf63ba 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=MOTD is not set. webao_enable=true webao_port=27017 auth=simple diff --git a/include/aoclient.h b/include/aoclient.h index a7d987f..42070e3 100644 --- a/include/aoclient.h +++ b/include/aoclient.h @@ -76,6 +76,7 @@ class AOClient : public QObject { {"CM", 1ULL << 4}, {"GLOBAL_TIMER", 1ULL << 5}, {"CHANGE_EVI_MOD", 1ULL << 6}, + {"CHANGE_MOTD", 1ULL << 7}, {"SUPER", ~0ULL} }; @@ -183,6 +184,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 +300,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..14c4883 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); @@ -65,6 +66,7 @@ class Server : public QObject { QStringList backgrounds; DBManager* db_manager; QString server_name; + QString MOTD; QTimer* timer; diff --git a/src/commands.cpp b/src/commands.cpp index 1b173d9..e25bd8e 100644 --- a/src/commands.cpp +++ b/src/commands.cpp @@ -857,6 +857,23 @@ 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) +{ + if (argc == 0) { + sendServerMessage("=== MOTD ===\r\n" + server->MOTD + "\r\n============="); + } + else if (argc > 0) { + if (checkAuth(ACLFlags.value("CHANGE_MOTD"))) { + QString MOTD = argv.join(" "); + server->MOTD = MOTD; + sendServerMessage("MOTD has been changed."); + } + else { + sendServerMessage("You do not have permission to change the MOTD"); + } + } +} + QStringList AOClient::buildAreaList(int area_idx) { QStringList entries; diff --git a/src/packets.cpp b/src/packets.cpp index d52f23e..9931391 100644 --- a/src/packets.cpp +++ b/src/packets.cpp @@ -112,6 +112,8 @@ void AOClient::pktLoadingDone(AreaData* area, int argc, QStringList argv, AOPack sendPacket("BN", {area->background}); sendPacket("OPPASS", {"DEADBEEF"}); sendPacket("DONE"); + + sendServerMessage("=== MOTD ===\r\n" + server->MOTD + "\r\n============="); fullArup(); // Give client all the area data if (server->timer->isActive()) { diff --git a/src/server.cpp b/src/server.cpp index 131ec47..64a9ea0 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -51,6 +51,8 @@ void Server::start() qDebug() << "Server listening on" << port; } + MOTD = config.value("motd","MOTD is not set.").toString(); + proxy = new WSProxy(port, ws_port, this); if(ws_port != -1) proxy->start();