diff options
Diffstat (limited to 'src/net/equipmenthandler.cpp')
-rw-r--r-- | src/net/equipmenthandler.cpp | 214 |
1 files changed, 0 insertions, 214 deletions
diff --git a/src/net/equipmenthandler.cpp b/src/net/equipmenthandler.cpp deleted file mode 100644 index c0072a45..00000000 --- a/src/net/equipmenthandler.cpp +++ /dev/null @@ -1,214 +0,0 @@ -/* - * The Mana World - * Copyright 2004 The Mana World Development Team - * - * This file is part of The Mana World. - * - * The Mana World 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. - * - * The Mana World 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 The Mana World; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - * - * $Id$ - */ - -#include "equipmenthandler.h" - -#include "messagein.h" -#include "protocol.h" - -#include "../being.h" -#include "../beingmanager.h" -#include "../equipment.h" -#include "../item.h" -#include "../localplayer.h" -#include "../log.h" - -#include "../gui/chat.h" - -EquipmentHandler::EquipmentHandler() -{ - static const Uint16 _messages[] = { - SMSG_PLAYER_EQUIPMENT, - SMSG_PLAYER_EQUIP, - 0x01d7, - SMSG_PLAYER_UNEQUIP, - SMSG_PLAYER_ARROW_EQUIP, - SMSG_PLAYER_ATTACK_RANGE, - 0 - }; - handledMessages = _messages; -} - -void EquipmentHandler::handleMessage(MessageIn &msg) -{ - Sint32 itemCount; - Sint16 index, equipPoint, itemId; - Sint8 type; - int mask, position; - Being *being; - Item *item; - - switch (msg.getId()) - { - case SMSG_PLAYER_EQUIPMENT: - msg.readShort(); // length - itemCount = (msg.getLength() - 4) / 20; - - for (int loop = 0; loop < itemCount; loop++) - { - index = msg.readShort(); - itemId = msg.readShort(); - msg.readByte(); // type - msg.readByte(); // identify flag - msg.readShort(); // equip type - equipPoint = msg.readShort(); - msg.readByte(); // attribute - msg.readByte(); // refine - - player_node->addInvItem(index, itemId, 1, true); - - if (equipPoint) - { - mask = 1; - position = 0; - while (!(equipPoint & mask)) - { - mask <<= 1; - position++; - } - item = player_node->getInvItem(index); - player_node->mEquipment->setEquipment(position, item); - } - } - break; - - case SMSG_PLAYER_EQUIP: - index = msg.readShort(); - equipPoint = msg.readShort(); - type = msg.readByte(); - - logger->log("Equipping: %i %i %i", index, equipPoint, type); - - if (!type) { - chatWindow->chatLog("Unable to equip.", BY_SERVER); - break; - } - - if (!equipPoint) { - // No point given, no point in searching - break; - } - - // Unequip any existing equipped item in this position - mask = 1; - position = 0; - while (!(equipPoint & mask)) { - mask <<= 1; - position++; - } - logger->log("Position %i", position); - item = player_node->mEquipment->getEquipment(position); - if (item) { - item->setEquipped(false); - } - - item = player_node->getInvItem(index); - player_node->mEquipment->setEquipment(position, item); - player_node->setWeaponById(item->getId()); - break; - - case 0x01d7: - // Equipment related - being = beingManager->findBeing(msg.readLong()); - msg.readByte(); // equip point - itemId = msg.readShort(); - msg.readShort(); // item id 2 - - if (!being) - break; - - being->setWeaponById(itemId); - break; - - case SMSG_PLAYER_UNEQUIP: - index = msg.readShort(); - equipPoint = msg.readShort(); - type = msg.readByte(); - - if (!type) { - chatWindow->chatLog("Unable to unequip.", BY_SERVER); - break; - } - - if (!equipPoint) { - // No point given, no point in searching - break; - } - - mask = 1; - position = 0; - while (!(equipPoint & mask)) { - mask <<= 1; - position++; - } - - item = player_node->getInvItem(index); - - if (!item) - break; - - item->setEquipped(false); - - switch (item->getId()) { - case 529: - case 1199: - player_node->mEquipment->setArrows(NULL); - break; - case 521: - case 522: - case 530: - case 536: - case 1200: - case 1201: - player_node->setWeapon(0); - // TODO: Why this break? Shouldn't a weapon be - // unequipped in inventory too? - break; - default: - player_node->mEquipment->removeEquipment(position); - break; - } - logger->log("Unequipping: %i %i(%i) %i", - index, equipPoint, type, position); - break; - - case SMSG_PLAYER_ATTACK_RANGE: - player_node->setAttackRange(msg.readShort()); - break; - - case SMSG_PLAYER_ARROW_EQUIP: - itemId = msg.readShort(); - - if (itemId <= 1) - break; - - item = player_node->getInvItem(itemId); - if (!item) - break; - - item->setEquipped(true); - player_node->mEquipment->setArrows(item); - logger->log("Arrows equipped: %i", itemId); - break; - } -} |