Also...
Es wird in deinem Fall etwas schwierig, da du gerne anscheinend dein Tagebuch komplett darstellen möchtest (sprich den Inhalt musst du in eine externe Datei speichern - auslesen des Spielstands geht ja leider nicht) und darstellen von Screenshots passend zum Spielstand -was ich selber noch nicht kenne und gemacht habe. Theoretisch sollte das aber ebenfalls das speichern eines Dateipfads zum screenshots sein, der dann ggf. noch per Lua skaliert werden müsste. Diese zwei Sachen muss ich leider hier erstmal außen vor lassen, da ich mich nicht weiter damit beschäftigt habe solche Dinger einzubinden.
Generell sollten das abfragen dieser Daten aber gleich laufen, wie zB die Bezeichnung eines Spielstands aus einer Datei.
Es kann sein, dass diese "Anleitung" auch nicht zu 100% komplett ist (oder ich irgendwo einen Gedankenfehler habe weil deine Speichermenüidee etwas von dem Abweicht, was ich gebastelt habe), aber ich hoffe sie gibt für vieles zumindest ein Grundverständnis oder liefert zumindest Gedankenanstöße.
---
Vorbereitungen:
Für jeden Spielstand solltest du in deinem Speichermenü-Interface eine Value anlegen. In dessen Stringwert wird später zum Beispiel folgendes reingeschrieben bzw. dann auch in eine externe Datei gespeichert werden:
kapitel1#13#01.07.2016#21:15#path/to/screenshot_png#weitere.daten
Als Trennzeichen habe ich hier eines genommen, was theoretisch nicht vorkommen sollte (#). Per Luascript kann man diesen String später wieder aufteilen und auf dessen einzelne Werte zugreifen.
Im Beispielstring stehen die Werte für
- Kapitelname
- Prozentwert des Fortschritts
- Datum
- Uhrzeit
- Screenshotpfad (gehe ich nicht weiter drauf ein wie gesagt)
- Weiteres was du ggf. speichern möchtest
Weiteres:
Wirst du nur eine Seite an Spielständen nutzen oder mehrere zum durchblättern?
Wenn mehrere (bis 99), macht es natürlich sinn Anstatt 99 Conditions zu setzen, welchen Spielstand du grade im Menü angeklickt hast um ihn zu überschreiben hier auch Values zu nutzen, die die
aktive Seite, den
aktiven Slot auf der Seite und den
daraus berechneten wirklich markierten Slot speichern Beispiel: Du hast 10 Spielstände pro Seite.
Slot 6 auf Seite 2 Ist markiert = Spielstand 16 ist angewählt.
Für die Berechnung gibt es mehrere herangehensweisen, aber diese war meine:
local page_number = Values["save_load_page"].Int
local selected_slot = Values["selected_slot"].Int
local selected_savestate = 0
if selected_slot > 0 then
selected_savestate = (8 * page_number) - (8 - selected_slot)
else
selected_savestate = 0
end
getObject("Values[selected_savestate]"):setValue(VValueInt, selected_savestate);
Diesen Code habe ich in einen "Execute Script" Action Part gepackt, den ich immer dann aufrufe, wenn ich einen der (hier) 10 Slots auf der aktiven Seite anklicke.
Die "Seite vor/Seite zurück" Buttons in dem Speicherinterface addieren/subtrahieren einfach den Wert der Value "save_load_page" um 1 und falls 0 oder 10 erreicht ist, wird nicht mehr weitergezählt (10 Seiten = maximum)
Dazu wird dann noch ein "execute by another Action" Action part aufgerufen, der Object Texte mit dem Stringinhalt des spezifischen Spielstands anzeigt.
In deinem Fall muss aber der String der in diesem Spielstand gespeichert ist zuvor noch per Lua aufgeteilt und dessen Einzelteile noch in andere Values gespeichert werden, damit diese Sinnvoll auf dem Bildschirm dargestellt werden. Lege also für jeden einzelnen Wert nochmal Values an:
saveattribute_1 (kapitel), saveattribute_2 (prozentweert), etc.
Diese Werte werden für jeden Spielstand neu überschrieben. Es sind also temporäre Variablen.
Bevor du also ein DisplayText Action Part einsetzen kannst, also ein "Execute a Script Action Part nutzen und die split funktion von Lua einsetzen:
local savegame = Values["saveslotnamewoderstringabgespeichertist"].String
for i in string.gmatch(example, "#") do
Values["saveattribute_"..i..""].Int" = i
end
Danach kannst du per "Display Object Text" ein Objekttext mit dem entsprechenden ValueString an beliebiger Position darstellen.
Dies müsste dann noch für die anderen Spielstände auf der aktivien Seite wiederholt werden.
Die Darstellung der ganzen Werte wäre damit erledigt. Theoretisch sollten damit also schonmal (unabhängig vom Speichern die ganzen Werte aus einer Value ausgelesen, aufgeteilt in Ihre Bereiche und dargestellt werden können.
Zudem ist mit dem umblättern und das Berechnen des aktiven Speicherstandes beim anklicken auch schon geschehen. Dies wird dann gebraucht, wenn es wirklich ums Abspreichern/Laden geht.
Mit den oben stehenden Sachen könntest du zumindest schonmal schauen, ob das ganze soweit klappt, dass wenn du die Werte einer Value in VS veränderst, ob dies auch korrekt beim darstellen ingame umgesetzt wird.