rm2k kurs

itadakimasu

Legende
Mitglied seit
28.12.2001
Beiträge
849
jo, ich kopier den rm2k kurs mal von rpg2000.de hierher, falls wer mit dem maker probs hat, kann er dann hier nachsehen! Wenn er unnütz is, dann sollen ihn die Mods einfach löschen ;) (iss zwar viel zu lesen, aba der kurs hilft viel^^, und ich werde net alles kopieren, nur einige sachen.... :D )

Dieser Kurs enthääält: (die 3 wichtigsten dinge)

- 1. Switches
- 2. Variablen (besonders laaaang^^)
- 3. Forks

So, Teil 1, die Switches^^

Soo, jetzt wenden wir uns einem sehr wichtigen Kapitel der Rpg-Maker Programmierung zu, den Switches, bzw. den Schaltern. Damit kann man überprüfen, ob ein bestimmtes Ereignis schon eingetreten ist. Am besten erläutern wir das Mal an einem einfachen Beispiel. Erinnert ihr euch noch an den Soldaten, den wir in unsere Map gestzt haben? Ich hoffe ihr habt das Projekt noch nicht gelöscht, damit habe ich noch vieeeel vor. Also, klickt den Soldaten im Event modus doppelt an. Da könnt ihr jetzt wieder den Satz sehen, den ihr eingegebn habt. Nun klicken wir doppelt unter diesen Satz, und wählen bei den "Event Kommandos" in der linken Spalte "Change Switch" aus. Da sind wieder ein paar Optionen (Keine Angst, ALLE werden erklärt!). Zuerst wenden wir uns der Zeile "One:....." zu. Hier kannst du genau auswählen, welcher Switch an- oder ausgeschaltet werden soll. Ein Doppelklick in das Feld mit dem Inhalt "0001: StrongBox" und schon sind wir im Auswahlbereich. In der linken Spalte können wir zwischen den Switches 1 - 20, 21 - 40, ... auswählen. Dies geht nur bis 100, was für ein komplettes RPG doch ziemlich wenig wäre (ja, WENIG!). Deshalb könnt ihr unter "Max. Field Number" die Zahl der möglichen Switches bis auf 5000 heraufstellen. Lasst am besten jetzt aber erstmal alles so wie es ist, und wählt wieder die Switches 1 - 20 aus. In der rechten Spalte ist jetzt der 1. Switch ausgewählt, und in dem Eingabefeld unten rechts können wir den Namen ändern. Nennt ihn "GesprächSoldat". Es ist nützlich, den Switches immer sinnvolle Namen zu geben, weil man sonst leicht den Überblick verlieren könnte. Jetzt bestätigen wir mit ok, und sind schon wieder ein Menü weiter vorher. Eigentlich könnten wir jetzt alles so lassen, aber wie versprochen, will ich versuchen, den Rest auch noch zu erklären. Die nächste Funktion ist "Range", bei der Man einen Starwert, und einen Endwert auswählen kann. Mit dieser Funktion ist es möglich, ganze Gruppen von Switches zu aktivieren/deaktivieren, was durchaus nützlich sein kann. Wenn zum Beispiel in einer bestimmten Situation mehrere Switches aktiviert werden (5, 10, mehr..), und die nachher wieder abgeschaltet werden müssen, spart es viel Zeit, mit diese Funktion einfach die ganze Gruppe auszuschalten. Die dritte Auswahlmöglichkeit, "Variab" steht für die Funktion, dass man einen bestimmten Switch an/abschalten kann, der durch den Wert einer Variable bestimmt wird. Was es genau mit den Variablen auf sich hat, werde ich in einem folgenden Teil noch erklären. Nun wählen wir also wieder die erste Funktion ("One", mit GesprächSoldat) aus. Unter der Rubrik Set können wir nun die Aktion definieren, die mit diesem Switch gemacht wird. Durch "ON" wird der Switch eingeschaltet, durch "OFF" wieder aus ^^. Wenn ihr "ON/OFF Trigger" aktiviert, wird der Switch hier wenn er schon an ist, wieder ausgeschaltet, und wenn er aus ist, wieder an. Wir lassen ihn jetzt aber auf "ON" und bestätigen das ganze.
Toll...Jetzt haben wir den Switch angemacht..Was soll uns das denn bringen? Ziemlcih viel, nun vielleicht nicht gerade in dieser Situation, aber sonst schon... Ganz oben links, rechts naben dem Namen des Events ist das Feld "New Page". Damit kann man eine zweite "Seite" des Events erstellen. Klickt es an, und schon könnt ihr sehen, dass man nun zwischen den beiden Seite hin und her wechseln kann. Nun bleiben wir also auf Seite zwei. Die Funktion des Switches soll in diesem Fall sein, dass der Soldat etwas anderes sagt, wenn man ihm zum zweiten Mal anspricht. In dem Bereich unten links, den wir ja schon bei Punkt 2 ausführlich beschrieben haben, könnten wir jetzt einstellen, dass sich der Soldat nach dem Gespräch anders bewegt, oder auch anders aussieht. Nun zurück zu dem Problem, dass der Soldat etwas anderes sagen soll. Oben links, in dem Feld Event Conditions interessiert uns jetzt zuerst die erste Zeile: "Switch". Wenn ihr hier das Häkchen macht, was ihr auch tun solltet, seht ihr, dass das graue Feld daneben weiß wird, und "GesprächSoldat" drinstehen sollte. Wenn das so ist, ist gut, wenn nicht klickt auf die drei Punkte danebn, und wählt den Switch aus. Da wir dies eingestellt haben, wird die zweite Seite aufgerufen, sobald der Switch "GesprächSoldat" aktiviert ist. Die zweite Zeile, auch Switch kann ebenfalls aktiviert werden, um in anderen Fällen sicher zu gehen, dass die seite nur anspringt, wenn zwei bestimmte Switches aktiviert sind. Die anderen Zeilen lassen wir zuerst mal außen vor.
Ins Feld rechts fügen wir jetzt wie gewohnt das Gesicht das Soldaten ein (Falls ihr es vergessen habt, über Select Face Graphic) und schreiben einen neuen Text darunter, zum Beispiel "Was wollt Ihr noch?". So, ich hoffe ihr habt die Funktionen von Switches verstanden. Mit Switches kann man überprüfen, ob ein bestimmtes Ereignis schon in Gang getreten ist, etc.

2. Variablen :roll:

A - was'n das?
Zu aller erst: Dieses Kapitel wird vom Aufbau sicherlich etwas an Seijuros geniales Tutorial zum gleichen Thema erinnern.

Mit Variablen hatte höchstwahrscheinlich jeder von euch schon einmal (z.B. in der Schule) zu tun. Meistens werden Variablen in Zusammenhang mit der Mathematik gebraucht (Löse nach x auf, x², etc.). Daher sollten die meisten das schon wissen: Jede Variable steht für einen Wert. So kann man zum Beispiel sagen, dass X für die Zahl 5 steht.
So könnte man zum Beispiel jemanden im Maker sagen lassen: "Du hast X Äpfel gesammelt!". Das praktische daran ist, dass man nicht für jede Apfelzahl eine einzelne Message schreiben muss, sondern direkt einen allgemeingültigen Text für jeden X Wet hat.
Variablen sind auch für andere Dinge im Zusammenhang mit einem Kampfsystem etc. wichtig. So lassen sich die HP des Helden in einer Variable speichern und so weiter..

B - und wozu das alles??
Für einfach ALLES: Kampfsystem, (Zusatz)menüs, Minigames, Rätsel, Anzeigen von Pictures, ...
So gut wie jedes Script oder Tutorial verwendet Variablen, unter anderem auch das "professionelle" Tag/Nacht-System, das am Ende dieses Kursteils erklärt werden wird.

C - gehts hier mal los?
Ja.

C - Die einzelnen Funktionen
Da wir gerade die stinklangweiligen "Was bewirkt Feld XYZ"-Textmassen der Database hinter uns haben...
..machen wir genau das gleiche bei den Variablen! Juhuuuuu! Nun gut, vielleicht kann ichs ja etwas informativer gestalten..

One: Läuft genau wie bei den Switches. Hier wählt man die eine Variable aus, deren Wert verändert werden soll. Aus der altbekannten Auswahlliste lässt sich hier die gewünschte Variable auswählen, die maximale Anzahl an Variablen lässt sich durch "Max. Field Nr." verändern.

Range: Auch das kennt ihr vielleicht noch von den Switches. Hiermit lässt sich gleich ein ganzer Bereich von Variablen (dieser geht von der Variable aus dem ersten bis zu der aus dem zweiten Feld) verändern. So lassen sich nach einem Minigame zum Beispiel alle zugehörigen Variablen wieder auf 0 zurücksetzen.

Variab: Diese Funktion ist für Anfänger vielleicht nicht so interessant, aber für anspruchsvollere Funktionen (gibt bestimmt auch einfache Anwendungsmöglichkeiten) sehr nützlich. Hier wird nicht die Variable verändert, die man auswählt, sondern die Variable mit der Nummer, die dem Wert der Variable entspricht. Zu kompliziert?
Beispiel: Ihr wählt in diesem Feld Variable Nr. 10 aus. Der Wert dieser Variable wurde vorher auf 15 gesetzt. Nun wird Dank dieser Funktion Variable Nr. 15 verändert.

Das sind die drei Möglichkeiten zur Bestimmung der zu verändernden Variable(n). Als nächstes kann man die Rechenart auswählen.

Set: Die Variable wird auf einen bestimmten Wert gesetzt. Es ist völlig egal, ob ihr voriger Wert 0, 22, 3467 oder -12 war.

+: No Comment (Falls ihr das nicht versteht: Wir empfehlen den Maker grundsätzlich nicht für Kinder unterhalb des Grundschulalters.)

-, *, /: s.o.

Mod: Jaaa, das ist spannend, das ist nicht mal Grundwissen (außer wenn ihr Mathe/Informatik habt). Mit Mod wird der Rest der Ganzzahldivision ausgegeben, soll heißen: 43 Mod 7 = 1! Nicht verstanden?
Bei der Division von 43 mit 7 kommt 6 heraus mit dem Rest 1. Dieser Rest wird durch die Mod-Funktion ausgegeben.
Diese Funktion ist besonders praktisch um an einzelne Stellen einer Zahl heranzukommen. So wird bei 1234 Mod 10 die Zahl 4 ausgegeben. Teilen wir 1234 durch 10 erhalten wir beim Maker 123. 123 Mod 10 ist 3. 12 Mod 10 ist 2. So kann man zum Beispiel eine Zahl in die einzelnen Stellen zerlegen. (Was ihr wiederrum sehr praktisch finden werdet, solltet ihr euch jemals an ein eigenes Kampfsystem heranwagen.)

Die einzelnen Rechenarten haben wir nun schnell hinter uns gebracht, kommen wir zum Hauptteil. Hier wird festgelegt, auf welchen Wert die Variable gesetzt, bzw. welcher Wert hinzugefügt oder abgezogen werden soll.

Set: Hier wird die Variable auf den Wert gesetzt, den ihr auswählt (bzw. mit diesem Wert multipliziert, addiert,...). Diese Funktion ist eigentlich die Standartfunktion von Variablen, bzw. die am häufigsten verwendete.

Variable: Hier wird die Variable auf den Wert einer anderen Variablen gesetzt nämlich auf den Wert derer, die ihr auswählt.
Beispiel: Ihr habt die Variable "Held-HP", und die Variable "Held-Max-HP". Nun geht ihr zu irgendeinem Event bei dem Ihr voll geheilt werdet. Da macht ihr dann im Event die Funktion: Variable 0001: Held-HP, Set, Variable 0002: Held-Max-HP. Dadurch wird die aktuelle HP auf die maximale HP gesetzt.

Variable (No.): Diese Funktion ist ähnlich der oberen, wo man die Variable auswählte. Denn dieses Mal wird die aktuelle Variable nicht auf den Wert der hier gewählten gesetzt, sondern auf den Wert der Variable deren Nummer der hier gewählten entspricht.
Bsp: Ihr wählt hier Variable 5. Diese Variable hat den Wert 27. Und Variable Nummer 27 hat den Wert 321. Dann wird die oben gewählte Variable auf 321 gesetzt (bzw. dazu addiert, multipliziert, ...)

Rand.: Dieses Mal geht es um eine Zufallszahl, die zwischen der ersten und der zweiten eingabe liegt.
Beispiel: Wenn ihr ins erste Feld 7 und ins zweite Feld 15 eingebt, dann kann eure Variable auf 7, 8, 9, 10, 11, 12, 13, 14 und 15 gesetzt werden.

Item: Eine sehr praktische Funktion. In der erste Spalte wählt man ein beliebiges Objekt aus, in der zweiten Spalte kann man zwischen "Owned No." und "Equipped No." unterscheiden. Hierbei wird die Variable entweder auf die Zahl gesetzt, die der Anzahl der jeweiligen Items, die der Held mit sich rumträgt, entspricht (Owned), oder auf die Anzahl der jeweiligen Items, die die Gruppenmitglieder ausgerüstet haben. So kann man dann in einer Message anzeigen lassen: "Ahh, wie ich sehe habt ihr nur (Variable) Tränke!"

Hero: In der ersten Spalte wählt man einen Helden aus, in der zweiten einen bestimmten (Status)Wert, der mit diesem Helden zusammenängt. Auf diesen Wert wird dann jeweils die Variable gesetzt.

Level: Die Stufe des Helden
Exp.: Die Erfahrungspunkte
HP: Die aktuellen Lebenspunkte
MP: Die aktuellen Magiepunkte
Max. HP: Die maximale Lebensenergie
Max. MP: Das maximale Mana
Attack: Die Angriffsstärke
Defense: die Verteidigungskraft
Mind: Die Geistesstärke
Agility: Die Schnelligkeit
Arms No.: Die Nummer des ausgerüsteten Waffen-Objektes
Shield No.: Die Nummer des ausgerüsteten Schildes
Armor No.: Die Nummer der ausgerüsteten Rüstung
Helmet No.: Die Nummer des ausgerüsteten Helmes
Other No.: Die Nummer des ausgerüsteten Spezial-Objektes

All diese Werte sind später einmal sehr wichtig, wenn ihr euch an ein eigenes Menü oder Kampfsystem heranwagt.

Event: In der linken Spalte wählt man ein bestimmtes Ereignis aus, wozu aber auch Personen auf der Karte oder der Held gehören können. Rechts wählt man dann wieder einen bestimmten Wert aus, der mit dem Event zusammenhängt.

Map ID: Die Nummer der Karte, auf der das Event ist
X coordinate: Das xte Feld, auf dem sich das Event von links aus gesehen befindet
Y coordinate: Das xte Feld, auf dem sich das Event von oben aus gesehen befindet
Beyond Facing: Die Blickrichtung des Events: Unten = 2, Links = 4, Rechts = 6, Oben = 8
Scene X: Die Pixel X - Koordinate, wo sich das Event befindet. (ca. X coord. * 16)
Scene Y: Die Pixel Y - Koordinate, wo sich das Event befindet. (ca. Y coord. * 16)

Diese Funktionen werden in vielen Scripts verwendet, Funktionen wie die "Scene"-Befehle sind nützlich um Pictures bei/über dem Helden anzeigen zu lassen.

Other: Noch einige andere Werte, die nicht mit einem Ereignis, einem Helden oder Objekt zusammenhängen.

Money: Das Geld, das die Gruppe dabeihat
Timer Sceonds Left: Anzahl der restlichen Sekunden bei einer Timer-Funktion
Party Size: Anzahl der aktuellen Gruppenmitglieder
Number of Saves: Anzahl der bisherigen Speicherungen
Number of Battles: Anzahl der bisherigen Kämpfe
Number of Victories: Anzahl der Siege in diesen
Number of Defeats: Anzahl der Niederlagen
Number of Escapes: Anzahl der Fluchten
MIDI Play Pos.: Zeitliche Position innerhalb der aktuellen Musik (in Ticks (ca.1000/s)

Die meisten dieser Funktionen sind praktisch, wenn man ein eigenes Menü mit zusätlicher "Statistik-Funktion" einbaut.

Damit hätten wir das geregelt. Es ist wichtig, dass ihr hier alles versteht, da Variablen immer und immer wieder gebraucht werden (und je komplizierter es wird, desto öfter). Falls ihr also noch nicht ganz durchblickt, dann lest es euch noch ein zweites mal durch.

D - Die Anwendung

Gut, dann wollen wir nun mal einen kleinen Teil unseres neuen Wissens anwenden (noch mehr dann später im letzten Abschnitt).
Als Ansatz nehmen wir eine schlechte Idee, die mir gerade gekommen ist. Am Rande des Sees (oder irgendwo sonst) steht ein Künstler, dem leider die Blätter zu zeichenen ausgegangen sind. Deshalb bittet er den Helden, die Blätter für ihn zu suchen.

Seite 1 des KünstlerEvents:
<> SelectFace xyz
<> Messg:"Holla, kannst du mir vielleicht helfen? Ich brauche neue Blätter für meine Zeichnungen!"
<> ChangeSwitch [21] Blättersuche - ON

So, damit wäre der Auftrag erteilt. Nun brauchen wir einen Ort, an dem der Held die Blätter bekommt. Dazu ist am besten das Haus des Helden geeignet. Falls ihr so etwas noch nicht habt, dann stellt irgendwo in das Haus des Helden einen Tisch mit einem Buch, oder nehmt ein Regal. Dieses Buch markiert ihr dann als Event. (Wichtig: Same Level as hero, man soll ja nicht drüberweglaufen können)

Seite 1 des TagebuchEvents:
Startbedingungen: Switch: Blättersuche -ON UND: Variable 1: Blätter 0 above
<> SelectFace zyx
<> Messg:"(Held): Hmm.. mein (leeres) Tagebuch. Ich reiße mal eine Seite raus." <> VariableChange: 1: Blätter +1
<> VariableChange: 2: Blätterdabei +1
<> Messg:"(Held): Jetzt habe ich schon ein Blatt, und keines abgegeben."

Okay, was bewirkt diese Seite: Zuerst komtm die normale Message, in dem der Held seine Aktion beschreibt. Danach werden die Variabeln Blätter und Blätterdabei je um 1 erhöht.
Warum zwei Variablen: Ganz einfach. Ich möchte es so machen, dass nachher Messages wie: "Ich habe jetzt 3, und schon 5 abgegeben" angezeigt werden können. Deshalb mehrere Variablen. Der letzte Text ist übrigens so wie er ist und wird nur beim allerersten Aufruf dieses Events angezeigt, da ja als Startbedingung eingestellt ist, dass die Variable Blätter noch auf 0 stehen muss.
Bleiben wir noch bei diesem Event, fangen aber eine neue Seite an.

Seite 2 des TagebuchEvents:
Startbedingungen: Switch: Blättersuche - ON und Variable 1: Blätter 1 above
<> Select Face xyz
<> Messg:"(Held): Hmm, ..[...]"
<> VariableChange: 1: Blätter +1
<> VariableChange: 2: Blätter dabei +1
<> VariableChange: 3: Blätter abgegeben Set Variable 1
<> VariableChange: 3: Blätter abgegeben - Variable 2
<> Messg:"(Held): So jetzt habe ich \V[2] dabei und schon \V[3] dem Künstler gegeben.

So, was bewirkt nun diese Seite? Zuallererst schauen wir uns die Startbedingungen an. Diese Seite wird aufgerufen, wenn der Switch: Blättersuche angeschaltet ist, und die Anzahl der bisherigen Blätter (also die Variable: Blätter) größer oder gleich 1 ist. (Das bedeutet das above hinter dem Wert der Variable).
Das heißt, diese Seite wird aufgerufen, wenn man das Tagebuch ein zweites, drittes, viertes, ... Mal betrachtet.
Danach wird wie immer das FaceSet des Helden ausgewählt, der Held gibt den Standartspruch von sich, die Gesamt und die aktuelle Blätterzahl wird um je eine Einheit größer, doch DANN:
Die Variable 3: Blätter abgegeben wird auf den Wert der Variable 1: Blätter gesetzt. Jetzt könnte man sich denken, dass das ziemlich unssinig ist. Schließlich bedeutet diese Zeile ja, dass dem Maker erzählt wird, die Anzahl der Blätter, die man abgegeben hat, wäre gleich der Anzahl der Blätter, die man insgesamt aufgenommen hat. Das ist natürlich falsch.
Doch deshalb folgt auch die nächste Zeile, wo von diesem neuen Wert der Variable 3, der Wert der Variable 2: Blätter dabei abgezogen wird. Das heißt: Hat man insgesamt 5 Blätter aufgenommen, und schon 2 abgegebenm folgt folgende Operation:

Blätter = 5
Blätter dabei = 2
Blätter abgegeben = Blätter (also 5)
Blätter abgegeben = Blätterabgegeben - Blätter dabei (also 5 -2)
Blätter abgegeben = 3

Ihr seht, so wird aus den beiden anderen Variablen die dritte berechnet.
Danach folgt die Message, in der erstmal Platzhalter wie "\V[2]" verwendet werden. Mehr zu diesen und anderen Messageffekten vorraussichtlich im nächsten Kurs.
Hier soll nur gesagt werden: Gibt man in einer Message \V[xyz], dann wird im Spiel an dieser Stelle der Wert der Variable mit der Nummer xyz zu sehen sein.
In unserem Beispiel würde die Message also derart aussehen: "So, jetzt habe ich 2 dabei, und schon 3 abgegeben."

Vielleicht ist jetzt einigen von euch ein Problem aufgefallen: Wie sollen sich denn die Werte von "Blätter" und "Blätter dabei" unterscheiden, wenn diese immer parallel erhöft werden?
Um dieses Problem zu lösen, müssen wir uns wieder auf die Stadtmap begeben, wo ja bekanntlich unser Künstlerevent steht. Da machen wir auf Seite 3 weiter. Genau, mit Seite 3, Seite 2 lassen wir erst einmal frei (bis auf die Startbedingung, dass die Variable Blätter größer/gleich 10 sein muss.

Seite 3 des Künstlerevents:
Startbedingung: Switch Blättersuche - ON, Variable Blätter 0 above.
<> SelectFace xyz
<> Messg: "Künstler: Bitte, du MUSST mir welche bringen."

Diese Seite wird also angezeigt, wenn die Blättersuche begonnen hat, der Spieler aber noch keins dabei hat. Aber Moment: Haben wir nicht vorhin glernt, dass bei Variablen immer größer/gleich gilt, wenn man sie als Startbedingung einsetzt? Das stimmt auch weiterhin, dass heißt, wer jetzt testet und fünf Blätter einsammelt, wird trotzdem diese Message zu sehen bekommen. Deshalb müssen wir auch direkt mit Seite 4 weitermachen.

Seite 4 des KünstlerEvents:
Starbedingung: Switch Blättersuche - ON, Variable Blätter 1 above.
<> SelectFace xyz
<> Messg: "Künstler: Hmm..ein Blatt ist kein Blatt. bring mir bitte mehr!"
<> VariableChange: 2: Blätter dabei Set 0

Zuerst: Warum wird im Spiel jetzt diese Seite aufgerufen, wenn ich ein oder mehr Blätter habe, und nicht Seite 3? Schließlich erfüllen beide die Bedingungen.
Das liegt am System des Makers und ist eine der wichtigsten Regeln die es zu beachten gilt, wenn man sich im Maker vertieft (und Fehler behebn muss, die man einfach nicht findet): Der Maker führt die seite des events aus, die alle Bedingungen erfüllt, und die hhöchste Nummer hat. Macht man zwei Seiten ohne Startbedingungen, wird der Maker die zweite Seite ausführen, macht man 3, die dritte. Dies ist sehr wichtig, da durch vertauschen oder falsches Anordnen von Seiten oft Fehler entstehen.

Nun zurück zur Seite: Da diese Seite wieder nur für einen Einzelfall zur Verfügung stehen wird (wenn der Held ein Blatt dabei hat), gibt es auch hier eine vorgefertigte Message. Danach kommt der Teil, nachdem wir uns vorher gefragt haben: Die Variable Numero 2 wird auf 0 gesetzt, und ab diesem Zeitpunkt unterscheiden sich so Variable 1 und 2!
Da wir noch immer keine (teilweise) allgemeingültige Message verwendet haben, ist es nun an der Reihe für Seite 5:

Seite 5 des KünstlerEvents:
Starbedingung: Switch Blättersuche - ON, Variable Blätter 2 above
<> SelectFace xyz
<> Messg: "Künstler: Danke sehr, immerhin schon \V[1] Blätter. Sucht mehr.
<> VariableChange: 2: Blätter dabei Set 0

Diese Seite wird aufgerufen, wenn man nun 2 oder mehr Blääter gesammelt hat. Wie euch bestimmt aufgefallen ist, wird nun auch eine allgemeingültige Message verwendet, dass heißt, wir müssen auf der nächsten Seite nicht beim Falle von drei Blättern weitermachen. Die nächste Seite ist jetzt sowieso nur optional, sie trägt halt mehr zur Logik bei, schließlich soll der Mann ja nicht die ganze Zeit sagen "Immerhin schon XXX Blätter,.." und dann plötzlich: "Super, danke, das reicht!". Deshalb bauen wir noch eine kleine Zwischenstufe ein:

Seite 6 des des KünstlerEvents:
Startbedingung: Switch [...], Variable Blätter 5 above
<> SelectFace xyz
<> Messg "Jo, vielen herzlichen Dank. Mit \V[1] Blättern kann ich schon viel anfangen.
<> VariableChange: 2: Blätter dabei Set 0

Hiermit wird eine neue (trotzdem allgemeingültige) Message eingeführ/angezeigt, sobald der Spieler mehr als 5 Blätter abgegeben hat. Der nächste Schritt ist dann die Maximalanzahl festzulegen, zum Beispiel 10 Blätter, mit denen der Künstler dann erstmal genug haben sollte. Und natürlich darf dann auch eine kleine Belohnung nicht fehlen ^^

Seite 7 des KünstlerEvents:
<> SelectFace xyz
<> Messg: "Künstler: Wow! Ihr habt euch ja richtig ins Zeug gelegt, jetzt habe ich genug. Hier, nehmt das!"
<> Chance Money: Money 100 Incr.
<> SelctFace: Erase
<> Messg: "-100 Creds erhalten-"
<> VariableChange Blätterdabei = 0
<> Change Switch: Blättersuche - OFF

Dies ist die abschließende Seite des Künstler - Ereignisses, auf der man 100 Creds (oder wie auch immer ihr eure Währung nennt) vom Künstler für da fleißige Seitenbringen bekommt. Die Funktion, der Gruppe Geld zu geben oder abzuziehen befindet sich auch auf Seite 1 im Event Dialog, sie heißt "Change Gold Held...", dass man dort mit Increase steigern, oder mit Decrease verringern kann.
Das Select Face: Eras bewirkt, dass vor der zweiten Message nicht das Gesicht des Künstlers angezeigt wird.
Nun tut sich aber mal wieder ein Problem auf. Was passiert wenn man den Künstler jetzt anredet? Seite 3, 4, 5, 6 und 7 können nicht aktiviert werden, weil sie ja als Starbedingung haben, dass der Switch "Blättersuche" an ist. Lassen wir die vorher erstellte Seite 2 außer acht, würde nun die erste Seite aufgerufen, und der Spaß beginne von vorne, was natürlich nicht so sein soll. Hätten wir Seite 2 weggelassen, und ans ende gesetzt, dann wäre niemals Seite 7 aufgerufen (Switch UND Blätter auf 10) worden, da ja schon die Bedingungen der Seite 2 (die man sich jetzt als seite 8 vorstellen muss) erfüllt werden. (Rechts vor links)
Deshalb muss Seite 2 auch genau an dieer Position bleiben, damit sie nur aufgerufen wird, wenn der Held alle Blätter gesammelt hat, und sie auch schon dem Künstler übergab.

Seite 2 des KünstlerEvents:
Startbedingung: Blätter 10 above
<> SelectFace xyz
<> Messg: "Künstler: Danke, ihr habt mich gerettet!!"

Diese Message wird nun jedes Mal angezeigt, wenn man mit dem Künstler redet.
Und auch am Tagebuch müssen wir noch eine Seite hinzufügen, damit der Spieler nicht tausende von Blättern ausreißen kann.

Seite 3 des TagebuchEvents:
Startbedingung: Switch Blättersuche - ON, Blätter 10 above
<> SelectFace zyx
<> Messg: "(Held): So, das sollte aber mal reichen..."

Diese Message wird nun angezeigt, wenn man dem Künstler noch nicht alle Blätter übergeben hat, aber versucht, ein elftes hinauszureißen.


Abschließend ist zu sagen, dass dies meiner Meinung nach ein recht gutes Beispiel für die Funktionen und den sinnvollen Einsatz von Variablen war. Ich hoffe, ich habe alles verständlich genug erklärt, aber wem dies alles zu kompliziert zum Selbermachen ist, der läd sich dann eifach mein Kursprojekt herunter, und schaut sich dort noch einmal alles genau an!

3. Forks :D

Gut, von einem wichtigen Aspekt der Rpg-Maker Programmierung direkt zum nächsten, nämlich den Fork Conditions. Auch hier werden diejenigen von euch, die in der Schule schonmal Mathe/Info hatten oder sich in ihrer Freizeit mit Programmierung beschaffen, einen Vorteil haben. Es handelt sich um die "Wenn.. dann.." Funktion, in den meisten Programmiersprachen "IF...THEN".
Dabei wird ein bestimmtes Ereignis erstellt, dass allerdings nur eintritt, wenn eine bestimmte Bedingung erfüllt ist. Eigentlich kommen Forks schon in der linken Leiste mit den Start-Bedingungen vor. Dort hat man zwar keine besonders große Auswahl, aber man kann einstellen, dass die bestimmte Seite nur dann aufgerufen wird, wenn eine bestimmte Bedingung erfüllt wird, zum Beispiel, dass ein bestimmter Switch eingeschaltet ist, oder dass eine Variable einen besonderen Wert hat, etc.
Eine Fork Condition ist aber eine Funktion wie jede andere, dass heißt, sie wird innerhalb der Seite verwendet, um zum Beispiel in einem längeren Gespräch einen Satz anzeigen zu lassen, der entweder den Helden für eine getane Arbeit lobt, oder ihn daran erinnert, diese noch zu erledigen. Natürlich könnte man sowas auch noch mit mehreren Seiten regeln, was allerdings nachher ziemlich unübersichtlich wäre.

Am besten schauen wir uns nun einmal die verschiedenen Funktionen von "Fork Conditions" etwas genauer an. Übrigens, den Befehl findet ihr rechts auf der dritten Seite in der Event-Auswahlliste.

Wie ihr sehen könnt, ist der Auswahlbereich der verschiedenen Forks in 2 Seiten aufgeteilt. Wir beginnen natürlich auf der ersten.

Switch: Hier lässt sich natürlich als Bedingung eistellen, dass der jeweilige Switch aus oder angeschaltet ist.

Variable: Und sofort tauchen sie wieder auf, unsere lieben Variablen ^^. Hier lässt sich als Bedingung einiges einstellen. Die bestimmte Variable muss entweder gleich (same), ungleich (others), größer (bigger), kleiner (smaller), größer gleich (above) oder kleiner gleich (below) einem bestimmten Wert (Set XXX) oder einer bestimmten Variable (Variable XXX) sein. Das heißt, hier lässt sich zum Beispiel als Bedingung einstellen, dass Variable X kleiner sein muss als 12, oder dass Variable Y nicht gleich Variable Z sein darf.

Timer: Auch wenn wir die Timerfunktion bisher noch nicht besprochen haben, lasst mich soviel sagen. Man kann einen Timer auf einen bestimmten Wert setzen, und zum Beispiel als Countdown bis zur Zerstörung eines Hauses oder so laufen lassen. Hier kann man nun als Bedingung einstellen, dass der Wert des Timer größer oder kleiner gleich X Minuten und Y Sekunden sein muss. Zum Beispiel könnte man den Helden sagen lassen "Ohoh, jetzt müssen wir uns beeilen!", wenn er nur noch eine Minute oder weniger Zeit hat.

Money: Hier lässt sich überprüfen, ob das Gold der Gruppe/des Helden größer oder kleiner ist, als ein bestimmter Wert. So kann man Verkäufer darauf hinweisen lassen, dass der Held wiederkommen soll, wenn er mehr Geld debi hat, etc.

Nun wechseln wir auf Seite 2 der Auswahlliste.

Item: Hat der Held ein bestimmtes Item dabei (has it), oder hat er es nicht (doesn't have it)?

Hero: Zuerst lässt sich hier der Name des Helden auswählen, der die Grundlage der Bedingung sein soll. Mit einem Doppelklick auf das Feld darunter (oder mit einem einfachen Klick auf das "...") lässt sich ein weiteres Fenster öffnen, in dem man nun die Bedingung wählt.

Is in Hero Party: Überprüft, ob der Held in der aktuellen Party ist

Name =: Hat der Held einen bestimmten Namen?

Moment: Haben wir nicht vorhin noch ausgewählt, um welchen Helden es hier geht? Ja, aber es gibt auch eine Funktion, mit der man den Namen des Helden ändern kann! Das heißt, hier geht es um den Namen, den der Held im Moment hat.


Level ... above: Ist die Stufe des Helden höher oder gleich XXX?

HP ... above: Hat der Held noch mindestens XXX Lebenspunkte?

Special Skill: Kann der Held die Fähigkeit ****** einsetzen?

Item: Hat der Held das jeweilige Item ausgerüstet?

Condition: Ist der Held in einem bestimmten Zustand (zum Beispiel vergiftet/tot)?

Gut, nun zurück zur zweiten Seite der Forks.

Event: Hat das bestimmte Event (meist Personen) den Kopf nach oben/unten/rechts/links gewandt?

Vehicle: Ist der Held gerade mit dem Boot, dem Schiff oder dem Luftschiff unterwegs?

Started by Decision Key: Wurde dieses Ereignis dadurch ausgelöst, dass der Spieler die Enter/Leertast gedrückt hat? (Oder wurde es von einem anderen Event gerufen/musste der Held dagegen oder darüber laufen)

Play BGM Once: Tritt nur ein, wenn die Hintergrundmusik mindestens einmal komplett abgespielt wurde.

Und dann wäre da noch:

Add ELSE Case: Dies ist eine sehr nützliche Funktion, um ein bestimmtes Ereignis ausführen zu lassen, wenn das gewählte Ereignis NICHT eintrifft. Wenn man keinen solchen Fall haben will, einfach das Häkchen wech ^^'

So, wenn man jetzt irgendwas davon auswählt wird im Event ein derartiges Schema erscheinen:

<> FORK: Optn: XXXYYYZZZ
<>
:)ELSE Case
<>)
:END Case
<>

Der Abschnitt von FORK bis END bzw. bis ELSE, ist der Abschnitt, der eintritt, wenn die Bedingung erfüllt wird, der Abschnitt von ELSE bis END (wenn er denn da ist), wenn die Bedingung nicht erfüllt wird. Alles nach dem END Case wird dann wieder auf jeden Fall angezeigt.

Wenn man nun will, dass nicht nur eine, sondern zwei oder mehrere Bedingungen erfüllt werden, dann muss man einfach mehrere Forks ineinander verschachteln. Ich möchte mal ein kleines Beispiel für ein weiter fortgeschrittenes Fork-System darstellen:

<> FORK Optn:Switch[1] - ON
<> FORK Optn:Switch[2] - ON
<> FORK Optn:Switch[3] - ON
<> Messg: Alle sind an
<>
:ELSE Case
<> Messg: Switch 1 und 2 sind an
<>
:END Case
<>
:ELSE Case
<> FORK Optn:Switch [3] - ON
<> Messg: Switch 1 und 3 sind an
<>
:ELSE Case
<> Messg: Nur Switch 1 ist an
<>
:END Case
<>
:END Case
<>
:ELSE Case
<> FORK Optn:Switch[2] - ON
<> FORK Optn: Switch[3] - ON
<> Messg: Switch 2 und 3 sind an
<>
:ELSE Case
<> Messg: Nur Switch 2 ist an
<>
:END Case
<>
:ELSE Case
<> FORK Optn:Switch[3] - ON
<> Messg: Nur Switch 3 ist an
<>
:ELSE Case
<> Messg: Kein Switch ist an
<>
:END Case
<>
:END Case
<>
:END Case
<>


So, falls ihr das jetzt nicht versteht, dann ist das erstmal nicht schlimm. Im Rpg-Maker ist das alles auch etwas übersichtlicher. Wichtiger ist aber, dass ihr euch das anschaut. Fangen wir oben an: Zuerst werden nacheinander alle drei Switches überprüft, ob sie an sind. Wenn ja, dann wird die Nachricht angezeigt, dass alle Switches an sind. Danach kommt das erste ELSE, also der Fall, wenn der dritte Switch nicht an ist. Natürlich kommen wir zu dieser Stelle nur hin, wenn 1 und 2 an sind. Deshalb wird die Nachricht angezeigt, dass nur Switch 1 und 2 an sind. Dann, beim nächsten ELSE Case ist also Switch 2 ausgeschaltet. Da aber zu diesem Zeitpunkt Switch 3 noch ansein könnte, wird dies in einer weiteren Fork überprüft. Wenn Switch 3 an ist, wird angezeigt, dass er und Switch 1 angeschaltet sind (denkt dran, wir befinden uns immer noch in der ersten Fork, die überprüft, dass Switch 1 an ist). Wenn nicht, dann kommt die Nachricht, dass nur Switch 1 angeschaltet ist.
Beim nächsten ELSE Case, das von der ersten Fork wird wiederum überprüft ob Switch 2, und dann auch Switch 3 an sind (das weiß der Maker ja nicht, wenn direkt bei der ersten Fork abgebrochen wird). Wenn beide an sind, wird das angezeigt. Wenn der dritte ausgeschaltet ist, kommt die Nachricht, dass nur der zweite an ist. Ist der zweite aber auch schon aus, wird widreum überprüft, ob der dritte an ist (wenn dieser Fall kommt, wurde ja immer schon vor dem dritten Switch abgebrochen!). Ist dies der Fall, ist er der einzige angeschaltete, wenn nicht, dann sind alle Switches aus.

Ich hoffe ich konnte euch so schon mal einen kleinen Einblick darauf gewähren, womit ihr euch später herumschlagen müsst. Nun aber zurück zum (noch) einfachen Leben.

Die Grundfunktionen der Forks habt ihr nun hoffentlich verstanden, jetzt mache ich noch eine einfache Anwendung dafür. (Oder zwei?)

Stellt am besten irgendwo in die Ecke eurer Map eine zwielichtig aussehende Person, die der Held anreden kann. Die Person sollte so tun, als ob sie dem Helden unbedingt Informationen verkaufen will, die sich allerdings als Geldverschwendung erweisen. Mit Hilfe einer Fork könnt ihr dann überprüfen, ob der Held genug Geld dabei hat. Wenn ja, dann wird ihm das Geld angezogen, und die Person gibt ihre wichtige Information Preis. Wenn nein, dann fordert sie den Helden auf, mit genügend Geld zurückzukommen. Natürlich wird im ersten Falle ein Switch angeschaltet. Dann kann man zum Beispiel ans Tor noch eine zweite Wache stellen, die dann ein Gespräch mit dem Helden führt und ihn vor dem Betrüger warnen will.
Wenn der Held dann schon auf den Betrüger hereingefallen ist, sagt er etwas wie "Danke, aber es ist schon zu spät..".

Das sollte alles sein, was es erst einmal zu sagen gibt, aber einen kleinen Tipp noch: Wem das mit dem dreifach verschachtelten Fork-System zu kompliziert ist, für den gibt es eine angenehme Erleichterung (auch wenn man das nicht immer so machen kann): Wenn der erste Switch aktiviert ist, addiert zu einer beliebigen Variable 1. Für den zweiten Switch 2 und für der dritten 4 (bei 4 Switches dann noch 8, dann 16, ..). Wenn nun die Variable auf 00 steht, ist keiner aktiviert, bei 1 nur der erste, bei 2 nur der zweite, bei 3 die ersten beiden, bei 4 nur der dritte, bei 5 der erste und dritte bei 6 der zweite und der dritte, und bei 7 alle. So kann man zum Beispiel eine Variable für drei oder mehr Switches verwenden. Viel Spaß beim Experimentieren!


so, das wäre mal alles...ihr könnt mir halt sagen, was ich das nächte mal posten soll.... :D
 

Shade

Ehrenuser
Mitglied seit
08.10.2001
Beiträge
1.582
Damit bin ich nicht einverstanden das du das hier hinein kopierst!

Aus meiner Sicht ist es ein gewisser Diebstall.....
Wie währe es für dich wenn jemand deine Arbeit einfach klaut und irgenwo anders postet?! :grmpf:

Wer an diesem sehr hilfreichen Einsteigerkurs interessiert ist der schau bitte auf diese Seite:

http://www.rpg2000.4players.de:1061/index.php?inhalt=kurs


Closed
 
Oben