如何获取Item

获取 Item 使用 Player.cpp 的两个方法:

Item* GetItemByPos(uint16 pos) const; // 方法一
Item* GetItemByPos(uint8 bag, uint8 slot) const; // 方法二

方法一调用的就是方法二,两者的区别很小,先只说方法二。

方法二传入两个参数,bag(指定哪个包包)和 slot(指定哪个格子)。

Item 的分类

这个方法可以取到所有的装备,这些装备分为几类:

  1. 身上的装备栏 EquipmentSlots
  2. 默认的包包 InventorySlots
  3. 身上的包包栏(装备包包的那4个格子) InventoryPackSlots
  4. 默认的银行 BankItemSlots
  5. 银行的包包栏 BankBagSlots
  6. 回购的装备 BuyBackSlots
  7. 钥匙包 KeyRingSlots
  8. 普通的包包

第 1 - 7 类 Item 的 bag 和 slot

除了普通包包的装备(第 8 类)以外,其他装备的 bag 参数都应指定为 INVENTORY_SLOT_BAG_0。

slot 参数则按照下面的顺序指定,从 0 到 97 一共 98 个装备。

如头:getItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_HEAD);

如出生包包的第一格:getItemByPos(INVENTORY_SLOT_BAG_0, INVENTORY_SLOT_ITEM_START);

如钥匙包第一格:getItemByPos(INVENTORY_SLOT_BAG_0, KEYRING_SLOT_START);

enum EquipmentSlots                                         // 19 slots
{
    EQUIPMENT_SLOT_START        = 0,
    EQUIPMENT_SLOT_HEAD         = 0,
    EQUIPMENT_SLOT_NECK         = 1,
    EQUIPMENT_SLOT_SHOULDERS    = 2,
    EQUIPMENT_SLOT_BODY         = 3,
    EQUIPMENT_SLOT_CHEST        = 4,
    EQUIPMENT_SLOT_WAIST        = 5,
    EQUIPMENT_SLOT_LEGS         = 6,
    EQUIPMENT_SLOT_FEET         = 7,
    EQUIPMENT_SLOT_WRISTS       = 8,
    EQUIPMENT_SLOT_HANDS        = 9,
    EQUIPMENT_SLOT_FINGER1      = 10,
    EQUIPMENT_SLOT_FINGER2      = 11,
    EQUIPMENT_SLOT_TRINKET1     = 12,
    EQUIPMENT_SLOT_TRINKET2     = 13,
    EQUIPMENT_SLOT_BACK         = 14,
    EQUIPMENT_SLOT_MAINHAND     = 15,
    EQUIPMENT_SLOT_OFFHAND      = 16,
    EQUIPMENT_SLOT_RANGED       = 17,
    EQUIPMENT_SLOT_TABARD       = 18,
    EQUIPMENT_SLOT_END          = 19
};

enum InventorySlots                                         // 4 slots
{
    INVENTORY_SLOT_BAG_START    = 19,
    INVENTORY_SLOT_BAG_END      = 23
};

enum InventoryPackSlots                                     // 16 slots
{
    INVENTORY_SLOT_ITEM_START   = 23,
    INVENTORY_SLOT_ITEM_END     = 39
};

enum BankItemSlots                                          // 28 slots
{
    BANK_SLOT_ITEM_START        = 39,
    BANK_SLOT_ITEM_END          = 63
};

enum BankBagSlots                                           // 7 slots
{
    BANK_SLOT_BAG_START         = 63,
    BANK_SLOT_BAG_END           = 69
};

enum BuyBackSlots                                           // 12 slots
{
    // stored in m_buybackitems
    BUYBACK_SLOT_START          = 69,
    BUYBACK_SLOT_END            = 81
};

enum KeyRingSlots                                           // 32 slots
{
    KEYRING_SLOT_START          = 81,
    KEYRING_SLOT_END            = 97
};

第 8 类 Item 的 bag 和 slot

普通包包的装备的 bag 参数,就是上面的第 3 类和第 5 类的 slot 值。

slot 参数则是包里的第几个格子。

如第一个包包(注意:第一个包包不是指出生的十六格包)的第一个格子:getItemByPos(INVENTORY_SLOT_BAG_START, 1);

如第二个包包的第二个格子:getItemByPos(INVENTORY_SLOT_BAG_START + 1, 2);

如第三个包包的第三个格子:getItemByPos(INVENTORY_SLOT_BAG_START + 2, 3);

如第四个包包的第四个格子:getItemByPos(INVENTORY_SLOT_BAG_END, 4);

结束

results matching ""

    No results matching ""