Diablo-Launcher

  • Hallo,
    die meißten von euch kennen wohl Blizzards Klassiker Diablo 2.
    Also ich habe Diablo bei mir mehrmals installiert, um es auch mehrfach parallel auszuführen. Das klappt auch alles Prima.

    Nun wollt ich mir einen kleinen Loader schreiben bei dem ich auswählen kann wie oft und in welchem Modus es gestartet werden soll.
    Also ob im normalen Vollbildmodus oder im Fenstermodus.

    Der Parameter "-skiptobnet" sorgt nur dafür das die Introvideos übersprungen werden und "-w" ist für den Fenstermodus.

    Mein Problem:
    Egal was ich auswähle, es wird nie mehr als eine Instanz von Diablo gestartet. Sprich: Es kommt nie zu einem zweiten ShellExecute.

    Hier das Skript:

    Spoiler anzeigen
    [autoit]

    #include <GUIConstants.au3>

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

    #Region ### START Koda GUI section ### Form=C:\Dokumente und Einstellungen\Administrator\Eigene Dateien\Skripts\diablo-starter.kxf
    $Form1 = GUICreate("Diablo-Launcher",425, 90, 193, 115)
    $Radio1 = GUICtrlCreateRadio("1x | ", 25, 30, 40, 17)
    GUICtrlSetState(-1,$GUI_CHECKED)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Radio2 = GUICtrlCreateRadio("2x | ", 65, 30, 40, 17)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Radio3 = GUICtrlCreateRadio("3x | ", 105, 30, 40, 17)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Radio4 = GUICtrlCreateRadio("4x | ", 145, 30, 40, 17)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $Radio5 = GUICtrlCreateRadio("5x", 185, 30, 40, 17)
    GUICtrlSetBkColor(-1, 0xFFFFFF)
    $btn_normal = GUICtrlCreateButton("Normal", 240, 27, 75, 25, 0)
    $btn_window = GUICtrlCreateButton("Window", 328,27, 75, 25, 0)
    GUISetState(@SW_SHOW)

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

    #EndRegion ### END Koda GUI section ###

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

    While 1
    $msg = GUIGetMsg()
    Select
    Case $msg = $GUI_EVENT_CLOSE
    ExitLoop
    Case $msg = $btn_normal
    if $Radio1 And BitAND(GUICtrlRead($Radio1), $GUI_CHECKED) = $GUI_CHECKED Then
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_A\","open")
    ExitLoop
    ElseIf $Radio2 And BitAND(GUICtrlRead($Radio2), $GUI_CHECKED) = $GUI_CHECKED Then
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_A\","open")
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_B\","open")
    ExitLoop
    ElseIf $Radio3 And BitAND(GUICtrlRead($Radio3), $GUI_CHECKED) = $GUI_CHECKED Then
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_A\","open")
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_B\","open")
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_C\","open")
    ExitLoop
    ElseIf $Radio4 And BitAND(GUICtrlRead($Radio4), $GUI_CHECKED) = $GUI_CHECKED Then
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_A\","open")
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_B\","open")
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_C\","open")
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_D\","open")
    ExitLoop
    ElseIf $Radio5 And BitAND(GUICtrlRead($Radio5), $GUI_CHECKED) = $GUI_CHECKED Then
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_A\","open")
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_B\","open")
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_C\","open")
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_D\","open")
    ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_F\","open")
    ExitLoop
    EndIf
    Case $msg = $btn_window
    if $Radio1 And BitAND(GUICtrlRead($Radio1), $GUI_CHECKED) = $GUI_CHECKED Then
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_A\","open")
    ExitLoop
    ElseIf $Radio2 And BitAND(GUICtrlRead($Radio2), $GUI_CHECKED) = $GUI_CHECKED Then
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_A\","open")
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_B\","open")
    ExitLoop
    ElseIf $Radio3 And BitAND(GUICtrlRead($Radio3), $GUI_CHECKED) = $GUI_CHECKED Then
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_A\","open")
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_B\","open")
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_C\","open")
    ExitLoop
    ElseIf $Radio4 And BitAND(GUICtrlRead($Radio4), $GUI_CHECKED) = $GUI_CHECKED Then
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_A\","open")
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_B\","open")
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_C\","open")
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_D\","open")
    ExitLoop
    ElseIf $Radio5 And BitAND(GUICtrlRead($Radio5), $GUI_CHECKED) = $GUI_CHECKED Then
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_A\","open")
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_B\","open")
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_C\","open")
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_D\","open")
    ShellExecute ("game.exe","-w -skiptobnet", "E:\D2installationen\diablo_F\","open")
    ExitLoop
    EndIf
    EndSelect
    Wend

    [/autoit]
  • Kannst du denn überhaupt per Hand Diablo 2 mehrfach starten? Ich kenn es eigentlich nur so, dass man dafür diesen speziellen Launcher braucht.

    Eine Idee hätte ich, dass du einfach mal in den jeweiligen Ordnern deine game.exe umbenennst. Es kann ja sein, dass AutoIt ein Problem damit bekommt eine .exe mehrfach zu starten.

    Was auch geht ist, dass du statt direkt der .exe eine .bat Datei startest und über die du dann Diablo 2 mehrfach startest. Das sollte dann eigentlich problemlos funktionieren.

    Einmal editiert, zuletzt von Sn0opy (28. Juni 2007 um 07:33)

    • Offizieller Beitrag

    Hi! ShellExecute ("game.exe","-skiptobnet", "E:\D2installationen\diablo_F\","open") -> ShellExecute ("E:\D2installationen\diablo_F\game.exe","-skiptobnet -w") Dann sollte es schon eher gehen, denn beim Arbeitsverzeichnis gibt man NICHT das Verzeichnis an, wo die Datei liegt, sondern vorne beim Dateinamen. peethebee

  • So erstmal Danke für die Antworten.

    Also ich hab jetzt alles ausprobiert was ihr mir so gesagt habt leider ohne Erfolg.

    Ich hab jetzt jeder exe einen anderen Namen verpasst.
    game_A.exe bis game_F.exe

    Meine Testbatch sah so aus:

    Code
    @echo off
    E:\D2installationen\diablo_A\game_A.exe -w -skiptobnet
    E:\D2installationen\diablo_B\game_B.exe -w -skiptobnet

    Wenn ich diese starte wird Diablo 1x ausgeführt und im Hintergrund läuft die Batch weiter. Erst wenn ich Diablo dann schließe wird die Batch beendet und Diablo nochmal gestartet.


    Kann das irgendwie am Windowtitle liegen, da der überall gleich ist?

    *Edit: Ich hab eben das ganze mal in C++ umgesetzt und habe dort genau das gleiche Problem. :\

    Einmal editiert, zuletzt von peggel (29. Juni 2007 um 01:45)

    • Offizieller Beitrag

    Hallo,

    hast Du es schon mal mit dem Run-Befehl probiert?

    [autoit]

    Run(@ComSpec & ' /C E:\D2installationen\diablo_A\game_A.exe -w -skiptobnet')
    Run(@ComSpec & ' /C E:\D2installationen\diablo_B\game_B.exe -w -skiptobnet')

    [/autoit]
  • Du wirst mit AutoIT Diablo nicht mehrmals gestartet kriegen weil Blizzard das verbietet ... Höchstens über nen illegalen Loader

  • Es ist möglich Diablo 2 mehrfach zu starte mit einer veränderten DLL in den Ordnern meckert er nicht mehr wenn man es mehrfach startet.

    Diese DLL wird nich von Blizzard abgelehnt oder befürwortet.
    Also ist die Benutzung auf eigene Gefahr.
    Ich benutze die DLL selber und wurde noch nich gebannt.

    Mfg
    monkey

    Monkey - die finale Potenz von göttlich!
    Sloganizer

  • Ja mir ist bekannt das Blizzard nicht sehr erfreut darüber ist.
    Aber Daniel, ich hab doch geschrieben das ich es von Hand ohne Probleme mehrfach starten kann. Die Anleitung davon hab ich sogar von indiablo und die sind normal sehr bedacht darauf Diablo vollkommen legal zu spielen. Aber ob ich jetzt Diablo auf meinem Rechner, Laptop und meinem Bruder seinem Rechner laufen hab oder 3 mal auf meinem Rechner macht ja eigentlich keinen großartigen Unterschied.

    Jetzt probiere ich mal den Tipp von Bernd.

    *Edit:
    Schade funktioniert auch nicht.
    Es gehen zwar 2 kommandozeilen fenster auf aber Diablo wird auch nur einmal gestartet.

    Ich hab jetzt mal versucht den Run und ShellExecute Befehl zu kombinieren:

    [autoit]

    ShellExecute ("E:\D2installationen\diablo_A\game_A.exe","-skiptobnet -w")
    Run(@ComSpec & ' /C E:\D2installationen\diablo_A\game_A.exe -w -skiptobnet')

    ShellExecute ("E:\D2installationen\diablo_B\game_B.exe","-skiptobnet -w")
    Run(@ComSpec & ' /C E:\D2installationen\diablo_B\game_B.exe -w -skiptobnet')

    ShellExecute ("E:\D2installationen\diablo_C\game_C.exe","-skiptobnet -w")
    Run(@ComSpec & ' /C E:\D2installationen\diablo_C\game_C.exe -w -skiptobnet')

    ShellExecute ("E:\D2installationen\diablo_D\game_D.exe","-skiptobnet -w")
    Run(@ComSpec & ' /C E:\D2installationen\diablo_D\game_D.exe -w -skiptobnet')

    [/autoit]


    Wenn ich es so auführe wird Diablo 2x gestartet und zwar immer game_A und zufällig eine der anderen 3.

    Echt seltsam das ganze.

    Einmal editiert, zuletzt von peggel (29. Juni 2007 um 13:38)

  • Dann sag das auch, weil wenn du sagst DU willst nen LOADER schreiben, dann heißt es nicht, dass DU einen FREMDEN LOADER nutzen willst...
    Und Blizzard hat i-wann mal ein Statement zu dieser DLL abgegeben woraus nicht erkennbar ist, dass sie geduldet wird
    -> man KANN dafür gebanned werden

  • Für mich ist das halt ein Loader weil ich damit Diablo bis zum 5 mal gleichzeitig laden will und wenn du dir das Programm mal angeschaut hättest wäre dir das vl. auch aufgefallen.
    Aber das steht doch hier eigentlich garnicht zur Debatte, hilf mir lieber mein Problem aus der Welt zu schaffen. :)

    Das muss ja irgendein übergreifendes Problem sein, da ich in c++ die gleichen Probleme habe. ?(

  • Darf man fragen, wofür du Diablo gleich so oft starten willst? Also es gab Zeiten, da hatte ich es 3 mal offen, das war aber das Maximum und dazu noch eher selten.

  • Zitat

    Original von Sn0opy
    Darf man fragen, wofür du Diablo gleich so oft starten willst? Also es gab Zeiten, da hatte ich es 3 mal offen, das war aber das Maximum und dazu noch eher selten.

    Also zum Mulen, Leute verarschen etc

    Einmal editiert, zuletzt von GrungeRocker (29. Juni 2007 um 15:22)

  • Das mit dem Leute verarschen hat GrungeRocker gesagt. Ist nicht ganz meine Art.
    Also das Limit ist auch 4 wie ich gerade gemerkt hab, danach habe ich Probleme mit der Verbindung.
    Ich will es in erster Linie zum mulen und zum rushen von mehreren chars verwenden.