00001 /* 00002 * The Mana World 00003 * Copyright (C) 2004 The Mana World Development Team 00004 * 00005 * This file is part of The Mana World. 00006 * 00007 * This program is free software; you can redistribute it and/or modify 00008 * it under the terms of the GNU General Public License as published by 00009 * the Free Software Foundation; either version 2 of the License, or 00010 * any later version. 00011 * 00012 * This program is distributed in the hope that it will be useful, 00013 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00014 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00015 * GNU General Public License for more details. 00016 * 00017 * You should have received a copy of the GNU General Public License 00018 * along with this program; if not, write to the Free Software 00019 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00020 */ 00021 00022 #include "net/ea/itemhandler.h" 00023 00024 #include "net/ea/protocol.h" 00025 00026 #include "net/messagein.h" 00027 00028 #include "engine.h" 00029 #include "flooritemmanager.h" 00030 00031 namespace EAthena { 00032 00033 ItemHandler::ItemHandler() 00034 { 00035 static const Uint16 _messages[] = { 00036 SMSG_ITEM_VISIBLE, 00037 SMSG_ITEM_DROPPED, 00038 SMSG_ITEM_REMOVE, 00039 0 00040 }; 00041 handledMessages = _messages; 00042 } 00043 00044 void ItemHandler::handleMessage(MessageIn &msg) 00045 { 00046 Uint32 id; 00047 Uint16 x, y; 00048 int itemId; 00049 00050 switch (msg.getId()) 00051 { 00052 case SMSG_ITEM_VISIBLE: 00053 case SMSG_ITEM_DROPPED: 00054 id = msg.readInt32(); 00055 itemId = msg.readInt16(); 00056 msg.readInt8(); // identify flag 00057 x = msg.readInt16(); 00058 y = msg.readInt16(); 00059 msg.skip(4); // amount,subX,subY / subX,subY,amount 00060 00061 floorItemManager->create(id, itemId, x, y, engine->getCurrentMap()); 00062 break; 00063 00064 case SMSG_ITEM_REMOVE: 00065 FloorItem *item; 00066 item = floorItemManager->findById(msg.readInt32()); 00067 if (item) 00068 floorItemManager->destroy(item); 00069 break; 00070 } 00071 } 00072 00073 } // namespace EAthena