From 07a9f7b56554dcc7bf5ecd2ee0c0b9fd87d49f2c Mon Sep 17 00:00:00 2001 From: gor_down Date: Mon, 7 Jul 2025 06:36:36 -0300 Subject: [PATCH] refactor + statemento jump fixgger --- src/packet/packet_ms.cpp | 89 +++++++++++++++------------------------- 1 file changed, 34 insertions(+), 55 deletions(-) diff --git a/src/packet/packet_ms.cpp b/src/packet/packet_ms.cpp index 4d1bed8..c65999a 100755 --- a/src/packet/packet_ms.cpp +++ b/src/packet/packet_ms.cpp @@ -20,6 +20,29 @@ PacketInfo PacketMS::getPacketInfo() const return info; } +QStringList handleStatementJump(AOClient& client, AreaData* area, const QString& client_name, int statementIndex, const QString& actionMessage, const QString& edgeCaseMessage = "", AreaData::TestimonyProgress edgeCaseProgress = AreaData::TestimonyProgress::OK, bool broadcast = true) { + auto l_statement = area->jumpToStatement(statementIndex); + auto& l_args = l_statement.first; + auto& l_progress = l_statement.second; + + client.m_pos = l_args[5]; + + if (broadcast) { + client.sendServerMessageArea(client_name + " " + actionMessage); + } else { + client.sendServerMessage(client_name + " " + actionMessage); + } + + if (!edgeCaseMessage.isEmpty() && l_progress == edgeCaseProgress) { + if (broadcast) + client.sendServerMessageArea(edgeCaseMessage); + else + client.sendServerMessage(edgeCaseMessage); + } + + return l_args; +} + void PacketMS::handlePacket(AreaData *area, AOClient &client) const { if (client.m_is_muted) { @@ -464,65 +487,21 @@ AOPacket *PacketMS::validateIcPacket(AOClient &client) const l_args = client.updateStatement(l_args); } else if (area->testimonyRecording() == AreaData::TestimonyRecording::PLAYBACK) { - AreaData::TestimonyProgress l_progress; if (l_args[4] == ">") { - auto l_statement = area->jumpToStatement(area->statement() + 1); - l_args = l_statement.first; - l_progress = l_statement.second; - client.m_pos = l_args[5]; - - client.sendServerMessageArea(client_name + " moved to the next statement."); - - if (l_progress == AreaData::TestimonyProgress::LOOPED) { - client.sendServerMessageArea("Last statement reached. Looping to first statement."); - } + l_args = handleStatementJump(client, area, client_name, area->statement() + 1, "moved to the next statement.", "Last statement reached. Looping to first statement.", AreaData::TestimonyProgress::LOOPED); } - if (l_args[4] == "<") { - auto l_statement = area->jumpToStatement(area->statement() - 1); - l_args = l_statement.first; - l_progress = l_statement.second; - client.m_pos = l_args[5]; - - client.sendServerMessageArea(client_name + " moved to the previous statement."); - - if (l_progress == AreaData::TestimonyProgress::STAYED_AT_FIRST) { - client.sendServerMessage("First statement reached."); - } + else if (l_args[4] == "<") { + l_args = handleStatementJump(client, area, client_name, area->statement() - 1, "moved to the previous statement.", "First statement reached.", AreaData::TestimonyProgress::STAYED_AT_FIRST, false); } - if (l_args[4] == "=") { - auto l_statement = area->jumpToStatement(area->statement()); - l_args = l_statement.first; - l_progress = l_statement.second; - client.m_pos = l_args[5]; - - client.sendServerMessageArea(client_name + " repeated the current statement."); + else if (l_args[4] == "=") { + l_args = handleStatementJump(client, area, client_name, area->statement(), "repeated the current statement."); } - - QRegularExpressionMatch match = isTestimonyJumpCommand(client.decodeMessage(l_args[4])); // Get rid of that pesky encoding, then do the fun part - if (match.hasMatch()) { - int jump_idx = match.captured("int").toInt(); - auto l_statement = area->jumpToStatement(jump_idx); - l_args = l_statement.first; - l_progress = l_statement.second; - - client.sendServerMessageArea(client_name + " jumped to statement number " + QString::number(jump_idx) + "."); - - switch (l_progress) { - case AreaData::TestimonyProgress::LOOPED: - { - client.sendServerMessageArea("Last statement reached. Looping to first statement."); - break; - } - case AreaData::TestimonyProgress::STAYED_AT_FIRST: - { - client.sendServerMessage("First statement reached."); - Q_FALLTHROUGH(); - } - case AreaData::TestimonyProgress::OK: - default: - // No need to handle. - break; + else { + QRegularExpressionMatch match = isTestimonyJumpCommand(l_args[4]); + if (match.hasMatch()) { + int jump_idx = match.captured("int").toInt(); + l_args = handleStatementJump(client, area, client_name, jump_idx, "jumped to statement number " + QString::number(jump_idx) + "."); } } } @@ -541,4 +520,4 @@ QRegularExpressionMatch PacketMS::isTestimonyJumpCommand(QString message) const // get well soon QRegularExpression jump("(?>|<)(?\\d+)"); return jump.match(message); -} +} \ No newline at end of file