Ergebnis 1 bis 20 von 29

Thema: Notizbuch für Quests (Logbuch)

Hybrid-Darstellung

Vorheriger Beitrag Vorheriger Beitrag   Nächster Beitrag Nächster Beitrag
  1. #1
    Hallo,

    erstmal vielen Dank für die Mühe mit der ausführlichen Erklärung ... habe mir den Beitrag mal gedruckt, um ihn auch ohne Browser durcharbeiten zu können.

    Bin die Erklärung nun zweimal durchgegangen, werde es aber nochmals in aller Ruhe machen. Das Prinzip habe ich aber soweit verstanden.

    Eines aber erstmal:

    Zitat Zitat
    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).
    Hab mir sicherheitshalber die PN nochmal angesehen, aber nein - hab das nicht erwähnt dort ... musst du wohl verwechselt haben mit dem Thread aus 2004, den ich verlinkt habe. Den hatte ich ganz zu Anfang hier gelesen und mir dann heute gedacht, ich frag mal, weil du es ja damals dort erklärt hattest (aber leider die Bilder nicht mehr existieren).

    Ich bin schon eine ganze Weile am überlegen, wie ich das Logbuch am Besten aufbauen könnte. So wie ich es aus deiner Beschreibung verstanden habe, ist es eine komplizierte Methode, auch wenns nachher schön aussehen würde.

    Die Beschreibungen als Bild anzuzeigen ist sicherlich eine tolle Idee - was mich dann aber stört ist folgendes: Die Überschriften für jede Quest müssen ja schon als Bild dargestellt werden - die Beschreibungen würden sich aber auch per Show Message aufrufen lassen, sobald man eine Quest ausgewählt hat.

    Außerdem könnte ja jemand auf die Idee kommen, sich den Ordner "Pictures" anzugucken und schon vor dem Spielen erfahren, was es für Aufgaben geben wird. Die Beschreibung dann als Message anzuzeigen würde dies dann ausschließen

    Eine andere Art für ein Logbuch habe ich in der Demo "Der Bote des Königs" gesehen. Dort kann man die Quests erst getrennt in einer Show Choice auswählen (ob Haupt- oder Nebenquest). Danach werden die Aufgaben dann als Message angezeigt (bei mehreren Aufträgen habe ich jetzt nicht nachgesehen wie es ausschaut).

    Ich stelle mir das Logbuch so vor:

    1. aufrufbar über einen eigenen Eintrag im Menü
    2. Hintergrundbild wird angezeigt (man könnte hier einen Notizblock darstellen oder sowas)
    3. Da mehr als 3 Aufgaben aufgelistet werden sollen, werde ich die Überschriften als Pictures nehmen müssen ist klar - also werden dann über das Hintergrundbild alle vorhandenen Aufgaben eingeblendet.
    4. Neben den Aufgaben sollte sich dann ein Cursor befinden, mit welchem man zwischen den Aufgaben navigieren kann
    5. Wählt man eine Aufgabe aus, so wird ein Picture eingeblendet, über welchem man dann eine transparente Message anzeigen lässt (das Picture natürlich passend zum Logbuch und anders als eine normale Textbox, damit man den Unterschied erkennt und das Ganze auch gut aussieht) - als weitere Hilfe bei wichtigen Quests könnte man dann auch ein Faceset anzeigen lassen oder an anderer Stelle ein Bild (zB. eine Karte oder einen Screenshot von dem Ort wo sich die Quest befindet)
    6. Sollte man mehr Aufgaben haben als Pictures sich anzeigen lassen, dann natürlich noch zwei weitere Bilder, die ein vor/zurück geben sollen - vielleicht noch einen "Zusatzbutton" zum Verlassen des Logbuches.

    Was ich nun noch nicht sicher weiß ist, was mit den erledigten Aufgaben geschehen soll, ob sie weiterhin angezeigt werden sollen. Hier würde ich dann das bevorzugen, was von der Umsetzung her einfacher ist.

    Für den Fall, dass bereits erledigte Aufgaben weiterhin angezeigt werden, würde ich die Überschriften dann farblich anders gestalten (eventuell noch ein Häkchensymbol dahinter) - sodass man also die einzelnen Quests unterscheiden kann.

    Natürlich könnte man auch mehrere Seite im Logbuch machen, wo der Spieler dann auswählen kann, ob er aktuelle Quests sehen will, bereits erledigte, oder sogar eine Statistik ("Du hast bereits X Aufgaben gelöst") - Möglichkeiten gibt es da eben viele.

    Wie sieht es also mit der Umsetzung für diese Art von Logbuch aus? Ich denke dass sie etwas einfacher ist. Es ist übrigens auch egal, welche Reihenfolge die Aufträge im Logbuch haben, zumal jeder sicherlich unterschiedlich spielt und zuerst an anderer Stelle sich aufhält, als die erste aller Aufgaben wirklich wäre.

    Erstmal bis dann, werden heute Mittag mal ein wenig herumprobieren um zu schauen, ob ichs irgendwie hinbekomme.

  2. #2
    Gut in diesem Fall hast du wieder zwei Möglichkeiten.
    Möglichkeit 1 ist die, die ich oben beschrieben habe (also mit der Liste).
    Möglichkeit 2 lässt überall dort ein Feld frei wo du den entsprechenden Auftrag noch nicht gefunden hast. Diese sieht man häufig in Spielen mit Fähigkeitsmenüs oder auch bei etwas wie dem Pokedex aus Pokemon. Meiner Meinung nach ist das nicht wirklich schön. Der Pokedex ist allerdings in sofern noch in Ordnung weil er einem ne schöne Übersicht bietet wie viele Pokemon man noch nicht entdeckt hat. Bei Aufträgen kommt es (gerade wenn nur 5 oder so pro Seite angezeigt werden) zu unnötigem Blättern. Bei 10 oder 15 Aufträgen pro Seite könnte das aber wieder gehen. Damit würde es dann nur schwerer noch Extra anzeigen einzubaun (Häkchen, etc.). Daher würde ich 10 empfehlen.

    Wenn dir die Methode 1 zu schwierig ist kannst du Methode 2 mit einer Reihe von Forks nachbaun. Dabei brauchst du im Maker nur aufzulisten welcher Auftrag wo steht. Also z.B. so:
    Zitat Zitat
    Auftrags-Anzeige

    <>Erase Picture '1'
    <>Erase Picture '2'
    <>...
    <>Erase Picture '9'
    <>Erase Picture '10'
    <>
    <>Fork Variable "Seite" = 1
    <><>Fork Variable "Auftrag 1 erhalten?" > 0
    <><><>Show Picture '1' "Auftrag 1 Titel" at [100|60]
    <><>End:
    <><>Fork Variable "Auftrag 2 erhalten?" > 0
    <><>Show Picture '2' "Auftrag 2 Titel" at [100|80]
    <><>End:
    <><>...
    <><>Fork Variable "Auftrag 9 erhalten?" > 0
    <><>Show Picture '9' "Auftrag 9 Titel" at [100|220]
    <><>End:
    <><>Fork Variable "Auftrag 10 erhalten?" > 0
    <><>Show Picture '10' "Auftrag 10 Titel" at [100|240]
    <><>End:
    <>Else:
    <>Fork Variable "Seite" = 2
    <><>Fork Variable "Auftrag 11 erhalten?" > 0
    <><><>Show Picture '1' "Auftrag 11 Titel" at [100|60]
    <><>End:
    <><>Fork Variable "Auftrag 12 erhalten?" > 0
    <><>Show Picture '2' "Auftrag 12 Titel" at [100|80]
    <><>End:
    <><>Fork Variable "Auftrag 13 erhalten?" > 0
    <><>Show Picture '3' "Auftrag 13 Titel" at [100|100]
    <><>End:
    <><>...
    <>Else:
    <>...
    <>End:
    Das sieht erstmal nach viel aus, ist aber sehr einfach zu ergänzen und funktioniert mit Sicherheit. Das Questlog wäre dann einfach zu machen:
    Zitat Zitat
    Questlog

    <>Change Variable "Menüposition", set 1
    <>Change Variable "Seite", set 1
    <>Change Variable "Cursor X", set 100
    <>Change Variable "Cursor Y", set 80
    <>Show Picture '11' "Cursor" at [Cursor X|Cursor Y]
    <>Call Event "Auftrags-Anzeige"
    <>Enter Password "Menüpasswort" [1,2,3,4 ; 5 ; 6] [wait until key hit]
    <>Fork Variable "Menüpasswort" = 1
    <><>Fork Variable "Menüposition" != 10
    <><><>Change Variable "Menüposition" + 1
    <><><>Call Event: "Cursor bewegen"
    <><>Else:
    <><><>Change Varibale "Menüposition", set 1
    <><>End:
    <>Else:
    <>Fork Variable "Menüpasswort" = 4
    <><>Fork Variable "Menüposition" != 1
    <><><>Change Variable "Menüposition" - 1
    <><><>Call Event: "Cursor bewegen"
    <><>Else:
    <><><>Change Varibale "Menüposition", set 10
    <><>End:
    <>Else:
    <>Fork Variable "Menüpasswort" = 2
    <><>Fork Variable "Seite" != 1
    <><><>Change Variable "Seite" - 1
    <><><>Call Event: "Auftrags-Anzeige"
    <><>End:
    <>Else:
    <>Fork Variable "Menüpasswort" = 3
    <><>Fork Variable "Seite" != (die letzte Seite mit Aufträgen)
    <><><>Change Variable "Seite" + 1
    <><><>Call Event: "Auftrags-Anzeige"
    <><>End:
    <>Else:
    <>Fork Variable "Menüpasswort" = 5
    <><>Call Event: "Auftragsbeschreibung"
    <>Else:
    <>Fork Varibale "Menüpasswort" = 6
    <><>Code zum Verlassen des Menüs
    <>End:
    So, nun brauchst du noch die CEs "Cursor bewegen" und "Auftragsbeschreibung".
    Zitat Zitat
    Cursor Anzeigen

    <>Change Variable "Cursor Y", set "Menüposition"
    <>Change Variable "Cursor Y" * 20
    <>Change Variable "Cursor Y" + 60
    <>Move Picture '11' to [Cursor X | Cursor Y] in [0.1 secs] and [do not wait until key hit]
    Warum diese komische Berechnung?
    Ich gehe davon aus, dass deine Aufträge alle untereinander stehen mit einem Abstand von 20, beginnend bei der Position [100|80]. Das müsstest du natürlich anpassen.
    Die Berechnung selbst spart mir im Haupt-CE jedes mal die neuen Cursor-Positionen angeben zu müssen. Das kann man natürlich auch machen. Hier bot sich nur diese Methode an
    Dann noch das "Auftragsbeschreibung"-CE:
    Zitat Zitat
    Auftragsbeschreibung

    <>Fork Variable "Seite" = 1
    <><>Fork Variable "Menüposition" = 1
    <><><>Show Massage: "Massage mit der Beschreibung zu Auftrag 1"
    <><>Else:
    <><>Fork Variable "Menüposition" = 2
    <><><>Show Massage: "Massage mit der Beschreibung zu Auftrag 2"
    <><>Else:
    <><>Fork Variable "Menüposition" = 3
    <><><>Show Massage: "Massage mit der Beschreibung zu Auftrag 3"
    <><>Else:
    <><>...
    <><>Fork Variable "Menüposition" = 10
    <><><>Show Massage: "Massage mit der Beschreibung zu Auftrag 10"
    <><>End:
    <>Else:
    <>Fork Variable "Seite" = 2
    <><>Fork Variable "Menüposition" = 1
    <><><>Show Massage: "Massage mit der Beschreibung zu Auftrag 11"
    <><>Else:
    <><>Fork Variable "Menüposition" = 2
    <><><>Show Massage: "Massage mit der Beschreibung zu Auftrag 12"
    <><>Else:
    <><>...
    <><>End:
    <>Else:
    <>...
    <>End:
    Damit ist dein Questlog fertig.
    Jetzt kannst du noch im "Auftags-Anzeige"-CE weitere Pictures, wie ein Bild des Auftragsgebers, etc. hinzufügen. Der Phantasie ist dort nur die Grenze der maximalen Pictures gesetzt
    Was dann auch noch zu erledigen wäre, ist das anzeigen der Seiten-Cursors. Das dürfte jedoch sehr einfach sein

    Ich hoffe mit der Methode kannst du was anfangen

    mfg
    Phönix Tear

  3. #3
    Hallo,

    leider wurde aus dem Test am Mittag nichts, aber mal sehen ob ich gleich etwas Zeit dafür finde ... naja, ansonsten, es läuft ja nicht weg^^.

    Auf den ersten Blick muss ich sagen, siehts genauso schwierig aus wie beim Ersten ... liegt aber wohl daran, dass ich das Prinzip noch nicht so ganz verstanden habe. Hoffe, dass ich es bald drin habe, damit ich auch sagen kann, es ist einfach

    Mir kommen jetzt aber ein paar Fragen auf zur 2. Methode:

    1. Wird das jeweils alles in ein Common Event gepackt?
    2. Warum werden bei dem ersten Code zu Anfang alle Pictures gelöscht?
    3. Die Anzeige der Postionen der einzelnen Aufträge klingt verständlich, so müsste es dann sein. Aber, wie sieht es dann aus, wenn ein Auftrag noch nicht erledigt ist? Wird dann nicht eine "leere Fläche" erscheinen zB. zwischen Auftrag 1 und 3 ?

    Die Berechnung mit dem Cursor finde ich schon mal in Ordnung so, dann muss man nicht alles mehrfach berechnen

    Hmm, das lässt mir einfach keine Ruhe, werde jetzt mein Testprojekt starten und mal loslegen!

    Edit: Habe mal ein bisschen herumprobiert und mir dabei deinen Beitrag angesehen. Jetzt ist es schon ein wenig klarer, ebenso konnte ich mir obige Fragen schon teilweise selbst beantworten.

    1. Ja, alles in Common Events
    2. Der Picture-Löschbefehl am Anfang deshalb, weil das gesamte Common Event mehrmals, je nach Fork, abgerufen wird, und dann immerwieder ermittelt, welche Aufgaben man schon hat, damit er diese anzeigen kann. Ohne das Löschen der Pictures vorher, würde die erneute Anzeige nicht klappen - richtig?

    Wenn ich jetzt noch eine Antwort auf die 3. Frage hätte, wäre ich schon gaaaaanz weit ... hab mich übrigens entschieden was das anzeigen bereits erledigter Aufgaben betrifft: Nicht mehr anzeigen! (Also nur Aufgaben anzeigen, dessen Variable den Wert 1 trägt. Ist er 0 (noch nicht erhalten) oder 2 (erledigt) dann nicht mehr.


    Geändert von Jadoo (09.04.2007 um 20:35 Uhr)

  4. #4
    Zitat Zitat
    Möglichkeit 2 lässt überall dort ein Feld frei wo du den entsprechenden Auftrag noch nicht gefunden hast.
    ^^
    Ja, das finde ich ist der große Nachteil an der zweiten Methode. Meiner Meinung nach kommt da ein "Noch kein Eintrag" Picture in einem unauffälligen grau ganz gut. Trotzdem ist es nicht so schön wie Methode 1 .

    Zu deinen Fragen:
    1: Eben je nachdem wie viele du haben willst. Manchmal ist "Auslagern" ganz praktisch, wenn man einige Code-Segmente häufig benutzen will.
    2: Solltest du bei nicht gefundenen Aufträgen keinen "Noch kein Eintrag" Schriftzug verwenden wollen, muss dies ausgeführt werden, damit nicht der Eintrag der letzten Seite da bleibt. Richtig erkannt ^^
    3: s.o. ^^°

    Ich würde jedoch, da diese Methode ja gerne Löcher lässt, die Schriftfarbe erledigter Aufträge auf grün ändern. Damit hat der Spieler ein besseres Gefühl, weil er gleich sieht was er alles schon geschafft hat. So kommt dann auch ein größerer Anreiz auf einen speziellen Auftrag zu erledigen, der vielleicht der letzte rote auf einer Seite ist (zumindest bei allen Perfektionisten ).
    Ich bin leider im Moment sehr beschäftigt (einmal mit meinem Tetris, zum anderen damit, die letzten 2 Ferientage möglichst gut auszunutzen ^^), sonst könnte ich dir das einmal im Maker umsetzen. So lange dürfte das ja nicht dauern (wenn man es einmal verstanden hat ist es ja ganz leicht ).

    Die Methode 1 dürfte um einiges klarer werden, wenn man Java im Informaitk-Unterricht hatte. Ich schätze meine Erklärung war etwas schlecht, weil ich einfach ein paar Sachen aus dem Unterricht übernommen habe, die zum Maker nicht so gut passten .

    mfg
    Phönix Tear

  5. #5
    Achso meinteste das, jetzt verstehe ich. Dachte erst, du meinst, ich solle da ein Feld frei lassen wo keine Aufgaben sind, lol ^^

    Mir ist jetzt aber noch etwas klar geworden, und zwar die einfachste aller Möglichkeiten (meiner Meinung nach im Moment): Die Aufgaben alle als Text anzeigen lassen und eventuell Facesets oder Pictures nebenher zu nutzen

    Einziger Nachteil: Der Spieler kann dann nicht selbst auswählen, welche Aufgabe er sehen will, sondern alle Beschreibungen werden nacheinander eingeblendet. Wenn bereits gelöste Aufgaben aber nicht mehr angezeigt werden, verringert sich der Nachteil jedoch und es ist erträglich. Außerdem wird der Spieler dann automatisch erinnert, wenn er eine Aufgabe noch nicht erledigt hat. Man kann den Text hier ja auch auf normaler Schnelligkeit laufen lassen, dann kann man bestimmte Texte schneller wegdrücken

    Ansonsten würde ich mich über dein Angebot freuen (falls es eins war), dass du mir das mal als Spiel zeigst und ich mir das im Maker ansehe. Ich denke dann wird es für mich verständlicher. Du kannst dir damit aber ruhig noch Zeit lassen, es eilt nicht!

    LG

  6. #6
    So, ich hab mich mal drangesetzt und das in etwa so umgesetzt wie ich mir das vorgestellt hatte (Methode 2).
    Die Graphik sollte man nicht beachten, ist ja wie immer nur ein Lückenfüller.
    An einigen Stellen hab ich ein bisschen mit Variablen-Nummern gespielt, was den Code komplizierter erscheinen lässt als er ist. An all diesen Stellen musste man nämlich einfach Stumpf die richtigen Variablen auswählen. Da ich 23 Aufträge eingebaut habe war mir das zuviel Arbeit, wesshalb ich das dort abgekürzt habe. (Hat lange genug gedauert die ganzen Pics für die Aufträge zu machen und zu importieren xD).
    Der Großteil ist im Code erklärt, von daher sollte das kein Problem sein

    Sobald du startest stehst du auf einer Map voll mit Soldaten. Von oben links beginnend gibt dir jeder von ihnen einen Auftrag. Beim ersten ansprechen wird er aktiviert, beim zweiten ansprechen als "erledigt" verbucht. Die beiden Soldaten links aktivieren gleich mehrere Aufträge. Der obere die von 1-10, der untere die von 1-23 (also alle).
    Das die Titel meiner Aufträge so eintönig sind (Auftrag 1, Auftrag 2, Auftrag 3, etc.) liegt daran, dass ich mir nicht auf die schnelle 23 Titel ausdenken konnte. Die "Spezifikationen" (also Bild, Beschreibung und Belohnung) sind nahezu bei allen Aufträgen gleich. Auftrag 1 und 2 haben ein Bild. Alle Aufträge haben nur eine Platzhalter beschreibung und die Aufträge 1-10 bringen 10 Gold als Belohnung, die danach 99 Gold. Das wars auch schon

    Eingebaut ist die "-kein Eintrag-" Funktion, sowie die rote und grüne Schrift für erledigte und noch ausstehende Quests. Dabei lasse ich die Spezifikationen der Quests die erledigt worden sind weiterhin anzeigen, damit man im späteren Spiel nochmal zurückblicken kann, was man alles schon erlebt hat

    Tja, mehr gibts garnicht zu sagen.

    Hoffe du kannst damit was anfangen

    Hier der Download Link (375 KB bei Rapidshare)

    mfg
    Phönix Tear

  7. #7
    Das ging ja schnell, vielen Dank für die Mühe

    Ja, das entwerfen der Grafiken und importieren ist denke ich (für die, die das andere auch schon drin haben) am schwierigsten, vor allem wenn man sie noch passend gestalten muss fürs Hauptprojekt.

    Das Logbuch sieht natürlich super aus, auch was die Funktionen angeht. Was die Umsetzung aber betrifft siehts immernoch so aus:

    Hab jetzt ca. 1 Stunde so vorm Bildschirm gehockt ---> <--- und überlegt. Ich muss mich da nochmal ganz in Ruhe ransetzen und am Besten erstmal Schritt für Schritt nachbauen.

    Hatte gestern noch selbst ein Logbuch mal angefangen zu machen, wie gesagt allerdings nur aus ein paar Show Pictures und Messages, das klappt ganz gut und ließe sich ausbauen.

    Ich werde in den nächsten Tagen längere Zeit nicht Zuhause sein und deshalb auch nicht Werkeln können. Aber mal sehen, vielleicht sieht es danach ja besser aus, wenn ich mich "frisch" wieder der Aufgabe begebe.

    Ich bedanke mich nochmal bei euch für eure Mühe, werde mich melden, sobald ich etwas, was wie ein Logbuch aussieht zustande gebracht habe

    LG

  8. #8
    Hallo

    Es gibt ein paar tolle Neuigkeiten: Habe es geschafft, auf einfacher Weise ein Logbuch zu erstellen (ohne Navigation, sondern nacheinander anzeigende Messages)

    Bin auch nochmal ganz in Ruhe die erste Methode durchgegangen und habe sie bis zum Punkt mit dem Cursor verstanden. Das was danach kommt muss ich nochmal in Ruhe durchgehen, aber so betrachtet und das Resultat daraus in dem Script ist mir jetzt folgendes aufgefallen:

    Es werden alle Einträge je Seite angezeigt, wo man auch sofort blättern kann, weil ja je nach Cursorbewegen rechts die Beschreibung usw. angezeigt wird. Wollte das schon früher fragen, aber hatte erstmal nachgesehen, falls sich die Frage von selbst beantwortet.

    Wenn ich aber einbauen möchte, dass erst nach dem Drücken der Entertaste ein Bild bzw. Text angezeigt wird, kann man das irgendwie einbauen oder muss dann das gesamte Logbuch ganz anders aufgebaut werden?

    Was mir noch aufgefallen ist: Ist es denn nicht so, dass auch bei der ersten Methode immer eine freie Stelle dort bleibt, wo noch kein Auftrag vorhanden ist? Wenn zB. bei der Abfrage ob Var Aktuell = < 1004 .... sagen wir mal 1002 hat noch keinen Eintrag, wie sieht es dann aus?

    LG

  9. #9
    Ersmal zu Frage 2:
    Ne, das Logbuch von der ersten Methode hat nur dann ein "Loch" wenn du überhaupt keine Einträge hast. Dadurch das jedes Mal, wenn du einen Auftrag bekommst, die erste Freistelle in der Liste gesucht wird (welche logischerweise immer am Ende deiner Liste ist), kann garkein Loch entstehen.
    Solltest du später einen Auftrag löschen - also seine Varibale wieder auf 0 setzen - müsste man noch einen Nachrück-Algorithmus bauen. Das wäre allerdings auch nicht weiter schwer:
    Zitat Zitat
    Nachrücken

    <>Call Event: "ZurErstenFreistelle"
    <>Change Variable "Verschiebung 1", set "Aktuell"
    <>Change Varibale "Verschiebung 2", set "Aktuell"
    <>Change Variable "Verschiebung 2" + 1
    <>Change Variable "Verschiebungs Inhalt", set [VarNr: "Verschiebung 2"]
    <>!Lable 1!
    <>Change Variable [VarNr: "Verschiebung 1"], set "Verschiebungs Inhalt"
    <>Change Varibale "Verschiebung 1" + 1
    <>Change Varibale "Verschiebung 2" + 1
    <>Change Variable "Verschiebungs Inhalt", set [VarNr: "Verschiebung 2"]
    <>Fork Varibale "Verschiebungs Inhalt" != 0
    <><>!Goto Lable 1!
    <>End:
    <>
    Was macht dieser Code?
    Nun, hier haben wir wieder zwei Fahrstühle ^^, nämlich "Verschiebung 1" und "Verschiebung 2". Außerdem noch eine Kiste die "Verschiebungs Inhalt" heißt.
    Nun fahren wir beide Fahrstühle zur ersten Schublade ohne Inhalt. Daraufhin lassen wir Fahrstuhl 2 (also "Verschiebung 2") eine Etage weiter nach oben Fahren. Da wir eine Lücke haben ist diese Schublade logischerweise gefüllt. Nun packen wir alles aus Schublade 2 (also auf der Etage bei der "Verschiebung 2" gerade ist) in unsere Kiste "Verschiebungs Inhalt". Danach schicken wir diese Kiste an "Verschiebung 1", der ja eine Etage weiter unten ist, und packen die Kiste dort in die Schublade.
    Nun fahren beide Fahrstühle eine Etage weiter nach oben, packen die Kiste erneut und schicken sie nach unten. Das geht so lange weiter bis Fahrstuhl 2 eine weitere leere Schublade entdeckt.
    Da ich davon ausgehe das maximal ein Loch auf einmal entsteht ist damit das Ende der Liste erreicht und die Prozedur kann beendet werden.
    Fertig ^^

    Nun zur Frage 1:
    Das sollte auch nicht weiter das Problem sein. Wenn du dir meinen Skript anschaust musst du dort in das CE "Questlog" schaun. Dort steht die Cursor-Bewegung drinn.
    Unter dem "Lable 1" wird die Tasteneingabe abgewartet. Drückt man Pfeil unten oder Pfeil oben soll der Cursor bewegt werden. In der Makersprache bekommt meine Variable "QL Passwort" also entweder den Wert "1" (für oben) oder "4" (für unten).
    Nun musst du in die Fork-Verschachtelung schauen. Dort wird gleich ganz oben abgefragt ob "QL Passwort" 1 ist. Und etwas weiter unten ob sie 4 ist.
    Der Code in den Forks ist dabei nahezu identisch.
    Er lautet bei 1:
    Zitat Zitat
    <>Play SE: "Cursor 1"
    <>Change Variable "QL Menüposition" + 1
    <>Change Variable "Cursor Y" + 12
    <>Fork Variable "QL Menüposition" >= 11
    <><>Change Variable "QL Menüposition", set 1
    <><>Change Variable "Cursor Y", set 33
    <>End:
    <>Move Picture '13' (["Cursor X" | "CursorY"]) in 0,1 secs [do not wait until key hit]
    <>Call Event: "Spezifikationen Anze"
    Das wichtige ist dabei das markierte. Dort wird das CE aufgerufen, welches das Bild, die Beschreibung und die Belohnung anzeigt. Dieses Call-Event musst du einfach in den Forks für 1 und 4 entfernen. Dafür packst du es bei der Fork für 5 rein in der aktuell nur steht:
    Zitat Zitat
    <>Note:
    <>Note: Soll hier was passieren? ^^°
    <>Note:
    Nun musst du reinschreiben:
    Zitat Zitat
    <>Call Event: "Spezifikationen Anze"
    Damit bist du auch schon fertig. Allerdings sollte nun beachtet werden, dass die Spezifikationen des Auftrages bei dem du Enter gedrückt hast auch bestehen bleiben wenn du den Cursor weiterbewegst. Dazu empfehle ich ein "Erase Picture" Befehl bei der Cursorbewegung einzubaun. Setzt einfach in der Fork für 1 und 4 ein:
    Zitat Zitat
    <>Erase Picture: '12'
    <>Play SE: "Cursor 1"
    <>...
    Damit wäre auch das Problem behoben

    mfg
    Phönix Tear

    Edit:
    Habs gerade getestet und es fehlt noch was, bzw. ist noch was zu viel.
    In den Forks für 2 und 3 (bei denen die Seite gewechselt wird), muss das Call Event ebenfalls weg. Außerdem noch beim Menüaufruf. (Lösch es im CE "Questlog" einfach überall wo du es siehst, außer in der Fork für 5 )

    Edit 2:
    Mir fällt gerade auch noch auf, dass es einen Fehler in der Anzeige des Seitencursors gibt. Ist man auf Seite 1 wird der linke anstatt des rechten Pfeils gelb iluminiert. Du müsstest in der Fork dafür bei "Seite = 1" den Picture von "Questlog Seitencursor Gelb unten" auf "Questlog Seitencursor Gelb oben" ändern (insgesamt drei mal, einmal beim Aufruf des Menüs und in den Forks zum ändern der Seite).

    Geändert von Phönix Tear (15.04.2007 um 11:44 Uhr)

  10. #10
    Hallo

    hatte mal kurz Zeit wieder am Logbuch zu arbeiten und bin mal die erste Methode durchgegangen. Die gute Nachricht: Habe das Prinzip soweit verstanden, zumindest was das anzeigen der Aufträge pro Seite betrifft. Diese "Fahrstuhl-Variable" mit der ersten freien Stelle macht ja vieles möglich

    Schlechte Nachricht:

    Ich komme noch nicht mit dem Cursormenü klar, wie ich es integrieren kann

    Der Cursor muss doch auf jeder Seite als letztes angezeigt werden (als höchstes Picture), damit man ihn auch über den ganzen Aufträgen sehen kann.

    Ich habe es bisher so verstanden:

    Aufruf des Logbuches
    Show Picture = Hintergrund
    Seitenende/anfang ermitteln
    Aufträge anzeigen (Call Event)

    Nun fehlt mir aber der Ansatz, wie ich den Cursor dort anbringe und dass bei drücken der Pfeiltasten oben/unten zwischen den Aufträgen gewählt wird, bei Enter angezeigt sowie links/rechts blättern zwischen den Seiten - schließen ESC, aber das wäre klar.

    Nun müsste ich das aber für jede Seite einstellen, wäre es dann nicht besser, für jede Seite ein CE zu machen oder klappt das mit einem einzeigen, wo alles drin passiert (inklusive anzeigen der aufträge, cursor usw?) ?

    Blicke da noch nicht ganz durch

  11. #11
    Du hast also nur ein Problem dabei wie man den Cursor bewegen kann?
    Das dürfte auch bei Methode 1 nicht so schwer sein. Allerdings müssen wir hierbei beachten, dass der Cursor nicht wie bei Methode 2 auch auf leere Felder zeigen darf. Schließlich soll man nicht weitergehen könnten wenn nichts mehr kommt.
    Zuerst das einfachere, die hoch/runter Bewegung.
    Wie oben gesagt müssen wir vor jeder Bewegung überprüfen, ob die nächste Stelle frei ist. Wenn du dich noch erinnerst ist in der Variable "Aktuell" gespeichert, an welcher Stelle der Liste wir uns gerade befinden. Mit der Variable "Kontrolle" schauen wir nach, was in der Schublade bei "Aktuell" drinn ist. Ist sie leer, ist die Liste zuende, daher dürfen wir dort nicht weitergehen.
    Um die Cursorbewegung jedoch gut hinzubekommen sollten wir auch noch eine Variable "Menüposition" einführen die den Cursor steuert.
    Der Cursor selbst ist völlig losgelöst vom Auftrag auf den er gerade Zeigt, d.h. wir können ihn - abgesehen von der obigen Einschränkung - völlig frei bewegen.
    Die Berechnung der Cursorposition mache ich so:
    Zitat Zitat
    Cursor bewegen

    <>Change Variable "Cursor X", set 80
    <>Change Variable "Cursor Y", set "Menüposition"
    <>Change Variable "Cursor Y" * 12
    <>Change Variable "Cursor Y" + 90
    <>Move Picture '20' "Questlog Cursor" to ["Cursor X" | "Cursor Y"] in 0,1 secs
    <>
    In diesem Fall ständen deine Einträge jeweils 12 Pixel auseinander, hätten alle die X-Koordinate 80 und der erste Eintrag hätte die Y-Koordinate 102.
    Anstatt jedes Mal bei einer Bewegung des Cursors die Variablen manuell anzupassen, callt man einfach dieses Event.
    Damit können wir schonmal unseren Cursor bewegen, indem wir die Menüposition ändern.
    Nun aber zur konkreten Bewegung:
    Zitat Zitat
    Questlog (Auszug)

    <>Enter Passwort "QL Passwort" [1,2,3,4;5;6] [wait until key hit]
    <>Fork Variable "QL Passwort" = 1
    <><>Change Variable "Menüposition" + 1
    <><>Fork Variable "Menüposition" >= 6
    <><><>Change Variable "Menüposition", set 1
    <><>End:
    <><>Change Variable "Aktuell", set "Seite Anfange"
    <><>Change Variable "Aktuell" + "Menüposition"
    <><>Change Variable "Aktuell" - 1
    <><>Change Variable "Kontrolle", set [VarNr: "Aktuell"]
    <><>Fork Variable "Kontrolle" != 0
    <><><>Play SE "Cursor"
    <><><>Call Event: "Cursor bewegen"
    <><>Else:
    <><><>Play SE "Buzzer"
    <><><>Change Variable "Menüposition" - 1
    <><>End:
    <>Else:
    <> // Hier nochmal für Pfeil-hoch
    <>End:
    <>
    Was genau wird hier gemacht?
    Als erstes wieder ein Enter Passwort. Drückt der Spieler Pfeil-unten soll der Cursor abwärts bewegt werden. Makerintern tun wir das erstmal ohne Kontrolle. Die Menüposition wird um 1 erhöht. Sollten wir damit bereits über das Maximum von 5 geraten sein (es gibt schließlich nur 5 Einträge pro Seite) wird sie gleich wieder auf 1 gesetzt. Nun muss die entscheidende Abfrage getätigt werden. Dazu bewegen wir unseren Aktuell-Fahrstuhl zu jener Schublade auf die unser Cursor gerade zeigt. Der Cursor selbst weiß nicht auf welche Schublade er zeigt. Er weiß nur wie hoch diese in Relation zum Fahrstuhl "Seiten Anfang" steht. Der Fahrstuhl "Aktuell" muss also erstmal auf die Höhe von "Seite Anfang" fahren und dann nochmal um das höher was der Fahrstuhl "Cursor" höher ist. Es muss daraufhin noch - 1 gerechnet werden, da die Menüposition des Cursors bei 1 startet. 1 bedeutet aber bildlich, dass die Fahrstühle "Cursor" und "Seite Anfang" auf einer Höhe sind. Wenn ich einfach rechnen würde:
    Aktuell = Seite Anfang + Menüposition
    wäre der Aktuell Fahrstuhl immer eine Etage zu hoch. Daher das - 1.
    So, nun zeigt Aktuell auf die Schulbade zu der der Spieler den Cursor bewegen will. Also öffnen wir sie (durch die Variable "Kontrolle") und schauen nach was drinn ist. Ist ihr Inhalt != (ungleich) 0, sie beinhaltet also einen Auftrag, können wir den Sound zur Cursorbewegung abspielen und den Cursor nachrücken. Mission erfolgreich.
    Sollte sie aber leer sein, ist das Ende der Liste erreicht. Wir spielen einen Verweigerungs-Sound und setzen die Menüposition wieder zurück (wir haben sie erst um 1 erhöht, danach müssen wir sie wieder um 1 senken).
    Fertig ist die vertikale Bewegung.
    Nun zum umblättern der Seite. Dazu müssen wir wieder erstmal wissen ob es überhaupt noch Einträge auf der nächsten Seite gibt.
    Dazu bemühen wir wieder den selben Code wie oben, diesmal setzen wir nur den Aktuell-Fahrstuhl auf das Ende der Seite und schicken ihn dann eins weiter hoch. Damit hat er automatisch den theoretisch ersten Eintrag der nächsten Seite erreicht. Ist diese Schublade nicht leer, dürfen wir umblättern.
    Der Code lautet also:
    Zitat Zitat
    Umblättern (nur Kontrolle)

    <>Change Variable "Aktuell", set "Seite Ende"
    <>Change Variable "Aktuell" + 1
    <>Change Variable "Kontrolle", set [VarNr: "Aktuell"]
    <>Fork Variable "Kontrolle" != 0
    <><> // wir dürfen umblättern
    <>Else:
    <><> // nächste Seite wäre leer. Umblättern nicht erlaubt
    <>End:
    <>
    Damit wäre das erledigt.
    Nun können wir uns dem umblättern zuwenden. Das sähe so aus:
    Zitat Zitat
    <>Change Variable "Seite Anfang", set "Seite Ende"
    <>Change Variable "Seite Anfang" + 1
    <>Change Variable "Seite Ende" + 5
    <>
    Da wir 5 Einträge pro Seite haben muss "Seite Ende" um 5 erhöht werden. zuvor können wir aber noch "Seite Anfang" anpassen, indem wir den Fahrstuhl eine Etage höher fahren als "Seite Ende" vorher war. (Natürlich wird dieser Code nur dann ausgeführt wenn die oben angegebene Kontrolle positiv war.)
    Allerdings kann es nun noch sein, dass zwar der erste Eintrag der Seite belegt ist, der Rest aber nicht. Daher müssen wir nun eine Schleife bauen, die das Seitenende so lange zurückzieht, bis es auf eine volle Schublade zeigt:
    Zitat Zitat
    <>!Lable 1!
    <>Change Variable "Aktuell", set "Seite Ende"
    <>Change Variable "Kontrolle", set [VarNr: "Aktuell"]
    <>Fork Variable "Kontrolle" = 0
    <><>Change Variable "Seite Ende" - 1
    <><>!Goto Lable 1!
    <>End:
    <>
    Da durch das umblättern nun auch der Cursor in ein leeres Feld projiziert werden könnte müssen wir auch das kontrollieren:
    Zitat Zitat
    <>Change Variable "Cursor Kontrolle", set "Seite Ende"
    <>Change Variable "Cursor Kontrolle" - "Seite Anfang"
    <>Change Variable "Cursor Kontrolle" + 1
    <>Fork Variable "Menüposition" > "Cursor Kontrolle"
    <><>Change Variable "Menüposition", set "Cursor Kontrolle"
    <>End:
    <>
    Was wird hier nun wieder gerechnet?
    Die Frage ist ja, ob der Cursor in ein leeres Feld zeigt. Leere Felder gibt es nur hinter dem Seitenende. Faktisch müssen wir also kontrollieren, ob der Cursor hinter das Seitenende zeigt. Da aber beide Variablen völlig unterschiedliche Werte haben ("Seite Ende" zeigt irgendwo in die Liste und kann leicht einen Wert wie 2356 haben, wärend der Cursor über die Menüposition gesteuert wird, die sich strikt im Rahmen von 1-5 erstreckt) müssen wir irgendwie umrechnen. Das geht am besten mit der Variable "Seite Anfang". Letztendlich darf der "Cursor"-Fahrstuhl einfach nicht mehr Etagen höher als der "Seite Anfang"-Fahrstuhl sein, wie es der "Seite Ende"-Fahrstuhl ist. Daher errechne ich, wie viele Etagen der "Seite Ende"-Fahrstuhl höher als der "Seite Anfang"-Fahrstuhl ist. Das geht einfach mit:
    "Seite Ende" - "Seite Anfang"
    Das Ergebnis wäre theoretisch die Menüposition von "Seite Ende" - 1.
    Daher rechne ich noch + 1 und habe die tatsächliche Menüposition von "Seite Ende".
    Nun noch schnell kontrollieren ob die echte Menüposition (die des Cursors) über dem errechneten Wert liegt und sie in diesem Fall anpassen.
    Fertig!
    Noch ein kurzes Beispiel dazu:
    Seite Anfang liegt bei 1321, Seite Ende bei 1324. Der Cursor hat die Menüposition 5.
    Rechnung:
    1324 - 1321 = 3
    3 + 1 = 4
    Menüposition = 5
    5 > 4 => Cursor ist zu hoch
    Menüposition -> 4
    Stimmt

    Um einmal einen Überblich über den Code zu bekommen, hier der komplette Cursor-Steuerungs Code:
    Zitat Zitat
    Questlog (Nur Cursorbewegung)

    <>Enter Passwort "QL Passwort" [1,2,3,4;5;6] [wait until key hit]
    <>Fork Variable "QL Passwort" = 1
    <><>Change Variable "Menüposition" + 1
    <><>Fork Variable "Menüposition" >= 6
    <><><>Change Variable "Menüposition", set 1
    <><>End:
    <><>Change Variable "Aktuell", set "Seite Anfange"
    <><>Change Variable "Aktuell" + "Menüposition"
    <><>Change Variable "Aktuell" - 1
    <><>Change Variable "Kontrolle", set [VarNr: "Aktuell"]
    <><>Fork Variable "Kontrolle" != 0
    <><><>Play SE "Cursor"
    <><><>Call Event: "Cursor bewegen"
    <><>Else:
    <><><>Play SE "Buzzer"
    <><><>Change Variable "Menüposition" - 1
    <><>End:
    <>Else:
    <>Fork Variable "QL Passwort" = 4
    <><>Change Variable "Menüposition" - 1
    <><>Fork Variable "Menüposition" <= 0
    <><><>Change Variable "Menüposition", set 5
    <><>End:
    <><>Change Variable "Aktuell", set "Seite Anfange"
    <><>Change Variable "Aktuell" + "Menüposition"
    <><>Change Variable "Aktuell" - 1
    <><>Change Variable "Kontrolle", set [VarNr: "Aktuell"]
    <><>Fork Variable "Kontrolle" != 0
    <><><>Play SE "Cursor"
    <><><>Call Event: "Cursor bewegen"
    <><>Else:
    <><><>Play SE "Buzzer"
    <><><>Change Variable "Menüposition" + 1
    <><>End:
    <>Else:
    <>Fork Variable "QL Passwort" = 2
    <><>Change Variable "Aktuell", set "Seite Anfang"
    <><>Fork Variable "Aktuell" > 1000 // Der Anfang deiner Liste (ANPASSEN!)
    <><><>Play SE "Cursor"
    <><><>Change Variable "Seite Ende", set "Seite Anfang"
    <><><>Change Variable "Seite Ende" - 1
    <><><>Change Variable "Seite Anfang" - 5
    <><>Else:
    <><><>Play SE "Buzzer"
    <><>End:
    <>Else:
    <>Fork Variable "QL Passwort" = 3
    <><>Change Variable "Aktuell", set "Seite Anfang"
    <><>Change Variable "Aktuell" + 1
    <><>Change Variable "Kontrolle", set [VarNr: "Aktuell"]
    <><>Fork Variable "Kontrolle" != 0
    <><><>Play SE "Cursor"
    <><><>Change Variable "Seite Anfang", set "Seite Ende"
    <><><>Change Variable "Seite Anfang" + 1
    <><><>Change Variable "Seite Ende" + 5
    <><>Else:
    <><><>Play SE "Buzzer"
    <><>End:
    <>Else:
    <>...
    <>End:
    <>
    Das müsste es eigentlich sein. Den Code hab ich nicht getestet, d.h. es wird wohl hier und da noch ein paar kleine Bugs geben, aber in dem Fall kannst du ja wieder fragen

    mfg
    Phönix Tear

    P.S:
    Wenn ich mal wieder mehr Zeit hab kann ich ja auch mal dazu nen Skript machen xD

  12. #12
    Vielen Dank

    Mal sehen ob ich nachher Zeit finde, das Ganze mal auszubauen (bin derzeit nicht Zuhause und bleib noch ca. eine Woche weg) - habe ja extra den Maker hierhin mitgenommen um an diesem Logbuch zu werkeln, bis ich wieder Zuhause bin. Hoffe ja, dass ich es eventuell schaffe, um es dann sobald ich zurück bin ins Hauptprojekt einzubauen Das einfache Logbuch (bestehend aus Text) habe ich ja geschafft, könnte dieses auch nehmen. Nur möchte ich das andere auch umsetzen können, kann doch nicht so schwer sein, menno! ()

    Edit:

    Bin jetzt schon so ziemlich weit, müsste noch den Cursor einbauen. Folgendes habe ich erstellt:

    Common Event: Zur Freien Stelle
    Common Event: Aufruf des Logbuches (zeigt hintergrund an und leitet an nächstes CE weiter)
    Common Event: Logbuch anzeigen
    Common Event: Aufträge anzeigen

    Nun habe ich folgendes Problem: Habe mal einen NPC hineingestellt und ihn den 1. Auftrag vergeben lassen (Call Event Zur Ersten freien Stelle + Set Var. Aktuell 1) - Aufgrund der Schleife in diesem CE wird aber das gesamte Spiel geblockt sobald ich den NPC anspreche.

    Also irgendwie weiß ich nicht so recht mit dem Fahrstuhl. Wäre dann zwar einfacher zu kopieren, aber ich komme besser damit klar, wenn ich für jeden Auftrag manuell eine Variable vergebe, und diese dann bei aktiviert auf 1 setze und wenn sie erledigt ist auf 2. Irgendwas scheint da nicht klappen zu wollen, >_<

    Geändert von Jadoo (16.04.2007 um 00:16 Uhr)

  13. #13
    Hallo,

    wollte nur eine Rückmeldung geben. Ich bedanke mich nochmal für die Hilfe. Habe mich allerdings anders entschieden: Ich werde eine einfache Version des Logbuches nehmen, habe es auch schon eingebaut. Ein paar schöne Grafiken gebastelt und: mir gefällts. Und es ist leichter zu verwalten.

    Habe mir aber die Tutorials ausgedruckt und werde sie mir bei Gelegenheit nochmal ansehen. Das Testprojekt ist ja auch noch da, wenn ich da mal Zeit und Lust für habe schau ichs mir wieder an.

    Ich habe noch einige Sachen mehr mit dem Menü vor, und da ich gerne am Spiel weiterarbeiten möchte, lass ichs mit dem aufwendigen Logbuch erstmal sein. Außerdem ist es ja mein erstes Spiel

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •