[Anfänger] Script läuft durch ohne Msgbox auszugeben

  • Hallo,

    ich Spiele mit einem Freund von mir zusammen Minecraft über Hamachi. Nun möchte ich uns ein kleines Script basteln das uns helfen soll über eine gemeinsame Dropbox zu spielen.
    Leider läuft das Script einfach durch ohne eine Ausgabe an Fehlern oder Msgboxen. Weiß Jemand Rat?

    Spoiler anzeigen
    [autoit]


    $result = ""
    $pid = Run(@comspec & " /k HOSTNAME","",@SW_HIDE,6)
    While 1
    $result &= StdOutRead($pid)
    If @error Then ExitLoop
    sleep(10)
    Wend
    $result=StringRegExpReplace($result, "[\w:\\]*>", "") ;PC herrausfinden
    while 1
    Global $Paddy="25.220.53.100" ;Paddy hamachi IP
    Global $Florian="25.136.14.208" ;Florian hamachi ip
    if $result = "Paddy" then ; wenn auf paddy ausgeführt dann
    $onoffcheck = ping ("25.136.14.208") ;Prüfen ob florian online ist
    If $onoffcheck then ;Wenn ja dann:
    Msgbox(0,"Status","Minecraft Server online " &$onoffcheck "ms" " ("&$result")") ;Gibt ort des Servers a
    Else
    Msgbox(0,"Status","Minecraft Server offline wird gestartet" "("&$result")") ;falls florian nicht erreichbar dann:
    EndIf
    ;dropbox locaten, editieren und server starten
    EndIf
    if $result = "Florian-PC" then ;andernfalls. wenn auf florian pc ausgeführt dann:
    $onoffcheck = ping("25.220.53.100") ;Prüfen ob paddy online ist
    If $onoffcheck then ;Wenn ja dann:
    Msgbox(0,"Status","Minecraft Server online " &$onoffcheck "ms" " ("&$result")") ;Gibt ort des Servers an
    Else
    ;dropbox locaten, editieren und server starten
    EndIf
    EndIf
    WEnd

    [/autoit]

    Einmal editiert, zuletzt von Psydark91 (28. November 2013 um 02:34)

  • Hallo,

    zuerst einmal dürften zumindest deine MessageBoxen einen Syntax Error werfen. Die Stringverknüpfung sieht nicht wirklich korrekt aus. Die Globalen Variablen deklariere bitte am Anfang des Skriptes oder zumindest ausserhalb der While-Schleife.

    Und wenn du irgendwo einen Fehler ausgegeben haben möchtest, dann musst du das schon händisch tun. Lass dir also das Ergebnis der relevanten Funktionsaufrufe ($pid, $result ...) in die Konsole schreiben (ConsoleWrite()). In SciTE kannst du dir solche Debug Lines ganz einfach über Alt+D einfügen lassen. Die Schreibmarke muss dafür auf der entsprechenden Zeile stehen. Mit Strg+Alt+Z kannst du die Zeilen dann später wieder auf einen Rutsch entfernen lassen.

  • Danke für die schnelle Antwort!

    Leider bin ich trotzdem nicht viel weiter gekommen, obwohl ich inzwischen herrausgefunden habe wie die Debug Lines funktionieren, (Danke dafür! :) ) weiß ich immer noch nicht wo das Problem liegt. Die Console gibt für $Result den Computernamen wie gewollt aus, ich muss jedoch auch zugeben das ich mir diese Funktion kopiert habe. Für $onoffcheck wird momentan kein Wert gesetzt, ich habe jedoch auch grade niemanden in Hamachi online. Trotzdem kommt die Msgbox für "Status - Server Offline" nicht.

    Wieso sollten die globalen variablen am scriptanfang deklariert werden? Bevor ich in die While-Schleife gehe brauche ich diese doch nicht oder übersehe ich da etwas?

    Das Script hat sich nicht sehr verändert:

    Spoiler anzeigen
    [autoit]

    Global $Paddy="25.220.53.100" ;Paddy hamachi IP
    Global $Florian="25.136.14.208" ;Florian hamachi ip
    $result = ""
    $pid = Run(@comspec & " /k HOSTNAME","",@SW_HIDE,6)
    While 1
    $result &= StdOutRead($pid)
    If @error Then ExitLoop
    sleep(10)
    Wend
    $result=StringRegExpReplace($result, "[\w:\\]*>", "") ;PC herrausfinden
    While 1
    if $result = "Paddy" then ; wenn auf paddy ausgeführt dann
    $onoffcheck = ping ("25.136.14.208") ;Prüfen ob florian online ist
    If $onoffcheck then ;Wenn ja dann:
    Msgbox(0,"Status","Minecraft Server online ," &$onoffcheck &$result) ;Gibt ort des Servers a
    Else
    MsgBox(0, "status" , "Minecraft server offline wird gestartet ," & $Result) ;falls florian nicht erreichbar dann:
    EndIf
    ;dropbox locaten, editieren und server starten
    EndIf
    if $result = "Florian-PC" then ;andernfalls. wenn auf florian pc ausgeführt dann:
    $onoffcheck = ping("25.220.53.100") ;Prüfen ob paddy online ist
    If $onoffcheck then ;Wenn ja dann:
    Msgbox(0,"Status","Minecraft Server online ," &$onoffcheck &$result) ;Gibt ort des Servers a
    Else
    MsgBox(0, "status" , "Minecraft server offline wird gestartet ," & $Result) ;dropbox locaten, editieren und server starten
    EndIf
    EndIf
    WEnd

    [/autoit]
  • Moin!
    Das Ganze etwas kürzer :)

    Spoiler anzeigen
    [autoit]


    Global $sPaddy = "25.220.53.100" ;Paddy hamachi IP
    Global $sFlorian = "25.136.14.208" ;Florian hamachi ip
    Global $sCompName = @ComputerName

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

    $sResult = StringRegExpReplace($sCompName, "[\w:\\]*>", "") ;PC herrausfinden

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

    While 1
    Switch $sResult
    Case "Paddy" ; wenn auf paddy ausgeführt dann
    If Ping($sFlorian) Then ;Prüfen ob florian online ist
    MsgBox(0, "Status", "Minecraft Server online ," & $sResult) ;Gibt ort des Servers a
    Else
    MsgBox(0, "status", "Minecraft server offline wird gestartet ," & $sResult) ;falls florian nicht erreichbar dann:
    EndIf
    Case "Florian-PC" ;awenn auf florian pc ausgeführt dann:
    If Ping($sPaddy) Then ;Prüfen ob paddy online ist
    MsgBox(0, "Status", "Minecraft Server online ," & $sResult) ;Gibt ort des Servers a
    Else
    MsgBox(0, "status", "Minecraft server offline wird gestartet ," & $sResult) ;dropbox locaten, editieren und server starten
    EndIf
    EndSwitch
    WEnd

    [/autoit]


    Und prüf nochmal das Ergebnis deines Patterns in Zeile 5. Ich versteh seine Notwendigkeit nicht.

    Globale Variablen sollen, wie der Name impliziert, im gesammten Skript zur Verfügung stehen. Also macht es SInn sie so früh wie möglich zu deklarieren. Ausserdem schafft es Übersicht. Innerhalb der While-Schleife ist die Deklaration aber sowas von fehl am Platze. Denn dort wird sie bei jedem Scheifendurchlauf immer wieder und wieder und wieder und ..... durchgeführt.