make a user friendly delete message

Signed-off-by: Pavel Okhlopkov <pavel.okhlopkov@flant.com>
This commit is contained in:
Pavel Okhlopkov 2026-04-10 22:22:14 +03:00
parent 5b47d034c5
commit fe1dc5e02b
5 changed files with 62 additions and 10 deletions

View file

@ -151,10 +151,23 @@ void GameHandler::registerOpcodeHandlers() {
dispatchTable_[Opcode::SMSG_CHAR_DELETE] = [this](network::Packet& packet) {
uint8_t result = packet.readUInt8();
lastCharDeleteResult_ = result;
pendingCharDeleteResponse_ = false;
bool success = (result == 0x00 || result == 0x47);
LOG_INFO("SMSG_CHAR_DELETE result: ", static_cast<int>(result), success ? " (success)" : " (failed)");
requestCharacterList();
if (charDeleteCallback_) charDeleteCallback_(success);
std::string msg;
if (success) {
msg = "Character deleted.";
} else {
// Map known CHAR_DELETE_* result codes to user-friendly messages
switch (result) {
case 0x31: msg = "Delete failed: character is a guild leader. Transfer leadership first."; break;
case 0x32: msg = "Delete failed: character is in an arena team."; break;
case 0x3A: msg = "Delete failed: character has mail. Check mailbox first."; break;
default: msg = "Delete failed (server error code " + std::to_string(static_cast<int>(result)) + ")."; break;
}
}
if (charDeleteCallback_) charDeleteCallback_(success, msg);
};
dispatchTable_[Opcode::SMSG_CHAR_ENUM] = [this](network::Packet& packet) {
if (state == WorldState::CHAR_LIST_REQUESTED)