diff --git a/include/aoclient.h b/include/aoclient.h index 14c6f84..f469125 100644 --- a/include/aoclient.h +++ b/include/aoclient.h @@ -1488,6 +1488,24 @@ class AOClient : public QObject { void cmdCharSelect(int argc, QStringList argv); + /** + * @brief Sends a message to an area that you a CM in. + * + * @details Usage: /a + * + * @iscommand + */ + void cmdA(int argc, QStringList argv); + + /** + * @brief Send a message to all areas that you are a CM in. + * + * @details Usage: /s + * + * @iscommand + */ + void cmdS(int argc, QStringList argv); + ///@} /** @@ -1936,7 +1954,9 @@ class AOClient : public QObject { {"block_dj", {ACLFlags.value("MUTE"), 1, &AOClient::cmdBlockDj}}, {"unblockdj", {ACLFlags.value("MUTE"), 1, &AOClient::cmdUnBlockDj}}, {"unblock_dj", {ACLFlags.value("MUTE"), 1, &AOClient::cmdUnBlockDj}}, - {"charselect", {ACLFlags.value("NONE"), 0, &AOClient::cmdCharSelect}} + {"charselect", {ACLFlags.value("NONE"), 0, &AOClient::cmdCharSelect}}, + {"a", {ACLFlags.value("NONE"), 2, &AOClient::cmdA}}, + {"s", {ACLFlags.value("NONE"), 0, &AOClient::cmdS}}, }; /** diff --git a/src/commands/messaging.cpp b/src/commands/messaging.cpp index bfc4d81..839844f 100644 --- a/src/commands/messaging.cpp +++ b/src/commands/messaging.cpp @@ -340,3 +340,36 @@ void AOClient::cmdCharSelect(int argc, QStringList argv) target->sendPacket("DONE"); } } + +void AOClient::cmdA(int argc, QStringList argv) +{ + bool ok; + int area_id = argv[0].toInt(&ok); + if (!ok) { + sendServerMessage("This does not look like a valid AreaID."); + return; + } + + AreaData* area = server->areas[area_id]; + if (!area->owners.contains(id)) { + sendServerMessage("You are not CM in that area."); + return; + } + + argv.removeAt(0); + QString sender_name = ooc_name; + QString ooc_message = argv.join(" "); + server->broadcast(AOPacket("CT", {"[CM]" + sender_name, ooc_message}), area_id); +} + +void AOClient::cmdS(int argc, QStringList argv) +{ + int all_areas = server->areas.size() - 1; + QString sender_name = ooc_name; + QString ooc_message = argv.join(" "); + + for (int i = 0; i <= all_areas; i++) { + if (server->areas[i]->owners.contains(id)) + server->broadcast(AOPacket("CT", {"[CM]" + sender_name, ooc_message}), i); + } +}