/scripts/WoW.ahk

http://wow5box.googlecode.com/ · AutoHotKey · 323 lines · 202 code · 55 blank · 66 comment · 2 complexity · e3976f4183e8f7e7fd2b315043df9e9c MD5 · raw file

  1. ; AutoHotkey Version: 1.x
  2. ; Language: English
  3. ; Platform: Win9x/NT
  4. ; Author: Chorizotarian
  5. #NoEnv
  6. #SingleInstance force
  7. SendMode Input
  8. SetWorkingDir %A_ScriptDir%
  9. ;**************************************************************************************************
  10. ; Functions
  11. ;**************************************************************************************************
  12. ;-------------------------------------
  13. ; Key Broadcasting
  14. ;-------------------------------------
  15. ; Send a string to a specific WoW instance
  16. SendWow(iWow, strKeys)
  17. {
  18. localPid := pid%iWow%
  19. IfWinNotActive, ahk_pid %localPid%
  20. ControlSend, , %strKeys%, ahk_pid %localPid%
  21. }
  22. ; Send a string to the main (WoW index 1)
  23. SendMain(strKeys)
  24. {
  25. SendWow(1, strKeys)
  26. }
  27. ; Send a string to the clones (WoW index 2+)
  28. SendClones(strKeys)
  29. {
  30. global nPids
  31. nClones := nPids-1
  32. Loop, %nClones%
  33. {
  34. iClone := A_Index + 1
  35. SendWow(iClone, strKeys)
  36. }
  37. }
  38. ; Send a string to everyone
  39. SendAll(strKeys)
  40. {
  41. global nPids
  42. Loop, %nPids%
  43. {
  44. SendWow(A_Index, strKeys)
  45. }
  46. }
  47. ; Send a string to a specific WoW instance, don't check focus
  48. ForceWow(iWow, strKeys)
  49. {
  50. localPid := pid%iWow%
  51. ControlSend, , %strKeys%, ahk_pid %localPid%
  52. }
  53. ; Send a raw string to a specific WoW instance, don't check focus
  54. ForceWowRaw(iWow, strKeys)
  55. {
  56. localPid := pid%iWow%
  57. ControlSendRaw, , %strKeys%, ahk_pid %localPid%
  58. }
  59. ; Send a string to the clones (WoW index 2+), don't check focus
  60. ForceClones(strKeys)
  61. {
  62. global nPids
  63. nClones := nPids-1
  64. Loop, %nClones%
  65. {
  66. iClone := A_Index + 1
  67. ForceWow(iClone, strKeys)
  68. }
  69. }
  70. ; Send a string to the clones (WoW index 2+), don't check focus
  71. ForceClonesRaw(strKeys)
  72. {
  73. global nPids
  74. nClones := nPids-1
  75. Loop, %nClones%
  76. {
  77. iClone := A_Index + 1
  78. ForceWowRaw(iClone, strKeys)
  79. }
  80. }
  81. ; Send a string to everyone, don't check focus
  82. ForceAll(strKeys)
  83. {
  84. global nPids
  85. Loop, %nPids%
  86. {
  87. ForceWow(A_Index, strKeys)
  88. }
  89. }
  90. ; Send a string to everyone, don't check focus
  91. ForceAllRaw(strKeys)
  92. {
  93. global nPids
  94. Loop, %nPids%
  95. {
  96. ForceWowRaw(A_Index, strKeys)
  97. }
  98. }
  99. ;-------------------------------------
  100. ; Movement / Formations
  101. ;-------------------------------------
  102. ; Spread out into a line: 2 3 1 4 5
  103. BeginSpreadLine()
  104. {
  105. SendWow(2, "{Q down}")
  106. SendWow(3, "{NumpadDiv down}{NumpadDiv up}{Q down}")
  107. SendWow(4, "{NumpadDiv down}{NumpadDiv up}{E down}")
  108. SendWow(5, "{E down}")
  109. }
  110. EndSpreadLine()
  111. {
  112. SendWow(2, "{Q up}")
  113. SendWow(3, "{NumpadDiv down}{NumpadDiv up}{Q up}")
  114. SendWow(4, "{NumpadDiv down}{NumpadDiv up}{E up}")
  115. SendWow(5, "{E up}")
  116. }
  117. ; Spread out into a box with 1 at the center
  118. BeginSpreadBox()
  119. {
  120. SendWow(2, "{Q down}{W down}")
  121. SendWow(3, "{Q down}{S down}")
  122. SendWow(4, "{E down}{W down}")
  123. SendWow(5, "{E down}{S down}")
  124. }
  125. EndSpreadBox()
  126. {
  127. SendWow(2, "{Q up}{W up}{NumpadMult down}{NumpadMult up}")
  128. SendWow(3, "{Q up}{S up}{NumpadMult down}{NumpadMult up}")
  129. SendWow(4, "{E up}{W up}{NumpadMult down}{NumpadMult up}")
  130. SendWow(5, "{E up}{S up}{NumpadMult down}{NumpadMult up}")
  131. SendWow(2, "{S down}{S up}")
  132. SendWow(3, "{S down}{S up}")
  133. SendWow(4, "{S down}{S up}")
  134. SendWow(5, "{S down}{S up}")
  135. }
  136. ;**************************************************************************************************
  137. ; Startup
  138. ;**************************************************************************************************
  139. pidStr = %1%
  140. password = %2%
  141. hardPause = 0 ; pause key pressed
  142. ; Get WoW process IDs from input params
  143. nPids = 0
  144. Loop, parse, pidStr, `,
  145. {
  146. ++nPids
  147. pid%nPids% := A_LoopField
  148. }
  149. ; Create a window group containing all WoW instances
  150. Loop, %nPids%
  151. {
  152. localPid := pid%A_Index%
  153. GroupAdd, wowGroup, ahk_pid %localPid%
  154. }
  155. ;**************************************************************************************************
  156. ; Hotkeys
  157. ;**************************************************************************************************
  158. #IfWinActive, ahk_group wowGroup
  159. ;-------------------------------------
  160. ; Suspend
  161. ;-------------------------------------
  162. Pause::
  163. Suspend, Toggle ; Suspend must be on the 1st line of the script
  164. hardPause := Mod(++hardPause, 2) ; Can a brother get a NOT?
  165. Return
  166. ~/::
  167. Suspend, Permit ; Marks the current subroutine exempt from suspension
  168. if hardPause <= 0
  169. {
  170. Suspend, On
  171. }
  172. Return
  173. ~Enter::
  174. Suspend, Permit ; Marks the current subroutine exempt from suspension
  175. if hardPause <= 0
  176. {
  177. Suspend, Off
  178. }
  179. Return
  180. ;-------------------------------------
  181. ; Special Functions
  182. ;-------------------------------------
  183. #r::
  184. Suspend, On
  185. ForceAll("{/}{r}{l}{Enter}")
  186. Suspend, Off
  187. Return
  188. #p::
  189. ForceAllRaw(password)
  190. ForceAll("{Enter}")
  191. Return
  192. #Enter::ForceAll("{Enter}")
  193. #x::ForceAllRaw("/exit")
  194. XButton1::ForceAll("{Numpad0 down}{Numpad0 up}") ; force assist
  195. XButton2::ForceAll("{NumpadMult down}{NumpadMult up}") ; follow
  196. ;-------------------------------------
  197. ; Movement / Formations
  198. ;-------------------------------------
  199. ;XButton1::BeginSpreadLine()
  200. ;XButton1 Up::EndSpreadLine()
  201. PgUp::ForceClones("{W down}")
  202. PgUp Up::ForceClones("{W up}")
  203. ^PgUp::BeginSpreadLine()
  204. ^PgUp Up::EndSpreadLine()
  205. PgDn::ForceClones("{S down}")
  206. PgDn Up::ForceClones("{S up}")
  207. End::BeginSpreadBox()
  208. End Up::EndSpreadBox()
  209. ; all jump
  210. ;^MButton::ForceAll("{MButton down}{MButton up}")
  211. ;-------------------------------------
  212. ; Unmodified Hotkeys
  213. ;-------------------------------------
  214. ~*1::SendAll("{1 down}{1 up}")
  215. ~*2::SendAll("{2 down}{2 up}")
  216. ~*3::SendAll("{3 down}{3 up}")
  217. ~*4::SendAll("{4 down}{4 up}")
  218. ~*5::SendAll("{5 down}{5 up}")
  219. ~*6::SendAll("{6 down}{6 up}")
  220. ~*7::SendAll("{7 down}{7 up}")
  221. ~*8::SendAll("{8 down}{8 up}")
  222. ~*9::SendAll("{9 down}{9 up}")
  223. ~*0::SendAll("{0 down}{0 up}")
  224. ~*-::SendAll("{- down}{- up}")
  225. ~*=::SendAll("{= down}{= up}")
  226. ~*[::SendAll("{[ down}{[ up}")
  227. ~*]::SendAll("{] down}{] up}")
  228. ~*,::SendAll("{, down}{, up}")
  229. ~*.::SendAll("{. down}{. up}")
  230. ~*F1::SendAll("{F1 down}{F1 up}")
  231. ~*F2::SendAll("{F2 down}{F2 up}")
  232. ~*F3::SendAll("{F3 down}{F3 up}")
  233. ~*F4::SendAll("{F4 down}{F4 up}")
  234. ~*F5::SendAll("{F5 down}{F5 up}")
  235. ~*F6::SendAll("{F6 down}{F6 up}")
  236. ~*F7::SendAll("{F7 down}{F7 up}")
  237. ~*F8::SendAll("{F8 down}{F8 up}")
  238. ~*F9::SendAll("{F9 down}{F9 up}")
  239. ~*F10::SendAll("{F10 down}{F10 up}")
  240. ~*F11::SendAll("{F11 down}{F11 up}")
  241. ~*F12::SendAll("{F12 down}{F12 up}")
  242. ;~F::SendAll("{F down}{F up}")
  243. ~*Numpad1::SendAll("{Numpad1 down}{Numpad1 up}")
  244. ~*Numpad2::SendAll("{Numpad2 down}{Numpad2 up}")
  245. ~*Numpad3::SendAll("{Numpad3 down}{Numpad3 up}")
  246. ~*Numpad4::SendAll("{Numpad4 down}{Numpad4 up}")
  247. ~*Numpad5::SendAll("{Numpad5 down}{Numpad5 up}")
  248. ~*Numpad6::SendAll("{Numpad6 down}{Numpad6 up}")
  249. ~*Numpad7::SendAll("{Numpad7 down}{Numpad7 up}")
  250. ~*Numpad8::SendAll("{Numpad8 down}{Numpad8 up}")
  251. ;-------------------------------------
  252. ; Shift (+) + Hotkey
  253. ;-------------------------------------
  254. ;~+F1::SendAll("{Shift down}{F1 down}{F1 up}{Shift up}")
  255. ;~+F2::SendAll("{Shift down}{F2 down}{F2 up}{Shift up}")
  256. ;~+F3::SendAll("{Shift down}{F3 down}{F3 up}{Shift up}")
  257. ;~+F4::SendAll("{Shift down}{F4 down}{F4 up}{Shift up}")
  258. ;~+F5::SendAll("{Shift down}{F5 down}{F5 up}{Shift up}")
  259. ;-------------------------------------
  260. ; Modifiers
  261. ;-------------------------------------
  262. Control::ForceAll("{Control down}")
  263. Control Up::ForceAll("{Control up}")
  264. ;Alt::ForceAll("{Alt down}")
  265. ;Alt Up::ForceAll("{Alt up}")
  266. ;**************************************************************************************************
  267. ; GUI
  268. ;**************************************************************************************************