diff --git a/akashi.pro b/akashi.pro index 068879d2..f72facba 100644 --- a/akashi.pro +++ b/akashi.pro @@ -2,11 +2,10 @@ QT += network websockets core sql TEMPLATE = app -unix:CONFIG += c++1z console -win32: CONFIG+=c++2a console +CONFIG += c++2a console coverage { - LIBS += -lgcov + LIBS += -lgcov } # The following define makes your compiler emit warnings if you use @@ -32,4 +31,3 @@ SOURCES += \ src/main.cpp LIBS += -L$$PWD/bin -lcore - diff --git a/core.pro b/core.pro index 24b0a68b..127946ee 100644 --- a/core.pro +++ b/core.pro @@ -2,24 +2,21 @@ QT += network websockets core sql TEMPLATE = lib -# Apparently, Windows needs a static config to make a dynamic library? -# Look, I dunno. -# Linux works just fine with `shared` only. -unix: CONFIG += shared static c++1z -win32: CONFIG += shared static c++2a +# shared static is required by Windows. +CONFIG += shared static c++2a coverage { - QMAKE_CXXFLAGS += --coverage -g -Og # -fprofile-arcs -ftest-coverage - LIBS += -lgcov - CONFIG -= static + QMAKE_CXXFLAGS += --coverage -g -Og # -fprofile-arcs -ftest-coverage + LIBS += -lgcov + CONFIG -= static } # Needed so that Windows doesn't do `release/` and `debug/` subfolders # in the output directory. CONFIG -= \ - copy_dir_files \ - debug_and_release \ - debug_and_release_target + copy_dir_files \ + debug_and_release \ + debug_and_release_target DESTDIR = $$PWD/bin @@ -33,95 +30,97 @@ DESTDIR = $$PWD/bin INCLUDEPATH += src SOURCES += \ - src/acl_roles_handler.cpp \ - src/aoclient.cpp \ - src/network/aopacket.cpp \ - src/network/network_socket.cpp \ - src/area_data.cpp \ - src/command_extension.cpp \ - src/commands/area.cpp \ - src/commands/authentication.cpp \ - src/commands/casing.cpp \ - src/commands/command_helper.cpp \ - src/commands/messaging.cpp \ - src/commands/moderation.cpp \ - src/commands/music.cpp \ - src/commands/roleplay.cpp \ - src/config_manager.cpp \ - src/db_manager.cpp \ - src/discord.cpp \ - src/packets.cpp \ - src/playerstateobserver.cpp \ - src/server.cpp \ - src/testimony_recorder.cpp \ - src/advertiser.cpp \ - src/logger/u_logger.cpp \ - src/logger/writer_modcall.cpp \ - src/logger/writer_full.cpp \ - src/music_manager.cpp \ - src/packet/packet_factory.cpp \ - src/packet/packet_generic.cpp \ - src/packet/packet_hi.cpp \ - src/packet/packet_id.cpp \ - src/packet/packet_askchaa.cpp \ - src/packet/packet_casea.cpp \ - src/packet/packet_cc.cpp \ - src/packet/packet_ch.cpp \ - src/packet/packet_ct.cpp \ - src/packet/packet_de.cpp \ - src/packet/packet_ee.cpp \ - src/packet/packet_hp.cpp \ - src/packet/packet_mc.cpp \ - src/packet/packet_ms.cpp \ - src/packet/packet_pe.cpp \ - src/packet/packet_pw.cpp \ - src/packet/packet_rc.cpp \ - src/packet/packet_rd.cpp \ - src/packet/packet_rm.cpp \ - src/packet/packet_rt.cpp \ - src/packet/packet_setcase.cpp \ - src/packet/packet_zz.cpp + src/acl_roles_handler.cpp \ + src/aoclient.cpp \ + src/network/aopacket.cpp \ + src/network/network_socket.cpp \ + src/area_data.cpp \ + src/command_extension.cpp \ + src/commands/area.cpp \ + src/commands/authentication.cpp \ + src/commands/casing.cpp \ + src/commands/command_helper.cpp \ + src/commands/messaging.cpp \ + src/commands/moderation.cpp \ + src/commands/music.cpp \ + src/commands/roleplay.cpp \ + src/config_manager.cpp \ + src/db_manager.cpp \ + src/discord.cpp \ + src/packets.cpp \ + src/playerstateobserver.cpp \ + src/server.cpp \ + src/testimony_recorder.cpp \ + src/advertiser.cpp \ + src/logger/u_logger.cpp \ + src/logger/writer_modcall.cpp \ + src/logger/writer_full.cpp \ + src/music_manager.cpp \ + src/packet/packet_factory.cpp \ + src/packet/packet_generic.cpp \ + src/packet/packet_hi.cpp \ + src/packet/packet_id.cpp \ + src/packet/packet_askchaa.cpp \ + src/packet/packet_casea.cpp \ + src/packet/packet_cc.cpp \ + src/packet/packet_ch.cpp \ + src/packet/packet_ct.cpp \ + src/packet/packet_de.cpp \ + src/packet/packet_ee.cpp \ + src/packet/packet_hp.cpp \ + src/packet/packet_mc.cpp \ + src/packet/packet_ms.cpp \ + src/packet/packet_pe.cpp \ + src/packet/packet_pl.cpp \ + src/packet/packet_pw.cpp \ + src/packet/packet_rc.cpp \ + src/packet/packet_rd.cpp \ + src/packet/packet_rm.cpp \ + src/packet/packet_rt.cpp \ + src/packet/packet_setcase.cpp \ + src/packet/packet_zz.cpp HEADERS += src/aoclient.h \ - src/acl_roles_handler.h \ - src/akashidefs.h \ - src/akashiutils.h \ - src/network/aopacket.h \ - src/network/network_socket.h \ - src/area_data.h \ - src/command_extension.h \ - src/config_manager.h \ - src/data_types.h \ - src/db_manager.h \ - src/discord.h \ - src/playerstateobserver.h \ - src/server.h \ - src/typedefs.h \ - src/advertiser.h \ - src/logger/u_logger.h \ - src/logger/writer_modcall.h \ - src/logger/writer_full.h \ - src/music_manager.h \ - src/packet/packet_factory.h \ - src/packet/packet_info.h \ - src/packet/packet_generic.h \ - src/packet/packet_hi.h \ - src/packet/packet_id.h \ - src/packet/packet_askchaa.h \ - src/packet/packet_casea.h \ - src/packet/packet_cc.h \ - src/packet/packet_ch.h \ - src/packet/packet_ct.h \ - src/packet/packet_de.h \ - src/packet/packet_ee.h \ - src/packet/packet_hp.h \ - src/packet/packet_mc.h \ - src/packet/packet_ms.h \ - src/packet/packet_pe.h \ - src/packet/packet_pw.h \ - src/packet/packet_rc.h \ - src/packet/packet_rd.h \ - src/packet/packet_rm.h \ - src/packet/packet_rt.h \ - src/packet/packet_setcase.h \ - src/packet/packet_zz.h + src/acl_roles_handler.h \ + src/akashidefs.h \ + src/akashiutils.h \ + src/network/aopacket.h \ + src/network/network_socket.h \ + src/area_data.h \ + src/command_extension.h \ + src/config_manager.h \ + src/data_types.h \ + src/db_manager.h \ + src/discord.h \ + src/playerstateobserver.h \ + src/server.h \ + src/typedefs.h \ + src/advertiser.h \ + src/logger/u_logger.h \ + src/logger/writer_modcall.h \ + src/logger/writer_full.h \ + src/music_manager.h \ + src/packet/packet_factory.h \ + src/packet/packet_info.h \ + src/packet/packet_generic.h \ + src/packet/packet_hi.h \ + src/packet/packet_id.h \ + src/packet/packet_askchaa.h \ + src/packet/packet_casea.h \ + src/packet/packet_cc.h \ + src/packet/packet_ch.h \ + src/packet/packet_ct.h \ + src/packet/packet_de.h \ + src/packet/packet_ee.h \ + src/packet/packet_hp.h \ + src/packet/packet_mc.h \ + src/packet/packet_ms.h \ + src/packet/packet_pe.h \ + src/packet/packet_pl.h \ + src/packet/packet_pw.h \ + src/packet/packet_rc.h \ + src/packet/packet_rd.h \ + src/packet/packet_rm.h \ + src/packet/packet_rt.h \ + src/packet/packet_setcase.h \ + src/packet/packet_zz.h diff --git a/src/aoclient.cpp b/src/aoclient.cpp index 284831a8..73c2f48d 100644 --- a/src/aoclient.cpp +++ b/src/aoclient.cpp @@ -155,13 +155,13 @@ void AOClient::clientDisconnected() qDebug() << m_remote_ip.toString() << "disconnected"; #endif if (m_joined) { - server->getAreaById(currentArea()) - ->removeClient(server->getCharID(currentCharacter()), clientId()); + server->getAreaById(areaId()) + ->removeClient(server->getCharID(character()), clientId()); arup(ARUPType::PLAYER_COUNT, true); } - if (currentCharacter() != "") { - server->updateCharsTaken(server->getAreaById(currentArea())); + if (character() != "") { + server->updateCharsTaken(server->getAreaById(areaId())); } bool l_updateLocks = false; @@ -182,7 +182,7 @@ void AOClient::handlePacket(AOPacket *packet) #ifdef NET_DEBUG qDebug() << "Received packet:" << packet->getPacketInfo().header << ":" << packet->getContent() << "args length:" << packet->getContent().length(); #endif - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (packet->getContent().join("").size() > 16384) { return; @@ -211,8 +211,8 @@ void AOClient::handlePacket(AOPacket *packet) void AOClient::changeArea(int new_area) { - if (currentArea() == new_area) { - sendServerMessage("You are already in area " + server->getAreaName(currentArea())); + if (areaId() == new_area) { + sendServerMessage("You are already in area " + server->getAreaName(areaId())); return; } if (server->getAreaById(new_area)->lockStatus() == AreaData::LockStatus::LOCKED && !server->getAreaById(new_area)->invited().contains(clientId()) && !checkPermission(ACLRole::BYPASS_LOCKS)) { @@ -220,21 +220,21 @@ void AOClient::changeArea(int new_area) return; } - if (currentCharacter() != "") { - server->getAreaById(currentArea()) - ->changeCharacter(server->getCharID(currentCharacter()), -1); - server->updateCharsTaken(server->getAreaById(currentArea())); + if (character() != "") { + server->getAreaById(areaId()) + ->changeCharacter(server->getCharID(character()), -1); + server->updateCharsTaken(server->getAreaById(areaId())); } - server->getAreaById(currentArea())->removeClient(m_char_id, clientId()); + server->getAreaById(areaId())->removeClient(m_char_id, clientId()); bool l_character_taken = false; if (server->getAreaById(new_area)->charactersTaken().contains( - server->getCharID(currentCharacter()))) { - setCurrentCharacter(""); + server->getCharID(character()))) { + setCharacter(""); m_char_id = -1; l_character_taken = true; } server->getAreaById(new_area)->addClient(m_char_id, clientId()); - setCurrentArea(new_area); + setAreaId(new_area); arup(ARUPType::PLAYER_COUNT, true); sendEvidenceList(server->getAreaById(new_area)); sendPacket("HP", {"1", QString::number(server->getAreaById(new_area)->defHP())}); @@ -243,9 +243,9 @@ void AOClient::changeArea(int new_area) if (l_character_taken) { sendPacket("DONE"); } - const QList l_timers = server->getAreaById(currentArea())->timers(); + const QList l_timers = server->getAreaById(areaId())->timers(); for (QTimer *l_timer : l_timers) { - int l_timer_id = server->getAreaById(currentArea())->timers().indexOf(l_timer) + 1; + int l_timer_id = server->getAreaById(areaId())->timers().indexOf(l_timer) + 1; if (l_timer->isActive()) { sendPacket("TI", {QString::number(l_timer_id), "2"}); sendPacket("TI", {QString::number(l_timer_id), "0", QString::number(QTime(0, 0).msecsTo(QTime(0, 0).addMSecs(l_timer->remainingTime())))}); @@ -254,17 +254,17 @@ void AOClient::changeArea(int new_area) sendPacket("TI", {QString::number(l_timer_id), "3"}); } } - sendServerMessage("You moved to area " + server->getAreaName(currentArea())); - if (server->getAreaById(currentArea())->sendAreaMessageOnJoin()) - sendServerMessage(server->getAreaById(currentArea())->areaMessage()); + sendServerMessage("You moved to area " + server->getAreaName(areaId())); + if (server->getAreaById(areaId())->sendAreaMessageOnJoin()) + sendServerMessage(server->getAreaById(areaId())->areaMessage()); - if (server->getAreaById(currentArea())->lockStatus() == AreaData::LockStatus::SPECTATABLE) - sendServerMessage("Area " + server->getAreaName(currentArea()) + " is spectate-only; to chat IC you will need to be invited by the CM."); + if (server->getAreaById(areaId())->lockStatus() == AreaData::LockStatus::SPECTATABLE) + sendServerMessage("Area " + server->getAreaName(areaId()) + " is spectate-only; to chat IC you will need to be invited by the CM."); } bool AOClient::changeCharacter(int char_id) { - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (char_id >= server->getCharacterCount()) return false; @@ -273,18 +273,18 @@ bool AOClient::changeCharacter(int char_id) return false; } - bool l_successfulChange = l_area->changeCharacter(server->getCharID(currentCharacter()), + bool l_successfulChange = l_area->changeCharacter(server->getCharID(character()), char_id); if (char_id < 0) { - setCurrentCharacter(""); + setCharacter(""); m_char_id = char_id; setSpectator(true); } if (l_successfulChange == true) { QString l_char_selected = server->getCharacterById(char_id); - setCurrentCharacter(l_char_selected); + setCharacter(l_char_selected); m_pos = ""; server->updateCharsTaken(l_area); sendPacket("PV", {QString::number(clientId()), "CID", QString::number(char_id)}); @@ -369,7 +369,7 @@ void AOClient::arup(ARUPType type, bool broadcast) const QList l_owner_ids = l_area->owners(); for (int l_owner_id : l_owner_ids) { AOClient *l_owner = server->getClientByID(l_owner_id); - l_area_owners.append("[" + QString::number(l_owner->clientId()) + "] " + l_owner->currentCharacter()); + l_area_owners.append("[" + QString::number(l_owner->clientId()) + "] " + l_owner->character()); } l_arup_data.append(l_area_owners.join(", ")); } @@ -403,9 +403,6 @@ void AOClient::fullArup() void AOClient::sendPacket(AOPacket *packet) { -#ifdef NET_DEBUG - qDebug() << "Sent packet:" << packet->getPacketInfo().header << ":" << packet->getContent(); -#endif m_socket->write(packet); } @@ -442,7 +439,7 @@ void AOClient::sendServerMessage(QString message) void AOClient::sendServerMessageArea(QString message) { server->broadcast(PacketFactory::createPacket("CT", {ConfigManager::serverName(), message, "1"}), - currentArea()); + areaId()); } void AOClient::sendServerBroadcast(QString message) @@ -456,7 +453,7 @@ bool AOClient::checkPermission(ACLRole::Permission f_permission) const return true; } - if ((f_permission == ACLRole::CM) && server->getAreaById(currentArea())->owners().contains(clientId())) { + if ((f_permission == ACLRole::CM) && server->getAreaById(areaId())->owners().contains(clientId())) { return true; // I'm sorry for this hack. } @@ -499,34 +496,42 @@ int AOClient::clientId() const return m_id; } -int AOClient::currentArea() const +QString AOClient::name() const { return m_ooc_name; } + +void AOClient::setName(const QString &f_name) +{ + m_ooc_name = f_name; + Q_EMIT nameChanged(m_ooc_name); +} + +int AOClient::areaId() const { return m_current_area; } -void AOClient::setCurrentArea(const int f_area_id) +void AOClient::setAreaId(const int f_area_id) { m_current_area = f_area_id; - Q_EMIT currentAreaChanged(m_current_area); + Q_EMIT areaIdChanged(m_current_area); } -QString AOClient::currentCharacter() const +QString AOClient::character() const { return m_current_char; } -void AOClient::setCurrentCharacter(const QString &f_character) +void AOClient::setCharacter(const QString &f_character) { m_current_char = f_character; Q_EMIT characterChanged(m_current_char); } -QString AOClient::currentCharacterName() const { return m_showname; } +QString AOClient::characterName() const { return m_showname; } -void AOClient::setCurrentCharacterName(const QString &f_showname) +void AOClient::setCharacterName(const QString &f_showname) { - m_showname = f_showname; - Q_EMIT characterNameChanged(m_showname); + m_showname = f_showname; + Q_EMIT characterNameChanged(m_showname); } void AOClient::setSpectator(bool f_spectator) diff --git a/src/aoclient.h b/src/aoclient.h index b96f9243..258c26cf 100644 --- a/src/aoclient.h +++ b/src/aoclient.h @@ -143,14 +143,17 @@ class AOClient : public QObject int clientId() const; - int currentArea() const; - void setCurrentArea(const int f_area_id); + QString name() const; + void setName(const QString &f_name); - QString currentCharacter() const; - void setCurrentCharacter(const QString &f_character); + QString character() const; + void setCharacter(const QString &f_character); - QString currentCharacterName() const; - void setCurrentCharacterName(const QString &f_showname); + QString characterName() const; + void setCharacterName(const QString &f_showname); + + int areaId() const; + void setAreaId(const int f_area_id); /** * @brief The IP address of the client. @@ -647,9 +650,10 @@ class AOClient : public QObject */ void joined(); + void nameChanged(const QString &); void characterChanged(const QString &); void characterNameChanged(const QString &); - void currentAreaChanged(int); + void areaIdChanged(int); private: /** diff --git a/src/commands/area.cpp b/src/commands/area.cpp index 16d5a447..8e4b1536 100644 --- a/src/commands/area.cpp +++ b/src/commands/area.cpp @@ -27,8 +27,8 @@ void AOClient::cmdCM(int argc, QStringList argv) { - QString l_sender_name = m_ooc_name; - AreaData *l_area = server->getAreaById(currentArea()); + QString l_sender_name = name(); + AreaData *l_area = server->getAreaById(areaId()); if (l_area->isProtected()) { sendServerMessage("This area is protected, you may not become CM."); return; @@ -57,7 +57,7 @@ void AOClient::cmdCM(int argc, QStringList argv) return; } l_area->addOwner(l_owner_candidate->clientId()); - sendServerMessageArea(l_owner_candidate->m_ooc_name + " is now CM in this area."); + sendServerMessageArea(l_owner_candidate->name() + " is now CM in this area."); arup(ARUPType::CM, true); } else { @@ -67,7 +67,7 @@ void AOClient::cmdCM(int argc, QStringList argv) void AOClient::cmdUnCM(int argc, QStringList argv) { - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); int l_uid; if (l_area->owners().isEmpty()) { @@ -94,7 +94,7 @@ void AOClient::cmdUnCM(int argc, QStringList argv) sendServerMessage("No client with that ID found."); return; } - sendServerMessage(l_target->m_ooc_name + " was successfully unCMed."); + sendServerMessage(l_target->name() + " was successfully unCMed."); l_target->sendServerMessage("You have been unCMed by a moderator."); } else { @@ -113,7 +113,7 @@ void AOClient::cmdInvite(int argc, QStringList argv) { Q_UNUSED(argc); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); bool ok; int l_invited_id = argv[0].toInt(&ok); if (!ok) { @@ -138,7 +138,7 @@ void AOClient::cmdUnInvite(int argc, QStringList argv) { Q_UNUSED(argc); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); bool ok; int l_uninvited_id = argv[0].toInt(&ok); if (!ok) { @@ -168,7 +168,7 @@ void AOClient::cmdLock(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *area = server->getAreaById(currentArea()); + AreaData *area = server->getAreaById(areaId()); if (area->lockStatus() == AreaData::LockStatus::LOCKED) { sendServerMessage("This area is already locked."); return; @@ -177,7 +177,7 @@ void AOClient::cmdLock(int argc, QStringList argv) area->lock(); const QVector l_clients = server->getClients(); for (AOClient *l_client : l_clients) { - if (l_client->currentArea() == currentArea() && l_client->hasJoined()) { + if (l_client->areaId() == areaId() && l_client->hasJoined()) { area->invite(l_client->clientId()); } } @@ -189,7 +189,7 @@ void AOClient::cmdSpectatable(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (l_area->lockStatus() == AreaData::LockStatus::SPECTATABLE) { sendServerMessage("This area is already in spectate mode."); return; @@ -198,7 +198,7 @@ void AOClient::cmdSpectatable(int argc, QStringList argv) l_area->spectatable(); const QVector l_clients = server->getClients(); for (AOClient *l_client : l_clients) { - if (l_client->currentArea() == currentArea() && l_client->hasJoined()) { + if (l_client->areaId() == areaId() && l_client->hasJoined()) { l_area->invite(l_client->clientId()); } } @@ -210,7 +210,7 @@ void AOClient::cmdUnLock(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (l_area->lockStatus() == AreaData::LockStatus::FREE) { sendServerMessage("This area is not locked."); return; @@ -241,7 +241,7 @@ void AOClient::cmdGetArea(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - QStringList l_entries = buildAreaList(currentArea()); + QStringList l_entries = buildAreaList(areaId()); sendServerMessage(l_entries.join("\n")); } @@ -262,7 +262,7 @@ void AOClient::cmdAreaKick(int argc, QStringList argv) { Q_UNUSED(argc); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); bool ok; int l_idx = argv[0].toInt(&ok); @@ -270,7 +270,7 @@ void AOClient::cmdAreaKick(int argc, QStringList argv) sendServerMessage("That does not look like a valid ID."); return; } - if (server->getAreaById(currentArea())->owners().contains(l_idx)) { + if (server->getAreaById(areaId())->owners().contains(l_idx)) { sendServerMessage("You cannot kick another CM!"); return; } @@ -279,7 +279,7 @@ void AOClient::cmdAreaKick(int argc, QStringList argv) sendServerMessage("No client with that ID found."); return; } - else if (l_client_to_kick->currentArea() != currentArea()) { + else if (l_client_to_kick->areaId() != areaId()) { sendServerMessage("That client is not in this area."); return; } @@ -294,19 +294,19 @@ void AOClient::cmdSetBackground(int argc, QStringList argv) Q_UNUSED(argc); QString f_background = argv.join(" "); - AreaData *area = server->getAreaById(currentArea()); + AreaData *area = server->getAreaById(areaId()); if (m_authenticated || !area->bgLocked()) { if (server->getBackgrounds().contains(f_background, Qt::CaseInsensitive) || area->ignoreBgList() == true) { area->setBackground(f_background); - server->broadcast(PacketFactory::createPacket("BN", {f_background}), currentArea()); + server->broadcast(PacketFactory::createPacket("BN", {f_background}), areaId()); QString ambience_name = ConfigManager::ambience()->value(f_background + "/ambience").toString(); if (ambience_name != "") { - server->broadcast(PacketFactory::createPacket("MC", {ambience_name, "-1", currentCharacterName(), "1", "1"}), currentArea()); + server->broadcast(PacketFactory::createPacket("MC", {ambience_name, "-1", characterName(), "1", "1"}), areaId()); } else { - server->broadcast(PacketFactory::createPacket("MC", {"~stop.mp3", "-1", currentCharacterName(), "1", "1"}), currentArea()); + server->broadcast(PacketFactory::createPacket("MC", {"~stop.mp3", "-1", characterName(), "1", "1"}), areaId()); } - sendServerMessageArea(currentCharacter() + " changed the background to " + f_background); + sendServerMessageArea(character() + " changed the background to " + f_background); } else { sendServerMessage("Invalid background name."); @@ -322,13 +322,13 @@ void AOClient::cmdBgLock(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (l_area->bgLocked() == false) { l_area->toggleBgLock(); }; - server->broadcast(PacketFactory::createPacket("CT", {ConfigManager::serverName(), currentCharacter() + " locked the background.", "1"}), currentArea()); + server->broadcast(PacketFactory::createPacket("CT", {ConfigManager::serverName(), character() + " locked the background.", "1"}), areaId()); } void AOClient::cmdBgUnlock(int argc, QStringList argv) @@ -336,25 +336,25 @@ void AOClient::cmdBgUnlock(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (l_area->bgLocked() == true) { l_area->toggleBgLock(); }; - server->broadcast(PacketFactory::createPacket("CT", {ConfigManager::serverName(), currentCharacter() + " unlocked the background.", "1"}), currentArea()); + server->broadcast(PacketFactory::createPacket("CT", {ConfigManager::serverName(), character() + " unlocked the background.", "1"}), areaId()); } void AOClient::cmdStatus(int argc, QStringList argv) { Q_UNUSED(argc); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); QString l_arg = argv[0].toLower(); if (l_area->changeStatus(l_arg)) { arup(ARUPType::STATUS, true); - server->broadcast(PacketFactory::createPacket("CT", {ConfigManager::serverName(), currentCharacter() + " changed status to " + l_arg.toUpper(), "1"}), currentArea()); + server->broadcast(PacketFactory::createPacket("CT", {ConfigManager::serverName(), character() + " changed status to " + l_arg.toUpper(), "1"}), areaId()); } else { const QStringList keys = AreaData::map_statuses.keys(); @@ -367,7 +367,7 @@ void AOClient::cmdJudgeLog(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (l_area->judgelog().isEmpty()) { sendServerMessage("There have been no judge actions in this area."); return; @@ -388,7 +388,7 @@ void AOClient::cmdIgnoreBgList(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); l_area->toggleIgnoreBgList(); QString l_state = l_area->ignoreBgList() ? "ignored." : "enforced."; sendServerMessage("BG list in this area is now " + l_state); @@ -396,7 +396,7 @@ void AOClient::cmdIgnoreBgList(int argc, QStringList argv) void AOClient::cmdAreaMessage(int argc, QStringList argv) { - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (argc == 0) { sendServerMessage(l_area->areaMessage()); return; @@ -413,7 +413,7 @@ void AOClient::cmdToggleAreaMessageOnJoin(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); l_area->toggleAreaMessageJoin(); QString l_state = l_area->sendAreaMessageOnJoin() ? "enabled." : "disabled."; sendServerMessage("Sending message on area join is now " + l_state); @@ -424,7 +424,7 @@ void AOClient::cmdToggleWtce(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); l_area->toggleWtceAllowed(); QString l_state = l_area->isWtceAllowed() ? "enabled." : "disabled."; sendServerMessage("Using testimony animations is now " + l_state); @@ -435,7 +435,7 @@ void AOClient::cmdToggleShouts(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); l_area->toggleShoutAllowed(); QString l_state = l_area->isShoutAllowed() ? "enabled." : "disabled."; sendServerMessage("Using shouts is now " + l_state); @@ -446,7 +446,7 @@ void AOClient::cmdClearAreaMessage(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); l_area->clearAreaMessage(); if (l_area->sendAreaMessageOnJoin()) // Turn off the automatic sending. cmdToggleAreaMessageOnJoin(0, QStringList{}); // Dummy values. diff --git a/src/commands/casing.cpp b/src/commands/casing.cpp index 1c81a66f..982d399f 100644 --- a/src/commands/casing.cpp +++ b/src/commands/casing.cpp @@ -27,8 +27,8 @@ void AOClient::cmdDoc(int argc, QStringList argv) { - QString l_sender_name = m_ooc_name; - AreaData *l_area = server->getAreaById(currentArea()); + QString l_sender_name = name(); + AreaData *l_area = server->getAreaById(areaId()); if (argc == 0) { sendServerMessage("Document: " + l_area->document()); } @@ -43,8 +43,8 @@ void AOClient::cmdClearDoc(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - QString l_sender_name = m_ooc_name; - AreaData *l_area = server->getAreaById(currentArea()); + QString l_sender_name = name(); + AreaData *l_area = server->getAreaById(areaId()); l_area->changeDoc("No document."); sendServerMessageArea(l_sender_name + " cleared the document."); } @@ -53,7 +53,7 @@ void AOClient::cmdEvidenceMod(int argc, QStringList argv) { Q_UNUSED(argc); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); argv[0] = argv[0].toLower(); if (argv[0] == "cm") l_area->setEviMod(AreaData::EvidenceMod::CM); @@ -77,7 +77,7 @@ void AOClient::cmdEvidence_Swap(int argc, QStringList argv) { Q_UNUSED(argc); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); int l_ev_size = l_area->evidence().size() - 1; if (l_ev_size < 0) { @@ -111,7 +111,7 @@ void AOClient::cmdTestify(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (l_area->testimonyRecording() == AreaData::TestimonyRecording::RECORDING) { sendServerMessage("Testimony recording is already in progress. Please stop it before starting a new one."); } @@ -127,11 +127,11 @@ void AOClient::cmdExamine(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (l_area->testimony().size() - 1 > 0) { l_area->restartTestimony(); - server->broadcast(PacketFactory::createPacket("RT", {"testimony2"}), currentArea()); - server->broadcast(PacketFactory::createPacket("MS", {l_area->testimony()[0]}), currentArea()); + server->broadcast(PacketFactory::createPacket("RT", {"testimony2"}), areaId()); + server->broadcast(PacketFactory::createPacket("MS", {l_area->testimony()[0]}), areaId()); return; } if (l_area->testimonyRecording() == AreaData::TestimonyRecording::PLAYBACK) @@ -145,7 +145,7 @@ void AOClient::cmdTestimony(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (l_area->testimony().size() - 1 < 1) { sendServerMessage("Unable to display empty testimony."); return; @@ -165,7 +165,7 @@ void AOClient::cmdDeleteStatement(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); int l_c_statement = l_area->statement(); if (l_area->testimony().size() - 1 == 0) { sendServerMessage("Unable to delete statement. No statements saved in this area."); @@ -181,7 +181,7 @@ void AOClient::cmdUpdateStatement(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - server->getAreaById(currentArea())->setTestimonyRecording(AreaData::TestimonyRecording::UPDATE); + server->getAreaById(areaId())->setTestimonyRecording(AreaData::TestimonyRecording::UPDATE); sendServerMessage("The next IC-Message will replace the last displayed replay message."); } @@ -190,9 +190,9 @@ void AOClient::cmdPauseTestimony(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); l_area->setTestimonyRecording(AreaData::TestimonyRecording::STOPPED); - server->broadcast(PacketFactory::createPacket("RT", {"testimony1", "1"}), currentArea()); + server->broadcast(PacketFactory::createPacket("RT", {"testimony1", "1"}), areaId()); sendServerMessage("Testimony has been stopped."); } @@ -201,8 +201,8 @@ void AOClient::cmdAddStatement(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - if (server->getAreaById(currentArea())->statement() < ConfigManager::maxStatements()) { - server->getAreaById(currentArea())->setTestimonyRecording(AreaData::TestimonyRecording::ADD); + if (server->getAreaById(areaId())->statement() < ConfigManager::maxStatements()) { + server->getAreaById(areaId())->setTestimonyRecording(AreaData::TestimonyRecording::ADD); sendServerMessage("The next IC-Message will be inserted into the testimony."); } else @@ -221,7 +221,7 @@ void AOClient::cmdSaveTestimony(int argc, QStringList argv) l_permission_found = true; if (l_permission_found) { - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (l_area->testimony().size() - 1 <= 0) { sendServerMessage("Can't save an empty testimony."); return; @@ -259,7 +259,7 @@ void AOClient::cmdLoadTestimony(int argc, QStringList argv) { Q_UNUSED(argc); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); QDir l_dir_testimony("storage/testimony"); if (!l_dir_testimony.exists()) { sendServerMessage("Unable to load testimonies. Testimony storage not found."); diff --git a/src/commands/command_helper.cpp b/src/commands/command_helper.cpp index 12f0e4ae..13715edf 100644 --- a/src/commands/command_helper.cpp +++ b/src/commands/command_helper.cpp @@ -54,16 +54,16 @@ QStringList AOClient::buildAreaList(int area_idx) entries.append("[" + QString::number(area->playerCount()) + " users][" + QVariant::fromValue(area->status()).toString().replace("_", "-") + "]"); const QVector l_clients = server->getClients(); for (AOClient *l_client : l_clients) { - if (l_client->currentArea() == area_idx && l_client->hasJoined()) { - QString char_entry = "[" + QString::number(l_client->clientId()) + "] " + l_client->currentCharacter(); - if (l_client->currentCharacter() == "") + if (l_client->areaId() == area_idx && l_client->hasJoined()) { + QString char_entry = "[" + QString::number(l_client->clientId()) + "] " + l_client->character(); + if (l_client->character() == "") char_entry += "Spectator"; - if (l_client->currentCharacterName() != "") - char_entry += " (" + l_client->currentCharacterName() + ")"; + if (l_client->characterName() != "") + char_entry += " (" + l_client->characterName() + ")"; if (area->owners().contains(l_client->clientId())) char_entry.insert(0, "[CM] "); if (m_authenticated) - char_entry += " (" + l_client->getIpid() + "): " + l_client->m_ooc_name; + char_entry += " (" + l_client->getIpid() + "): " + l_client->name(); if (l_client->m_is_afk) char_entry += " [AFK]"; entries.append(char_entry); @@ -103,9 +103,9 @@ void AOClient::diceThrower(int sides, int dice, bool p_roll, int roll_modifier) return; } if (roll_modifier) - sendServerMessageArea(m_ooc_name + " rolled a " + QString::number(dice) + "d" + QString::number(sides) + "+" + QString::number(roll_modifier) + ". Results: " + total_results); + sendServerMessageArea(name() + " rolled a " + QString::number(dice) + "d" + QString::number(sides) + "+" + QString::number(roll_modifier) + ". Results: " + total_results); else - sendServerMessageArea(m_ooc_name + " rolled a " + QString::number(dice) + "d" + QString::number(sides) + ". Results: " + total_results); + sendServerMessageArea(name() + " rolled a " + QString::number(dice) + "d" + QString::number(sides) + ". Results: " + total_results); } QString AOClient::getAreaTimer(int area_idx, int timer_idx) @@ -232,5 +232,5 @@ void AOClient::sendNotice(QString f_notice, bool f_global) if (f_global) server->broadcast(l_packet); else - server->broadcast(l_packet, currentArea()); + server->broadcast(l_packet, areaId()); } diff --git a/src/commands/messaging.cpp b/src/commands/messaging.cpp index 53b145cb..d53153c0 100644 --- a/src/commands/messaging.cpp +++ b/src/commands/messaging.cpp @@ -29,7 +29,7 @@ void AOClient::cmdPos(int argc, QStringList argv) Q_UNUSED(argc); changePosition(argv[0]); - updateEvidenceList(server->getAreaById(currentArea())); + updateEvidenceList(server->getAreaById(areaId())); } void AOClient::cmdForcePos(int argc, QStringList argv) @@ -57,7 +57,7 @@ void AOClient::cmdForcePos(int argc, QStringList argv) else if (argv[1] == "*") { // force all clients in the area const QVector l_clients = server->getClients(); for (AOClient *l_client : l_clients) { - if (l_client->currentArea() == currentArea()) + if (l_client->areaId() == areaId()) l_targets.append(l_client); } } @@ -73,8 +73,8 @@ void AOClient::cmdG(int argc, QStringList argv) { Q_UNUSED(argc); - QString l_sender_name = m_ooc_name; - QString l_sender_area = server->getAreaName(currentArea()); + QString l_sender_name = name(); + QString l_sender_area = server->getAreaName(areaId()); QString l_sender_message = argv.join(" "); // Better readability thanks to AwesomeAim. AOPacket *l_mod_packet = PacketFactory::createPacket("CT", {"[G][" + m_ipid + "][" + l_sender_area + "]" + l_sender_name, l_sender_message}); @@ -87,7 +87,7 @@ void AOClient::cmdNeed(int argc, QStringList argv) { Q_UNUSED(argc); - QString l_sender_area = server->getAreaName(currentArea()); + QString l_sender_area = server->getAreaName(areaId()); QString l_sender_message = argv.join(" "); server->broadcast(PacketFactory::createPacket("CT", {"=== Advert ===\n[" + l_sender_area + "] needs " + l_sender_message + "."}), Server::TARGET_TYPE::ADVERT); } @@ -114,7 +114,7 @@ void AOClient::cmdRandomChar(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); int l_selected_char_id; bool l_taken = true; while (l_taken) { @@ -158,7 +158,7 @@ void AOClient::cmdPM(int argc, QStringList argv) return; } QString l_message = argv.join(" "); //...which means it will not end up as part of the message - l_target_client->sendServerMessage("Message from " + m_ooc_name + " (" + QString::number(clientId()) + "): " + l_message); + l_target_client->sendServerMessage("Message from " + name() + " (" + QString::number(clientId()) + "): " + l_message); sendServerMessage("PM sent to " + QString::number(l_target_id) + ". Message: " + l_message); } @@ -173,7 +173,7 @@ void AOClient::cmdM(int argc, QStringList argv) { Q_UNUSED(argc); - QString l_sender_name = m_ooc_name; + QString l_sender_name = name(); QString l_sender_message = argv.join(" "); server->broadcast(PacketFactory::createPacket("CT", {"[M]" + l_sender_name, l_sender_message}), Server::TARGET_TYPE::MODCHAT); } @@ -182,8 +182,8 @@ void AOClient::cmdGM(int argc, QStringList argv) { Q_UNUSED(argc); - QString l_sender_name = m_ooc_name; - QString l_sender_area = server->getAreaName(currentArea()); + QString l_sender_name = name(); + QString l_sender_area = server->getAreaName(areaId()); QString l_sender_message = argv.join(" "); server->broadcast(PacketFactory::createPacket("CT", {"[G][" + l_sender_area + "]" + "[" + l_sender_name + "][M]", l_sender_message}), Server::TARGET_TYPE::MODCHAT); } @@ -192,9 +192,9 @@ void AOClient::cmdLM(int argc, QStringList argv) { Q_UNUSED(argc); - QString l_sender_name = m_ooc_name; + QString l_sender_name = name(); QString l_sender_message = argv.join(" "); - server->broadcast(PacketFactory::createPacket("CT", {"[" + l_sender_name + "][M]", l_sender_message}), currentArea()); + server->broadcast(PacketFactory::createPacket("CT", {"[" + l_sender_name + "][M]", l_sender_message}), areaId()); } void AOClient::cmdGimp(int argc, QStringList argv) @@ -410,7 +410,7 @@ void AOClient::cmdCharCurse(int argc, QStringList argv) } if (argc == 1) { - l_target->m_charcurse_list.append(server->getCharID(l_target->currentCharacter())); + l_target->m_charcurse_list.append(server->getCharID(l_target->character())); } else { argv.removeFirst(); @@ -430,13 +430,13 @@ void AOClient::cmdCharCurse(int argc, QStringList argv) l_target->m_is_charcursed = true; // Kick back to char select screen - if (!l_target->m_charcurse_list.contains(server->getCharID(l_target->currentCharacter()))) { + if (!l_target->m_charcurse_list.contains(server->getCharID(l_target->character()))) { l_target->changeCharacter(-1); - server->updateCharsTaken(server->getAreaById(currentArea())); + server->updateCharsTaken(server->getAreaById(areaId())); l_target->sendPacket("DONE"); } else { - server->updateCharsTaken(server->getAreaById(currentArea())); + server->updateCharsTaken(server->getAreaById(areaId())); } l_target->sendServerMessage("You have been charcursed!"); @@ -467,7 +467,7 @@ void AOClient::cmdUnCharCurse(int argc, QStringList argv) } l_target->m_is_charcursed = false; l_target->m_charcurse_list.clear(); - server->updateCharsTaken(server->getAreaById(currentArea())); + server->updateCharsTaken(server->getAreaById(areaId())); sendServerMessage("Uncharcursed player."); l_target->sendServerMessage("You were uncharcursed."); } @@ -522,7 +522,7 @@ void AOClient::cmdA(int argc, QStringList argv) } argv.removeAt(0); - QString l_sender_name = m_ooc_name; + QString l_sender_name = name(); QString l_ooc_message = argv.join(" "); server->broadcast(PacketFactory::createPacket("CT", {"[CM]" + l_sender_name, l_ooc_message}), l_area_id); } @@ -532,7 +532,7 @@ void AOClient::cmdS(int argc, QStringList argv) Q_UNUSED(argc); int l_all_areas = server->getAreaCount() - 1; - QString l_sender_name = m_ooc_name; + QString l_sender_name = name(); QString l_ooc_message = argv.join(" "); for (int i = 0; i <= l_all_areas; i++) { diff --git a/src/commands/moderation.cpp b/src/commands/moderation.cpp index 4f534494..cca4dbcf 100644 --- a/src/commands/moderation.cpp +++ b/src/commands/moderation.cpp @@ -146,10 +146,10 @@ void AOClient::cmdMods(int argc, QStringList argv) l_entries << "Moderator: " + l_client->m_moderator_name; l_entries << "Role:" << l_client->m_acl_role_id; } - l_entries << "OOC name: " + l_client->m_ooc_name; + l_entries << "OOC name: " + l_client->name(); l_entries << "ID: " + QString::number(l_client->clientId()); - l_entries << "Area: " + QString::number(l_client->currentArea()); - l_entries << "Character: " + l_client->currentCharacter(); + l_entries << "Area: " + QString::number(l_client->areaId()); + l_entries << "Character: " + l_client->character(); l_online_count++; } } @@ -441,8 +441,8 @@ void AOClient::cmdAllowBlankposting(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - QString l_sender_name = m_ooc_name; - AreaData *l_area = server->getAreaById(currentArea()); + QString l_sender_name = name(); + AreaData *l_area = server->getAreaById(areaId()); l_area->toggleBlankposting(); if (l_area->blankpostingAllowed() == false) { sendServerMessageArea(l_sender_name + " has set blankposting in the area to forbidden."); @@ -508,7 +508,7 @@ void AOClient::cmdForceImmediate(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); l_area->toggleImmediate(); QString l_state = l_area->forceImmediate() ? "on." : "off."; sendServerMessage("Forced immediate text processing in this area is now " + l_state); @@ -519,7 +519,7 @@ void AOClient::cmdAllowIniswap(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); l_area->toggleIniswap(); QString state = l_area->iniswapAllowed() ? "allowed." : "disallowed."; sendServerMessage("Iniswapping in this area is now " + state); @@ -623,7 +623,7 @@ void AOClient::cmdClearCM(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); foreach (int l_client_id, l_area->owners()) { l_area->removeOwner(l_client_id); } diff --git a/src/commands/music.cpp b/src/commands/music.cpp index 3b3e2a69..17b7a9fa 100644 --- a/src/commands/music.cpp +++ b/src/commands/music.cpp @@ -33,21 +33,21 @@ void AOClient::cmdPlay(int argc, QStringList argv) sendServerMessage("You are blocked from changing the music."); return; } - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); const ACLRole l_role = server->getACLRolesHandler()->getRoleById(m_acl_role_id); if (!l_area->owners().contains(clientId()) && !l_area->isPlayEnabled() && !l_role.checkPermission(ACLRole::CM)) { // Make sure we have permission to play music sendServerMessage("Free music play is disabled in this area."); return; } QString l_song = argv.join(" "); - if (currentCharacterName().isEmpty()) { - l_area->changeMusic(currentCharacter(), l_song); + if (characterName().isEmpty()) { + l_area->changeMusic(character(), l_song); } else { - l_area->changeMusic(currentCharacterName(), l_song); + l_area->changeMusic(characterName(), l_song); } - AOPacket *music_change = PacketFactory::createPacket("MC", {l_song, QString::number(server->getCharID(currentCharacter())), currentCharacterName(), "1", "0"}); - server->broadcast(music_change, currentArea()); + AOPacket *music_change = PacketFactory::createPacket("MC", {l_song, QString::number(server->getCharID(character())), characterName(), "1", "0"}); + server->broadcast(music_change, areaId()); } void AOClient::cmdPlayAmbience(int argc, QStringList argv) @@ -58,15 +58,15 @@ void AOClient::cmdPlayAmbience(int argc, QStringList argv) sendServerMessage("You are blocked from changing the ambience."); return; } - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (!l_area->owners().contains(clientId()) && !l_area->isPlayEnabled()) { // Make sure we have permission to play music sendServerMessage("Free ambience play is disabled in this area."); return; } QString l_song = argv.join(" "); l_area->changeAmbience(l_song); - AOPacket *music_change = PacketFactory::createPacket("MC", {l_song, "-1", currentCharacterName(), "1", "1"}); - server->broadcast(music_change, currentArea()); + AOPacket *music_change = PacketFactory::createPacket("MC", {l_song, "-1", characterName(), "1", "1"}); + server->broadcast(music_change, areaId()); } void AOClient::cmdCurrentMusic(int argc, QStringList argv) @@ -74,7 +74,7 @@ void AOClient::cmdCurrentMusic(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (!l_area->currentMusic().isEmpty() && !l_area->currentMusic().contains("~stop.mp3")) // dummy track for stopping music sendServerMessage("The current song is " + l_area->currentMusic() + " played by " + l_area->musicPlayerBy()); else @@ -140,7 +140,7 @@ void AOClient::cmdToggleMusic(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); l_area->toggleMusic(); QString l_state = l_area->isMusicAllowed() ? "allowed." : "disallowed."; sendServerMessage("Music in this area is now " + l_state); @@ -151,7 +151,7 @@ void AOClient::cmdToggleJukebox(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); l_area->toggleJukebox(); QString l_state = l_area->isjukeboxEnabled() ? "enabled." : "disabled."; sendServerMessageArea("The jukebox in this area has been " + l_state); @@ -172,13 +172,13 @@ void AOClient::cmdAddSong(int argc, QStringList argv) bool l_success = false; if (l_argv.size() == 1) { QString l_song_name = l_argv.value(0); - l_success = m_music_manager->addCustomSong(l_song_name, l_song_name, 0, currentArea()); + l_success = m_music_manager->addCustomSong(l_song_name, l_song_name, 0, areaId()); } if (l_argv.size() == 2) { QString l_song_name = l_argv.value(0); QString l_true_name = l_argv.value(1); - l_success = m_music_manager->addCustomSong(l_song_name, l_true_name, 0, currentArea()); + l_success = m_music_manager->addCustomSong(l_song_name, l_true_name, 0, areaId()); } if (l_argv.size() == 3) { @@ -188,7 +188,7 @@ void AOClient::cmdAddSong(int argc, QStringList argv) int l_song_duration = l_argv.value(2).toInt(&ok); if (!ok) l_song_duration = 0; - l_success = m_music_manager->addCustomSong(l_song_name, l_true_name, l_song_duration, currentArea()); + l_success = m_music_manager->addCustomSong(l_song_name, l_true_name, l_song_duration, areaId()); } if (l_argv.size() >= 4) { @@ -203,7 +203,7 @@ void AOClient::cmdAddSong(int argc, QStringList argv) void AOClient::cmdAddCategory(int argc, QStringList argv) { Q_UNUSED(argc); - bool l_success = m_music_manager->addCustomCategory(argv.join(" "), currentArea()); + bool l_success = m_music_manager->addCustomCategory(argv.join(" "), areaId()); QString l_message = l_success ? "succeeded." : "failed."; sendServerMessage("The addition of the category has " + l_message); } @@ -211,7 +211,7 @@ void AOClient::cmdAddCategory(int argc, QStringList argv) void AOClient::cmdRemoveCategorySong(int argc, QStringList argv) { Q_UNUSED(argc); - bool l_success = m_music_manager->removeCategorySong(argv.join(" "), currentArea()); + bool l_success = m_music_manager->removeCategorySong(argv.join(" "), areaId()); QString l_message = l_success ? "succeeded." : "failed."; sendServerMessage("The removal of the entry has " + l_message); } @@ -220,7 +220,7 @@ void AOClient::cmdToggleRootlist(int argc, QStringList argv) { Q_UNUSED(argc); Q_UNUSED(argv); - bool l_status = m_music_manager->toggleRootEnabled(currentArea()); + bool l_status = m_music_manager->toggleRootEnabled(areaId()); QString l_message = (l_status) ? "enabled." : "disabled."; sendServerMessage("Global musiclist has been " + l_message); } @@ -229,7 +229,7 @@ void AOClient::cmdClearCustom(int argc, QStringList argv) { Q_UNUSED(argc); Q_UNUSED(argv); - m_music_manager->clearCustomList(currentArea()); + m_music_manager->clearCustomList(areaId()); sendServerMessage("Custom songs have been cleared."); } @@ -238,12 +238,12 @@ void AOClient::cmdJukeboxSkip(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - QString l_name = currentCharacter(); - if (!currentCharacterName().isEmpty()) { - l_name = currentCharacterName(); + QString l_name = character(); + if (!characterName().isEmpty()) { + l_name = characterName(); } - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); if (l_area->isjukeboxEnabled()) { if (l_area->getJukeboxQueueSize() >= 1) { diff --git a/src/commands/roleplay.cpp b/src/commands/roleplay.cpp index f72cc356..6e39e80c 100644 --- a/src/commands/roleplay.cpp +++ b/src/commands/roleplay.cpp @@ -30,7 +30,7 @@ void AOClient::cmdFlip(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - QString l_sender_name = m_ooc_name; + QString l_sender_name = name(); QStringList l_faces = {"heads", "tails"}; QString l_face = l_faces[AOClient::genRand(0, 1)]; sendServerMessageArea(l_sender_name + " flipped a coin and got " + l_face + "."); @@ -150,7 +150,7 @@ void AOClient::cmdRollP(int argc, QStringList argv) void AOClient::cmdTimer(int argc, QStringList argv) { - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); // Called without arguments // Shows a brief of all timers @@ -207,8 +207,8 @@ void AOClient::cmdTimer(int argc, QStringList argv) l_requested_timer->start(); sendServerMessage("Set timer " + QString::number(l_timer_id) + " to " + argv[1] + "."); AOPacket *l_update_timer = PacketFactory::createPacket("TI", {QString::number(l_timer_id), "0", QString::number(QTime(0, 0).msecsTo(l_requested_time))}); - l_is_global ? server->broadcast(l_show_timer) : server->broadcast(l_show_timer, currentArea()); // Show the timer - l_is_global ? server->broadcast(l_update_timer) : server->broadcast(l_update_timer, currentArea()); + l_is_global ? server->broadcast(l_show_timer) : server->broadcast(l_show_timer, areaId()); // Show the timer + l_is_global ? server->broadcast(l_update_timer) : server->broadcast(l_update_timer, areaId()); return; } // Otherwise, update the state of the timer @@ -217,22 +217,22 @@ void AOClient::cmdTimer(int argc, QStringList argv) l_requested_timer->start(); sendServerMessage("Started timer " + QString::number(l_timer_id) + "."); AOPacket *l_update_timer = PacketFactory::createPacket("TI", {QString::number(l_timer_id), "0", QString::number(QTime(0, 0).msecsTo(QTime(0, 0).addMSecs(l_requested_timer->remainingTime())))}); - l_is_global ? server->broadcast(l_show_timer) : server->broadcast(l_show_timer, currentArea()); - l_is_global ? server->broadcast(l_update_timer) : server->broadcast(l_update_timer, currentArea()); + l_is_global ? server->broadcast(l_show_timer) : server->broadcast(l_show_timer, areaId()); + l_is_global ? server->broadcast(l_update_timer) : server->broadcast(l_update_timer, areaId()); } else if (argv[1] == "pause" || argv[1] == "stop") { l_requested_timer->setInterval(l_requested_timer->remainingTime()); l_requested_timer->stop(); sendServerMessage("Stopped timer " + QString::number(l_timer_id) + "."); AOPacket *l_update_timer = PacketFactory::createPacket("TI", {QString::number(l_timer_id), "1", QString::number(QTime(0, 0).msecsTo(QTime(0, 0).addMSecs(l_requested_timer->interval())))}); - l_is_global ? server->broadcast(l_update_timer) : server->broadcast(l_update_timer, currentArea()); + l_is_global ? server->broadcast(l_update_timer) : server->broadcast(l_update_timer, areaId()); } else if (argv[1] == "hide" || argv[1] == "unset") { l_requested_timer->setInterval(0); l_requested_timer->stop(); sendServerMessage("Hid timer " + QString::number(l_timer_id) + "."); // Hide the timer - l_is_global ? server->broadcast(l_hide_timer) : server->broadcast(l_hide_timer, currentArea()); + l_is_global ? server->broadcast(l_hide_timer) : server->broadcast(l_hide_timer, areaId()); } } } @@ -241,10 +241,10 @@ void AOClient::cmdNoteCard(int argc, QStringList argv) { Q_UNUSED(argc); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); QString l_notecard = argv.join(" "); - l_area->addNotecard(currentCharacter(), l_notecard); - sendServerMessageArea(currentCharacter() + " wrote a note card."); + l_area->addNotecard(character(), l_notecard); + sendServerMessageArea(character() + " wrote a note card."); } void AOClient::cmdNoteCardClear(int argc, QStringList argv) @@ -252,9 +252,9 @@ void AOClient::cmdNoteCardClear(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); - if (!l_area->addNotecard(currentCharacter(), QString())) { - sendServerMessageArea(currentCharacter() + " erased their note card."); + AreaData *l_area = server->getAreaById(areaId()); + if (!l_area->addNotecard(character(), QString())) { + sendServerMessageArea(character() + " erased their note card."); } } @@ -263,7 +263,7 @@ void AOClient::cmdNoteCardReveal(int argc, QStringList argv) Q_UNUSED(argc); Q_UNUSED(argv); - AreaData *l_area = server->getAreaById(currentArea()); + AreaData *l_area = server->getAreaById(areaId()); const QStringList l_notecards = l_area->getNotecards(); if (l_notecards.isEmpty()) { @@ -287,7 +287,7 @@ void AOClient::cmd8Ball(int argc, QStringList argv) } else { QString l_response = ConfigManager::magic8BallAnswers().at((genRand(1, ConfigManager::magic8BallAnswers().size() - 1))); - QString l_sender_name = m_ooc_name; + QString l_sender_name = name(); QString l_sender_message = argv.join(" "); sendServerMessageArea(l_sender_name + " asked the magic 8-ball, \"" + l_sender_message + "\" and the answer is: " + l_response); @@ -301,7 +301,7 @@ void AOClient::cmdSubTheme(int argc, QStringList argv) QString l_subtheme = argv.join(" "); const QVector l_clients = server->getClients(); for (AOClient *l_client : l_clients) { - if (l_client->currentArea() == currentArea()) + if (l_client->areaId() == areaId()) l_client->sendPacket("ST", {l_subtheme, "1"}); } sendServerMessageArea("Subtheme was set to " + l_subtheme); diff --git a/src/network/aopacket.cpp b/src/network/aopacket.cpp index 774f93e7..7bf85b20 100644 --- a/src/network/aopacket.cpp +++ b/src/network/aopacket.cpp @@ -31,6 +31,7 @@ #include "packet/packet_mc.h" #include "packet/packet_ms.h" #include "packet/packet_pe.h" +#include "packet/packet_pl.h" #include "packet/packet_pw.h" #include "packet/packet_rc.h" #include "packet/packet_rd.h" @@ -132,4 +133,7 @@ void AOPacket::registerPackets() PacketFactory::registerClass("RT"); PacketFactory::registerClass("SETCASE"); PacketFactory::registerClass("ZZ"); + PacketFactory::registerClass("PL"); + PacketFactory::registerClass("PLU"); + PacketFactory::registerClass("PU"); } diff --git a/src/network/aopacket.h b/src/network/aopacket.h index 5afe6fcf..c97a4794 100644 --- a/src/network/aopacket.h +++ b/src/network/aopacket.h @@ -113,7 +113,6 @@ class AOPacket virtual PacketInfo getPacketInfo() const = 0; virtual void handlePacket(AreaData *area, AOClient &client) const = 0; - virtual bool validatePacket() const = 0; static void registerPackets(); diff --git a/src/packet/packet_askchaa.cpp b/src/packet/packet_askchaa.cpp index b1d97062..263111de 100644 --- a/src/packet/packet_askchaa.cpp +++ b/src/packet/packet_askchaa.cpp @@ -26,11 +26,3 @@ void PacketAskchaa::handlePacket(AreaData *area, AOClient &client) const // Client only cares about what it gets from LE client.sendPacket("SI", {QString::number(client.getServer()->getCharacterCount()), "0", QString::number(client.getServer()->getAreaCount() + client.getServer()->getMusicList().length())}); } - -bool PacketAskchaa::validatePacket() const -{ - if (m_content.size() > 0) { // Too many arguments. - return false; - } - return true; -} diff --git a/src/packet/packet_askchaa.h b/src/packet/packet_askchaa.h index 561548db..e19917c5 100644 --- a/src/packet/packet_askchaa.h +++ b/src/packet/packet_askchaa.h @@ -9,6 +9,5 @@ class PacketAskchaa : public AOPacket PacketAskchaa(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_casea.cpp b/src/packet/packet_casea.cpp index b6dc6da3..a0835129 100644 --- a/src/packet/packet_casea.cpp +++ b/src/packet/packet_casea.cpp @@ -41,7 +41,7 @@ void PacketCasea::handlePacket(AreaData *area, AOClient &client) const if (l_needed_roles.isEmpty()) return; - QString l_message = "=== Case Announcement ===\r\n" + (client.m_ooc_name == "" ? client.currentCharacter() : client.m_ooc_name) + " needs " + l_needed_roles.join(", ") + " for " + (l_case_title == "" ? "a case" : l_case_title) + "!"; + QString l_message = "=== Case Announcement ===\r\n" + (client.name() == "" ? client.character() : client.name()) + " needs " + l_needed_roles.join(", ") + " for " + (l_case_title == "" ? "a case" : l_case_title) + "!"; QList l_clients_to_alert; // here lies morton, RIP @@ -70,13 +70,3 @@ void PacketCasea::handlePacket(AreaData *area, AOClient &client) const // at least 7 arguments despite only using the first 6. Cera, i kneel. you have truly broken me. } } - -bool PacketCasea::validatePacket() const -{ - for (int i = 1; i < m_content.size(); i++) { - if (!AkashiUtils::checkArgType(m_content.at(i))) { - return false; - } - } - return true; -} diff --git a/src/packet/packet_casea.h b/src/packet/packet_casea.h index f794df16..42171434 100644 --- a/src/packet/packet_casea.h +++ b/src/packet/packet_casea.h @@ -9,6 +9,5 @@ class PacketCasea : public AOPacket PacketCasea(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_cc.cpp b/src/packet/packet_cc.cpp index 481a05fc..bd0ceddf 100644 --- a/src/packet/packet_cc.cpp +++ b/src/packet/packet_cc.cpp @@ -46,8 +46,3 @@ void PacketCC::handlePacket(AreaData *area, AOClient &client) const client.setSpectator(false); } } - -bool PacketCC::validatePacket() const -{ - return AkashiUtils::checkArgType(m_content.at(1)); -} diff --git a/src/packet/packet_cc.h b/src/packet/packet_cc.h index ceeda96e..85ad1461 100644 --- a/src/packet/packet_cc.h +++ b/src/packet/packet_cc.h @@ -9,6 +9,5 @@ class PacketCC : public AOPacket PacketCC(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_ch.cpp b/src/packet/packet_ch.cpp index 466a3179..3880d578 100644 --- a/src/packet/packet_ch.cpp +++ b/src/packet/packet_ch.cpp @@ -26,8 +26,3 @@ void PacketCH::handlePacket(AreaData *area, AOClient &client) const // It is now used for ping measurement client.sendPacket("CHECK"); } - -bool PacketCH::validatePacket() const -{ - return AkashiUtils::checkArgType(m_content.at(0)); -} diff --git a/src/packet/packet_ch.h b/src/packet/packet_ch.h index 4fa5de5b..3bec198b 100644 --- a/src/packet/packet_ch.h +++ b/src/packet/packet_ch.h @@ -9,6 +9,5 @@ class PacketCH : public AOPacket PacketCH(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_ct.cpp b/src/packet/packet_ct.cpp index 0c8be5cc..f08137f1 100644 --- a/src/packet/packet_ct.cpp +++ b/src/packet/packet_ct.cpp @@ -27,11 +27,11 @@ void PacketCT::handlePacket(AreaData *area, AOClient &client) const return; } - client.m_ooc_name = client.dezalgo(m_content[0]).replace(QRegExp("\\[|\\]|\\{|\\}|\\#|\\$|\\%|\\&"), ""); // no fucky wucky shit here - if (client.m_ooc_name.isEmpty() || client.m_ooc_name == ConfigManager::serverName()) // impersonation & empty name protection + client.setName(client.dezalgo(m_content[0]).replace(QRegExp("\\[|\\]|\\{|\\}|\\#|\\$|\\%|\\&"), "")); // no fucky wucky shit here + if (client.name().isEmpty() || client.name() == ConfigManager::serverName()) // impersonation & empty name protection return; - if (client.m_ooc_name.length() > 30) { + if (client.name().length() > 30) { client.sendServerMessage("Your name is too long! Please limit it to under 30 characters."); return; } @@ -44,7 +44,7 @@ void PacketCT::handlePacket(AreaData *area, AOClient &client) const QString l_message = client.dezalgo(m_content[1]); if (l_message.length() == 0 || l_message.length() > ConfigManager::maxCharacters()) return; - AOPacket *final_packet = PacketFactory::createPacket("CT", {client.m_ooc_name, l_message, "0"}); + AOPacket *final_packet = PacketFactory::createPacket("CT", {client.name(), l_message, "0"}); if (l_message.at(0) == '/') { QStringList l_cmd_argv = l_message.split(" ", akashi::SkipEmptyParts); QString l_command = l_cmd_argv[0].trimmed().toLower(); @@ -53,17 +53,11 @@ void PacketCT::handlePacket(AreaData *area, AOClient &client) const int l_cmd_argc = l_cmd_argv.length(); client.handleCommand(l_command, l_cmd_argc, l_cmd_argv); - emit client.logCMD((client.currentCharacter() + " " + client.currentCharacterName()), client.m_ipid, client.m_ooc_name, l_command, l_cmd_argv, client.getServer()->getAreaById(client.currentArea())->name()); + emit client.logCMD((client.character() + " " + client.characterName()), client.m_ipid, client.name(), l_command, l_cmd_argv, client.getServer()->getAreaById(client.areaId())->name()); return; } else { - client.getServer()->broadcast(final_packet, client.currentArea()); + client.getServer()->broadcast(final_packet, client.areaId()); } - emit client.logOOC((client.currentCharacter() + " " + client.currentCharacterName()), client.m_ooc_name, client.m_ipid, area->name(), l_message); -} - -bool PacketCT::validatePacket() const -{ - // Nothing to validate. - return true; + emit client.logOOC((client.character() + " " + client.characterName()), client.name(), client.m_ipid, area->name(), l_message); } diff --git a/src/packet/packet_ct.h b/src/packet/packet_ct.h index 2bfdd5de..8fd76cb5 100644 --- a/src/packet/packet_ct.h +++ b/src/packet/packet_ct.h @@ -9,6 +9,5 @@ class PacketCT : public AOPacket PacketCT(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_de.cpp b/src/packet/packet_de.cpp index 454a15bf..1d6314f5 100644 --- a/src/packet/packet_de.cpp +++ b/src/packet/packet_de.cpp @@ -29,8 +29,3 @@ void PacketDE::handlePacket(AreaData *area, AOClient &client) const } client.sendEvidenceList(area); } - -bool PacketDE::validatePacket() const -{ - return AkashiUtils::checkArgType(m_content.at(0)); -} diff --git a/src/packet/packet_de.h b/src/packet/packet_de.h index abb3a89e..a94346e3 100644 --- a/src/packet/packet_de.h +++ b/src/packet/packet_de.h @@ -9,6 +9,5 @@ class PacketDE : public AOPacket PacketDE(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_ee.cpp b/src/packet/packet_ee.cpp index efbd608d..7cce4530 100644 --- a/src/packet/packet_ee.cpp +++ b/src/packet/packet_ee.cpp @@ -30,8 +30,3 @@ void PacketEE::handlePacket(AreaData *area, AOClient &client) const } client.sendEvidenceList(area); } - -bool PacketEE::validatePacket() const -{ - return AkashiUtils::checkArgType(m_content.at(0)); -} diff --git a/src/packet/packet_ee.h b/src/packet/packet_ee.h index a7621b57..d40d1e11 100644 --- a/src/packet/packet_ee.h +++ b/src/packet/packet_ee.h @@ -9,6 +9,5 @@ class PacketEE : public AOPacket PacketEE(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_factory.cpp b/src/packet/packet_factory.cpp index f971fecd..0d067ba1 100644 --- a/src/packet/packet_factory.cpp +++ b/src/packet/packet_factory.cpp @@ -21,7 +21,7 @@ AOPacket *PacketFactory::createPacket(QString raw_packet) } if (raw_packet.at(0) == '#' || raw_packet.contains("%")) { - qDebug() << "FantaCrypt or otherwise invalid packet received"; + qDebug() << "FantaCrypt or otherwise invalid packet received:" << raw_packet; return PacketFactory::createPacket("Unknown", {"Unknown"}); } diff --git a/src/packet/packet_generic.cpp b/src/packet/packet_generic.cpp index 027d42e4..b61fa9b9 100644 --- a/src/packet/packet_generic.cpp +++ b/src/packet/packet_generic.cpp @@ -24,8 +24,3 @@ void PacketGeneric::handlePacket(AreaData *area, AOClient &client) const qDebug() << "ERROR: Cannot handle generic packet: " << header; qDebug() << "Packet is either unimplemented, or is meant to be sent to client"; } - -bool PacketGeneric::validatePacket() const -{ - return true; -} diff --git a/src/packet/packet_generic.h b/src/packet/packet_generic.h index 69ec9678..78881a90 100644 --- a/src/packet/packet_generic.h +++ b/src/packet/packet_generic.h @@ -9,7 +9,6 @@ class PacketGeneric : public AOPacket PacketGeneric(QString header, QStringList contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; private: QString header; diff --git a/src/packet/packet_hi.cpp b/src/packet/packet_hi.cpp index 87558610..5c7a2c4a 100644 --- a/src/packet/packet_hi.cpp +++ b/src/packet/packet_hi.cpp @@ -49,9 +49,3 @@ void PacketHI::handlePacket(AreaData *area, AOClient &client) const client.sendPacket("ID", {QString::number(client.clientId()), "akashi", QCoreApplication::applicationVersion()}); } - -bool PacketHI::validatePacket() const -{ - // We can always convert a string to a string. No point in checking. - return true; -} diff --git a/src/packet/packet_hi.h b/src/packet/packet_hi.h index f40a4975..4b74722d 100644 --- a/src/packet/packet_hi.h +++ b/src/packet/packet_hi.h @@ -9,7 +9,6 @@ class PacketHI : public AOPacket PacketHI(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; private: QString header; diff --git a/src/packet/packet_hp.cpp b/src/packet/packet_hp.cpp index 93173c39..0e50e98c 100644 --- a/src/packet/packet_hp.cpp +++ b/src/packet/packet_hp.cpp @@ -39,12 +39,3 @@ void PacketHP::handlePacket(AreaData *area, AOClient &client) const client.updateJudgeLog(area, &client, "updated the penalties"); } - -bool PacketHP::validatePacket() const -{ - if (!AkashiUtils::checkArgType(m_content.at(0))) - return false; - if (!AkashiUtils::checkArgType(m_content.at(1))) - return false; - return true; -} diff --git a/src/packet/packet_hp.h b/src/packet/packet_hp.h index 2ed6263b..68c7196a 100644 --- a/src/packet/packet_hp.h +++ b/src/packet/packet_hp.h @@ -9,6 +9,5 @@ class PacketHP : public AOPacket PacketHP(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_id.cpp b/src/packet/packet_id.cpp index 020e0cdb..30b1bbdb 100644 --- a/src/packet/packet_id.cpp +++ b/src/packet/packet_id.cpp @@ -69,8 +69,3 @@ void PacketID::handlePacket(AreaData *area, AOClient &client) const client.sendPacket("ASS", {l_asset_url}); } } - -bool PacketID::validatePacket() const -{ - return true; -} diff --git a/src/packet/packet_id.h b/src/packet/packet_id.h index 0e1ef727..1703150d 100644 --- a/src/packet/packet_id.h +++ b/src/packet/packet_id.h @@ -9,6 +9,5 @@ class PacketID : public AOPacket PacketID(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_mc.cpp b/src/packet/packet_mc.cpp index c9a94637..5c7e7d9c 100644 --- a/src/packet/packet_mc.cpp +++ b/src/packet/packet_mc.cpp @@ -29,7 +29,7 @@ void PacketMC::handlePacket(AreaData *area, AOClient &client) const // argument is a valid song QString l_argument = m_content[0]; - if (client.getServer()->getMusicList().contains(l_argument) || client.m_music_manager->isCustom(client.currentArea(), l_argument) || l_argument == "~stop.mp3") { // ~stop.mp3 is a dummy track used by 2.9+ + if (client.getServer()->getMusicList().contains(l_argument) || client.m_music_manager->isCustom(client.areaId(), l_argument) || l_argument == "~stop.mp3") { // ~stop.mp3 is a dummy track used by 2.9+ // We have a song here if (client.m_is_spectator) { @@ -67,19 +67,19 @@ void PacketMC::handlePacket(AreaData *area, AOClient &client) const if (l_final_song != "~stop.mp3") { // We might have an aliased song. We check for its real songname and send it to the clients. - QPair l_song = client.m_music_manager->songInformation(l_final_song, client.currentArea()); + QPair l_song = client.m_music_manager->songInformation(l_final_song, client.areaId()); l_final_song = l_song.first; } - AOPacket *l_music_change = PacketFactory::createPacket("MC", {l_final_song, m_content[1], client.currentCharacterName(), "1", "0", l_effects}); - client.getServer()->broadcast(l_music_change, client.currentArea()); + 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()); // Since we can't ensure a user has their showname set, we check if its empty to prevent //"played by ." in /currentmusic. - if (client.currentCharacterName().isEmpty()) { - area->changeMusic(client.currentCharacter(), l_final_song); + if (client.characterName().isEmpty()) { + area->changeMusic(client.character(), l_final_song); return; } - area->changeMusic(client.currentCharacterName(), l_final_song); + area->changeMusic(client.characterName(), l_final_song); return; } @@ -91,8 +91,3 @@ void PacketMC::handlePacket(AreaData *area, AOClient &client) const } } } - -bool PacketMC::validatePacket() const -{ - return true; -} diff --git a/src/packet/packet_mc.h b/src/packet/packet_mc.h index 0f378af9..ee3ed0fc 100644 --- a/src/packet/packet_mc.h +++ b/src/packet/packet_mc.h @@ -9,6 +9,5 @@ class PacketMC : public AOPacket PacketMC(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_ms.cpp b/src/packet/packet_ms.cpp index 5602b67e..f0a060b7 100644 --- a/src/packet/packet_ms.cpp +++ b/src/packet/packet_ms.cpp @@ -37,8 +37,8 @@ void PacketMS::handlePacket(AreaData *area, AOClient &client) const if (client.m_pos != "") validated_packet->setContentField(5, client.m_pos); - client.getServer()->broadcast(validated_packet, client.currentArea()); - emit client.logIC((client.currentCharacter() + " " + client.currentCharacterName()), client.m_ooc_name, client.m_ipid, client.getServer()->getAreaById(client.currentArea())->name(), client.m_last_message); + client.getServer()->broadcast(validated_packet, client.areaId()); + emit client.logIC((client.character() + " " + client.characterName()), client.name(), client.m_ipid, client.getServer()->getAreaById(client.areaId())->name(), client.m_last_message); area->updateLastICMessage(validated_packet->getContent()); area->startMessageFloodguard(ConfigManager::messageFloodguard()); @@ -59,10 +59,10 @@ AOPacket *PacketMS::validateIcPacket(AOClient &client) const AOPacket *l_invalid = PacketFactory::createPacket("INVALID", {}); QStringList l_args; - if (client.isSpectator() || client.currentCharacter().isEmpty() || !client.m_joined) + if (client.isSpectator() || client.character().isEmpty() || !client.m_joined) // Spectators cannot use IC return l_invalid; - AreaData *area = client.getServer()->getAreaById(client.currentArea()); + AreaData *area = client.getServer()->getAreaById(client.areaId()); if (area->lockStatus() == AreaData::LockStatus::SPECTATABLE && !area->invited().contains(client.clientId()) && !client.checkPermission(ACLRole::BYPASS_LOCKS)) // Non-invited players cannot speak in spectatable areas return l_invalid; @@ -100,7 +100,7 @@ AOPacket *PacketMS::validateIcPacket(AOClient &client) const l_args.append(l_incoming_args[1].toString()); // char name - if (client.currentCharacter().toLower() != l_incoming_args[2].toString().toLower()) { + if (client.character().toLower() != l_incoming_args[2].toString().toLower()) { // Selected char is different from supplied folder name // This means the user is INI-swapped if (!area->iniswapAllowed()) { @@ -166,7 +166,7 @@ AOPacket *PacketMS::validateIcPacket(AOClient &client) const if (client.m_pos != l_incoming_args[5].toString()) { client.m_pos = l_incoming_args[5].toString(); client.m_pos.replace("../", "").replace("..\\", ""); - client.updateEvidenceList(client.getServer()->getAreaById(client.currentArea())); + client.updateEvidenceList(client.getServer()->getAreaById(client.areaId())); } // sfx name @@ -246,7 +246,7 @@ AOPacket *PacketMS::validateIcPacket(AOClient &client) const if (l_incoming_args.length() >= 19) { // showname QString l_incoming_showname = client.dezalgo(l_incoming_args[15].toString().trimmed()); - if (!(l_incoming_showname == client.currentCharacter() || l_incoming_showname.isEmpty()) && !area->shownameAllowed()) { + if (!(l_incoming_showname == client.character() || l_incoming_showname.isEmpty()) && !area->shownameAllowed()) { client.sendServerMessage("Shownames are not allowed in this area!"); return l_invalid; } @@ -259,7 +259,7 @@ AOPacket *PacketMS::validateIcPacket(AOClient &client) const if (l_incoming_showname.isEmpty() && !l_incoming_args[15].toString().isEmpty()) l_incoming_showname = " "; l_args.append(l_incoming_showname); - client.setCurrentCharacterName(l_incoming_showname); + client.setCharacterName(l_incoming_showname); // other char id // things get a bit hairy here @@ -376,9 +376,9 @@ AOPacket *PacketMS::validateIcPacket(AOClient &client) const } // Testimony playback - QString client_name = client.m_ooc_name; + QString client_name = client.name(); if (client_name == "") { - client_name = client.currentCharacter(); // fallback in case of empty ooc name + client_name = client.character(); // fallback in case of empty ooc name } if (area->testimonyRecording() == AreaData::TestimonyRecording::RECORDING || area->testimonyRecording() == AreaData::TestimonyRecording::ADD) { if (!l_args[5].startsWith("wit")) @@ -387,7 +387,7 @@ AOPacket *PacketMS::validateIcPacket(AOClient &client) const if (area->statement() == -1) { l_args[4] = "~~-- " + l_args[4] + " --"; l_args[14] = "3"; - client.getServer()->broadcast(PacketFactory::createPacket("RT", {"testimony1"}), client.currentArea()); + client.getServer()->broadcast(PacketFactory::createPacket("RT", {"testimony1"}), client.areaId()); } client.addStatement(l_args); } @@ -463,8 +463,3 @@ QRegularExpressionMatch PacketMS::isTestimonyJumpCommand(QString message) const QRegularExpression jump("(?>)(?[0,1,2,3,4,5,6,7,8,9]+)"); return jump.match(message); } - -bool PacketMS::validatePacket() const -{ - return true; -} diff --git a/src/packet/packet_ms.h b/src/packet/packet_ms.h index 599ab227..4caf40e1 100644 --- a/src/packet/packet_ms.h +++ b/src/packet/packet_ms.h @@ -9,7 +9,6 @@ class PacketMS : public AOPacket PacketMS(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; private: AOPacket *validateIcPacket(AOClient &client) const; diff --git a/src/packet/packet_pe.cpp b/src/packet/packet_pe.cpp index 92e5dbbb..810bf4a7 100644 --- a/src/packet/packet_pe.cpp +++ b/src/packet/packet_pe.cpp @@ -25,8 +25,3 @@ void PacketPE::handlePacket(AreaData *area, AOClient &client) const area->appendEvidence(l_evi); client.sendEvidenceList(area); } - -bool PacketPE::validatePacket() const -{ - return true; -} diff --git a/src/packet/packet_pe.h b/src/packet/packet_pe.h index 4ac5330f..40ed413a 100644 --- a/src/packet/packet_pe.h +++ b/src/packet/packet_pe.h @@ -9,6 +9,5 @@ class PacketPE : public AOPacket PacketPE(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_pl.cpp b/src/packet/packet_pl.cpp new file mode 100644 index 00000000..9d979abd --- /dev/null +++ b/src/packet/packet_pl.cpp @@ -0,0 +1,88 @@ +#include "packet_pl.h" + +#include + +PacketPL::PacketPL(QStringList &contents) : + AOPacket(contents) +{} + +PacketPL::PacketPL(const QList &f_player_list) : + AOPacket(QStringList{""}) +{ + + QJsonArray player_list_json; + for (const PlayerData &player : f_player_list) { + QJsonObject player_json; + + player_json["id"] = player.id; + player_json["name"] = player.name; + player_json["character"] = player.character; + player_json["character_name"] = player.character_name; + player_json["area_id"] = player.area_id; + + player_list_json.append(player_json); + } + + setContentField(0, QJsonDocument(player_list_json).toJson(QJsonDocument::Compact)); +} + +PacketInfo PacketPL::getPacketInfo() const { return PacketInfo{.acl_permission = ACLRole::NONE, .min_args = 1, .header = "PL"}; } + +void PacketPL::handlePacket(AreaData *area, AOClient &client) const +{ + Q_UNUSED(area); + Q_UNUSED(client); +} + +PacketPLU::PacketPLU(QStringList &contents) : + AOPacket(contents) +{} + +PacketPLU::PacketPLU(int f_id, UpdateType f_type) : + AOPacket(QStringList{""}) +{ + QJsonObject data_json; + data_json["id"] = f_id; + data_json["type"] = f_type; + + setContentField(0, QJsonDocument(data_json).toJson(QJsonDocument::Compact)); +} + +PacketInfo PacketPLU::getPacketInfo() const { return PacketInfo{.acl_permission = ACLRole::NONE, .min_args = 1, .header = "PLU"}; } + +void PacketPLU::handlePacket(AreaData *area, AOClient &client) const +{ + Q_UNUSED(area); + Q_UNUSED(client); +} + +PacketPU::PacketPU(QStringList &contents) : + AOPacket(contents) +{} + +PacketPU::PacketPU(int f_id, DataType f_type, const QString &f_data) : + AOPacket(QStringList{""}) +{ + QJsonObject data_json; + data_json["id"] = f_id; + data_json["type"] = f_type; + data_json["data"] = f_data; + + setContentField(0, QJsonDocument(data_json).toJson(QJsonDocument::Compact)); +} + +PacketPU::PacketPU(int f_id, DataType f_type, int f_data) : + PacketPU(f_id, f_type, QString::number(f_data)) +{ +} + +PacketInfo PacketPU::getPacketInfo() const +{ + return PacketInfo{.acl_permission = ACLRole::NONE, .min_args = 1, .header = "PU"}; +} + +void PacketPU::handlePacket(AreaData *area, AOClient &client) const +{ + Q_UNUSED(area); + Q_UNUSED(client); +} diff --git a/src/packet/packet_pl.h b/src/packet/packet_pl.h new file mode 100644 index 00000000..be6337d4 --- /dev/null +++ b/src/packet/packet_pl.h @@ -0,0 +1,59 @@ +#pragma once + +#include "network/aopacket.h" + +#include +#include +#include +#include + +class PacketPL : public AOPacket +{ + public: + struct PlayerData + { + int id; + QString name; + QString character; + QString character_name; + int area_id = -1; + }; + + PacketPL(QStringList &contents); + PacketPL(const QList &f_player_list); + PacketInfo getPacketInfo() const override; + void handlePacket(AreaData *area, AOClient &client) const override; +}; + +class PacketPLU : public AOPacket +{ + public: + enum UpdateType + { + AddPlayerUpdate, + RemovePlayerUpdate, + }; + + PacketPLU(QStringList &contents); + PacketPLU(int f_id, UpdateType f_type); + PacketInfo getPacketInfo() const override; + void handlePacket(AreaData *area, AOClient &client) const override; +}; + +class PacketPU : public AOPacket +{ + public: + enum DataType + { + NameData, + CharacterData, + CharacterNameData, + AreaIdData, + }; + + PacketPU(QStringList &contents); + PacketPU(int f_id, DataType f_type, const QString &f_data); + PacketPU(int f_id, DataType f_type, int f_data); + PacketInfo getPacketInfo() const override; + void handlePacket(AreaData *area, AOClient &client) const override; +}; diff --git a/src/packet/packet_pw.cpp b/src/packet/packet_pw.cpp index c33a046e..38395a19 100644 --- a/src/packet/packet_pw.cpp +++ b/src/packet/packet_pw.cpp @@ -23,8 +23,3 @@ void PacketPW::handlePacket(AreaData *area, AOClient &client) const client.m_password = m_content[0]; } - -bool PacketPW::validatePacket() const -{ - return true; -} diff --git a/src/packet/packet_pw.h b/src/packet/packet_pw.h index 634828e9..22db02af 100644 --- a/src/packet/packet_pw.h +++ b/src/packet/packet_pw.h @@ -9,6 +9,5 @@ class PacketPW : public AOPacket PacketPW(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_rc.cpp b/src/packet/packet_rc.cpp index b01aedd3..966667d4 100644 --- a/src/packet/packet_rc.cpp +++ b/src/packet/packet_rc.cpp @@ -23,8 +23,3 @@ void PacketRC::handlePacket(AreaData *area, AOClient &client) const client.sendPacket("SC", client.getServer()->getCharacters()); } - -bool PacketRC::validatePacket() const -{ - return true; -} diff --git a/src/packet/packet_rc.h b/src/packet/packet_rc.h index a7b50da6..26404781 100644 --- a/src/packet/packet_rc.h +++ b/src/packet/packet_rc.h @@ -9,6 +9,5 @@ class PacketRC : public AOPacket PacketRC(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_rd.cpp b/src/packet/packet_rd.cpp index af7405b3..3366e189 100644 --- a/src/packet/packet_rd.cpp +++ b/src/packet/packet_rd.cpp @@ -65,8 +65,3 @@ void PacketRD::handlePacket(AreaData *area, AOClient &client) const area->addClient(-1, client.clientId()); client.arup(client.ARUPType::PLAYER_COUNT, true); // Tell everyone there is a new player } - -bool PacketRD::validatePacket() const -{ - return true; -} diff --git a/src/packet/packet_rd.h b/src/packet/packet_rd.h index c8fee85d..2613d01d 100644 --- a/src/packet/packet_rd.h +++ b/src/packet/packet_rd.h @@ -9,6 +9,5 @@ class PacketRD : public AOPacket PacketRD(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_rm.cpp b/src/packet/packet_rm.cpp index f2b1892d..5140a4a3 100644 --- a/src/packet/packet_rm.cpp +++ b/src/packet/packet_rm.cpp @@ -23,8 +23,3 @@ void PacketRM::handlePacket(AreaData *area, AOClient &client) const client.sendPacket("SM", client.getServer()->getAreaNames() + client.getServer()->getMusicList()); } - -bool PacketRM::validatePacket() const -{ - return true; -} diff --git a/src/packet/packet_rm.h b/src/packet/packet_rm.h index d68eff1c..b5fd5b03 100644 --- a/src/packet/packet_rm.h +++ b/src/packet/packet_rm.h @@ -9,6 +9,5 @@ class PacketRM : public AOPacket PacketRM(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_rt.cpp b/src/packet/packet_rt.cpp index 2039155e..98eb5dab 100644 --- a/src/packet/packet_rt.cpp +++ b/src/packet/packet_rt.cpp @@ -33,11 +33,6 @@ void PacketRT::handlePacket(AreaData *area, AOClient &client) const if (QDateTime::currentDateTime().toSecsSinceEpoch() - client.m_last_wtce_time <= 5) return; client.m_last_wtce_time = QDateTime::currentDateTime().toSecsSinceEpoch(); - client.getServer()->broadcast(PacketFactory::createPacket("RT", m_content), client.currentArea()); + client.getServer()->broadcast(PacketFactory::createPacket("RT", m_content), client.areaId()); client.updateJudgeLog(area, &client, "WT/CE"); } - -bool PacketRT::validatePacket() const -{ - return true; -} diff --git a/src/packet/packet_rt.h b/src/packet/packet_rt.h index 8a6ad5b0..9d2c854f 100644 --- a/src/packet/packet_rt.h +++ b/src/packet/packet_rt.h @@ -9,6 +9,5 @@ class PacketRT : public AOPacket PacketRT(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_setcase.cpp b/src/packet/packet_setcase.cpp index 7eafdab3..a929a02c 100644 --- a/src/packet/packet_setcase.cpp +++ b/src/packet/packet_setcase.cpp @@ -31,8 +31,3 @@ void PacketSetcase::handlePacket(AreaData *area, AOClient &client) const } client.m_casing_preferences = l_prefs_list; } - -bool PacketSetcase::validatePacket() const -{ - return true; -} diff --git a/src/packet/packet_setcase.h b/src/packet/packet_setcase.h index 6f60cd00..c9628fbe 100644 --- a/src/packet/packet_setcase.h +++ b/src/packet/packet_setcase.h @@ -9,6 +9,5 @@ class PacketSetcase : public AOPacket PacketSetcase(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packet/packet_zz.cpp b/src/packet/packet_zz.cpp index 4e5ab359..92bc4ef5 100644 --- a/src/packet/packet_zz.cpp +++ b/src/packet/packet_zz.cpp @@ -21,9 +21,9 @@ PacketInfo PacketZZ::getPacketInfo() const void PacketZZ::handlePacket(AreaData *area, AOClient &client) const { - QString l_name = client.m_ooc_name; - if (client.m_ooc_name.isEmpty()) - l_name = client.currentCharacter(); + QString l_name = client.name(); + if (client.name().isEmpty()) + l_name = client.character(); QString l_areaName = area->name(); @@ -39,19 +39,14 @@ void PacketZZ::handlePacket(AreaData *area, AOClient &client) const if (l_client->m_authenticated) l_client->sendPacket(PacketFactory::createPacket("ZZ", {l_modcallNotice})); } - emit client.logModcall((client.currentCharacter() + " " + client.currentCharacterName()), client.m_ipid, client.m_ooc_name, client.getServer()->getAreaById(client.currentArea())->name()); + emit client.logModcall((client.character() + " " + client.characterName()), client.m_ipid, client.name(), client.getServer()->getAreaById(client.areaId())->name()); if (ConfigManager::discordModcallWebhookEnabled()) { - QString l_name = client.m_ooc_name; - if (client.m_ooc_name.isEmpty()) - l_name = client.currentCharacter(); + QString l_name = client.name(); + if (client.name().isEmpty()) + l_name = client.character(); QString l_areaName = area->name(); emit client.getServer()->modcallWebhookRequest(l_name, l_areaName, m_content.value(0), client.getServer()->getAreaBuffer(l_areaName)); } } - -bool PacketZZ::validatePacket() const -{ - return true; -} diff --git a/src/packet/packet_zz.h b/src/packet/packet_zz.h index b518bce1..086a6013 100644 --- a/src/packet/packet_zz.h +++ b/src/packet/packet_zz.h @@ -9,6 +9,5 @@ class PacketZZ : public AOPacket PacketZZ(QStringList &contents); virtual PacketInfo getPacketInfo() const; virtual void handlePacket(AreaData *area, AOClient &client) const; - virtual bool validatePacket() const; }; #endif diff --git a/src/packets.cpp b/src/packets.cpp index f9182258..e7a433e7 100644 --- a/src/packets.cpp +++ b/src/packets.cpp @@ -31,7 +31,7 @@ void AOClient::sendEvidenceList(AreaData *area) const { const QVector l_clients = server->getClients(); for (AOClient *l_client : l_clients) { - if (l_client->currentArea() == currentArea()) + if (l_client->areaId() == areaId()) l_client->updateEvidenceList(area); } } @@ -86,7 +86,7 @@ void AOClient::updateJudgeLog(AreaData *area, AOClient *client, QString action) { QString l_timestamp = QTime::currentTime().toString("hh:mm:ss"); QString l_uid = QString::number(client->clientId()); - QString l_char_name = client->currentCharacter(); + QString l_char_name = client->character(); QString l_ipid = client->getIpid(); QString l_message = action; QString l_logmessage = QString("[%1]: [%2] %3 (%4) %5").arg(l_timestamp, l_uid, l_char_name, l_ipid, l_message); @@ -116,8 +116,8 @@ void AOClient::loginAttempt(QString message) sendPacket("AUTH", {"0"}); // Client: "Login unsuccessful." sendServerMessage("Incorrect password."); } - emit logLogin((currentCharacter() + " " + currentCharacterName()), m_ooc_name, "Moderator", - m_ipid, server->getAreaById(currentArea())->name(), m_authenticated); + emit logLogin((character() + " " + characterName()), name(), "Moderator", + m_ipid, server->getAreaById(areaId())->name(), m_authenticated); break; case DataTypes::AuthType::ADVANCED: QStringList l_login = message.split(" "); @@ -142,8 +142,8 @@ void AOClient::loginAttempt(QString message) sendPacket("AUTH", {"0"}); // Client: "Login unsuccessful." sendServerMessage("Incorrect password."); } - emit logLogin((currentCharacter() + " " + currentCharacterName()), m_ooc_name, username, m_ipid, - server->getAreaById(currentArea())->name(), m_authenticated); + emit logLogin((character() + " " + characterName()), name(), username, m_ipid, + server->getAreaById(areaId())->name(), m_authenticated); break; } sendServerMessage("Exiting login prompt."); diff --git a/src/playerstateobserver.cpp b/src/playerstateobserver.cpp index 91ac36b9..64a82de0 100644 --- a/src/playerstateobserver.cpp +++ b/src/playerstateobserver.cpp @@ -1,46 +1,81 @@ #include "playerstateobserver.h" -#include "aoclient.h" -#include "server.h" -PlayerStateObserver::PlayerStateObserver(QObject *parent) - : QObject{parent} +PlayerStateObserver::PlayerStateObserver(QObject *parent) : + QObject{parent} {} +PlayerStateObserver::~PlayerStateObserver() {} + void PlayerStateObserver::registerClient(AOClient *client) { - observed_clients.insert(client->clientId(), client); - connect(client, &AOClient::characterNameChanged, this, &PlayerStateObserver::displayNameChanged); - connect(client, &AOClient::characterChanged, this, &PlayerStateObserver::characterChanged); + Q_ASSERT(!m_client_list.contains(client)); + + PacketPLU packet(client->clientId(), PacketPLU::AddPlayerUpdate); + sendToClientList(packet); + + m_client_list.append(client); + + connect(client, &AOClient::nameChanged, this, &PlayerStateObserver::notifyNameChanged); + connect(client, &AOClient::characterChanged, this, &PlayerStateObserver::notifyCharacterChanged); + connect(client, &AOClient::characterNameChanged, this, &PlayerStateObserver::notifyCharacterNameChanged); + connect(client, &AOClient::areaIdChanged, this, &PlayerStateObserver::notifyAreaIdChanged); + + { // provide the player list to the new client + QList data_list; + for (AOClient *i_client : qAsConst(m_client_list)) { + PacketPL::PlayerData data; + data.id = i_client->clientId(); + data.name = i_client->name(); + data.character = i_client->character(); + data.character_name = i_client->characterName(); + data.area_id = i_client->areaId(); + data_list.append(data); + } + + PacketPL packet(data_list); + client->sendPacket(&packet); + } } -void PlayerStateObserver::deregisterClient(int id) +void PlayerStateObserver::unregisterClient(AOClient *client) { - AOClient *l_client = observed_clients.take(id); - disconnect(l_client, nullptr, this, nullptr); + Q_ASSERT(m_client_list.contains(client)); + + disconnect(client, nullptr, this, nullptr); + + m_client_list.removeAll(client); + + PacketPLU packet(client->clientId(), PacketPLU::RemovePlayerUpdate); + sendToClientList(packet); } -void PlayerStateObserver::playerChangedArea(AreaMoveType f_type, int area_id) +void PlayerStateObserver::sendToClientList(const AOPacket &packet) { - AOClient *l_client = qobject_cast(sender()); - if (l_client) { - qDebug() << "Player with uid" << l_client->clientId() << "has changed their area"; + for (AOClient *client : qAsConst(m_client_list)) { + client->sendPacket(&const_cast(packet)); } } -void PlayerStateObserver::displayNameChanged() +void PlayerStateObserver::notifyNameChanged(const QString &name) { - AOClient *l_client = qobject_cast(sender()); - if (l_client) { - qDebug() << "Player with uid" << l_client->clientId() << "has changed their displayname to" - << l_client->currentCharacterName(); - } + qDebug() << "PlayerStateObserver::notifyNameChanged" << qobject_cast(sender())->clientId() << name; + sendToClientList(PacketPU(qobject_cast(sender())->clientId(), PacketPU::NameData, name)); } -void PlayerStateObserver::characterChanged() +void PlayerStateObserver::notifyCharacterChanged(const QString &character) { - AOClient *l_client = qobject_cast(sender()); - if (l_client) { - qDebug() << "Player with uid" << l_client->clientId() << "has changed their character to" - << l_client->currentCharacter(); - } + qDebug() << "PlayerStateObserver::notifyCharacterChanged" << qobject_cast(sender())->clientId() << character; + sendToClientList(PacketPU(qobject_cast(sender())->clientId(), PacketPU::CharacterData, character)); +} + +void PlayerStateObserver::notifyCharacterNameChanged(const QString &characterName) +{ + qDebug() << "PlayerStateObserver::notifyCharacterNameChanged" << qobject_cast(sender())->clientId() << characterName; + sendToClientList(PacketPU(qobject_cast(sender())->clientId(), PacketPU::CharacterNameData, characterName)); +} + +void PlayerStateObserver::notifyAreaIdChanged(int areaId) +{ + qDebug() << "PlayerStateObserver::notifyAreaIdChanged" << qobject_cast(sender())->clientId() << areaId; + sendToClientList(PacketPU(qobject_cast(sender())->clientId(), PacketPU::AreaIdData, areaId)); } diff --git a/src/playerstateobserver.h b/src/playerstateobserver.h index e301d1c5..7cb8f969 100644 --- a/src/playerstateobserver.h +++ b/src/playerstateobserver.h @@ -1,25 +1,29 @@ #pragma once -class AOClient; +#include "aoclient.h" +#include "packet/packet_pl.h" -#include +#include #include +#include class PlayerStateObserver : public QObject { -public: - enum AreaMoveType { JOIN, LEAVE }; + public: + explicit PlayerStateObserver(QObject *parent = nullptr); + virtual ~PlayerStateObserver(); - PlayerStateObserver(QObject* parent); + void registerClient(AOClient *client); + void unregisterClient(AOClient *client); - void registerClient(AOClient* client); - void deregisterClient(int id); + private: + QList m_client_list; -private Q_SLOTS: - void playerChangedArea(AreaMoveType f_type, int area_id); - void displayNameChanged(); - void characterChanged(); + void sendToClientList(const AOPacket &packet); -private: - QMap observed_clients; + private Q_SLOTS: + void notifyNameChanged(const QString &name); + void notifyCharacterChanged(const QString &character); + void notifyCharacterNameChanged(const QString &characterName); + void notifyAreaIdChanged(int areaId); }; diff --git a/src/server.cpp b/src/server.cpp index 3397dddc..9eeead7f 100644 --- a/src/server.cpp +++ b/src/server.cpp @@ -180,6 +180,7 @@ void Server::clientConnected() NetworkSocket *l_socket = new NetworkSocket(socket, socket); AOClient *client = new AOClient(this, l_socket, l_socket, user_id, music_manager); m_clients_ids.insert(user_id, client); + m_player_state_observer.registerClient(client); int multiclient_count = 1; bool is_at_multiclient_limit = false; @@ -267,6 +268,7 @@ void Server::ws_clientConnected() int user_id = m_available_ids.pop(); AOClient *client = new AOClient(this, l_socket, l_socket, user_id, music_manager); m_clients_ids.insert(user_id, client); + m_player_state_observer.registerClient(client); int multiclient_count = 1; bool is_at_multiclient_limit = false; @@ -344,7 +346,7 @@ void Server::updateCharsTaken(AreaData *area) AOPacket *response_cc = PacketFactory::createPacket("CharsCheck", chars_taken); for (AOClient *l_client : qAsConst(m_clients)) { - if (l_client->currentArea() == area->index()) { + if (l_client->areaId() == area->index()) { if (!l_client->m_is_charcursed) l_client->sendPacket(response_cc); else { @@ -619,8 +621,9 @@ void Server::handleDiscordIntegration() void Server::markIDFree(const int &f_user_id) { - m_available_ids.push(f_user_id); + m_player_state_observer.unregisterClient(m_clients_ids[f_user_id]); m_clients_ids.insert(f_user_id, nullptr); + m_available_ids.push(f_user_id); } void Server::hookupAOClient(AOClient *client) diff --git a/src/server.h b/src/server.h index 64955be9..d9b4a301 100644 --- a/src/server.h +++ b/src/server.h @@ -32,6 +32,7 @@ #include #include "network/aopacket.h" +#include "playerstateobserver.h" class ACLRolesHandler; class Advertiser; @@ -481,6 +482,7 @@ class Server : public QObject * @brief Collection of all clients with their userID as key. */ QHash m_clients_ids; + PlayerStateObserver m_player_state_observer; /** * @brief Stack of all available IDs for clients. When this is empty the server diff --git a/src/testimony_recorder.cpp b/src/testimony_recorder.cpp index da66ceaf..1940ed86 100644 --- a/src/testimony_recorder.cpp +++ b/src/testimony_recorder.cpp @@ -26,7 +26,7 @@ void AOClient::addStatement(QStringList packet) if (checkTestimonySymbols(packet[4])) { return; } - AreaData *area = server->getAreaById(currentArea()); + AreaData *area = server->getAreaById(areaId()); int c_statement = area->statement(); if (c_statement >= -1) { if (area->testimonyRecording() == AreaData::TestimonyRecording::RECORDING) { @@ -59,7 +59,7 @@ QStringList AOClient::updateStatement(QStringList packet) if (checkTestimonySymbols(packet[4])) { return packet; } - AreaData *area = server->getAreaById(currentArea()); + AreaData *area = server->getAreaById(areaId()); int c_statement = area->statement(); area->setTestimonyRecording(AreaData::TestimonyRecording::PLAYBACK); if (c_statement <= 0 || area->testimony()[c_statement].empty()) @@ -75,7 +75,7 @@ QStringList AOClient::updateStatement(QStringList packet) void AOClient::clearTestimony() { - AreaData *area = server->getAreaById(currentArea()); + AreaData *area = server->getAreaById(areaId()); area->clearTestimony(); }