1. 4 Weeks Ago  

    Sharing my Advanced HotKeyNet scripts. Share yours too!

    I've been tweaking my HKN scripts off and on for a couple years now, and I want to share them to other people. The unfortunate truth about the niche of multiboxing on a private server is there's not many people sharing their scripts on public forums. I hope to change that here. Please consider sharing the scripts you wrote with others here as well!

    A note to beginners: Simply copy-pasting this code will more often than not result in issues. This isn't a tutorial. Instead, try to read the code and figure out what can be added to yours. Additionally, since HotKeyNet's website was taken down, I've been using the wayback machine to look at the reference page: http://web.archive.org/web/201707122...functions.html

    First of all, I created a user-defined language in Notepad++ to better read HKN scripts. I recommend using mine or making your own, it makes it much more readable, and I use brackets {} to be able to fold my code for easier accessibility.

    HotKeyNet language in Notepad++
    Spoiler: Show

    To use this, copy the code block and save it to a .xml file, then import it in Notepad++'s user-defined language import section.
    Code:
    <NotepadPlus>
        <UserLang name="HotKeyNet" ext="" udlVersion="2.1">
            <Settings>
                <Global caseIgnored="no" allowFoldOfComments="no" foldCompact="no" forcePureLC="0" decimalSeparator="0" />
                <Prefix Keywords1="no" Keywords2="no" Keywords3="no" Keywords4="no" Keywords5="no" Keywords6="no" Keywords7="no" Keywords8="no" />
            </Settings>
            <KeywordLists>
                <Keywords name="Comments">00// 01 02 03 04</Keywords>
                <Keywords name="Numbers, prefix1"></Keywords>
                <Keywords name="Numbers, prefix2"></Keywords>
                <Keywords name="Numbers, extras1"></Keywords>
                <Keywords name="Numbers, extras2"></Keywords>
                <Keywords name="Numbers, suffix1"></Keywords>
                <Keywords name="Numbers, suffix2"></Keywords>
                <Keywords name="Numbers, range"></Keywords>
                <Keywords name="Operators1">&lt; &gt; &quot;</Keywords>
                <Keywords name="Operators2"></Keywords>
                <Keywords name="Folders in code1, open">{</Keywords>
                <Keywords name="Folders in code1, middle"></Keywords>
                <Keywords name="Folders in code1, close">}</Keywords>
                <Keywords name="Folders in code2, open"></Keywords>
                <Keywords name="Folders in code2, middle"></Keywords>
                <Keywords name="Folders in code2, close"></Keywords>
                <Keywords name="Folders in comment, open">{</Keywords>
                <Keywords name="Folders in comment, middle"></Keywords>
                <Keywords name="Folders in comment, close">}</Keywords>
                <Keywords name="Keywords1">Passthrough&#x000D;&#x000A;ApplyTemplate&#x000D;&#x000A;HotKey&#x000D;&#x000A;HotKeyDown&#x000D;&#x000A;HotKeyUp&#x000D;&#x000A;DoHotKey&#x000D;&#x000A;MovementHotKey&#x000D;&#x000A;Toggle&#x000D;&#x000A;Template&#x000D;&#x000A;EndTemplate&#x000D;&#x000A;If&#x000D;&#x000A;Else&#x000D;&#x000A;Label&#x000D;&#x000A;Local&#x000D;&#x000A;Text&#x000D;&#x000A;SendWinM&#x000D;&#x000A;SendPC&#x000D;&#x000A;Key&#x000D;&#x000A;Wait&#x000D;&#x000A;Command&#x000D;&#x000A;SendLabel&#x000D;&#x000A;Is&#x000D;&#x000A;SetVar&#x000D;&#x000A;SetButtonText&#x000D;&#x000A;SetButtonColors&#x000D;&#x000A;SetButtonHotkey&#x000D;&#x000A;SetForegroundWin&#x000D;&#x000A;SetWinRect&#x000D;&#x000A;SetActiveWin&#x000D;&#x000A;SendFocusWin&#x000D;&#x000A;RenameTargetWin&#x000D;&#x000A;SetButtonHotKey&#x000D;&#x000A;AddButtonToPanel&#x000D;&#x000A;CreatePictureButton&#x000D;&#x000A;CreateColoredButton&#x000D;&#x000A;AlwaysOnTop&#x000D;&#x000A;TargetWin&#x000D;&#x000A;CreatePanel&#x000D;&#x000A;SetWinPos&#x000D;&#x000A;TargetButton&#x000D;&#x000A;SetPanelStyle&#x000D;&#x000A;SetWinOpacity&#x000D;&#x000A;CloseWin&#x000D;&#x000A;EndIf&#x000D;&#x000A;SetPanelLayout</Keywords>
                <Keywords name="Keywords2">ActiveWinIs&#x000D;&#x000A;ScrollLockOn&#x000D;&#x000A;ScrollLockOff&#x000D;&#x000A;NumLockOn&#x000D;&#x000A;NumLockOff&#x000D;&#x000A;CapsLockOn&#x000D;&#x000A;CapsLockOff&#x000D;&#x000A;Shift&#x000D;&#x000A;Ctrl&#x000D;&#x000A;Alt&#x000D;&#x000A;LShift&#x000D;&#x000A;LCtrl&#x000D;&#x000A;LAlt&#x000D;&#x000A;RShift&#x000D;&#x000A;RCtrl&#x000D;&#x000A;RAlt</Keywords>
                <Keywords name="Keywords3">%1%&#x000D;&#x000A;%2%&#x000D;&#x000A;%3%&#x000D;&#x000A;%4%&#x000D;&#x000A;%5%&#x000D;&#x000A;%6%</Keywords>
                <Keywords name="Keywords4"></Keywords>
                <Keywords name="Keywords5"></Keywords>
                <Keywords name="Keywords6"></Keywords>
                <Keywords name="Keywords7"></Keywords>
                <Keywords name="Keywords8"></Keywords>
                <Keywords name="Delimiters">00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23</Keywords>
            </KeywordLists>
            <Styles>
                <WordsStyle name="DEFAULT" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="COMMENTS" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="LINE COMMENTS" fgColor="8000FF" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="NUMBERS" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="KEYWORDS1" fgColor="DD0000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="KEYWORDS2" fgColor="00FFFF" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="KEYWORDS3" fgColor="800000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="KEYWORDS4" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="KEYWORDS5" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="KEYWORDS6" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="KEYWORDS7" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="KEYWORDS8" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="OPERATORS" fgColor="00FF40" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="FOLDER IN CODE1" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="FOLDER IN CODE2" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="FOLDER IN COMMENT" fgColor="FF0000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="DELIMITERS1" fgColor="00FF00" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="DELIMITERS2" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="DELIMITERS3" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="DELIMITERS4" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="DELIMITERS5" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="DELIMITERS6" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="DELIMITERS7" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
                <WordsStyle name="DELIMITERS8" fgColor="000000" bgColor="FFFFFF" fontStyle="0" nesting="0" />
            </Styles>
        </UserLang>
    </NotepadPlus>


    Before getting into the scripts themselves, please be aware that ALL of my keybinds require Scroll Lock to be On. This is effectively a toggle for all hotkeys. If Scroll Lock is On, the hotkeys work. If it is off, they do nothing.

    Opening sequence:
    Spoiler: Show

    I use this for the following: Choosing the characters I am wanting to play, Opening the WoW windows themselves, and logging in to each account.
    To start, I have HKN open a panel with the buttons for every character I use. Currently, I have 14 characters. I have my characters identified by class and spec. Note that the launch sequence is designed to only work one time. If it needs to be done more than once, the script must be reset. The code looks like this:
    Code:
    //Launch Buttons {
    //Launch Buttons Panel {
    <HotKey ScrollLockOn Alt Ctrl L> //Bring up Launch Window (Only works once per reset) {
    	<CreatePanel LaunchButtons 800 400 616 439>
    		<TargetWin LaunchButtons>
    			<AlwaysOnTop on>
    	<CreateColoredButton Launch 0 0 600 100 0x000000 0xffffff "Launch Games">
    		<AddButtonToPanel Launch LaunchButtons 0 300>
    			<SetButtonHotKey Launch HotKey CapsLockOn Final>
    //}
    			
    //Team One {
    	<CreateColoredButton TeamOne 0 0 100 100 0xcc0000 0xffffff "Team One">
    		<AddButtonToPanel TeamOne LaunchButtons 0 0>
    			<SetButtonHotKey TeamOne HotKey CapsLockOn LCtrl LShift LAlt RCtrl RShift RAlt Final>
    	<CreateColoredButton PaladinProtection 0 0 100 100 0xcc0000 0xffffff "PaladinProtection">
    		<AddButtonToPanel PaladinProtection LaunchButtons 100 0>
    			<SetButtonHotKey PaladinProtection HotKey CapsLockOn LCtrl Final>
    				<SetVar PaladinProtection 0>
    	<CreateColoredButton MageArcane 0 0 100 100 0xcc0000 0xffffff "MageArcane">
    		<AddButtonToPanel MageArcane LaunchButtons 200 0>
    			<SetButtonHotKey MageArcane HotKey CapsLockOn LCtrl LShift Final>
    				<SetVar MageArcane 0>
    	<CreateColoredButton DeathKnightFrost 0 0 100 100 0xcc0000 0xffffff "DeathKnightFrost">
    		<AddButtonToPanel DeathKnightFrost LaunchButtons 300 0>
    			<SetButtonHotKey DeathKnightFrost HotKey CapsLockOn LCtrl LShift LAlt Final>
    				<SetVar DeathKnightFrost 0>
    	<CreateColoredButton WarlockDemonology 0 0 100 100 0xcc0000 0xffffff "WarlockDemonology">
    		<AddButtonToPanel WarlockDemonology LaunchButtons 400 0>
    			<SetButtonHotKey WarlockDemonology HotKey CapsLockOn LCtrl LShift LAlt RCtrl Final>
    				<SetVar WarlockDemonology 0>
    	<CreateColoredButton PaladinHoly 0 0 100 100 0xcc0000 0xffffff "PaladinHoly">
    		<AddButtonToPanel PaladinHoly LaunchButtons 500 0>
    			<SetButtonHotKey PaladinHoly HotKey CapsLockOn LCtrl LShift LAlt RCtrl RShift Final>
    				<SetVar PaladinHoly 0>
    //}
    //Team Two {
    	<CreateColoredButton TeamTwo 0 0 100 100 0xcc0000 0xffffff "Team Two">
    		<AddButtonToPanel TeamTwo LaunchButtons 0 100>
    			<SetButtonHotKey TeamTwo HotKey CapsLockOn LCtrl LShift LAlt RShift Final>
    	<CreateColoredButton DruidFeral 0 0 100 100 0xcc0000 0xffffff "DruidFeral">
    		<AddButtonToPanel DruidFeral LaunchButtons 100 100>
    			<SetButtonHotKey DruidFeral HotKey CapsLockOn LCtrl LShift LAlt RShift RAlt Final>
    				<SetVar DruidFeral 0>
    	<CreateColoredButton DruidBalance1 0 0 100 100 0xcc0000 0xffffff "DruidBalance1">
    		<AddButtonToPanel DruidBalance1 LaunchButtons 200 100>
    			<SetButtonHotKey DruidBalance1 HotKey CapsLockOn LCtrl LShift RCtrl Final>
    				<SetVar DruidBalance1 0>
    	<CreateColoredButton DruidBalance2 0 0 100 100 0xcc0000 0xffffff "DruidBalance2">
    		<AddButtonToPanel DruidBalance2 LaunchButtons 300 100>
    			<SetButtonHotKey DruidBalance2 HotKey CapsLockOn LCtrl LShift RCtrl RShift Final>
    				<SetVar DruidBalance2 0>
    	<CreateColoredButton DruidBalance3 0 0 100 100 0xcc0000 0xffffff "DruidBalance3">
    		<AddButtonToPanel DruidBalance3 LaunchButtons 400 100>
    			<SetButtonHotKey DruidBalance3 HotKey CapsLockOn LCtrl LShift RCtrl RShift RAlt Final>
    				<SetVar DruidBalance3 0>
    	<CreateColoredButton DruidRestoration 0 0 100 100 0xcc0000 0xffffff "DruidRestoration">
    		<AddButtonToPanel DruidRestoration LaunchButtons 500 100>
    			<SetButtonHotKey DruidRestoration HotKey CapsLockOn LCtrl LShift RCtrl RAlt Final>
    				<SetVar DruidRestoration 0>
    		//}
    //Team Three {
    	<CreateColoredButton TeamThree 0 0 100 100 0xcc0000 0xffffff "TeamThree">
    		<AddButtonToPanel TeamThree LaunchButtons 0 200>
    			<SetButtonHotKey TeamThree HotKey CapsLockOn LCtrl LAlt Final>
    	<CreateColoredButton WarriorProtection 0 0 100 100 0xcc0000 0xffffff "WarriorProtection">
    		<AddButtonToPanel WarriorProtection LaunchButtons 100 200>
    			<SetButtonHotKey WarriorProtection HotKey CapsLockOn LCtrl LAlt RCtrl Final>
    				<SetVar WarriorProtection 0>
    	<CreateColoredButton HunterMarksman1 0 0 100 100 0xcc0000 0xffffff "HunterMarksman1">
    		<AddButtonToPanel HunterMarksman1 LaunchButtons 200 200>
    			<SetButtonHotKey HunterMarksman1 HotKey CapsLockOn LCtrl LAlt RCtrl RShift Final>
    				<SetVar HunterMarksman1 0>
    	<CreateColoredButton HunterMarksman2 0 0 100 100 0xcc0000 0xffffff "HunterMarksman2">
    		<AddButtonToPanel HunterMarksman2 LaunchButtons 300 200>
    			<SetButtonHotKey HunterMarksman2 HotKey CapsLockOn LCtrl LAlt RCtrl RShift RAlt Final>
    				<SetVar HunterMarksman2 0>
    	<CreateColoredButton HunterMarksman3 0 0 100 100 0xcc0000 0xffffff "HunterMarksman3">
    		<AddButtonToPanel HunterMarksman3 LaunchButtons 400 200>
    			<SetButtonHotKey HunterMarksman3 HotKey CapsLockOn LCtrl LAlt RCtrl RAlt Final>
    				<SetVar HunterMarksman3 0>
    		//}
    	//}
    
    <HotKey CapsLockOn Final> //Launch Button {
    	<TargetWin LaunchButtons>
    		<CloseWin>
    	<If PaladinProtection Is 1>
    	<ApplyTemplate Launch PaladinProtection>
    	<ApplyTemplate Login PaladinProtection Username>
    	<EndIf>
    	<If MageArcane Is 1>
    	<ApplyTemplate Launch MageArcane>
    	<ApplyTemplate Login MageArcane Username>
    	<EndIf>
    	<If DeathKnightFrost Is 1>
    	<ApplyTemplate Launch DeathKnightFrost>
    	<ApplyTemplate Login DeathKnightFrost Username>
    	<EndIf>
    	<If WarlockDemonology Is 1>
    	<ApplyTemplate Launch WarlockDemonology>
    	<ApplyTemplate Login WarlockDemonology Username>
    	<EndIf>
    	<If PaladinHoly Is 1>
    	<ApplyTemplate Launch PaladinHoly>
    	<ApplyTemplate Login PaladinHoly Username>
    	<EndIf>
    	<If DruidFeral Is 1>
    	<ApplyTemplate Launch DruidFeral>
    	<ApplyTemplate Login DruidFeral Username>
    	<EndIf>
    	<If DruidBalance1 Is 1>
    	<ApplyTemplate Launch DruidBalance1>
    	<ApplyTemplate Login DruidBalance1 Username>
    	<EndIf>
    	<If DruidBalance2 Is 1>
    	<ApplyTemplate Launch DruidBalance2>
    	<ApplyTemplate Login DruidBalance2 Username>
    	<EndIf>
    	<If DruidBalance3 Is 1>
    	<ApplyTemplate Launch DruidBalance3>
    	<ApplyTemplate Login DruidBalance3 Username>
    	<EndIf>
    	<If DruidRestoration Is 1>
    	<ApplyTemplate Launch DruidRestoration>
    	<ApplyTemplate Login DruidRestoration Username>
    	<EndIf>
    	<If WarriorProtection Is 1>
    	<ApplyTemplate Launch WarriorProtection>
    	<ApplyTemplate Login WarriorProtection Username>
    	<EndIf>
    	<If HunterMarksman1 Is 1>
    	<ApplyTemplate Launch HunterMarksman1>
    	<ApplyTemplate Login HunterMarksman1 Username>
    	<EndIf>
    	<If HunterMarksman2 Is 1>
    	<ApplyTemplate Launch HunterMarksman2>
    	<ApplyTemplate Login HunterMarksman2 Username>
    	<EndIf>
    	<If HunterMarksman3 Is 1>
    	<ApplyTemplate Launch HunterMarksman3>
    	<ApplyTemplate Login HunterMarksman3 Username>
    	<EndIf>
    I'll decode each part in order. When pressing CTRL+Alt+L, a panel is created and 18 total buttons are mode which fill them. The buttons are hard-coded to be placed in a specific spot inside the panel. Each character's variable is also set to "0" and all buttons start in the red "off" state. This will be important later.

    Each of these buttons do a single thing when clicked, they call to a virtual hotkey. The reason the hotkey is virtual is I did not ever want these hotkeys to be called outside of these buttons being clicked.

    With only this part of the code, the only button that has a command is the black "launch" button at the bottom (which we will get to later).

    Here is the rest of the button commands:
    Code:
    <HotKey CapsLockOn LCtrl LShift LAlt RCtrl RShift RAlt Final> //Toggle for Team One {
    		<SetButtonColors TeamOne 0x009900 0xffffff>
    			<If PaladinProtection Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl Final>
    			<EndIf>
    			<If MageArcane Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift Final>
    			<EndIf>
    			<If DeathKnightFrost Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift LAlt Final>
    			<EndIf>
    			<If WarlockDemonology Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift LAlt RCtrl Final>
    			<EndIf>
    			<If PaladinHoly Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift LAlt RCtrl RShift Final>
    			<EndIf>
    	<Toggle>
    		<SetButtonColors TeamOne 0xcc0000 0xffffff>
    			<If PaladinProtection Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl Final>
    			<EndIf>
    			<If MageArcane Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift Final>
    			<EndIf>
    			<If DeathKnightFrost Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift LAlt Final>
    			<EndIf>
    			<If WarlockDemonology Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift LAlt RCtrl Final>
    			<EndIf>
    			<If PaladinHoly Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift LAlt RCtrl RShift Final>
    			<EndIf>//}
    <HotKey CapsLockOn LCtrl Final> //Team One Individual buttons {
    		<SetVar PaladinProtection 1>
    		<SetButtonColors PaladinProtection 0x009900 0xffffff>
    	<Toggle>
    		<SetVar PaladinProtection 0>
    		<SetButtonColors PaladinProtection 0xcc0000 0xffffff>
    <HotKey CapsLockOn LCtrl LShift Final>
    		<SetVar MageArcane 1>
    		<SetButtonColors MageArcane 0x009900 0xffffff>
    	<Toggle>
    		<SetVar MageArcane 0>
    		<SetButtonColors MageArcane 0xcc0000 0xffffff>
    <HotKey CapsLockOn LCtrl LShift LAlt Final>
    		<SetVar DeathKnightFrost 1>
    		<SetButtonColors DeathKnightFrost 0x009900 0xffffff>
    	<Toggle>
    		<SetVar DeathKnightFrost 0>
    		<SetButtonColors DeathKnightFrost 0xcc0000 0xffffff>
    <HotKey CapsLockOn LCtrl LShift LAlt RCtrl Final>
    		<SetVar WarlockDemonology 1>
    		<SetButtonColors WarlockDemonology 0x009900 0xffffff>
    	<Toggle>
    		<SetVar WarlockDemonology 0>
    		<SetButtonColors WarlockDemonology 0xcc0000 0xffffff>
    <HotKey CapsLockOn LCtrl LShift LAlt RCtrl RShift Final>
    		<SetVar PaladinHoly 1>
    		<SetButtonColors PaladinHoly 0x009900 0xffffff>
    	<Toggle>
    		<SetVar PaladinHoly 0>
    		<SetButtonColors PaladinHoly 0xcc0000 0xffffff>
    //}
    
    <HotKey CapsLockOn LCtrl LShift LAlt RShift Final> //Toggle for Team Two {
    		<SetButtonColors TeamTwo 0x009900 0xffffff>
    			<If DruidFeral Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift LAlt RShift RAlt Final>
    			<EndIf>
    			<If DruidBalance1 Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift RCtrl Final>
    			<EndIf>
    			<If DruidBalance2 Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift RCtrl RShift Final>
    			<EndIf>
    			<If DruidBalance3 Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift RCtrl RShift RAlt Final>
    			<EndIf>
    			<If DruidRestoration Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift RCtrl RAlt Final>
    			<EndIf>
    	<Toggle>
    		<SetButtonColors TeamTwo 0xcc0000 0xffffff>
    			<If DruidFeral Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift LAlt RShift RAlt Final>
    			<EndIf>
    			<If DruidBalance1 Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift RCtrl Final>
    			<EndIf>
    			<If DruidBalance2 Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift RCtrl RShift Final>
    			<EndIf>
    			<If DruidBalance3 Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift RCtrl RShift RAlt Final>
    			<EndIf>
    			<If DruidRestoration Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LShift RCtrl RAlt Final>
    			<EndIf>
    //}
    <HotKey CapsLockOn LCtrl LShift LAlt RShift RAlt Final> //Team Two Individual buttons {
    		<SetVar DruidFeral 1>
    		<SetButtonColors DruidFeral 0x009900 0xffffff>
    	<Toggle>
    		<SetVar DruidFeral 0>
    		<SetButtonColors DruidFeral 0xcc0000 0xffffff>
    <HotKey CapsLockOn LCtrl LShift RCtrl Final>
    		<SetVar DruidBalance1 1>
    		<SetButtonColors DruidBalance1 0x009900 0xffffff>
    	<Toggle>
    		<SetVar DruidBalance1 0>
    		<SetButtonColors DruidBalance1 0xcc0000 0xffffff>
    <HotKey CapsLockOn LCtrl LShift RCtrl RShift Final>
    		<SetVar DruidBalance2 1>
    		<SetButtonColors DruidBalance2 0x009900 0xffffff>
    	<Toggle>
    		<SetVar DruidBalance2 0>
    		<SetButtonColors DruidBalance2 0xcc0000 0xffffff>
    <HotKey CapsLockOn LCtrl LShift RCtrl RShift RAlt Final>
    		<SetVar DruidBalance3 1>
    		<SetButtonColors DruidBalance3 0x009900 0xffffff>
    	<Toggle>
    		<SetVar DruidBalance3 0>
    		<SetButtonColors DruidBalance3 0xcc0000 0xffffff>
    <HotKey CapsLockOn LCtrl LShift RCtrl RAlt Final>
    		<SetVar DruidRestoration 1>
    		<SetButtonColors DruidRestoration 0x009900 0xffffff>
    	<Toggle>
    		<SetVar DruidRestoration 0>
    		<SetButtonColors DruidRestoration 0xcc0000 0xffffff>
    		//}
    <HotKey CapsLockOn LCtrl LAlt Final> //Toggle for Team Three {
    		<SetButtonColors TeamThree 0x009900 0xffffff>
    			<If WarriorProtection Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LAlt RCtrl Final>
    			<EndIf>
    			<If HunterMarksman1 Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LAlt RCtrl RShift Final>
    			<EndIf>
    			<If HunterMarksman2 Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LAlt RCtrl RShift RAlt Final>
    			<EndIf>
    			<If HunterMarksman3 Is 0>
    				<DoHotKey HotKey CapsLockOn LCtrl LAlt RCtrl RAlt Final>
    			<EndIf>
    	<Toggle>
    		<SetButtonColors TeamThree 0xcc0000 0xffffff>
    			<If WarriorProtection Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LAlt RCtrl Final>
    			<EndIf>
    			<If HunterMarksman1 Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LAlt RCtrl RShift Final>
    			<EndIf>
    			<If HunterMarksman2 Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LAlt RCtrl RShift RAlt Final>
    			<EndIf>
    			<If HunterMarksman3 Is 1>
    				<DoHotKey HotKey CapsLockOn LCtrl LAlt RCtrl RAlt Final>
    			<EndIf>
    //}
    <HotKey CapsLockOn LCtrl LAlt RCtrl Final> //Team Three Individual buttons {
    		<SetVar WarriorProtection 1>
    		<SetButtonColors WarriorProtection 0x009900 0xffffff>
    	<Toggle>
    		<SetVar WarriorProtection 0>
    		<SetButtonColors WarriorProtection 0xcc0000 0xffffff>
    <HotKey CapsLockOn LCtrl LAlt RCtrl RShift Final>
    		<SetVar HunterMarksman1 1>
    		<SetButtonColors HunterMarksman1 0x009900 0xffffff>
    	<Toggle>
    		<SetVar HunterMarksman1 0>
    		<SetButtonColors HunterMarksman1 0xcc0000 0xffffff>
    <HotKey CapsLockOn LCtrl LAlt RCtrl RShift RAlt Final>
    		<SetVar HunterMarksman2 1>
    		<SetButtonColors HunterMarksman2 0x009900 0xffffff>
    	<Toggle>
    		<SetVar HunterMarksman2 0>
    		<SetButtonColors HunterMarksman2 0xcc0000 0xffffff>
    <HotKey CapsLockOn LCtrl LAlt RCtrl RAlt Final>
    		<SetVar HunterMarksman3 1>
    		<SetButtonColors HunterMarksman3 0x009900 0xffffff>
    	<Toggle>
    		<SetVar HunterMarksman3 0>
    		<SetButtonColors HunterMarksman3 0xcc0000 0xffffff>
    		//}
    Here are two different kind of buttons. One kind are the "team" buttons, the other kind are individual character buttons. The individual ones set the variable to 1, and change the button to green signifying that they are active. Clicking them again will set them back to 0 and deactivate them. The team buttons simply turn all characters on that team on, then off.

    Once I have selected what characters to use, I click the launch button. It checks every character variable individually and calls to my launch and login templates. They are both very sleek and flawlessly log me in every time, no matter how many characters I am using.
    Code:
    // Open WoW Windows Template {
    
    // %1%: Window Name
    
    <Template Launch>
       <SendPC Local>
          <Run "D:Wrath of the Lich KingWoW.exe">
          <RenameTargetWin %1%>
    <EndTemplate>
    //}
    
    //Login {
    
    // %1%: Window Name
    // %2%: Username
    
    <Template Login>
    	<Wait 500>
    		<SendWinM %1%>
    			<Wait 50>
    			<Text %2%>
    			<Wait 100>
    			<Key Tab>
    			<Wait 50>
    			<Text password>
    			<Wait 100>
    			<Key Enter>
    <EndTemplate>
    //}
    The launch sequence calls to both of these for each account. It starts by launching the window, then HKN waits for the window to be completely open before moving on to the login template. I have it wait another half second just in case it needs it (it will need it for more than 3 windows, in my experience). Then it types the username, password, and logs in. Note the "RenameTargetWin" command in the Launch template. Every window matches the character's ID that I gave them. This is very important and is very useful for identifying the windows individually. I see most beginner scripts use "WoW1, WoW2, etc." Don't do that.


    Window Resizing
    Spoiler: Show

    HotKeyNet is very bad at having a dynamic amount of characters for window management. There's two programs that are much better at it than HKN that are free, WoW Open Box, and AutoHotKey. Note that WoW Open Box will also rename your windows, and that is why I do not use it. AutoHotKey can also be used for botting, so I ONLY use it for window management and it provides no in-game automation whatsoever.

    Here is the AHK script I wrote:
    ;ListLines
    #SingleInstance, Force
    WinGet, WoWWindows, List, ahk_exe WoW.exe
    CoordMode, ToolTip, Screen
    Tooltip "Getting Data"
    TotalResx := 2560
    TotalResy := 1400
    If (WoWWindows = 2)
    {

    }
    If (WoWWindows = 3)
    {
    PrimaryWidth := 1800
    PrimaryHeight := TotalResy
    SecondaryWidth := (TotalResx-PrimaryWidth)
    SecondaryHeight := (PrimaryHeight/2)
    WoW1x := PrimaryWidth
    WoW1y := 0
    WoW2x := PrimaryWidth
    WoW2y := SecondaryHeight
    }
    If (WoWWindows = 4)
    {
    PrimaryWidth := 1900
    PrimaryHeight := TotalResy
    SecondaryWidth := (TotalResx-PrimaryWidth)
    SecondaryHeight := (PrimaryHeight/3)
    WoW1x := PrimaryWidth
    WoW1y := 0
    WoW2x := PrimaryWidth
    WoW2y := SecondaryHeight
    WoW3x := PrimaryWidth
    WoW3y := (SecondaryHeight*2)
    }
    If (WoWWindows = 5)
    {
    PrimaryWidth := 2000
    PrimaryHeight := TotalResy
    SecondaryWidth := (TotalResx-PrimaryWidth)
    SecondaryHeight := (PrimaryHeight/4)
    WoW1x := PrimaryWidth
    WoW1y := 0
    WoW2x := PrimaryWidth
    WoW2y := SecondaryHeight
    WoW3x := PrimaryWidth
    WoW3y := (SecondaryHeight*2)
    WoW4x := PrimaryWidth
    WoW4y := (SecondaryHeight*3)
    }
    If (WoWWindows = 6)
    {
    PrimaryWidth := 2000
    PrimaryHeight := TotalResy
    SecondaryWidth := (TotalResx-PrimaryWidth)
    SecondaryHeight := (PrimaryHeight/5)
    WoW1x := PrimaryWidth
    WoW1y := 0
    WoW2x := PrimaryWidth
    WoW2y := SecondaryHeight
    WoW3x := PrimaryWidth
    WoW3y := (SecondaryHeight*2)
    WoW4x := PrimaryWidth
    WoW4y := (SecondaryHeight*3)
    WoW5x := PrimaryWidth
    WoW5y := (SecondaryHeight*4)
    }
    If (WoWWindows = 7)
    {
    PrimaryWidth := (TotalResx*(2/3))
    PrimaryHeight := (TotalResy*(2/3))
    SecondaryWidth := (TotalResx/3)
    SecondaryHeight := (PrimaryHeight/2)
    WoW1x := PrimaryWidth
    WoW1y := 0
    WoW2x := PrimaryWidth
    WoW2y := SecondaryHeight
    WoW3x := 0
    WoW3y := PrimaryHeight
    WoW4x := SecondaryWidth
    WoW4y := PrimaryHeight
    WoW5x := (SecondaryWidth*2)
    WoW5y := PrimaryHeight
    WoW6x := (SecondaryWidth*3)
    WoW6y := (SecondaryHeight*2)
    }
    If (WoWWindows = 8)
    {
    PrimaryWidth := (TotalResx*(2/3))
    PrimaryHeight := (TotalResy*(2/3))
    SecondaryWidth := (TotalResx/3)
    SecondaryHeight := (PrimaryHeight/2)
    WoW1x := PrimaryWidth
    WoW1y := 0
    WoW2x := PrimaryWidth
    WoW2y := SecondaryHeight
    WoW3x := PrimaryWidth
    WoW3y := (SecondaryHeight*2)
    WoW4x := 0
    WoW4y := PrimaryHeight
    WoW5x := SecondaryWidth
    WoW5y := PrimaryHeight
    WoW6x := (SecondaryWidth*2)
    WoW6y := PrimaryHeight
    WoW7x := (SecondaryWidth*3)
    WoW7y := (SecondaryHeight*2)
    }
    If (WoWWindows = 9)
    {
    PrimaryWidth := (TotalResx*(3/4))
    PrimaryHeight := (TotalResy*(3/4))
    SecondaryWidth := (TotalResx/4)
    SecondaryHeight := (PrimaryHeight/3)
    WoW1x := PrimaryWidth
    WoW1y := 0
    WoW2x := PrimaryWidth
    WoW2y := SecondaryHeight
    WoW3x := PrimaryWidth
    WoW3y := (SecondaryHeight*2)
    WoW4x := 0
    WoW4y := PrimaryHeight
    WoW5x := SecondaryWidth
    WoW5y := PrimaryHeight
    WoW6x := (SecondaryWidth*2)
    WoW6y := PrimaryHeight
    WoW7x := (SecondaryWidth*3)
    WoW7y := PrimaryHeight
    WoW8x := (SecondaryWidth*4)
    WoW8y := PrimaryHeight
    }
    If (WoWWindows = 10)
    {
    PrimaryWidth := (TotalResx*(4/5))
    PrimaryHeight := (TotalResy*(4/5))
    SecondaryWidth := (TotalResx/5)
    SecondaryHeight := (PrimaryHeight/4)
    WoW1x := PrimaryWidth
    WoW1y := 0
    WoW2x := PrimaryWidth
    WoW2y := SecondaryHeight
    WoW3x := PrimaryWidth
    WoW3y := (SecondaryHeight*2)
    WoW4x := PrimaryWidth
    WoW4y := (SecondaryHeight*3)
    WoW5x := 0
    WoW5y := PrimaryHeight
    WoW6x := SecondaryWidth
    WoW6y := PrimaryHeight
    WoW7x := (SecondaryWidth*2)
    WoW7y := PrimaryHeight
    WoW8x := (SecondaryWidth*3)
    WoW8y := PrimaryHeight
    WoW9x := (SecondaryWidth*4)
    WoW9y := PrimaryHeight
    }
    If (WoWWindows = 14)
    {
    PrimaryWidth := (TotalResx*(6/7))
    PrimaryHeight := (TotalResy*(6/7))
    SecondaryWidth := (TotalResx/7)
    SecondaryHeight := (PrimaryHeight/6)
    WoW1x := PrimaryWidth
    WoW1y := 0
    WoW2x := PrimaryWidth
    WoW2y := SecondaryHeight
    WoW3x := PrimaryWidth
    WoW3y := (SecondaryHeight*2)
    WoW4x := PrimaryWidth
    WoW4y := (SecondaryHeight*3)
    WoW5x := PrimaryWidth
    WoW5y := (SecondaryHeight*4)
    WoW6x := PrimaryWidth
    WoW6y := (SecondaryHeight*5)
    WoW7x := 0
    WoW7y := PrimaryHeight
    WoW8x := SecondaryWidth
    WoW8y := PrimaryHeight
    WoW9x := (SecondaryWidth*2)
    WoW9y := PrimaryHeight
    WoW10x := (SecondaryWidth*3)
    WoW10y := PrimaryHeight
    WoW11x := (SecondaryWidth*4)
    WoW11y := PrimaryHeight
    WoW12x := (SecondaryWidth*5)
    WoW12y := PrimaryHeight
    WoW13x := (SecondaryWidth*6)
    WoW13y := PrimaryHeight
    }
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows1%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows1
    GoSub BringToFront
    Tooltip
    Return

    BringToFront:
    WinActivate, ahk_id %WoWWindows14%
    WinActivate, ahk_id %WoWWindows13%
    WinActivate, ahk_id %WoWWindows12%
    WinActivate, ahk_id %WoWWindows11%
    WinActivate, ahk_id %WoWWindows10%
    WinActivate, ahk_id %WoWWindows9%
    WinActivate, ahk_id %WoWWindows8%
    WinActivate, ahk_id %WoWWindows7%
    WinActivate, ahk_id %WoWWindows6%
    WinActivate, ahk_id %WoWWindows5%
    WinActivate, ahk_id %WoWWindows4%
    WinActivate, ahk_id %WoWWindows3%
    WinActivate, ahk_id %WoWWindows2%
    WinActivate, ahk_id %WoWWindows1%
    Winactivate, ahk_id %PrimaryWindow%
    return

    ~1::
    ScrollLock := GetKeyState("ScrollLock", "T")
    If ScrollLock = 0 && WinActive("ahk_id" PrimaryWindow)
    {
    SetScrollLockState, On
    }
    Return

    ~LButton::
    Sleep, 30
    ScrollLock := GetKeyState("ScrollLock", "T")
    If ScrollLock = 1
    {
    If not WinExist("Ahk_exe WoW.exe")
    {
    SetScrollLockState, off
    ExitApp
    } Else If not WinActive("ahk_exe WoW.exe") && not WinActive("SkillButtons")
    {
    SetScrollLockState, off
    }
    }
    return

    ~^LButton::
    Sleep, 30
    ScrollLock := GetKeyState("ScrollLock", "T")
    If ScrollLock = 1
    {

    If WinActive("ahk_exe WoW.exe")
    {
    If WinActive("ahk_id" WoWWindows1) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows1%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows1
    WinActivate, ahk_id %PrimaryWindow%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows2) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows2%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows2
    WinActivate, ahk_id %PrimaryWindow%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows3) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows3%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows3
    WinActivate, ahk_id %PrimaryWindow%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows4) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows4%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows4
    WinActivate, ahk_id %PrimaryWindow%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows5) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows5%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows5
    WinActivate, ahk_id %PrimaryWindow%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows6) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows6%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows6
    WinActivate, ahk_id %PrimaryWindow%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows7) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows7%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows7
    WinActivate, ahk_id %PrimaryWindow%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows8) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows8%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows8
    WinActivate, ahk_id %PrimaryWindow%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows9) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows9%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows9
    WinActivate, ahk_id %PrimaryWindow%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows10) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows10%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows10
    WinActivate, ahk_id %WoWWindows14%
    WinActivate, ahk_id %WoWWindows13%
    WinActivate, ahk_id %WoWWindows12%
    WinActivate, ahk_id %WoWWindows11%
    WinActivate, ahk_id %WoWWindows9%
    WinActivate, ahk_id %WoWWindows8%
    WinActivate, ahk_id %WoWWindows7%
    WinActivate, ahk_id %WoWWindows6%
    WinActivate, ahk_id %WoWWindows5%
    WinActivate, ahk_id %WoWWindows4%
    WinActivate, ahk_id %WoWWindows3%
    WinActivate, ahk_id %WoWWindows2%
    WinActivate, ahk_id %WoWWindows1%
    WinActivate, ahk_id %WoWWindows10%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows11) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows11%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows11
    WinActivate, ahk_id %WoWWindows14%
    WinActivate, ahk_id %WoWWindows13%
    WinActivate, ahk_id %WoWWindows12%
    WinActivate, ahk_id %WoWWindows1%
    WinActivate, ahk_id %WoWWindows10%
    WinActivate, ahk_id %WoWWindows9%
    WinActivate, ahk_id %WoWWindows8%
    WinActivate, ahk_id %WoWWindows7%
    WinActivate, ahk_id %WoWWindows6%
    WinActivate, ahk_id %WoWWindows5%
    WinActivate, ahk_id %WoWWindows4%
    WinActivate, ahk_id %WoWWindows3%
    WinActivate, ahk_id %WoWWindows2%
    WinActivate, ahk_id %WoWWindows11%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows12) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows12%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows12
    WinActivate, ahk_id %PrimaryWindow%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows13) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows13%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows14%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows13
    WinActivate, ahk_id %PrimaryWindow%
    Tooltip
    }
    If WinActive("ahk_id" WoWWindows14) && not WinActive("ahk_id" PrimaryWindow)
    {
    Tooltip "Moving Screens", 500, 500
    WinMove, ahk_id %WoWWindows14%,, 0, 0, %PrimaryWidth%, %PrimaryHeight%
    WinMove, ahk_id %WoWWindows2%,, %WoW1x%, %WoW1y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows3%,, %WoW2x%, %WoW2y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows4%,, %WoW3x%, %WoW3y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows5%,, %WoW4x%, %WoW4y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows6%,, %WoW5x%, %WoW5y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows7%,, %WoW6x%, %WoW6y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows8%,, %WoW7x%, %WoW7y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows9%,, %WoW8x%, %WoW8y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows10%,, %WoW9x%, %WoW9y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows11%,, %WoW10x%, %WoW10y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows12%,, %WoW11x%, %WoW11y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows13%,, %WoW12x%, %WoW12y%, %SecondaryWidth%, %SecondaryHeight%
    WinMove, ahk_id %WoWWindows1%,, %WoW13x%, %WoW13y%, %SecondaryWidth%, %SecondaryHeight%
    PrimaryWindow := WoWWindows14
    WinActivate, ahk_id %PrimaryWindow%
    Tooltip
    }
    } Else If not WinExist("Ahk_exe WoW.exe")
    {
    SetScrollLockState, off
    ExitApp
    } Else If not WinActive("ahk_exe WoW.exe") && not WinActive("SkillButtons")
    {
    SetScrollLockState, off
    }
    }
    return
    [/code]
    I play using a 2k monitor and subtract the taskbar from the Y measurement. All the screens are using similar aspect ratios, but of course not the exact ratio for some amounts of windows. Also note I don't have measurements set up for 11, 12, and 13 windows.

    The script checks how many WoW instances are open and gives them all a variable. It then assigns each window a specific length and width based on screen size. Pressing CTRL+Left Mouse Button sets that window to the primary view.

    I also have it set for AHK to automatically close if all WoW windows are closed, and to turn off Scroll Lock if I am not currently in the WoW window.


    HotKeys (introduction)
    Spoiler: Show

    Mailing labels are an enigma to me. I won't pretend I understand them, but they work for me. I use a shorthand code for each character. Should be easy to figure out by reading them:
    Code:
    //Labels {
    <Label pdp1 Local SendWinM PaladinProtection>
    <Label ma1 Local SendWinM MageArcane>
    <Label dkf1 Local SendWinM DeathKnightFrost>
    <Label wld1 Local SendWinM WarlockDemonology>
    <Label pdh1 Local SendWinM PaladinHoly>
    <Label df1 Local SendWinM DruidFeral>
    <Label db1 Local SendWinM DruidBalance1>
    <Label db2 Local SendWinM DruidBalance2>
    <Label db3 Local SendWinM DruidBalance3>
    <Label dr1 Local SendWinM DruidRestoration>
    <Label wrp1 Local SendWinM WarriorProtection>
    <Label hm1 Local SendWinM HunterMarksman1>
    <Label hm2 Local SendWinM HunterMarksman2>
    <Label hm3 Local SendWinM HunterMarksman3>
    //}
    Now that we have all of our labels, it's time to use the basic hotkeys. As a basic rule of thumb, I try to avoid making one button press a different button. For instance, I make my follow button "F" press the follow macro button (F) in game. I used to have it set for ALT+CTRL+F8 or something, but realized that was dumb. The added bonus is I can look at the macro see the "F" on it, and immediately know that is the button I press to make my characters follow.

    Code:
    <HotKey ScrollLockOn f> //Follow command {
    	<SetVar Following 1>
    	<SendLabel pdp1, ma1, dkf1, wld1, pdh1, df1, db1, db2, db3, dr1, wrp1, hm1, hm2, hm3>
    		<Key f>
    //}
    <HotKey ScrollLockOn Ctrl f> //Break Follow command {
    	<SetVar Following 0>
    	<SendLabel pdp1, ma1, dkf1, wld1, pdh1, df1, db1, db2, db3, dr1, wrp1, hm1, hm2, hm3>
    		<Key down>
    //}
    <MovementHotKey ScrollLockOn Up, Down, Space> //Movement for all boxes. Also Movement HotKeys for all boxes and jump. {
    	<SendLabel pdp1, ma1, dkf1, wld1, pdh1, df1, db1, db2, db3, dr1, wrp1, hm1, hm2, hm3>
    		<Key %Trigger%>
    <MovementHotKey ScrollLockOn Left> //Movement for all boxes
    	<SendLabel pdp1, ma1, dkf1, wld1, pdh1, df1, db1, db2, db3, dr1, wrp1, hm1, hm2, hm3>
    		<Key q>
    <MovementHotKey ScrollLockOn Right> //Movement for all boxes
    	<SendLabel pdp1, ma1, dkf1, wld1, pdh1, df1, db1, db2, db3, dr1, wrp1, hm1, hm2, hm3>
    		<Key e>//}
    These are a few examples of my simple hotkeys. You may have noticed the "Following" Variable I set for my follow hotkey. This is important specifically for differentiating melee DPS and ranged DPS in the following hotkey:
    [code]
    <HotKey ScrollLockOn Button5> //Used for Interact With Target (IWT)
    <Passthrough>
    <If Following Is 1>
    <SetVar Following 0>
    <SendLabel ma1, wld1, db1, db2, db3, dr1, pdh1, hm1, hm2, hm3> //Break Follow command
    <Key Down>
    <EndIf>
    <SendLabel pdp1, dkf1, df1, wrp1>//Melee IWT
    <Key F11>
    [code]
    When I press Mouse Button 5, my ranged DPS and healers will press the "Down" key to break follow, and the melee DPS and tanks will interact with the target, causing them to run into melee range. This is done so the ranged will not continue to follow the master if I happen to be using the tank or melee DPS as the master at that time.


    Hotkeys (FTL)
    Spoiler: Show

    Targeting is a huge dilemma with multiboxing. FTL is so important in order to be able to use any character you want. WoW macros are able to use six modifiers and I use each of them. At the top of my script I have the following that I use for reference:

    Spoiler: Show

    //GLOBAL ORDER FOR SIMILAR HOTKEYS {
    //If you are going to use one hotkey multiple times with slight differences (for instance, how launch buttons all use CapsLockOn Final with modifiers) Go in the following order of modifiers in this hierarchy:
    //LCtrl
    //LShift
    //LAlt
    //RCtrl
    //RShift
    //RAlt
    //For instance: All modifiers should start with one of these, but if using LShift first you should NEVER use LCtrl. All LCtrl modifiers should be exhausted before moving on to LShift.
    //Example of a fully used LCtrl: {
    // LCtrl
    // LCtrl LShift
    // LCtrl LShift LAlt
    // LCtrl LShift LAlt RCtrl
    // LCtrl LShift LAlt RCtrl RShift
    // LCtrl LShift LAlt RCtrl RShift RAlt
    // LCtrl LShift LAlt RCtrl RAlt
    // LCtrl LShift LAlt RShift
    // LCtrl LShift LAlt RShift RAlt
    // LCtrl LShift RCtrl
    // LCtrl LShift RCtrl RShift
    // LCtrl LShift RCtrl RShift RAlt
    // LCtrl LShift RCtrl RAlt
    // LCtrl LAlt
    // LCtrl LAlt RCtrl
    // LCtrl LAlt RCtrl RShift
    // LCtrl LAlt RCtrl RShift RAlt
    // LCtrl LAlt RCtrl RAlt
    // LCtrl LAlt RShift
    // LCtrl LAlt RShift RAlt
    // }
    //Dedicated modifiers for Accounts [Currently only in FTL scripts, need to change all other sections too] {
    // LCtrl - PaladinProtection
    // LCtrl LShift - MageArcane
    // LCtrl LShift LAlt - DeathKnightFrost
    // LCtrl LShift LAlt RCtrl - WarlockDemonology
    // LCtrl LShift LAlt RCtrl RShift - PaladinHoly
    // LCtrl LShift LAlt RCtrl RShift RAlt - DruidFeral
    // LCtrl LShift LAlt RCtrl RAlt - DruidBalance1
    // LCtrl LShift LAlt RShift - DruidBalance2
    // LCtrl LShift LAlt RShift RAlt - DruidBalance3
    // LCtrl LShift RCtrl - DruidRestoration
    // LCtrl LShift RCtrl RShift - WarriorProtection
    // LCtrl LShift RCtrl RShift RAlt - HunterMarksman1
    // LCtrl LShift RCtrl RAlt - HunterMarksman2
    // LCtrl LAlt - HunterMarksman3
    // LCtrl LAlt RCtrl
    // LCtrl LAlt RCtrl RShift
    // LCtrl LAlt RCtrl RShift RAlt
    // LCtrl LAlt RCtrl RAlt
    // LCtrl LAlt RShift
    // LCtrl LAlt RShift RAlt
    //}
    //}

    It's important to stay consistent when writing scripts like this to avoid being confused later, especially after a break.

    Moving on, here are my FTL Templates. I'm very proud of these, they work perfectly.
    Code:
    //FTL Templates - This one is for non-Movement. {
    		
    // %1% : HotKey
    // %2% : Modifier
    // %3% : SlavesToSend
    <Template SendMasterAndSlave>
             <SendFocusWin>
                      <Key %1%>
             <SendLabel %3%>
                      <Key %2% %1%>
    <EndTemplate>
    
    // %1% : HotKey
    // %2% : modifier
    // %3% : Active window
    // %4% : Slave Windows
    <Template SendLeaderless>
            <If ActiveWinIs %3%>
                <ApplyTemplate SendMasterAndSlave "%1%" "%2%" "%4%">
    <EndTemplate>
    
    // %1% : HotKey
    <Template FTL> 
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl" PaladinProtection "ma1,dkf1,wld1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LShift" MageArcane "pdp1,dkf1,wld1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LShift LAlt" DeathKnightFrost "pdp1,ma1,wld1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LShift LAlt RCtrl" WarlockDemonology "pdp1,ma1,dkf1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LShift LAlt RCtrl RShift" PaladinHoly "pdp1,ma1,dkf1,wld1,df1,db1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LShift LAlt RCtrl RShift RAlt" DruidFeral "pdp1,ma1,dkf1,wld1,pdh1,db1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LShift LAlt RCtrl RAlt" DruidBalance1 "pdp1,ma1,dkf1,wld1,pdh1,df1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LShift LAlt RShift" DruidBalance2 "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LShift LAlt RShift RAlt" DruidBalance3 "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db2,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LShift RCtrl" DruidRestoration "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db2,db3,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LShift RCtrl RShift" WarriorProtection "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db2,db3,dr1,hm1,hm2,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LShift RCtrl RShift RAlt" HunterMarksman1 "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm2,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LShift RCtrl RAlt" HunterMarksman2 "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm1,hm3">
    		<ApplyTemplate SendLeaderless "%1%" "LCtrl LAlt" HunterMarksman3 "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm1,hm2">
    <EndTemplate>
    //}
    
    //FTL Templates - This one is for Mouse Presses. {
    		
    // %1% : HotKey
    // %2% : Modifier
    // %3% : SlavesToSend
    <Template MouseSendMasterAndSlave>
    	<Wait 500>
             <Sendlabel %3%>
                      <Key %2% %1%>
    <EndTemplate>
    
    // %1% : HotKey
    // %2% : modifier
    // %3% : Active window
    // %4% : Slave Windows
    <Template MouseSendLeaderless>
            <If ActiveWinIs %3%>
                <ApplyTemplate MouseSendMasterAndSlave "%1%" "%2%" "%4%">
    		<EndIf>	
    <EndTemplate>
    
    // %1% : HotKey
    <Template MouseFTL>     
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl" PaladinProtection "ma1,dkf1,wld1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LShift" MageArcane "pdp1,dkf1,wld1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LShift LAlt" DeathKnightFrost "pdp1,ma1,wld1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LShift LAlt RCtrl" WarlockDemonology "pdp1,ma1,dkf1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LShift LAlt RCtrl RShift" PaladinHoly "pdp1,ma1,dkf1,wld1,df1,db1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LShift LAlt RCtrl RShift RAlt" DruidFeral "pdp1,ma1,dkf1,wld1,pdh1,db1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LShift LAlt RCtrl RAlt" DruidBalance1 "pdp1,ma1,dkf1,wld1,pdh1,df1,db2,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LShift LAlt RShift" DruidBalance2 "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db3,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LShift LAlt RShift RAlt" DruidBalance3 "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db2,dr1,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LShift RCtrl" DruidRestoration "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db2,db3,wrp1,hm1,hm2,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LShift RCtrl RShift" WarriorProtection "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db2,db3,dr1,hm1,hm2,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LShift RCtrl RShift RAlt" HunterMarksman1 "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm2,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LShift RCtrl RAlt" HunterMarksman2 "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm1,hm3">
    		<ApplyTemplate MouseSendLeaderless "%1%" "LCtrl LAlt" HunterMarksman3 "pdp1,ma1,dkf1,wld1,pdh1,df1,db1,db2,db3,dr1,wrp1,hm1,hm2">
    <EndTemplate>
    //}
    
    //FTL Templates - This one is for Specific windows to send to. {
    
    // %1% : KeyToSend
    // %2% : LabelToSend
    // %3% : Modifier
    <Template SpecificSend>
    	<SendLabel %2%>
    		<Key %3% %1%>
    <EndTemplate>
    
    // %1% : KeyToSend
    // %2% : LabelToSend
    // %3% : Modifier
    // %4% : Active Window
    <Template SpecificWindowCheck>
    	 <If PrimaryScreen Is %4%>
                <ApplyTemplate SpecificSend "%1%" "%2%" "%3%">
    <EndTemplate>
    
    // %1% : KeyToSend
    // %2% : LabelToSend
    <Template SpecificFTL>
    	<ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl" PaladinProtection>
        <ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LShift" MageArcane>
        <ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LShift LAlt" DeathKnightFrost>
        <ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LShift LAlt RCtrl" WarlockDemonology>
        <ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LShift LAlt RCtrl RShift" PaladinHoly>  
    	<ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LShift LAlt RCtrl RShift RAlt" DruidFeral>
    	<ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LShift LAlt RCtrl RAlt" DruidBalance1>
    	<ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LShift LAlt RShift" DruidBalance2>
    	<ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LShift LAlt RShift RAlt" DruidBalance3>
    	<ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LShift RCtrl" DruidRestoration>
    	<ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LShift RCtrl RShift" WarriorProtection>
    	<ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LShift RCtrl RShift RAlt" HunterMarksman1>
    	<ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LShift RCtrl RAlt" HunterMarksman2>
    	<ApplyTemplate SpecificWindowCheck "%1%" "%2%" "LCtrl LAlt" HunterMarksman3>
    <EndTemplate>
    //}
    This is likely the most complex part of the entire script. I'll break it down part by part.

    First, each template has the "WindowCheck" template that they all go to. On my Left Mouse button HotKey, I have it set a variable to set "PrimaryScreen" to whatever screen I click on. So whenever I use an FTL template, the script checks for every window to see which one is the primary. Every time I click any FTL HotKey, it discards 13 windows and keeps the 1 window that is set as PrimaryScreen, then moves on to the "Send" section., where it sends the modifiers and the keys. I use Super Duper Macro to set the assist macro, which every FTL macro calls to, more on that in a bit.

    Next, why do I have 3 different FTL templates? The first one is for general button presses that goes to every window EXCEPT for the primary window. Note how SendFocuswin gets the key press (%1%), and all of the other windows get the modifiers as well (%2% AND %1%).
    The second one is for mouse buttons. When using Mouse FTL commands, I do not want the primary window to get an extra click, as my mouse keybinds all are Passthrough. Otherwise, it is the same as the first one.
    The third one is for keybinds that have different destinations. For instance, if I want my healer to press "2" and my tank to press "3" when I press the "4" key, I would use this template.

    Now that the templates are there, let me show you my left mouse button hotkey:
    Code:
    <HotKeyUp ScrollLockOn LButton> 
    	<Passthrough>
    		<ApplyTemplate MouseFTL "x">
    	<ApplyTemplate SetPrimaryWindow PaladinProtection>
    	<ApplyTemplate SetPrimaryWindow MageArcane>
    	<ApplyTemplate SetPrimaryWindow DeathKnightFrost>
    	<ApplyTemplate SetPrimaryWindow WarlockDemonology>
    	<ApplyTemplate SetPrimaryWindow PaladinHoly>
    	<ApplyTemplate SetPrimaryWindow DruidFeral>
    	<ApplyTemplate SetPrimaryWindow DruidBalance1>
    	<ApplyTemplate SetPrimaryWindow DruidBalance2>
    	<ApplyTemplate SetPrimaryWindow DruidBalance3>
    	<ApplyTemplate SetPrimaryWindow DruidRestoration>
    	<ApplyTemplate SetPrimaryWindow WarriorProtection>
    	<ApplyTemplate SetPrimaryWindow HunterMarksman1>
    	<ApplyTemplate SetPrimaryWindow HunterMarksman2>
    	<ApplyTemplate SetPrimaryWindow HunterMarksman3>
    This button does two things: presses the "X" button (which is my assist macro) on every window with FTL modifiers, and it defines the primary window for FTL purposes. Note that the MouseFTL script has a "Wait 500" code in there. This is due to the time it takes for the primary target to go to the server, and back to the secondary windows. This takes about twice as long as there is ping on the server, which is about 150 for me. I give it more time than it needs in case the server or I am lagging. Unfortunately, this means I cannot spam click or HKN will hang until all the wait commands are complete.

    Here is a usage for the Specific FTL template. I have a kick macro on my death knight, and the K button will have ONLY the death knight kick.
    Code:
    <HotKey ScrollLockOn k> //Kick {
    	<ApplyTemplate SpecificFTL "k" "dkf1">
    //}
    Similarlly, here is my taunt macro. It is set to work with 3 tanks. It will have them taunt in a round-robin style, skipping the ones that do not exist:
    Code:
    <HotKey ScrollLockOn t> //Taunt {
    	<If WinDoesNotExist PaladinProtection>
    	<DoHotKey HotKey ScrollLockOn t>
    	<EndIf>
    	<ApplyTemplate SpecificFTL "t" "pdp1">
    	<Toggle>
    	<If WinDoesNotExist DruidFeral>
    	<DoHotKey HotKey ScrollLockOn t>
    	<EndIf>
    	<ApplyTemplate SpecificFTL "t" "df1">
    	<Toggle>
    	<If WinDoesNotExist WarriorProtection>
    	<DoHotKey HotKey ScrollLockOn t>
    	<EndIf>
    	<ApplyTemplate SpecificFTL "t" "wrp1">//}

    Hotkey (One button wins)
    Spoiler: Show

    So, I wanted to make the game as low-complexity as I possibly could. I wanted to make generic DPS and tanking rotations that were "good enough". The problem I ran into is procs. Every DPS class has procs that they have to react to in order to get adequate damage out. Using the SpecificFTL templates I'm able to make toggle-able inputs using If statements. Here is my Onebuttonwins hotkey:
    Code:
    //One Button Wins {
    <HotKey ScrollLockOn 1>
    	<DoHotKey HotKey ScrollLockOn RCtrl Kanji> //Normie classes, these classes have no procs, no toggles, and no execute thresholds. This Keybind will be called each time another class uses an ability. -- RCtrl {
    		<HotKey ScrollLockOn RCtrl Kanji>
    			<ApplyTemplate SpecificFTL "1" pdp1>
    			<ApplyTemplate SpecificFTL "1" ma1>
    			<ApplyTemplate SpecificFTL "1" pdh1>
    			<ApplyTemplate SpecificFTL "1" df1>
    			<ApplyTemplate SpecificFTL "1" dr1>
    			//Warrior will only be here until I feel like changing it.
    			<ApplyTemplate SpecificFTL "1" wrp1>
    			//The Three hunters will be here until I add kill shot.
    			<ApplyTemplate SpecificFTL "1" hm1>
    			<ApplyTemplate SpecificFTL "1" hm2>
    			<ApplyTemplate SpecificFTL "1" hm3>
    // }
    //	<If Execute Is 0> //Execute Classes for when execute is Off (Currently Unused) -- RAlt {
    //		<DoHotKey HotKey ScrollLockOff RAlt Kanji>
    //		<EndIf>
    //}
    	<If Execute Is 1> //Execute Classes for when execute is On -- RAlt {
    		<DoHotKey HotKey ScrollLockOn RAlt Kanji>
    		<EndIf>
    
    //}
    	//Proc toggles. {
    	<If MoltenCore Is 0>  //Molten Core -- RShift {
    		<DoHotKey HotKey ScrollLockOff RShift Kanji>
    		<EndIf>
    
    	<If MoltenCore Is 1>
    		<DoHotKey HotKey ScrollLockOn RShift Kanji>
    		<DoHotKey HotKey ScrollLockOn LCtrl LAlt ModeChange> //Toggle reset
    		<EndIf>
    	// }
    	<If HowlingBlast Is 0> //Howling Blast -- RCtrl RAlt RShift {
    		<DoHotKey HotKey ScrollLockOff RCtrl RAlt RShift Kanji>
    		<EndIf>
    	<If HowlingBlast Is 1>
    		<DoHotKey HotKey ScrollLockOn RCtrl RAlt RShift Kanji>
    		<DoHotKey HotKey ScrollLockOn LAlt LShift ModeChange> //Toggle reset
    		<EndIf>
    //}
    
    	<If Eclipse1 Is 0> //Eclipse1 -- RCtrl RAlt {
    		<DoHotKey HotKey ScrollLockOff RCtrl RAlt Kanji>
    		<EndIf>
    	<If Eclipse1 Is 1>
    		<DoHotKey HotKey ScrollLockOn RCtrl RAlt Kanji>
    		<EndIf>
    // }
    	<If Eclipse2 Is 0> //Eclipse2 -- RCtrl RShift {
    		<DoHotKey HotKey ScrollLockOff RCtrl RShift Kanji>
    		<EndIf>
    	<If Eclipse2 Is 1>
    		<DoHotKey HotKey ScrollLockOn RCtrl RShift Kanji>
    		<EndIf>
    	// }
    	<If Eclipse3 Is 0> //Eclipse3 -- RAlt RShift {
    		<DoHotKey HotKey ScrollLockOff RAlt RShift Kanji>
    		<EndIf>
    	<If Eclipse3 Is 1>
    		<DoHotKey HotKey ScrollLockOn RAlt RShift Kanji>
    		<EndIf>
    // }
    
    //			<HotKey ScrollLockOff RAlt Kanji> //If Execute Is 0 (Currently Unused) {
    //}
    
    			<HotKey ScrollLockOn RAlt Kanji> //If Execute Is 1 {
    				<ApplyTemplate SpecificFTL "Numpad1" wld1>
    //}
    
    			<HotKey ScrollLockOff RShift Kanji> //If MoltenCore Is 0 {
    				<If Execute Is 0> //Check if Execute is on. If it is, then the "Execute Classes" will have already ran and soulfire is being cast.
    					<DoHotKey HotKey ScrollLockOff CapsLockOff RShift Kanji>
    					<EndIf>
    						<HotKey ScrollLockOff CapsLockOff RShift Kanji>
    							<ApplyTemplate SpecificFTL "1" wld1>
    //}
    
    			<HotKey ScrollLockOn RShift Kanji> //If MoltenCore is 1 {
    				<ApplyTemplate SpecificFTL "Numpad2" wld1>
    //}
    
    			<HotKey ScrollLockOff RCtrl RAlt RShift Kanji> //If HowlingBlast Is 0 {
    				<ApplyTemplate SpecificFTL "1" "dkf1">
    				<EndIf>
    //}
    			<HotKey ScrollLockOn RCtrl RAlt RShift Kanji> //If HowlingBlast Is 1 {
    				<ApplyTemplate SpecificFTL "Numpad1" "dkf1">
    				<EndIf>
    //}
    
    			<HotKey ScrollLockOff RCtrl RAlt Kanji>//If Eclipse1 Is 0 {
    				<ApplyTemplate SpecificFTL "1" db1>
    //}
    			<HotKey ScrollLockOn RCtrl RAlt Kanji>//If Eclipse1 Is 1 {
    				<ApplyTemplate SpecificFTL "Numpad1" db1>
    //}
    
    			<HotKey ScrollLockOff RCtrl RShift Kanji>//If Eclipse2 Is 0 {
    				<ApplyTemplate SpecificFTL "1" db2>
    //}
    			<HotKey ScrollLockOn RCtrl RShift Kanji>//If Eclipse2 Is 1 {
    				<ApplyTemplate SpecificFTL "Numpad1" db2>
    //}
    
    			<HotKey ScrollLockOff RAlt RShift Kanji>//If Eclipse3 Is 0 {
    				<ApplyTemplate SpecificFTL "1" db3>
    //}
    			<HotKey ScrollLockOn RAlt RShift Kanji>//If Eclipse3 Is 1 {
    				<ApplyTemplate SpecificFTL "Numpad1" db3>
    //}
    //}
    //}
    //}
    I have an Mik's Scrolling battle text set up to show when any of these need to proc and a message that tells me what key to press to toggle the appropriate variable. For instance, when DruidBalance1 procs, Mik's tells shows me "Press F5!" on the screen.


    To do list
    Spoiler: Show

    One thing I REALLY struggle with is healing. Most multibox healing methods are using mouse clicks, but I've found mouse clicks are very poor when broadcast to other screens, resulting in both delayed healing or scripts as a whole, as well as missed clicks.
    The best solution I found so far is assigning a dedicated hotkey per character. For instance, "Numpad1" is a macro for healing only PaladinProtection, Numpad2 heals MageArcane, and so on. It's not ideal at all for more than 5 characters and even less ideal for dynamic healing.

    Thanks for reading! Got any scripts you wrote that you want to share? Share 'em!
    I did not proofread this : ^)

  2. 4 Weeks Ago  
    I like your idea of using Mik's Scrolling Combat Text to tell you what key to hit. Combat rotation and healing scripts can be made for each spec in lua as an addon that tells you what key to press in chat --- effectively handling most of the decision making required for team management in lua. Then mboxing becomes a game of "Guitar Hero" or DDR. That is, until movements are involved. Maybe combined with some leet keyboard only playstyle, one can clear 5 man dungeons reasonably fast (be like watching someone using the Vim editor).
    Edited: 4 Weeks Ago

  3. 4 Weeks Ago  
    I like your idea of using Mik's Scrolling Combat Text to tell you what key to hit.
    Thank you, works really well.
    Combat rotation and healing scripts can be made for each spec in lua as an addon that tells you what key to press in chat --- effectively handling most of the decision making required for team management in lua.
    That's an interesting take actually. I know nearly nothing about lua, so I think I'd need to learn before taking on anything like that. 99% of my lua knowledge is me recently trying to edit JAMBA to try and make the Display Team module set a healer target, but it doesn't work in combat ;_;
    Then mboxing becomes a game of "Guitar Hero" or DDR. That is, until movements are involved. Maybe combined with some leet keyboard only playstyle, one can clear 5 man dungeons reasonably fast (be like watching someone using the Vim editor).
    Yeah, Mik's really made it feel that way when I tried 10box ICC trash lol

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •