EventsProfessional  Einstieg und Verlassen des Shops
Vorüberlegungen I - Vorarbeit

Erinnert euch an das Inventar von Final Fantasy VI, das im Kapitel rund um das Inventar bereits erwähnt wurde... und euer Inventar selbst. Dort hattet ihr ja einen Cursor-Helden angelegt, der auch hier wieder zum Einsatz kommt. Ebenso wie beim Inventar auch soll bei den Shops wieder eine schwarze Karte zwischengeschaltet werden, auf der dann die Heldentruppe durch den Cursor ausgetauscht wird, abnorme Zustände vorübergehend aufgehoben werden und dergleichen.

. Zuallererst müsst ihr in der Datenbank einen neuen Helden anlegen, den ihr einfach nur "Cursor" nennt. Das wichtige hierbei ist, dass dieser neue "Hauptcharakter" als CharSet das einer Hand mit gestrecktem Zeigefinger zugewiesen bekkommt. Für die Darstellung des Cursors soll die dem E-Book beigefügte Zeiger-Grafik dienen.
 
. Verlasst die Datenbank und legt eine neue Karte an, der ihr einen Namen wie "Inventar In/Out" gebt. Wählt als ChipSet dafür einen beliebigen aus, von dem ihr wisst, dass dieser einen komplett schwarzen Chip hat. Dieser soll später alles, was sich auf dieser Karte befinden wird, überdecken.
 
warning Legt in der Datenbank einen neuen ChipSet-Eintrag an und deklariert einen der schwarzen Chips als überdeckend (mit dem Stern).
Vorüberlegungen II - Der Weg auf die "schwarze Karte" (Shop In/Out)

Ihr habt nun unter Anderem die schwarze Karte angelegt. Die darauf positionierten, schwarzen Chips sollen alles, was sich darunter befinden kann, verdecken. Doch wie kommen eure Hauptcharaktere auf die schwarze Karte?

. Das ist die Aufgabe des Kaufmanns, eines auf der Karte befindlichen Ereignisses, dem ihr aus all euren CharSets das eines Kaufmanns geben solltet. Gestartet werden soll es durch Drücken der Taste [ENTER]
 
. Beginnen soll alles damit, dass der Händler die Heldentruppe begrüßt und sie fragt, ob sie mit ihm handeln möchten oder nicht,
 
. Ein darauf folgendes Auswahlmenü soll die Möglichkeiten "Ja, lasst uns handeln" und "Nein" bieten.
 
. Falls "Nein" gewählt wurde, soll nichts weiter geschehen.
 
. Wurde "Ja, lasst uns handeln" gewählt, soll zuerst die aktuelle Heldenposition in drei Variablen gemerkt werden.
 
. Direkt danach ist eine Variable "Shop-ID" nötig, mit der dann von der schwarzen Karte aus die einzelnen Shopkarten angesteuert werden sollen. In unserem Beispiel soll eine "1" in die Variable geschrieben werden, da es der erste Shop ist.
 
. Direkt danach folgt ein Ereignis, das die Heldenposition speichert (Memorize Place/Heldenposition speichern). Wählt ihr für die Karten-ID, X- und Y-Koordinaten jeweils eigene, noch nicht benutzte Variablen aus. Wahlweise könnt ihr auch die des eigenen Inventars weiterverwenden.
 
. Nun soll die Heldentruppe auf die schwarze Karte "Shop - In/Out" teleportiert werden.
Darstellung der Stichpunkte in MML
 Kaufmann-Ereignis
[Nachricht]
    [Händler:]
    [Hallo... wollt ihr etwas an- oder]
    [verkaufen?]
[Nachricht]
    [Held:]
  [Ja, lasst uns handeln...]
  [Heldenposition speichern] [Kartenvariable [Karten-ID]]
    [X-Variable [Held-X]]
    [Y-Variable [Held-Y]]
[Variable [Shop-ID]] [<-- [Wert setzen] [1]]
[Teleportieren nach [Shop In/Out]]
transparent transparent
  [Nein...]
   
Der erstellte Maker-Code
Im englischem Maker
<>Message: Händler:
:        : Hallo... wollt ihr etwas an- oder
:        : verkaufen?
<>Message: Held:
<>Show Choice:Ja, lasst uns Handeln/Nein...
:[Ja, lasst uns Handeln] Case
 <>Memorize Place:Map[aaaa], X[bbbb], Y[cccc]
 <>Change Var: Var[xxxx: Shop-ID] (Set)- 1
 <>Teleport: 00aa: Shop - In/Out (___,___)
 <>
:[Nein...] Case
 <>
:End Case
<>
Im deutschem Maker (V1.10c)
<>Nachr: Händler:
:      : Hallo... wollt ihr etwas an- oder
:      : verkaufen?
<>Nachr: Held:
<>Auswahlmenü:Ja, lasst uns Handeln/Nein...
:[Ja, lasst uns Handeln] Fall
 <>Position merken:[aaaa], [bbbb], [cccc]
 <>Var. ändern: [xxxx: Shop-ID] Wert, 1
 <>Teleport: 00aa: Shop - In/Out (___,___)
 <>
:[Nein...] Fall
 <>
:End Fall
<>
Vorüberlegungen III - Von der "schwarzen Karte" in den Shop

Nun sind eure Hauptcharaktere auf der schwarzen Karte "Shop In/Out" angekommen. Von hier sollen zwei Dinge passieren:
Wenn eure Helden von der Spielwelt aus auf die schwarze Karte gelangt sind, sollen sie auf der Hauptseite des zuvor durch die Variable "Shop-ID" bestimmten Shops gelangen.
Sind sie vom Shop aus auf der schwarzen Karte gelandet, so sollen sie in ihrer Ursprungsbesetzung auf die Position der Spielwelt zurückgebracht werden, von wo aus sie zu Beginn auf die schwarze Karte teleportiert wurden. Außerdem soll sich das teleportieren in und aus dem Shop mit jeder (!) Heldentruppenzusammensetzung machen lassen, egal welcher der Hauptcharaktere sich in der Heldentruppe befindet. Und da in der Datenbank 4999 Hauptcharaktere angelegt werden können (einer davon ist ja der Cursor), klingt dies nach viel Arbeit...

. Ein normales Ereignis, das automatisch startet, wird auf der schwarzen Karte "Shop In/Out" angelegt.
 
. Das erste Ereigniskommando, das ihr braucht, ist eine Bedingung. Diese soll abfragen, ob ein Schalter namens "Im Shop" auf AUS steht. Einen Nein-Fall brauchen wir hier unbedingt (!). Was den Schalter betrifft, wählt einen neuen, noch unbenutzten Schalter hierfür aus.
 
. Im Ja-Fall der Bedingung beginnt alles damit, dass ihr ein Wettereffekt-Kommando anlegt, das den Wettereffekt "None/Keiner" aufruft.
 
. Direkt danach soll der Schalter "Geldzähler läuft" auf AN gesetzt werden. Wann dieser zum Einsatz kommt, folgt später, wenn es um das Anlegen eines Geld-Zählers geht.
 
. Nun wird es kompliziert:
Legt eine noch unbenutzte, freie Variable an, der ihr den Namen "Held-Variable-Nr" gebt. Tragt hier die Zahl der direkt nachfolgenden Variable ein. (Benennt gleichzeitig die vier nachfolgenden Variablen "Held #1", "Held #2", "Held #3" und "Held #4", verwendet sie jedoch noch nicht)
Beispiel: Wenn die "Held-Variable-Nr" die Variablennummer 20 hat, so schreibt in die Variable die Zahl 21 hinein.
 
. Nun soll der Charakter "Cursor" der Heldentruppe hinzugefügt werden.
 
. Direkt danach muss der Schalter "Im Shop" auf AN gestellt werden
 
. Nun soll noch das Ziel, zu dem der Cursor teleportiert werden soll, bestimmt werden. Hierfür braucht ihr eine Bedingung, die abfragt, welcher Wert in der Variable "Shop-ID" steht. Da wir hier unseren ersten Shop erstellen und zuvor beim Kaufmann der Wert 1 in die Variable geschrieben wurde, soll die Bedingung nun abfragen, ob der Wert der Variable "Shop-ID" gleich 1 ist.
Einen Nein-Fall braucht ihr, wenn ihr noch mehr eigene Shops anlegen werdet.
 
. Im Ja-Fall soll die Heldentruppe (eigentlich nur der Cursor) auf die Karte des entsprechenden Shops teleportiert werden. In unserem Beispiel ist das die zuvor erstellte Karte "Shop - #1
 
. Im Nein-Fall der ganz zu Anfang angelegten Bedingung (Nun wird der Shop verlassen) fliegt zuerst einmal der Charakter "Cursor" aus der Heldengruppe raus.
 
. Direkt danach legt ihr eine Bedingung an, die abfragt, ob der Wert der Variable "Held #1" anders als 0 ist. Einen Nein-Fall braucht ihr hier nicht.
Hintergrund: Es kann keinen Helden mit der Nummer 0 geben. Hat die Variable "Held #1" also den Wert 0, ist keine Heldennummer gespeichert.
 
. Im Ja-Fall der Bedingung soll nun ein Hauptcharakter der Heldentruppe hinzugefügt werden. Welcher das genau ist, soll durch die Variable "Held #1" bestimmt werden.
 
. Direkt danach legt ihr eine neue Bedingung an. Diese soll abfragen, ob der Wert der Variable "Zustand Held 1" genau 2 ist. Einen Nein-Fall brauchen wir hier nicht (außer ihr habt mehr abnorme Zustände angelegt).
Hintergrund: 1 ist ja dafür, dass der entsprechende Held tot oder bewusstlos ist. Da wir zu Beginn nichts an diesem Zustand "Tot" geändert oder ihn aufgehoben haben, brauchen wir uns auch hier nicht wieder um das neue Erleiden des Zustands zu kümmern und können gleich mit Zustand 2, der Vergiftung, weitermachen.
 
. Im Ja-Fall der Bedingung soll der Held mit der Nummer aus der Variable "Held #1" den Zustand "Vergiftung" erleiden.
 
. Wiederholt direkt unter der Bedingung, welche die Heldennummer prüft (die Bedingung des dunkelblau hervorgehobenen Bereichs) das dunkelblau hervorgehobene für die Variablen "Held #2", "Held #3" und "Held #4".
 
. Habt ihr dies getan, so müssen (!!!) die Variablen "Held #1", "Held #2", "Held #3" und "Held #4" auf 0 gesetzt werden. Das gleiche macht ihr mit den Variablen "Zustand Held 1" bis "Zustand Held 4"
 
. Danach soll der Schalter "Im Shop" auf AUS gestellt werden.
 
. Die Heldentruppe (nun wieder in vollständiger Besetzung) soll nun an den durch das zuvor angelegte "Common Event/Häufig benötigte Ereignis" gemerkten Ort zurückteleportiert werden ("Goto Memorized Place/zu gespeicherter Position teleportieren"). Verwendet hierfür die selben Variablen, die bereits beim "Common Event/Häufig benötigtem Ereignis" die Heldenposition gespeichert haben (!!!)
 
. Führt zum Abschluss im Kapitel [Anzeige abnormer Zustände] die Punkte IIa und IIb aus. Habt ihr dies erledigt, verfahrt nach dem dort erwähntem Punkt IIc, um die dort genannten Common Events/Häufig benötigten Ereignisse "Conditions Remove" und "Conditions - Add" aufzurufen.
Darstellung der Stichpunkte in MML

Die Änderungen, die zum bereits vorhandenem Code des Ereignisses auf der Karte "Inventory In/Out" hinzu kamen, sind fett hervorgehoben.
* Tragt hier anstelle von xxx1 die wirkliche Nummer der Variable von Hand ein, die ihr "Held #1" genannt habt.
** Trag hier anstelle von yyy1 die wirkliche Nummer der Variable von Hand ein, die ihr "Zustand Held 1" genannt habt

 Inventar-Teleport-Ereignis
[Ereignisseite 1][Automatisch]
[Bedingung][Schalter][Im Shop][AUS]
  [Ja-Fall]
  [Wettereffekt][Effektart [keiner]]
[Schalter [Geldzähler läuft]] [<-- AN]
[Variable [Held-Variable-Nr]][<-- [Wert setzen][xxx1]]*
[Ereignisaufruf [Conditions Remove]]
[Bedingung][Held][Alex][Im Team]
  [Ja-Fall]
  [Variable [Held-Variable-Nr] übergibt Nummer][<-- [Wert setzen][1]]
[Variable [Held-Variable-Nr]] [<-- [+] [1]]
[Hauptcharakter] [-] [Held: [Alex]]
[Variable [Zustände No]][<-- [+][1]]
[Bedingung][Held][Annie][Im Team]
  [Ja-Fall]
  [Variable [Held-Variable-Nr] übergibt Nummer][<-- [Wert setzen][2]]
[Variable [Held-Variable-Nr]] [<-- [+] [1]]
[Hauptcharakter] [-] [Held: [Annie]]
[Variable [Zustände No]][<-- [+][1]]
[Hauptcharakter] [+] [Held: [Cursor]]
[Schalter [Im Shop]] [<-- AN]
[Bedingung][Variable [Shop-ID][gleich][1]]
  [Ja-Fall]
  [Teleportation nach][Shop - #1]
transparent transparent
  [Nein-Fall]
  /*
 * Hier würden für alle weiteren Shops Bedingungen folgen, die
 * beispielsweise die Werte 2, 3 und so weiter in der Variable
 * Shop-ID abfragen.
 */
transparent transparent
  [Nein-Fall]
  [Hauptcharakter] [-] [Held: [Cursor]]
[Bedingung][Variable][Held #1][anders][0]
  [Ja-Fall]
  [Hauptcharakter][+][Heldvariable: [Held #1]]
[Bedingung][Variable][Held #2][anders][0]
  [Ja-Fall]
  [Hauptcharakter][+][Heldvariable: [Held #2]]
[Bedingung][Variable][Held #3][anders][0]
  [Ja-Fall]
  [Hauptcharakter][+][Heldvariable: [Held #3]]
[Bedingung][Variable][Held #4][anders][0]
  [Ja-Fall]
  [Hauptcharakter][+][Heldvariable: [Held #4]]
[Ereignisaufruf [Conditions - Add]
[Variable von [Held #1] bis [Held #4] [<-- [Wert setzen] [0]]
[Variable von [Zustand Held 1] bis [Zustand Held 4][<-- [Wert setzen] [0]]
[Schalter [Im Shop]] [<-- AUS]
[Heldenposition teleport] [Kartenvariable [aaaa]]
    [X-Variable [bbbb]]
    [Y-Variable [cccc]]
Der erstellte Maker-Code
Im englischem Maker
<>If Switch [xxxy: Im Shop] is OFF
 <>Call Weather Effect: None/Off
 <>Change Switch: Var[asdf: Geldzähler läuft] Switch ON
 <>Change Var: Var[aaab: Held-Variable-Nr] (Set)-xxx1
 <>Call Event: Conditions Remove
 <>If Alex is in the Party
  <>Change Var: [Var[aaab]] (Set)-1
  <>Change Var: Var[aaab: Held-Variable-Nr] (+)-1
  <>Change Hero's Party: (Alex) (Rem)
  <>
 :End Case
 <>If Annie is in the Party
  <>Change Var: [Var[aaab]] (Set)-1
  <>Change Var: Var[aaab: Held-Variable-Nr] (+)-2
  <>Change Hero's Party: (Annie) (Rem)
  <>
 :End Case
 <>Change Hero's Party: (Cursor) (Add)
 <>Change Switch: Var[xxxy: Im Shop] Switch ON
 <>If Var(xxxx: Shop-ID] 1
  <>Teleport: ooo1: Shop - #1 (___,___)
  <>
 :End Case
 <>

:Else Calse
 <>Change Hero's Party: (Cursor) (Rem)
 <>If Var(aaa1: Held #1) 0 (<>)
  <>Change Hero's Party: (V[aaa1]) (Add)
  <>
 :End Case
 <>If Var(aaa2: Held #2) 0 (<>)
  <>Change Hero's Party: (V[aaa2]) (Add)
  <>
 :End Case
 <>If Var(aaa1: Held #3) 0 (<>)
  <>Change Hero's Party: (V[aaa3]) (Add)
  <>
 :End Case
 <>If Var(aaa1: Held #4) 0 (<>)
  <>Change Hero's Party: (V[aaa4]) (Add)
  <>
 :End Case
 <>Call Event: Conditions - Add
 <>Change Var: [aaa1 to aaa4] (Set)-0
 <>Change Switch: Var[xxxy: Im Shop] Switch OFF
 <>Goto Memorized Place: V[aaaa] (V[bbbb], V[cccc])
 <>

:End Case
<>
Im deutschem Maker (V1.10c)
<>Bedingung:Schalter[xxxy: Im Shop]- AUS
 <>Wettereffekt aufruf: Kein
 <>Schalter ändern:[asdf: Geldzähler läuft]-[AN]
 <>Var. ändern:[aaab: Held-Variable-Nr]Wert, xxx1
 <>Var. ändern:[bbba: Zustandsvar No]Wert, yyy1
 <>Ereignis aufrufen: Conditions Remove
 <>Bedingung:Alex ist in Partie
  <>Var. ändern:[V[aaab]]Wert, 1
  <>Var. ändern:[aaab: Held-Variable-Nr]+, 1
  <>Heldenpartie ändern:Alex ->-
  <>
 :End-Fall
 <>Bedingung:Annie ist in Partie
  <>Var. ändern:[V[aaab]]Wert, 2
  <>Var. ändern:[aaab: Held-Variable-Nr]+, 1
  <>Heldenpartie ändern:Annie ->-
  <>
 :End-Fall
 <>Heldenpartie ändern:Cursor->+
 <>Schalter ändern:[xxxy: Im Shop]-[AN]
 <>Bedingung:Varbl[xxxx: Shop-ID-1
  <>Teleport: ooo1: Shop - #1 (___,___)
  <>
 :End-Fall
 <>

:Ansonsten
 <>Heldenpartie ändern:Cursor->-
 <>Bedingung:Varbl[aaa1: Held #1]-0andr
  <>Heldenpartie ändern:V[aaa1]->+
  <>
 :End-Fall
 <>Bedingung:Varbl[aaa1: Held #2]-0andr
  <>Heldenpartie ändern:V[aaa2]->+
  <>
 :End-Fall
 <>Bedingung:Varbl[aaa1: Held #3]-0andr
  <>Heldenpartie ändern:V[aaa3]->+
  <>
 :End-Fall
 <>Bedingung:Varbl[aaa1: Held #4]-0andr
  <>Heldenpartie ändern:V[aaa4]->+
  <>
 :End-Fall
 <>Ereignis aufrufen: Conditions - Add
 <>Var. ändern: [aaa1*aaa4] Wert, 0
 <>Schalter ändern: [xxxy: Im Shop]-[AUS]
 <>Teleport z. gem. Pos: V[aaaa] (V[bbbb], V[cccc])
 <>

:End-Fall
<>
Vorüberlegungen IV - Die Taste [ESC]...

...dient standardmäßig zum Aufruf des Inventars, ganz gleich, ob es das Standard-Inventar des Makers oder ein eigens kreiertes ist. Und wenn sich eure Heldentruppe im Shop befindet und die Spieler dann [ESC] drücken, werden sie während des Shoppens im Inventar landen. Das ist bei den Maker-Standards nicht möglich und soll so auch in eurem eigens kreiertem Shop nicht möglich sein. Nur... wie lässt sich das verhindern?

. Gehen wir in unserem Beispiel davon aus, dass eure Heldentruppe von euch ein eigenes Inventar spendiert bekommen hat. Da habt ihr ein "häufig benötigtes Ereignis" angelegt, das eure Heldentruppe bei Drücken der Taste [ESC] direkt auf die Karte "Inventory In/Out" befördert, egal wo sie in eurer Spielwelt gerade sind. Um dieses Ereignis geht es nun.
 
. Begebt euch nun an die Stelle des Ereignisses, an dem eine Bedingung abfragt, ob der Schalter "Im Inventar?" auf "OFF/AUS" steht, genauer gesagt in den Ja-Fall dieser Bedingung. Hier legt ihr eine neue Bedingung an, die abfragt, ob der Schalter "Im Shop?" auf "OFF/AUS" steht. Ein Nein-Fall ist hier zwingend nötig.
 
. In den Ja-Fall dieser Bedingung verschiebt ihr die beiden Ereigniskommandos, die die Heldenposition speichern und die Heldentruppe auf die Karte "Inventory In/Out" teleportieren (Beide markieren, dann ausschneiden und im Ja-Fall der Bedingung, die den Schalter "Im Shop" abfragt, wieder einfügen).
 
. Im Nein-Fall der Bedingung hingegen soll die Heldentruppe lediglich auf die Karte "Shop In/Out" teleportiert werden.
Darstellung der Stichpunkte in MML

Die Änderungen, die zum bereits vorhandenem Code des Ereignisses auf der Karte "Inventory In/Out" hinzu kamen, sind fett hervorgehoben.

 Inventar-Teleport-Ereignis [parallel]
[Variable [Tastendruck]] [<-- ESC][warten]
[Bedingung][Variable][Tastendruck][gleich][6]
  [Ja-Fall]
  [Bedingung][Schalter][Im Inventar][AUS]
  [Ja-Fall]
  [Bedingung][Schalter][Im Shop?][AUS]
  [Ja-Fall]
  [Heldenposition speichern] [Kartenvariable [Karten-ID]]
    [X-Variable [X-Position]]
    [Y-Variable [Y-Position]]
[Teleportieren nach] [Inventar In/Out]
transparent transparent
  [Nein-Fall]
  [Teleportieren nach] [Shop In/Out]
transparent transparent
  [Nein-Fall]
  [Teleportieren nach] [Inventar In/Out]
Der erstellte Maker-Code
Im englischem Maker
<>Enter Password: Var[xxxx: Tastendruck]
<>If Var (xxxx: Tastendruck) 6
 <>If Switch (yyyy: Im Inventar) is OFF
  <>If Switch(xxxx: Im Shop?) is Off
   <>Memorize Place:Map[aaaa],X[bbbb],Y[cccc]
   <>Teleport: oooo:Inventar In/Out (000,000)
   <>
  :Else Case
   <>Teleport: ooo1:Shop In/Out (000,000)
   <>

 :Else Case
  <>Teleport: oooo:Inventar In/Out (000,000)
  <>

 :End Case
 <>
:End Case
<>
Im deutschem Maker (V1.10c)
<>Tasten abfragen:[xxxx: Tastendruck]
<>Bedingung: Varb[xxxx: Tastendruck]-6
 <>Bedingung: Schalter[yyyy: Im Inventar]-AUS
  <>Bedingung: Schalter[xxxx: Im Shop?}-AUS
   <>Position merken: [aaaa],[bbbb],[cccc]
   <>Teleport: oooo:Inventar In/Out (000,000)
   <>
  :Ansonsten
   <>Teleport: ooo1:Shop In/Out (000,000)
   <>

 :Ansonsten
  <>Teleport: oooo:Inventar In/Out (000,000)
  <>

 :End-Fall
 <>
:End-Fall
<>