diff --git a/client/scenes/world.cpp b/client/scenes/world.cpp index b967d94..102fd3a 100644 --- a/client/scenes/world.cpp +++ b/client/scenes/world.cpp @@ -458,6 +458,10 @@ void World::HandlePacket(SerialPacket* const argPacket) { hCharacterMovement(static_cast(argPacket)); break; + case SerialPacketType::CHARACTER_REJECTION: + hCharacterRejection(static_cast(argPacket)); + break; + //creature management case SerialPacketType::CREATURE_UPDATE: hCreatureUpdate(static_cast(argPacket)); @@ -507,7 +511,6 @@ void World::HandlePacket(SerialPacket* const argPacket) { //general rejection messages case SerialPacketType::REGION_REJECTION: - case SerialPacketType::CHARACTER_REJECTION: case SerialPacketType::QUERY_REJECTION: throw(fatal_error(static_cast(argPacket)->text)); break; @@ -810,6 +813,18 @@ void World::hCharacterMovement(CharacterPacket* const argPacket) { } } +void World::hCharacterRejection(TextPacket* const argPacket) { + //NOTE: simply crap out + config["client.disconnectMessage"] = std::string() + "Character rejected: " + argPacket->text; + SetSceneSignal(SceneSignal::DISCONNECTEDSCREEN); + + //avoid crashes from the heartbeat system + ClientPacket newPacket; + newPacket.type = SerialPacketType::DISCONNECT_REQUEST; + newPacket.clientIndex = clientIndex; + network.SendTo(argPacket->srcAddress, &newPacket); +} + //------------------------- //creature management //------------------------- diff --git a/client/scenes/world.hpp b/client/scenes/world.hpp index 99e54c5..0e14249 100644 --- a/client/scenes/world.hpp +++ b/client/scenes/world.hpp @@ -102,6 +102,7 @@ private: void hCharacterUnload(CharacterPacket* const); void hQueryCharacterExists(CharacterPacket* const); void hCharacterMovement(CharacterPacket* const); + void hCharacterRejection(TextPacket* const); //creature management void hCreatureUpdate(CreaturePacket* const);