From 94deb596ae86bfe453c9d88e85266caae26e3980 Mon Sep 17 00:00:00 2001 From: Yohann Ferreira Date: Fri, 20 Jan 2012 01:42:11 +0100 Subject: Simplified and made generic the way the pickup is handled. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit I also made the range be taken from the server type as for the pickup and npc talk ranges. Last but no least, I fixed the parameters sent with PGMSG_PICKUP to send the (item) position where to pickup at as described in the manaserv protocol. The pickup is still not 100% functional due certainly to two problems: 1. The client item coordinates might not be the exact same as in the server. 2. The client seems to try to pick up the item a bit too soon, probably for the reason given in 1. I'll investigate this in another patch. Reviewed-by: Thorbjørn Lindeijer, Erik Schilling. --- src/net/manaserv/gamehandler.cpp | 1 - src/net/manaserv/gamehandler.h | 6 ++++++ src/net/manaserv/manaserv_protocol.h | 10 ++++++++-- src/net/manaserv/playerhandler.cpp | 5 ++--- 4 files changed, 16 insertions(+), 6 deletions(-) (limited to 'src/net/manaserv') diff --git a/src/net/manaserv/gamehandler.cpp b/src/net/manaserv/gamehandler.cpp index 9d0bf0d6..89b80e68 100644 --- a/src/net/manaserv/gamehandler.cpp +++ b/src/net/manaserv/gamehandler.cpp @@ -27,7 +27,6 @@ #include "net/manaserv/chathandler.h" #include "net/manaserv/connection.h" #include "net/manaserv/messageout.h" -#include "net/manaserv/manaserv_protocol.h" extern Net::GameHandler *gameHandler; diff --git a/src/net/manaserv/gamehandler.h b/src/net/manaserv/gamehandler.h index b8dda036..2d33710e 100644 --- a/src/net/manaserv/gamehandler.h +++ b/src/net/manaserv/gamehandler.h @@ -27,6 +27,8 @@ #include "net/manaserv/messagehandler.h" +#include "net/manaserv/manaserv_protocol.h" + namespace ManaServ { class GameHandler : public MessageHandler, public Net::GameHandler @@ -56,6 +58,10 @@ class GameHandler : public MessageHandler, public Net::GameHandler /** The ManaServ protocol doesn't use the MP status bar. */ bool canUseMagicBar() const { return false; } + + int getPickupRange() const { return PICKUP_RANGE; } + + int getNpcTalkRange() const { return NPC_TALK_RANGE; } }; } // namespace ManaServ diff --git a/src/net/manaserv/manaserv_protocol.h b/src/net/manaserv/manaserv_protocol.h index 2c09aaa4..aa1976f1 100644 --- a/src/net/manaserv/manaserv_protocol.h +++ b/src/net/manaserv/manaserv_protocol.h @@ -93,8 +93,8 @@ enum { // Game GPMSG_PLAYER_MAP_CHANGE = 0x0100, // S filename, W x, W y GPMSG_PLAYER_SERVER_CHANGE = 0x0101, // B*32 token, S game address, W game port - PGMSG_PICKUP = 0x0110, // W*2 position - PGMSG_DROP = 0x0111, // B slot, B amount + PGMSG_PICKUP = 0x0110, // W * 2 items position + PGMSG_DROP = 0x0111, // W slot, W amount PGMSG_EQUIP = 0x0112, // W inventory slot PGMSG_UNEQUIP = 0x0113, // W item Instance id PGMSG_MOVE_ITEM = 0x0114, // W slot1, W slot2, W amount @@ -441,6 +441,12 @@ enum BeingGender GENDER_UNSPECIFIED }; +/** The permited range to pick up an item */ +const int PICKUP_RANGE = 32 + 16; + +/** The permited range to to talk to a NPC. */ +const int NPC_TALK_RANGE = 32 * 7; + } // namespace ManaServ #endif // MANASERV_PROTOCOL_H diff --git a/src/net/manaserv/playerhandler.cpp b/src/net/manaserv/playerhandler.cpp index 96a4b49a..adb60fb3 100644 --- a/src/net/manaserv/playerhandler.cpp +++ b/src/net/manaserv/playerhandler.cpp @@ -348,10 +348,9 @@ void PlayerHandler::pickUp(FloorItem *floorItem) { if (floorItem) { - int id = floorItem->getId(); MessageOut msg(PGMSG_PICKUP); - msg.writeInt16(id >> 16); - msg.writeInt16(id & 0xFFFF); + msg.writeInt16(floorItem->getPixelX()); + msg.writeInt16(floorItem->getPixelY()); gameServerConnection->send(msg); } } -- cgit v1.2.3-70-g09d2