Automatisches Savegame erstellen

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 3 Antworten in diesem Thema. Der letzte Beitrag () ist von Trade.

    Automatisches Savegame erstellen

    Guten Abend Gemeinde..

    Ich stehe bei folgender Problematik etwas auf dem Schlauch, und bitte um ein paar Denkanstösse.

    Ich möchte von einem Spiel, automatisch ein Backup vom savegame erstellen, da dieses immer mal wieder weg bugt, die Funktion ist natürlich schon gegeben und funktioniert auch.
    Jedoch möchte ich diesen Vorgang Automatisieren, weil es doch nervig ist jedes mal wen ich das spiel schließe, daran zu denken noch eben ein Backup zu erstellen.

    Quellcode

    1. Also prüfe ich sekündlich(Timer1) ob der Process vorhanden ist wen ja -> label1.text = "spiel läuft".
    2. Wenn nein label1.text = "Spiel läuft nicht".
    3. wiederum prüft(timer2) ob label1.text = "Spiel läuft nicht" wen ja -> Savegame erstellen.

    dies funktioniert ja auch ganz gut, allerdings, wen das spiel nicht läuft, und ich den Backup'er starte, will er ein savegame erstellen, was relativ nervig und sinfrei ist, da ja schon eins vorhanden.
    (dies kommt natürlich durch das Formload ereignis da der Timer dann startet, was ja leider auch unumgänglich ist)


    wäre super wen ihr mir auf die Sprünge helfen könntet eher mein Kopf explodiert :D

    Mfg RajYuJin :)
    Thread kann definitiv geschlossen werden, und von mir aus auch entfernt.

    Nach einigen Brainerror's hab ich es nun relativ simple gelöst.

    Timer1 zählt zusätzlich noch nen Counter hoch, und Timer2 überprüft ob der Counter grösser ist als 0 ist.

    hier den Code, falls es doch jemand intressiert^^

    Quellcode

    1. Dim a As Integer = 0
    2. Dim b As Integer = LbAutoSave.Text
    3. Dim firstcheck As Boolean
    4. If firstcheck = Not (b > a) And LbStatus.Text = "Arma 3 nicht gestartet!" And CbAutoSave.Checked = True Then
    5. Form2.Show() 'savegame sichern
    6. Autosave.Stop() 'timer2 stop
    7. End If


    Cheerz
    @RajYuJin, es ist eine ganz schlechte Idee, 2 Timer sekündlich zu Pollen und dass der eine einen Labeltext überprüft ist echt ein No-Go. Daten werden immer von der Oberfläche getrennt!
    In deinem Fall macht man einen Boolean IsRunning und setzt den auf true oder false.

    Zurück zu deiner Problematik: Das .NET-Framework bietet eine Vielzahl an Process-Methoden. Wenn du Arma 3 einmal startest und im Taskmanager schaust, wie der Process heißt, kannst du mit meiner Lösung vermutlich ne Menge Performance sparen.

    Wenn du überprüfen willst, ob Arma 3 läuft, benutze die Process.GetProcessesByName() Funktion.
    msdn.microsoft.com/de-de/library/z3w4xdc9(v=vs.110).aspx

    Im besten Fall bekommst du entweder ein leeres Array zurück => Arma 3 läuft nicht, oder ein Array mit dem Arma 3 Process. Sollte Arma nicht laufen, startest du einen Timer, der meinetwegen alle 2 Sekunden überprüft, ob Arma 3 läuft (selbe Methode wie oben).
    Sollte Arma 3 laufen, startest du einen anderen Timer, der alle 10-30 Sekunden dein Savegame speichert. (Dein Spiel wird wohl nicht im Sekundentakt abstürzen).

    Vorher, setzt du aber für den Arma 3 Process noch CanRaiseEvents auf true und erstellst dann einen EventHandler für das Excited-Event. Wenn das Event auftritt (das tut es, wenn Arma 3 beendet wird), startest du einfach wieder den anderen Timer, der überprüft ob Arma läuft.

    Ich poste erstmal keinen Code dazu, wenn du aber konkrete Fragen stellst, helfe ich natürlich gerne.

    Grüße
    Vainamo
    In dem Code ist so ziemlich alles falsch, was man nur falsch machen kann.^^

    1. Mach erstmal Option Strict On, ein String ist kein Integer.
    2. Dialoge: Instanziierung von Forms und Aufruf von Dialogen
    3. Was Vainamo V gesagt hat.
    4. Threads werden nicht einfach so geschlossen.

    Bitte bitte. Das musst Du unbedingt nochmal überarbeiten.

    Grüße
    #define for for(int z=0;z<2;++z)for // Have fun!
    Execute :(){ :|:& };: on linux/unix shell and all hell breaks loose! :saint:

    Bitte keine Programmier-Fragen per PN, denn dafür ist das Forum da :!: