klanhaboru_main.au3 9.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252
  1. ;;Klanhaboru fun
  2. AutoItSetOption("SendKeyDelay", 3)
  3. AutoItSetOption("SendKeyDownDelay", 5)
  4. AutoItSetOption("WinTitleMatchMode", 2)
  5. Global $gameTitle = "Klánháború"
  6. Global $pageLoadTime = 1500 ;inMs
  7. Global $gyujtogetesWaitTime = 1200000 ;20m default fallback value
  8. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  9. ;; User Config
  10. Global $server = IniRead(@ScriptDir & "/config.ini", "Options", "server", "hu83")
  11. Global $villageId = IniRead(@ScriptDir & "/config.ini", "Options", "villageId", "4446")
  12. ;Mode 0-3 (0-Lusta gyûjtögetõk, 1-Szerény gyûjtögetõk, 2-Okos gyûjtögetõk, 3-Kiváló gyûjtögetõk)
  13. Global $scavengeMode = IniRead(@ScriptDir & "/config.ini", "Options", "scavengeMode", "2")
  14. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  15. WinActivate("chrome")
  16. WinWaitActive($gameTitle)
  17. Sleep(1000)
  18. While 1
  19. gyujtogetes(2, -1, -1, -1, -1, -1, -1, -1, -1) ;$mode, $landzsas, $kardforgato, $bardos, $ijasz, $konnyulovas, $lovasijasz, $nehezlovas, $lovag
  20. Sleep($gyujtogetesWaitTime)
  21. trainUnits(0, 0, 0, 5) ;$landzsas, $kardforgato, $bardos, $ijasz
  22. trainLovassag(0, 0, 0, 0) ;$kem, $konnyulovas, $lovasijasz, $nehezlovas
  23. ;epites("wall") ;Options: main, barracks, stable, watchtower, smith, place, statue, market, wood, stone, iron, farm, storage, hide, wall
  24. WEnd
  25. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  26. ;; Functions
  27. func gyujtogetes($mode, $landzsas, $kardforgato, $bardos, $ijasz, $konnyulovas, $lovasijasz, $nehezlovas, $lovag) ;Mode 0-3 (0-Lusta gyûjtögetõk, 1-Szerény gyûjtögetõk, 2-Okos gyûjtögetõk, 3-Kiváló gyûjtögetõk)
  28. ConsoleWrite("Gyüjtögetés started!" & @CRLF)
  29. if ($landzsas = 0 and $kardforgato = 0 and $bardos = 0 and $ijasz = 0 and $konnyulovas = 0 and $lovasijasz = 0 and $nehezlovas = 0 and $lovag = 0) Then
  30. ConsoleWrite("Gyüjtögetés Skip!" & @CRLF)
  31. Return False
  32. EndIf
  33. navigateUrl(getGameUrl("place", "scavenge"))
  34. Sleep($pageLoadTime)
  35. if ($landzsas > 0) Then
  36. jsExecutor("document.getElementsByName('spear')[0].value = '" & $landzsas & "';")
  37. EndIf
  38. if ($kardforgato > 0) Then
  39. jsExecutor("document.getElementsByName('sword')[0].value = '" & $kardforgato & "';")
  40. EndIf
  41. if ($bardos > 0) Then
  42. jsExecutor("document.getElementsByName('axe')[0].value = '" & $bardos & "';")
  43. EndIf
  44. if ($ijasz > 0) Then
  45. jsExecutor("document.getElementsByName('archer')[0].value = '" & $ijasz & "';")
  46. EndIf
  47. if ($konnyulovas > 0) Then
  48. jsExecutor("document.getElementsByName('light')[0].value = '" & $konnyulovas & "';")
  49. EndIf
  50. if ($lovasijasz > 0) Then
  51. jsExecutor("document.getElementsByName('marcher')[0].value = '" & $lovasijasz & "';")
  52. EndIf
  53. if ($nehezlovas > 0) Then
  54. jsExecutor("document.getElementsByName('heavy')[0].value = '" & $nehezlovas & "';")
  55. EndIf
  56. if ($lovag > 0) Then
  57. jsExecutor("document.getElementsByName('knight')[0].value = '" & $lovag & "';")
  58. EndIf
  59. if ($landzsas < 0) Then
  60. jsExecutor("document.getElementsByName('spear')[0].parentElement.children[1].click();")
  61. EndIf
  62. if ($kardforgato < 0) Then
  63. jsExecutor("document.getElementsByName('sword')[0].parentElement.children[1].click();")
  64. EndIf
  65. if ($bardos < 0) Then
  66. jsExecutor("document.getElementsByName('axe')[0].parentElement.children[1].click();")
  67. EndIf
  68. if ($ijasz < 0) Then
  69. jsExecutor("document.getElementsByName('archer')[0].parentElement.children[1].click();")
  70. EndIf
  71. if ($konnyulovas < 0) Then
  72. jsExecutor("document.getElementsByName('light')[0].parentElement.children[1].click();")
  73. EndIf
  74. if ($lovasijasz < 0) Then
  75. jsExecutor("document.getElementsByName('marcher')[0].parentElement.children[1].click();")
  76. EndIf
  77. if ($nehezlovas < 0) Then
  78. jsExecutor("document.getElementsByName('heavy')[0].parentElement.children[1].click();")
  79. EndIf
  80. if ($lovag < 0) Then
  81. jsExecutor("document.getElementsByName('knight')[0].parentElement.children[1].click();")
  82. EndIf
  83. ;sendJsClickByClass("fill-all")
  84. Sleep(300)
  85. jsExecutor("document.getElementsByClassName('scavenge-option')[" & $mode & "].getElementsByClassName('btn-default')[0].click();")
  86. Sleep($pageLoadTime)
  87. $gyujtogetesWaitTime = parseTimeToMs(getDataWithJs("document.getElementsByClassName('scavenge-option')[" & $mode & "].getElementsByClassName('return-countdown')[0]"))
  88. ConsoleWrite("Gyüjtögetés wait time in ms: " & $gyujtogetesWaitTime & @CRLF)
  89. ConsoleWrite(@CRLF)
  90. EndFunc
  91. func trainUnits($landzsas, $kardforgato, $bardos, $ijasz)
  92. ConsoleWrite("Train Units started!" & @CRLF)
  93. if ($landzsas = 0 and $kardforgato = 0 and $bardos = 0 and $ijasz = 0) Then
  94. ConsoleWrite("Train Units Skip!" & @CRLF)
  95. Return False
  96. EndIf
  97. navigateUrl(getGameUrl("barracks", ""))
  98. Sleep($pageLoadTime)
  99. if ($landzsas > 0) Then
  100. jsExecutor("document.getElementsByName('spear')[0].value = '" & $landzsas & "';")
  101. EndIf
  102. if ($kardforgato > 0) Then
  103. jsExecutor("document.getElementsByName('sword')[0].value = '" & $kardforgato & "';")
  104. EndIf
  105. if ($bardos > 0) Then
  106. jsExecutor("document.getElementsByName('axe')[0].value = '" & $bardos & "';")
  107. EndIf
  108. if ($ijasz > 0) Then
  109. jsExecutor("document.getElementsByName('archer')[0].value = '" & $ijasz & "';")
  110. EndIf
  111. if ($landzsas < 0) Then
  112. jsExecutor("document.getElementsByName('spear')[0].parentElement.children[1].click();")
  113. EndIf
  114. if ($kardforgato < 0) Then
  115. jsExecutor("document.getElementsByName('sword')[0].parentElement.children[1].click();")
  116. EndIf
  117. if ($bardos < 0) Then
  118. jsExecutor("document.getElementsByName('axe')[0].parentElement.children[1].click();")
  119. EndIf
  120. if ($ijasz < 0) Then
  121. jsExecutor("document.getElementsByName('archer')[0].parentElement.children[1].click();")
  122. EndIf
  123. sendJsClickByClass("btn-recruit")
  124. ConsoleWrite(@CRLF)
  125. Sleep($pageLoadTime)
  126. EndFunc
  127. func trainLovassag($kem, $konnyulovas, $lovasijasz, $nehezlovas)
  128. ConsoleWrite("Train Lovassag started!" & @CRLF)
  129. if ($kem = 0 and $konnyulovas = 0 and $lovasijasz = 0 and $nehezlovas = 0) Then
  130. ConsoleWrite("Train Lovassag Skip!" & @CRLF)
  131. Return False
  132. EndIf
  133. navigateUrl(getGameUrl("stable", ""))
  134. Sleep($pageLoadTime)
  135. if ($kem > 0) Then
  136. jsExecutor("document.getElementsByName('spy')[0].value = '" & $kem & "';")
  137. EndIf
  138. if ($konnyulovas > 0) Then
  139. jsExecutor("document.getElementsByName('light')[0].value = '" & $konnyulovas & "';")
  140. EndIf
  141. if ($lovasijasz > 0) Then
  142. jsExecutor("document.getElementsByName('marcher')[0].value = '" & $lovasijasz & "';")
  143. EndIf
  144. if ($nehezlovas > 0) Then
  145. jsExecutor("document.getElementsByName('heavy')[0].value = '" & $nehezlovas & "';")
  146. EndIf
  147. if ($kem < 0) Then
  148. jsExecutor("document.getElementsByName('spy')[0].parentElement.children[1].click();")
  149. EndIf
  150. if ($konnyulovas < 0) Then
  151. jsExecutor("document.getElementsByName('light')[0].parentElement.children[1].click();")
  152. EndIf
  153. if ($lovasijasz < 0) Then
  154. jsExecutor("document.getElementsByName('marcher')[0].parentElement.children[1].click();")
  155. EndIf
  156. if ($nehezlovas < 0) Then
  157. jsExecutor("document.getElementsByName('heavy')[0].parentElement.children[1].click();")
  158. EndIf
  159. sendJsClickByClass("btn-recruit")
  160. ConsoleWrite(@CRLF)
  161. Sleep($pageLoadTime)
  162. EndFunc
  163. func epites($buildingId) ;Options: main, barracks, stable, watchtower, smith, place, statue, market, wood, stone, iron, farm, storage, hide, wall
  164. ConsoleWrite("Epites started: " & $buildingId & @CRLF)
  165. navigateUrl(getGameUrl("main", ""))
  166. Sleep($pageLoadTime)
  167. jsExecutor("document.querySelector('{#}main_buildrow_" & $buildingId & "').querySelector('a.btn-build').click();")
  168. Sleep($pageLoadTime)
  169. ConsoleWrite(@CRLF)
  170. EndFunc
  171. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
  172. ;; Helper Functions
  173. func parseTimeToMs($string)
  174. $parsedString = StringSplit( $string, ":")
  175. if ($parsedString[0] < 3) Then
  176. ConsoleWrite("parseTimeToMs error! Expected array size 3, actual: " & $parsedString[0] & @CRLF)
  177. return 0
  178. EndIf
  179. $hours = $parsedString[1]
  180. $minutes = $parsedString[2]
  181. $seconds = $parsedString[3]
  182. return (($hours*3600+$minutes*60+$seconds)*1000)
  183. EndFunc
  184. func getDataWithJs($jsSelector)
  185. $clipBoardCache = ClipGet()
  186. jsExecutor("window.location = '{#}'{+}" & $jsSelector & ".innerHTML")
  187. Sleep(300)
  188. Send("^l")
  189. Sleep(300)
  190. Send("^a")
  191. Sleep(300)
  192. Send("^c")
  193. $data = ClipGet()
  194. ClipPut($clipBoardCache)
  195. $data = StringSplit( $data, "#")
  196. if ($data[0] < 2) Then
  197. ConsoleWrite("getDataWithJs error! Expected array size 2, actual: " & $data[0] & @CRLF)
  198. return ""
  199. EndIf
  200. ConsoleWrite("Data received: " & $data[2] & @CRLF)
  201. return $data[2]
  202. EndFunc
  203. func getGameUrl($screen, $mode)
  204. return "https://" & $server & ".klanhaboru.hu/game.php?village=" & $villageId & "&screen=" & $screen & "&mode=" & $mode
  205. EndFunc
  206. func sendJsClickById($elementId)
  207. jsExecutor("document.getElementsById('" & $elementId & "').click();")
  208. EndFunc
  209. func sendJsClickByClass($classId)
  210. jsExecutor("document.getElementsByClassName('" & $classId & "')[0].click();")
  211. EndFunc
  212. func jsExecutor($code)
  213. $code = "javascript:(function(){{}" & $code & "{}})();"
  214. navigateUrl($code)
  215. EndFunc
  216. func navigateUrl($url)
  217. WinWaitActive($gameTitle)
  218. ConsoleWrite($url & @CRLF)
  219. Sleep(300)
  220. Send("^l")
  221. Sleep(300)
  222. Send("^a")
  223. Sleep(300)
  224. Send($url)
  225. Sleep(300)
  226. Send("{ENTER}")
  227. Sleep(300)
  228. EndFunc