WoW:Item equipping
Without macros
Note that the need for macro juggling to switch equipment is all but gone with the advent of AddOns such as [ItemRack]. Heck, it can even be controlled from a macro if you like :-)
Basics
/script PickupContainerItem(bag, slot)
Bags count from 0 to 4 from the right, 0 being your backpack and 4 being your leftmost pack. Slots are numbered starting at the topmost, leftmost slot and counting left to right, top to bottom. For example, a 10-slot pack is numbered like this:
X X 1 2
3 4 5 6
7 8 9 10
To access the first slot on the leftmost bag, the script would be /script PickUpContainerItem (4, 1);
The basic command works like this:
- If no item in cursor:
- If item in bag:slot - picks up the item and puts it on the cursor.
- If no item in bag:slot - does nothing
- If item on cursor
- If item in bag:slot - switches the item in the bag:slot with the one on the cursor.
- If no item in bag:slot - puts down item from cursor into bag:slot
/script PickupInventoryItem(inventorySlot)
Picks up/puts down/switches item into the specified slot.
See InventorySlots for ids and mappings.
Better method:
/script UseContainerItem(bag, slot);
Will automatically equip the item referenced by bag,slot, placing any existing already equipped item in the bag slot.
Yes, this is undoubtedly easier... until you start dealing with dualwielding. At which point UseContainerItem stops being nice. -- Sarf
Please be very careful when using the UseContainerItem(bag,slot) command. If you are talking to a vendor and use this macro (assuming no safety measures in the script) then all your macro items will be sold. Just managed to sell 7 items to a vendor. Fortunately, I was able to retrieve the last item and blizzard restored the other equipment items for me.
For those of us that are prone to doing this you can do a check to see if you are interacting with an NPC. example weaponswap(2H <-> 1H/OH):
/script TargetUnit("npc");
if ( UnitName("target") == nil or not UnitIsUnit("target","npc") )
then
if ( not CursorHasItem() ) then
PickupInventoryItem(offHandInventory);
PickupContainerItem(offHandBag,offHandSlot);
UseContainerItem(mainHandBag,mainHandSlot);
UseContainerItem(offHandBag,offHandSlot);
end
end
-- Trinkit
The best method for ensuring that you do not accidentally sell anything to a vendor is:
/script CloseMerchant();
The aforementioned if-then script can still fail if you are in a vendor window and target another entity, whereas the CloseMerchant script will always close any merchant window. It's also much shorter, so you can fit more lines of item swapping into the character-limited macro box. --TheRayven
Multiple commands
There is a problem when executing multiple Pickup commands because they execute instantaneously on your client, which is not always synched with the server.
Therefore, follow these simple guidelines:
- Check if the cursor has an item on it and execute all your pickup commands on the same line.
Example:
if ( not CursorHasItem() ) then PickupContainerItem(...); ... end - Pickup items once, and drop them once for one macro.
Good luck!
Weapon swapping scripts
NOTE: When copying the scripts, make sure they end up on ONE line. Also, you will NEED to change the offhandBag, offhandBagSlot and mainhandBag, mainhandBagSlot names to actual numbers, as the scripts will NOT fit in a macro as it is.
From mainhand/offhand to mainhand/offhand
Script to swap items in both hands to other items in both hands. offhandBag, offhandBagSlot and mainhandBag, mainhandBagSlot need to be specified (duh).
/script if ( not CursorHasItem() ) then PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); PickupContainerItem(mainhandBag, mainhandBagSlot); PickupContainerItem(offhandBag, offhandBagSlot); PickupInventoryItem(17); PickupContainerItem(offhandBag, offhandBagSlot); end
From mainhand to mainhand/offhand
Script to switch from item in main hand to other items in both hands. offhandBag, offhandBagSlot and mainhandBag, mainhandBagSlot need to be specified (duh). Weapon in main hand will end up in mainhandBag, mainhandBagSlot.
/script if ( not CursorHasItem() ) then PickupContainerItem(4, 2); PickupInventoryItem(16); PickupContainerItem(4, 1); PickupContainerItem(4, 2); PickupInventoryItem(17); if ( CursorHasItem() ) then PickupContainerItem(4, 2); end
Switch from a 2h to 1h+shield
/script if ( not CursorHasItem() ) then PickupInventoryItem(17); if ( CursorHasItem() ) then PickupContainerItem(offhandBag, offhandBagSlot); end PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); PickupContainerItem(mainhandBag, mainhandBagSlot); end
Any to Any
Script to swap from one set of weapons to another, in any combination. I've included an expanded version of the somewhat obfuscated code, although it's a too long to be usable itself. The CloseMerchant() call is included for safety reasons.
The shorter version uses bag 3, slot 5 for the main weapon and bag 4, slot 6 for the offhand item, whereas the expanded version uses more descriptive terms for those locations.
Note that the held weapons will end up in those inventory slots after the swap, so if you're swapping between a two-handed weapon and a one-handed + offhand configuration, you'll need to leave the offhand bag slot empty while you're wielding it, or swapping it out won't work properly.
/script local a,b,c=CursorHasItem,PickupInventoryItem,PickupContainerItem;if(not a())then CloseMerchant();b(17);if(a())then c(4,6);c(4,5);b(16)else c(4,5);b(16);c(4,6);b(17)end end
/script if ( not CursorHasItem() )then CloseMerchant(); PickupInventoryItem(17); if ( CursorHasItem() ) then PickupContainerItem(offhandBag, offhandBagSlot); PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); else PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); PickupContainerItem(offhandBag, offhandBagSlot); PickupInventoryItem(17); end end
From mainhand to mainhand
Script to switch from item in main hand to another item in the main hand. mainhandBag, mainhandBagSlot need to be specified (duh). The equipped weapon will end up on mainhandBag, mainhandBagSlot.
/script if ( not CursorHasItem() ) then PickupContainerItem(mainhandBag, mainhandBagSlot); PickupInventoryItem(16); PickupContainerItem(mainhandBag, mainhandBagSlot); end
Swap Mainhand and Offhand Weapons
This script is pretty simple. On my rogue I wanted to switch my offhand to my mainhand, and vice-versa (use dagger for ambush, then swap so I can SS with the sword). You can accomplish this with a very simple macro that will swap back and forth each time you use it. -- Loganis
/script if ( not CursorHasItem() ) then PickupInventoryItem(17); PickupInventoryItem(16); end
With Cosmos
If you are using Cosmos, you can use the following commands :
/saveset <Number> /loadset <Number>