rendered paste bodyIndex: Player.cpp
===================================================================
--- Player.cpp (revision 3893)
+++ Player.cpp (working copy)
@@ -6528,8 +6528,10 @@
SetUInt32Value(UNIT_FIELD_BYTES_2, 0x2800+sheathed); // this must visualize Sheath changing for other players...
}
-uint8 Player::FindEquipSlot( uint32 type, uint32 slot, bool swap ) const
-{
+uint8 Player::FindEquipSlot( uint32 type, uint32 slot, bool swap, Item *pItem ) const
+ {
+ ItemPrototype const *pProto = pItem->GetProto();
+ uint8 pClass = getClass();
uint8 slots[4];
slots[0] = NULL_SLOT;
slots[1] = NULL_SLOT;
@@ -6624,8 +6626,23 @@
slots[3] = INVENTORY_SLOT_BAG_4;
break;
case INVTYPE_RELIC:
- slots[0] = EQUIPMENT_SLOT_RANGED;
- break;
+ {
+ switch(pProto->SubClass)
+ {
+ case ITEM_SUBCLASS_ARMOR_LIBRAM:
+ if (pClass == CLASS_PALADIN)
+ slots[0] = EQUIPMENT_SLOT_RANGED;
+ break;
+ case ITEM_SUBCLASS_ARMOR_IDOL:
+ if (pClass == CLASS_DRUID)
+ slots[0] = EQUIPMENT_SLOT_RANGED;
+ break;
+ case ITEM_SUBCLASS_ARMOR_TOTEM:
+ if (pClass == CLASS_SHAMAN)
+ slots[0] = EQUIPMENT_SLOT_RANGED;
+ break;
+ }
+ };break;
default :
return NULL_SLOT;
}
@@ -7605,7 +7622,7 @@
return EQUIP_ERR_CANT_DO_RIGHT_NOW; // maybe exist better err
uint32 type = pProto->InventoryType;
- uint8 eslot = FindEquipSlot( type, slot, swap );
+ uint8 eslot = FindEquipSlot( type, slot, swap, pItem );
if( eslot == NULL_SLOT )
return EQUIP_ERR_ITEM_CANT_BE_EQUIPPED;
Index: Player.h
===================================================================
--- Player.h (revision 3893)
+++ Player.h (working copy)
@@ -744,7 +744,7 @@
void SetVirtualItemSlot( uint8 i, Item* item);
void SetSheath( uint32 sheathed );
- uint8 FindEquipSlot( uint32 type, uint32 slot, bool swap ) const;
+ uint8 FindEquipSlot( uint32 type, uint32 slot, bool swap, Item *pItem ) const;
Item* CreateItem( uint32 item, uint32 count ) const;
uint32 GetItemCount( uint32 item, Item* eItem = NULL ) const;
uint32 GetBankItemCount( uint32 item, Item* eItem = NULL ) const;