1. Dashboard
  2. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team
    4. Mitgliedersuche
  3. Forenregeln
  4. Forum
    1. Unerledigte Themen
  • Anmelden
  • Registrieren
  • Suche
Alles
  • Alles
  • Artikel
  • Seiten
  • Forum
  • Erweiterte Suche
  1. AutoIt.de - Das deutschsprachige Forum.
  2. Mitglieder
  3. Lottich

Beiträge von Lottich

  • Rangliste für ein Browsergame

    • Lottich
    • 15. September 2013 um 02:33
    [autoit]

    $sect_count = IniReadSection($file2, "ranking")
    Local $array[$sect_count[0][0]+1]
    For $i = 1 To $sect_count[0][0]
    $string = $sect_count[$i][1]
    $split = StringSplit($string, "|")
    $array[$i] = Int($split[2])
    Next
    _ArraySort($array,1,1,0,0)

    [/autoit][autoit][/autoit][autoit]

    For $i = 1 To $sect_count[0][0]
    For $k = 1 To $sect_count[0][0]
    $string = $sect_count[$k][1]
    $split = StringSplit($string, "|")
    If $array[$i] = Int($split[2]) Then
    ExitLoop
    EndIf
    Next
    IniWrite($file1, "Ranking", $i, $string)
    Next

    [/autoit]


    Damit konnte ich es über den Umweg einer 2. Datei lösen. Danke für eure Tips :)

  • Rangliste für ein Browsergame

    • Lottich
    • 14. September 2013 um 23:41

    an _arraysort hab ich auch schon gedacht, nur erschließt sich mir nicht, wie ich das realisieren soll. Ich lese die Sektion mit INIReadSection() ein. Mit ner For-To-Schleife geh ich die Einträge durch und mit stringsplit krieg ich den jeweiligen Score.

    Aber wie gehts dann weiter?

  • Rangliste für ein Browsergame

    • Lottich
    • 14. September 2013 um 23:30

    hey, ich komm hier grad nicht weiter (Denkblockade)....

    Ich hab eine INI-Datei, die ich als Datenbank missbrauche. Beispiel:

    Code
    [Ranking]
    1=name4  |924092    |0  |33978|33978
    2=name1  |1737727  |0  |46413|46413
    3=name2  |1372808  |0  |58457|58457
    4=name5  |627189    |0  |11814|11814
    5=name6  |524065    |0  |10968|10968
    6=name3  |1174513  |0  |26183|26183
    ...


    Diese Daten müssten nun so sortiert werden, dass bei "1= " der Name mit den meissten Punkten dahinter steht und bei "6=" der Name mit den wenigsten. So, dass halt ne vernünftige Rangliste entsteht.
    Wie muss ich das machen??

    MfG Lottich

    PS: Die Leerzeichen in dem INI-Beispiel dienen nur der besseren Übersicht und sind in der richtigen INI nicht vorhanden.
    Es kommt nur auf die Punkte direkt nach dem Namen an, der Rest wird von mir anders genutzt.

  • Doppelklick bei mehreren Listviews ?

    • Lottich
    • 17. März 2013 um 17:11

    BugFix :

    Ja, da hast du recht. Doch so geil und hilfreich die AutoIt-Hilfe auch ist, hat sie doch einen kleinen Haken:
    Sie ist so verdammt groß und Umfangreich, dass man manchmal gar nicht weiss, wo man die richtigen Infos herbekommt.

    Ich wollte das in meinem Projekt eigentlich über Doppelklick lösen, die Möglichkeit, das Ganze per einfachen Linksklick zu machen kam mir erst im Nachhinein.
    Das eigentliche Script, wo ich das brauch, wird mehrere 1000 Zeilen Code enthalten. Das weiss ich bereits mit Sicherheit. Und daher ist für mich die Lösung über WM_NOTIFY
    am Sinvollsten, denn jede gesparte Zeile Code wird für mich Gold wert sein. :D

  • Doppelklick bei mehreren Listviews ?

    • Lottich
    • 17. März 2013 um 15:58

    Danke Raupi :thumbup:

    da lag ich ja mit dem Or ja doch nicht so falsch ;)

    Ist jetzt zwar gelöst, aber eine Frage hab ich dennoch. Kann man das auch so umschreiben, dass ich das gleiche Ergebnis auch mit einem einfachen Linksklick erreichen kann?
    ich werd zwar versuchen, dass auf eigene Faust hinzubekommen, doch ich bin mir sicher, dass ich es nicht hinkriegen werde :whistling:


    Edit:
    Lösung doch gefunden :)
    einfach aus der -3 eine -2 gemacht...

    Vielen dank Raupi :thumbup:

  • Doppelklick bei mehreren Listviews ?

    • Lottich
    • 17. März 2013 um 02:57

    Heyho,

    ich hab eine GUI mit 3 ListViews (wegen der Übersicht).
    Irgendwo hab ich mal eine Funktion gefunden, die mir die Doppelklicks dafür bereitstellt (unglückliche Formulierung, ich weiss :huh: )

    Testscript
    [autoit]

    #include <GuiListView.au3>

    [/autoit] [autoit][/autoit] [autoit]

    Global $hInput, $hListview_1, $hListview_2, $hListview_3

    [/autoit] [autoit][/autoit] [autoit]

    GUICreate("TestGUI", 240, 300)
    $hListview_1 = GUICtrlCreateListView("View 1|Spalte 2|Spalte 3", 8, 10, 225, 70)
    GUICtrlCreateListViewItem("Zeile 1a|Test 1a|Text 1a", $hListview_1)
    GUICtrlCreateListViewItem("Zeile 1b|Test 1b|Text 1b", $hListview_1)

    [/autoit] [autoit][/autoit] [autoit]

    $hListview_2 = GUICtrlCreateListView("View 2|Spalte 1|Spalte 2", 8, 90, 225, 70)
    GUICtrlCreateListViewItem("Zeile 2a|Test 2a|Text 2a", $hListview_2)
    GUICtrlCreateListViewItem("Zeile 2b|Test 2b|Text 2b", $hListview_2)

    [/autoit] [autoit][/autoit] [autoit]

    $hListview_3 = GUICtrlCreateListView("View 3|Spalte 1|Spalte 2", 8, 170, 225, 70)
    GUICtrlCreateListViewItem("Zeile 3a|Test 3a|Text 3a", $hListview_3)
    GUICtrlCreateListViewItem("Zeile 3b|Test 3b|Text 3b", $hListview_3)

    [/autoit] [autoit][/autoit] [autoit]

    $hInput = GUICtrlCreateInput("", 8, 260, 225, 20, 0x0800)

    [/autoit] [autoit][/autoit] [autoit]

    GUIRegisterMsg(0x004E, "WM_NOTIFY")
    GUISetState()

    [/autoit] [autoit][/autoit] [autoit]

    Do
    Sleep(50)
    Until GUIGetMsg() = -3

    [/autoit] [autoit][/autoit] [autoit]

    Func WM_NOTIFY($hWnd, $iMsg, $wParam, $lParam)
    Local $hWndFrom, $iIDFrom, $iCode, $tNMHDR, $hWndListView
    Local $hListview = $hListview_1 ;==> eingefügt, dammit ein ListView erkannt wird
    $hWndListView = $hListview
    If Not IsHWnd($hListview) Then $hWndListView = GUICtrlGetHandle($hListview)
    $tNMHDR = DllStructCreate("hwnd hWndFrom;uint_ptr IDFrom;INT Code", $lParam)
    $hWndFrom = HWnd(DllStructGetData($tNMHDR, "hWndFrom"))
    $iIDFrom = DllStructGetData($tNMHDR, "IDFrom")
    $iCode = DllStructGetData($tNMHDR, "Code")
    If $hWndFrom = $hWndListView Then
    If $iCode = -3 Then
    $tInfo = DllStructCreate("hwnd hWndFrom;uint_ptr IDFrom;INT Code;int Item;int SubItem;" & _
    "uint NewState;uint OldState;uint Changed;long ActionX;long ActionY;lparam Param", $lParam)

    [/autoit] [autoit][/autoit] [autoit]

    $iIndex = DllStructGetData($tInfo, "Item")
    GUICtrlSetData($hInput, _GUICtrlListView_GetItemText($hWndListView, $iIndex))
    EndIf
    EndIf
    Return 'GUI_RUNDEFMSG'
    EndFunc ;==>WM_NOTIFY

    [/autoit]


    Ich will, dass bei Doppelklick auf eines der 3 ListViews die erste Spalte ausgelesen wird, damit ich die erhaltene Info weiter verarbeiten kann.
    Leider klappt das mal wieder nicht wie gewünscht. Ich versuchte erst, in Zeile 29 des Testscripts diesen Code:

    [autoit]

    Local $hListview = $hListview_1 And $hListview_2 And $hListview_3

    [/autoit]

    danach

    [autoit]

    Local $hListview = $hListview_1 Or $hListview_2 Or $hListview_3

    [/autoit]

    ... beides erfolglos... danach versuchte ich, die Funktion WM_NOTIFY 3 mal einzubauen, natürlich mit 3 verschiedenen Namen und
    hab die auch registriert und bei jedem der 3 Notifies jeweils ein anderes ListView eingebaut, aber auch das war erfolglos... 8|

    Wie muss diese Funktion umgeschrieben werden, damit, egal in welchem ListView ich grad geklickt habe, ich den Inhalt der 1. Spalte zum Weiterverarbeiten bekomme?


    Grüße vom Lottich

  • Wie Array richtig befüllen?

    • Lottich
    • 15. Februar 2013 um 10:33

    Hallo ihr fleissigen Helfer,

    dies ist eine Frage an unsere Array-Kings.

    Folgende Situation:

    Auszug aus einem INI-File
    Code
    [Gruppennummern]
    Gruppe 1 =7337,7338
    Gruppe 2 =4156,4157,4158
    Gruppe 3 =3566,3567,3568
    Auszug aus dem Scriptcode
    [autoit]

    $infos = IniReadSection($ini,"Gruppennummern")
    For $i = 1 To $info1[0][0]
    $info2 = StringSplit($info1[$i][1], ",")
    If $i = 1 Then Global $anzahl_gruppe_1 = $info2[0]
    If $i = 2 Then Global $anzahl_gruppe_2 = $info2[0]
    If $i = 3 Then Global $anzahl_gruppe_3 = $info2[0]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    Global $nummern_gruppe_1[$anzahl_gruppe_1] = [7337,7338] ; Diese Arrays sollen mit den
    Global $nummern_gruppe_2[$anzahl_gruppe_2] = [4156,4157,4158] ; Daten aus dem INI-File so befüllt werden,
    Global $nummern_gruppe_3[$anzahl_gruppe_3] = [3566,3567,3568] ; dass die Arrays genau so funktionieren wie bisher.

    [/autoit]


    Die letzten 3 Zeilen des Scriptcodes muss ich aktuell häufiger verändern (Anzahl und Inhalt nach dem "=" Zeichen) und
    es nervt langsam gewaltig, dass ich dazu immer wieder in den Quellcode rein muss, das dann erst suchen, ändern und
    neu kompilieren muss.
    Bsp:

    [autoit]

    ;heute sieht solch ein Array so aus:
    Global $nummern_gruppe_1[$anzahl_gruppe_1] = [7337,7338]

    [/autoit][autoit][/autoit][autoit]

    ;morgen jedoch kann es schon wieder SO aussehen:
    Global $nummern_gruppe_1[$anzahl_gruppe_1] = [7337,7338,7339,7340]

    [/autoit]


    Wie kann ich das so umsetzen, dass diese Arrays korrekt mit demn Daten aus der INI befüllt werden? ?(

    MfG Lottich

    PS: Ich hoffe, dass ich mich nicht schon wieder zum Ei mache, weil die Lösung so simpel ist, ich aber
    zu blöde bin diese zu sehen. :S

  • Einfache Frage

    • Lottich
    • 3. Februar 2013 um 21:05

    hallo derBrot

    Die Mehrzahl von Virus lautet: Viren (hat nix mit 4 zu tun, hast du sicher schon bemerkt, wollt dich nur nochmal dran erinnern ;) )

  • Ein Autoit-Bug?

    • Lottich
    • 1. Februar 2013 um 01:43
    Zitat von loady

    nein, ich habe auf meinem pc keine aktive firewall


    Ich kann sowas nicht verstehen. Dass es immer wieder leute gibt, die ohne Feuerwand ins WWW gehen. 8|
    Persönlich kann ich das eigentlich gar nicht glauben, da Windows ja von hause aus eine Firewall nutzt. Deshalb bin ich mir fast schon sicher,
    dass es sich hier um verarsche oder absichtlicher Lüge handelt.

  • Ein Autoit-Bug?

    • Lottich
    • 30. Januar 2013 um 18:06

    Hi, vielleicht ist es bereits zu spät bzw mittlerweile unnötig, aber ich hatte mir vor längerer Zeit auch mal genau soetwas geschrieben.

    @loady: Kannst es für dich nutzen/modifizieren wenn du willst.

    Offlinelogger by Lottich
    [autoit]

    #include "Date.au3"
    #include "File.au3"

    [/autoit] [autoit][/autoit] [autoit]

    Global $ping_1 = "www.google.de"
    Global $ping_2 = "www.ifa-clan.de"
    Global $ping_3 = "www.autoit.de"
    Global $ping_4 = "www.web.de"
    Global $ping_5 = "www.gmx.de"
    Global $basis = @ScriptDir & "\Offlinelogs\"
    Global $pfad = @ScriptDir & "\Offlinelogs\" & _NowDate() & ".log"
    Global $pfad2 = @ScriptDir & "\Offlinelogs\_Auswertung.log"
    Global $Hour, $Mins, $Secs, $liste, $ist, $ist1, $ist2

    [/autoit] [autoit][/autoit] [autoit]

    Func starte_protokoll()
    If Not Ping($ping_1,500) Then ; Wenn das anpingen dieser Webseiten nicht werfolgreich ist,
    If Not Ping($ping_2,500) Then ; wird der Timer initialisiert, denn es ist höchst wahrscheinlich,
    If Not Ping($ping_3,500) Then ; dass die Internetverbindung aus irgend einem Grund nicht vorhanden ist.
    If Not Ping($ping_4,500) Then
    If Not Ping($ping_5,500) Then
    $pfad = @ScriptDir & "\Offlinelogs\" & _NowDate() & ".log"
    $timer = TimerInit()
    $startzeit = _NowTime(5) ; Zeitpunkt der Initialisierung des Timers für den korrekten Logeintrag speichern.
    If Not FileExists($pfad) Then
    $neu = FileOpen($pfad,1) ; Hier wird das Grundgerüst des Logfiles erstellt, falls nicht vorhanden.
    FileWrite($neu,"[registrierte Ausfälle]" &@CRLF& "Anzahl" &@TAB&@TAB&@TAB& "=" & @TAB & "0" &@CRLF& "Zeit Total" &@TAB&@TAB& "=" &@TAB& "0" &@CRLF&@CRLF& _
    "[gesammelte Ticks]" &@CRLF& "Anzahl" &@TAB&@TAB&@TAB& "=" &@TAB& "0" &@CRLF&@CRLF& "[detailierte Liste]")
    FileClose($neu)
    EndIf
    If Not FileExists($pfad2) Then
    $neu = FileOpen($pfad2,1) ; Hier wird das Grundgerüst der Zusammenfassung aller betroffenen Tage erstellt, falls nicht vorhanden.
    FileWrite($neu,"[Zusammenfassung]" &@CRLF& "Anzahl betroffener Tage" &@TAB& "=" &@TAB& "0" &@CRLF& "Anzahl der Ausfälle" &@TAB&@TAB& "=" &@TAB& "0" & _
    @CRLF& "Zeit Total" &@TAB&@TAB&@TAB&@TAB& "=" &@TAB& "0" &@CRLF&@CRLF&"gesammelte Ticks" &@TAB&@TAB& "=" &@TAB& "0")
    FileClose($neu)
    EndIf
    Do ; Die schleife, die so lange abgearbeitet wird, bis eine der Webseiten wieder erreichbar ist,
    Sleep(250) ; was eine vorhandene Internetverbindung bestätigt.
    Until Ping($ping_1,500) Or Ping($ping_2,500) Or Ping($ping_3,500) Or Ping($ping_4,500) Or Ping($ping_5,500)

    [/autoit] [autoit][/autoit] [autoit]

    $ticks = TimerDiff($timer) ; Beendet den Timer und liest die angesammelten Ticks für die Weiterverwendung aus.
    $ist = IniRead($pfad,"gesammelte Ticks","Anzahl","0") ; Liest die bisher gesammelten Ticks des aktuellen Tages aus und addiert diese
    IniWrite($pfad,"gesammelte Ticks","Anzahl",@TAB & $ticks + $ist) ; mit den neu gesammelten Ticks. Dient der Auflistung der gesammten Ausfallzeit.

    [/autoit] [autoit][/autoit] [autoit]

    _TicksToTime($ticks, $Hour, $Mins, $Secs) ; Konvertiert die aktuellen Ticks in ein vernünftiges Zeitformat und schreibt den Log-Eintrag in den aktuellen Tages-Log.
    $dauer = (@TAB & $Hour & " Stunden, " & $Mins & " Minuten und " & $Secs & " Sekunden keine Verbindung zum Internet" & @TAB & "|- Ticks =" & @TAB & $ticks)
    IniWrite($pfad,"detailierte Liste","ab " & $startzeit & @TAB & @TAB, $dauer)

    [/autoit] [autoit][/autoit] [autoit]

    $ist = IniReadSection($pfad,"detailierte Liste") ; Aktualisiert die Anzahl der
    IniWrite($pfad,"registrierte Ausfälle","Anzahl",@TAB & ($ist[0][0])) ; Ausfälle des aktuellen Tages.

    [/autoit] [autoit][/autoit] [autoit]

    $ist = IniRead($pfad,"gesammelte Ticks","Anzahl","0") ; Liest die gesammten Ticks des aktuellen Tages aus und konvertiert diese zur Niederschrift
    _TicksToTime($ist, $Hour, $Mins, $Secs) ; in ein vernünftiges Zeitformat um die gesammte Ausfallzeit des aktuellen Tages zu bekommen.
    $dauer = (@TAB & $Hour & " Stunden, " & $Mins & " Minuten und " & $Secs & " Sekunden")
    IniWrite($pfad,"registrierte Ausfälle","Zeit Total", $dauer)

    [/autoit] [autoit][/autoit] [autoit]

    $liste = _FileListToArray($basis,"*.*.*.log",1)
    Local $result1 = 0, $result2 = 0
    For $i = 1 to $liste[0]
    $ist1 = IniRead($basis & $liste[$i],"gesammelte Ticks","Anzahl","0") ; Liest alle Ticks der geloggten Tage aus.
    $ist2 = IniRead($basis & $liste[$i],"registrierte Ausfälle","Anzahl","0") ; Liest alle Ausfälle der geloggten Tage aus.
    $result1 = $result1 + $ist1
    $result2 = $result2 + $ist2
    Next
    IniWrite($pfad2,"Zusammenfassung","Anzahl betroffener Tage",@TAB & $liste[0]) ; Aktualisiert die Anzahl pro geloggtem Tag.
    IniWrite($pfad2,"Zusammenfassung","gesammelte Ticks",@TAB & $result1) ; Aktualisiert die Anzahl der Ticks pro geloggtem Tag.
    IniWrite($pfad2,"Zusammenfassung","Anzahl der Ausfälle",@TAB & $result2) ; Aktualisiert die Anzahl der Ausfälle pro geloggtem Tag.

    [/autoit] [autoit][/autoit] [autoit]

    $ist = IniRead($pfad2,"Zusammenfassung","gesammelte Ticks","0") ; Konvertiert die Ticks aller geloggten Ausfälle in ein
    _TicksToTime($ist, $Hour, $Mins, $Secs) ; lesbares Zeitformat zur Niederschrift in der Zusammenfassung.
    $dauer = (@TAB & $Hour & " Stunden, " & $Mins & " Minuten und " & $Secs & " Sekunden")
    IniWrite($pfad2,"Zusammenfassung","Zeit Total", $dauer)
    EndIf
    EndIf
    EndIf
    EndIf
    EndIf
    EndFunc

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    starte_protokoll()
    Sleep(2000)
    WEnd

    [/autoit]


    Damit wird nur dann ein Logfile erstellt, wenn keine der 5 IP-Adressen/Websites nicht erreicht werden können. Dann kann man ja davon ausgehen, dass keine Verbindung zum Internet besteht.
    Das Logfile ist übersichtlich und trägt im Namen das Datum als das Internet nicht zur Verfügung stand. Desweiteren wird auch eine Zusammenfassung erstellt, inder die gesammte Ausfallzeit protokolliert wird.

    Grüsse, Lottich

  • Ich scheitere an Stringauswertung /-ausgabe

    • Lottich
    • 21. Januar 2013 um 22:57

    Hey autoBert

    Das ist eine recht gute Umsetzung! 8)

    Zu dem Problem mit der Darstellung des Servernamens:

    Ich hab mir nochmal die korrekten Rückgaben der Gameserver geholt und in eine Datei schreiben lassen. Dabei fiel mir auf, dass am Ende, also da, wo die Namen der Gameserver eingetragen sind,
    noch ein zusätzliches Zeichen steht. nämlich dieses:

    Code


    Natürlich lässt sich das nicht darstellen :( Es ist dieses NUL (weisse Schrift und schwarzer Hintergrund), du kennst das vielleicht.
    Kann das die Ursache sein?

    Edit:
    Ja, es ist die Ursache!
    habe es dank dem Tip von Andy via Shoutbox lösen können. Hab die Zeile

    [autoit]

    $aRet[2] = StringRegExpReplace($aRaw[$i + 1], "\^\d{1}", "")

    [/autoit]

    mit StringReplace() erweitert. Sieht nun so aus:

    [autoit]

    $aRet[2] = StringReplace(StringRegExpReplace($aRaw[$i + 1], "\^\d{1}", ""),chr(0),"")

    [/autoit]


    Damit wird der Servername und alles andere von meinem Server korrekt dargestellt. Ich hab dein Script auch leicht verändert:

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include "Array.au3"
    #include "GUIConstantsEx.au3"

    [/autoit] [autoit][/autoit] [autoit][/autoit] [autoit]

    Global $aIPs[2][2]
    $aIPs[0][0] = "178.63.84.143"
    $aIPs[0][1] = "28963"
    $aIPs[1][0] = "178.254.20.92"
    $aIPs[1][1] = "28960"

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("Infos", 650, 175, 100, 200, -1)
    Global $idLV_Server = GUICtrlCreateListView("IP/Port |Servername |Gametype|Hardcore|Spieler|Map|Serverversion", 0, 0, 650, 175)
    GUISetState(@SW_SHOW)
    UDPStartup()
    For $i = 0 To UBound($aIPs) - 1
    $aInfo = _GetServerInfo($aIPs[$i][0], $aIPs[$i][1], 10000) ;TimeOut evtl. anpassen
    $sItem = $aInfo[0] & "/" & $aInfo[1] & "|" & $aInfo[2] & "|" & $aInfo[5] & "|" & $aInfo[7] & "|" & $aInfo[8] & " von " & $aInfo[9] & "|" & $aInfo[6] & "|" & $aInfo[3] & " v" & $aInfo[4]
    GUICtrlCreateListViewItem($sItem, $idLV_Server)
    ;~ _ArrayDisplay($aInfo)
    Next
    UDPShutdown()

    [/autoit] [autoit][/autoit] [autoit]

    ;~ _ArrayDisplay($aInfo)

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetServerInfo($IP, $PORT, $iTimeOut)
    Local $aRaw, $iStart = TimerInit()
    Local $aRet[10]
    #cs
    0 = IP
    1 = Port
    2 = Servername
    3 = Gamename
    4 = (Server)shortversion
    5 = Gametype
    6 = Map
    7 = Hardcore
    8 = Spieler derzeit
    9 = Spieler max
    #ce
    $aRet[0] = $IP
    $aRet[1] = $PORT
    $aRet[2] = "antwortet nicht"

    [/autoit] [autoit][/autoit] [autoit]

    $hSOCKET = UDPOpen($IP, $PORT)
    UDPSend($hSOCKET, "ÿÿÿÿ getinfo")
    Do
    $sRECV = UDPRecv($hSOCKET, 2048)
    Until $sRECV <> "" Or TimerDiff($iStart) > $iTimeOut
    UDPCloseSocket($hSOCKET)
    If $sRECV <> "" Then
    $aRaw = StringSplit(BinaryToString($sRECV), "\")
    ;~ _ArrayDisplay($aRaw)
    For $i = 2 To $aRaw[0] - 1 Step 2
    ConsoleWrite($aRaw[$i] & @TAB & "=" & @TAB & $aRaw[$i + 1] & @CRLF)
    Switch $aRaw[$i]
    Case "hostname"
    $aRet[2] = StringReplace(StringRegExpReplace($aRaw[$i + 1], "\^\d{1}", ""),chr(0),"") ;hier konnte ich die Namensdarstellung korrigieren
    Case "gamename"
    $aRet[3] = StringStripWS($aRaw[$i + 1], 7)
    Case "shortversion"
    $aRet[4] = StringStripWS($aRaw[$i + 1], 7)
    Case "gametype"
    $aRet[5] = _GetGameTyp(StringStripWS($aRaw[$i + 1], 7))
    Case "mapname"
    $aRet[6] = _GetMapName(StringStripWS($aRaw[$i + 1], 7))
    Case "hc"
    $aRet[7] = _GetHardCore(StringStripWS($aRaw[$i + 1], 7))
    Case "clients"
    $aRet[8] = StringStripWS($aRaw[$i + 1], 7)
    Case "sv_maxclients"
    $aRet[9] = StringStripWS($aRaw[$i + 1], 7)
    EndSwitch
    Next
    EndIf
    Return $aRet
    EndFunc ;==>_GetServerInfo

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetMapName($sMap)
    Local $sRet = $sMap
    Switch $sMap
    Case "mp_afghan"
    $sRet = "Afghan"
    Case "mp_boneyard"
    $sRet = "Scrapyard"
    Case "mp_brecourt"
    $sRet = "Wasteland"
    Case "mp_derail"
    $sRet = "Derail"
    Case "mp_estate"
    $sRet = "Estate"
    Case "mp_favela"
    $sRet = "Favela"
    Case "mp_invasion"
    $sRet = "Invasion"
    Case "mp_nightshift"
    $sRet = "Skidrow"
    Case "mp_quarry"
    $sRet = "Quarry"
    Case "mp_rundown"
    $sRet = "Rundown"
    Case "mp_subbase"
    $sRet = "Subbase"
    Case "mp_terminal"
    $sRet = "Terminal"
    Case "mp_underpass"
    $sRet = "Underpass"
    Case "mp_abandon"
    $sRet = "? Abandon"
    Case "mp_compact"
    $sRet = "? Compact"
    Case "mp_complex"
    $sRet = "? Complex"
    Case "mp_crash"
    $sRet = "Crash"
    Case "mp_fuel2"
    $sRet = "Fuel"
    Case "mp_overgrown"
    $sRet = "Overgrown"
    Case "mp_storm"
    $sRet = "? Storm"
    Case "mp_strike"
    $sRet = "Strike"
    Case "mp_trailerpark"
    $sRet = "Trailer Park"
    Case "mp_vacant"
    $sRet = "Vacant"
    Case "mp_highrise"
    $sRet = "Highrise"
    ;Case Else
    ; $sRet = $sARRAY[17]
    EndSwitch
    Return $sRet
    EndFunc ;==>_GetMapName

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetGameTyp($sGT)
    Local $sRet = $sGT
    Switch $sGT
    Case "ctf"
    $sRet = "Capture The Flag"
    Case "dd"
    $sRet = "Sprengkommando"
    Case "dom"
    $sRet = "Herrschaft"
    Case "sd"
    $sRet = "Suchen Und Zerstören"
    Case "war"
    $sRet = "Team Deathmatch"
    Case "dm"
    $sRet = "Frei Für Alle"
    Case "sab"
    $sRet = "Sabotage"
    Case "koth"
    $sRet = "Hauptquartier"
    Case "gtnw"
    $sRet = "Thermonuklearer Krieg"
    Case "oitc"
    $sRet = "One In The Chamber"
    Case "oneflag"
    $sRet = "Eine Flagge"
    Case "arena"
    $sRet = "Arena"
    Case "gg"
    $sRet = "GunGame"
    Case "ss"
    $sRet = "Sharpshooter"
    EndSwitch
    ConsoleWrite($sGT & "==> " & $sRet & @CRLF)
    Return $sRet
    EndFunc ;==>_GetGameTyp

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetHardCore($sHC)
    Local $sRet
    If $sHC = "1" Then
    $sRet = "ja"
    Else
    $sRet = "nein"
    EndIf
    Return $sRet
    EndFunc ;==>_GetHardCore

    [/autoit]


    Aber natürlich gibt es wieder ein "aber"....
    Der ISnipe-Server hat einen Servernamen, der alles wieder verhunzt :( Der hat in seinem Namen das "Array-Trennzeichen" | stehen ..... das ist doch Knete :(:(:(

    Edit 2: Yau, ich habs :D
    Einfach, nachdem ich die Antwort/den zu analysierenden String vom Server bekommen habe, wandle ich den ja von binär in was lesbares. Und bevor ich also den String splitte und
    der so zum Array wird, tausche ich das "|" gegen "ÿÿÿÿÿÿÿÿ" aus. Danach, bei der Namensauswertung mach ich das wieder rückgängig. Sieht dann so aus:

    [autoit]

    ;....
    Do
    $sRECV = UDPRecv($hSOCKET, 2048)
    Until $sRECV <> "" Or TimerDiff($iStart) > $iTimeOut
    UDPCloseSocket($hSOCKET)
    If $sRECV <> "" Then
    $aRaw = StringSplit(StringReplace(BinaryToString($sRECV),"|","ÿÿÿÿÿÿÿÿ"), "\") ; hier wird das Zeichen "|" ausgetauscht
    For $i = 2 To $aRaw[0] - 1 Step 2
    Switch $aRaw[$i]
    Case "hostname"
    $aRet[2] = StringReplace(StringReplace(StringRegExpReplace($aRaw[$i + 1], "\^\d{1}", ""),chr(0),""),"ÿÿÿÿÿÿÿÿ"," ") ; hier wird das Zeichen "|" wieder zurückgegeben
    ;....

    [/autoit]


    Somit ist die Stringanalyse und -ausgabe erfolgreich durchgeführt. :D
    Danke nochmals autoBert für diesen Code, ich denke, den werde ich so verwenden, sieht gut aus :thumbup:
    Jetzt muss ich das nur noch in meinem Serverjoiner unterbringen.

    Da mein Problem nun erfolgreich gelöst wurde ist dieser Thread gelöst.

    Besten Dank an meine beiden Helfer (auch wenns nicht mehr ein 2D-Array ist :rolleyes: !

    Lottich

  • Ich scheitere an Stringauswertung /-ausgabe

    • Lottich
    • 21. Januar 2013 um 00:30

    mit dem doppelten Befüllen ist mir schon klar, ich wollt erstmal überhaupt was dargestellt bekommen, deshalb hab ich da noch nicht angesetzt.

    Raupi : Das Problem ist die Darstellung in der GUI wenn ich von den Servern Informationen kriege, wo die jeweiligen Arrays dann unterschiedliche Indexe haben.
    ich füge 2 Beispiele an:
    so solls aussehen und so nicht
    [Blockierte Grafik: http://www.ifa-clan.de/files/so_solls_sein.PNG][Blockierte Grafik: http://www.ifa-clan.de/files/so_solls_nicht_sein.PNG]

    Edit: Die Screenshots werden leider nicht angezeigt.

    Edit 2: Danke Chess für den Tip mit Ubound.
    jetzt ist es zwar noch immer nicht so, wie ich es gern hätte, aber damit kann man schon was anfangen:

    so funktioniert das Umwandeln halbwegs
    [autoit]

    ;UDPStartup()
    ;$hSOCKET = UDPOpen($IP, $PORT)
    ;UDPSend($hSOCKET, "ÿÿÿÿ getinfo")
    ;Do
    ; $sRECV = UDPRecv($hSOCKET, 2048)
    ;Until $sRECV <> ""
    ;UDPCloseSocket($hSOCKET)
    ;UDPShutdown()

    [/autoit] [autoit][/autoit] [autoit]

    $sRECV = "ÿÿÿÿinfoResponse" & @CRLF & "\hc\1\shortversion\3.0-118\pure\1\gametype\ctf\sv_maxclients\18\sv_privateClients\0\clients\0\mapname\mp_derail\protocol\61586\gamename\IW4\hostname\^0zzz____[^2IFA^0] ^3#1 ^1hardcore" ; damit gehts
    ;$sRECV = "ÿÿÿÿinfoResponse" & @CRLF & "\hc\0\shortversion\3.0-118\fs_game\mods/isnipesnd\pure\1\gametype\sd\sv_maxclients\18\sv_privateClients\0\clients\0\mapname\mp_boneyard\protocol\61586\gamename\IW4\hostname\nGu ^0| ^7i^4S^7nipe ^4SnD^7" ; damit gehts nicht

    [/autoit] [autoit][/autoit] [autoit]

    $sARRAY = StringSplit($sRECV, "\")

    [/autoit] [autoit][/autoit] [autoit]

    Local $a2[2][$sARRAY[0]+1]
    For $i = 0 To $sARRAY[0] Step 2
    $a2[0][$i] = $sARRAY[$i]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 0 To $sARRAY[0] Step 2
    $a2[1][$i] = $sARRAY[$i + 1]
    Next
    _ArrayDisplay($a2)

    [/autoit]


    Ich muss wohl über die Brücke mit Step 2 gehen damit $a2[0][2] und $a2[1][2] die zusammen passenden Werte beinhalten. Jetzt allerdings, wegen Step 2, sind in den letzten Klammern alle ungeraden Zahlen ohne Wert, aber dass ist wohl nur was "kosmetisches".

    Als nächstes muss ich es hinbekommen, dass ich die Arrays generell richtig platziere, egal welchen Wert der Index hat. Aber das mach ich morgen.

  • Ich scheitere an Stringauswertung /-ausgabe

    • Lottich
    • 20. Januar 2013 um 23:59

    Hey all

    Mein Problem:
    Ich soll in meinem Serverjoiner einbauen, dass man sich die aktuellen Infos der Gameserver anzeigen lassen kann (welche Map grad läuft und wieviele Spieler drauf sind usw.).
    Und bevor ich das direkt im eigentlichen Programmcode reinpacke will ich das zuerst in nem Extrascript korrekt zum Laufen kriegen.

    zunächst das Script
    [autoit]


    #include "Array.au3"
    #include "GUIConstantsEx.au3"

    [/autoit] [autoit][/autoit] [autoit]

    $IP = "178.63.84.143" ; hierfür klappt es
    $PORT = "28963"
    ;$IP = "178.254.20.92" ; hierfür klappt es nicht
    ;$PORT = "28960"

    [/autoit] [autoit][/autoit] [autoit]

    UDPStartup()
    $hSOCKET = UDPOpen($IP, $PORT)
    UDPSend($hSOCKET, "ÿÿÿÿ getinfo")
    Do
    $sRECV = UDPRecv($hSOCKET, 2048)
    Until $sRECV <> ""
    UDPCloseSocket($hSOCKET)
    UDPShutdown()

    [/autoit] [autoit][/autoit] [autoit]

    $sARRAY = StringSplit(BinaryToString($sRECV), "\")

    [/autoit] [autoit][/autoit] [autoit]

    #region String analysieren
    Dim $data1, $data2, $data3, $data4, $data5, $data6

    [/autoit] [autoit][/autoit] [autoit]

    $data1 = StringRegExpReplace($sARRAY[23], "\^\d{1}", "")
    Switch $sARRAY[9]
    Case "ctf"
    $data2 = "Capture The Flag"
    Case "dd"
    $data2 = "Sprengkommando"
    Case "dom"
    $data2 = "Herrschaft"
    Case "sd"
    $data2 = "Suchen Und Zerstören"
    Case "war"
    $data2 = "Team Deathmatch"
    Case "dm"
    $data2 = "Frei Für Alle"
    Case "sab"
    $data2 = "Sabotage"
    Case "koth"
    $data2 = "Hauptquartier"
    Case "gtnw"
    $data2 = "Thermonuklearer Krieg"
    Case "oitc"
    $data2 = "One In The Chamber"
    Case "oneflag"
    $data2 = "Eine Flagge"
    Case "arena"
    $data2 = "Arena"
    Case "gg"
    $data2 = "GunGame"
    Case "ss"
    $data2 = "Sharpshooter"
    EndSwitch
    If $sARRAY[3] = "1" Then
    $data3 = "ja"
    Else
    $data3 = "nein"
    EndIf
    $data4 = $sARRAY[15] & " von " & $sARRAY[11]
    Switch $sARRAY[17]
    Case "mp_afghan"
    $data5 = "Afghan"
    Case "mp_boneyard"
    $data5 = "Scrapyard"
    Case "mp_brecourt"
    $data5 = "Wasteland"
    Case "mp_derail"
    $data5 = "Derail"
    Case "mp_estate"
    $data5 = "Estate"
    Case "mp_favela"
    $data5 = "Favela"
    Case "mp_invasion"
    $data5 = "Invasion"
    Case "mp_nightshift"
    $data5 = "Skidrow"
    Case "mp_quarry"
    $data5 = "Quarry"
    Case "mp_rundown"
    $data5 = "Rundown"
    Case "mp_subbase"
    $data5 = "Subbase"
    Case "mp_terminal"
    $data5 = "Terminal"
    Case "mp_underpass"
    $data5 = "Underpass"
    Case "mp_abandon"
    $data5 = "? Abandon"
    Case "mp_compact"
    $data5 = "? Compact"
    Case "mp_complex"
    $data5 = "? Complex"
    Case "mp_crash"
    $data5 = "Crash"
    Case "mp_fuel2"
    $data5 = "Fuel"
    Case "mp_overgrown"
    $data5 = "Overgrown"
    Case "mp_storm"
    $data5 = "? Storm"
    Case "mp_strike"
    $data5 = "Strike"
    Case "mp_trailerpark"
    $data5 = "Trailer Park"
    Case "mp_vacant"
    $data5 = "Vacant"
    Case "mp_highrise"
    $data5 = "Highrise"
    Case Else
    $data5 = $sARRAY[17]
    EndSwitch
    $data6 = $sARRAY[21] & " v" & $sARRAY[5]
    #endregion String analysieren

    [/autoit] [autoit][/autoit] [autoit]

    Dim $hGUI = GUICreate("Infos", 230, 160, 100, 200, -1)
    Dim $listview = GUICtrlCreateListView(" |Wert", 0, 0, 230, 170)
    Dim $item1a = GUICtrlCreateListViewItem("Servername" & "|" & $data1, $listview)
    Dim $item2a = GUICtrlCreateListViewItem("Gametype" & "|" & $data2, $listview)
    Dim $item3a = GUICtrlCreateListViewItem("Hardcore" & "|" & $data3, $listview)
    Dim $item4a = GUICtrlCreateListViewItem("Spieler" & "|" & $data4, $listview)
    Dim $item5a = GUICtrlCreateListViewItem("Map" & "|" & $data5, $listview)
    Dim $item6a = GUICtrlCreateListViewItem("Serverversion" & "|" & $data6, $listview)

    [/autoit] [autoit][/autoit] [autoit]

    GUISetState(@SW_SHOW)
    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    [/autoit]


    Was ich in Zeile 13 vom Server zurückbekomme muss ich erst in einen String umwandeln. Das sieht dann anschliessend so aus:

    Code
    ÿÿÿÿinfoResponse
    \hc\1\shortversion\3.0-118\pure\1\gametype\ctf\sv_maxclients\18\sv_privateClients\0\clients\0\mapname\mp_derail\protocol\61586\gamename\IW4\hostname\^0zzz____[^2IFA^0] ^3#1 ^1hardcore


    Nachdem ich dann diese Antwort mit StringSplit() in ein 1D Array umgewandelt hab ist der Index des Arrays klar. Und nach diesem Index ist die GUI aufgebaut.
    Bedeutet: bei Servername lass ich mir $sARRAY[23] anzeigen.

    ABER: Wenn ich damit Infos eines anderen Servers hole. wo der Index anders ist, weil irgendwo im String ein zusätzlicher "Eintrag" vorhanden ist, dann stimmt ja der Index nicht mehr und $sARRAY kann
    etwas vollkommen anderes sein. Darum dachte ich mir, wenn ich das 1D-Array in ein 2D umwandle, dann kann ich doch irgendwie herausfinden, in welchem Array der Text "sv_hostname" steckt und somit
    weiss ich dann auch welches Array ich nehmen muss um mir in der GUI bei Servername auch das richtige anzuzeigen.

    Doch soweit bin ich noch nicht, denn ich schaff es nicht, dass Array umzuschreiben.

    so versuch ich das 1D-Array umzuwandeln


    Mit der Rückgabe gehts nicht, weil hier der Array-Index größer ist und so die Werte nicht mehr stimmen

    Code
    ÿÿÿÿinfoResponse
    \hc\0\shortversion\3.0-118\fs_game\mods/isnipesnd\pure\1\gametype\sd\sv_maxclients\18\sv_privateClients\0\clients\0\mapname\mp_boneyard\protocol\61586\gamename\IW4\hostname\nGu ^0| ^7i^4S^7nipe ^4SnD^7


    mit dieser Rückgabe gehts

    Code
    ÿÿÿÿinfoResponse
    \hc\1\shortversion\3.0-118\pure\1\gametype\ctf\sv_maxclients\18\sv_privateClients\0\clients\0\mapname\mp_derail\protocol\61586\gamename\IW4\hostname\^0zzz____[^2IFA^0] ^3#1 ^1hardcore
    [autoit]

    ;UDPStartup()
    ;$hSOCKET = UDPOpen($IP, $PORT)
    ;UDPSend($hSOCKET, "ÿÿÿÿ getinfo")
    ;Do
    ; $sRECV = UDPRecv($hSOCKET, 2048)
    ;Until $sRECV <> ""
    ;UDPCloseSocket($hSOCKET)
    ;UDPShutdown()

    [/autoit] [autoit][/autoit] [autoit]

    $sRECV = "ÿÿÿÿinfoResponse" & @CRLF & "\hc\1\shortversion\3.0-118\pure\1\gametype\ctf\sv_maxclients\18\sv_privateClients\0\clients\0\mapname\mp_derail\protocol\61586\gamename\IW4\hostname\^0zzz____[^2IFA^0] ^3#1 ^1hardcore" ; damit gehts
    ;$sRECV = "ÿÿÿÿinfoResponse" & @CRLF & "\hc\0\shortversion\3.0-118\fs_game\mods/isnipesnd\pure\1\gametype\sd\sv_maxclients\18\sv_privateClients\0\clients\0\mapname\mp_boneyard\protocol\61586\gamename\IW4\hostname\nGu ^0| ^7i^4S^7nipe ^4SnD^7" ; damit gehts nicht

    [/autoit] [autoit][/autoit] [autoit]

    $sARRAY = StringSplit($sRECV, "\")

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($sARRAY)

    [/autoit] [autoit][/autoit] [autoit]

    Local $a2[2][$sARRAY[0]]
    ; Diese For Next-Schleife sieht deshalb so aus, weil ich Sie mehrfach erfolglos umschrieb...
    ; im Endeffekt brauch ich in der 1. Hälfte alle geraden $i´s und in der anderen alle ungeraden $i´s aus dem Array $sARRAY
    ; oder ihr habt vielleicht sogar bessere Umsetzungen :)
    For $i = 0 To UBound($sARRAY[0]) - 1 Step 2
    $a2[0][$i] = $sARRAY[$i] ;// 1. Dimension befüllen
    Next

    [/autoit] [autoit][/autoit] [autoit]

    For $i = 1 To UBound($sARRAY[0]) -1 Step 2
    $a2[1][$i] = $sARRAY[$i]
    Next

    [/autoit] [autoit][/autoit] [autoit]

    _ArrayDisplay($a2); Egal wie ich es schreibe, entweder ist das ArrayDisplay leer, oder ich bekomm die "Standard-Array-Fehlermeldung

    [/autoit]


    Wie bekomm ich das 2D-Array also vernünftig befüllt?


    MfG Lottich

    PS: ich hoffe, dass ich mit dieser Überarbeitung mein Anliegen etwas deutlicher machen konnte.

    Edit: Die For-Next-Schleifen überarbeitet, so wie sie für mich Sinn machen, aber trotzdem nichts anzeigen

    Final-Edit: Hier die komplette Lösung, falls Interesse besteht...

    Spoiler anzeigen
    [autoit]

    #Region ;**** Directives created by AutoIt3Wrapper_GUI ****
    #AutoIt3Wrapper_UseUpx=n
    #EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****
    #include "Array.au3"
    #include "GUIConstantsEx.au3"

    [/autoit] [autoit][/autoit] [autoit]

    Global $aIPs[2][2]
    $aIPs[0][0] = "178.63.84.143"
    $aIPs[0][1] = "28963"
    $aIPs[1][0] = "178.254.20.92"
    $aIPs[1][1] = "28960"

    [/autoit] [autoit][/autoit] [autoit]

    Global $hGUI = GUICreate("Infos", 650, 175, 100, 200, -1)
    Global $idLV_Server = GUICtrlCreateListView("IP/Port |Servername |Gametype|Hardcore|Spieler|Map|Serverversion", 0, 0, 650, 175)
    GUISetState(@SW_SHOW)
    UDPStartup()
    For $i = 0 To UBound($aIPs) - 1
    $aInfo = _GetServerInfo($aIPs[$i][0], $aIPs[$i][1], 10000) ;TimeOut evtl. anpassen
    $sItem = $aInfo[0] & "/" & $aInfo[1] & "|" & $aInfo[2] & "|" & $aInfo[5] & "|" & $aInfo[7] & "|" & $aInfo[8] & " von " & $aInfo[9] & "|" & $aInfo[6] & "|" & $aInfo[3] & " v" & $aInfo[4]
    GUICtrlCreateListViewItem($sItem, $idLV_Server)
    Next
    UDPShutdown()

    [/autoit] [autoit][/autoit] [autoit]

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    Exit
    EndSelect
    WEnd

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetServerInfo($IP, $PORT, $iTimeOut)
    Local $aRaw, $iStart = TimerInit()
    Local $aRet[10]
    #cs
    0 = IP
    1 = Port
    2 = Servername
    3 = Gamename
    4 = (Server)shortversion
    5 = Gametype
    6 = Map
    7 = Hardcore
    8 = Spieler derzeit
    9 = Spieler max
    #ce
    $aRet[0] = $IP
    $aRet[1] = $PORT
    $aRet[2] = "antwortet nicht"

    [/autoit] [autoit][/autoit] [autoit]

    $hSOCKET = UDPOpen($IP, $PORT)
    UDPSend($hSOCKET, "ÿÿÿÿ getinfo")
    Do
    $sRECV = UDPRecv($hSOCKET, 2048)
    Until $sRECV <> "" Or TimerDiff($iStart) > $iTimeOut
    UDPCloseSocket($hSOCKET)
    If $sRECV <> "" Then
    $aRaw = StringSplit(StringReplace(BinaryToString($sRECV),"|","ÿÿÿÿÿÿÿÿ"), "\")
    For $i = 2 To $aRaw[0] - 1 Step 2
    Switch $aRaw[$i]
    Case "hostname"
    $aRet[2] = StringReplace(StringReplace(StringRegExpReplace($aRaw[$i + 1], "\^\d{1}", ""),chr(0),""),"ÿÿÿÿÿÿÿÿ"," ") ;hier konnte ich die Namensdarstellung korrigieren
    Case "gamename"
    $aRet[3] = StringStripWS($aRaw[$i + 1], 7)
    Case "shortversion"
    $aRet[4] = StringStripWS($aRaw[$i + 1], 7)
    Case "gametype"
    $aRet[5] = _GetGameTyp(StringStripWS($aRaw[$i + 1], 7))
    Case "mapname"
    $aRet[6] = _GetMapName(StringStripWS($aRaw[$i + 1], 7))
    Case "hc"
    $aRet[7] = _GetHardCore(StringStripWS($aRaw[$i + 1], 7))
    Case "clients"
    $aRet[8] = StringStripWS($aRaw[$i + 1], 7)
    Case "sv_maxclients"
    $aRet[9] = StringStripWS($aRaw[$i + 1], 7)
    EndSwitch
    Next
    EndIf
    Return $aRet
    EndFunc ;==>_GetServerInfo

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetMapName($sMap)
    Local $sRet = $sMap
    Switch $sMap
    Case "mp_afghan"
    $sRet = "Afghan"
    Case "mp_boneyard"
    $sRet = "Scrapyard"
    Case "mp_brecourt"
    $sRet = "Wasteland"
    Case "mp_derail"
    $sRet = "Derail"
    Case "mp_estate"
    $sRet = "Estate"
    Case "mp_favela"
    $sRet = "Favela"
    Case "mp_invasion"
    $sRet = "Invasion"
    Case "mp_nightshift"
    $sRet = "Skidrow"
    Case "mp_quarry"
    $sRet = "Quarry"
    Case "mp_rundown"
    $sRet = "Rundown"
    Case "mp_subbase"
    $sRet = "Subbase"
    Case "mp_terminal"
    $sRet = "Terminal"
    Case "mp_underpass"
    $sRet = "Underpass"
    Case "mp_abandon"
    $sRet = "? Abandon"
    Case "mp_compact"
    $sRet = "? Compact"
    Case "mp_complex"
    $sRet = "? Complex"
    Case "mp_crash"
    $sRet = "Crash"
    Case "mp_fuel2"
    $sRet = "Fuel"
    Case "mp_overgrown"
    $sRet = "Overgrown"
    Case "mp_storm"
    $sRet = "? Storm"
    Case "mp_strike"
    $sRet = "Strike"
    Case "mp_trailerpark"
    $sRet = "Trailer Park"
    Case "mp_vacant"
    $sRet = "Vacant"
    Case "mp_highrise"
    $sRet = "Highrise"
    ;Case Else
    ; $sRet = $sARRAY[17]
    EndSwitch
    Return $sRet
    EndFunc ;==>_GetMapName

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetGameTyp($sGT)
    Local $sRet = $sGT
    Switch $sGT
    Case "ctf"
    $sRet = "Capture The Flag"
    Case "dd"
    $sRet = "Sprengkommando"
    Case "dom"
    $sRet = "Herrschaft"
    Case "sd"
    $sRet = "Suchen Und Zerstören"
    Case "war"
    $sRet = "Team Deathmatch"
    Case "dm"
    $sRet = "Frei Für Alle"
    Case "sab"
    $sRet = "Sabotage"
    Case "koth"
    $sRet = "Hauptquartier"
    Case "gtnw"
    $sRet = "Thermonuklearer Krieg"
    Case "oitc"
    $sRet = "One In The Chamber"
    Case "oneflag"
    $sRet = "Eine Flagge"
    Case "arena"
    $sRet = "Arena"
    Case "gg"
    $sRet = "GunGame"
    Case "ss"
    $sRet = "Sharpshooter"
    EndSwitch
    ConsoleWrite($sGT & "==> " & $sRet & @CRLF)
    Return $sRet
    EndFunc ;==>_GetGameTyp

    [/autoit] [autoit][/autoit] [autoit]

    Func _GetHardCore($sHC)
    Local $sRet
    If $sHC = "1" Then
    $sRet = "ja"
    Else
    $sRet = "nein"
    EndIf
    Return $sRet
    EndFunc ;==>_GetHardCore

    [/autoit]
  • DVDs werden nicht korrekt bzw. gar nicht eingelesen

    • Lottich
    • 20. Januar 2013 um 15:42

    Ich gehe davon aus, dass es bei mir Probleme mit DoubleLayer-Scheiben gab. Normale hat der ja auch "gefressen"

  • DVDs werden nicht korrekt bzw. gar nicht eingelesen

    • Lottich
    • 20. Januar 2013 um 00:55

    Da kann ich chip nur zustimmen.
    Gleiches problem hatte ich auch vor einiger Zeit, allerdings mit nen normalen DVD-Brenner. Als ich mein OS neu aufsetzen wollte, hat er InstallationsDVD einfach nicht gelesen. Wurde nicht mal im Arbeitsplatz angezeigt.
    Das gleiche galt für die meisten GameDVDs. Als ich mir dann ein neues Laufwerk eingebaut hatte ging alles wieder einwandfrei.

    Musste also am Laufwerk liegen.

  • WARNUNG! Alle Battlefield 3 Spieler: LESEN!

    • Lottich
    • 20. Dezember 2012 um 00:34

    Ich denke, dass UPIA da gar nicht mal so falsch liegt...
    Ich wurde immer ca alle 30 Minuten gekickt weil meine Tastatur Makros unterstützt!!! (Logitech G11)
    Und das ist kein Witz! Der grund des Kicks hieß immer "PB-Disallowed Program/Driver [119005]"

    Hab mir die Mühe gemacht und auf einer anderen Partition Windows neu zu installieren und dann nach und nach alles zu Installieren was ich auf meinem regulären Windows auch installiert hab.
    Der Treiber für meine G11 war eines der ersten Dinge, die ich draufgepackt hatte und als ich danach testete, päääämmmmm, gabs wieder die Kicks...

    Und BugFix :
    In der Regel vermutet man nicht, dass man solchen Ärger mit nem Spiel bekommt, nur weil man normales "Standardzeug" gestartet hat.
    Das stellt man erst fest, wenn man das Spiel bereits gekauft hat.
    Von daher sind Aussagen wie "... selber schuld..." usw nicht wirklich angebracht.

  • Eintrag aus Ereignisanzeige (winServer 2008 R2) auslesen, und gemeldete IP in Firewall blacklisten

    • Lottich
    • 2. Dezember 2012 um 20:48
    Zitat von Lottich

    Es gibt die Möglichkeit, dass ich dieser Ereignis-ID ein Programm/Skript zuweisen kann, dass dann startet, wenn eine erfolglose Anmeldung entdeckt wird.
    Leider ist diese Win-Version eine "Web Edition", inder mir nur 2 Serverrollen zur Verfügung stehen (IIS-Server und DNS-Server), die mir überhaupt nicht bei diesem Problem weiterhelfen.


    Ich habs im Startpost bereits erwähnt xD

    Den von Medics geposteten Link werd ich mir mal näher anschauen.
    Auch überlege ich mir grad, mir wo anders nen Server zu zu legen. Hab schon ein Angebot gefunden mit Win "Data Center". Und preislich nimmt sich das gar nix, dürfte sogar 1€ und 1Cent gutmachen :)
    Aber erstmal testen... Aktuell hab ich nen "richtigen" ROOT, der andere wäre aber was virtuelles. vCores und vRAM....
    Hab damit noch keine Erfahrung wie das unter "Stress" läuft und überhaupt.

    Und Medics hat auch recht, dass ich mich dann gleich selber ausgeschlossen hätte wenn ich RDP deaktiviert hätte.
    Aber aus Erfahrungen lernt man ja, also werde ich mal verschiedene Methoden ausprobieren, wie ich meinen Server managen/händeln kann.

    Lottich :D


    Nachtrag:
    @TheShadow:
    Ich hab mich bereits bei MS durchgekämpft, aber ne Möglichkeit Rollen nachzuinstallieren hab ich nirgends gefunden.

  • Eintrag aus Ereignisanzeige (winServer 2008 R2) auslesen, und gemeldete IP in Firewall blacklisten

    • Lottich
    • 30. November 2012 um 14:12

    Hey Dudes,

    Leider musste ich feststellen, dass irgend ein Wi***** versucht, sich auf meinem Server per RDP einzuloggen. Immer und immer wieder.
    Das konnte ich aus einem Ereignis-Protokoll herauslesen.

    Der gibt ständig irgendwelche nicht vorhandenen Benutzernamen an wie "Admin, Administrator, Admin1, support_30024, bla bla bla"
    Jetzt such ich nach einer Möglichkeit, die IP bei einem gescheiterten Anmeldeversuch zu blockieren.
    Diese gibt ja das Ereignisprotokoll wieder.

    Es gibt die Möglichkeit, dass ich dieser Ereignis-ID ein Programm/Skript zuweisen kann, dass dann startet, wenn eine erfolglose Anmeldung entdeckt wird.
    Leider ist diese Win-Version eine "Web Edition", inder mir nur 2 Serverrollen zur Verfügung stehen (IIS-Server und DNS-Server), die mir überhaupt nicht bei diesem Problem weiterhelfen.

    Was ich brauch ist:
    a) die Möglichkeit mittels AutoIt diese Protokolle ausfindig zu machen und auszulesen und
    b) die registrierte IP in der Firewall zu blacklisten

    Ist das überhaupt machbar? Oder habt ihr andere Möglichkeiten mit der sich eine IP-Sperre einrichten lässt?

    Grüße vom Lottich

  • Active Directory Tools

    • Lottich
    • 16. November 2012 um 15:32

    Auch auf die Gefahr hin, dass ich mich jetzt total lächerlich mache....

    Was ist eigetlich genau unter "Active Directory" zu verstehen? Das klingt interessant, hab aber keine Ahnung wozu ich/man das brauchen kann?!

  • [gelöst] Mittelpunkt einer Fläche im 3D Raum

    • Lottich
    • 6. November 2012 um 15:18

    Das stimmt natürlich auch und ist wesentlich einfacher umzusetzen als mein Vorschlag :)

Spenden

Jeder Euro hilft uns, Euch zu helfen.

Download

AutoIt Tutorial
AutoIt Buch
Onlinehilfe
AutoIt Entwickler
  1. Datenschutzerklärung
  2. Impressum
  3. Shoutbox-Archiv
Community-Software: WoltLab Suite™