Core/Items: Don't allow equipping polearms/staves while offhand is not empty (Titan's Grip)

This commit is contained in:
Shauren
2011-03-10 23:52:13 +01:00
parent b6074f90da
commit 0aa015d897
+24 -11
View File
@@ -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;
} }