ERLEDIGT
JA
JA
ANTWORTEN
13
13
ZUGRIFFE
829
829
EMPFEHLEN
-
07.02.10 22:00 #1
- Registriert seit
- Feb 2010
- Beiträge
- 7
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79
[I]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 [COLOR="Blue"] 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)[/COLOR] [COLOR="Blue"]System.Diagnostics.Process.Start("F:\Program Files\Left 4 Dead 2\left4dead2.exe", endcode)[/COLOR] End If 'haltepunkt End Sub[/I] 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
-
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
-
08.02.10 10:40 #3
- Registriert seit
- Feb 2010
- Beiträge
- 7
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
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 1981Geändert von yondaime1981 (08.02.10 um 13:54 Uhr)
-
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 :1 2 3 4 5 6 7 8 9
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 :1 2 3 4
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 :1 2
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
MarkusGeändert von Afritus (08.02.10 um 14:11 Uhr)
-
08.02.10 15:18 #5
- Registriert seit
- Feb 2010
- Beiträge
- 7
Danke für die Hilfe, leider liest er es wohl nicht richtig aus.
Hier der Code:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47
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
-
Wo scheiterts denn? Hast du nachgesehen, ob der Registry-Eintrag erstellt wird?
Vielleicht hilft dir das weiter:
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
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
-
08.02.10 16:10 #7
- Registriert seit
- Feb 2010
- Beiträge
- 7
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
If My.Computer.Registry.GetValue("HKEY_CURRENT_USER\Software\GameLoader", _ "pfad", Nothing) Is [COLOR="Blue"]Not Nothing[/COLOR] 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 HilfeGeändert von yondaime1981 (08.02.10 um 16:49 Uhr)
-
Sry, ich hab mich da wohl selbst etwas vertan.
Hier, das sollte funktionieren:
Code :1 2 3 4 5 6 7 8 9 10 11
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
-
08.02.10 18:49 #9
- Registriert seit
- Feb 2010
- Beiträge
- 7
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 :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
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 [B][COLOR="DarkOliveGreen"]'ab hier dein Code, habe den anderen auskommentiert[/COLOR][/B] 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
-
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 :1 2 3
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
-
08.02.10 19:16 #11
- Registriert seit
- Feb 2010
- Beiträge
- 7
-
Bei meinem Testprogramm habe ich genau diesen Code verwendet (1mal FolderBrowserDialog1, 1mal TextBox1):
Code :1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23
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
-
08.02.10 20:00 #13
- Registriert seit
- Feb 2010
- Beiträge
- 7
Es funktioniert

Vielen vielen Dank.
Jetzt nur noch der feinschliff und es ist fertig
Mfg Yondaime1981
-
Kein Problem, wenn du Fragen hast, einfach fragen

MfG
Ähnliche Themen
-
Master Detail C# 2010 express und SQL Server 2008 express Edition
Von ichNur im Forum .NET DatenverwaltungAntworten: 0Letzter Beitrag: 14.10.10, 16:45 -
vb.net express 2008 COM komunikation
Von melmann im Forum .NET Windows FormsAntworten: 1Letzter Beitrag: 16.06.09, 20:32 -
Vb 2008 Express Steuerung
Von ToyLand im Forum Visual Basic 6.0Antworten: 3Letzter Beitrag: 05.09.08, 16:53 -
Winsock in VB 2008 Express
Von TechnoLogiY im Forum Visual Basic 6.0Antworten: 1Letzter Beitrag: 27.08.08, 09:02 -
VB Express 2008 - ODBC
Von sumwear im Forum Visual Basic 6.0Antworten: 2Letzter Beitrag: 13.08.08, 17:31





Zitieren
Login





