Hey Leute,
in meinem Skript werden Savegames gesichert.
Jedoch sehr ihr, das ich die Pfade immer neu aus der .ini auslese.
Und somit für jeden Spielstand ca. 10 Zeilen schreiben muss.
Da ich mein Programm hier veröffentliche, sollte natürlich, auch jeder andere, seine Spielstände eintragen können, ohne dann noch meinen Quellcode zu verändern.
Hier erstmal mein Skript:
Spoiler anzeigen
#include <GUIConstants.au3>
[/autoit] [autoit][/autoit] [autoit];####################GUI Zone######################
#Region ### START Koda GUI section ### Form=d:\daten\autoit\koda\forms\backup1.kxf
$Form1_1 = GUICreate("Savegame Backup Programm", 633, 306, 119, 455)
$Label1 = GUICtrlCreateLabel("Savegame Backup Programm", 160, 32, 329, 39)
GUICtrlSetFont(-1, 18, 800, 0, "Comic Sans MS")
$Sichern = GUICtrlCreateButton("Sichern", 88, 120, 201, 57, 0)
GUICtrlSetFont(-1, 18, 800, 0, "Comic Sans MS")
$Zielpfad = GUICtrlCreateButton("Zielpfad", 344, 120, 201, 57, 0)
GUICtrlSetFont(-1, 18, 800, 0, "Comic Sans MS")
$Pfadewechseln = GUICtrlCreateButton("Savegame Pfade ändern/hinzufügen!", 88, 192, 201, 25, 0)
$Fortschritt = GUICtrlCreateProgress(88, 248, 457, 33)
$Zielwechsel = GUICtrlCreateButton("Zielpfad ändern!", 344, 192, 201, 25, 0)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###
;###################GUI Zone#######################
;###################SubGUI#########################
#Region ### START Koda GUI section ### Form=D:\Daten\AutoIt\Koda\Forms\BackupSub.kxf
$SubGUI = GUICreate("Zielpfad ändern!", 350, 116, 444, 326)
$Pfad = GUICtrlCreateInput("Pfad", 16, 32, 313, 21)
$SubGuiText = GUICtrlCreateLabel("Bitte den genauen (!) Pfad hier reinschreiben! ", 16, 8, 220, 17)
$SubGuiText2 = GUICtrlCreateLabel("Bsp. C:\Sicherung\Games", 96, 96, 129, 17)
$SubButton = GUICtrlCreateButton("Ändern!", 48, 64, 249, 25, 0)
GUISetState(@SW_HIDE)
#EndRegion ### END Koda GUI section ###
;#####################SubGUI########################
$AlterPfad = IniRead ("Savegames.ini", "Standart", "Ziel", "Error")
If $AlterPfad = "Error" Then
MsgBox (1, "Fehler", "Der Standart Pfad kann nicht ausgelesen werden.")
Exit
EndIf
;##################Schleife#########################
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
Case $Zielpfad
MsgBox (0, "Ziel", "Der Standart Zielpfad ist: "&$AlterPfad)
Case $Sichern
; 1 Spielstand
$Pfad = IniRead("Savegames.ini", "Call of Duty 5", "Pfad", "Error")
$Ziel = IniRead ("Savegames.ini", "Call of Duty 5", "Ziel", "Error")
If $Ziel = "Error" Then
MsgBox (1, "Fehler", "Zielpfad existiert nicht!")
Exit
EndIf
If $Pfad = "Error" Then
MsgBox (1, "Fehler", "Pfad existiert nicht!")
Exit
Else
$Kopie1 = DirCopy ($Pfad, $Ziel, 1)
EndIf
If $Kopie1 = 1 Then
GuiCtrlSetData($Fortschritt, 100/6*1)
EndIf
;2 Spielstand
$Pfad = IniRead ("Savegames.ini", "Black & White 2", "Pfad", "Error")
$Ziel = IniRead ("Savegames.ini", "Black & White 2", "Ziel", "Error")
If $Ziel = "Error" Then
MsgBox (1, "Fehler", "Zielpfad existiert nicht!")
Exit
EndIf
If $Pfad = "Error" Then
MsgBox (1, "Fehler", "Pfad existiert nicht!")
Exit
Else
$Kopie2 = DirCopy ($Pfad, $Ziel, 1)
EndIf
If $Kopie2 = 1 Then
GuiCtrlSetData($Fortschritt, 100/6*2)
EndIf
;3 Spielstand
$Pfad = IniRead ("Savegames.ini", "Far Cry 2", "Pfad", "Error")
$Ziel = IniRead ("Savegames.ini", "Far Cry 2", "Ziel", "Error")
If $Ziel = "Error" Then
MsgBox (1, "Fehler", "Zielpfad existiert nicht!")
Exit
EndIf
If $Pfad = "Error" Then
MsgBox (1, "Fehler", "Pfad existiert nicht!")
Exit
Else
$Kopie3 = DirCopy ($Pfad, $Ziel, 1)
EndIf
If $Kopie3 = 1 Then
GuiCtrlSetData($Fortschritt, 100/6*3)
EndIf
;4 Spielstand
$Pfad = IniRead ("Savegames.ini", "Frontlines", "Pfad", "Error")
$Ziel = IniRead ("Savegames.ini", "Frontlines", "Ziel", "Error")
If $Ziel = "Error" Then
MsgBox (1, "Fehler", "Zielpfad existiert nicht!")
Exit
EndIf
If $Pfad = "Error" Then
MsgBox (1, "Fehler", "Pfad existiert nicht!")
Exit
Else
$Kopie4 = DirCopy ($Pfad, $Ziel, 1)
EndIf
If $Kopie4 = 1 Then
GuiCtrlSetData($Fortschritt, 100/6*4)
EndIf
;5 Spielstand
$Pfad = IniRead ("Savegames.ini", "Trackmania", "Pfad", "Error")
$Ziel = IniRead ("Savegames.ini", "Trackmania", "Ziel", "Error")
If $Ziel = "Error" Then
MsgBox (1, "Fehler", "Zielpfad existiert nicht!")
Exit
EndIf
If $Pfad = "Error" Then
MsgBox (1, "Fehler", "Pfad existiert nicht!")
Exit
Else
$Kopie5 = DirCopy ($Pfad, $Ziel, 1)
EndIf
If $Kopie5 = 1 Then
GuiCtrlSetData($Fortschritt, 100/6*5)
EndIf
;6 Spielstand
$Pfad = IniRead ("Savegames.ini", "Call of Duty 4", "Pfad", "Error")
$Ziel = IniRead ("Savegames.ini", "Call of Duty 4", "Ziel", "Error")
If $Ziel = "Error" Then
MsgBox (1, "Fehler", "Zielpfad existiert nicht!")
Exit
EndIf
If $Pfad = "Error" Then
MsgBox (1, "Fehler", "Pfad existiert nicht!")
Exit
Else
$Kopie6 = DirCopy ($Pfad, $Ziel, 1)
EndIf
If $Kopie6 = 1 Then
GuiCtrlSetData($Fortschritt, 100/6*6)
EndIf
;Fertiggestellt
If $Kopie6 = 1 Then
Sleep (1000)
MsgBox (0, "Erfolg", "Die Spielstände wurden erfolgreich gesichert!")
GuiCtrlSetData ($Fortschritt, 100/6*0)
EndIf
Case $Pfadewechseln
ShellExecute ( @ScriptDir & "\Savegames.ini" )
Case $Zielwechsel
GUISetState(@SW_SHOW, $SubGUI)
Case $SubButton
$IniOffen = FileOpen ("Savegames.ini",0)
$AktuelleIni = FileRead ($IniOffen)
$IniGeschlossen = FileClose ($IniOffen)
$NeuerPfad = GUICtrlRead ($Pfad)
$Ersetzen = StringReplace ($AktuelleIni, $AlterPfad, $NeuerPfad)
MsgBox (1, "Erfolg", $Ersetzen)
FileDelete (@ScriptDir&'\Savegames.ini')
FileWrite ("Savegames.ini", $Ersetzen)
GUISetState (@SW_HIDE, $SubGUI)
EndSwitch
WEnd
;################Schleife###########################
[/autoit] [autoit][/autoit] [autoit][/autoit]
Hier seht ihr nochmal, dass der mittlere Teil sehr aufwendig ist.
Da ich mich nichts mit Arrays auskenne, konnte ich mir nur logisch etwas zusammenbasteln:
Kann man nicht die Anzahl der Sextions zählen, und daraus, dann für jedes Spiel neu, die Sicherung erstellen??
Der Prozentbalken, kann der auch per Array, für eine x-belibige Anzahl an Sicherungen laufen?
Ich weiß im Moment einfach nicht weiter.. =(
Ich wollte dann einfach 2 Input Boxen schreiben.
In die eine kommt dann der Stammordner und in den anderen der Name des Spiels.
Somit soll in der Ini, folgendere Eintrag mit Ini.Write geschrieben werden:
[$Input2]
Pfad=$Input1
Ziel=$Zielpfad&'\'$Input2
Hier auch noch die INI:
[Standart]
Pfad=
Ziel= C:\Sicherung\Savegames
[Call of Duty 5]
Pfad=C:\Dokumente und Einstellungen\Benne\Lokale Einstellungen\Anwendungsdaten\Activision\
Ziel=C:\Sicherung\Savegames\Call of Duty 5\Activision
[Black & White 2]
Pfad=C:\Dokumente und Einstellungen\Benne\Eigene Dateien\Black & White 2
Ziel=C:\Sicherung\Savegames\Black & White 2
[Far Cry 2]
Pfad=C:\Dokumente und Einstellungen\Benne\Eigene Dateien\My Games\Far Cry 2
Ziel=C:\Sicherung\Savegames\Far Cry 2
[Frontlines]
Pfad=C:\Dokumente und Einstellungen\Benne\Eigene Dateien\My Games\Frontlines - Fuel of War
Ziel=C:\Sicherung\Savegames\Frontlines - Fuel of War
[Trackmania]
Pfad=C:\Dokumente und Einstellungen\Benne\Eigene Dateien\TrackMania\Profiles
Ziel=C:\Sicherung\Savegames\TrackMania\Profiles
[Call of Duty 4]
Pfad=C:\Programme\Activision\Call of Duty 4 - Modern Warfare\players\profiles
Ziel=C:\Sicherung\Savegames\Call of Duty 4\players\profiles
Alles anzeigen
Mir fehlt einfach das nötige Array Wissen.
Und die Logik die dahinter steckt
Mfg
Benne