aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMislav Blažević <krofnica996@gmail.com>2013-01-23 21:11:08 +0100
committerMislav Blažević <krofnica996@gmail.com>2013-01-24 08:59:14 +0100
commit54027803bdcdefb48007e791f02202a23bf10076 (patch)
tree4b21318b04fd24696291f509d58e3f72aa8f7e15 /src
parent0b6997b8af2ebd377b418235c62161e93a64ec5c (diff)
Fix error when swapping unique equipped weapon on dual wield
Also fix rings and trinkets
Diffstat (limited to 'src')
-rw-r--r--src/server/game/Entities/Player/Player.cpp34
1 files changed, 31 insertions, 3 deletions
diff --git a/src/server/game/Entities/Player/Player.cpp b/src/server/game/Entities/Player/Player.cpp
index 14878b078bd..208b24ea105 100644
--- a/src/server/game/Entities/Player/Player.cpp
+++ b/src/server/game/Entities/Player/Player.cpp
@@ -10735,7 +10735,7 @@ InventoryResult Player::CanStoreItem(uint8 bag, uint8 slot, ItemPosCountVec &des
{
if (no_space_count)
*no_space_count = count;
- return swap ? EQUIP_ERR_ITEMS_CANT_BE_SWAPPED :EQUIP_ERR_ITEM_NOT_FOUND;
+ return swap ? EQUIP_ERR_ITEMS_CANT_BE_SWAPPED : EQUIP_ERR_ITEM_NOT_FOUND;
}
if (pItem)
@@ -11490,8 +11490,36 @@ InventoryResult Player::CanEquipItem(uint8 slot, uint16 &dest, Item* pItem, bool
if (!swap && GetItemByPos(INVENTORY_SLOT_BAG_0, eslot))
return EQUIP_ERR_NO_EQUIPMENT_SLOT_AVAILABLE;
- // if swap ignore item (equipped also)
- InventoryResult res2 = CanEquipUniqueItem(pItem, swap ? eslot : uint8(NULL_SLOT));
+ // if we are swapping 2 equiped items, CanEquipUniqueItem check
+ // should ignore the item we are trying to swap, and not the
+ // destination item. CanEquipUniqueItem should ignore destination
+ // item only when we are swapping weapon from bag
+ uint8 ignore;
+ switch (eslot)
+ {
+ case EQUIPMENT_SLOT_MAINHAND:
+ ignore = EQUIPMENT_SLOT_OFFHAND;
+ break;
+ case EQUIPMENT_SLOT_OFFHAND:
+ ignore = EQUIPMENT_SLOT_MAINHAND;
+ break;
+ case EQUIPMENT_SLOT_FINGER1:
+ ignore = EQUIPMENT_SLOT_FINGER2;
+ break;
+ case EQUIPMENT_SLOT_FINGER2:
+ ignore = EQUIPMENT_SLOT_FINGER1;
+ break;
+ case EQUIPMENT_SLOT_TRINKET1:
+ ignore = EQUIPMENT_SLOT_TRINKET2;
+ break;
+ case EQUIPMENT_SLOT_TRINKET2:
+ ignore = EQUIPMENT_SLOT_TRINKET1;
+ break;
+ }
+ if (pItem != GetItemByPos(INVENTORY_SLOT_BAG_0, ignore))
+ ignore = eslot;
+
+ InventoryResult res2 = CanEquipUniqueItem(pItem, swap ? ignore : uint8(NULL_SLOT));
if (res2 != EQUIP_ERR_OK)
return res2;