mirror of
https://github.com/Kelsidavis/WoWee.git
synced 2026-05-05 16:43:52 +00:00
Handle chat errors, threat, and attack swing opcodes
- SMSG_CHAT_PLAYER_NOT_FOUND: show "No player named X is currently playing" in chat - SMSG_CHAT_PLAYER_AMBIGUOUS: show ambiguous name message - SMSG_CHAT_WRONG_FACTION/NOT_IN_PARTY/RESTRICTED: appropriate chat error messages - SMSG_THREAT_CLEAR: log threat wipe (Vanish, Feign Death) - SMSG_THREAT_REMOVE: consume packed GUIDs - SMSG_HIGHEST_THREAT_UPDATE: consume (no threat UI yet)
This commit is contained in:
parent
299c725993
commit
6a281e468f
1 changed files with 47 additions and 0 deletions
|
|
@ -1414,6 +1414,31 @@ void GameHandler::handlePacket(network::Packet& packet) {
|
||||||
handleChannelNotify(packet);
|
handleChannelNotify(packet);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
case Opcode::SMSG_CHAT_PLAYER_NOT_FOUND: {
|
||||||
|
// string: name of the player not found (for failed whispers)
|
||||||
|
std::string name = packet.readString();
|
||||||
|
if (!name.empty()) {
|
||||||
|
addSystemChatMessage("No player named '" + name + "' is currently playing.");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Opcode::SMSG_CHAT_PLAYER_AMBIGUOUS: {
|
||||||
|
// string: ambiguous player name (multiple matches)
|
||||||
|
std::string name = packet.readString();
|
||||||
|
if (!name.empty()) {
|
||||||
|
addSystemChatMessage("Player name '" + name + "' is ambiguous.");
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Opcode::SMSG_CHAT_WRONG_FACTION:
|
||||||
|
addSystemChatMessage("You cannot send messages to members of that faction.");
|
||||||
|
break;
|
||||||
|
case Opcode::SMSG_CHAT_NOT_IN_PARTY:
|
||||||
|
addSystemChatMessage("You are not in a party.");
|
||||||
|
break;
|
||||||
|
case Opcode::SMSG_CHAT_RESTRICTED:
|
||||||
|
addSystemChatMessage("You cannot send chat messages in this area.");
|
||||||
|
break;
|
||||||
|
|
||||||
case Opcode::SMSG_QUERY_TIME_RESPONSE:
|
case Opcode::SMSG_QUERY_TIME_RESPONSE:
|
||||||
if (state == WorldState::IN_WORLD) {
|
if (state == WorldState::IN_WORLD) {
|
||||||
|
|
@ -1867,6 +1892,28 @@ void GameHandler::handlePacket(network::Packet& packet) {
|
||||||
autoAttacking = false;
|
autoAttacking = false;
|
||||||
autoAttackTarget = 0;
|
autoAttackTarget = 0;
|
||||||
break;
|
break;
|
||||||
|
case Opcode::SMSG_THREAT_CLEAR:
|
||||||
|
// All threat dropped on the local player (e.g. Vanish, Feign Death)
|
||||||
|
// No local state to clear — informational
|
||||||
|
LOG_DEBUG("SMSG_THREAT_CLEAR: threat wiped");
|
||||||
|
break;
|
||||||
|
case Opcode::SMSG_THREAT_REMOVE: {
|
||||||
|
// packed_guid (unit) + packed_guid (victim whose threat was removed)
|
||||||
|
if (packet.getSize() - packet.getReadPos() >= 1) {
|
||||||
|
(void)UpdateObjectParser::readPackedGuid(packet);
|
||||||
|
if (packet.getSize() - packet.getReadPos() >= 1) {
|
||||||
|
(void)UpdateObjectParser::readPackedGuid(packet);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
case Opcode::SMSG_HIGHEST_THREAT_UPDATE: {
|
||||||
|
// packed_guid (tank) + packed_guid (new highest threat unit) + uint32 count
|
||||||
|
// + count × (packed_guid victim + uint32 threat)
|
||||||
|
// Informational — no threat UI yet; consume to suppress warnings
|
||||||
|
packet.setReadPos(packet.getSize());
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
case Opcode::SMSG_CANCEL_COMBAT:
|
case Opcode::SMSG_CANCEL_COMBAT:
|
||||||
// Server-side combat state reset
|
// Server-side combat state reset
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue