summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2011-07-31 00:22:00 +0300
committerAndrei Karas <akaras@inbox.ru>2011-07-31 00:46:41 +0300
commita92b5477c30f6c8de99fa4edb18af1593024dd8b (patch)
tree70aafb5484d00377fa9886bf169109c24154494e
parente6c5a9106004297abd0c593a752303aa071d6659 (diff)
downloadmanaplus-a92b5477c30f6c8de99fa4edb18af1593024dd8b.tar.gz
manaplus-a92b5477c30f6c8de99fa4edb18af1593024dd8b.tar.bz2
manaplus-a92b5477c30f6c8de99fa4edb18af1593024dd8b.tar.xz
manaplus-a92b5477c30f6c8de99fa4edb18af1593024dd8b.zip
Extract shared logic from itemhandler netcode to ea namespace.
-rw-r--r--src/CMakeLists.txt2
-rw-r--r--src/Makefile.am2
-rw-r--r--src/net/ea/itemhandler.cpp72
-rw-r--r--src/net/ea/itemhandler.h44
-rw-r--r--src/net/tmwa/itemhandler.cpp36
-rw-r--r--src/net/tmwa/itemhandler.h4
6 files changed, 125 insertions, 35 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index ace8ad10b..4348dac03 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -697,6 +697,8 @@ SET(SRCS_EVOL
net/ea/guildhandler.h
net/ea/inventoryhandler.cpp
net/ea/inventoryhandler.h
+ net/ea/itemhandler.cpp
+ net/ea/itemhandler.h
net/ea/loginhandler.cpp
net/ea/loginhandler.h
net/ea/partyhandler.cpp
diff --git a/src/Makefile.am b/src/Makefile.am
index 25e796d3d..b55415c78 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -681,6 +681,8 @@ manaplus_SOURCES += \
net/ea/guildhandler.h \
net/ea/inventoryhandler.cpp \
net/ea/inventoryhandler.h \
+ net/ea/itemhandler.cpp \
+ net/ea/itemhandler.h \
net/ea/loginhandler.cpp \
net/ea/loginhandler.h \
net/ea/partyhandler.cpp \
diff --git a/src/net/ea/itemhandler.cpp b/src/net/ea/itemhandler.cpp
new file mode 100644
index 000000000..38d6f7be9
--- /dev/null
+++ b/src/net/ea/itemhandler.cpp
@@ -0,0 +1,72 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#include "net/ea/itemhandler.h"
+
+#include "actorspritemanager.h"
+
+#include "net/messagein.h"
+
+#include "debug.h"
+
+namespace Ea
+{
+
+ItemHandler::ItemHandler()
+{
+}
+
+void ItemHandler::processItemVisible(Net::MessageIn &msg, bool isDrop)
+{
+ int id = msg.readInt32();
+ int itemId = msg.readInt16();
+ unsigned char identify = msg.readInt8(); // identify flag
+ int x = msg.readInt16();
+ int y = msg.readInt16();
+ int amount1 = msg.readInt16();
+ int amount2 = msg.readInt16();
+
+ if (actorSpriteManager)
+ {
+ if (!isDrop)
+ {
+ actorSpriteManager->createItem(id, itemId,
+ x, y, amount1, identify);
+ }
+ else
+ {
+ actorSpriteManager->createItem(id, itemId,
+ x, y, amount2, identify);
+ }
+ }
+}
+
+void ItemHandler::processItemRemove(Net::MessageIn &msg)
+{
+ if (actorSpriteManager)
+ {
+ if (FloorItem *item = actorSpriteManager->findItem(msg.readInt32()))
+ actorSpriteManager->destroy(item);
+ }
+}
+
+} // namespace Ea
diff --git a/src/net/ea/itemhandler.h b/src/net/ea/itemhandler.h
new file mode 100644
index 000000000..dabf61b5d
--- /dev/null
+++ b/src/net/ea/itemhandler.h
@@ -0,0 +1,44 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011 The ManaPlus Developers
+ *
+ * This file is part of The ManaPlus Client.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+#ifndef NET_EA_ITEMHANDLER_H
+#define NET_EA_ITEMHANDLER_H
+
+#include "net/net.h"
+#include "net/messagein.h"
+
+namespace Ea
+{
+
+class ItemHandler
+{
+ public:
+ ItemHandler();
+
+ void processItemVisible(Net::MessageIn &msg, bool isDrop);
+
+ void processItemRemove(Net::MessageIn &msg);
+};
+
+} // namespace Ea
+
+#endif // NET_EA_ITEMHANDLER_H
diff --git a/src/net/tmwa/itemhandler.cpp b/src/net/tmwa/itemhandler.cpp
index d9595c846..ee33cd230 100644
--- a/src/net/tmwa/itemhandler.cpp
+++ b/src/net/tmwa/itemhandler.cpp
@@ -22,8 +22,6 @@
#include "net/tmwa/itemhandler.h"
-#include "actorspritemanager.h"
-
#include "net/messagein.h"
#include "net/tmwa/protocol.h"
@@ -51,41 +49,11 @@ void ItemHandler::handleMessage(Net::MessageIn &msg)
{
case SMSG_ITEM_VISIBLE:
case SMSG_ITEM_DROPPED:
- {
- int id = msg.readInt32();
- int itemId = msg.readInt16();
- unsigned char identify = msg.readInt8(); // identify flag
- int x = msg.readInt16();
- int y = msg.readInt16();
-// msg.skip(4); // amount,subX,subY / subX,subY,amount
- int amount1 = msg.readInt16();
- int amount2 = msg.readInt16();
-
- if (actorSpriteManager)
- {
- if (msg.getId() == SMSG_ITEM_VISIBLE)
- {
- actorSpriteManager->createItem(id, itemId,
- x, y, amount1, identify);
- }
- else
- {
- actorSpriteManager->createItem(id, itemId,
- x, y, amount2, identify);
- }
- }
- }
+ processItemVisible(msg, msg.getId() == SMSG_ITEM_DROPPED);
break;
case SMSG_ITEM_REMOVE:
- if (actorSpriteManager)
- {
- if (FloorItem *item = actorSpriteManager->findItem(
- msg.readInt32()))
- {
- actorSpriteManager->destroy(item);
- }
- }
+ processItemRemove(msg);
break;
default:
diff --git a/src/net/tmwa/itemhandler.h b/src/net/tmwa/itemhandler.h
index bd0de9890..3e948547e 100644
--- a/src/net/tmwa/itemhandler.h
+++ b/src/net/tmwa/itemhandler.h
@@ -25,10 +25,12 @@
#include "net/tmwa/messagehandler.h"
+#include "net/ea/itemhandler.h"
+
namespace TmwAthena
{
-class ItemHandler : public MessageHandler
+class ItemHandler : public MessageHandler, public Ea::ItemHandler
{
public:
ItemHandler();