| | #1 |
| Senior Member Join Date: Jun 2009
Posts: 860
| Team Malaias - EU Azuremyst ![]()
Pwnboxer Setup My FTL makes use of PwnBoxer key broadcasting and PwnBoxer key mappings. ![]() Game Setup I use the Bartender4 addon for advanced action bars. ![]() The Theory The idea behind FTL (Focusless, targetless, leaderless) is to setup multiboxing in a way that you can transparently switch masters without having to change macros, play solo without worrying about the other characters and to not rely on focus or target for group actions. A good article on these forums can be found here: How to configure a Focusless/Targetless/Leaderless multiboxing system Another good article about FTL can be found here: Focusless, targetless, 'leaderless' (FTL) setup Macro modifiers and PwnBoxer key mappings The fundamental challenge of FTL is how to write macros that "know" who the current master is without hardcoding the name of master in WoW macros. The trick is to use PwnBoxer key mappings and WoW Macro "Modifiers". Disclaimer: This is my way of implementing FTL. There are many other ways. First of all, assign a keyboard modifier to each of your characters. It's a good idea to draw a diagram or write them down. This can be very confusing. e.g.
Next, decide on which keys to use on master and which keys to use for slaves. In my screenshot above, and for the purpose of this guide, I will pick:
The idea is that if you press Key "1" on the master, it will map to Key "6" on all the slaves with a modifier indicating who the master was that pressed "1". When a slave receives the Key "6", the slave understands that the master pressed Key "1" and in the macro associated with Key "6", it will interpret a modifier to determine who the master was. Confusing? An example. Pressing "1" on Malaias (Game 1) will result in Key "6" being pressed on all slaves (Malaia/Game2, Malaine/Game3, Malaiah/Game4, Malaena/Game5). Because I assigned the modifier "Shift + Alt" (arbitrarily) to Malaias/Game1, the slaves don't get simply a Key "6", I actually setup PwnBoxer so that they all receive "Shift + Alt + 6". Again, to explain: the "6" says that the master pressed "1" and the "Shift + Alt" says the master is Malaias/Game1. The Key Mapping in PwnBoxer for this example is shown in the screenshot above and should look like... Code: If "Game 1" selected, transform "1" into "Alt + Shift + 6" on "Game 2". If "Game 1" selected, transform "1" into "Alt + Shift + 6" on "Game 3". If "Game 1" selected, transform "1" into "Alt + Shift + 6" on "Game 4". If "Game 1" selected, transform "1" into "Alt + Shift + 6" on "Game 5". A macro can now use the following to determine the master and set the target accordingly. The nice thing is that the same macro can be used on all slaves. Code: /target [mod:shift,mod:alt,target=Malaias] [mod:ctrl,mod:alt,target=Malaia] [mod:shift,target=Malaine] [mod:ctrl,target=Malaiah] [mod:alt,target=Malaene] A "FTL" follow macro would therefore look like... Code: /target [mod:shift,mod:alt,target=Malaias] [mod:ctrl,mod:alt,target=Malaia] [mod:shift,target=Malaine] [mod:ctrl,target=Malaiah] [mod:alt,target=Malaene] /follow /targetlasttarget Generating the PwnBoxer Configuration
The difficult part is now to define Key Mappings for all possible combinations. Linux helps! The script below can be used to generate a PwnBoxer configuration for the Key Mappings. Code: #!/usr/bin/perl
# Game instances (0 = first, 1 = second, etc)
my @games = ( 0, 1, 2, 3, 4 );
# The name of the WoW characters for each of the game instances
my @toons = ( 'Malaias', 'Malaia', 'Malaine', 'Malaiah', 'Malaene' );
# The list of all keys you want to map from
my @keys = ( '1', '2', '3', '4', '5', 'Alt + 1', 'Alt + 2', 'Alt + 3', 'Alt + 4', 'Alt + 5' );
# The list of all keymaps you want to map to
my @mapped = ( '6', '7', '8', '9', '0', 'Z', 'U', 'I', 'O', 'P' );
# Important about Macros & Modifiers
# Max. length of a WoW (3.2) Macro is 255 characters. Save space!
# Make sure the combined modifiers (Ctrl+Shift, Ctrl+Alt, Shift+Ctrl) come first!
# The WoW macro modifiers. One for each WoW character
my @mods = ( 'shift+alt', 'ctrl+alt', 'shift', 'ctrl', 'alt' );
# The PwnBoxer keystroke modifiers. One for each WoW modifier
my @pwnmods = ( 'Shift + Alt', 'Ctrl + Alt', 'Shift', 'Ctrl', 'Alt' );
my $modifier = 'mod';
# Basic data checks
if($#keys ne $#mapped) {
die("You must have equal number of keys to mapped keys.\n");
}
if($#games ne $#toons) {
die("You must have the same number of characters as game instances.\n");
}
if($#toons ne $#mods) {
die("You must have one macro modifier per character.\n");
}
if($#pwnmods ne $#mods) {
die("You must have one Pwnboxer modifier for each macro modifier.\n");
}
sub entry {
my $src = shift;
my $in = shift;
my $out = shift;
my $dst = shift;
my $comma = shift;
print "\t\t{\n";
print "\t\t\t\"Active Window\" : $src,\n";
print "\t\t\t\"Input Key\" : \"$in\",\n";
print "\t\t\t\"Output Key\" : \"$out\",\n";
print "\t\t\t\"Output Window\" : $dst\n";
print "\t\t}$comma\n";
}
for($k=0;$k<=$#keys;$k++) {
for($i=0;$i<=$#games;$i++) {
for($j=0;$j<=$#games;$j++) {
next if ($i == $j);
my $src = $games[$i];
my $dst = $games[$j];
my $in = $keys[$k];
my $out = $mapped[$k];
my $mod = $pwnmods[$i];
my $comma = ',';
$comma = '' if(($j==$#games) and ($i==$j));
entry($src,$in,"$mod + $out",$dst,$comma);
}
}
}
print "\n\n";
for($t=0;$t<=$#toons;$t++) {
print "Game $games[$t] has toon $toons[$t] who has modifier $pwnmods[$t].\n";
}
print "\n";
my $modstr = '/target ';
for($t=0;$t<=$#toons;$t++) {
my $toon = $toons[$t];
my $mod = $mods[$t];
my $index = index($mod, '+');
if($index<0) {
$modstr .= "[$modifier:$mod,target=$toon]";
} else {
($mod1, $mod2) = split(/\+/, $mod);
$modstr .= "[$modifier:$mod1,$modifier:$mod2,target=$toon]";
}
}
print "\nExample - Target Leader Macro:\n$modstr\n";
print "\nExample - Shaman Lightning Bolt FTL Macro:\n$modstr\n/cast [target=targettarget] Lightning Bolt\n/targetlasttarget\n";
print "\nExample - Follow FTL Macro:\n$modstr\n/follow\n/targetlasttarget\n";
print "\nExample - Sequenced Group Invite Macro (run from $toons[0]):\n";
my $delay = 1;
for($t=1;$t<=$#toons;$t++) {
print "/in $delay /invite $toons[$t]\n";
$delay += 3;
}
Running the above script on Linux produces the following... Code: {
"Active Window" : 0,
"Input Key" : "1",
"Output Key" : "Shift + Alt + 6",
"Output Window" : 1
},
{
"Active Window" : 0,
"Input Key" : "1",
"Output Key" : "Shift + Alt + 6",
"Output Window" : 2
},
{
"Active Window" : 0,
"Input Key" : "1",
"Output Key" : "Shift + Alt + 6",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "1",
"Output Key" : "Shift + Alt + 6",
"Output Window" : 4
},
{
"Active Window" : 1,
"Input Key" : "1",
"Output Key" : "Ctrl + Alt + 6",
"Output Window" : 0
},
{
"Active Window" : 1,
"Input Key" : "1",
"Output Key" : "Ctrl + Alt + 6",
"Output Window" : 2
},
{
"Active Window" : 1,
"Input Key" : "1",
"Output Key" : "Ctrl + Alt + 6",
"Output Window" : 3
},
{
"Active Window" : 1,
"Input Key" : "1",
"Output Key" : "Ctrl + Alt + 6",
"Output Window" : 4
},
{
"Active Window" : 2,
"Input Key" : "1",
"Output Key" : "Shift + 6",
"Output Window" : 0
},
{
"Active Window" : 2,
"Input Key" : "1",
"Output Key" : "Shift + 6",
"Output Window" : 1
},
{
"Active Window" : 2,
"Input Key" : "1",
"Output Key" : "Shift + 6",
"Output Window" : 3
},
{
"Active Window" : 2,
"Input Key" : "1",
"Output Key" : "Shift + 6",
"Output Window" : 4
},
{
"Active Window" : 3,
"Input Key" : "1",
"Output Key" : "Ctrl + 6",
"Output Window" : 0
},
{
"Active Window" : 3,
"Input Key" : "1",
"Output Key" : "Ctrl + 6",
"Output Window" : 1
},
{
"Active Window" : 3,
"Input Key" : "1",
"Output Key" : "Ctrl + 6",
"Output Window" : 2
},
{
"Active Window" : 3,
"Input Key" : "1",
"Output Key" : "Ctrl + 6",
"Output Window" : 4
},
{
"Active Window" : 4,
"Input Key" : "1",
"Output Key" : "Alt + 6",
"Output Window" : 0
},
{
"Active Window" : 4,
"Input Key" : "1",
"Output Key" : "Alt + 6",
"Output Window" : 1
},
{
"Active Window" : 4,
"Input Key" : "1",
"Output Key" : "Alt + 6",
"Output Window" : 2
},
{
"Active Window" : 4,
"Input Key" : "1",
"Output Key" : "Alt + 6",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "2",
"Output Key" : "Shift + Alt + 7",
"Output Window" : 1
},
{
"Active Window" : 0,
"Input Key" : "2",
"Output Key" : "Shift + Alt + 7",
"Output Window" : 2
},
{
"Active Window" : 0,
"Input Key" : "2",
"Output Key" : "Shift + Alt + 7",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "2",
"Output Key" : "Shift + Alt + 7",
"Output Window" : 4
},
{
"Active Window" : 1,
"Input Key" : "2",
"Output Key" : "Ctrl + Alt + 7",
"Output Window" : 0
},
{
"Active Window" : 1,
"Input Key" : "2",
"Output Key" : "Ctrl + Alt + 7",
"Output Window" : 2
},
{
"Active Window" : 1,
"Input Key" : "2",
"Output Key" : "Ctrl + Alt + 7",
"Output Window" : 3
},
{
"Active Window" : 1,
"Input Key" : "2",
"Output Key" : "Ctrl + Alt + 7",
"Output Window" : 4
},
{
"Active Window" : 2,
"Input Key" : "2",
"Output Key" : "Shift + 7",
"Output Window" : 0
},
{
"Active Window" : 2,
"Input Key" : "2",
"Output Key" : "Shift + 7",
"Output Window" : 1
},
{
"Active Window" : 2,
"Input Key" : "2",
"Output Key" : "Shift + 7",
"Output Window" : 3
},
{
"Active Window" : 2,
"Input Key" : "2",
"Output Key" : "Shift + 7",
"Output Window" : 4
},
{
"Active Window" : 3,
"Input Key" : "2",
"Output Key" : "Ctrl + 7",
"Output Window" : 0
},
{
"Active Window" : 3,
"Input Key" : "2",
"Output Key" : "Ctrl + 7",
"Output Window" : 1
},
{
"Active Window" : 3,
"Input Key" : "2",
"Output Key" : "Ctrl + 7",
"Output Window" : 2
},
{
"Active Window" : 3,
"Input Key" : "2",
"Output Key" : "Ctrl + 7",
"Output Window" : 4
},
{
"Active Window" : 4,
"Input Key" : "2",
"Output Key" : "Alt + 7",
"Output Window" : 0
},
{
"Active Window" : 4,
"Input Key" : "2",
"Output Key" : "Alt + 7",
"Output Window" : 1
},
{
"Active Window" : 4,
"Input Key" : "2",
"Output Key" : "Alt + 7",
"Output Window" : 2
},
{
"Active Window" : 4,
"Input Key" : "2",
"Output Key" : "Alt + 7",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "3",
"Output Key" : "Shift + Alt + 8",
"Output Window" : 1
},
{
"Active Window" : 0,
"Input Key" : "3",
"Output Key" : "Shift + Alt + 8",
"Output Window" : 2
},
{
"Active Window" : 0,
"Input Key" : "3",
"Output Key" : "Shift + Alt + 8",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "3",
"Output Key" : "Shift + Alt + 8",
"Output Window" : 4
},
{
"Active Window" : 1,
"Input Key" : "3",
"Output Key" : "Ctrl + Alt + 8",
"Output Window" : 0
},
{
"Active Window" : 1,
"Input Key" : "3",
"Output Key" : "Ctrl + Alt + 8",
"Output Window" : 2
},
{
"Active Window" : 1,
"Input Key" : "3",
"Output Key" : "Ctrl + Alt + 8",
"Output Window" : 3
},
{
"Active Window" : 1,
"Input Key" : "3",
"Output Key" : "Ctrl + Alt + 8",
"Output Window" : 4
},
{
"Active Window" : 2,
"Input Key" : "3",
"Output Key" : "Shift + 8",
"Output Window" : 0
},
{
"Active Window" : 2,
"Input Key" : "3",
"Output Key" : "Shift + 8",
"Output Window" : 1
},
{
"Active Window" : 2,
"Input Key" : "3",
"Output Key" : "Shift + 8",
"Output Window" : 3
},
{
"Active Window" : 2,
"Input Key" : "3",
"Output Key" : "Shift + 8",
"Output Window" : 4
},
{
"Active Window" : 3,
"Input Key" : "3",
"Output Key" : "Ctrl + 8",
"Output Window" : 0
},
{
"Active Window" : 3,
"Input Key" : "3",
"Output Key" : "Ctrl + 8",
"Output Window" : 1
},
{
"Active Window" : 3,
"Input Key" : "3",
"Output Key" : "Ctrl + 8",
"Output Window" : 2
},
{
"Active Window" : 3,
"Input Key" : "3",
"Output Key" : "Ctrl + 8",
"Output Window" : 4
},
{
"Active Window" : 4,
"Input Key" : "3",
"Output Key" : "Alt + 8",
"Output Window" : 0
},
{
"Active Window" : 4,
"Input Key" : "3",
"Output Key" : "Alt + 8",
"Output Window" : 1
},
{
"Active Window" : 4,
"Input Key" : "3",
"Output Key" : "Alt + 8",
"Output Window" : 2
},
{
"Active Window" : 4,
"Input Key" : "3",
"Output Key" : "Alt + 8",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "4",
"Output Key" : "Shift + Alt + 9",
"Output Window" : 1
},
{
"Active Window" : 0,
"Input Key" : "4",
"Output Key" : "Shift + Alt + 9",
"Output Window" : 2
},
{
"Active Window" : 0,
"Input Key" : "4",
"Output Key" : "Shift + Alt + 9",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "4",
"Output Key" : "Shift + Alt + 9",
"Output Window" : 4
},
{
"Active Window" : 1,
"Input Key" : "4",
"Output Key" : "Ctrl + Alt + 9",
"Output Window" : 0
},
{
"Active Window" : 1,
"Input Key" : "4",
"Output Key" : "Ctrl + Alt + 9",
"Output Window" : 2
},
{
"Active Window" : 1,
"Input Key" : "4",
"Output Key" : "Ctrl + Alt + 9",
"Output Window" : 3
},
{
"Active Window" : 1,
"Input Key" : "4",
"Output Key" : "Ctrl + Alt + 9",
"Output Window" : 4
},
{
"Active Window" : 2,
"Input Key" : "4",
"Output Key" : "Shift + 9",
"Output Window" : 0
},
{
"Active Window" : 2,
"Input Key" : "4",
"Output Key" : "Shift + 9",
"Output Window" : 1
},
{
"Active Window" : 2,
"Input Key" : "4",
"Output Key" : "Shift + 9",
"Output Window" : 3
},
{
"Active Window" : 2,
"Input Key" : "4",
"Output Key" : "Shift + 9",
"Output Window" : 4
},
{
"Active Window" : 3,
"Input Key" : "4",
"Output Key" : "Ctrl + 9",
"Output Window" : 0
},
{
"Active Window" : 3,
"Input Key" : "4",
"Output Key" : "Ctrl + 9",
"Output Window" : 1
},
{
"Active Window" : 3,
"Input Key" : "4",
"Output Key" : "Ctrl + 9",
"Output Window" : 2
},
{
"Active Window" : 3,
"Input Key" : "4",
"Output Key" : "Ctrl + 9",
"Output Window" : 4
},
{
"Active Window" : 4,
"Input Key" : "4",
"Output Key" : "Alt + 9",
"Output Window" : 0
},
{
"Active Window" : 4,
"Input Key" : "4",
"Output Key" : "Alt + 9",
"Output Window" : 1
},
{
"Active Window" : 4,
"Input Key" : "4",
"Output Key" : "Alt + 9",
"Output Window" : 2
},
{
"Active Window" : 4,
"Input Key" : "4",
"Output Key" : "Alt + 9",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "5",
"Output Key" : "Shift + Alt + 0",
"Output Window" : 1
},
{
"Active Window" : 0,
"Input Key" : "5",
"Output Key" : "Shift + Alt + 0",
"Output Window" : 2
},
{
"Active Window" : 0,
"Input Key" : "5",
"Output Key" : "Shift + Alt + 0",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "5",
"Output Key" : "Shift + Alt + 0",
"Output Window" : 4
},
{
"Active Window" : 1,
"Input Key" : "5",
"Output Key" : "Ctrl + Alt + 0",
"Output Window" : 0
},
{
"Active Window" : 1,
"Input Key" : "5",
"Output Key" : "Ctrl + Alt + 0",
"Output Window" : 2
},
{
"Active Window" : 1,
"Input Key" : "5",
"Output Key" : "Ctrl + Alt + 0",
"Output Window" : 3
},
{
"Active Window" : 1,
"Input Key" : "5",
"Output Key" : "Ctrl + Alt + 0",
"Output Window" : 4
},
{
"Active Window" : 2,
"Input Key" : "5",
"Output Key" : "Shift + 0",
"Output Window" : 0
},
{
"Active Window" : 2,
"Input Key" : "5",
"Output Key" : "Shift + 0",
"Output Window" : 1
},
{
"Active Window" : 2,
"Input Key" : "5",
"Output Key" : "Shift + 0",
"Output Window" : 3
},
{
"Active Window" : 2,
"Input Key" : "5",
"Output Key" : "Shift + 0",
"Output Window" : 4
},
{
"Active Window" : 3,
"Input Key" : "5",
"Output Key" : "Ctrl + 0",
"Output Window" : 0
},
{
"Active Window" : 3,
"Input Key" : "5",
"Output Key" : "Ctrl + 0",
"Output Window" : 1
},
{
"Active Window" : 3,
"Input Key" : "5",
"Output Key" : "Ctrl + 0",
"Output Window" : 2
},
{
"Active Window" : 3,
"Input Key" : "5",
"Output Key" : "Ctrl + 0",
"Output Window" : 4
},
{
"Active Window" : 4,
"Input Key" : "5",
"Output Key" : "Alt + 0",
"Output Window" : 0
},
{
"Active Window" : 4,
"Input Key" : "5",
"Output Key" : "Alt + 0",
"Output Window" : 1
},
{
"Active Window" : 4,
"Input Key" : "5",
"Output Key" : "Alt + 0",
"Output Window" : 2
},
{
"Active Window" : 4,
"Input Key" : "5",
"Output Key" : "Alt + 0",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "Alt + 1",
"Output Key" : "Shift + Alt + Z",
"Output Window" : 1
},
{
"Active Window" : 0,
"Input Key" : "Alt + 1",
"Output Key" : "Shift + Alt + Z",
"Output Window" : 2
},
{
"Active Window" : 0,
"Input Key" : "Alt + 1",
"Output Key" : "Shift + Alt + Z",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "Alt + 1",
"Output Key" : "Shift + Alt + Z",
"Output Window" : 4
},
{
"Active Window" : 1,
"Input Key" : "Alt + 1",
"Output Key" : "Ctrl + Alt + Z",
"Output Window" : 0
},
{
"Active Window" : 1,
"Input Key" : "Alt + 1",
"Output Key" : "Ctrl + Alt + Z",
"Output Window" : 2
},
{
"Active Window" : 1,
"Input Key" : "Alt + 1",
"Output Key" : "Ctrl + Alt + Z",
"Output Window" : 3
},
{
"Active Window" : 1,
"Input Key" : "Alt + 1",
"Output Key" : "Ctrl + Alt + Z",
"Output Window" : 4
},
{
"Active Window" : 2,
"Input Key" : "Alt + 1",
"Output Key" : "Shift + Z",
"Output Window" : 0
},
{
"Active Window" : 2,
"Input Key" : "Alt + 1",
"Output Key" : "Shift + Z",
"Output Window" : 1
},
{
"Active Window" : 2,
"Input Key" : "Alt + 1",
"Output Key" : "Shift + Z",
"Output Window" : 3
},
{
"Active Window" : 2,
"Input Key" : "Alt + 1",
"Output Key" : "Shift + Z",
"Output Window" : 4
},
{
"Active Window" : 3,
"Input Key" : "Alt + 1",
"Output Key" : "Ctrl + Z",
"Output Window" : 0
},
{
"Active Window" : 3,
"Input Key" : "Alt + 1",
"Output Key" : "Ctrl + Z",
"Output Window" : 1
},
{
"Active Window" : 3,
"Input Key" : "Alt + 1",
"Output Key" : "Ctrl + Z",
"Output Window" : 2
},
{
"Active Window" : 3,
"Input Key" : "Alt + 1",
"Output Key" : "Ctrl + Z",
"Output Window" : 4
},
{
"Active Window" : 4,
"Input Key" : "Alt + 1",
"Output Key" : "Alt + Z",
"Output Window" : 0
},
{
"Active Window" : 4,
"Input Key" : "Alt + 1",
"Output Key" : "Alt + Z",
"Output Window" : 1
},
{
"Active Window" : 4,
"Input Key" : "Alt + 1",
"Output Key" : "Alt + Z",
"Output Window" : 2
},
{
"Active Window" : 4,
"Input Key" : "Alt + 1",
"Output Key" : "Alt + Z",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "Alt + 2",
"Output Key" : "Shift + Alt + U",
"Output Window" : 1
},
{
"Active Window" : 0,
"Input Key" : "Alt + 2",
"Output Key" : "Shift + Alt + U",
"Output Window" : 2
},
{
"Active Window" : 0,
"Input Key" : "Alt + 2",
"Output Key" : "Shift + Alt + U",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "Alt + 2",
"Output Key" : "Shift + Alt + U",
"Output Window" : 4
},
{
"Active Window" : 1,
"Input Key" : "Alt + 2",
"Output Key" : "Ctrl + Alt + U",
"Output Window" : 0
},
{
"Active Window" : 1,
"Input Key" : "Alt + 2",
"Output Key" : "Ctrl + Alt + U",
"Output Window" : 2
},
{
"Active Window" : 1,
"Input Key" : "Alt + 2",
"Output Key" : "Ctrl + Alt + U",
"Output Window" : 3
},
{
"Active Window" : 1,
"Input Key" : "Alt + 2",
"Output Key" : "Ctrl + Alt + U",
"Output Window" : 4
},
{
"Active Window" : 2,
"Input Key" : "Alt + 2",
"Output Key" : "Shift + U",
"Output Window" : 0
},
{
"Active Window" : 2,
"Input Key" : "Alt + 2",
"Output Key" : "Shift + U",
"Output Window" : 1
},
{
"Active Window" : 2,
"Input Key" : "Alt + 2",
"Output Key" : "Shift + U",
"Output Window" : 3
},
{
"Active Window" : 2,
"Input Key" : "Alt + 2",
"Output Key" : "Shift + U",
"Output Window" : 4
},
{
"Active Window" : 3,
"Input Key" : "Alt + 2",
"Output Key" : "Ctrl + U",
"Output Window" : 0
},
{
"Active Window" : 3,
"Input Key" : "Alt + 2",
"Output Key" : "Ctrl + U",
"Output Window" : 1
},
{
"Active Window" : 3,
"Input Key" : "Alt + 2",
"Output Key" : "Ctrl + U",
"Output Window" : 2
},
{
"Active Window" : 3,
"Input Key" : "Alt + 2",
"Output Key" : "Ctrl + U",
"Output Window" : 4
},
{
"Active Window" : 4,
"Input Key" : "Alt + 2",
"Output Key" : "Alt + U",
"Output Window" : 0
},
{
"Active Window" : 4,
"Input Key" : "Alt + 2",
"Output Key" : "Alt + U",
"Output Window" : 1
},
{
"Active Window" : 4,
"Input Key" : "Alt + 2",
"Output Key" : "Alt + U",
"Output Window" : 2
},
{
"Active Window" : 4,
"Input Key" : "Alt + 2",
"Output Key" : "Alt + U",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "Alt + 3",
"Output Key" : "Shift + Alt + I",
"Output Window" : 1
},
{
"Active Window" : 0,
"Input Key" : "Alt + 3",
"Output Key" : "Shift + Alt + I",
"Output Window" : 2
},
{
"Active Window" : 0,
"Input Key" : "Alt + 3",
"Output Key" : "Shift + Alt + I",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "Alt + 3",
"Output Key" : "Shift + Alt + I",
"Output Window" : 4
},
{
"Active Window" : 1,
"Input Key" : "Alt + 3",
"Output Key" : "Ctrl + Alt + I",
"Output Window" : 0
},
{
"Active Window" : 1,
"Input Key" : "Alt + 3",
"Output Key" : "Ctrl + Alt + I",
"Output Window" : 2
},
{
"Active Window" : 1,
"Input Key" : "Alt + 3",
"Output Key" : "Ctrl + Alt + I",
"Output Window" : 3
},
{
"Active Window" : 1,
"Input Key" : "Alt + 3",
"Output Key" : "Ctrl + Alt + I",
"Output Window" : 4
},
{
"Active Window" : 2,
"Input Key" : "Alt + 3",
"Output Key" : "Shift + I",
"Output Window" : 0
},
{
"Active Window" : 2,
"Input Key" : "Alt + 3",
"Output Key" : "Shift + I",
"Output Window" : 1
},
{
"Active Window" : 2,
"Input Key" : "Alt + 3",
"Output Key" : "Shift + I",
"Output Window" : 3
},
{
"Active Window" : 2,
"Input Key" : "Alt + 3",
"Output Key" : "Shift + I",
"Output Window" : 4
},
{
"Active Window" : 3,
"Input Key" : "Alt + 3",
"Output Key" : "Ctrl + I",
"Output Window" : 0
},
{
"Active Window" : 3,
"Input Key" : "Alt + 3",
"Output Key" : "Ctrl + I",
"Output Window" : 1
},
{
"Active Window" : 3,
"Input Key" : "Alt + 3",
"Output Key" : "Ctrl + I",
"Output Window" : 2
},
{
"Active Window" : 3,
"Input Key" : "Alt + 3",
"Output Key" : "Ctrl + I",
"Output Window" : 4
},
{
"Active Window" : 4,
"Input Key" : "Alt + 3",
"Output Key" : "Alt + I",
"Output Window" : 0
},
{
"Active Window" : 4,
"Input Key" : "Alt + 3",
"Output Key" : "Alt + I",
"Output Window" : 1
},
{
"Active Window" : 4,
"Input Key" : "Alt + 3",
"Output Key" : "Alt + I",
"Output Window" : 2
},
{
"Active Window" : 4,
"Input Key" : "Alt + 3",
"Output Key" : "Alt + I",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "Alt + 4",
"Output Key" : "Shift + Alt + O",
"Output Window" : 1
},
{
"Active Window" : 0,
"Input Key" : "Alt + 4",
"Output Key" : "Shift + Alt + O",
"Output Window" : 2
},
{
"Active Window" : 0,
"Input Key" : "Alt + 4",
"Output Key" : "Shift + Alt + O",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "Alt + 4",
"Output Key" : "Shift + Alt + O",
"Output Window" : 4
},
{
"Active Window" : 1,
"Input Key" : "Alt + 4",
"Output Key" : "Ctrl + Alt + O",
"Output Window" : 0
},
{
"Active Window" : 1,
"Input Key" : "Alt + 4",
"Output Key" : "Ctrl + Alt + O",
"Output Window" : 2
},
{
"Active Window" : 1,
"Input Key" : "Alt + 4",
"Output Key" : "Ctrl + Alt + O",
"Output Window" : 3
},
{
"Active Window" : 1,
"Input Key" : "Alt + 4",
"Output Key" : "Ctrl + Alt + O",
"Output Window" : 4
},
{
"Active Window" : 2,
"Input Key" : "Alt + 4",
"Output Key" : "Shift + O",
"Output Window" : 0
},
{
"Active Window" : 2,
"Input Key" : "Alt + 4",
"Output Key" : "Shift + O",
"Output Window" : 1
},
{
"Active Window" : 2,
"Input Key" : "Alt + 4",
"Output Key" : "Shift + O",
"Output Window" : 3
},
{
"Active Window" : 2,
"Input Key" : "Alt + 4",
"Output Key" : "Shift + O",
"Output Window" : 4
},
{
"Active Window" : 3,
"Input Key" : "Alt + 4",
"Output Key" : "Ctrl + O",
"Output Window" : 0
},
{
"Active Window" : 3,
"Input Key" : "Alt + 4",
"Output Key" : "Ctrl + O",
"Output Window" : 1
},
{
"Active Window" : 3,
"Input Key" : "Alt + 4",
"Output Key" : "Ctrl + O",
"Output Window" : 2
},
{
"Active Window" : 3,
"Input Key" : "Alt + 4",
"Output Key" : "Ctrl + O",
"Output Window" : 4
},
{
"Active Window" : 4,
"Input Key" : "Alt + 4",
"Output Key" : "Alt + O",
"Output Window" : 0
},
{
"Active Window" : 4,
"Input Key" : "Alt + 4",
"Output Key" : "Alt + O",
"Output Window" : 1
},
{
"Active Window" : 4,
"Input Key" : "Alt + 4",
"Output Key" : "Alt + O",
"Output Window" : 2
},
{
"Active Window" : 4,
"Input Key" : "Alt + 4",
"Output Key" : "Alt + O",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "Alt + 5",
"Output Key" : "Shift + Alt + P",
"Output Window" : 1
},
{
"Active Window" : 0,
"Input Key" : "Alt + 5",
"Output Key" : "Shift + Alt + P",
"Output Window" : 2
},
{
"Active Window" : 0,
"Input Key" : "Alt + 5",
"Output Key" : "Shift + Alt + P",
"Output Window" : 3
},
{
"Active Window" : 0,
"Input Key" : "Alt + 5",
"Output Key" : "Shift + Alt + P",
"Output Window" : 4
},
{
"Active Window" : 1,
"Input Key" : "Alt + 5",
"Output Key" : "Ctrl + Alt + P",
"Output Window" : 0
},
{
"Active Window" : 1,
"Input Key" : "Alt + 5",
"Output Key" : "Ctrl + Alt + P",
"Output Window" : 2
},
{
"Active Window" : 1,
"Input Key" : "Alt + 5",
"Output Key" : "Ctrl + Alt + P",
"Output Window" : 3
},
{
"Active Window" : 1,
"Input Key" : "Alt + 5",
"Output Key" : "Ctrl + Alt + P",
"Output Window" : 4
},
{
"Active Window" : 2,
"Input Key" : "Alt + 5",
"Output Key" : "Shift + P",
"Output Window" : 0
},
{
"Active Window" : 2,
"Input Key" : "Alt + 5",
"Output Key" : "Shift + P",
"Output Window" : 1
},
{
"Active Window" : 2,
"Input Key" : "Alt + 5",
"Output Key" : "Shift + P",
"Output Window" : 3
},
{
"Active Window" : 2,
"Input Key" : "Alt + 5",
"Output Key" : "Shift + P",
"Output Window" : 4
},
{
"Active Window" : 3,
"Input Key" : "Alt + 5",
"Output Key" : "Ctrl + P",
"Output Window" : 0
},
{
"Active Window" : 3,
"Input Key" : "Alt + 5",
"Output Key" : "Ctrl + P",
"Output Window" : 1
},
{
"Active Window" : 3,
"Input Key" : "Alt + 5",
"Output Key" : "Ctrl + P",
"Output Window" : 2
},
{
"Active Window" : 3,
"Input Key" : "Alt + 5",
"Output Key" : "Ctrl + P",
"Output Window" : 4
},
{
"Active Window" : 4,
"Input Key" : "Alt + 5",
"Output Key" : "Alt + P",
"Output Window" : 0
},
{
"Active Window" : 4,
"Input Key" : "Alt + 5",
"Output Key" : "Alt + P",
"Output Window" : 1
},
{
"Active Window" : 4,
"Input Key" : "Alt + 5",
"Output Key" : "Alt + P",
"Output Window" : 2
},
{
"Active Window" : 4,
"Input Key" : "Alt + 5",
"Output Key" : "Alt + P",
"Output Window" : 3
},
Game 0 has toon Malaias who has modifier Shift + Alt.
Game 1 has toon Malaia who has modifier Ctrl + Alt.
Game 2 has toon Malaine who has modifier Shift.
Game 3 has toon Malaiah who has modifier Ctrl.
Game 4 has toon Malaene who has modifier Alt.
Example - Target Leader Macro:
/target [mod:shift,mod:alt,target=Malaias][mod:ctrl,mod:alt,target=Malaia][mod:shift,target=Malaine][mod:ctrl,target=Malaiah][mod:alt,target=Malaene]
Example - Shaman Lightning Bolt FTL Macro:
/target [mod:shift,mod:alt,target=Malaias][mod:ctrl,mod:alt,target=Malaia][mod:shift,target=Malaine][mod:ctrl,target=Malaiah][mod:alt,target=Malaene]
/cast [target=targettarget] Lightning Bolt
/targetlasttarget
Example - Follow FTL Macro:
/target [mod:shift,mod:alt,target=Malaias][mod:ctrl,mod:alt,target=Malaia][mod:shift,target=Malaine][mod:ctrl,target=Malaiah][mod:alt,target=Malaene]
/follow
/targetlasttarget
Example - Sequenced Group Invite Macro (run from Malaias):
/in 1 /invite Malaia
/in 4 /invite Malaine
/in 7 /invite Malaiah
/in 10 /invite Malaene
One PwnBoxer KeyMapping looks like this in the .pbcfg file. Code: {
"Active Window" : 0,
"Input Key" : "1",
"Output Key" : "Shift + Alt + 6",
"Output Window" : 1
}
Code: "Key Remapping" :
[
{
"Active Window" : 0,
"Input Key" : "1",
"Output Key" : "Shift + Alt + 6",
"Output Window" : 1
}
]
It's not working! It definitely works with PwnBoxer - that's what I'm using. Below are some of the mistakes I made:
Descriptions courtesy of curse.com. Jamba (info) Jamba is an addon for World of Warcraft that is designed to assist multiboxers. --- AlphaMap (images) AlphaMap is a scalable, moveable, transparent WorldMap that the user can have on screen while they continue to play and interact with the world. Bagnon (images) Bagnon is an addon that merges all of your bags into three frames: One for your inventory, one for your bank, and one for your keyring. Bartender4 (info) Full ActionBar replacement mod. It provides you with all the features needed to fully customization most aspects of your action and related bars. ButtonFacade (skin list) ButtonFacade, with its associated library, is a small add-on that allows for the dynamic skinning of button-based add-ons. Carbonite (info) (map) (quest) (guide) (warehouse) (battlegrounds) Multi feature addon developed by game industry veterans to improve and enhance the game playing experience. The Carbonite map gives you all the information you need in one easy to use and flexible Google like map. Blaze through quests at lightning speed and level faster than you ever thought possible. Our extensive quest database lists the location of quest givers, objectives and turn-ins. Dominate your opponents with our enhanced battleground map. See the combat status, heath, target and target health of all your teammates CensusPlus (weekly activity) (census) Capture population data for WarcraftRealms. ChatMod (images) ChatMOD provides many features which makes chatting / communication InGame much easier. Deadly Boss Mods (images) Boss mods for all raid bosses Decursive (images) Decursive is a cleansing mod intended to render affliction removal easy, effective and fun for all the classes having this ability. EquipCompare (info) When you shop for items at a vendor or the Auction House and you hover over an item, you get a comparison tooltip showing the "currently equipped" item too. Fishing Buddy (info) A fishing addon that keeps track of the fish you catch and helps manage your fishing gear. FuBar (info) (plugins) FriendsFu, GuildFu, BagFu, BartenderFu, CalendarFu, CurrencyFu, GearFu, InstanceInfoFu, MailExpireyFu, MoneyFu, ProfessionsFu, RecountFu, ThreatFu, TopScoreFu, VolumeFu HealBot Continued (info) (youtube) One-click healing and buffing for your group LoggerHead (info) LoggerHead is a an automated combat log enabler. It allows you to select via a simple GUI interface which Zones and Instances to automatically enable for logging. LootFilter (info) It lets you filter loot by quality, item name and item value, and helps you keep your inventory clean. It also features an option to easily sell or delete items in bulk. MobInfo2 (images) MobInfo-2 is a World of Warcraft AddOn that provides you with useful additional information about Mobs (ie. opponents/monsters). It adds new information to the game's Tooltip whenever you hover with your mouse over a mob. Omen Threat Meter (info) What Omen does is provide accurate values of your group's relative threat level on individual enemies, so that you can see when you're in danger of pulling aggro Outfitter (images) Outfitter is an equipment management addon which gives you fast access to multiple outfits to optimize your abilities in PvE and PvP, automated equip and unequip for convenience doing a variety of activities, or to enhance role-playing. PallyPower (images) Pally Power is an add-on that provides an interactive and easy to use interface that allows you to control assignments of blessings for yourself and, if you are a party leader or an assistant, for other paladins in your group or raid. Quartz (review) The core of Quartz is lightweight implementation of a standard casting bar, with configurable size, text and icon positioning, and colors RangeDisplay (images) RangeDisplay is a simple range display addon. It is using spell range, item range and interact-distance based checks to determine the approximate range to your current target. Recount (images) Recount is a graphical damage meter RecountThreat (images) A threat-mode module for Recount. Requires Recount to work. ScrollingCombatText (images) A fairly simple but very configurable mod that adds damage, heals, and events (dodge, parry, windfury, etc...) as scrolling text above you character model, much like what already happens above your target. SpamSentry (images) This addon stops goldspam messages from showing in your chatframes. To detect spam, SpamSentry uses sophistacted heuristics that have been developed over the course of over two years. TankadinTps (images) TankadinTps is a threat-analyzer for tanks. It records all threat you generated during a fight, without encounter specific gimmicks like aggro resets etc. When using FuBar the addon shows your current sustained tps, otherwise you can check this later in the details. TipTac (images) TipTac is a tooltip enchancement addon, it allows you to configure various aspects of the tooltip, such as moving where it's shown, the font, the scale of tips, plus a lot more. TipTacTalents (images) An addon to show the talents of players in the tooltip. A cache up to 25 is stored for the last players, so you quickly can see their talents again without having to wait for talents to load. X-Perl UnitFrames (images) Perl, with Extra stuff. Much enchanced from Nymbia's Perl UnitFrames, and a complete replacement for Blizzard's default unit frames, including raid frames and raid tools, with little remaining of the original Nymbia code. |
| | |
| | #2 |
| Junior Member Join Date: Nov 2010
Posts: 4
| Thank you for this amazing guide! I am looking to do... pretty much exactly what you did. PwnBoxer looks cool, but I despaired when I realized how many configuration options I'd have to plug in. I usually play with like 24-36 cast buttons, that'd be painful to input by hand. But PERL TO THE RESCUE! Thanks for your extremely well-documented guide. |
| | |
| | #3 |
| Administrator Join Date: Jun 2009 Location: USA
Posts: 6,528
| This is an awesome thread, the best guide I've seen yet I believe. |
| | |
![]() |
| Thread Tools | |
| Display Modes | |
| |
Similar Threads | ||||
| Thread | Thread Starter | Forum | Replies | Last Post |
| Team Malaias - FTL Setup | jal | World of Warcraft - Macros, UIs, Mods, Addons | 40 | 02-28-2011 11:08 AM |
| Team binding setup pally+4shams | Snowy42 | General Discussions | 6 | 06-20-2010 05:35 PM |
| team setup? | Hots | General Discussions | 14 | 11-27-2009 11:07 AM |
| How many can this setup run! please help | Semifaded | Multiboxing Computer Hardware | 6 | 10-06-2009 09:06 PM |
| Bar setup | Aiford | Multiboxing Software | 3 | 08-27-2009 03:41 AM |