diff options
author | Shauren <shauren.trinity@gmail.com> | 2011-03-10 23:52:13 +0100 |
---|---|---|
committer | Shauren <shauren.trinity@gmail.com> | 2011-03-10 23:52:13 +0100 |
commit | 0aa015d8975a203267183eaa6e73ac8ae3b4c185 (patch) | |
tree | a81d082ee7f9b14b479ecf47919abee67480fe8f /src | |
parent | b6074f90daf344d88471f8875dbea3fd3ccaee7d (diff) |
Core/Items: Don't allow equipping polearms/staves while offhand is not empty (Titan's Grip)
Diffstat (limited to 'src')
-rwxr-xr-x | src/server/game/Entities/Player/Player.cpp | 37 |
1 files changed, 25 insertions, 12 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp index e3e3936009c..b7c67a252ce 100755 --- a/src/server/game/Entities/Player/Player.cpp +++ b/src/server/game/Entities/Player/Player.cpp @@ -9435,7 +9435,7 @@ void Player::SetSheath(SheathState sheathed) uint8 Player::FindEquipSlot(ItemPrototype const* proto, uint32 slot, bool swap) const { - uint8 pClass = getClass(); + uint8 playerClass = getClass(); uint8 slots[4]; slots[0] = NULL_SLOT; @@ -9486,7 +9486,7 @@ uint8 Player::FindEquipSlot(ItemPrototype const* proto, uint32 slot, bool swap) slots[1] = EQUIPMENT_SLOT_TRINKET2; break; case INVTYPE_CLOAK: - slots[0] = EQUIPMENT_SLOT_BACK; + slots[0] = EQUIPMENT_SLOT_BACK; break; case INVTYPE_WEAPON: { @@ -9497,7 +9497,7 @@ uint8 Player::FindEquipSlot(ItemPrototype const* proto, uint32 slot, bool swap) if (CanDualWield()) slots[1] = EQUIPMENT_SLOT_OFFHAND; break; - }; + } case INVTYPE_SHIELD: slots[0] = EQUIPMENT_SLOT_OFFHAND; break; @@ -9506,13 +9506,26 @@ uint8 Player::FindEquipSlot(ItemPrototype const* proto, uint32 slot, bool swap) break; case INVTYPE_2HWEAPON: slots[0] = EQUIPMENT_SLOT_MAINHAND; - if (Item *mhWeapon = GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND)) - if (ItemPrototype const *mhWeaponProto = mhWeapon->GetProto()) + if (Item* mhWeapon = GetItemByPos(INVENTORY_SLOT_BAG_0, EQUIPMENT_SLOT_MAINHAND)) + { + if (ItemPrototype const* mhWeaponProto = mhWeapon->GetProto()) + { 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; } + } + } + + 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) slots[1] = EQUIPMENT_SLOT_OFFHAND; break; @@ -9542,26 +9555,26 @@ uint8 Player::FindEquipSlot(ItemPrototype const* proto, uint32 slot, bool swap) break; case INVTYPE_RELIC: { - switch(proto->SubClass) + switch (proto->SubClass) { case ITEM_SUBCLASS_ARMOR_LIBRAM: - if (pClass == CLASS_PALADIN) + if (playerClass == CLASS_PALADIN) slots[0] = EQUIPMENT_SLOT_RANGED; break; case ITEM_SUBCLASS_ARMOR_IDOL: - if (pClass == CLASS_DRUID) + if (playerClass == CLASS_DRUID) slots[0] = EQUIPMENT_SLOT_RANGED; break; case ITEM_SUBCLASS_ARMOR_TOTEM: - if (pClass == CLASS_SHAMAN) + if (playerClass == CLASS_SHAMAN) slots[0] = EQUIPMENT_SLOT_RANGED; break; case ITEM_SUBCLASS_ARMOR_MISC: - if (pClass == CLASS_WARLOCK) + if (playerClass == CLASS_WARLOCK) slots[0] = EQUIPMENT_SLOT_RANGED; break; case ITEM_SUBCLASS_ARMOR_SIGIL: - if (pClass == CLASS_DEATH_KNIGHT) + if (playerClass == CLASS_DEATH_KNIGHT) slots[0] = EQUIPMENT_SLOT_RANGED; break; } |