diff options
Diffstat (limited to 'src/net/charserverhandler.cpp')
-rw-r--r-- | src/net/charserverhandler.cpp | 19 |
1 files changed, 15 insertions, 4 deletions
diff --git a/src/net/charserverhandler.cpp b/src/net/charserverhandler.cpp index cfa52c38..909100e5 100644 --- a/src/net/charserverhandler.cpp +++ b/src/net/charserverhandler.cpp @@ -20,19 +20,24 @@ */ #include "charserverhandler.h" - #include "messagein.h" #include "network.h" #include "protocol.h" +#include "../extensions.h" #include "../game.h" #include "../localplayer.h" #include "../log.h" #include "../logindata.h" #include "../main.h" -#include "../gui/ok_dialog.h" #include "../gui/char_select.h" +#include "../gui/ok_dialog.h" + +/* + * Yeah, this is a global. Get over it. + */ +struct EXTENSIONS extensions; CharServerHandler::CharServerHandler(): mCharCreateDialog(0) @@ -54,6 +59,7 @@ CharServerHandler::CharServerHandler(): void CharServerHandler::handleMessage(MessageIn *msg) { int slot; + int flags; LocalPlayer *tempPlayer; logger->log("CharServerHandler: Packet ID: %x, Length: %d", @@ -61,8 +67,13 @@ void CharServerHandler::handleMessage(MessageIn *msg) switch (msg->getId()) { case 0x006b: - // Skip length word and an additional mysterious 20 bytes - msg->skip(2 + 20); + msg->skip(2); // Length word + flags = msg->readInt32(); // Aethyra extensions flags + logger->log("Server flags are: %x", flags); + extensions.aethyra_inventory = (bool)(flags & 0x01); + extensions.aethyra_spells = (bool)(flags & 0x02); + extensions.aethyra_misc = (bool)(flags & 0x04); + msg->skip(16); // Unused // Derive number of characters from message length n_character = (msg->getLength() - 24) / 106; |