Flex Bar
Yet another in the long list of extra button bars.
At its heart FlexBar provides 96 extra buttons that you can hide/show independently,
move where ever you want and lock into place. With grouping, auto arrangement
of buttons in a group and and a variety of appearance specific commands, you can
make your buttons look anyway you like.
If that's all you need from your extra button bar, simply read the Basic Usage
section and configure it to your heart's delight. Just remember, Flexbar also
has the ability to apply many of it's actions on game events -- such as when you
gain or lose aggro or your stance changes (among many others).
For details on how to use that see Advanced Usage: Events
IMPORTANT: In all the commands. If the value is a number, range of numbers or
set of numbers you do not need quotes around the numbers. EG button=5, target=1-4,
button=[1 3 5]. If the value is a word you need single quotes. EG On='MouseEnterGroup'.
All commands, events and named targets are now case insensitive (as of V1.22)
IMPORTANT NOTE FOR USERS OF EARLIER VERSIONS: Please delete the old FlexBar folder
from your addon's folder, start WoW and log in/log out BEFORE installing V1.2.
Some of the config variable data structures have changed and not doing this will
cause errors.
This only applies to users of versions earlier than 1.2.
Basic Usage
If you've never installed a mod before, you have a couple of small tasks ahead
of you.
1. Inside your World of Warcraft folder, create a folder named Interface (if
it doesn't already exist)
2. Inside the Interface folder, create a folder named Addons
3. Download
Flex Bar, and unzip it in the addons directory. If you have already unzipped it (and
are reading this from its directory) then simply copy the FlexBar directory into
the Addons directory.
now, simply log in to World of Warcraft.
If you are already logged in, type /console reloadui at the command line to load
the mod.
At this time there should be NO buttons showing. They're there, just hidden.
If, instead,
you see a huge grid of 96 buttons - then simply type /flexbar hide button=1-96
to get to a pristine
state.
On logging in you should see (in the chat box) "Flexbar V1.2 loaded."
Basic commands
In order to work with buttons, we have to be able to see them. The command for
that is:
/flexbar Show Button=<button numbers>
<button numbers> can be any number from 1 to 96, a range of numbers in the
form #-# where number is from 1 to 96, or a set of numbers [ # # # # ]
Note -- Anytime you see Button=<button numbers> you can use these.
Examples:
/flexbar Show Button=1
/flexbar Show Button=1-3
/flexbar Show Button=[ 1 3 5 ]
In order to get unused buttons out of the way simply type:
/flexbar Hide Button=<button numbers>
All the button's other attributes stay unchanged, it's just hidden.
Once you have the buttons you want showing, you want to move them where they
will fit your screen: At the upper left of the button is a small handle. Click
and drag here to move the button.
Once you have a button where you want it, you want to avoid moving it accidentally,
the command for this is:
/flexbar Lock Button=<button numbers>
To unlock the button and allow dragging again simply type:
/flexbar unlock Button=<button numbers>
There are a number of commands associated with changing the appearance of a button.
Some of these may not have obvious uses until you read the Events section, as
they are meant to provide visual feed back to such things as the action on the
button being in range.
Typing
/Flexbar Appearance
will show the ingame help for the following commands:
/FlexBar Hide Button=<button numbers>
/FlexBar Show Button=<button numbers>
/FlexBar Scale Button=<button numbers> Scale=<scale> [reset='true']
/Flexbar Fade Button=<button numbers> Alpha=<alpha>
/Flexbar Shade Button=<button numbers Color=<[ r g b ]>
We've covered Hide/Show.
Scale allows you to change the relative size of the button. Scale can range from
5 to 50. Please note, my parser doesn't do decimals at the moment, so 5 is .5,
10 is 1.0, 20 is 2.0 and so on. Simply multiply the desired scale by 10 to get
the right one. This also applies to alpha and the r,g,b components of color.
Fade allows you to change the transparency of a button. 10 is fully opaque, 1
is nearly transparent. IMPORTANT: When a button is hidden with /Flexbar Hide,
it is unclickable. When it is simply invisible with an alpha of 1 you can click
it. Please be aware of this.
Shade allows you to apply a color mask to a button. A color of [10 10 10] leaves
no change to the icon. A color of [10 5 5] will overlay a red tint on the button.
Experiment with the various colors to see the effects. r,g,b can range from 0
to 10.
Additionally /flexbar shade takes an optional reset='true' parameter. If this
is specified then there will be no color applied to the icon and the icon shading
will return to the default WoW behavior (which includes shading for not enough
mana). You still must specify a color, but it is ignored.
All the above commands take an optional Toggle=<toggle> argument. If the button
is already in the state you're asking it to change to, and toggle is present,
it switches to the state in toggle.
Examples:
/FlexBar Hide Button=1 toggle='true'
will hide button 1 if it's showing, but show it if it's hidden. This is actually
identical to:
/FlexBar Show Button=1 toggle='true'
The following will switch the button between 70% size and full size:
/FlexBar Scale Button=1 Scale=7 Toggle=10
The following will toggle a button between fully opaque and nearly invisible
/FlexBar Fade Button=1 Alpha=3 Toggle=10
Finally, the following will toggle a red overlay on and off over the button:
/FlexBar Shade Button=1 Color=[ 10 5 5 ] Toggle=[ 10 10 10 ]
Typing
/FlexBar Movement
Will bring up the following in game help
/FlexBar Lock Button=<button numbers>
/FlexBar Unlock Button=<button numbers>
/FlexBar MoveABS Button=<button> XX=<x-coord> YY=<y-coord>
/FlexBar MoveRel Button=<button> TrgBtn=<button> dX=<dx> dY=<dy>
/FlexBar MoveToMouse Button=<button> dX=<dx> dY=<dy>
We've covered Lock/Unlock
A note about the movement commands:
1. All move commands take only a single button for an argument
MoveABS moves the button so that its top left corner (where handle and button
meet) is at the specified coordinates. X coordinates start at 0 at the left of
the screen and increase to the right. Y coordinates start at the bottom of the
screen and increase to the top.
MoveRel moves the button to that its top left corner is dx to the right and dy
above the top left of the specified target button.
Note, as with many of the commands, there is very little bounds checking. You
can send a button somewhere off in the galaxy. Whether this only makes it invisible
or may cause other game problems is unknown. Be careful with this.
Typing
/FlexBar MiscHelp
Will show the following commands (I'm leaving 2 out at the moment, they are intended
for Event reaction and serve no purpose in the basic discussion)
/FlexBar HideGrid Button=<button numbers>
/FlexBar ShowGrid Button=<button numbers>
/FlexBar LockIcon Button=<button numbers> [Off='true']
/FlexBar Text Button=<button numbers> Text='text'
HideGrid and ShowGrid can be used to make buttons with no actions on them hide
until you drag an action - then they pop up to allow you to place the action.
LockIcon will force you to shift-click to drag the action off the specified button.
This will keep you from dragging actions off your buttons in combat. If the optional
Off parameter is included it turns off the icon lock and buttons drag like normal.
Text allows you to set the text that appears in the upper right of the button.
Keep in mind that the space is only 3-4 characters long. There are 3 special settings
for this available in 1.2:
Setting it to '%b' will show the hotkey associated with that button
Setting it to '%d' will show the button number
Setting it to '%c' will show the cooldown remaining on the action on the button
Two other commands that will display under MiscHelp:
/FlexBar Verbose State=<'on' | 'off'>
/FlexBar ResetAll Confirm='yes'
/FlexBar Tooltip State=<'on' | 'off'>
/FlexBar SafeLoad State=<'on' | 'off'>
/FlexBar LoadProfile Profile='profile'
/FlexBar SaveProfile Profile='profile'
Setting Verbose on will result in lots of feedback about changes to buttons.
I recommend this be turned OFF most of the time (as you will get spammed if you
have any event actions going on). This should be set only while setting things
up to get a bit more feedback about what you're setting. Most of the settings
above have some very obvious visual effects.
Resetall completely clears your character's profile and reloads the UI.
Setting Tooltip to off will disable mouseover tooltips on flexbar buttons. Setting
to on will re-enable them.
SafeLoad, SaveProfile and LoadProfile are primarily stopgaps until I can squash
the lost config bug.
Turning SafeLoad on will require you to manually load your character's profile
on entering the world each time, by clicking a prominent button. Please use this
if you are experiencing lost configuration problems until I can sort out the bug.
SaveProfile will save you current setting under the name you specify. WARNING:
If you specify the name of another character on your account, you will overwrite
that character's settings. Case is important here - 'Mairelon' is not 'mairelon'.
LoadProfile overwrites your current setting with the specified profile settings.
Example:
/flexbar saveprofile profile='Mairelon_Backup'
Then, if I need to restore that later:
/flexbar loadprofile profile='Mairelon_Backup'
Added to V1.22 is the
/FlexBar LoadConfig Config='configname'
command.
Using this command you can load a prewritten configuration from FlexBar_Config.lua.
If you come up with a clever set of events and want to share them, you can write
them as a configuration entry then load them from the command line. Please see
FlexBar_Config.lua for details and examples.
NOTE: This is one of a few commands where case is important. There is nothing
I can do about this. The config name must be exactly the way it is in the config
file.
Advanced Usage: Groups
Sometimes you've moved a group of buttons together, and would like to move them
as a whole. Also, there are some other advanced things that can be done if they
are in groups.
Typing
/FlexBar GroupHelp
will display the following ingame help:
/FlexBar Group button=<button numbers> Anchor=<button>
/FlexBar UnGroup Group=<group number>
/FlexBar ListGroups [Group=<group numbers>]
/FlexBar HorizontalGroup Group=<group number> Height=<height> Padding=<padding>
/FlexBar VerticalGroup Group=<group number> Width=<width> Padding=<padding>
/FlexBar CircleGroup Group=<group number> Padding=<padding>
Group is the basic command to associate buttons into a group. You must specify
the buttons to group and an anchor for the group. The anchor is important - it
is going to be the only button in the group with a handle. Its number is going
to become the group number and it is the only one that can be locked/unlocked.
The anchor must be in the list of buttons to form the group.
Example: /Flexbar Group Button=1-4 Anchor=1
Will result in group 1 being formed with buttons 1, 2, 3, 4 in it. 1 is the button
that you drag to drag the group.
NOTE: Once you have groups formed you may use Group=<group> in place of Button=<button
numbers> in any command that takes the latter argument.
Ungroup disbands the group specified.
Listgroups will either list all the groups you have formed (if you omit Group=)
or list the members of the group if you specify Group=. Note, in Group= you may
specify multiple groups much as you would specify mulitple buttons in earlier
commands.
HorizontalGroup, VerticalGroup and CircleGroup all auto-arrange buttons in the
group.
HorizontalGroup arranges them in a horizontal line, height rows high with padding
pixels in between buttons. It starts in the upper left corner with the lowest
numbered button in the group and proceeds top to bottom, left to right.
VerticalGroup arranges them in a vertical line, width columns wide with padding
pixels in between buttons. It starts in the upper left corner with the lowest
numbered button in the group and proceeds left to right, top to bottom.
CircleGroup arranges up to 7 buttons (any bigger groups won't work) in a circular
formation, starting with the lowest numbered button in the 10 o'clock position,
proceeding clockwise with the 7th button in the center.
Advanced Usage: Remap and Advanced
There were 3 commands from MiscHelp not covered above. These commands are primarily
useful only for events, and are a bit confusing:
/FlexBar Remap Button=<button numbers> Base=<id> [Toggle='true'] [Reset='true']
Is a powerful, yet potentially confusing command in the Miscellaneous group.
To understand how it works, a Buttons 101 overview is necessary.
WoW buttons are uniquely identified by their ID. Two buttons with the same ID
are essentially the same. The default action bar works by changing the ID's associated
with it's 12 buttons when you page through it. On page 1 they use ID's 1-12, on
page 2 they use 13-24 on up to page 6 which uses 61-72.
For various classes, other ID ranges are used for stance/shape specific stuff.
Specifically 73-108 are used by the 3 warrior stances. 73-84 and 97-108 are used
by Cat and Bear form for druids and who knows what else.
Finally, 109-120 seem to be completely unused. NO ID'S OVER 120 are allowed -
they will crash WoW if they are used!
FlexBar uses ID's 1-72 for buttons 1-72, ID's 109-120 for buttons 85-96 and:
In the case of Warriors 61-72 for buttons 73-84 -- THAT MEANS THEY DUPLICATE 61-72.
THERE IS NO FIX FOR THIS, WARRIORS SIMPLY GET LESS AVAILABLE ID'S. Druids use
ID's 85-96 for buttons 73-84. Everyone else uses ID's 97-108 for buttons 73-84.
Now, that is how buttons are set by default in FlexBar. Remap allows you to set
those button ID's any way you want. The advantage here is that the hotkey for
the button stays the same while the action if performs may change (just like the
actionbar).
Example
/Flexbar Remap Button=1-12 Base=25
Once this is executed, buttons 1-12 now have ID's 25-36 (just like buttons 25-36)
/Flexbar Remap Button=1-12 Base=25 toggle='true'
This will toggle the ID's between default and 25-36. On remap toggle is a bit
odd - if the buttons are mapped to anything BUT default and toggle is specified,
then they are set to default. Rather than, as in scale/color/fade the toggle only
happening if the button is already in the state specified.
/Flexbar Remap Button=1-12 Base=1 Reset='true'
Ignores base and simply resets buttons 1-12 to their default ID's.
Setting the ID's of buttons to overlap reserved ranges (such as warrior stances)
has undefined results. Try it, you may find something useful. But, if you break
it remember /Flexbar resetall :)
/FlexBar Advanced Button=<button numbers> State=<'on' | 'off'>
When Advanced is turned on - buttons are only triggered on a left-click. This
is useful in conjunction with the RightClick event to do alternate things on right-clicks
of buttons.
/FlexBar Use Button=<button numbers>
This will actually trigger the listed buttons. While it allows multiple buttons
- I don't know how well that will work. Also, you will not - I repeat - NOT be
able to get multiple spell casts with this. The primary purpose of this is in
conjunction with the RightClick event to assign an alternate function to a button.
Addendum: Use will ONLY fire on an actual click on the button, no other event
but LeftButtonClick and RightButtonClick will trigger it.
Advanced Usage: Events
The original FlexBar contained some basic abilities to hide/show buttons on events
such as entering/leaving combat and gaining/losing aggro. As I progressed I was
adding more and more commands to allows the full range of hide/show on a wide
variety of events.
V1.2 Does away with all the specific commands to hide/show on various events.
Instead it allows any combination of a variety of commands with a variety of events.
The following commands can be tied to events occurring during gameplay:
Hide, Show, Scale, Fade, Shade, Remap, MoveABS, MoveRel, MoveToMouse and to a
limited extent Use
The syntax to make these occur on events is as follows:
/FlexBar Hide Button=<button numbers> ..... On='EventName' Target='Target'
/FlexBar Show Button=<button numbers> ..... On='EventName' Target='Target'
/FlexBar Fade Button=<button numbers> ..... On='EventName' Target='Target'
/FlexBar Shade Button=<button numbers> ..... On='EventName' Target='Target'
/FlexBar Scale Button=<button numbers> ..... On='EventName' Target='Target'
/FlexBar Remap Button=<button numbers> ..... On='EventName' Target='Target'
/Flexbar MoveABS button=<button numbers> .... On='EventName' Target=Target
/Flexbar MoveRel button=<button numbers> ..... On='EventName' Target=<target>
/Flexbar MoveToMouse button=<button numbers> ...... On='EventName' Target=target
/FlexBar Use Button=<button numbers> ..... On='EventName' Target='Target'
Some examples:
To make a group show on entering combat:
/Flexbar Show Group=1 On='EnterCombat'
To make a group show on mouseover
/Flexbar Show Group=1 On='MouseEnterGroup' Target=1
Note that some events do not have targets, such as enter combat. For those that
do the target refers to the item originating the event. In the second example
we want to respond to MouseEnterGroup only from group 1.
The complete list of events is as follows:
Event Name (Spelling and Capitalization must be exact) |
Target |
MouseEnterGroup |
Group mouse entered |
MouseLeaveGroup |
Group Mouse Left |
Raised when the cursor enters/leaves a group's bounds. I use a different algorithm
in 1.2 than previous versions. It is faster (no stuttering on large groups). Known
issue - groups of small buttons may have a small border around them where they
register the mouse as inside the group before it enters. |
|
MouseEnterButton |
Button mouse entered (must be visible) |
MouseLeaveButton |
Button mouse left |
Raised when the mouse enters/leaves a button. Button must be visible. |
|
EnterCombat |
no target |
LeaveCombat |
no target |
Enter/Leave combat is raised when you activate/deactivate auto-attack. This is
not based on aggro, but on whether you have attack turned on. |
|
GainAggro |
no target |
LoseAggro |
no target |
Gaining/Losing Aggro is detected by when your regen stops/starts. |
|
RightButtonClick |
button that was r-clicked |
LeftButtonClick |
button that was l-clicked |
Raised when the specified button is clicked. In order to have seperate actions
on r/l clicks Advanced mode must be enabled |
|
CoolDownMet |
button who's action is done cooling down |
CoolDownStart |
button who's action's cooldown is starting |
Detects cooldown on action on hotkey - when it goes to non zerro, CoolDownStart
is raised. When it hits zero, CoolDownMet is raised |
|
EnoughMana |
button who's action now has enough mana |
NotEnoughMana |
button who's action now doesn't have enough mana |
Raised when your mana climbs above/ drops below the amount necessary to activate
the ability on the target button. I think (am not sure) this is true of rage and
energy too. |
|
OutOfRange |
button who's action is now out of range |
NowInRange |
button who's action is now in range |
Raised when the ability on the specified button goes out of and into range. I
noticed that raptor strike never generates these events, but auto shot does. |
|
GainBuff |
buff name gained (must be exact - see combat log. The message will be in the
form "You gain buff name.") |
LoseBuff |
buff name lost - see above, in this case the combat log will read "buff name
leaves you." |
Raised on the message when you gain/lose buffs. While some stances/forms cause
gainbuff messages - not all cause lose buff message. For these use GainAura. Additionally
LoseBuff does not fire if you lose it to dieing. |
For the above you MUST have Periodic self buffs turned on in chat filters. |
GainAura |
Aura gained - these include stances, shapes, paladin auars and stealth. |
LoseAura |
Aura lost |
A timer checks to see if you've changed stances/forms/auras/stealth. If you have
it raises a LoseAura for the lost one then a GainAura for the new one. If you
didn't previously have an aura up, you won't get a lose aura. If you simply get
rid of an aura, you won't get a gain aura (such as de-stealthing). |
I don't know the exact wording for each target aura. See below for instructions
on finding it. |
TargetMiss |
type of miss (block, dodge, parry, miss) |
PlayerMiss |
type of miss (block, dodge, parry, miss) |
TargetMiss is when the target misses you, PlayerMiss is when you miss the target |
I am not 100% sure I have all the player miss types right -- I don't remember
ever seeing a PlayerMiss Parry - so I don't know if I'm not looking for the right
text or if the mobs in question simply never parried in the testing. |
HealthAbove## |
UnitCode for the health change - can be player, party1, party2, party3, party4,
target, pet, mouseover |
HealthBelow## |
Same as above |
HealthFull |
|
## is 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 (except health above does not generate
a 100). As a targets health drops/climbs one an event is raised once as he passes
these percentages. |
|
LostTarget |
no target |
GainTarget |
Reaction of target to player hostile, neutral, friendly |
TargetReactionChanged |
Reaction of target to player |
Note: Unless the reaction changes, there will be no target change event. It may
also be possible to lose and reaquire a target fast enough not to get lose/gain
target. |
|
GainPartyMate |
party1, party2, party3, party4 -- untested |
LosePartyMate |
see above |
On a timer, checks for the existence of each party mate. If you had someone at
Party1 and now done, losepartymate is raised for party1, if you didn't and now
do, gainpartymate is raised for party1. |
|
GainPet |
no target |
LosePet |
no target |
Functions almost identically to Lose/GainPartyMate, but specific to pets so no
target needed. |
|
ActionBarPage |
Page to which actionbar changed |
Raised when the user switches actionbar pages, either by the arrows or hotkeys. |
|
BindingKeyUp |
Binding key number that was released |
BindingKeyDown |
Binding key number that was pressed |
V1.2 includes 30 new hotkey bindings. Each one will raise the above events as
it's pressed and released, with the target being which binding number was activated. |
|
IsUsable |
Button who's action is usable |
NotUsable |
Button who's action is unusable |
Is/Not Usable is used for abilities that have preconditions, such as your opponent
dodging (overpower) or you parrying (riposte). It only indicates that the precondition
has been met, but not if you have enough rage/energy to execute the move. |
|
ManaAbove## |
Unit code for player |
ManaBelow## |
Unit code |
ManaFull |
|
Also fired on energy and rage. |
|
|
|
|
|
To see what events are being raised type the following:
/script FBDisplayEvent=true
This will not save across sessions and will spam you mightily with event messages.
Use this to see what event exactly is raised as you switch into and out of stances/forms
etc, or when you gain/lose buffs.
When you are done type:
/script FBDisplayEvent=nil
To turn it off.
Typing
/FlexBar EventHelp
will display the following:
/FlexBar ListEvents
/FlexBar DeleteEvent Event=<event>
ListEvents will list all the events you have registered and their commands.
DeleteEvent deletes the event by number (the number it is listed by in ListEvents).
Only one event may be deleted at any time.
This is an unsupported command put in by me to track event raising. Until I get
enough feedback about messages for stances/forms et. al. and can document them,
this will be the only way to determine what event/target to use. My apologies,
but I barely have time to level my Paladin (I'm back to full rest bonus again!)
much less other classes to test these out.
As of 01/11/2005 this is a Alpha release. I believe it will function well, but
I believe bugs are inevitable :/
As always, I appreciate all feedback. I spend way to much time on the wow UI
forums, and I will be checking my email at
the_real_orang@yahoo.com much more frequently than I have over the holidays (my apologies to those who
have written and not gottena reply).