summaryrefslogtreecommitdiff
path: root/src/game-server/inventory.hpp
diff options
context:
space:
mode:
authorGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-01-03 17:10:43 +0000
committerGuillaume Melquiond <guillaume.melquiond@gmail.com>2007-01-03 17:10:43 +0000
commit1673de8b5553f6dcd4898c84b8d44ba8b30740f1 (patch)
tree3dcc47461a6b4914c4e81492e7be885c3a1502ea /src/game-server/inventory.hpp
parent6b7441516002d6e7cca424416bb67c6bc7d7c9d2 (diff)
downloadmanaserv-1673de8b5553f6dcd4898c84b8d44ba8b30740f1.tar.gz
manaserv-1673de8b5553f6dcd4898c84b8d44ba8b30740f1.tar.bz2
manaserv-1673de8b5553f6dcd4898c84b8d44ba8b30740f1.tar.xz
manaserv-1673de8b5553f6dcd4898c84b8d44ba8b30740f1.zip
Split persistent player data from game server data. Enabled inventory code back.
Diffstat (limited to 'src/game-server/inventory.hpp')
-rw-r--r--src/game-server/inventory.hpp233
1 files changed, 233 insertions, 0 deletions
diff --git a/src/game-server/inventory.hpp b/src/game-server/inventory.hpp
new file mode 100644
index 00000000..61bc5818
--- /dev/null
+++ b/src/game-server/inventory.hpp
@@ -0,0 +1,233 @@
+/*
+ * The Mana World Server
+ * 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$
+ */
+
+#ifndef INVENTORY_H
+#define INVENTORY_H
+
+#include "game-server/being.hpp"
+
+enum
+{
+// items in inventory :
+ MAX_ITEMS_IN_INVENTORY = 50, // Max 252.
+// Equipment rules:
+// 1 Brest equipment
+ EQUIP_BREST_SLOT = 0,
+// 1 arms equipment
+ EQUIP_ARMS_SLOT = 1,
+// 1 head equipment
+ EQUIP_HEAD_SLOT = 2,
+// 1 legs equipment
+ EQUIP_LEGS_SLOT = 3,
+// 1 feet equipment
+ EQUIP_FEET_SLOT = 4,
+// 2 rings
+ EQUIP_RING1_SLOT = 5,
+ EQUIP_RING2_SLOT = 6,
+// 1 necklace
+ EQUIP_NECKLACE_SLOT = 7,
+// Fight:
+// 2 one-handed weapons
+ EQUIP_FIGHT1_SLOT = 8,
+ EQUIP_FIGHT2_SLOT = 9,
+// or 1 two-handed weapon
+// or 1 one-handed weapon + 1 shield.
+// Projectiles
+ EQUIP_PROJECTILES_SLOT = 10,
+// = 10 total slots for equipment.
+ TOTAL_EQUIPMENT_SLOTS = 11,
+// Error codes
+ NOT_EQUIPPABLE = 253,
+ NO_ITEM_TO_EQUIP = 254,
+ INVENTORY_FULL = 255
+};
+
+/**
+ * Stored Item only contains id reference to items
+ * in the order not to carry every item info for each carried items
+ * in the inventory.
+ * Also contains amount.
+ */
+struct StoredItem
+{
+ unsigned int itemId;
+ unsigned char amount;
+};
+
+/**
+ * Equipped items that keeps which kind of item is in equipment.
+ */
+struct EquippedItem
+{
+ unsigned int itemId;
+ short itemType;
+};
+
+/**
+ * Class used to store minimal info on player's inventories
+ * to keep it fast.
+ * See Item and ItemManager to get more info on an item.
+ */
+class Inventory
+{
+ public:
+ /**
+ * Convenience function to get slot from ItemId.
+ * If more than one occurence is found, the first is given.
+ */
+ unsigned char
+ getSlotFromId(unsigned int itemId);
+
+ /**
+ * Return StoredItem
+ */
+ StoredItem
+ getStoredItemAt(unsigned char slot) const { return itemList[slot]; };
+
+ /**
+ * Search in inventory and equipment if an item is present.
+ */
+ bool
+ hasItem(unsigned int itemId,
+ bool searchInInventory = true,
+ bool searchInEquipment = true);
+
+ /**
+ * Tells an item's amount
+ */
+ unsigned short
+ getItemAmount(unsigned char slot) const { return itemList[slot].amount; };
+
+ /**
+ * Return Item reference Id
+ */
+ unsigned int
+ getItemId(unsigned char slot) const { return itemList[slot].itemId; };
+
+ /**
+ * add an item with amount
+ * (don't create it if amount was 0)
+ * @return short value: Indicates the number of items added.
+ */
+ short
+ addItem(unsigned int itemId, unsigned char amount = 1);
+
+ /**
+ * Remove an item searched by ItemId.
+ * Delete if amount = 0.
+ * @return short value: Indicates the number of items removed.
+ * This function removes the given amount using every slots
+ * if necessary.
+ */
+ short
+ removeItem(unsigned int itemId, unsigned char amount = 0);
+
+ /**
+ * Remove an item searched by slot index.
+ * Delete if amount = 0.
+ * @return short value: Indicates the number of items removed.
+ * Removes only in the given slot.
+ */
+ short
+ removeItem(unsigned char slot, unsigned char amount = 0);
+
+ /**
+ * Equip an item searched by its id.
+ * Can equip more than one item at a time.
+ * @return unsigned char value: Returns the slot if successful
+ * or the error code if not.
+ */
+ unsigned char
+ equipItem(unsigned int itemId);
+
+ /**
+ * Unequip an item searched by its id.
+ * Can unequip more than one item at a time.
+ */
+ bool
+ unequipItem(unsigned int itemId);
+
+ /**
+ * Equip an item searched by its slot index.
+ */
+ bool
+ equipItem(unsigned char inventorySlot, unsigned char equipmentSlot);
+
+ /**
+ * Unequip an equipped item searched by its slot index.
+ */
+ bool
+ unequipItem(unsigned char inventorySlot, unsigned char equipmentSlot);
+
+ /**
+ * The function called to use an item applying
+ * only the modifiers
+ */
+ bool
+ use(unsigned char slot, BeingPtr itemUser);
+
+ /**
+ * The function called to use an item applying
+ * only the modifiers
+ */
+ bool
+ use(unsigned int itemId, BeingPtr itemUser);
+
+ private:
+
+ /**
+ * Give the first free slot number in itemList.
+ */
+ unsigned char getInventoryFreeSlot();
+
+ /**
+ * Quick equip an equipment with a given equipSlot,
+ * an itemId and an itemType.
+ * @return the equipment slot if successful,
+ * the error code, if not.
+ */
+ unsigned char equipItem_(unsigned int itemId,
+ unsigned int itemType,
+ unsigned char equipmentSlot);
+
+ /**
+ * Quick unequip an equipment with a given equipSlot,
+ * and an itemId.
+ * @return the Equipment slot if successful,
+ * the error code, if not.
+ */
+ unsigned char unequipItem_(unsigned int itemId,
+ unsigned char equipmentSlot);
+
+
+ // Stored items in inventory and equipment
+ std::vector<StoredItem> itemList; /**< Items in inventory */
+ std::vector<EquippedItem> equippedItemList; /**< Equipped Items */
+ /**
+ * Used to know which type of arrow is used with a bow,
+ * for instance
+ */
+ StoredItem equippedProjectiles;
+};
+
+#endif