Advertisement
Guest User

Untitled

a guest
May 18th, 2017
88
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
AutoIt 44.88 KB | None | 0 0
  1. #include <Array.au3>
  2. #include <Date.au3>
  3. #include <GUIConstantsEx.au3>
  4. #include <GuiListView.au3>
  5. #include <SQLite.au3>
  6. #include <SQLite.dll.au3>
  7. #include <WindowsConstants.au3>
  8. #include <WinHTTP.au3>
  9.  
  10. HotKeySet("!{Q}", "_HKS") ; Alt + Shift + Q ; DB-Query
  11. HotKeySet("!{C}", "_HKS") ; Alt + Shift + C ; Call Function
  12. HotKeySet("!{E}", "_HKS") ; Alt + Shift + E ; DB-Exec
  13. Opt("MustDeclareVars", 1)
  14.  
  15. ; ========= Globale Einstellungen ==========
  16.  
  17. Global $HTTP_USER = "AutoitBot"
  18. Global $HTTP_PASS = "autoit123"
  19.  
  20. Global $HTTP_Agent = _WinHttpOpen("Mozilla/5.0 (Windows; U; Windows NT 6.0; de; rv:1.9.2) Gecko/20100115 Firefox/3.6 (.NET CLR 3.5.30729)")
  21. Global $HTTP_Host = "u1.imperion.de"
  22. Global $HTTP_Connect = _WinHttpConnect($HTTP_Agent, $HTTP_Host)
  23.  
  24. Global $sRead = _Game_Login()
  25. Global $sCurP = StringRegExp($sRead, "(?<=/buildings/)\d+", 3)
  26. Global $aStorage = StringRegExp($sRead, "(?i)StorageR[1-3].+\s+(\d+)\s+</div", 3)
  27. $sCurP = $sCurP[0]
  28. _DB_Start()
  29.  
  30. Global $iSlots
  31. ;~ Exit ClipPut($sRead) <> 1
  32.  
  33. ; ========= Hauptfunktion ==========
  34. _Main()
  35. _WinHttpCloseHandle($HTTP_Connect)
  36. _WinHttpCloseHandle($HTTP_Agent)
  37.  
  38.  
  39.  
  40. Func _Main()
  41.     Local $aTmp
  42.     _DB_Exec("UPDATE Farmlist SET atk = 0;")
  43.     $iSlots = _Game_Fleet_GetFleetInfo()
  44.     Send("!{Q}")
  45.     Local $iWidth = 800, $iHeight = 400, $tiMov = TimerInit(), $acTab[5], $tiQueue = $tiMov, $tiReports = $tiMov
  46.     Local $nMsg, $hGUI, $cTabParent, $cQueue, $cBuild, $cListview, $hListView
  47.     ; ========= GUI ==========
  48.     $hGUI = GUICreate("Imperion Bot [SEuBo & Acanis]", $iWidth, $iHeight)
  49.     $cTabParent = GUICtrlCreateTab(20, 20, 760, 360)
  50.     $acTab[0] = GUICtrlCreateTabItem("Gebäude")
  51.     GUISwitch($acTab[0])
  52.     $cQueue = GUICtrlCreateLabel("", 30, 50, 360, 60, $WS_BORDER)
  53.     GUICtrlSetState(-1, $GUI_ONTOP)
  54.     $cBuild = GUICtrlCreateButton("Bauen/Ausbauen", 600, 15, 160, 20)
  55.     $cListview = GUICtrlCreateListView("ID|Gebäude|Stufe", 400, 40, 379, 340)
  56.     $hListView = GUICtrlGetHandle($cListview)
  57.     _GUI_UpdateListView($sRead, $cListview)
  58.     $acTab[1] = GUICtrlCreateTabItem("Farmen")
  59.     GUISwitch($acTab[1])
  60.     _GUICtrlListView_Create($acTab[1], "Test", 100, 100, 200, 200)
  61.     GUISetState()
  62.  
  63.     ; ========= Hier kann man funktionen testen ==========
  64. ;~  _Game_Farm_CreateFarmList()
  65. ;~  _Game_Farm_AddFarm($sCurP,95603801, "5,20")
  66.  
  67. ;~  _Game_Farm()
  68. ;~  _Game_Fleet_CheckForExpiredMovements()
  69. ;~  _Game_UpdateReports()
  70.  
  71. ;~  Exit
  72.     While 1
  73.         $nMsg = GUIGetMsg()
  74. ;~      ConsoleWrite('@@ Debug(' & @ScriptLineNumber & ') : $nMsg = ' & $nMsg & @CRLF & '>Error code: ' & @error & @CRLF) ;### Debug Console
  75.         Switch $nMsg
  76.             Case 0
  77.                 If TimerDiff($tiQueue) > 1000 Then
  78.                     _GUI_UpdateQueue($sRead, $cQueue) ; Warteschlange im GUI jede sekunde updaten
  79.                     $tiQueue = TimerInit()
  80.                 EndIf
  81.                 If TimerDiff($tiMov) > 10000 Then
  82.                     _Game_Fleet_CheckForExpiredMovements()
  83.                     _Game_Farm()
  84.                     $tiMov = TimerInit()
  85.                 EndIf
  86.                 If TimerDiff($tiReports) > 60000 * 5 Then
  87.                     _Game_UpdateReports()
  88.                     $tiReports = TimerInit()
  89.                 EndIf
  90.             Case -3
  91.                 Exit
  92.             Case $cBuild
  93.                 ; ========= Gebäude bauen. Wenn schon Gebäude an der aktuellen Position vorhanden ist, wird es ausgebaut. Ansonsten kann man später auswählen WELCHES Gebäude gebaut werden soll ==========
  94.                 $sRead = _WinHTTP_Visit("/planet/buildings/" & $sCurP, $HTTP_Connect, $HTTP_Host)
  95.                 Local $iSelID = _GUICtrlListView_GetItemText($hListView, _GUICtrlListView_GetSelectionMark($hListView), 0)
  96.                 If Not StringRegExp($sRead, "(?i)/show/" & $iSelID) Then
  97.                     $sRead = _Game_Build($iSelID)
  98.                 Else
  99.                     $sRead = _Game_Upgrade($iSelID)
  100.                 EndIf
  101.                 _GUI_UpdateQueue($sRead, $cQueue, 1) ; Warteschlange im GUI updaten
  102.         EndSwitch
  103.     WEnd
  104. EndFunc   ;==>_Main
  105.  
  106.  
  107. Func _WinHTTP_Visit($sURL, $sConnect = "", $sHost = "", $iSLN = @ScriptLineNumber)
  108.     ConsoleWrite("========> HTML GET @ Line " & $iSLN & " - " & _Now() & " =================== << GET >> " & $sURL & @CRLF)
  109.  
  110.     ; ========= GET Funktion ==========
  111.     If $sConnect = "" Then $sConnect = $HTTP_Connect
  112.     If $sHost = "" Then $sHost = $HTTP_Host
  113.     Local $HTML, $HTTP_Request = _WinHttpOpenRequest($sConnect, "GET", $sURL, "HTTP/1.1", $sHost)
  114.     _WinHttpSendRequest($HTTP_Request)
  115.     _WinHttpReceiveResponse($HTTP_Request)
  116.     Do
  117.         $HTML &= _WinHttpReadData($HTTP_Request)
  118.     Until @error
  119.     Return $HTML
  120. EndFunc   ;==>_WinHTTP_Visit
  121.  
  122. Func _WinHTTP_Post($sURL, $sPost, $sContent = "", $sHost = "")
  123.     ; ========= Post Funktion ==========
  124.     If $sHost = "" Then $sHost = $HTTP_Host
  125.     If $sContent = "" Then $sContent = "Content-Type: application/x-www-form-urlencoded" & @CRLF
  126.     Local $HTML, $HTTP_Request = _WinHttpOpenRequest($HTTP_Connect, "POST", $sURL, "HTTP/1.1", $HTTP_Host)
  127.     _WinHttpSendRequest($HTTP_Request, $sContent, $sPost)
  128.     _WinHttpReceiveResponse($HTTP_Request)
  129.     Do
  130.         $HTML &= _WinHttpReadData($HTTP_Request)
  131.     Until @error
  132.     _WinHttpCloseHandle($HTTP_Request)
  133.     ConsoleWrite("========> HTML POST @ " & _Now() & "=================== << POST" & @CRLF)
  134.     Return $HTML
  135. EndFunc   ;==>_WinHTTP_Post
  136.  
  137. Func _Game_Login()
  138.     ;Hauptseite
  139.     Local $HTML, $HTTP_Request = _WinHttpOpenRequest($HTTP_Connect, "GET", "/", "HTTP/1.1", $HTTP_Host)
  140.     _WinHttpSendRequest($HTTP_Request)
  141.     _WinHttpReceiveResponse($HTTP_Request)
  142.     Do
  143.         $HTML &= _WinHttpReadData($HTTP_Request)
  144.     Until @error
  145.     _WinHttpCloseHandle($HTTP_Request)
  146.  
  147.     ;Login
  148.     Local $POST = "player%5Bname%5D=" & $HTTP_USER & "&player%5Bpw%5D=" & $HTTP_PASS
  149.     Return _WinHTTP_Post("/login/login", $POST)
  150. EndFunc   ;==>_Game_Login
  151.  
  152. Func _Game_UpdateReports()
  153.     ; Planet = Planet ID |cap = Gesamtkapazität aller schiffe|attacker = Angreifer Schiffe (s._Game_Attack)|defender = Verteidiger Schiffe|r1 = Metall|r2 = Kristall|r3 = Das andere Zeug|date = Datum & Uhrzeit|planetdef = Planetare Verteidigungsmaßnahmen|schutt = schuttfeld Infos
  154. ;~  _DB_Exec("DROP TABLE Reports")
  155. ;~  _DB_Exec("CREATE TABLE Reports (id INTEGER PRIMARY KEY, planet bigint, cap bigint, attacker text, defender text, r1 bigint, r2 bigint, r3 bigint, date text, planetdef text, schutt text);")
  156.  
  157.     Local $sReportList, $aReports, $i, $j
  158.  
  159.     Do
  160.         $sReportList = _WinHTTP_Visit("/report/index/id/all/page/" & $i)
  161.         $aReports = StringRegExp($sReportList, '/report/show[^"]+', 3)
  162.         For $j = 0 To UBound($aReports) - 1
  163.             _Game_ReportToDB($aReports[$j])
  164.             If @error Then ExitLoop 2
  165.         Next
  166.  
  167.         $i += 1
  168.     Until Not StringInStr($sReportList, "/report/index/id/all/page/" & $i)
  169. EndFunc   ;==>_Game_UpdateReports
  170.  
  171. Func _Game_ReportToDB($sURL)
  172.     ; ========= Trägt einen KB in die Datenbank ein. ==========
  173.     Local $aDate, $aRes, $aSchuttfeld, $aTruppen, $aPlanetVert, $aPlanet, $iRet
  174.     Local $sReport = _WinHTTP_Visit($sURL)
  175.     Local $iReportID = StringRegExpReplace($sURL, ".+/", "")
  176.  
  177.     $aDate = StringRegExp($sReport, "(?(?=\d\d\.\d\d\.\d\d)\d?\d\.\d?\d\.\d\d \d\d?:\d\d?:\d\d?|\d\d[\/]\d\d[\/]\d\d \d\d:\d\d:\d\d)", 3)
  178.     $aRes = StringRegExp($sReport, "(?i)<p>[^\d\n]+(\d+)[^\d\n]+(\d+)[^\d\n]+(\d+)[^<\n]+</p>", 3)
  179.     $aSchuttfeld = StringRegExp($sReport, "<br />\s+<p>([^<]+)</p>\s+<p>.+\d+.+\d+.+\d.+</p>", 3)
  180.     $aTruppen = StringRegExp($sReport, '(?<=(?<=colorGrey|fontBold) ">)\d+', 3)
  181.     $aPlanetVert = StringRegExp($sReport, '(?<=(?<=colorGrey|fontBold)">)\d+\b(?!</div>)', 3)
  182.     $aPlanet = StringRegExp($sReport, 'Angriff von.+auf[^"]+".+/(\d+)"', 3)
  183.  
  184.     If Not IsArray($aSchuttfeld) Then Local $aSchuttfeld[1] = ["''"]
  185.     If Not IsArray($aPlanetVert) Then Local $aPlanetVert[1] = ["''"]
  186.     If Not IsArray($aPlanet) Then Local $aPlanet[1] = ["''"]
  187.     If Not IsArray($aRes) Then Local $aRes[3] = ["''", "''", "''"]
  188.  
  189.     $iRet = _DB_Exec("INSERT INTO Reports (id, planet, attacker, defender, r1, r2, r3, date, planetdef, schutt)" & _
  190.             " VALUES (" & $iReportID & ", " & $aPlanet[0] & ", '" & _ArrayToString($aTruppen, "|", 0, 11) & "', '" & _ArrayToString($aTruppen, "|", 12, 23) & "', " & $aRes[0] & ", " & $aRes[1] & ", " & $aRes[2] & ", '" & $aDate[0] & "', '" & _ArrayToString($aPlanetVert) & "', '" & $aSchuttfeld[0] & "');")
  191.  
  192.     Return SetError(@error, @extended, $iRet)
  193. EndFunc   ;==>_Game_ReportToDB
  194.  
  195. Func _Game_Farm()
  196.     ; ========= Na rate mal ==========
  197.     ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  198.     ; MUSS GEÄNDERT WERDEN!
  199.     ; 1. intelligentes Farmsystem ( ;-) )
  200.     ; 2. Angriffe nach Datum sortieren.
  201.     ; 3. Bewertungsalgorythmus (Grundwert = 1 * [Durchschn. Rohstoffausbeute in %] ist der Grundwert.
  202.     ;    Für den genauen Algoryhtmus muss ich mir noch was überlegen.
  203.     ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  204.     If $iSlots = 0 Then Return (ConsoleWrite("!>" & @TAB & "Keine freien Slots mehr. Farmen beenden." & @CRLF) <> 0)
  205.     Local $iErr, $aSlots, $iUbound, $t = TimerInit(), $aTmp, $aFarmList = _DB_Query("SELECT target, ships FROM Farmlist WHERE atk = 0 ORDER BY lastatk")
  206.     If $aFarmList[0][0] = 0 Then Return (ConsoleWrite("!>" & @TAB & "Keine freien Farms mehr. Farmen beenden. Mehr Farmen hinzufügen wird empfohlen" & @CRLF) <> 0)
  207.     _WinHTTP_Visit("/planet/buildings/" & $sCurP)
  208.     Local $sFleetBase = _WinHTTP_Visit("/fleetBase/show/1")
  209.  
  210.     For $i = 1 To UBound($aFarmList) - 1
  211.         _Game_Attack($aFarmList[$i][0], $aFarmList[$i][1])
  212.         $iErr = @error
  213. ;~      Exit
  214.         If Not $iErr Then $iSlots -= 1
  215.         If $iSlots = 0 Then ExitLoop (ConsoleWrite("!>" & @TAB & "Keine freien Slots mehr. Farmen beenden." & @CRLF) <> 0)
  216.     Next
  217.  
  218. EndFunc   ;==>_Game_Farm
  219.  
  220. Func _Game_Attack($iPlanet, $sShips)
  221.  
  222.     ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  223.     ; MUSS GEÄNDERT WERDEN!
  224.     ; 1. Center bleibt das eigene System.
  225.     ; 2. Vorher sollte noch auf die normale map zugegriffen werden.
  226.     ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  227.  
  228. ;~  Local $aAlready = _DB_Query("SELECT * FROM Movements where planet=" & $iPlanet)
  229. ;~  If UBound($aAlready) > 1 Then Return ConsoleWrite("Schon Angriff auf Planet vorhanden." & @CRLF)
  230.  
  231.     ; ========= Greift einen Planeten anhand seiner ID und seiner Sonnensystem ID an. $sShips ist ein String, der angibt, welche Schfife geschickt werden ==========
  232.     ; ========= Schifftyp 5 ist der normale Jäger. um mit 10 normalen jägern anzugreifen, übergeben wird "5,10" Meehrere Paare können mit ; getrennt werden==========
  233.     Local $sRoute, $aMorePostData, $sShipsFinal, $sPost, $sAttacked, $aRouteInfo
  234.     Local $iSonnenSystem = StringTrimRight($iPlanet, 2), $s12 = "ships\[\d+\]=(\d+)&?"
  235.     $s12 = $s12 & $s12 & $s12 & $s12 & $s12 & $s12 & $s12 & $s12 & $s12 & $s12 & $s12 & $s12
  236.     Local $sShipString = "ships[1]=0&ships[2]=0&ships[3]=0&ships[4]=0&ships[5]=0&ships[6]=0&ships[7]=0&ships[8]=0&ships[9]=0&ships[10]=0&ships[11]=0&ships[12]=0" ;
  237.     Local $sPlanet = _WinHTTP_Visit("/map/index/system/" & $iSonnenSystem & "/#/system/" & $iSonnenSystem & "/planet/" & $iPlanet)
  238.     Local $sFleetBase = _WinHTTP_Visit("/fleetBase/mission/1/planetId/" & $iPlanet)
  239.     Local $aShips = StringRegExp($sShips, "(\d+),(\d+)", 3)
  240.     For $i = 0 To UBound($aShips) - 2 Step 2
  241.         $sShipString = StringRegExpReplace($sShipString, "(?<=ships\[" & $aShips[$i] & "\]=)\d+", $aShips[$i + 1])
  242.     Next
  243.     $aMorePostData = StringRegExp($sFleetBase, 'name="f".+="([^"]+)|name="tan".+="([^"]+)', 3)
  244.     $sShipsFinal = StringRegExpReplace(StringRegExpReplace(StringRegExpReplace($sShipString, "ships\[\d+\]=0&?", ""), "&$", ""), "ships(?=\[)", "ship")
  245.     $sRoute = _WinHTTP_Post("/fleetBase/route/1", _PostEncode("planetId=" & $iPlanet & "&ajaxRequest=1&" & $sShipString))
  246.     $aRouteInfo = StringRegExp($sRoute, $iPlanet & "[^}]+(\d\d:\d\d:\d\d)[^}:]+:(\d+)[^}:]+:(\d+)", 3)
  247.     $sShipString = StringRegExpReplace($sShipString, $s12, "${1}|${5}|${10}|${6}|${11}|${7}|${9}|${8}|${2}|${3}|${4}|${12}")
  248.  
  249. ;~  Exit ClipPut($sRoute)
  250.  
  251.     ConsoleWrite("!>" & @TAB & "Attacking " & $iPlanet & @CRLF)
  252.     $sPost = "f=" & $aMorePostData[0] & "&tan=" & $aMorePostData[2] & "&targetType=p&" & $sShipsFinal & "&mission=301&planet=" & $iPlanet & "&tank_text="
  253.     $sAttacked = _WinHTTP_Post("/fleetBase/send/1", _PostEncode($sPost))
  254.  
  255.     Local $sEventsinDB, $aEventsInDB = _DB_Query("SELECT event FROM Movements")
  256.     For $i = 1 To UBound($aEventsInDB) - 1
  257.         $sEventsinDB &= $aEventsInDB[$i][0] & "|"
  258.     Next
  259.     $sEventsinDB = StringTrimRight($sEventsinDB, 1)
  260.  
  261.     Local $sAttackAttacks = StringRegExpReplace($sAttacked, '[\w\W]+Flotten unterwegs([\w\W]+?)<div class="spacer10" style="clear:both;"></div>\s+</div>[\w\W]+', "$1")
  262.     Local $aEventdata = StringRegExp(StringRegExpReplace($sAttackAttacks, "(?:" & $sEventsinDB & ")", ""), "(?<=>)\d+(?=</span>).+?recall/(\d+)", 3), $iMax
  263.     ClipPut($sAttackAttacks)
  264.     If Not IsArray($aEventdata) Then
  265.         ConsoleWrite("!> =>           !!!! no event data !!!!" & @CRLF)
  266.         Select
  267.             Case StringInStr($sAttacked, "Das Ziel ist noch im Noob-Schutz.")
  268.                 ConsoleWrite("!> =>           !!!! Noob Schutz! Lösche Farm aus Liste !!!!" & @CRLF)
  269.                 _DB_Exec("DELETE FROM Farmlist WHERE target=" & $iPlanet & ";")
  270.             Case StringInStr($sAttacked, "Auf dem Ziel gibt es nichts anzugreifen.")
  271.                 ConsoleWrite("!> =>           !!!! Ungültige Farm. Gasplanet? Lösche Farm! !!!!" & @CRLF)
  272.                 _DB_Exec("DELETE FROM Farmlist WHERE target=" & $iPlanet & ";")
  273.             Case StringInStr($sAttacked,"Kein Flottenslot mehr frei.")
  274.                 ConsoleWrite("!> =>           !!!! Keine Flottenslots mehr frei! !!!!" & @CRLF)
  275.                 $iSlots = 0
  276.             Case Else
  277.                 ConsoleWrite("!> =>           !!!! Unbekannter Fehler! Beenden! !!!!" & @CRLF)
  278.                 Exit ClipPut(StringRegExpReplace($sAttackAttacks, "(?:" & $sEventsinDB & ")", ""))
  279.         EndSelect
  280.         Return SetError(1, 0, 0)
  281.     EndIf
  282. ;~  _ArrayDisplay($aEventdata)
  283. ;~  Exit
  284. ;~ ClipPut(StringRegExpReplace($sAttackAttacks, _ArrayToString($aEventsInDB, "|", 1),""))
  285.     Local $iNow = _NowCalc()
  286. ;~  ClipPut($sAttacked)
  287.     _DB_Exec("INSERT INTO Movements (event, planet, planetfrom, ships, movtype, date, diff, now) " & _
  288.             "VALUES (" & _ArrayMax($aEventdata) & ", " & $iPlanet & ", '" & $sCurP & "', '" & $sShipString & "', " & '"attack"' & ", '" & _DateAdd("s", $aRouteInfo[1], $iNow) & "', " & $aRouteInfo[1] & ", '" & $iNow & "');")
  289.  
  290.     _DB_Exec("UPDATE Farmlist SET atk = " & _ArrayMax($aEventdata) & ", lastatk = '" & $iNow & "' WHERE target = " & $iPlanet & " AND planetfrom = " & $sCurP)
  291. ;~  MsgBox(0, "", "")
  292.     Return SetError(0, 0, 1)
  293. EndFunc   ;==>_Game_Attack
  294.  
  295. Func _Game_GetMap($iSonnenSystem = -1)
  296.     ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  297.     ; MUSS GEÄNDERT WERDEN!
  298.     ; 1. RegExp muss geändert werden. Der String ist die härte....
  299.     ; 2. hoffen wir auf eine map.sql...
  300.     ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  301.     Local $iID = "\d+", $sMap, $aSonnenSysteme
  302.     If $iSonnenSystem <> -1 Then $iID = $iSonnenSystem
  303.     $sMap = _WinHTTP_Visit("/map/index")
  304.     $sMap = StringRegExpReplace($sMap, '{"reports":{(?:"\d+":{[^}]+},?)+}', "") ; Kampfberichte aus map filtern.
  305.     $aSonnenSysteme = StringRegExp($sMap, '"' & $iID & '":{(?:"1[24]".+?}],)?"1":.+?}}}', 3)
  306.     ClipPut($sMap)
  307. ;~  ClipPut($aSonnenSysteme[0])
  308.     _ArrayDisplay($aSonnenSysteme)
  309.  
  310. EndFunc   ;==>_Game_GetMap
  311. Func _Farm_GetShipStringFromDBEntry($sString)
  312.     Return StringRegExpReplace($sString, "^(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)\|(\d+)$", _
  313.             "ships[1]=$1&$ships[2]=$9&ships[3]=$10&ships[4]=$11&ships[5]=$2&ships[6]=$4&ships[7]=$6&ships[8]=$8&ships[9]=$7&ships[10]=$3&ships[11]=$5&ships[12]=$12")
  314. EndFunc   ;==>_Farm_GetShipStringFromDBEntry
  315. Func _Game_Upgrade($iID)
  316.     ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  317.     ; MUSS GEÄNDERT WERDEN!
  318.     ; 1. Rohstoffe vorher auslesen.
  319.     ; !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  320.     Local $sOverView, $aHref, $sBuilding, $aUpgrade
  321. ;~  MsgBox(0, "", "upgrade")
  322.     $sOverView = _WinHTTP_Visit("/planet/buildings/" & $sCurP)
  323.     $aHref = StringRegExp($sOverView, 'href="([^"]+)" id="area_' & $iID, 3)
  324.     If @error Then Return
  325.     $sBuilding = _WinHTTP_Visit($aHref[0])
  326.     ClipPut($sOverView)
  327.     $aUpgrade = StringRegExp($sBuilding, '/building/build/' & $iID & '/[^"]+', 3)
  328.     If @error Then
  329.         MsgBox(0, "", "@error " & @error & @CRLF & "Line: " & @ScriptLineNumber)
  330.         MsgBox(0, "", "RegExp Fehler. Wahrscheinlich zu wenig Rohstoffe!")
  331.         Return $sOverView
  332.     EndIf
  333.     Return _WinHTTP_Visit($aUpgrade[0])
  334. EndFunc   ;==>_Game_Upgrade
  335.  
  336. Func _Game_Build($iID)
  337.     Local $sOverView, $aHref, $sBuilding, $aPossibleBuildings
  338. ;~  MsgBox(0,"","Build")
  339.     $sOverView = _WinHTTP_Visit("/planet/buildings/" & $sCurP)
  340.     $aHref = StringRegExp($sOverView, 'href="([^"]+)" id="area_' & $iID, 3)
  341.     If @error Then Return
  342.     $sBuilding = _WinHTTP_Visit($aHref[0])
  343.     MsgBox(ClipPut($sBuilding) <> 0, "", $sBuilding, 3)
  344.     $aPossibleBuildings = StringRegExp($sBuilding, 'floatLeft">([^<]+)[\w\W]+?((?<=<a href=")/building[^"]+|building_new_error)', 3)
  345.     _ArrayDisplay($aPossibleBuildings, "Possible")
  346. ;~  $aUpgrade = StringRegExp($sBuilding, '/building/build/' & $iID & '/[^"]+', 3)
  347. EndFunc   ;==>_Game_Build
  348.  
  349. Func _Game_Farm_CreateFarmList()
  350.     _DB_Exec("DROP TABLE Farmlist")
  351.     _DB_Exec("CREATE TABLE Farmlist (id INTEGER PRIMARY KEY, planetfrom INTEGER, target INTEGER, ships TEXT, atk SMALLINT, lastatk TEXT)")
  352.     _Game_Farm_AddFarm($sCurP, 95684201, "5,20")
  353.     _Game_Farm_AddFarm($sCurP, 95684205, "5,20")
  354.     _Game_Farm_AddFarm($sCurP, 95684206, "5,20")
  355.     _Game_Farm_AddFarm($sCurP, 95684207, "5,20")
  356.     _Game_Farm_AddFarm($sCurP, 95684208, "5,20")
  357.     _Game_Farm_AddFarm($sCurP, 95764601, "5,20")
  358.     _Game_Farm_AddFarm($sCurP, 95764602, "5,20")
  359.     _Game_Farm_AddFarm($sCurP, 95764603, "5,20")
  360.     _Game_Farm_AddFarm($sCurP, 95764604, "5,20")
  361.     _Game_Farm_AddFarm($sCurP, 95764605, "5,20")
  362.     _Game_Farm_AddFarm($sCurP, 95764606, "5,20")
  363.     _Game_Farm_AddFarm($sCurP, 95764607, "5,20")
  364.     _Game_Farm_AddFarm($sCurP, 95764608, "5,20")
  365. EndFunc   ;==>_Game_Farm_CreateFarmList
  366.  
  367. Func _Game_Farm_AddFarm($sPlanetFrom, $iPlanetID, $sShips)
  368.     _DB_Exec("INSERT INTO Farmlist (planetfrom, target, ships, atk) VALUES (" & $sPlanetFrom & ", " & $iPlanetID & ", '" & $sShips & "', 0);")
  369. EndFunc   ;==>_Game_Farm_AddFarm
  370.  
  371. Func _Game_Fleet_CheckForExpiredMovements()
  372.     Local $aExpiredAttacks, $aExpiredReturns, $iNow = _NowCalc()
  373.  
  374.     ; ========= Angriffe, die angekommen sind Auslesen, und als Return neu eintragen. ==========
  375.     $aExpiredAttacks = _DB_Query("SELECT * FROM Movements WHERE date<'" & $iNow & "' AND movtype='attack'")
  376.     _DB_Exec("DELETE FROM Movements WHERE date<'" & $iNow & "' AND movtype='attack'")
  377. ;~  _ArrayDisplay($aExpiredAttacks, "Expired Attacks")
  378.     For $i = 1 To $aExpiredAttacks[0][0]
  379.         _DB_Exec("INSERT INTO Movements (event, planet, planetfrom, ships, movtype, date, diff, now) " & _
  380.                 "VALUES (" & $aExpiredAttacks[$i][0] & ", '" & $aExpiredAttacks[$i][1] & "', '" & $aExpiredAttacks[$i][2] & "', '" & $aExpiredAttacks[$i][3] & "', " & '"return"' & ", '" & _DateAdd("s", $aExpiredAttacks[$i][6], $aExpiredAttacks[$i][7]) & "', " & $aExpiredAttacks[$i][6] & ", '" & $aExpiredAttacks[$i][7] & "');")
  381.     Next
  382.  
  383.     ; ========= Returns die angekommen sind aus der DB löschen. ==========
  384.     $aExpiredReturns = _DB_Query("SELECT planet, event FROM Movements WHERE date<'" & $iNow & "' AND movtype='return'")
  385.     _DB_Exec("DELETE FROM Movements WHERE date<'" & $iNow & "' AND movtype='return'")
  386. ;~  _ArrayDisplay($aExpiredReturns, "Expired Returns")
  387.     For $i = 1 To UBound($aExpiredReturns) - 1
  388.         _DB_Exec("UPDATE Farmlist SET atk = 0 WHERE atk = " & $aExpiredReturns[$i][1])
  389.         $iSlots += 1
  390.     Next
  391.     If $aExpiredReturns[0][0] > 0 Then Return 1
  392. EndFunc   ;==>_Game_Fleet_CheckForExpiredMovements
  393.  
  394. Func _Game_Fleet_GetFleetInfo($sFleetBase = "")
  395. ;~  _DB_Exec("DROP TABLE Movements;")
  396. ;~  _DB_Exec("DELETE FROM Movements)
  397.     _DB_Exec("DELETE FROM Movements WHERE planetfrom=" & $sCurP)
  398.  
  399.     Local $sOverView, $aRueckkehr, $aAngriff, $s12 = '[\w\W]+?(?<=(?<=colorGrey|fontBold)">)(\d+)', $aOrbit
  400.     Local $aArray, $aSlots, $aAbschnittAngriff, $aAbschnittRueckkehr
  401.     $s12 = $s12 & $s12 & $s12 & $s12 & $s12 & $s12 & $s12 & $s12 & $s12 & $s12 & $s12 & $s12
  402.     If $sFleetBase = "" Then
  403.         $sOverView = _WinHTTP_Visit("/planet/buildings/" & $sCurP)
  404.         $sFleetBase = _WinHTTP_Visit("/fleetBase/show/1")
  405.     EndIf
  406.     $aSlots = StringRegExp($sFleetBase, "(\d+).+?von.+?(\d+)", 3)
  407.     $aOrbit = StringRegExp($sFleetBase, "(?i)Orbit(?>[\w\W]+?ship/\d[012]?){12}[\w\W]+?Schiffe" & $s12, 3) ; Schiffe im Orbit
  408.     $aAbschnittAngriff = StringRegExp($sFleetBase, 'Flotten unterwegs([\w\W]+?)<div class="spacer10" style="clear:both;"></div>(?>\s+</div>)', 3)
  409.     $aAbschnittRueckkehr = StringRegExp($sFleetBase, 'Ankommende Truppen([\w\W]+?)<div class="spacer10" style="clear:both;"></div>\s+<div', 3)
  410.     If Not IsArray($aAbschnittAngriff) Then Local $aAbschnittAngriff[1]
  411.     If Not IsArray($aAbschnittRueckkehr) Then Local $aAbschnittRueckkehr[1]
  412.     $aAngriff = StringRegExp($aAbschnittAngriff[0], '(?i)name="(\d+)"[\w\W]+?(?:Angriff auf|Raubzug gegen)\s*(?:Planet )?(\d+|[\w -[]]+)(?>[\w\W]+?ship/\d[012]?){12}[\w\W]+?Schiffe' & $s12 & '[\w\W]+?(\d\d\.\d\d\.\d\d \d\d:\d\d:\d\d)', 3) ; truppen out
  413.     $aRueckkehr = StringRegExp($aAbschnittRueckkehr[0], '(?i)name="(\d+)"[\w\W]{0,500}?kehr von (?:Planet )?(\d+|[\w -]+)(?>[\w\W]+?ship/\d[012]?){12}[\w\W]+?Schiffe' & $s12 & '[\w\W]+?(\d\d\.\d\d\.\d\d \d\d:\d\d:\d\d)', 3) ; Truppen in
  414.     For $i = 0 To UBound($aAngriff) - 1 Step 15
  415.         _DB_Exec("INSERT INTO Movements (event, planet, planetfrom, ships, movtype, date, diff, now) " & _
  416.                 "VALUES (" & $aAngriff[$i + 0] & ", " & $aAngriff[$i + 1] & ", '" & $sCurP & "', '" & _ArrayToString($aAngriff, "|", $i + 2, $i + 13) & "', " & '"attack"' & ", '" & _Date_DE2Int($aAngriff[$i + 14]) & "', " & _Date_GetNowDiff($aAngriff[$i + 14]) & ", '" & _NowCalc() & "');")
  417.         _DB_Exec("UPDATE Farmlist SET atk = " & $aAngriff[$i + 0] & ", lastatk = '" & _NowCalc() & "' WHERE target = " & $aAngriff[$i + 1] & " AND planetfrom = " & $sCurP)
  418.     Next
  419.     For $i = 0 To UBound($aRueckkehr) - 1 Step 15
  420.         _DB_Exec("INSERT INTO Movements (event, planet, planetfrom, ships, movtype, date, diff, now) " & _
  421.                 "VALUES (" & $aRueckkehr[$i + 0] & ", " & $aRueckkehr[$i + 1] & ", '" & $sCurP & "', '" & _ArrayToString($aRueckkehr, "|", $i + 2, $i + 13) & "', " & '"return"' & ", '" & _Date_DE2Int($aRueckkehr[$i + 14]) & "', " & _Date_GetNowDiff($aRueckkehr[$i + 14]) & ", '" & _NowCalc() & "');")
  422.         _DB_Exec("UPDATE Farmlist SET atk = " & $aRueckkehr[$i + 0] & ", lastatk = '" & _NowCalc() & "' WHERE target = " & $aRueckkehr[$i + 1] & " AND planetfrom = " & $sCurP)
  423.     Next
  424. ;~  Local $aTmp = _DB_Query("SELECT * From Movements")
  425. ;~  _ArrayDisplay($aTmp)
  426. ;~  Exit
  427.     Return $aSlots[1] - $aSlots[0]
  428. EndFunc   ;==>_Game_Fleet_GetFleetInfo
  429.  
  430. Func _GUI_UpdateQueue($sHTML, ByRef $c_Queue, $iOverWrite = 0)
  431.     Local $sQueue, $hQueue = GUICtrlGetHandle($c_Queue)
  432.     Local Static $aQueue = StringRegExp($sHTML, '(/building/delEvent/[^"]+)[\w\W]+?colorWhite">([^<]+)[\w\W]+?(\d?\d\d:\d\d:\d\d)(?= Uhr)', 3)
  433.     If $iOverWrite Then $aQueue = StringRegExp($sHTML, '(/building/delEvent/[^"]+)[\w\W]+?colorWhite">([^<]+)[\w\W]+?(\d?\d\d:\d\d:\d\d)(?= Uhr)', 3)
  434.     If Not @error Then
  435.         For $i = 0 To UBound($aQueue) - 3 Step 3
  436.             $sQueue &= $aQueue[$i + 1] & " - fertig um " & $aQueue[$i + 2] & " in " & _Date_sec2time(_DateDiff("s", _NowCalc(), @YEAR & "/" & @MON & "/" & @MDAY & " " & $aQueue[$i + 2])) & @CRLF
  437.         Next
  438.  
  439.         If $sQueue <> "" Then GUICtrlSetData($c_Queue, $sQueue)
  440.  
  441.     EndIf
  442. EndFunc   ;==>_GUI_UpdateQueue
  443.  
  444. Func _GUI_UpdateListView($sHTML, ByRef $c_Listview)
  445.     Local $aBuildings = StringRegExp($sHTML, 'id="area_(\d+)"[^"]+"([^"]+)', 3)
  446. ;~  _ArrayDisplay($aBuildings)
  447.     If @error Then Return SetError(1, 0, 0)
  448.     Local $hListView = GUICtrlGetHandle($c_Listview)
  449.     _GUICtrlListView_DeleteAllItems($hListView)
  450.  
  451.     For $p = 0 To UBound($aBuildings) - 2 Step 2
  452.         Local $sStufe = "", $aStufe = StringRegExp($aBuildings[$p + 1], "Stufe (\d+)", 3)
  453.         If IsArray($aStufe) Then
  454.             $aBuildings[$p + 1] = StringRegExpReplace($aBuildings[$p + 1], "Stufe \d+", "")
  455.             $sStufe = $aStufe[0]
  456.         EndIf
  457.         GUICtrlCreateListViewItem($aBuildings[$p] & "|" & $aBuildings[$p + 1] & "|" & $sStufe, $c_Listview)
  458.     Next
  459.     Return $aBuildings
  460. EndFunc   ;==>_GUI_UpdateListView
  461.  
  462. Func _Date_DE2Int($sDate)
  463.     Return StringRegExpReplace($sDate, "(\d\d)\.(\d\d)\.(\d\d) (\d\d:\d\d:\d\d)", "20$3/$2/$1 $4")
  464. EndFunc   ;==>_Date_DE2Int
  465.  
  466. Func _Date_GetNowDiff($sDate)
  467.     Return _DateDiff("s", _NowCalc(), StringRegExpReplace($sDate, "(\d\d)\.(\d\d)\.(\d\d) (\d\d:\d\d:\d\d)", "20$3/$2/$1 $4"))
  468. EndFunc   ;==>_Date_GetNowDiff
  469.  
  470. Func _Date_sec2time($iSec)
  471.     Local $iRetH = 0, $iRetM = 0, $iRetS = 0
  472.     If $iSec / 3600 >= 1 Then
  473.         $iRetH = Floor($iSec / 3600)
  474.         $iSec = Mod($iSec, 3600)
  475.     EndIf
  476.     If $iSec / 60 >= 1 Then
  477.         $iRetM = Floor($iSec / 60)
  478.         $iSec = Mod($iSec, 60)
  479.     EndIf
  480.     $iRetS = $iSec
  481.     Return StringFormat("%.2d:%.2d:%.2d", $iRetH, $iRetM, $iRetS)
  482. EndFunc   ;==>_Date_sec2time
  483.  
  484. Func _PostEncode($sData)
  485.     Return StringReplace(StringReplace($sData, "[", "%5B"), "]", "%5D")
  486. EndFunc   ;==>_PostEncode
  487. Func _Wiki_GetShipsData()
  488.     Local $HTTP_Host = "wiki.imperion.de"
  489.     Local $HTTP_Connect = _WinHttpConnect($HTTP_Agent, $HTTP_Host)
  490.  
  491.  
  492.     _DB_Exec("CREATE TABLE Ships (id INTEGER PRIMARY KEY, title text, race text, r1 bigint, r2 bigint, r3 bigint, r4 bigint, time text, scase bigint, shield smallint, w_count smallint, w_strength bigint, speed smallint, payload smallint, energy smallint, fuel smallint, capacity smallint, fpcost bitint);")
  493.     ; Terraner
  494.     Local $ter_buildings[12] = ["Sonde", "Jäger", "Schlachtschiff", "Zerstörer", "Schwerer Kreuzer", "Pulsar", "Bomber", "Tankschiff", "kleiner Transporter", "Recycler", "Großer Recycler", "Kolonieschiff"]
  495.     Local $ter_overview = _WinHTTP_Visit("/wiki/Schiffe_der_Terraner", $HTTP_Connect, $HTTP_Host)
  496.     Local $ter_choosen = StringRegExp($ter_overview, 'a href="/wiki[^"]+Terraner_([^"]+)', 3)
  497.     For $j = 0 To UBound($ter_choosen) - 1
  498.         For $i = 0 To UBound($ter_buildings) - 1
  499.             If _URIDecode($ter_choosen[$j]) = $ter_buildings[$i] Then
  500.                 Local $Html_Infos = _WinHTTP_Visit("/wiki/Terraner_" & $ter_choosen[$j], $HTTP_Connect, $HTTP_Host)
  501.                 Local $unit_info = StringRegExp($Html_Infos, '0 numeric">(\d+)<[^"]+"[^"]+">(\d+)<[^"]+"[^"]+">(\d+)<[^"]+"[^"]+">(\d+)<[^"]+"[^"]+">([^<]+:[^<]+)', 3)
  502.                 ; [0] - Metall [1] - Kristall [2] - Deu/Tri [3] - Zecks [4] - Zeit
  503. ;~              _ArrayDisplay($unit_info)
  504.                 Local $unit_stats = StringRegExp($Html_Infos, '0 numeric">(\d+)<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+', 3)
  505.                 ; [0] - [8] - case, shield , w_count , w_strength , speed , payload , energy , fuel , capacity
  506.                 Local $unit_fpcost = StringRegExp($Html_Infos, '\((\d+) FP\)', 3)
  507.                 If Not IsArray($unit_fpcost) Then Local $unit_fpcost[1] = [0]
  508. ;~              ClipPut($Html_Infos)
  509.                 _DB_Exec("INSERT INTO Ships (id, title, race, r1, r2, r3, r4, time, scase, shield, w_count, w_strength, speed, payload, energy, fuel, capacity, fpcost)" & _
  510.                         " VALUES (NULL, '" & _URIDecode($ter_choosen[$j]) & "', 'Terraner', '" & $unit_info[0] & "', '" & $unit_info[1] & "', '" & $unit_info[2] & "', '" & $unit_info[3] & "', '" & $unit_info[4] & "', '" & $unit_stats[0] & "', '" & $unit_stats[1] & "', '" & $unit_stats[2] & "', '" & $unit_stats[3] & "', '" & $unit_stats[4] & "', '" & $unit_stats[5] & "', '" & $unit_stats[6] & "', '" & $unit_stats[7] & "', '" & $unit_stats[8] & "', '" & $unit_fpcost[0] & "');")
  511.             EndIf
  512.         Next
  513.     Next
  514.  
  515.     ; Titanen
  516.     Local $tit_buildings[12] = ["Observer", "Scout", "Delphi", "Corsair", "Terminator", "Carrier", "Protektor", "Phoenix", "Kleiner Transporter", "Großer Transporter", "Recycler", "Kolonieschiff"]
  517.     Local $tit_overview = _WinHTTP_Visit("/wiki/Schiffe_der_Titanen", $HTTP_Connect, $HTTP_Host)
  518.     Local $tit_choosen = StringRegExp($tit_overview, 'a href="/wiki[^"]+Titanen_([^"]+)', 3)
  519.     For $j = 0 To UBound($tit_choosen) - 1
  520.         For $i = 0 To UBound($tit_buildings) - 1
  521.             If _URIDecode($tit_choosen[$j]) = $tit_buildings[$i] Then
  522.                 $Html_Infos = _WinHTTP_Visit("/wiki/Titanen_" & $tit_choosen[$j], $HTTP_Connect, $HTTP_Host)
  523.                 $unit_info = StringRegExp($Html_Infos, '0 numeric">(\d+)<[^"]+"[^"]+">(\d+)<[^"]+"[^"]+">(\d+)<[^"]+"[^"]+">(\d+)<[^"]+"[^"]+">([^<]+:[^<]+)', 3)
  524.                 ; [0] - Metall [1] - Kristall [2] - Deu/Tri [3] - Zecks [4] - Zeit
  525.                 $unit_stats = StringRegExp($Html_Infos, '0 numeric">(\d+)<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+', 3)
  526.                 ; [0] - [8] - case, shield , w_count , w_strength , speed , payload , energy , fuel , capacity
  527.                 $unit_fpcost = StringRegExp($Html_Infos, '\((\d+) FP\)', 3)
  528.                 If Not IsArray($unit_fpcost) Then Local $unit_fpcost[1] = [0]
  529.  
  530.                 _DB_Exec("INSERT INTO Ships (id, title, race, r1, r2, r3, r4, time, scase, shield , w_count, w_strength, speed, payload, energy, fuel, capacity, fpcost)" & _
  531.                         " VALUES (NULL, '" & _URIDecode($tit_choosen[$j]) & "', 'Titanen', '" & $unit_info[0] & "', '" & $unit_info[1] & "', '" & $unit_info[2] & "', '" & $unit_info[3] & "', '" & $unit_info[4] & "', '" & $unit_stats[0] & "', '" & $unit_stats[1] & "', '" & $unit_stats[2] & "', '" & $unit_stats[3] & "', '" & $unit_stats[4] & "', '" & $unit_stats[5] & "', '" & $unit_stats[6] & "', '" & $unit_stats[7] & "', '" & $unit_stats[8] & "', '" & $unit_fpcost[0] & "');")
  532.             EndIf
  533.         Next
  534.     Next
  535.  
  536.     ; Xen
  537.     Global $xen_buildings[12] = ["Zek", "Zekkon", "Xnair", "Mylon", "Maxtron", "Mutterschiff", "Suikon", "Psikon", "Macid", "Bomber", "Octopon", "Kolonieschiff"]
  538.     Local $xen_overview = _WinHTTP_Visit("/wiki/Schiffe_der_Xen", $HTTP_Connect, $HTTP_Host)
  539.     Local $xen_choosen = StringRegExp($xen_overview, 'a href="/wiki[^"]+Xen_([^"]+)', 3)
  540.     For $j = 0 To UBound($xen_choosen) - 1
  541.         For $i = 0 To UBound($xen_buildings) - 1
  542.             If _URIDecode($xen_choosen[$j]) = $xen_buildings[$i] Then
  543.                 $Html_Infos = _WinHTTP_Visit("/wiki/Xen_" & $xen_choosen[$j], $HTTP_Connect, $HTTP_Host)
  544.                 $unit_info = StringRegExp($Html_Infos, '0 numeric">(\d+)<[^"]+"[^"]+">(\d+)<[^"]+"[^"]+">(\d+)<[^"]+"[^"]+">(\d+)<[^"]+"[^"]+">([^<]+:[^<]+)', 3)
  545.                 ; [0] - Metall [1] - Kristall [2] - Deu/Tri [3] - Zecks [4] - Zeit
  546.                 $unit_stats = StringRegExp($Html_Infos, '0 numeric">(\d+)<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+<[^"]+"[^"]+">(\d)+', 3)
  547.                 ; [0] - [8] - case, shield , w_count , w_strength , speed , payload , energy , fuel , capacity
  548.                 $unit_fpcost = StringRegExp($Html_Infos, '\((\d+) FP\)', 3)
  549.                 If Not IsArray($unit_fpcost) Then Local $unit_fpcost[1] = [0]
  550.  
  551.                 _DB_Exec("INSERT INTO Ships (id, title, race, r1, r2, r3, r4, time, scase, shield, w_count, w_strength, speed, payload, energy, fuel, capacity, fpcost)" & _
  552.                         " VALUES (NULL, '" & _URIDecode($xen_choosen[$j]) & "', 'Xen', '" & $unit_info[0] & "', '" & $unit_info[1] & "', '" & $unit_info[2] & "', '" & $unit_info[3] & "', '" & $unit_info[4] & "', '" & $unit_stats[0] & "', '" & $unit_stats[1] & "', '" & $unit_stats[2] & "', '" & $unit_stats[3] & "', '" & $unit_stats[4] & "', '" & $unit_stats[5] & "', '" & $unit_stats[6] & "', '" & $unit_stats[7] & "', '" & $unit_stats[8] & "', '" & $unit_fpcost[0] & "');")
  553.             EndIf
  554.         Next
  555.     Next
  556. EndFunc   ;==>_Wiki_GetShipsData
  557.  
  558. Func _Wiki_GetBuildData()
  559.     Local $HTTP_Host = "wiki.imperion.de"
  560.     Local $HTTP_Connect = _WinHttpConnect($HTTP_Agent, $HTTP_Host)
  561.     _DB_Exec("CREATE TABLE Buildings (id INTEGER PRIMARY KEY, title text, race text, lvl smallint(2), r1 bigint, r2 bigint, r3 bigint, time text, energy smallint);")
  562.     ; Terraner
  563.     Local $ter_buildings[29] = ["Metallmine", "Kristallmine", "Deuteriumplattform", "Hochofen", "Kristallmühle", "Deuteriumfilter", "Solarfarm", "Windkraftwerk", _
  564.             "Wasserkraftwerk", "Fusionskraftwerk", "AEC", "Metalllager", "Kristalllager", "Deuteriumlager", "Schiffswerft", "Waffenfabrik", "Raketensilo", _
  565.             "Flottenstützpunkt", "Impulsscanner", "Hangar", "Forschungsgebäude", "Botschaft", "Bauhof", "Recyclinghof", "Rohstoffversteck", "Handelszentrum", _
  566.             "Kolonisierungscenter", "Zivile_Schiffswerft", "Roboterfabrik"]
  567.     Local $ter_overview = _WinHTTP_Visit("/wiki/Gebäude_der_Terraner", $HTTP_Connect, $HTTP_Host)
  568.     Local $ter_choosen = StringRegExp($ter_overview, 'a href="/wiki[^"]+Terraner_([^"]+)', 3)
  569.     For $j = 0 To UBound($ter_choosen) - 1
  570.         For $i = 0 To UBound($ter_buildings) - 1
  571.             If _URIDecode($ter_choosen[$j]) = $ter_buildings[$i] Then
  572.                 Local $Html_Infos = _WinHTTP_Visit("/wiki/Terraner_" & $ter_choosen[$j], $HTTP_Connect, $HTTP_Host)
  573.                 Local $bld_info = StringRegExp($Html_Infos, '<td>(\d+)[^"]+"r1[^"]+">(\d+)[^"]+"r2[^"]+">(\d+)[^"]+"r3[^"]+">(\d+)[^"]+"time[^>]+>([^<]+)[^\d]+(\d+)', 3)
  574.                 ; [0] - Stufe [1] - Metall [2] - Kristall [3] - Deu/Tri [4] - Zeit [5] - Energie // + 6 = nächste Stufe
  575.                 For $y = 0 To UBound($bld_info) / 6 - 1 Step +1
  576.                     _DB_Exec("INSERT INTO Buildings (id, title, race, lvl, r1, r2, r3, time, energy)" & _
  577.                             " VALUES (NULL, '" & $ter_choosen[$j] & "', 'Terraner', '" & $bld_info[0 + 6 * $y] & "', '" & $bld_info[1 + 6 * $y] & "', '" & $bld_info[2 + 6 * $y] & "', '" & $bld_info[3 + 6 * $y] & "', '" & $bld_info[4 + 6 * $y] & "', '" & $bld_info[5 + 6 * $y] & "');")
  578.                 Next
  579.                 ExitLoop
  580.             EndIf
  581.         Next
  582.     Next
  583.     ; Titanen
  584.     Local $tit_buildings[33] = ["Metallmine", "Kristallmine", "Tritiumplattform", "Hochofen", "Kristallmühle", "Tritiumfilter", "Solarkraftwerk", "Windkraftwerk", _
  585.             "Wasserkraftwerk", "Fusionskraftwerk", "AEC", "Metalllager", "Kristalllager", "Tritiumlager", "Subraumlager", "Energiespeicher", "Schiffswerft", _
  586.             "Waffenfabrik", "Flottenstützpunkt", "Schildgenerator", "Richtscanner", "Störsender", "Sprungtor", "Tarngenerator", "Dimensionsmodulator", "Forschungslabor", _
  587.             "Botschaft", "Bauhof", "Zivile_Schiffswerft", "Teleporter", "Roboterfabrik", "Rohstoffversteck", "Transmitter"], $tit_overview = _WinHTTP_Visit("/wiki/Gebäude_der_Titanen", $HTTP_Connect, $HTTP_Host), $tit_choosen = StringRegExp($tit_overview, 'a href="/wiki[^"]+Titanen_([^"]+)', 3)
  588.     For $j = 0 To UBound($tit_choosen) - 1
  589.         For $i = 0 To UBound($tit_buildings) - 1
  590.             If _URIDecode($tit_choosen[$j]) = $tit_buildings[$i] Then
  591.                 $Html_Infos = _WinHTTP_Visit("/wiki/Titanen_" & $tit_choosen[$j], $HTTP_Connect, $HTTP_Host)
  592.                 $bld_info = StringRegExp($Html_Infos, '<td>(\d+)[^"]+"r1[^"]+">(\d+)[^"]+"r2[^"]+">(\d+)[^"]+"r3[^"]+">(\d+)[^"]+"time[^>]+>([^<]+)[^\d]+(\d+)', 3)
  593.                 ; [0] - Stufe [1] - Metall [2] - Kristall [3] - Deu/Tri [4] - Zeit [5] - Energie // + 6 = nächste Stufe
  594.                 For $y = 0 To UBound($bld_info) / 6 - 1 Step +1
  595.                     _DB_Exec("INSERT INTO Buildings (id, title, race, lvl, r1, r2, r3, time, energy)" & _
  596.                             " VALUES (NULL, '" & $tit_choosen[$j] & "', 'Titanen', '" & $bld_info[0 + 6 * $y] & "', '" & $bld_info[1 + 6 * $y] & "', '" & $bld_info[2 + 6 * $y] & "', '" & $bld_info[3 + 6 * $y] & "', '" & $bld_info[4 + 6 * $y] & "', '" & $bld_info[5 + 6 * $y] & "');")
  597.                 Next
  598.                 ExitLoop
  599.             EndIf
  600.         Next
  601.     Next
  602.     ; Xen
  603.     Local $xen_buildings[26] = ["Metallmine", "Kristallmine", "Deuteriumplattform", "Hochofen", "Kristallmühle", "Deuteriumfilter", "Photosynthesekraftwerk", "Windkraftwerk", _
  604.             "Thermalkraftwerk", "Fusionskraftwerk", "AEC", "Allgemeinlager", "Deuteriumlager", "Bioreaktor", "Kleine_Schiffswerft", "Große_Schiffswerft", _
  605.             "Waffenfabrik", "Flottenstützpunkt", "Raketensilo", "Zekhöhle", "Brain", "Entwicklungszentrum", "Botschaft", "Bauhof", "Rohstoffversteck", _
  606.             "Handelszentrum"], $xen_overview = _WinHTTP_Visit("/wiki/Gebäude_der_Xen", $HTTP_Connect, $HTTP_Host), $xen_choosen = StringRegExp($xen_overview, 'a href="/wiki[^"]+Xen_([^"]+)', 3)
  607.     For $j = 0 To UBound($xen_choosen) - 1
  608.         For $i = 0 To UBound($xen_buildings) - 1
  609.             If _URIDecode($xen_choosen[$j]) = $xen_buildings[$i] Then
  610.                 $Html_Infos = _WinHTTP_Visit("/wiki/Xen_" & $xen_choosen[$j], $HTTP_Connect, $HTTP_Host)
  611.                 $bld_info = StringRegExp($Html_Infos, '<td>(\d+)[^"]+"r1[^"]+">(\d+)[^"]+"r2[^"]+">(\d+)[^"]+"r3[^"]+">(\d+)[^"]+"time[^>]+>([^<]+)[^\d]+(\d+)', 3)
  612.                 ; [0] - Stufe [1] - Metall [2] - Kristall [3] - Deu/Tri [4] - Zeit [5] - Energie // + 6 = nächste Stufe
  613.                 ;_ArrayDisplay($bld_info)
  614.                 For $y = 0 To UBound($bld_info) / 6 - 1 Step +1
  615.                     _DB_Exec("INSERT INTO Buildings (id, title, race, lvl, r1, r2, r3, time, energy)" & _
  616.                             " VALUES (NULL, '" & $xen_choosen[$j] & "', 'Xen', '" & $bld_info[0 + 6 * $y] & "', '" & $bld_info[1 + 6 * $y] & "', '" & $bld_info[2 + 6 * $y] & "', '" & $bld_info[3 + 6 * $y] & "', '" & $bld_info[4 + 6 * $y] & "', '" & $bld_info[5 + 6 * $y] & "');")
  617.                 Next
  618.                 ExitLoop
  619.             EndIf
  620.         Next
  621.     Next
  622. EndFunc   ;==>_Wiki_GetBuildData
  623.  
  624. Func _Wiki_GetResearchData()
  625.     Local $HTTP_Host = "wiki.imperion.de"
  626.     Local $HTTP_Connect = _WinHttpConnect($HTTP_Agent, $HTTP_Host)
  627.     _DB_Exec("CREATE TABLE Researches (id INTEGER PRIMARY KEY, title text, race_ter text, race_tit text, race_xen text, lvl smallint, fp_ter bigint, fp_tit bigint, fp_xen bigint);")
  628.     ; Forschungen(Allgemein)
  629.     Local $research[26] = ["Bauplätze", "Gebäudestabilität", "Geologische_Erkundung", "Lagerkapazität", "Teleportation", "Militärische_Raumfahrt_Antriebstechnik", "Militärische_Raumfahrt_Ladekapazität", _
  630.             "Militärische_Raumfahrt_Treibstoffverbrauch", "Zivile_Raumfahrt_Recycling", "Zivile_Raumfahrt_Antriebstechnik", "Zivile_Raumfahrt_Handelsforschung", "Zivile_Raumfahrt_Ladekapazität", _
  631.             "Zivile_Raumfahrt_Wurmlochphysik", "Zivile_Raumfahrt_Spionagetechnik", "Zivile_Raumfahrt_Treibstoffverbrauch", "Zivile_Raumfahrt_Expansionsforschung", "Planetare_Verteidigung_Reparaturquote", _
  632.             "Planetare_Verteidigung_Versteck", "Planetare_Verteidigung_Schildtechnik", "AEC-Energie", "Fusionsenergie", "Solarenergie", "Wasserkraft", "Thermalenergie", "Windenergie", "Qi-Unit"]
  633.     Local $race[4][4] = [["Teleportation", "x", "Titanen", "x"],["Planetare_Verteidigung_Schildtechnik", "x", "Titanen", "x"],["Wasserkraft", "Terraner", "Titanen", "x"],["Thermalenergie", "x", "x", "Xen"]] ; Ausnahmen, die nur von [...] geforscht werden können!
  634.     ; Rassenspezifisch^
  635.     Local $4all[3] = ["AEC-Energie", "Fusionsenergie", "Zivile_Raumfahrt_Expansionsforschung"]
  636.     ; Für alle gleich^
  637.     Local $races, $tit, $ter, $xen
  638.     Local $overview = _WinHTTP_Visit("/wiki/Alle_Forschungen", $HTTP_Connect, $HTTP_Host)
  639.     Local $choosen = StringRegExp($overview, 'a href="/wiki[^"]+Forschung_([^"]+)', 3)
  640.     For $j = 0 To UBound($choosen) - 1
  641.         For $i = 0 To UBound($research) - 1
  642.             If _URIDecode($choosen[$j]) = $research[$i] Then
  643.                 Local $Html_Infos = _WinHTTP_Visit("/wiki/Forschung_" & $choosen[$j], $HTTP_Connect, $HTTP_Host)
  644.                 If _URIDecode($choosen[$j]) = "Bauplätze" Then ClipPut($Html_Infos)
  645.                 For $l = 0 To UBound($race) - 1
  646.                     If $research[$i] = $race[$l][0] Then
  647.                         $races = 0
  648.                         Local $racepos[1]
  649.                         If $race[$l][1] <> "x" Then
  650.                             $tit = "x"
  651.                         Else
  652.                             $tit = "o"
  653.                         EndIf
  654.                         If $race[$l][2] <> "x" Then
  655.                             $ter = "x"
  656.                         Else
  657.                             $ter = "o"
  658.                         EndIf
  659.                         If $race[$l][3] <> "x" Then
  660.                             $xen = "x"
  661.                         Else
  662.                             $xen = "o"
  663.                         EndIf
  664.                         For $t = 1 To 3
  665.                             If $race[$l][$t] = "x" Then $races += 1 ; $races = Für die Rassen gibt es das nicht!
  666.                             If $race[$l][$t] <> "x" Then _ArrayAdd($racepos, $t)
  667.                         Next
  668.                         If 3 - $races = 1 Then
  669.                             Local $info = StringRegExp($Html_Infos, '<td[^>]{0,20}>\s*(Freischaltung|\d+)[^>]+>[^>]{0,20}>\s*(\s+|\d+)[^>]+>', 3)
  670.                             For $s = 0 To UBound($info) - 1 Step +2
  671.                                 Local $ter_inf = "x"
  672.                                 Local $xen_inf = "x"
  673.                                 Local $tit_inf = "x"
  674.                                 If $racepos[1] = 1 Then
  675.                                     $ter_inf = $info[$s + 1]
  676.                                 ElseIf $racepos[1] = 2 Then
  677.                                     $tit_inf = $info[$s + 1]
  678.                                 ElseIf $racepos[1] = 3 Then
  679.                                     $xen_inf = $info[$s + 1]
  680.                                 EndIf
  681.                                 _DB_Exec("INSERT INTO Researches (id, title, race_tit, race_ter, race_xen, lvl, fp_ter, fp_tit, fp_xen)" & _
  682.                                         " VALUES (NULL, '" & _URIDecode($choosen[$j]) & "', '" & $tit & "', '" & $ter & "', '" & $xen & "', '" & $info[$s] & "', '" & $ter_inf & "', '" & $tit_inf & "', '" & $xen_inf & "');") ; "x" = kann es bauen! Ter/Tit/Xen!!!
  683.                             Next
  684.                             ExitLoop
  685.                         ElseIf 3 - $races = 2 Then
  686.                             Local $info = StringRegExp($Html_Infos, '<td[^>]{0,20}>\s*(Freischaltung|\d+)[^>]+>[^>]{0,20}>\s*(\s+|\d+)[^>]+>[^>]{0,20}>\s*(\s+|\d+)[^>]+>', 3)
  687.                             For $s = 0 To UBound($info) - 1 Step +3
  688.                                 Local $ter_inf = "x"
  689.                                 Local $xen_inf = "x"
  690.                                 Local $tit_inf = "x"
  691.                                 For $h = 1 To 2
  692.                                     If $racepos[$h] = 1 Then
  693.                                         $ter_inf = $info[$s + $h]
  694.                                     ElseIf $racepos[$h] = 2 Then
  695.                                         $tit_inf = $info[$s + $h]
  696.                                     ElseIf $racepos[$h] = 3 Then
  697.                                         $xen_inf = $info[$s + $h]
  698.                                     EndIf
  699.                                 Next
  700.                                 _DB_Exec("INSERT INTO Researches (id, title, race_tit, race_ter, race_xen, lvl, fp_ter, fp_tit, fp_xen)" & _
  701.                                         " VALUES (NULL, '" & _URIDecode($choosen[$j]) & "', '" & $tit & "', '" & $ter & "', '" & $xen & "', '" & $info[$s] & "', '" & $ter_inf & "', '" & $tit_inf & "', '" & $xen_inf & "');") ; "x" = kann es bauen! Tit/Ter/Xen!!!
  702.                             Next
  703.                             ExitLoop
  704.                         EndIf
  705.                     ElseIf $research[$i] = $4all[0] Or $research[$i] = $4all[1] Or $research[$i] = $4all[2] Then
  706.                         Local $info = StringRegExp($Html_Infos, '<td[^>]{0,20}>\s*(Freischaltung|\d+)[^>]+>[^>]{0,20}>\s*(\s+|\d+)[^>]+>', 3)
  707.                         For $s = 0 To UBound($info) - 1 Step +2
  708.                             _DB_Exec("INSERT INTO Researches (id, title, race_tit, race_ter, race_xen, lvl, fp_ter, fp_tit, fp_xen)" & _
  709.                                     " VALUES (NULL, '" & _URIDecode($choosen[$j]) & "', 'x', 'x', 'x', '" & $info[$s] & "', '" & $info[$s + 1] & "', '" & $info[$s + 1] & "', '" & $info[$s + 1] & "');") ; "x" = kann es bauen! Ter/Tit/Xen!!!
  710.                         Next
  711.                         ExitLoop
  712.                     ElseIf $research[$i] <> $race[$l][0] And $l = UBound($race) - 1 Then
  713.                         Local $info = StringRegExp($Html_Infos, '<td[^>]{0,20}>\s*(Freischaltung|\d+)[^>]+>[^>]{0,20}>\s*(\s+|\d+)[^>]+>[^>]{0,20}>\s*(\s+|\d+)[^>]+>[^>]{0,20}>\s*(\s+|\d+)[^>]+>', 3)
  714.                         For $s = 0 To UBound($info) - 1 Step +4
  715.                             _DB_Exec("INSERT INTO Researches (id, title, race_tit, race_ter, race_xen, lvl,  fp_ter, fp_tit, fp_xen)" & _
  716.                                     " VALUES (NULL, '" & _URIDecode($choosen[$j]) & "', 'x', 'x', 'x', '" & $info[$s] & "', '" & $info[$s + 1] & "', '" & $info[$s + 2] & "', '" & $info[$s + 3] & "');") ; "x" = kann es bauen! Ter/Tit/Xen!!!
  717.                         Next
  718.                     EndIf
  719.                 Next
  720.             EndIf
  721.         Next
  722.     Next
  723. EndFunc   ;==>_Wiki_GetResearchData
  724.  
  725. Func _URIDecode($sData)
  726.     ; Author: Prog@ndy
  727.     Local $aData = StringSplit(StringReplace($sData, "+", " ", 0, 1), "%")
  728.     $sData = ""
  729.     For $i = 2 To $aData[0]
  730.         $aData[1] &= Chr(Dec(StringLeft($aData[$i], 2))) & StringTrimLeft($aData[$i], 2)
  731.     Next
  732.     Return BinaryToString(StringToBinary($aData[1], 1), 4)
  733. EndFunc   ;==>_URIDecode
  734.  
  735. Func _URLEncode($sData)
  736.     ; Author: Prog@ndy
  737.     Local $aData = StringSplit(BinaryToString(StringToBinary($sData, 4), 1), "")
  738.     Local $nChar
  739.     $sData = ""
  740.     For $i = 1 To $aData[0]
  741.         $nChar = Asc($aData[$i])
  742.         Switch $nChar
  743.             Case 45, 46, 48 To 57, 65 To 90, 95, 97 To 122, 126
  744.                 $sData &= $aData[$i]
  745.             Case 32
  746.                 $sData &= "+"
  747.             Case Else
  748.                 $sData &= "%" & Hex($nChar, 2)
  749.         EndSwitch
  750.     Next
  751.  
  752.     Return $sData
  753. EndFunc   ;==>_URLEncode
  754.  
  755. Func _DB_Start()
  756.     Local $fFE
  757.     _SQLite_Startup()
  758.     If @error > 0 Then
  759.         MsgBox(16, "SQLite Error", "SQLite.dll Can't be Loaded!")
  760.         Exit -1
  761.     EndIf
  762.     ConsoleWrite("_SQLite_LibVersion=" & _SQLite_LibVersion() & @CR)
  763.     If FileExists(@ScriptDir & "\Data._iB") Then $fFE = True
  764.     _SQLite_Open(@ScriptDir & "\Data._iB")
  765.     If Not $fFE Then _DB_FirstStartUp()
  766. EndFunc   ;==>_DB_Start
  767.  
  768. Func _DB_Shutdown()
  769.     _SQLite_Shutdown()
  770. EndFunc   ;==>_DB_Shutdown
  771.  
  772. Func _DB_Exec($sMyQuery, $hDB = -1, $iSLN = @ScriptLineNumber)
  773.     ConsoleWrite("+> SQLite Exec, Line " & $iSLN & @TAB & $sMyQuery & @CRLF)
  774.     Local $iRet = _SQLite_Exec($hDB, $sMyQuery)
  775.     Return SetError(@error, @extended, $iRet)
  776. EndFunc   ;==>_DB_Exec
  777.  
  778. Func _DB_Query($sMyQuery, $hDB = -1, $iSLN = @ScriptLineNumber)
  779.     ConsoleWrite("-> SQLite Query, Line " & $iSLN & @TAB & $sMyQuery & @CRLF)
  780.     Local $hQuery, $aCol = 0, $iRow = 0, $hSize = 1000, $vSize = 0
  781.     Dim $aRet[1000][50]
  782.     _SQLite_Query($hDB, $sMyQuery, $hQuery)
  783.  
  784.     While _SQLite_FetchData($hQuery, $aCol) = $SQLITE_OK
  785.         $iRow += 1
  786.         If $iRow = $hSize - 1 Then
  787.             $hSize += 2000
  788.             ReDim $aRet[$hSize][UBound($aRet, 2)]
  789.         EndIf
  790.         For $i = 0 To UBound($aCol) - 1
  791.             If $vSize < $i Then $vSize = $i
  792.             $aRet[$iRow][$i] = $aCol[$i]
  793.         Next
  794.     WEnd
  795.  
  796.     $aRet[0][0] = $iRow
  797.     $aRet[0][1] = $vSize + 1
  798.     ReDim $aRet[$aRet[0][0] + 1][$aRet[0][1]]
  799.     Return $aRet
  800. EndFunc   ;==>_DB_Query
  801.  
  802. Func _DB_FirstStartUp()
  803. ;~  _DB_Exec("DROP TABLE Movements")
  804. ;~  _DB_Exec("DROP TABLE Reports")
  805.     _DB_Exec("CREATE TABLE Movements (event INTEGER PRIMARY KEY, planetfrom BIGINT, planet INTEGER, ships TEXT,movtype TEXT, now TEXT, diff INTEGER, date TEXT, cap INTEGER);")
  806.     _DB_Exec("CREATE TABLE Reports (id INTEGER PRIMARY KEY, planet bigint, cap bigint, attacker text, defender text, r1 bigint, r2 bigint, r3 bigint, date text, planetdef text, schutt text);")
  807.  
  808.     MsgBox(0, "", "Lade Spiel Informationen herunter.")
  809.     _Wiki_GetShipsData()
  810.     _Wiki_GetResearchData()
  811.     _Wiki_GetBuildData()
  812.  
  813.     MsgBox(0, "", "Download abgeschlossen. Farmlist erstellen (Die funktion musst du selbst noch anpassen!")
  814.     MsgBox(0, "", "_Game_Farm_CreateFarmList(), Zeile " & @ScriptLineNumber + 1)
  815.     _Game_Farm_CreateFarmList()
  816.  
  817.     Sleep(10)
  818. EndFunc   ;==>_DB_FirstStartUp
  819.  
  820. Func _HKS()
  821.     Local $aTmp
  822.     Switch @HotKeyPressed
  823.         Case "!{Q}"
  824.             $aTmp = _DB_Query(InputBox("DB Query", "Enter a DB Query", "SELECT * FROM "))
  825.             If UBound($aTmp) > 1 Then _ArrayDisplay($aTmp, "DB Query Results")
  826.         Case "!{C}"
  827.             Call(InputBox("Call", "Call Function"))
  828.         Case "!{E}"
  829.             _DB_Exec(InputBox("DB Exec", "Enter a DB Exec Command"))
  830.     EndSwitch
  831. EndFunc   ;==>_HKS
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement