Core/Items: Don't allow equipping polearms/staves while offhand is not empty (Titan's Grip)
This commit is contained in:
@@ -9435,7 +9435,7 @@ void Player::SetSheath(SheathState sheathed)
|
|||||||
|
|
||||||
uint8 Player::FindEquipSlot(ItemPrototype const* proto, uint32 slot, bool swap) const
|
uint8 Player::FindEquipSlot(ItemPrototype const* proto, uint32 slot, bool swap) const
|
||||||
{
|
{
|
||||||
uint8 pClass = getClass();
|
uint8 playerClass = getClass();
|
||||||
|
|
||||||
uint8 slots[4];
|
uint8 slots[4];
|
||||||
slots[0] = NULL_SLOT;
|
slots[0] = NULL_SLOT;
|
||||||
@@ -9497,7 +9497,7 @@ uint8 Player::FindEquipSlot(ItemPrototype const* proto, uint32 slot, bool swap)
|
|||||||
if (CanDualWield())
|
if (CanDualWield())
|
||||||
slots[1] = EQUIPMENT_SLOT_OFFHAND;
|
slots[1] = EQUIPMENT_SLOT_OFFHAND;
|
||||||
break;
|
break;
|
||||||
};
|
}
|
||||||
case INVTYPE_SHIELD:
|
case INVTYPE_SHIELD:
|
||||||
slots[0] = EQUIPMENT_SLOT_OFFHAND;
|
slots[0] = EQUIPMENT_SLOT_OFFHAND;
|
||||||
break;
|
break;
|
||||||
@@ -9506,13 +9506,26 @@ uint8 Player::FindEquipSlot(ItemPrototype const* proto, uint32 slot, bool swap)
|
|||||||
break;
|
break;
|
||||||
case INVTYPE_2HWEAPON:
|
case INVTYPE_2HWEAPON:
|
||||||
slots[0] = EQUIPMENT_SLOT_MAINHAND;
|
slots[0] = EQUIPMENT_SLOT_MAINHAND;
|
||||||
if (Item *mhWeapon = GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND))
|
if (Item* mhWeapon = GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND))
|
||||||
if (ItemPrototype const *mhWeaponProto = mhWeapon->GetProto())
|
{
|
||||||
|
if (ItemPrototype const* mhWeaponProto = mhWeapon->GetProto())
|
||||||
|
{
|
||||||
if (mhWeaponProto->SubClass == ITEM_SUBCLASS_WEAPON_POLEARM || mhWeaponProto->SubClass == ITEM_SUBCLASS_WEAPON_STAFF)
|
if (mhWeaponProto->SubClass == ITEM_SUBCLASS_WEAPON_POLEARM || mhWeaponProto->SubClass == ITEM_SUBCLASS_WEAPON_STAFF)
|
||||||
{
|
{
|
||||||
const_cast<Player *>(this)->AutoUnequipOffhandIfNeed(true);
|
const_cast<Player*>(this)->AutoUnequipOffhandIfNeed(true);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (Item* ohWeapon = GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_OFFHAND))
|
||||||
|
{
|
||||||
|
if (proto->SubClass == ITEM_SUBCLASS_WEAPON_POLEARM || proto->SubClass == ITEM_SUBCLASS_WEAPON_STAFF)
|
||||||
|
{
|
||||||
|
const_cast<Player*>(this)->AutoUnequipOffhandIfNeed(true);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
if (CanDualWield() && CanTitanGrip() && proto->SubClass != ITEM_SUBCLASS_WEAPON_POLEARM && proto->SubClass != ITEM_SUBCLASS_WEAPON_STAFF)
|
if (CanDualWield() && CanTitanGrip() && proto->SubClass != ITEM_SUBCLASS_WEAPON_POLEARM && proto->SubClass != ITEM_SUBCLASS_WEAPON_STAFF)
|
||||||
slots[1] = EQUIPMENT_SLOT_OFFHAND;
|
slots[1] = EQUIPMENT_SLOT_OFFHAND;
|
||||||
break;
|
break;
|
||||||
@@ -9542,26 +9555,26 @@ uint8 Player::FindEquipSlot(ItemPrototype const* proto, uint32 slot, bool swap)
|
|||||||
break;
|
break;
|
||||||
case INVTYPE_RELIC:
|
case INVTYPE_RELIC:
|
||||||
{
|
{
|
||||||
switch(proto->SubClass)
|
switch (proto->SubClass)
|
||||||
{
|
{
|
||||||
case ITEM_SUBCLASS_ARMOR_LIBRAM:
|
case ITEM_SUBCLASS_ARMOR_LIBRAM:
|
||||||
if (pClass == CLASS_PALADIN)
|
if (playerClass == CLASS_PALADIN)
|
||||||
slots[0] = EQUIPMENT_SLOT_RANGED;
|
slots[0] = EQUIPMENT_SLOT_RANGED;
|
||||||
break;
|
break;
|
||||||
case ITEM_SUBCLASS_ARMOR_IDOL:
|
case ITEM_SUBCLASS_ARMOR_IDOL:
|
||||||
if (pClass == CLASS_DRUID)
|
if (playerClass == CLASS_DRUID)
|
||||||
slots[0] = EQUIPMENT_SLOT_RANGED;
|
slots[0] = EQUIPMENT_SLOT_RANGED;
|
||||||
break;
|
break;
|
||||||
case ITEM_SUBCLASS_ARMOR_TOTEM:
|
case ITEM_SUBCLASS_ARMOR_TOTEM:
|
||||||
if (pClass == CLASS_SHAMAN)
|
if (playerClass == CLASS_SHAMAN)
|
||||||
slots[0] = EQUIPMENT_SLOT_RANGED;
|
slots[0] = EQUIPMENT_SLOT_RANGED;
|
||||||
break;
|
break;
|
||||||
case ITEM_SUBCLASS_ARMOR_MISC:
|
case ITEM_SUBCLASS_ARMOR_MISC:
|
||||||
if (pClass == CLASS_WARLOCK)
|
if (playerClass == CLASS_WARLOCK)
|
||||||
slots[0] = EQUIPMENT_SLOT_RANGED;
|
slots[0] = EQUIPMENT_SLOT_RANGED;
|
||||||
break;
|
break;
|
||||||
case ITEM_SUBCLASS_ARMOR_SIGIL:
|
case ITEM_SUBCLASS_ARMOR_SIGIL:
|
||||||
if (pClass == CLASS_DEATH_KNIGHT)
|
if (playerClass == CLASS_DEATH_KNIGHT)
|
||||||
slots[0] = EQUIPMENT_SLOT_RANGED;
|
slots[0] = EQUIPMENT_SLOT_RANGED;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user