summaryrefslogtreecommitdiff
path: root/src/net
diff options
context:
space:
mode:
authorAndrei Karas <akaras@inbox.ru>2015-08-27 16:39:11 +0300
committerAndrei Karas <akaras@inbox.ru>2015-08-27 16:39:11 +0300
commit750a31150ed7fc4b3e7b295552207783f7e4a0d3 (patch)
tree983f2b4b8c1a8856dd731f7b9f4b78714e64ac0d /src/net
parentf964252564162f70df2cda6b06b45245d0a383ad (diff)
downloadplus-750a31150ed7fc4b3e7b295552207783f7e4a0d3.tar.gz
plus-750a31150ed7fc4b3e7b295552207783f7e4a0d3.tar.bz2
plus-750a31150ed7fc4b3e7b295552207783f7e4a0d3.tar.xz
plus-750a31150ed7fc4b3e7b295552207783f7e4a0d3.zip
Move receive code from itemhandler into separate file.
Diffstat (limited to 'src/net')
-rw-r--r--src/net/ea/itemhandler.cpp14
-rw-r--r--src/net/ea/itemhandler.h3
-rw-r--r--src/net/ea/itemrecv.cpp46
-rw-r--r--src/net/ea/itemrecv.h41
-rw-r--r--src/net/eathena/itemhandler.cpp167
-rw-r--r--src/net/eathena/itemhandler.h13
-rw-r--r--src/net/eathena/itemrecv.cpp188
-rw-r--r--src/net/eathena/itemrecv.h43
-rw-r--r--src/net/tmwa/itemhandler.cpp64
-rw-r--r--src/net/tmwa/itemhandler.h5
-rw-r--r--src/net/tmwa/itemrecv.cpp89
-rw-r--r--src/net/tmwa/itemrecv.h39
12 files changed, 464 insertions, 248 deletions
diff --git a/src/net/ea/itemhandler.cpp b/src/net/ea/itemhandler.cpp
index b8973c039..19b1e919d 100644
--- a/src/net/ea/itemhandler.cpp
+++ b/src/net/ea/itemhandler.cpp
@@ -26,6 +26,8 @@
#include "net/messagein.h"
+#include "net/ea/itemrecv.h"
+
#include "debug.h"
namespace Ea
@@ -39,16 +41,4 @@ ItemHandler::~ItemHandler()
{
}
-void ItemHandler::processItemRemove(Net::MessageIn &msg)
-{
- if (actorManager)
- {
- if (FloorItem *const item = actorManager
- ->findItem(msg.readBeingId("floor item id")))
- {
- actorManager->destroy(item);
- }
- }
-}
-
} // namespace Ea
diff --git a/src/net/ea/itemhandler.h b/src/net/ea/itemhandler.h
index 67fe288b9..f8365990b 100644
--- a/src/net/ea/itemhandler.h
+++ b/src/net/ea/itemhandler.h
@@ -41,9 +41,6 @@ class ItemHandler notfinal
A_DELETE_COPY(ItemHandler)
virtual ~ItemHandler();
-
- protected:
- static void processItemRemove(Net::MessageIn &msg);
};
} // namespace Ea
diff --git a/src/net/ea/itemrecv.cpp b/src/net/ea/itemrecv.cpp
new file mode 100644
index 000000000..c2702bdc7
--- /dev/null
+++ b/src/net/ea/itemrecv.cpp
@@ -0,0 +1,46 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2015 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/itemrecv.h"
+
+#include "actormanager.h"
+
+#include "net/messagein.h"
+
+#include "debug.h"
+
+namespace Ea
+{
+
+void ItemRecv::processItemRemove(Net::MessageIn &msg)
+{
+ if (actorManager)
+ {
+ if (FloorItem *const item = actorManager
+ ->findItem(msg.readBeingId("floor item id")))
+ {
+ actorManager->destroy(item);
+ }
+ }
+}
+
+} // namespace Ea
diff --git a/src/net/ea/itemrecv.h b/src/net/ea/itemrecv.h
new file mode 100644
index 000000000..a97a9b385
--- /dev/null
+++ b/src/net/ea/itemrecv.h
@@ -0,0 +1,41 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2015 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_ITEMRECV_H
+#define NET_EA_ITEMRECV_H
+
+#include "localconsts.h"
+
+namespace Net
+{
+ class MessageIn;
+}
+
+namespace Ea
+{
+ namespace ItemRecv
+ {
+ void processItemRemove(Net::MessageIn &msg);
+ } // namespace ItemRecv
+} // namespace Ea
+
+#endif // NET_EA_ITEMRECV_H
diff --git a/src/net/eathena/itemhandler.cpp b/src/net/eathena/itemhandler.cpp
index f25addbe0..2240cf392 100644
--- a/src/net/eathena/itemhandler.cpp
+++ b/src/net/eathena/itemhandler.cpp
@@ -28,6 +28,9 @@
#include "enums/simpletypes/damaged.h"
+#include "net/ea/itemrecv.h"
+
+#include "net/eathena/itemrecv.h"
#include "net/eathena/protocol.h"
#include "debug.h"
@@ -58,31 +61,31 @@ void ItemHandler::handleMessage(Net::MessageIn &msg)
switch (msg.getId())
{
case SMSG_ITEM_VISIBLE:
- processItemVisible(msg);
+ ItemRecv::processItemVisible(msg);
break;
case SMSG_ITEM_DROPPED:
- processItemDropped(msg);
+ ItemRecv::processItemDropped(msg);
break;
case SMSG_ITEM_REMOVE:
- processItemRemove(msg);
+ Ea::ItemRecv::processItemRemove(msg);
break;
case SMSG_GRAFFITI_VISIBLE:
- processGraffiti(msg);
+ ItemRecv::processGraffiti(msg);
break;
case SMSG_ITEM_MVP_DROPPED:
- processItemMvpDropped(msg);
+ ItemRecv::processItemMvpDropped(msg);
break;
case SMSG_ITEM_VISIBLE2:
- processItemVisible2(msg);
+ ItemRecv::processItemVisible2(msg);
break;
case SMSG_ITEM_DROPPED2:
- processItemDropped2(msg);
+ ItemRecv::processItemDropped2(msg);
break;
default:
@@ -90,154 +93,4 @@ void ItemHandler::handleMessage(Net::MessageIn &msg)
}
}
-void ItemHandler::processItemDropped(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("id");
- const int itemId = msg.readInt16("item id");
- const int itemType = msg.readInt16("type");
- const Identified identified = fromInt(
- msg.readUInt8("identify"), Identified);
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- const int subX = static_cast<int>(msg.readInt8("subx"));
- const int subY = static_cast<int>(msg.readInt8("suby"));
- const int amount = msg.readInt16("count");
-
- if (actorManager)
- {
- actorManager->createItem(id,
- itemId,
- x, y,
- itemType,
- amount,
- 0,
- ItemColor_one,
- identified,
- Damaged_false,
- subX, subY,
- nullptr);
- }
-}
-
-void ItemHandler::processItemDropped2(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("id");
- const int itemId = msg.readInt16("item id");
- const int itemType = msg.readUInt8("type");
- const Identified identified = fromInt(
- msg.readUInt8("identify"), Identified);
- const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
- const uint8_t refine = msg.readUInt8("refine");
- int cards[4];
- for (int f = 0; f < 4; f++)
- cards[f] = msg.readInt16("card");
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- const int amount = msg.readInt16("amount");
- const int subX = static_cast<int>(msg.readInt8("subx"));
- const int subY = static_cast<int>(msg.readInt8("suby"));
-
- if (actorManager)
- {
- actorManager->createItem(id,
- itemId,
- x, y,
- itemType,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- identified,
- damaged,
- subX, subY,
- &cards[0]);
- }
-}
-
-void ItemHandler::processGraffiti(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- msg.readInt32("graffiti id");
- msg.readInt32("creator id");
- msg.readInt16("x");
- msg.readInt16("y");
- msg.readUInt8("job");
- msg.readUInt8("visible");
- msg.readUInt8("is content");
- msg.readString(80, "text");
-}
-
-void ItemHandler::processItemMvpDropped(Net::MessageIn &msg)
-{
- UNIMPLIMENTEDPACKET;
- msg.readInt16("len");
- msg.readUInt8("type");
- msg.readInt16("item id");
- msg.readUInt8("len");
- msg.readString(24, "name");
- msg.readUInt8("monster name len");
- msg.readString(24, "monster name");
-}
-
-void ItemHandler::processItemVisible(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("item object id");
- const int itemId = msg.readInt16("item id");
- const Identified identified = fromInt(
- msg.readUInt8("identify"), Identified);
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- const int amount = msg.readInt16("amount");
- const int subX = static_cast<int>(msg.readInt8("sub x"));
- const int subY = static_cast<int>(msg.readInt8("sub y"));
-
- if (actorManager)
- {
- actorManager->createItem(id,
- itemId,
- x, y,
- 0,
- amount,
- 0,
- ItemColor_one,
- identified,
- Damaged_false,
- subX, subY,
- nullptr);
- }
-}
-
-void ItemHandler::processItemVisible2(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("item object id");
- const int itemId = msg.readInt16("item id");
- const int itemType = msg.readUInt8("type");
- const Identified identified = fromInt(
- msg.readUInt8("identify"), Identified);
- const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
- const uint8_t refine = msg.readUInt8("refine");
- int cards[4];
- for (int f = 0; f < 4; f++)
- cards[f] = msg.readInt16("card");
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- const int amount = msg.readInt16("amount");
- const int subX = static_cast<int>(msg.readInt8("sub x"));
- const int subY = static_cast<int>(msg.readInt8("sub y"));
-
- if (actorManager)
- {
- actorManager->createItem(id,
- itemId,
- x, y,
- itemType,
- amount,
- refine,
- ItemColorManager::getColorFromCards(&cards[0]),
- identified,
- damaged,
- subX, subY,
- &cards[0]);
- }
-}
-
} // namespace EAthena
diff --git a/src/net/eathena/itemhandler.h b/src/net/eathena/itemhandler.h
index 194b29273..cd59b1524 100644
--- a/src/net/eathena/itemhandler.h
+++ b/src/net/eathena/itemhandler.h
@@ -38,19 +38,6 @@ class ItemHandler final : public MessageHandler, public Ea::ItemHandler
A_DELETE_COPY(ItemHandler)
void handleMessage(Net::MessageIn &msg) override final;
-
- protected:
- static void processItemDropped(Net::MessageIn &msg);
-
- static void processItemDropped2(Net::MessageIn &msg);
-
- static void processGraffiti(Net::MessageIn &msg);
-
- static void processItemMvpDropped(Net::MessageIn &msg);
-
- static void processItemVisible(Net::MessageIn &msg);
-
- static void processItemVisible2(Net::MessageIn &msg);
};
} // namespace EAthena
diff --git a/src/net/eathena/itemrecv.cpp b/src/net/eathena/itemrecv.cpp
new file mode 100644
index 000000000..c04621aaa
--- /dev/null
+++ b/src/net/eathena/itemrecv.cpp
@@ -0,0 +1,188 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2015 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/eathena/itemrecv.h"
+
+#include "actormanager.h"
+#include "itemcolormanager.h"
+#include "logger.h"
+
+#include "enums/simpletypes/damaged.h"
+
+#include "net/eathena/protocol.h"
+
+#include "debug.h"
+
+namespace EAthena
+{
+
+void ItemRecv::processItemDropped(Net::MessageIn &msg)
+{
+ const BeingId id = msg.readBeingId("id");
+ const int itemId = msg.readInt16("item id");
+ const int itemType = msg.readInt16("type");
+ const Identified identified = fromInt(
+ msg.readUInt8("identify"), Identified);
+ const int x = msg.readInt16("x");
+ const int y = msg.readInt16("y");
+ const int subX = static_cast<int>(msg.readInt8("subx"));
+ const int subY = static_cast<int>(msg.readInt8("suby"));
+ const int amount = msg.readInt16("count");
+
+ if (actorManager)
+ {
+ actorManager->createItem(id,
+ itemId,
+ x, y,
+ itemType,
+ amount,
+ 0,
+ ItemColor_one,
+ identified,
+ Damaged_false,
+ subX, subY,
+ nullptr);
+ }
+}
+
+void ItemRecv::processItemDropped2(Net::MessageIn &msg)
+{
+ const BeingId id = msg.readBeingId("id");
+ const int itemId = msg.readInt16("item id");
+ const int itemType = msg.readUInt8("type");
+ const Identified identified = fromInt(
+ msg.readUInt8("identify"), Identified);
+ const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
+ const uint8_t refine = msg.readUInt8("refine");
+ int cards[4];
+ for (int f = 0; f < 4; f++)
+ cards[f] = msg.readInt16("card");
+ const int x = msg.readInt16("x");
+ const int y = msg.readInt16("y");
+ const int amount = msg.readInt16("amount");
+ const int subX = static_cast<int>(msg.readInt8("subx"));
+ const int subY = static_cast<int>(msg.readInt8("suby"));
+
+ if (actorManager)
+ {
+ actorManager->createItem(id,
+ itemId,
+ x, y,
+ itemType,
+ amount,
+ refine,
+ ItemColorManager::getColorFromCards(&cards[0]),
+ identified,
+ damaged,
+ subX, subY,
+ &cards[0]);
+ }
+}
+
+void ItemRecv::processGraffiti(Net::MessageIn &msg)
+{
+ UNIMPLIMENTEDPACKET;
+ msg.readInt32("graffiti id");
+ msg.readInt32("creator id");
+ msg.readInt16("x");
+ msg.readInt16("y");
+ msg.readUInt8("job");
+ msg.readUInt8("visible");
+ msg.readUInt8("is content");
+ msg.readString(80, "text");
+}
+
+void ItemRecv::processItemMvpDropped(Net::MessageIn &msg)
+{
+ UNIMPLIMENTEDPACKET;
+ msg.readInt16("len");
+ msg.readUInt8("type");
+ msg.readInt16("item id");
+ msg.readUInt8("len");
+ msg.readString(24, "name");
+ msg.readUInt8("monster name len");
+ msg.readString(24, "monster name");
+}
+
+void ItemRecv::processItemVisible(Net::MessageIn &msg)
+{
+ const BeingId id = msg.readBeingId("item object id");
+ const int itemId = msg.readInt16("item id");
+ const Identified identified = fromInt(
+ msg.readUInt8("identify"), Identified);
+ const int x = msg.readInt16("x");
+ const int y = msg.readInt16("y");
+ const int amount = msg.readInt16("amount");
+ const int subX = static_cast<int>(msg.readInt8("sub x"));
+ const int subY = static_cast<int>(msg.readInt8("sub y"));
+
+ if (actorManager)
+ {
+ actorManager->createItem(id,
+ itemId,
+ x, y,
+ 0,
+ amount,
+ 0,
+ ItemColor_one,
+ identified,
+ Damaged_false,
+ subX, subY,
+ nullptr);
+ }
+}
+
+void ItemRecv::processItemVisible2(Net::MessageIn &msg)
+{
+ const BeingId id = msg.readBeingId("item object id");
+ const int itemId = msg.readInt16("item id");
+ const int itemType = msg.readUInt8("type");
+ const Identified identified = fromInt(
+ msg.readUInt8("identify"), Identified);
+ const Damaged damaged = fromBool(msg.readUInt8("attribute"), Damaged);
+ const uint8_t refine = msg.readUInt8("refine");
+ int cards[4];
+ for (int f = 0; f < 4; f++)
+ cards[f] = msg.readInt16("card");
+ const int x = msg.readInt16("x");
+ const int y = msg.readInt16("y");
+ const int amount = msg.readInt16("amount");
+ const int subX = static_cast<int>(msg.readInt8("sub x"));
+ const int subY = static_cast<int>(msg.readInt8("sub y"));
+
+ if (actorManager)
+ {
+ actorManager->createItem(id,
+ itemId,
+ x, y,
+ itemType,
+ amount,
+ refine,
+ ItemColorManager::getColorFromCards(&cards[0]),
+ identified,
+ damaged,
+ subX, subY,
+ &cards[0]);
+ }
+}
+
+} // namespace EAthena
diff --git a/src/net/eathena/itemrecv.h b/src/net/eathena/itemrecv.h
new file mode 100644
index 000000000..274cc0a1a
--- /dev/null
+++ b/src/net/eathena/itemrecv.h
@@ -0,0 +1,43 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2015 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_EATHENA_ITEMRECV_H
+#define NET_EATHENA_ITEMRECV_H
+
+#include "net/eathena/messagehandler.h"
+
+#include "net/ea/itemhandler.h"
+
+namespace EAthena
+{
+ namespace ItemRecv
+ {
+ void processItemDropped(Net::MessageIn &msg);
+ void processItemDropped2(Net::MessageIn &msg);
+ void processGraffiti(Net::MessageIn &msg);
+ void processItemMvpDropped(Net::MessageIn &msg);
+ void processItemVisible(Net::MessageIn &msg);
+ void processItemVisible2(Net::MessageIn &msg);
+ } // namespace ItemRecv
+} // namespace EAthena
+
+#endif // NET_EATHENA_ITEMRECV_H
diff --git a/src/net/tmwa/itemhandler.cpp b/src/net/tmwa/itemhandler.cpp
index 60daadb75..990b91366 100644
--- a/src/net/tmwa/itemhandler.cpp
+++ b/src/net/tmwa/itemhandler.cpp
@@ -24,6 +24,9 @@
#include "actormanager.h"
+#include "net/ea/itemrecv.h"
+
+#include "net/tmwa/itemrecv.h"
#include "net/tmwa/protocol.h"
#include "debug.h"
@@ -51,15 +54,15 @@ void ItemHandler::handleMessage(Net::MessageIn &msg)
switch (msg.getId())
{
case SMSG_ITEM_VISIBLE:
- processItemVisible(msg);
+ ItemRecv::processItemVisible(msg);
break;
case SMSG_ITEM_DROPPED:
- processItemDropped(msg);
+ ItemRecv::processItemDropped(msg);
break;
case SMSG_ITEM_REMOVE:
- processItemRemove(msg);
+ Ea::ItemRecv::processItemRemove(msg);
break;
default:
@@ -68,59 +71,4 @@ void ItemHandler::handleMessage(Net::MessageIn &msg)
BLOCK_END("ItemHandler::handleMessage")
}
-void ItemHandler::processItemDropped(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("item object id");
- const int itemId = msg.readInt16("item id");
- const Identified identify = fromInt(msg.readUInt8("identify"), Identified);
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- const int subX = static_cast<int>(msg.readInt8("sub x"));
- const int subY = static_cast<int>(msg.readInt8("sub y"));
- const int amount = msg.readInt16("amount");
-
- if (actorManager)
- {
- actorManager->createItem(id,
- itemId,
- x, y,
- 0,
- amount,
- 0,
- ItemColor_one,
- identify,
- Damaged_false,
- subX, subY,
- nullptr);
- }
-}
-
-void ItemHandler::processItemVisible(Net::MessageIn &msg)
-{
- const BeingId id = msg.readBeingId("item object id");
- const int itemId = msg.readInt16("item id");
- const Identified identified = fromInt(
- msg.readUInt8("identify"), Identified);
- const int x = msg.readInt16("x");
- const int y = msg.readInt16("y");
- const int amount = msg.readInt16("amount");
- const int subX = static_cast<int>(msg.readInt8("sub x"));
- const int subY = static_cast<int>(msg.readInt8("sub y"));
-
- if (actorManager)
- {
- actorManager->createItem(id,
- itemId,
- x, y,
- 0,
- amount,
- 0,
- ItemColor_one,
- identified,
- Damaged_false,
- subX, subY,
- nullptr);
- }
-}
-
} // namespace TmwAthena
diff --git a/src/net/tmwa/itemhandler.h b/src/net/tmwa/itemhandler.h
index d8debe7e4..c81eba3c3 100644
--- a/src/net/tmwa/itemhandler.h
+++ b/src/net/tmwa/itemhandler.h
@@ -38,11 +38,6 @@ class ItemHandler final : public MessageHandler, public Ea::ItemHandler
A_DELETE_COPY(ItemHandler)
void handleMessage(Net::MessageIn &msg) override final;
-
- protected:
- static void processItemDropped(Net::MessageIn &msg);
-
- static void processItemVisible(Net::MessageIn &msg);
};
} // namespace TmwAthena
diff --git a/src/net/tmwa/itemrecv.cpp b/src/net/tmwa/itemrecv.cpp
new file mode 100644
index 000000000..eca928f1b
--- /dev/null
+++ b/src/net/tmwa/itemrecv.cpp
@@ -0,0 +1,89 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2015 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/tmwa/itemrecv.h"
+
+#include "actormanager.h"
+
+#include "net/tmwa/protocol.h"
+
+#include "debug.h"
+
+namespace TmwAthena
+{
+
+void ItemRecv::processItemDropped(Net::MessageIn &msg)
+{
+ const BeingId id = msg.readBeingId("item object id");
+ const int itemId = msg.readInt16("item id");
+ const Identified identify = fromInt(msg.readUInt8("identify"), Identified);
+ const int x = msg.readInt16("x");
+ const int y = msg.readInt16("y");
+ const int subX = static_cast<int>(msg.readInt8("sub x"));
+ const int subY = static_cast<int>(msg.readInt8("sub y"));
+ const int amount = msg.readInt16("amount");
+
+ if (actorManager)
+ {
+ actorManager->createItem(id,
+ itemId,
+ x, y,
+ 0,
+ amount,
+ 0,
+ ItemColor_one,
+ identify,
+ Damaged_false,
+ subX, subY,
+ nullptr);
+ }
+}
+
+void ItemRecv::processItemVisible(Net::MessageIn &msg)
+{
+ const BeingId id = msg.readBeingId("item object id");
+ const int itemId = msg.readInt16("item id");
+ const Identified identified = fromInt(
+ msg.readUInt8("identify"), Identified);
+ const int x = msg.readInt16("x");
+ const int y = msg.readInt16("y");
+ const int amount = msg.readInt16("amount");
+ const int subX = static_cast<int>(msg.readInt8("sub x"));
+ const int subY = static_cast<int>(msg.readInt8("sub y"));
+
+ if (actorManager)
+ {
+ actorManager->createItem(id,
+ itemId,
+ x, y,
+ 0,
+ amount,
+ 0,
+ ItemColor_one,
+ identified,
+ Damaged_false,
+ subX, subY,
+ nullptr);
+ }
+}
+
+} // namespace TmwAthena
diff --git a/src/net/tmwa/itemrecv.h b/src/net/tmwa/itemrecv.h
new file mode 100644
index 000000000..86e8a1a5a
--- /dev/null
+++ b/src/net/tmwa/itemrecv.h
@@ -0,0 +1,39 @@
+/*
+ * The ManaPlus Client
+ * Copyright (C) 2004-2009 The Mana World Development Team
+ * Copyright (C) 2009-2010 The Mana Developers
+ * Copyright (C) 2011-2015 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_TMWA_ITEMRECV_H
+#define NET_TMWA_ITEMRECV_H
+
+#include "net/tmwa/messagehandler.h"
+
+#include "net/ea/itemhandler.h"
+
+namespace TmwAthena
+{
+ namespace ItemRecv
+ {
+ void processItemDropped(Net::MessageIn &msg);
+ void processItemVisible(Net::MessageIn &msg);
+ } // namespace ItemRecv
+} // namespace TmwAthena
+
+#endif // NET_TMWA_ITEMRECV_H