diff --git a/src/aoclient.h b/src/aoclient.h index 44417776..a27f2437 100644 --- a/src/aoclient.h +++ b/src/aoclient.h @@ -2157,6 +2157,11 @@ class AOClient : public QObject */ void logIC(const QString &f_charName, const QString &f_oocName, const QString &f_ipid, const QString &f_areaName, const QString &f_message); + /** + * @brief Signal connected to universal logger. Sends music usage to the logger. + */ + void logMusic(const QString &f_charName, const QString &f_oocName, const QString &f_ipid, + const QString &f_areaName, const QString &f_track); /** * @brief Signal connected to universal logger. Sends OOC chat usage to the logger. diff --git a/src/logger/u_logger.cpp b/src/logger/u_logger.cpp index 5c1ab29c..9a2fa815 100644 --- a/src/logger/u_logger.cpp +++ b/src/logger/u_logger.cpp @@ -53,6 +53,14 @@ void ULogger::logIC(const QString &f_char_name, const QString &f_ooc_name, const updateAreaBuffer(f_area_name, l_logEntry); } +void ULogger::logMusic(const QString &f_char_name, const QString &f_ooc_name, const QString &f_ipid, + const QString &f_area_name, const QString &f_track) +{ + QString l_time = QDateTime::currentDateTime().toString("ddd MMMM d yyyy | hh:mm:ss"); + QString l_logEntry = QString(m_logtext.value("music") + "\n").arg(l_time, f_char_name, f_ooc_name, f_ipid, f_area_name, f_track); + updateAreaBuffer(f_area_name, l_logEntry); +} + void ULogger::logOOC(const QString &f_char_name, const QString &f_ooc_name, const QString &f_ipid, const QString &f_area_name, const QString &f_message) { diff --git a/src/logger/u_logger.h b/src/logger/u_logger.h index d08e19d9..0c5f6f03 100644 --- a/src/logger/u_logger.h +++ b/src/logger/u_logger.h @@ -59,6 +59,12 @@ class ULogger : public QObject void logIC(const QString &f_char_name, const QString &f_ooc_name, const QString &f_ipid, const QString &f_area_name, const QString &f_message); + /** + * @brief Adds a music log entry to the area buffer and writes it to the respective log format. + */ + void logMusic(const QString &f_char_name, const QString &f_ooc_name, const QString &f_ipid, + const QString &f_area_name, const QString &f_track); + /** * @brief Adds an OOC log entry to the area buffer and writes it to the respective log format. */ @@ -135,6 +141,7 @@ class ULogger : public QObject */ QHash m_logtext{ {"ic", "[%1][%5][IC][%2(%3)][%4]%6"}, + {"music", "[%1][%5][MUSIC][%2(%3)][%4]%6"}, {"ooc", "[%1][%5][OOC][%2(%3)][%4]%6"}, {"login", "[%1][LOGIN][%2][%3][%4(%5)]"}, {"cmdlogin", "[%1][%2][LOGIN][%5][%3(%4)]"}, diff --git a/src/packet/packet_mc.cpp b/src/packet/packet_mc.cpp index 88217384..e6912f17 100644 --- a/src/packet/packet_mc.cpp +++ b/src/packet/packet_mc.cpp @@ -78,6 +78,8 @@ void PacketMC::handlePacket(AreaData *area, AOClient &client) const AOPacket *l_music_change = PacketFactory::createPacket("MC", {l_final_song, m_content[1], client.characterName(), "1", "0", l_effects}); client.getServer()->broadcast(l_music_change, client.areaId()); + emit client.logMusic((client.character() + " " + client.characterName()), client.name(), client.m_ipid, client.getServer()->getAreaById(client.areaId())->name(), l_final_song); + // Since we can't ensure a user has their showname set, we check if its empty to prevent //"played by ." in /currentmusic. if (client.characterName().isEmpty()) { diff --git a/src/server.cpp b/src/server.cpp index 2a3260e6..64b25d21 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -516,6 +516,7 @@ void Server::hookupAOClient(AOClient *client) { connect(client, &AOClient::joined, this, &Server::increasePlayerCount); connect(client, &AOClient::logIC, logger, &ULogger::logIC); + connect(client, &AOClient::logMusic, logger, &ULogger::logMusic); connect(client, &AOClient::logOOC, logger, &ULogger::logOOC); connect(client, &AOClient::logLogin, logger, &ULogger::logLogin); connect(client, &AOClient::logCMD, logger, &ULogger::logCMD);