Ein Logbuch...
In deiner PN hast du ja angesprochen, dass du es so haben willst, dass die Aufträge in der Reihenfolge aufgelistet werden wie man sie findet (nach Datum sortiert zozusagen).
Ich werde mal versuchen das so gut wie möglich zu erklären.
Um ein vernünftiges Logbuch zu bauen brauchst du als erstes eine "Liste" in der du die Aufträge, bzw. deren IDs einträgst. Ich werde als Beispiel diese benutzen:
Die Zahl steht natürlich jeweils für die ID welche dieser Auftrag im Maker hat. Am besten legst du dir gleich eine Liste (z.B. in Word) an in der du alle Aufträge mit Erläuterung abspeicherst.Zitat
Die Liste im Maker lässt sich am besten durch eine Reihe von Variablen (z.B der Bereich von Variable 100 bis Varibale 200) herstellen. Jede dieser Variablen hat nun einen Wert. Zu Beginn des Spiels ist dieser Wert 0. Bekommt man den ersten Auftrag wird die Variable 100 auf die ID dieses Auftrages gesetzt. Beim zweiten Auftrag entsprechend die Variable 101.
Problem bei der Sache ist nun, das es sein kann, das der Variablenplatz aufgebraucht wird. Daher empfiehlt sich, bei z.B. Variable 1000 anzufangen und bis 1300 freizulassen (nur für alle Fälle).
Es ist nun also sehr wichtig, das diese Variablen auch nur von den Aufträgen und deinem Questlog angetastet werden. Ansonsten heißt es "Finger weg!".
So, wie genau sieht jetzt ein einzelner Auftrag aus, bzw. woraus besteht er?
Wir haben also nun unsere Variablenliste von 1000 - 1500 und pro Auftrag ein bis zwei Variablen (Zustand und Belohnung). Die Belohnung lasse ich jetzt der Einfachheit halber weg.Zitat
Die Liste ist jedoch noch nicht ganz komplett. Wir benötigen noch soetwas wie "Zeiger", bildlich gesprochen "Finger" die immer genau auf einen Eintrag in der Liste zeigen. Veranschaulichen kann man sich dies mit einem 1000 Meter hohen Schrank mit Schubladen. Auf jeder "Etage" des Schrankes befindet sich eine Schublade. Diese Schubladen sind durchnummeriert (von 1000 bis 1500). Nun haben wir mehrere Fahrstühle (oder eben "Finger") die an der Vorderseite dieses Schrankes auf und ab fahren. Dabei lässt sich die Position jedes einzelnen Fahrstuhles eindeutig mit einer Nummer bestimmen. Diese Nummer ist die Nummer der Schublade vor der er sich gerade befindet. (Ich denke ich muss nicht erwähnen, dass man nur über diese Fahrstühle auf die Schubladen zugreifen kann, denn wer will schon 1000 Meter an einem Schrank hochklettern?)
Was müssten wir nun tun um z.B. auf die Schublade 1025 zuzugreifen?
Genau! Wir sagen einem von unseren Fahrstühlen, den wir z.B. "Aktuell" nennen, er soll zur Nummer 1025 hochfahren (wir würden also bildlich in ihm auf die 1025 drücken). Er saust hoch und gewährt uns zutritt zu dieser Schublade.
Andersherum geht es natürlich auch. Stell dir vor wir schicken den Fahrstuhl zu der Schublade in der z.B. ein Teddy liegt. Der Fahrstuhl fährt einfach so lange weiter bis er eine solche Schublade gefunden hat. Wir brauchen dann nichts weiter zu tun, als uns den Inhalt der Variable "Aktuell", also bildich die Position des Fahrstuhles, anzeigen zu lassen, und schon haben wir die Schublade.
Genau dies machen wir auch mit der Liste, nur dass jede Schublade eine ID ist, hinter der Titel, Beschreibung, Belohnung, Zustand und Bild des Auftrages versteckt sind und die Fahrstühle in wirklichkeit normale Variablen sind, die mit ihren Werten auf irgend eine Variable zeigen.
Nochmal zusammenfassend: Was brauchen wir für unsere Liste?
Wofür wir die Seiten-Variablen brauchen wirst du später erfahren.Zitat
Nun aber zurück zu unserem Auftrag. Ich spiele dabei einfach ein Beispiel durch:
Der Hauptheld kommt in das erste Dorf und spricht dort einen Mann an. Dieser bittet ihn darum ihm einen Fisch zu besorgen, er hätte am Morgen immer solchen Hunger. Der Held willigt ein.
Was passiert technisch dahinter? Wie wir wissen hat der Auftrag: "Ein frischer Fisch am Morgen" die ID 3 (diese hast du dir niedergeschrieben). Wir müssen nun also herausbekommen, welche Variable in unser Liste frei ist. Dazu setzen wir die Variable "Aktuell" auf 1000, den Start unserer Liste.
Der Code sieht dann so aus:
Um das Questlog später übersichtlicher zu gestalten, solltest du einige einzelne CEs anlegen, welche deine Liste für dich verwalten. Das erste CE hieße z.B. "Springe zur ersten freien Stelle" (im Maker geht allerdings nur weniger, z.B. "ZurErstFreistelle").Zitat
Der Code wäre dann dieser:
Sobald du diesen Code ausführst weißt du, dass dein Fahrstuhl "Aktuell" nun bei der ersten Schublade hält, in der nichts drinn ist. Die Lable-Schleife läuft so lange weiter, bis die Varibable "Kontrolle" einen Wert enthält der nicht 0 ist. "Kontrolle" entspricht hierbei dem Inhalt der Schublade mit der Nummer "Aktuell".Zitat
Nun bist du also an dieser Stelle, jetzt willst du dort die ID deines Auftrages hinterlegen. Das machst du dann so:
Auf dem Weg zurück begegnet man nun aber noch einer Frau, welche in voller Sorge erklärt, dass ihr Mann seit zwei Tagen verschollen sei. Er hatte zu einer alten Mine gehen wollen, da er dort noch unentdeckte Bodenschätze vermutete, doch nun sei seine Rückkehr schon einen Tag überfällig.Zitat
Wiedermal ein neuer Code:
Es wird wohl schnell deutlich, dass sich dieser Codeschnipsel überall weider verwenden lässt.Zitat
Wie sieht nach diesen beiden Aktionen nun unsere Liste aus?
Für weitergehende Erklärungen füge ich jetzt noch 10 weitere Aufträge mit unterschiedlichen IDs an. Die Geschichten dazu können uns egal sein.Zitat
Die Liste sieht nun z.B. so aus:
Nun kommen wir zum eigentlichen Teil des Questlogs. Ich gehe dabei davon aus, dass du es über einen Menüpunkt deines eigenen Menüs aufrufst.Zitat
Als erstes brauchen wir ein Hintergrundbild, 3 Cursor, 10 Auftragsüberschriften, 1 Bild und eine Erklärung.
Das sähe z.B. so aus:
Cursor 1 dient dazu, direkt einen Auftrag auszuwählen. Belohnung, Beschreibung und Bild wechseln sofort mit der Bewegung des Cursors 1.
Cursor 2 und 3 dienen zum Umblättern, sollte man mehr als 10 Quests haben.
Nun aber zum Technischen. Ich kann dir hier nicht den gesammten Code zum Questlog posten, dass könnte ich auch nicht einfach so fehlerfrei runterschreiben, daher versuche ich lieber es möglichst gut zu erklären.
Die größte Herausforderung bei einem Questlog ist es, immer die richtigen Quests anzeigen zu lassen und das umblättern ordentlich hinzubekommen. Durch unserer Liste ist dies aber nun ganz einfach. Für eine bessere Übersicht solltest du neben dem CE für das QL noch ein weiteres erstellen, in dem du dann das Anzeigen des Bildes, der Belohnung und der Beschreibung einbaust.
Dieses sähe dann z.B. so aus:
Natürlich kannst du Beschreibung, Bild und Belohnung in ein Picture packen. Das macht die Sache sogar noch einfacher.Zitat
Den Titel des Autrages musst du anders anzeigen lassen. Da kommt leider ne Menge Arbeit auf dich zu. Da die Aufträge variabel sind, können sie theoretisch an jeder Stelle im Questlog stehen. Das heißt du brauchst für jeden Quest bei 10 angezeigten Aufträgen gleichzeitig auch 10 Show Pictures.
Daher würde ich dir empfehlen nur 5 Aufträge pro Seite zu machen.
Beim Aufrufen muss nun Folgendes geschehen:
Hier wird nur der Variablenbereich abgesteckt in dem wir uns momentan befinden. Das Umblättern sieht so aus:Zitat
Hier muss gleich zwei mal überprüft werden, ob das Ende der Liste erreicht ist. Einmal ist das umblättern nur dann möglich wenn unser Bereich noch nicht an das "Nichts" grenzt. Zum anderen wird die oberere Grenze zurückgezogen, sollte sie versehentlich über den Rand gerutscht sein.Zitat
Nun zur Anzeige:
Der Großteil wiederholt sich einfach. Hierbei lasse ich meinen Aktuell-Fahrstuhl immer eine Etage höher fahren und hohle mir den Inhalt der Schublade.Zitat
Nun brauchst du noch das "Auftrag Anzeigen" CE:
Die Cursorbewegung läuft dann wie in jedem anderen Menü auch. Allerdings kannst du, um zu ermitteln welcher Auftrag gerade unter deinem Cursor ist, diese Rechnung benutzen:Zitat
Sollte funktionieren ^^°Zitat
Leider fange ich selber an, an der Verständlichkeit des obigen Textes zu zweifeln. Mag daran liegen das ich heute aus dem Urlaub gekommen bin und abgesehen von zwei, drei 15 Minütigen Nickerchen auf unbequemen Sitzen im Zug seit nunmehr 36 Stunden keinen Schlaf mehr hatte. Ich werde mich gleich ins Bett verziehen, wollte nur noch den Text so einigermaßen zuende bringen. Bis morgen hätte ich es bestimmt vergessen ^^°
mfg
Phönix Tear