Index: 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;