Since Blizzard decided to be total d****s and require you to get the pet and the helm for the Hallow's End achievement, I decided to make a bot that would automatically trick or treat. I found this guide by Bazra really helpful http://www.mmowned.com/forums/world-...ick-macro.html however, like others I had a concern for being banned. One person (CheeseProphet) suggested to make an autoit script that would Trick or Treat, log out for 1h-1h15min and then Trick or Treat again. So I made one! This is my first time writing something from scratch so please be lenient with my mistakes. I am posting the code for it and I am also writing a full guide on not only how to use it but how to customize basically everything about it so that you can minimize as much as possible your chance of getting banned.
The macros you will need to use are the following. Place them in your 1, 2, 3, 4 actions on your action bar:
1:
Code:
/target NameOfInkeeperInFull
For this macro NameOfInkeeperInFull you can go to ANY inn in the world (as long as it's friendly) and use that innkeeper for Trick or Treating. If you are in a far-away, deserted Inn you will be much safer than in any capital city. However, since the bot does log out, it is still pretty safe to camp in Dalaran or any other capital city. IMPORTANT: Make sure you log out close enough to the Innkeeper so that your toon can interact with it. The bot does not move your toon so if you are out of range, it will not be able to accomplish anything. IMPORTANT2: I'd highly advise against using a neutral inn. If you are in combat at the time of logging out or if you get killed, then again the bot will not be able to accomplish anything. Sanctuaries are the best to prevent against this possible issue.
2:
Code:
/script SelectGossipOption(1)
3:
4:
If you are new to this, you must download and install Autoit v3, then open up a blank notepad, copy and paste the code bellow and save it as a .au3 extension (instead of the default .txt). Then simply run this new .au3 file.
The code is as follows:
V1.1 - Added countdown timer. Thank you to 1337pyro for suggesting and contributing code for this function!
V1.2 - Added screenshot taking capability and improved some times.
V1.3 - Added in direct key sending to the WoW client. Yes this means if you get any pop up or if you are on the computer while the bot is trick or treating it will still be able to accomplish its task! Thank you again to 1337pyro for his help on making the bot delay the time between sending keystrokes which fixed the password problem!
Code:
Opt("SendKeyDelay", 100) ;1337pyro's suggestion
$Path = "C:\Program Files\World of Warcraft\WoW.exe"
HotKeySet("{F5}", "TogglePause")
Global $Paused
TogglePause()
ToolTip('',0,0)
MsgBox(0, "Warning!", "IMPORTANT!!! This bot does NOT work if you have an Authenticator tied to your account!" &@CRLF& "It is also recomended that you have started and exited WoW before running this bot.", "", "")
Sleep(1000)
$screenshot = InputBox("Screenshot", "Would you like the bot to take a Screenshot everytime it opens the bag? Type in Y for Yes or anything else/hit cancell for No.", "", "")
Geton()
Func Geton()
ToolTip('Starting WoW...',0,0)
Run($Path, "")
Sleep(15000)
ToolTip('Entering Password',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "YourPasswordHere", 1)
Sleep(2000)
ToolTip('Logging In...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "{ENTER}")
Sleep(20000)
ToolTip('Entering World...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "{ENTER}")
Sleep(30000)
Treat()
EndFunc
Func Treat()
ToolTip('Switching to next action bar...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "k", 1)
Sleep(2000)
ToolTip('Targetting Innkeeper...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "1", 1)
Sleep(Random(2000, 10000, 1))
ToolTip('Interacting with Innkeeper...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "j", 1)
Sleep(Random(2000, 10000, 1))
ToolTip('Trick or Treat!',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "2", 1)
Sleep(Random(2000, 10000, 1))
ToolTip('Opening Bag...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "3", 1)
Sleep(Random(1000, 4000, 1))
If $screenshot = "Y" Then
ToolTip('Taking Screenshot, smile!',0,0)
Sleep (1000)
ControlSend ("World of Warcraft", "" , "" , "{PRINTSCREEN}")
Sleep (1000)
Exitgame()
ElseIf @error = 1 Then
Sleep (100)
Exitgame()
Else
Sleep (100)
Exitgame()
EndIf
Endfunc
Func Exitgame()
ToolTip('Logging out...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "4", 1)
Sleep(Random(2000, 12000, 1))
ToolTip('Backing out to Main Menu...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "{ESC}")
Sleep(Random(2000, 5000, 1))
ToolTip('Exiting Game...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "{ESC}")
Sleep(100)
Waiting()
EndFunc
Func Waiting() ;Thank you to 1337pyro for suggesting and cleaning up this part!
$timeleft = Random(60, 75, 1)
While 1
If $timeleft > 0 Then
ToolTip("The bot will wait "&$timeleft& " minutes before Trick or Treating",0 ,0)
$timeleft = $timeleft-1
Sleep(60000)
Else
Geton()
EndIf
WEnd
EndFunc
Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Paused, F5 to resume.',0,0)
Wend
EndFunc
Ok so let's start off with the first line, the path C:\Program Files\World of Warcraft\WoW.exe. Change this to whatever path WoW.exe is located in. The one posted in the code is the default path so if you haven't changed that during the WoW installation you can leave it as is. The reason I recommended that you have started and exited WoW before running the bot is that the first run usually takes the longest to load and the wait times for the bot aren't set to wait for a very long time (30 seconds to load up). I have a pretty fast computer so if you find that the bot doesn't wait enough after you've logged in, or entered the world, increase these times. This shouldn't be any problem for most people. At the same time, log in to the toon you want the bot to trick or treat with so that when it re-logs back in, it uses the proper toon. IMPORTANT: WoW must be closed when you start the bot. It will automatically start WoW by itself. The first time it does this run-through keep an eye on it and make sure it runs smoothly. As soon as it exits WoW you can walk away with no fear of anything going wrong (unless Windows decides to update and restarts itself or anything crazy like that).
Going further down we encounter YourPasswordHere. This is used ONLY to log you back in after the one hour has passed. As you can see from the script, there is NO WAY it will be sent over the internet(other than to Blizzard's servers to log you in). I am not out to hack you. Since you are only entering the password, the account name must be remembered so please make sure the box "Remember Account Name" is checked.
Further along we get to ToolTip('Switching to next action bar...',0,0)... this whole "paragraph" is OPTIONAL. What it does is switch your action bar 1 to action bar 2 in case you want to save your abilities the way they are on action bar 1 and your action bar 2 is empty. Like I mentioned you can erase this whole paragraph. If you decide to keep it, make sure you go into Key Bindings and switch Next Action Bar from the default Shift + Up Arrow to k. If you want to be even safer, do not use k and use the letter of your choice remembering to change it both in the WoW Key Bindings and in the script where it says ControlSend(..."k"...). Also if you use this paragraph, make sure you put the macros on action bar 2 and not 1.
Further along where it says ToolTip('Interacting with Innkeeper...',0,0) make sure you go into WoW key bindings and change Interact with Target to j. Again you can use any letter or number you wish just remember to change it both in WoW and in the script.
The next couple of actions are straightforward since the ToolTip indicates what step the bot is at.
At the very end, $timeleft = Random(60, 75, 1) the bot simply takes a time between 60 minutes (1h) and 75 minutes (1h15m) and waits that long before logging in so that Blizzard/Warden don't get suspicious if you always log on and run the same actions over and over again.
ANY time you see Sleep() you can change the number in the brackets to whatever you want.
Whenever you see ControlSend(..."1"...), ControlSend(..."2"...), ControlSend(..."3"...), ControlSend(..."4"...) these correspond with the 1, 2, 3, 4 macros. You can switch these numbers to any others on your action bar keys. Make sure wherever you move the macros that they coincide with the numbers that you've edited in the script. REMEMBER: 1 second = 1000 since autoit uses milliseconds.
Final notes: Make sure Autoloot is on. Make sure you don't have an authenticator or if you do, take it off. Make sure if you have multiple accounts, the one you want the bot to log on is selected. Make sure your computer does not Sleep, Hibernate or Shut Down if no input happens for more than an hour. Also, don't run this 24/7, you WILL get banned if you do. Be smart about using it. I cannot guarantee that this bot will not get you banned. **** MAKE SURE YOU HAVE ENOUGH EMPTY ROOM IN YOUR BAGS****
Final, Final notes: If you have any questions please just ask. I am giving full credit to the guide I posted up above, that's where I got macros 2 and 3 and the ideas on how to get this bot to work from. If this is somehow a repost, I apologize and a moderator can delete this thread.
I hope this bot helps you guys out and good luck on getting your pet + helm and possibly even the 310% drake!
Edit 1: Edited to make the guide even clearer and to fix a bunch of spelling/grammar mistakes. As I come up with more potential issues I will update this guide as soon as possible. If you spot something wrong please point it out. I have released this bot as soon as I could and so I haven't had as much time as I'd like to test it. Please bear that in mind if you encounter any errors or problems, thanks! 
Edit 2: Added in the Countdown Timer so now you can see exactly (in minutes) how much time is left until the bot logs on to trick or treat again. Working towards adding in a screenshot feature for when the bot opens the bag, stay tuned! Again, please let me know if I messed anything up. 
Edit 3: Added in V1.2 with screenshot taking capabilities!
Edit 4: Finally! Thanks to 1337pyro's suggestion I was able to get direct key sending to WoW to work including with passwords that have characters such as #$%@! WoW does not have to be the targeted process anymore, everything is now sent directly to it including taking screenshots! Opt("SendKeyDelay", 100) delays the keystrokes sent to WoW, it must be added in for your password to be entered in correctly. I have replaced every Send() to ControlSend(). I have not colored it like I usually do as that would be tedious and it would make the text too colorful. I removed the original version of the code. If you still want it, just send me a PM and I'll send it to you. I also updated the whole guide to accommodate for all the recent changes to the bot.
V2.0 - -I have used the same color scheme in the code as for version 1.X however since a lot of things changed I have opted to only color important parts rather than all the updates (such as taking screenshot etc...).
V2.0 - Added support for multiple toons (on the same server), added prompt for password, changed the way the initial setup of the bot works and some time adjustments.
Code:
Opt("SendKeyDelay", 100) ;1337pyro's suggestion
$Path = "C:\Program Files\World of Warcraft\WoW.exe"
Global $alt = 0
HotKeySet("{F5}", "TogglePause")
Global $Paused
TogglePause()
ToolTip('',0,0)
MsgBox(0, "Warning!", "IMPORTANT!!! This bot does NOT work if you have an Authenticator tied to your account!" &@CRLF& "It is also recomended that you have started and exited WoW before running this bot.", "", "")
Sleep(1000)
$screenshot = InputBox("Screenshot", "Would you like the bot to take a Screenshot everytime it opens the bag? Type in Y for Yes or anything else/hit cancell for No.", "", "")
$yourpass = InputBox("Password", "Please enter your password:" &@CRLF& "I am not out to hack you, please see my forum post and if you are not convinced, edit the script and only put your password there.", "", "")
MsgBox(0, "Warning!", "The bot will now start WoW for the final part of setup!" &@CRLF& "Please do not go afk just yet!", "", "")
Sleep(1000)
ToolTip('Starting WoW, please do not go afk just yet!',0,0)
Run($Path, "")
Sleep(15000)
ToolTip('Entering Password',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , $yourpass)
Sleep(2000)
ToolTip('Logging In...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "{ENTER}")
Sleep(10000)
ToolTip('',0,0)
MsgBox(0, "Warning!", "Please select the main toon or the top most alt you want the bot to log in on RIGHT NOW and then hit OK" &@CRLF& "", "", "")
Sleep(1000)
$alterns = InputBox("Alts", "Would you like the bot to log onto multiple alts? Type in Y for Yes or anything else/hit cancell for No.", "", "")
If $alterns = "Y" Then
$alternumber = InputBox("Alts", "How many alts, EXCLUDING the top most alt, would you like the bot to trick or treat with? (Remember, 7 is the maximum!)", "", "")
If $alternumber = 1 then
$alterpositionone = InputBox("Alts", "What is the position of the second alt compared to the top most alt? (How many slots down?)", "", "")
$alterpositiontwo = 0
$alterpositionthree = 0
$alterpositionfour = 0
$alterpositionfive = 0
$alterpositionsix = 0
$alterpositionseven = 0
EndIf
If $alternumber = 2 then
$alterpositionone = InputBox("Alts", "What is the position of the second alt compared to the top most alt? (How many slots down?)", "", "")
$alterpositiontwo = InputBox("Alts", "What is the position of the third alt compared to the second alt? (How many slots down?)", "", "")
$alterpositionthree = 0
$alterpositionfour = 0
$alterpositionfive = 0
$alterpositionsix = 0
$alterpositionseven = 0
EndIf
If $alternumber = 3 then
$alterpositionone = InputBox("Alts", "What is the position of the second alt compared to the top most alt? (How many slots down?)", "", "")
$alterpositiontwo = InputBox("Alts", "What is the position of the third alt compared to the second alt? (How many slots down?)", "", "")
$alterpositionthree = InputBox("Alts", "What is the position of the fourth alt compared to the third alt? (How many slots down?)", "", "")
$alterpositionfour = 0
$alterpositionfive = 0
$alterpositionsix = 0
$alterpositionseven = 0
EndIf
If $alternumber = 4 then
$alterpositionone = InputBox("Alts", "What is the position of the second alt compared to the top most alt? (How many slots down?)", "", "")
$alterpositiontwo = InputBox("Alts", "What is the position of the third alt compared to the second alt? (How many slots down?)", "", "")
$alterpositionthree = InputBox("Alts", "What is the position of the fourth alt compared to the third alt? (How many slots down?)", "", "")
$alterpositionfour = InputBox("Alts", "What is the position of the fifth alt compared to the fourth alt? (How many slots down?)", "", "")
$alterpositionfive = 0
$alterpositionsix = 0
$alterpositionseven = 0
EndIf
If $alternumber = 5 then
$alterpositionone = InputBox("Alts", "What is the position of the second alt compared to the top most alt? (How many slots down?)", "", "")
$alterpositiontwo = InputBox("Alts", "What is the position of the third alt compared to the second alt? (How many slots down?)", "", "")
$alterpositionthree = InputBox("Alts", "What is the position of the fourth alt compared to the third alt? (How many slots down?)", "", "")
$alterpositionfour = InputBox("Alts", "What is the position of the fifth alt compared to the fourth alt? (How many slots down?)", "", "")
$alterpositionfive = InputBox("Alts", "What is the position of the sixth alt compared to the fifth alt? (How many slots down?)", "", "")
$alterpositionsix = 0
$alterpositionseven = 0
EndIf
If $alternumber = 6 then
$alterpositionone = InputBox("Alts", "What is the position of the second alt compared to the top most alt? (How many slots down?)", "", "")
$alterpositiontwo = InputBox("Alts", "What is the position of the third alt compared to the second alt? (How many slots down?)", "", "")
$alterpositionthree = InputBox("Alts", "What is the position of the fourth alt compared to the third alt? (How many slots down?)", "", "")
$alterpositionfour = InputBox("Alts", "What is the position of the fifth alt compared to the fourth alt? (How many slots down?)", "", "")
$alterpositionfive = InputBox("Alts", "What is the position of the sixth alt compared to the fifth alt? (How many slots down?)", "", "")
$alterpositionsix = InputBox("Alts", "What is the position of the seventh alt compared to the sixth alt? (How many slots down?)", "", "")
$alterpositionseven = 0
EndIf
If $alternumber = 7 then
$alterpositionone = 1
$alterpositiontwo = 1
$alterpositionthree = 1
$alterpositionfour = 1
$alterpositionfive = 1
$alterpositionsix = 1
$alterpositionseven = 1
EndIf
ElseIf @error = 1 Then
Treat()
Sleep (100)
Else
Treat()
Sleep (100)
EndIf
$totalpos = $alterpositionone + $alterpositiontwo + $alterpositionthree + $alterpositionfour + $alterpositionfive + $alterpositionsix + $alterpositionseven
Treat()
Func Treat()
ToolTip('Entering World...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "{ENTER}")
Sleep(30000)
ToolTip('Switching to next action bar...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "k", 1)
Sleep(2000)
ToolTip('Targetting Innkeeper...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "1", 1)
Sleep(Random(2000, 10000, 1))
ToolTip('Interacting with Innkeeper...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "j", 1)
Sleep(Random(2000, 10000, 1))
ToolTip('Trick or Treat!',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "2", 1)
Sleep(Random(2000, 10000, 1))
ToolTip('Opening Bag...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "3", 1)
Sleep(Random(1000, 4000, 1))
If $screenshot = "Y" Then
ToolTip('Taking Screenshot, smile!',0,0)
Sleep (1000)
ControlSend ("World of Warcraft", "" , "" , "{PRINTSCREEN}")
Sleep (1000)
ElseIf @error = 1 Then
Sleep (100)
Else
Sleep (100)
EndIf
ToolTip('Logging out...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "4", 1)
Sleep(Random(2000, 12000, 1))
If $alterns = "Y" Then
If $alt < $alternumber then
$alt = $alt + 1
Secondalt()
Else
ExitgameAlts()
EndIf
ElseIf @error = 1 Then
Exitgame()
Sleep (100)
Else
Exitgame()
Sleep (100)
EndIf
EndFunc
Func Exitgame()
ToolTip('Backing out to Main Menu...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "{ESC}")
Sleep(Random(2000, 5000, 1))
ToolTip('Exiting Game...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "{ESC}")
Sleep(100)
Waiting()
EndFunc
Func Waiting() ;Thank you to 1337pyro for suggesting and cleaning up this part!
$timeleft = Random(60, 75, 1)
While 1
If $timeleft > 0 Then
ToolTip("The bot will wait "&$timeleft& " minute(s) before Trick or Treating",0 ,0)
$timeleft = $timeleft-1
Sleep(60000)
Else
Geton()
EndIf
WEnd
EndFunc
Func Geton()
ToolTip('Starting WoW...',0,0)
Run($Path, "")
Sleep(15000)
ToolTip('Entering Password',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , $yourpass)
Sleep(2000)
ToolTip('Logging In...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "{ENTER}")
Sleep(15000)
Treat()
EndFunc
Func Secondalt()
ToolTip('Switching alts',0,0)
Sleep(3000)
$alterpositiononeone = $alterpositionone
$alterpositiontwotwo = $alterpositiontwo
$alterpositionthreethree = $alterpositionthree
$alterpositionfourfour = $alterpositionfour
$alterpositionfivefive = $alterpositionfive
$alterpositionsixsix = $alterpositionsix
$alterpositionsevenseven = $alterpositionseven
If $alt = 1 then
While 1
If $alterpositiononeone > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositiononeone = $alterpositiononeone - 1
Else
Sleep(100)
Treat()
Endif
Wend
ElseIf $alt = 2 then
While 1
If $alterpositiontwotwo > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositiontwotwo = $alterpositiontwotwo - 1
Else
Sleep(100)
Treat()
Endif
Wend
ElseIf $alt = 3 then
While 1
If $alterpositionthreethree > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositionthreethree = $alterpositionthreethree - 1
Else
Sleep(100)
Treat()
Endif
Wend
ElseIf $alt = 4 then
While 1
If $alterpositionfourfour > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositionfourfour = $alterpositionfourfour - 1
Else
Sleep(100)
Treat()
Endif
Wend
ElseIf $alt = 5 then
While 1
If $alterpositionfivefive > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositionfivefive = $alterpositionfivefive - 1
Else
Sleep(100)
Treat()
Endif
Wend
ElseIf $alt = 6 then
While 1
If $alterpositionsixsix > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositionsixsix = $alterpositionsixsix - 1
Else
Sleep(100)
Treat()
Endif
Wend
ElseIf $alt = 7 then
While 1
If $alterpositionsevenseven > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositionsevenseven = $alterpositionsevenseven - 1
Else
Sleep(100)
Treat()
Endif
Wend
Endif
EndFunc
Func ExitgameAlts()
ToolTip('Backing out to Main Menu...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "{ESC}")
Sleep(Random(2000, 5000, 1))
ToolTip('Exiting Game...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "{ESC}")
Sleep(100)
WaitingAlts()
EndFunc
Func WaitingAlts()
$timeleft = Random(60, 75, 1)
While 1
If $timeleft > 0 Then
ToolTip("The bot will wait "&$timeleft& " minute(s) before Trick or Treating",0 ,0)
$timeleft = $timeleft-1
Sleep(60000)
Else
GetonAlts()
EndIf
WEnd
EndFunc
Func GetonAlts()
$alt = 0
ToolTip('Starting WoW...',0,0)
Run($Path, "")
Sleep(15000)
ToolTip('Entering Password',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , $yourpass)
Sleep(2000)
ToolTip('Logging In...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "{ENTER}")
Sleep(15000)
ToolTip('Switching to first alt',0,0)
Sleep(3000)
$totalpop = $totalpos
While 1
If $totalpop > 0 then
ControlSend ("World of Warcraft", "" , "" , "{UP}")
Sleep(500)
$totalpop = $totalpop - 1
Else
Sleep(100)
Treat()
Endif
Wend
EndFunc
Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Paused, F5 to resume.',0,0)
Wend
EndFunc
Let me get the $yourpass out of the way first. The bot will now ask you for your password. Again just like before you can inspect the code and see that it is not sending information over the web except entering it into WoW. I have colored everywhere $yourpass shows up. If you feel uncomfortable or just don't want to enter your password in the prompt every time you start the bot up, then you can delete $yourpass = inputbox... all together and replace in the three places that $yourpass appears ...."YourPasswordHere", 1).
Next up, the bot does something different, it will start WoW up in order to continue the initial setup. For this to work, WoW should be run in Windowed mode (doesn't matter if it's in Full Screen Windowed or just Windowed). You will get a prompt telling you to chose either the main character(if only one) or the top most alt that you want the bot to trick or treat on. The the top most alt would be alt number 1 colored in red in the picture bellow. Now you will be prompted whether you want the bot to trick or treat with one toon or with multiple toons. If you chose just one toon, it will run the same exact process as in version 1.3. If you chose multiple toons you will have to enter just a few more options and the bot is almost setup!

The first question you will be asked is: "How many alts, EXCLUDING the top most alt, would you like the bot to trick or treat with? (Remember, 7 is the maximum!)." This is pretty straightforward. If you want the bot to trick or treat on 3 toons in total, you already picked the top most alt in a previous step and so excluding that one, you'd enter 2 into the prompt-box.
Next you will be asked about relative positions from one alt to the next. Let's continue using the example we used above. So our top most alt in this scenario is number 1 in red. Our second alt that we want to use will be number 5 and the third and last alt will be number 8. The first question asked is: "What is the position of the second alt compared to the top most alt? (How many slots down?)." So the second alt is in position 5 and the first alt is in position 1. From position 1 down to position 5, we have to go down 4 times (5-1=4). 4 is the number you will enter in the prompt box. Now the next question asked will be: "What is the position of the third alt compared to the second alt? (How many slots down?)." The third alt like we said is in position 8 while the second alt is in position 5. From position 5 down to position 8, we have to go down 3 times (8-5=3). 3 is the number you will enter in this prompt box. Now you are done! While doing this setup you should not have changed anything in WoW, it should still be clicked on the top most alt. From here on the bot will trick or treat on the toons you've set up. The reason I've made WoW start up while the setup is still going on is for you to easily see which alts you want to use and in which positions they are in relative to each other.
NOTE!: Make sure you setup the SAME macros, key bindings and turn on auto-loot for all your alts. If you have chosen 7 alts in a previous prompt (thus being 8 toons in total), the bot automatically knows that each toon is down only one space every time from one another so you will not be asked any of these questions.
****IMPORTANT SUPER NOTE****: Version 2.0 is FULLY tested however as there is only 1 week left on Hallow's End I'm rushing to share it. UNLESS OTHERWISE STATED if you hit cancel or you type gibberish in the prompt box the bot will crash and you will have to restart the whole setup. The bot CANNOT verify that you chose the right alts, please pay attention and be careful during the initial setup. Once the bot is starting up, keep an eye on it and make sure everything works perfectly the first time around. If the first run is flawless the rest of the runs will be flawless too.
Side-note: As in Version 1.X everything is customizable. The same instructions work for Version 2.0 and I have colored the txt in for easy reference. I have tried to simplify the code as much as possible. If you can simplify it further or if you have any other suggestions on how something could be done differently please feel free to share, I'd love to hear it!
V2.1 - It's starting to take a lot of time to write up a guide and color everything so for this version I will simply post the code up. This version adds the feature of remembering your settings and then using them the next time the bot logs back on! It will create a file wherever you save the bot called botsettings.ini. Do not delete this file if you want your settings remembered. You can open it with notepad and see that the only thing it does is store your settings. Every time the bot is started up afterwords it will ask you if you want to use previous settings. I haven't had much time to test this or to attempt to simplify the code so again if you find something wrong or if you know how to simplify some things further please share! 
Code:
Opt("SendKeyDelay", 100)
$Path = "C:\Program Files\World of Warcraft\WoW.exe"
Global $alt = 0
HotKeySet("{F5}", "TogglePause")
Global $Paused
TogglePause()
ToolTip('',0,0)
MsgBox(0, "Warning!", "IMPORTANT!!! This bot does NOT work if you have an Authenticator tied to your account!" &@CRLF& "It is also recomended that you have started and exited WoW before running this bot.", "", "")
Sleep(1000)
$previoussets = InputBox("Previous", "Would you like the bot to use previous settings that you have used? Y - Yes, N/Cancell - No" &@CRLF& "If you have not previously set any settings chose any option.", "", "")
If $previoussets = "Y" then
$location = "botsettings.ini"
ElseIf @error = 1 Then
$location = "43resddsea.ini"
Sleep (100)
Else
$location = "43resddsea.ini"
Sleep (100)
EndIf
$screenshot = IniRead ($location, "", "$screenshot", "E")
If $screenshot = "E" then
$screenshot = InputBox("Screenshot", "Would you like the bot to take a Screenshot everytime it opens the bag? Type in Y for Yes or anything else/hit cancell for No.", "", "")
IniWrite ("botsettings.ini", "", "$screenshot", $screenshot)
Else
Sleep(100)
EndIf
$yourpass = IniRead ($location, "", "$yourpass", "E")
If $yourpass = "E" then
$yourpass = InputBox("Password", "Please enter your password:" &@CRLF& "I am not out to hack you, please see my forum post and if you are not convinced, edit the script and only put your password there.", "", "")
IniWrite ("botsettings.ini", "", "$yourpass", $yourpass)
Else
Sleep(100)
EndIf
MsgBox(0, "Warning!", "The bot will now start WoW for the final part of setup!" &@CRLF& "Please do not go afk just yet!", "", "")
Sleep(1000)
ToolTip('Starting WoW, please do not go afk just yet!',0,0)
Run($Path, "")
Sleep(15000)
ToolTip('Entering Password',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , $yourpass)
Sleep(2000)
ToolTip('Logging In...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "{ENTER}")
Sleep(10000)
ToolTip('',0,0)
MsgBox(0, "Warning!", "Please select the main toon or the top most alt you want the bot to log in on RIGHT NOW and then hit OK" &@CRLF& "", "", "")
Sleep(1000)
$alterns = IniRead ($location, "", "$alterns", "E")
If $alterns = "E" then
$alterns = InputBox("Alts", "Would you like the bot to log onto multiple alts? Type in Y for Yes or anything else/hit cancell for No.", "", "")
IniWrite ("botsettings.ini", "", "$alterns", $alterns)
Else
Sleep(100)
EndIf
If $alterns = "Y" Then
$alternumber = IniRead ($location, "", "$alternumber", "E")
If $alternumber = "E" then
$alternumber = InputBox("Alts", "How many alts, EXCLUDING the top most alt, would you like the bot to trick or treat with? (Remember, 7 is the maximum!)", "", "")
IniWrite ("botsettings.ini", "", "$alternumber", $alternumber)
Else
Sleep(100)
EndIf
If $alternumber = 1 then
$alterpositionone = IniRead ($location, "", "$alterpositionone", "E")
If $alterpositionone = "E" then
$alterpositionone = InputBox("Alts", "What is the position of the second alt compared to the top most alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionone", $alterpositionone)
Else
Sleep(100)
EndIf
$alterpositiontwo = 0
$alterpositionthree = 0
$alterpositionfour = 0
$alterpositionfive = 0
$alterpositionsix = 0
$alterpositionseven = 0
EndIf
If $alternumber = 2 then
$alterpositionone = IniRead ($location, "", "$alterpositionone", "E")
If $alterpositionone = "E" then
$alterpositionone = InputBox("Alts", "What is the position of the second alt compared to the top most alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionone", $alterpositionone)
Else
Sleep(100)
EndIf
$alterpositiontwo = IniRead ($location, "", "$alterpositiontwo", "E")
If $alterpositiontwo = "E" then
$alterpositiontwo = InputBox("Alts", "What is the position of the third alt compared to the second alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositiontwo", $alterpositiontwo)
Else
Sleep(100)
EndIf
$alterpositionthree = 0
$alterpositionfour = 0
$alterpositionfive = 0
$alterpositionsix = 0
$alterpositionseven = 0
EndIf
If $alternumber = 3 then
$alterpositionone = IniRead ($location, "", "$alterpositionone", "E")
If $alterpositionone = "E" then
$alterpositionone = InputBox("Alts", "What is the position of the second alt compared to the top most alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionone", $alterpositionone)
Else
Sleep(100)
EndIf
$alterpositiontwo = IniRead ($location, "", "$alterpositiontwo", "E")
If $alterpositiontwo = "E" then
$alterpositiontwo = InputBox("Alts", "What is the position of the third alt compared to the second alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositiontwo", $alterpositiontwo)
Else
Sleep(100)
EndIf
$alterpositionthree = IniRead ($location, "", "$alterpositionthree", "E")
If $alterpositionthree = "E" then
$alterpositionthree = InputBox("Alts", "What is the position of the fourth alt compared to the third alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionthree", $alterpositionthree)
Else
Sleep(100)
EndIf
$alterpositionfour = 0
$alterpositionfive = 0
$alterpositionsix = 0
$alterpositionseven = 0
EndIf
If $alternumber = 4 then
$alterpositionone = IniRead ($location, "", "$alterpositionone", "E")
If $alterpositionone = "E" then
$alterpositionone = InputBox("Alts", "What is the position of the second alt compared to the top most alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionone", $alterpositionone)
Else
Sleep(100)
EndIf
$alterpositiontwo = IniRead ($location, "", "$alterpositiontwo", "E")
If $alterpositiontwo = "E" then
$alterpositiontwo = InputBox("Alts", "What is the position of the third alt compared to the second alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositiontwo", $alterpositiontwo)
Else
Sleep(100)
EndIf
$alterpositionthree = IniRead ($location, "", "$alterpositionthree", "E")
If $alterpositionthree = "E" then
$alterpositionthree = InputBox("Alts", "What is the position of the fourth alt compared to the third alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionthree", $alterpositionthree)
Else
Sleep(100)
EndIf
$alterpositionfour = IniRead ($location, "", "$alterpositionfour", "E")
If $alterpositionfour = "E" then
$alterpositionfour = InputBox("Alts", "What is the position of the fifth alt compared to the fourth alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionfour", $alterpositionfour)
Else
Sleep(100)
EndIf
$alterpositionfive = 0
$alterpositionsix = 0
$alterpositionseven = 0
EndIf
If $alternumber = 5 then
$alterpositionone = IniRead ($location, "", "$alterpositionone", "E")
If $alterpositionone = "E" then
$alterpositionone = InputBox("Alts", "What is the position of the second alt compared to the top most alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionone", $alterpositionone)
Else
Sleep(100)
EndIf
$alterpositiontwo = IniRead ($location, "", "$alterpositiontwo", "E")
If $alterpositiontwo = "E" then
$alterpositiontwo = InputBox("Alts", "What is the position of the third alt compared to the second alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositiontwo", $alterpositiontwo)
Else
Sleep(100)
EndIf
$alterpositionthree = IniRead ($location, "", "$alterpositionthree", "E")
If $alterpositionthree = "E" then
$alterpositionthree = InputBox("Alts", "What is the position of the fourth alt compared to the third alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionthree", $alterpositionthree)
Else
Sleep(100)
EndIf
$alterpositionfour = IniRead ($location, "", "$alterpositionfour", "E")
If $alterpositionfour = "E" then
$alterpositionfour = InputBox("Alts", "What is the position of the fifth alt compared to the fourth alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionfour", $alterpositionfour)
Else
Sleep(100)
EndIf
$alterpositionfive = IniRead ($location, "", "$alterpositionfive", "E")
If $alterpositionfive = "E" then
$alterpositionfive = InputBox("Alts", "What is the position of the sixth alt compared to the fifth alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionfive", $alterpositionfive)
Else
Sleep(100)
EndIf
$alterpositionsix = 0
$alterpositionseven = 0
EndIf
If $alternumber = 6 then
$alterpositionone = IniRead ($location, "", "$alterpositionone", "E")
If $alterpositionone = "E" then
$alterpositionone = InputBox("Alts", "What is the position of the second alt compared to the top most alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionone", $alterpositionone)
Else
Sleep(100)
EndIf
$alterpositiontwo = IniRead ($location, "", "$alterpositiontwo", "E")
If $alterpositiontwo = "E" then
$alterpositiontwo = InputBox("Alts", "What is the position of the third alt compared to the second alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositiontwo", $alterpositiontwo)
Else
Sleep(100)
EndIf
$alterpositionthree = IniRead ($location, "", "$alterpositionthree", "E")
If $alterpositionthree = "E" then
$alterpositionthree = InputBox("Alts", "What is the position of the fourth alt compared to the third alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionthree", $alterpositionthree)
Else
Sleep(100)
EndIf
$alterpositionfour = IniRead ($location, "", "$alterpositionfour", "E")
If $alterpositionfour = "E" then
$alterpositionfour = InputBox("Alts", "What is the position of the fifth alt compared to the fourth alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionfour", $alterpositionfour)
Else
Sleep(100)
EndIf
$alterpositionfive = IniRead ($location, "", "$alterpositionfive", "E")
If $alterpositionfive = "E" then
$alterpositionfive = InputBox("Alts", "What is the position of the sixth alt compared to the fifth alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionfive", $alterpositionfive)
Else
Sleep(100)
EndIf
$alterpositionsix = IniRead ($location, "", "$alterpositionsix", "E")
If $alterpositionsix = "E" then
$alterpositionsix = InputBox("Alts", "What is the position of the seventh alt compared to the sixth alt? (How many slots down?)", "", "")
IniWrite ("botsettings.ini", "", "$alterpositionsix", $alterpositionsix)
Else
Sleep(100)
EndIf
$alterpositionseven = 0
EndIf
If $alternumber = 7 then
$alterpositionone = 1
$alterpositiontwo = 1
$alterpositionthree = 1
$alterpositionfour = 1
$alterpositionfive = 1
$alterpositionsix = 1
$alterpositionseven = 1
EndIf
ElseIf @error = 1 Then
Treat()
Sleep (100)
Else
Treat()
Sleep (100)
EndIf
$totalpos = $alterpositionone + $alterpositiontwo + $alterpositionthree + $alterpositionfour + $alterpositionfive + $alterpositionsix + $alterpositionseven
Treat()
Func Treat()
ToolTip('Entering World...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "{ENTER}")
Sleep(30000)
ToolTip('Switching to next action bar...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "k", 1)
Sleep(2000)
ToolTip('Targetting Innkeeper...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "1", 1)
Sleep(Random(2000, 10000, 1))
ToolTip('Interacting with Innkeeper...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "j", 1)
Sleep(Random(2000, 10000, 1))
ToolTip('Trick or Treat!',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "2", 1)
Sleep(Random(2000, 10000, 1))
ToolTip('Opening Bag...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "3", 1)
Sleep(Random(1000, 4000, 1))
If $screenshot = "Y" Then
ToolTip('Taking Screenshot, smile!',0,0)
Sleep (1000)
ControlSend ("World of Warcraft", "" , "" , "{PRINTSCREEN}")
Sleep (1000)
ElseIf @error = 1 Then
Sleep (100)
Else
Sleep (100)
EndIf
ToolTip('Logging out...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "4", 1)
Sleep(Random(2000, 12000, 1))
If $alterns = "Y" Then
If $alt < $alternumber then
$alt = $alt + 1
Secondalt()
Else
ExitgameAlts()
EndIf
ElseIf @error = 1 Then
Exitgame()
Sleep (100)
Else
Exitgame()
Sleep (100)
EndIf
EndFunc
Func Exitgame()
ToolTip('Backing out to Main Menu...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "{ESC}")
Sleep(Random(2000, 5000, 1))
ToolTip('Exiting Game...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "{ESC}")
Sleep(100)
Waiting()
EndFunc
Func Waiting()
$timeleft = Random(60, 75, 1)
While 1
If $timeleft > 0 Then
ToolTip("The bot will wait "&$timeleft& " minute(s) before Trick or Treating",0 ,0)
$timeleft = $timeleft-1
Sleep(60000)
Else
Geton()
EndIf
WEnd
EndFunc
Func Geton()
ToolTip('Starting WoW...',0,0)
Run($Path, "")
Sleep(15000)
ToolTip('Entering Password',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , $yourpass)
Sleep(2000)
ToolTip('Logging In...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "{ENTER}")
Sleep(15000)
Treat()
EndFunc
Func Secondalt()
ToolTip('Switching alts',0,0)
Sleep(3000)
$alterpositiononeone = $alterpositionone
$alterpositiontwotwo = $alterpositiontwo
$alterpositionthreethree = $alterpositionthree
$alterpositionfourfour = $alterpositionfour
$alterpositionfivefive = $alterpositionfive
$alterpositionsixsix = $alterpositionsix
$alterpositionsevenseven = $alterpositionseven
If $alt = 1 then
While 1
If $alterpositiononeone > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositiononeone = $alterpositiononeone - 1
Else
Sleep(100)
Treat()
Endif
Wend
ElseIf $alt = 2 then
While 1
If $alterpositiontwotwo > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositiontwotwo = $alterpositiontwotwo - 1
Else
Sleep(100)
Treat()
Endif
Wend
ElseIf $alt = 3 then
While 1
If $alterpositionthreethree > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositionthreethree = $alterpositionthreethree - 1
Else
Sleep(100)
Treat()
Endif
Wend
ElseIf $alt = 4 then
While 1
If $alterpositionfourfour > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositionfourfour = $alterpositionfourfour - 1
Else
Sleep(100)
Treat()
Endif
Wend
ElseIf $alt = 5 then
While 1
If $alterpositionfivefive > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositionfivefive = $alterpositionfivefive - 1
Else
Sleep(100)
Treat()
Endif
Wend
ElseIf $alt = 6 then
While 1
If $alterpositionsixsix > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositionsixsix = $alterpositionsixsix - 1
Else
Sleep(100)
Treat()
Endif
Wend
ElseIf $alt = 7 then
While 1
If $alterpositionsevenseven > 0 then
ControlSend ("World of Warcraft", "" , "" , "{DOWN}")
Sleep(500)
$alterpositionsevenseven = $alterpositionsevenseven - 1
Else
Sleep(100)
Treat()
Endif
Wend
Endif
EndFunc
Func ExitgameAlts()
ToolTip('Backing out to Main Menu...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "{ESC}")
Sleep(Random(2000, 5000, 1))
ToolTip('Exiting Game...',0,0)
Sleep(1000)
ControlSend ("World of Warcraft", "" , "" , "{ESC}")
Sleep(100)
WaitingAlts()
EndFunc
Func WaitingAlts()
$timeleft = Random(60, 75, 1)
While 1
If $timeleft > 0 Then
ToolTip("The bot will wait "&$timeleft& " minute(s) before Trick or Treating",0 ,0)
$timeleft = $timeleft-1
Sleep(60000)
Else
GetonAlts()
EndIf
WEnd
EndFunc
Func GetonAlts()
$alt = 0
ToolTip('Starting WoW...',0,0)
Run($Path, "")
Sleep(15000)
ToolTip('Entering Password',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , $yourpass)
Sleep(2000)
ToolTip('Logging In...',0,0)
Sleep(3000)
ControlSend ("World of Warcraft", "" , "" , "{ENTER}")
Sleep(15000)
ToolTip('Switching to first alt',0,0)
Sleep(3000)
$totalpop = $totalpos
While 1
If $totalpop > 0 then
ControlSend ("World of Warcraft", "" , "" , "{UP}")
Sleep(500)
$totalpop = $totalpop - 1
Else
Sleep(100)
Treat()
Endif
Wend
EndFunc
Func TogglePause()
$Paused = NOT $Paused
While $Paused
sleep(100)
ToolTip('Paused, F5 to resume.',0,0)
Wend
EndFunc