Game loader mit vb.net 2008 express


yondaime1981

Grünschnabel
Hallo,

ich programmiere einen Gameloader (Spielstarter) für das Spiel Left 4 Dead 2. Ich weiss, dass es welche gibt, aber ich möchte es selbst realisieren.

Er funktioniert auch schon, nur wenn ich mit ihm gleich einen anderen Gamemode öffnen möchte, macht er eben dieses nicht. Er startet immer nur den Gamemode Kampange (Coop).
Eingestellt habe ich aber auch die Modi Versus und Scavange. Sie stehen in einem Dropdownmenü zur Verfügung und sind auch anwählbar aber werden nicht gesetzt oder berücksichtigt.

Der Code um den es geht:

Code:
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim xcode As String
        Dim mode As String
        Dim mode1 As String
        Dim endcode As String


        mode = modebox.SelectedItem

        If mode = "" Then                           'Sicherheitsabfrage wenn modus nicht gewählt
            MsgBox("Bitte einen Modus auswählen!")

        Else
            If mode = "Kampange" Then           'Modusabfrage
                mode1 = " +coop"

            ElseIf mode = "Versus" Then
                mode1 = " +versus"
            Else
                mode1 = " +scavange"

            End If

            xcode = "-console -novid +map c1m4_atrium"

            endcode = (xcode + mode1)


            System.Diagnostics.Process.Start("F:\Program Files\Left 4 Dead 2\left4dead2.exe", endcode)

        End If

        'haltepunkt

    End Sub

    Private Sub EndeBT_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles EndeBT.Click
        Me.Close()

    End Sub

    Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim screen As New Splash1()
        screen.ShowDialog()


    End Sub

    Private Sub modebox_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles modebox.SelectedIndexChanged

        Dim mode = modebox
        Dim maps = mapcontrol

        Dim kampange, versus, scavange As String

        If mode.SelectedItem = kampange Then

            maps.Enabled = True

        ElseIf mode.SelectedItem = versus Then

            maps.Enabled = True

        ElseIf mode.SelectedItem = scavange Then
            maps.Enabled = True
        Else
            maps.Enabled = True



        End If




    End Sub
End Class

Die Maps werden später mit derselben methode eingefügt.

Kann mir vielleicht jemand helfen?

LG Yondaime 1981
 

Afritus

Mitglied
Hallo,

ich denke nicht, dass es an deinem Programm liegt, sondern am Startparameter. Hab eben mal bei Steam alle möglichen Starparameter mit "versus" oder "scavenge" ausprobiert, keiner von diesen scheint zu funktionieren, das Spiel startet weiterhin nur im Kampagne-Modus.
Also denke ich, dass dein Programm einwandfrei funktioniert und nur der Startparameter falsch ist.

MfG
 

yondaime1981

Grünschnabel
Hallo,

ich denke nicht, dass es an deinem Programm liegt, sondern am Startparameter. Hab eben mal bei Steam alle möglichen Starparameter mit "versus" oder "scavenge" ausprobiert, keiner von diesen scheint zu funktionieren, das Spiel startet weiterhin nur im Kampagne-Modus.
Also denke ich, dass dein Programm einwandfrei funktioniert und nur der Startparameter falsch ist.

MfG

Danke für die Mithilfe:)

Ja die gegenproben (habe ich mit nem Label gemacht) waren ok. Es sind alles strings und die Mapauswahl habe ich auch hinzugefügt, das klappt ohne Probleme. Werde verschiedene aufrufe probieren.

Update:

Es klappt ohne Probleme, auch die Modi.

Ich habe eine abfrage in Formload eingebaut. Sie betrifft ob der gamepfad bereits gesetzt wurde. So muss man ihn nur einmal setzen. Also beim Start
kommt per Folderbrowserdialog die auswahl angezeigt, das geht auch alles wunderbar, speichere den Pfad dann als string in einer variablen ab. Funktioniert super, aber nun möchte ich, das der Pfad, wenn er einmal gewählt ist, auch so bleibt, also die werte gespeichert werden. Wie kann ich das machen?


hier der Code
Code:
 Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim screen As New Splash1()
        Dim i As Integer
        Dim gamepfad As String


        screen.ShowDialog()

      

        mapbox1.Visible = False          'Map auswahlfenster deaktivieren
        mapbox2.Visible = False
        mapbox1.Visible = False


        'Ab hier wird festgelegt wo die l4d2.exe liegt
        'OpenFileDialog1.ShowDialog()

        If i = "0" Then


            FolderBrowserDialog1.ShowDialog()
            i = i + 1
            pfad1.Text = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
            gamepfad = pfad1.Text
        Else
            pfad1.Text = gamepfad


        End If


    End Sub


PS: Ich habe einen Menüpunkt eingerichtet, mit dem man das wieder auf "" bzw. i = 0 setzen kann damit der benutzer es neu wählen kann.

Mfg Yondaime 1981
 
Zuletzt bearbeitet:

Afritus

Mitglied
Du willst, dass der Pfad gespeichert wird, selbst nachdem das Programm beendet wurde?
Dann kannst du das zum Beispiel über die Windows-Registry machen. Dort werden Variablen von allen möglichen Programmen gespeichert.

Hier schaust du nach, ob der Eintrag schon existiert. Wenn auf den Eintrag verwiesen wird, ohne dass er existiert, können nämlich Fehler auftreten:
Code:
Private Sub Form2_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
"pfad", Nothing) Is Nothing Then
            My.Computer.Registry.SetValue _
("HKEY_CURRENT_USER\Software\GameLoader", "pfad", "")
        End If

End Sub

So kannst du nun von deinem Eintrag den Pfad auslesen:
Code:
Dim readValue2 As String
            readValue2 = My.Computer.Registry.GetValue _
            ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", Nothing)
            MsgBox(readValue2)

Nehmen wir an, der Pfad ist in der Variable "a" gespeichert. Dann kannst du so deinem Eintrag "pfad" den richtigen Pfad hinzufügen (eventuell a.ToString, ich kann das momentan nicht ausprobieren):
Code:
My.Computer.Registry.SetValue _
("HKEY_CURRENT_USER\Software\GameLoader", "pfad", a)

Zur Erklärung: Mit dem ersten Code prüft du bei Beginn, ob der Registry-Eintrag "pfad" schon existiert. Falls nicht, legst du mit ersten Code einen an und setzt seinen Wert auf "" (also nichts, da ja noch kein Pfad bestimmt wurde). Mit dem zweiten Code kannst du den Wert des Registry-Eintrages "pfad" auslesen. Und mit dem dritten Code kannst du den Wert des Registry-Eintrages "pfad" ändern.
BTW: Um deine erstellten Registry-Einträge zu überprüfen öffne das Startmenü und gib bei "Ausführen" folgendes ein: regedit
Damit kannst du von allen Programmen die Registry-Einträge modifizieren. Aber Vorsicht, lass bei anderen Programmen lieber die Finger davon, kann nämlich zu Fehlern im System führen.
Dein Programm würdest du mit diesem Beispiel unter HKEY_CURRENT_USER/Software/GameLoader finden.

MfG
Markus
 
Zuletzt bearbeitet:

yondaime1981

Grünschnabel
Danke für die Hilfe, leider liest er es wohl nicht richtig aus.

Hier der Code:

Code:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim screen As New Splash1()
        Dim i As Integer
        Dim gamepfad As String


        screen.ShowDialog()

        If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
            "pfad", Nothing) Is Nothing Then
            My.Computer.Registry.SetValue _
            ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", "")
        End If



        mapbox1.Visible = False          'Map auswahlfenster deaktivieren
        mapbox2.Visible = False
        mapbox1.Visible = False


        'Ab hier wird festgelegt wo die l4d2.exe liegt
        'OpenFileDialog1.ShowDialog()
        Dim readValue2 As String

        If readValue2 = My.Computer.Registry.GetValue _
            ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", Nothing) Then
            MsgBox(readValue2)
            pfad1.Text = readValue2

        Else

            FolderBrowserDialog1.ShowDialog()
            i = i + 1
            pfad1.Text = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
            gamepfad = pfad1.Text
            My.Computer.Registry.SetValue _
                ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", gamepfad)


            pfad1.Text = gamepfad


        End If


    End Sub

habe deine Codebeispiele eingefügt.

Danke
Mfg
Yondaime1981
 

Afritus

Mitglied
Wo scheiterts denn? Hast du nachgesehen, ob der Registry-Eintrag erstellt wird?

Vielleicht hilft dir das weiter:
Code:
If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
"pfad", Nothing) Is Not Nothing Then
            pfad1.Text = gamepfad
            
Else

            FolderBrowserDialog1.ShowDialog()
            i = i + 1      ' was meinst du damit?
            gamefpad = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
            My.Computer.Registry.SetValue _
                ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", gamepfad)


            pfad1.Text = gamepfad


End If

MfG
 

yondaime1981

Grünschnabel
Wo scheiterts denn? Hast du nachgesehen, ob der Registry-Eintrag erstellt wird?

Vielleicht hilft dir das weiter:
Code:
If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
"pfad", Nothing) Is Not Nothing Then
            pfad1.Text = gamepfad
            
Else

            FolderBrowserDialog1.ShowDialog()
            i = i + 1      ' was meinst du damit?
            gamefpad = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
            My.Computer.Registry.SetValue _
                ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", gamepfad)


            pfad1.Text = gamepfad


End If

MfG

also habs geändert aber : Not nothing sagt: Der Is-Operator akzeptiert keine operanden vom Typ "Integer" , Die Operanden müssen refferenztypen sein oder Typen die NULL werte zulassen. Was genau möchte er jetzt von mir? Wie kann ich den Code zum laufen bringen?

Code:
  If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
            "pfad", Nothing) Is Not Nothing Then
            pfad1.Text = gamepfad


        Else

            FolderBrowserDialog1.ShowDialog()
            pfad1.Text = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
            gamepfad = pfad1.Text
            My.Computer.Registry.SetValue _
                ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", gamepfad)


            pfad1.Text = gamepfad


        End If

Danke dir für deine Hilfe
 
Zuletzt bearbeitet:

Afritus

Mitglied
Sry, ich hab mich da wohl selbst etwas vertan.

Hier, das sollte funktionieren:
Code:
Dim value As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
           "pfad", Nothing)
        If value = "" Then
            FolderBrowserDialog1.ShowDialog()
            value = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
            My.Computer.Registry.SetValue _
                ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", value)
            pfad1.Text = value
        Else
            pfad1.Text = value
        End If

Sind sogar weniger Zeilen als vorher. Die Aktion prüft, ob der Pfad schon vorhanden ist. Wenn nicht, musst du ihn mit dem FolderBrowser aussuchen. Falls der Wert jedoch schon vorhanden ist, trägt er ihn automatisch in die pfad1-Textbox ein.

MfG
Afritus
 

yondaime1981

Grünschnabel
Hab ich gemacht aber er übernimmt den Eintrag wohl einfach nicht. er setzt nur den angefügten text "left4dead2.exe" in das vorgesehene Texfeld ein.

Der Eintrag ist in der Reg verfügbar, wird im Programm aber nicht aufgerufen, was kann ich machen damit er eben dies tut?

hier nochmal der code unter formload:

Code:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        Dim screen As New Splash1()
        Dim i As Integer
        Dim gamepfad As String


        screen.ShowDialog()

        If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
            "pfad", Nothing) Is Nothing Then
            My.Computer.Registry.SetValue _
            ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", "")
        End If



        mapbox1.Visible = False          'Map auswahlfenster deaktivieren
        mapbox2.Visible = False
        mapbox1.Visible = False


        'Ab hier wird festgelegt wo die l4d2.exe liegt
        'OpenFileDialog1.ShowDialog()
        Dim readValue2 As String

        'If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
        '   "pfad", Nothing) Like Nothing Then


        'FolderBrowserDialog1.ShowDialog()
        ' pfad1.Text = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
        'gamepfad = pfad1.Text
        'My.Computer.Registry.SetValue _
        '   ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", gamepfad)


        ' pfad1.Text = gamepfad
        ' Else

        'gamepfad = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
        '"pfad", Nothing)

        'pfad1.Text = gamepfad


        'End If

        'ab hier dein Code, habe den anderen auskommentiert

        Dim value As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
           "pfad", Nothing)
        If value = "" Then
            FolderBrowserDialog1.ShowDialog()
            value = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
            My.Computer.Registry.SetValue _
                ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", value)
            pfad1.Text = value
        Else
            pfad1.Text = value
        End If



    End Sub

Mfg Yondaime
 

Afritus

Mitglied
Jetzt kannt ich dir leider auch nicht mehr helfen, da derselbe Code bei mir funktioniert^^

Aufgerufen wird der Eintrag durch diesen Code, der ist aber bei dir schon drinnen:
Code:
Dim value As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
           "pfad", Nothing)
pfad1.Text = value

Lösche mal den Ordner "GameLoader" in der Registry unter HKEY_CURRENT_USER/Software/ und führe dann das angehängte Programm aus und schau, obs funktioniert.

MfG
Afritus
 

Anhänge

  • Gameloader - Test.zip
    6,7 KB · Aufrufe: 15

yondaime1981

Grünschnabel
Jetzt kannt ich dir leider auch nicht mehr helfen, da derselbe Code bei mir funktioniert^^

Aufgerufen wird der Eintrag durch diesen Code, der ist aber bei dir schon drinnen:
Code:
Dim value As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
           "pfad", Nothing)
pfad1.Text = value

Lösche mal den Ordner "GameLoader" in der Registry unter HKEY_CURRENT_USER/Software/ und führe dann das angehängte Programm aus und schau, obs funktioniert.

MfG
Afritus

ja das Testprogramm hat funktioniert, also Ich habe den wert in der Reg gelöscht , dann deine test.exe ausgeführt, den pfad gewählt und dann kam ne Msgbox mit dem pfad.

Woran kanns bei mir liegen? Also in meinem loader

mfg Yondaime1981
 

Afritus

Mitglied
Bei meinem Testprogramm habe ich genau diesen Code verwendet (1mal FolderBrowserDialog1, 1mal TextBox1):

Code:
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

        If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
            "pfad", Nothing) Is Nothing Then
            My.Computer.Registry.SetValue _
            ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", "")
        End If



        Dim value As String = My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _
           "pfad", Nothing)
        If value = "" Then
            FolderBrowserDialog1.ShowDialog()
            value = FolderBrowserDialog1.SelectedPath + "\left4dead2.exe"
            My.Computer.Registry.SetValue _
                ("HKEY_CURRENT_USER\Software\GameLoader", "pfad", value)
            TextBox1.Text = value
        Else
            TextBox1.Text = value
        End If

    End Sub

Versuch mal, ob es so klappt.

MfG
Afritus
 

Forum-Statistiken

Themen
272.355
Beiträge
1.558.613
Mitglieder
187.829
Neuestes Mitglied
AlDi31