From 9f8da99f6b6266a7456d3be4d38880a3bd761932 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Fri, 13 May 2016 22:53:57 +0300 Subject: Add into network code function readUInt16. Also fix reading cards id. --- src/net/tmwa/inventoryrecv.cpp | 12 ++++++------ src/net/tmwa/messagein.cpp | 21 +++++++++++++++++++++ src/net/tmwa/messagein.h | 3 +++ src/net/tmwa/traderecv.cpp | 2 +- 4 files changed, 31 insertions(+), 7 deletions(-) (limited to 'src/net/tmwa') diff --git a/src/net/tmwa/inventoryrecv.cpp b/src/net/tmwa/inventoryrecv.cpp index 9d4d202a0..878a03538 100644 --- a/src/net/tmwa/inventoryrecv.cpp +++ b/src/net/tmwa/inventoryrecv.cpp @@ -102,7 +102,7 @@ void InventoryRecv::processPlayerEquipment(Net::MessageIn &msg) const uint8_t refine = msg.readUInt8("refine"); int cards[maxCards]; for (int f = 0; f < maxCards; f++) - cards[f] = msg.readInt16("card"); + cards[f] = msg.readUInt16("card"); if (Ea::InventoryRecv::mDebugInventory) { @@ -156,7 +156,7 @@ void InventoryRecv::processPlayerInventoryAdd(Net::MessageIn &msg) const uint8_t refine = msg.readUInt8("refine"); int cards[maxCards]; for (int f = 0; f < maxCards; f++) - cards[f] = msg.readInt16("card"); + cards[f] = msg.readUInt16("card"); const int equipType = msg.readInt16("equip type"); const ItemTypeT type = static_cast(msg.readUInt8("item type")); const ItemInfo &itemInfo = ItemDB::get(itemId); @@ -275,7 +275,7 @@ void InventoryRecv::processPlayerInventory(Net::MessageIn &msg) const int amount = msg.readInt16("amount"); const int arrow = msg.readInt16("arrow"); for (int i = 0; i < maxCards; i++) - cards[i] = msg.readInt16("card"); + cards[i] = msg.readUInt16("card"); if (Ea::InventoryRecv::mDebugInventory) { @@ -326,7 +326,7 @@ void InventoryRecv::processPlayerStorage(Net::MessageIn &msg) const int amount = msg.readInt16("amount"); msg.readInt16("arrow"); for (int i = 0; i < maxCards; i++) - cards[i] = msg.readInt16("card"); + cards[i] = msg.readUInt16("card"); if (Ea::InventoryRecv::mDebugInventory) { @@ -410,7 +410,7 @@ void InventoryRecv::processPlayerStorageEquip(Net::MessageIn &msg) msg.readUInt8("attribute (broken)"); const uint8_t refine = msg.readUInt8("refine"); for (int i = 0; i < maxCards; i++) - cards[i] = msg.readInt16("card"); + cards[i] = msg.readUInt16("card"); if (Ea::InventoryRecv::mDebugInventory) { @@ -450,7 +450,7 @@ void InventoryRecv::processPlayerStorageAdd(Net::MessageIn &msg) const uint8_t refine = msg.readUInt8("refine"); int cards[maxCards]; for (int f = 0; f < maxCards; f++) - cards[f] = msg.readInt16("card"); + cards[f] = msg.readUInt16("card"); if (Item *const item = Ea::InventoryRecv::mStorage->getItem(index)) { diff --git a/src/net/tmwa/messagein.cpp b/src/net/tmwa/messagein.cpp index 375e973f5..a5fac5ac9 100644 --- a/src/net/tmwa/messagein.cpp +++ b/src/net/tmwa/messagein.cpp @@ -86,6 +86,27 @@ int16_t MessageIn::readInt16(const char *const str) return value; } +uint16_t MessageIn::readUInt16(const char *const str) +{ + uint16_t value = 0xffU; + if (mPos + 2 <= mLength) + { +#if SDL_BYTEORDER == SDL_BIG_ENDIAN + uint16_t swap; + memcpy(&swap, mData + CAST_SIZE(mPos), sizeof(uint16_t)); + value = SDL_Swap16(swap); +#else + memcpy(&value, mData + CAST_SIZE(mPos), sizeof(uint16_t)); +#endif + } + DEBUGLOG2("readUInt16: " + toStringPrint(CAST_U32( + CAST_U16(value))), + mPos, str); + mPos += 2; + PacketCounters::incInBytes(2); + return value; +} + int32_t MessageIn::readInt32(const char *const str) { int32_t value = -1; diff --git a/src/net/tmwa/messagein.h b/src/net/tmwa/messagein.h index 14c6b8156..52b6b3f73 100644 --- a/src/net/tmwa/messagein.h +++ b/src/net/tmwa/messagein.h @@ -50,6 +50,9 @@ class MessageIn final : public Net::MessageIn /**< Reads a short. */ int16_t readInt16(const char *const str) override final; + + uint16_t readUInt16(const char *const str) override final; + /**< Reads a long. */ int32_t readInt32(const char *const str) override final; diff --git a/src/net/tmwa/traderecv.cpp b/src/net/tmwa/traderecv.cpp index f68bee9f5..29e88b2c4 100644 --- a/src/net/tmwa/traderecv.cpp +++ b/src/net/tmwa/traderecv.cpp @@ -66,7 +66,7 @@ void TradeRecv::processTradeItemAdd(Net::MessageIn &msg) const uint8_t refine = msg.readUInt8("refine"); int cards[maxCards]; for (int f = 0; f < maxCards; f++) - cards[f] = msg.readInt16("card"); + cards[f] = msg.readUInt16("card"); if (tradeWindow) { -- cgit v1.2.3-70-g09d2