Grundlagen und Wissenswertes zum Editor

[nocontentad]

Grundlagen und Wissenswertes zum Editor


zum Anfang

1. Vorwort:

Dieses Tutorial befasst sich mit Grundlagen und Wissenswertem des Editors. Es finden sich hier einige grundlegende Dinge, aber auch
solche, von denen man vielleicht gar nicht weis das es machbar ist bzw. wie es funktioniert, und das deshalb nicht verwenden würde.
Dieses Tutorial basiert im Grunde auf einem Thread aus dem Mapping und Modification Forum und ist eine Sammlung der bis dato zusammengetragenen
Informationen. Ich hoffe ihr findet hier einiges Interessantes und das Tutorial hilft euch dabei mit dem Editor besser umgehen zu können.
Viel Spass noch beim Lesen dieses Tutorials


zum Anfang


2. Videos/Sequenzen


zum Anfang


2.1. Letterbox-Mode

Das ausgeblendete Interface
nennt sich Letterboxmodus. Das ist relativ essentiell, weil es schon
mal sehr professionell aussieht und vor allem die Möglichkeit gibt,
Einheiten per Untertitel sprechen zu sehen..
Die Aktion dazu nennt sich Cinematic – Letterbox
Mode On
die Option over 2.00 sec definiert die Zeit des
ßbergangs von Userinterface (also Minimap, Einheitsdetails…)
zum Letterboxmodus. Erfahrungsgemäß sieht 2.00 sec am Besten,
am Weichsten aus. Nur wenn die Letterbox sofort stehen soll (Spiel fängt
mit Sequenz an oder so) sind 0.00 sec angebracht.

Zum Spiel, sprich UserInterface, zurückkehren kann man ebenso einfach:
Cinematic – Letterbox Mode off auch wieder
mit der Option der Zeit.

So, nun haben wir die Rahmenbedingungen für eine Sequenz. Jetzt
will ich noch schnell auf ein paar der schier unendlichen Aktionen während
einer Sequenz eingehen, damit jeder etwas herumexperimentieren kann…

Einheiten sprechen lassen:

Ist relativ einfach, wir benutzen die Action Cinematic
– Transmission from Unit
. Hierbei ist eine Einheit zu wählen,
die sprechen soll. (wichtig wegen Portrait und Speechindicator).Dann
geben wir der Einheit einen Namen (steht dann in Gold-Gelb über
dem Text), wenn wir wollen…
Jetzt fehlt nur noch der zu sprechende text und schon ist es lauffähig.
Wenn der Text sehr lange ist, empfiehlt sich die option „add 0.00
sec“ (füge 0.00 sekunden hinzu) zu erhöhen, ebenso lässt
er sich auch verkürzen. (z.B. substrac 2.00sec führt
zu 5-2=3 sekunden) Das einfachste ist Set to, ein Text mit
Set to 3 ist 3 Sekunden sichtbar


zum Anfang


2.2. Kamerabewegungen

Wichtig sind noch Kamerabewegungen.
Sie vermitteln Athmosphäre und sind einfach „cool“.

Einfachste Art und Weise, eine Kamera zu benutzen, ist die Standard-Game-Camera
zu bewegen. Sie kann auf Einheiten oder Regionen oder sonstwas bewegt
werden, z.B. mit der Aktion Kamera – Pan Camera(Timed).
Es wird ein Objekt gefordert, das dann zentral im Bild stehen soll..
Das wären zum Beispiel Center Of Region Regionen, oder aber
Unit – Position of unit.

Damit lässt sich die Kamera zu nem Helden bewegen, der dann etwas
sagt. Die Zeitangabe besagt, wie lange die Kamera von der aktuellen
Position aus zum Ziel braucht. Der wert 0 bewirkt einen sofortigen Sprung,
da aber Achtung: Kein Rechner der Welt springt wirklich sofort.

Diese Aktionen gibt es noch in fortgeschrittenen Formen, z.B.

  • Kamera – Pan Camera with Interpolatet Height(Timed) bedeutet, dass der Kamera-Mittelpunkt nicht auf dem
    Boden liegt, sondern den eingegebenen Höhenwert besitzt (normale Einheiten sind ca. 60-80 gross).
  • Kamera – Pan Camera as Necessary verhindert einen zu grossen sprung, d.h. wenn die Aktuelle Kamera
    sehr weit vom Ziel entfernt is, springt sie augenblicklich dahin. Ansonsten verhält sie sich wie Camera – Pan Camera(Timed).

Mit diesen Mitteln sollten jetzt schon kleine Sequenzen möglich sein.
Ich habe gerade von der einfachsten Kamerabewegung geschrieben, jetzt kommt die wirklich Lustige: Wir befinden uns in einem 3D-spiel,
daraus folgt wir können auch „vernünftige“ Kameraperspektiven erzeugen… Die Standard-Game-Camera ist nur eine von
unendlich vielen Kameras.

Kameras sind im Camera-Editor herzustellen, oder über die Action
Kamera – Set Camera Field(Timed), was aber
sehr kompliziert und schwierig ist, im Endeffekt aber den saubersten
weg darstellen dürfte, aber vergessen wir das….

Der Kamera-Editor (Tastenkürzel ‚M‘) ist herrlich einfach zu bedinen, der Button ‚Kamera erstellen‘ erstellt eine Kamera im Mittelpunkt
des Kartenauschschnitts, über ‚Kameraeigenschaften bearbeiten‘ erreicht man ein Menü, in dem man die Kamera individuell
einstellen kann.
Sehr empfehlenstwert ist es, ein Häckchen bei ‚Vorschau-Werte im Hauptfenster‘; zu setzen, ich denke alles andere erübrigt sich…
Einfach mal alles testen, die ßnderungen sollten sofort sichtbar
sein. Mit der Kombination Strg + Shift + C oder Mittlere
Maustaste
kann man die Standard-Kamera im Editor wiederherstellen…


zum Anfang


2.3. Kamera dreht sich mit Einheit:

Und zwar folgendermaßen:
bei Map Initialization die Aktion ausführen:
Camera – Lock camera target for (der gewünschte
player) to (die entsprechende einheit auswählen), offset by (0.00,
0.00) using The unit’s rotation

Dann eine neuen Trigger erstellen mit einem Periodic Event der alle
0.10 sekunden auftritt und folgende Aktion ausführt:

Camera – Set (gewünschter player) camera
rotation to Facing of (die gewünschte einheit) over 0.10 seconds

Mir is natürlich klar das es problematisch sein kann 10 trigger
per sekunde auszulösen, aber da muss man experimentieren, es geht
auch mit weniger ganz gut (zb. alle 0,2 sec)


zum Anfang


2.4. Videos abbrechen (mit ESC):

Also zunächst einmal
ist es hierbei recht hilfreich, wenn jede Video-Sequenz ihren eigenen
Ordner spendiert bekommt, da man für jede abbrechbare Sequenz mindestens
2 Auslöser braucht. Außerdem braucht man eine Variable vom
Typ Wahrheitswert (Boolean)
, die man am besten ‚CinematicSkipped‘ o.ä.
nennt.

Der Auslöser für das Abbrechen:

    Ereignis: Player – Cinematic Skipped

    Aktion:

    – Set Variable (CinematicSkipped = TRUE)
    – Video – Turn Cinematic Mode Off
    – Kamera – Reset Game Camera
    Wenn während des Videos wichtige Einheiten bewegt werden, Tore
    geöffnet werden oder andere Dinge geschehen, die das Spiel beeinflussen,
    dann muss dies jetzt nachgeholt werden

Der Auslöser für die Sequenz:

    Ereignis: was man braucht
    Aktion:
    – Set Variable (CinematicSkipped = FALSE)
    – Video – Turn Cinematic Mode On

    – diverse..
    – ..Anweisungen (für Video)

In der Sequenz muss nun nur noch hinter jedes „Wait“
der Befehl If (CinematicSkipped Gleich TRUE)
then Skip Remaining Actions else Do Nothing
Dies gilt natürlich
auch für jede „Transmission from Unit“, bei der die Option
Warten verwendet wird.

Eine -zugegeben- umständliche Prozedur, doch leider die einzige,
denn es gibt keine Möglichkeit, einen laufenden Trigger von „außen“
abzubrechen. Auch bei den Blizzard Kampagnen wird es so gemacht wie
beschrieben.

zum Anfang


2.5. „Kritische“ Videos:

Wenn man oft mit InGame
Videos arbeitet, die aber an kritischen Punkten sind (dh. man muss jemanden
befreien der bewacht wird) kann es ja vorkommen, dass das Video dann
anfängt, obwohl noch gegnerische Einheiten in der Nähe sind.
Dabei kann es dann vorkommen, dass man angegriffen wird, ohne sich verteidigen
zu können, da der Ladderboxmode ja eingeschaltet ist, und man somit
nichts machen kann…

Um das zu verhindern baut man folgende Aktionen in den Trigger ein,
bevor man das Video startet::

    – Einheit – Pause all Units :
    – Spieler – Set Alliance (die im Video vorkommenden Parteien verbünden)
    – Einheit – Unpause Unit (die man im Video bewegen möchte)

Wenn das Video aus ist, muss man natürlich die alten Allianzen
wiederherstellen, und die einheiten mit
Einheit – Pause aus All Units in ihren ursprünglichen
Zustand bringen.


zum Anfang


2.6. Blendenfilter:

    Ereignis: Time elapsed 5 sec
    Bedingung : –

    Aktion:
    – Video – Set Fade filter <Schwarze maske> over 10.00 sec

Hier eine Liste der Blendenfilter (falls ich eine vergesse editier
ich das rein)

  1. Weiße Maske – Der Bildschirm wird langsam
    schwarz
  2. Schwarze Maske – Eigentlich das gleiche wie Weiße
    Maske.
  3. Pandaren Nachwuchs – eine Panda Family
  4. Dunstfilter – Am oberen Bildschirmrand bildet sich
    eine schwarze Schicht
  5. Bodennebel – Am unteren Bildschirmrand bildet sich
    eine Schwarze Schicht
  6. Dunst und Nebel – Beschreibt sich von selbst
  7. Schrägstrich – Von links unten in der Ecke
    nach rechts Oben bildet sich eine Schwarze Schicht
  8. Traum – eben…wie ein Traum…
  9. Größe – Alles bis auf einen Kreis in
    der Mitte wird schwarz (wie man es aus alten Filmen am Ende kennt)
  10. Pow! – Ein großes Schwarzes POW! wird auf
    dem Bilschirm gezeigt
  11. Splatt! – Ein großes rotes Splatt! wird auf
    dem Bildschirm gezeigt

Wenn mann die Blendefilter genau betrachted dann sieht man: (100.00,100.00,100.00).
Das bedeuted (rot/100%,grün/100%,blau/100%), also wenn ihr z.B.

  • komplett roten Bildschirm = Schwarze/Weisse Maske + (100.00,0.00,0.00)
  • grünes Splatt!! = Splatt!! + (0.00,100.00,0.00)
  • blauer Traum = Traum + (0.00,0.00,100.00)

ihr könnt das beliebig mischen und so krasse Farben bekommen…


zum Anfang


2.7. Cinematic Feeling:

Stellt
euch eure Szene bildlich vor, was soll passieren, dann stellt euch vor,
wie das von Hollywood verfilmt werden würde. Kein Scherz, Kino
bildet.
Benutzt die Kamera nicht dazu, irgendwas zu zeigen, benutzt sie, um
Feelings zu beeinflussen. Genau wie sounds. Eine langsame (sehr langsam!)
Kameradrehung um zwei sich unterhaltende Charaktere erzeugen z.B. je
nach Zusammenhang eine friedliche oder auch tragische Szene. ßfter
gebraucht wird dann wohl eine spannende Szene, das is sehr schwierig,
aber angesichts des Erdumfangs … Wichtig is, Mut zu kurzen Szenen,
erzeugt etwas Hektik, viele Cuts, sehr schnelle Kamerafahrten, viele
verschiedene Perspektiven. Probiert alles aus, z.B. kann man mit dem
vermindern von FoV schnelle Bewegungen unterstützen.

Eine Kamera (ohne z-offset) im Editor zu erstellen is recht enfach,
man stelle sich die beteiligten Einheiten dorthin, wo sie in der sequenz
stehen werden (wenn ise da net schon sind), dann mittels Taste X im
editor den Letterboxmodus aktivieren. Nun kann man nur mit der maus
(Strg + Mausbewegung verändert Perspektive auf Y- und Drehung auf
X-Achse) die gewünschte Kamera herstellen, dann nur noch den Button
„Kamera erstellen“ klicken, einfacher kann man Perspektiven
nicht erzeugen


zum Anfang


3. Spezialeffekte


zum Anfang


3.1. Feuer erzeugen

Um Feuer im Spiel zu
erstellen, dass nicht von Anfang an sichtbar ist, gibt es die Möglichkeit,
die entsprechenden Doodads zu setzen, und zuerst ihre Dead-Animation
(Animation – Play Doodad Animation) zu
spielen. Was aber, wenn man Feuer in einem Gebiet erstellen will, das
sich dynamisch verhält (also etwa um eine Einheit, die zum Zeitpunkt
X ja nicht immer am gleichen ort sein muss) Alles mit doodads zukleistern?
– Nein ! — Die Spezialeffekte sind die Lösung:

Man erstellst mal ein Gebiet, welches dann brennen soll (nur die Größe,
Position unwichtig) – als Event nimmt man für dieses Feuerchen
was man halt braucht.

Trigger 1 – Der Ausgangsschalter
Im Schalter, der Ausgelöst wird, befindet sich eine Schleife, die
so oft durchlaufen wird, soviele einzelne Feuer man haben will. Als
Aktion wird ein Schalter laufen gelassen, der das Feuer erstellt (im
Folgenden Trigger 2 genannt)

Trigger 2 – Zum erstellen des Feuers hier wird das Feuer erstellt
mit: Spezialeffekt – Create Effekt at Point.
Dort nimmt man random point in region (mit offset, und stellt
das Offset so ein, dass es dem Standort von der Einheit entspricht.
(muss man etwas probieren mit dem x offset – also x/y of unit standort,
und bei x etwas dazuzählen). Die Effekte speichert man in ein Array,
sodass man sie nachher auch wieder löschen kann.

Feuer (Pfad): Doodads\\Cinematic\\TownBurningFireEmitter\\TownBurningFireEmitter.mdl


zum Anfang


3.2. Kreis aus Spezialeffekten

Ganz einfach! Ihr benutzt
hierfür diesen Trigger (Bsp. SpecialFX):

For each (integer A) from 1 to Anzahl do – create
a specialfx at point (x; y) offset by Radius towards ( (integer A) *
(360/Anzahl) ) using specialfxpath

  • Anzahl = Anzahl der Special-FXs
  • x bzw. y = Mittelpunkt an der Position x bzw. y
  • Radius = Radius des Kreises
  • (integer A) * (360/Anzahl) = Nächster Gradschritt, der bestimmt
    wo der nächste SpecialFX gesetzt wird. <= Hängt von der
    Anzahl ab!
  • specialfxpath = Pfad für den SpecialFX


zum Anfang


4. Game-Cache

Vorraussetzungen:

Man sollte den Editor grundlegend bedienen können und auch schon
mal mit dem Trigger Editor gearbeitet haben.
Einleitung: Bestimmt wird sich der ein oder andere
an dieser Stelle fragen wofür dieser Game Cache eigentlich gut
ist? Ganz einfach, nehmen wir mal an wir haben zwei Karten erstellt
die aufeinander folgen sollen. Außerdem soll der Held mit seinem
ganzen Inventar, seiner Erfahrung und seiner Fertigkeiten in der zweiten
Karte vorhanden sein.

Karten verbinden
Ok nun wird die erste Karte geöffnet und wir gehen in den Tigger
Editor. Nun erstellen wir einen neuen Tigger der ausgelöst werden
soll wenn der Spieler gewonnen hat:

    Ereignis: Spieler – Victory
    Bedingung: –
    Aktion: Spiel – Set next Level (Set next Level to [Pfad der nächsten Karte z.b Maps\\map2.w3m])

ACHTUNG: Es dürfen keine Leerzeichen
im Pfad enthalten sein!!!

Einheit mitnehmen:

Nun wollen wir aber auch den Helden den der Spieler in der ersten Karte
gespielt hat auch in die nächste Karte mitnehmen also fügen
wir in den gleichen Trigger wie oben folgende Aktionen ein:

    Spiel Cache – Create Game Cache (Create a Game Cache from [Name der Karte])
    Spiel Cache – Store Unit (Store [Den Helden auswählen] as
    [Name des Helden] of [Category] in [Last Created Game Cache])
    Spiel Cache – Save Game Cache (Save [Last Created Game Cache])

Zur Erklärung:

Die erste Aktion „baut“ einen neuen Game Cache mit dem Namen
den man eingibt. Ich empfehle den Namen der Karte zu verwenden da man
sonst bei mehreren Game Cachees leicht durcheinander kommt. Keine Leerzeichen
und unbedingt *.w3v am Ende. Die zweite Aktion speichert eine Einheit
in den grad erstellten Game Cache damit sie später wieder verwendet

werden kann. Dabei können sie der gespeicherten Einheit einen beliebigen
Namen (ohne Leerzeichen) geben, unter dem sie diese später wiederfinden.
Die dritte Aktion speichert den Game Cache nun endgültig ab.

Einheit laden:
So jetzt ist der Held im Game Cache und wie bekommen wir ihn da wieder
raus? Ganz einfach öffnen wir die zweite Karte in der der Held
wieder spielbar sein soll. Nun erstellen wir einen neuen Trigger:

    Ereignis: Map initialisierung
    Bedingung: –

    Aktionen:
    – Spiel Cache – Create Game Cache (Create a Game Cache from [Name des
    Game Cache der ersten Karte])
    – Spiel Cache – Restore Unit Facing Point (Restor [Name des Helden] of [Categoy]

    from [Last Created Game Cache] for [Besitzer des Helden] at
    [Gebiet in dem der Held erscheinen soll] facing [Einheit die er ansehen soll])

Zur Erklärung: Die erste Aktion
ruft den Game Cache wieder auf den die erste Karte erstellt hat. Dazu
muss nur der gleiche name wie in der ersten Karte angegeben werden.
Die zweite Aktion lädt die Einheit on ein Gebiet, wobei sie eine
Einheit anschaut. Der Name der Einheit muss wie in der ersten Karte
lauten. Den Besitzer des Held muss man auch noch festlegen. Geschaft
war doch garnicht so schwer.

ßbersicht Game Cache:

Zum Schluss noch eine Tabelle mit allen Game Cache Funktionen

  • Spiel Cache – Create a Game Cache Erstellt
    einen neuen Game Cache
  • Spiel Cache – Save Game Cache Speichert
    einen vorher erstellten Game Cache ab. <
  • Spiel Cache – Store Unit Speichert
    eine Einheit in einen Game Cache ab
  • Spiel Cache – Store Real Speichert
    eine Real Variable in einen Game Cache
  • Spiel Cache – Store Integer Speichert
    einen Integer in einem Game Cache ab
  • Spiel Cache – Store Boolean Speichert
    einen Boolean (Wahrheitswert) in einem Game Cache ab
  • Spiel Cache – Restore Unit Facing Angle

    Läd eine Einheit aus dem Game Cache in ein bestimmtes Gebiet

  • Spiel Cache – Restore Unit Facing Point
    Läd eine Einheit aus dem Game Cache in ein bestimmtes Gebiet


zum Anfang


5. Variablen


zum Anfang


5.1. Allgemein

Was
sind Variablen?

Variablen sind durch Auslöser gespeicherte Informationen, die der
WE in späteren Auslösern wiederverwenden kann. So kann man
zB die Anzahl der Kills eines Spielers oder die aktuelle Spielgeschwindigkeit
in einer Variable speichern. Da dies allerdings ein Basis-Tutorial sine
soll, bringe ich euch mal nur die wichtigsten bei, die da wären:

  • Integer
  • Boolean
  • String

Wie setze ich Variablen ein?

Erstellt eine neue Map. Drückt im Auslöser-Editor STRG+B,
um in den Variablen-Bildschirm zu gelangen. Dort seht ihr nun alle auf
dieser Map vorhandenen Variablen, das sind nur noch keine. Klickt auf
„New Variable“ und erstellt eine Boolean-Variable
mit dem Namen „Entered“ ohne Array und mit Startwert
„False“. Boolean-Variablen können nur „Wahr“

oder „Falsch“ sein. Nun erstellt ihr irgendwo in
der Map eine Region mit dem Namen „Test“ und setzt
ein paar Doodads zur Kennzeichnung daneben (Wir wollen sie ja gleich
noch finden). Dann setzt ihr eine beliebige Einheit auf die Karte, aber
nicht in die Region. Erstellt nun einen Auslöser, der wie folgt
aussehen sollte:

    Ereignis: A unit enter Test
    Bedingungen: –
    Aktionen: Set Variable Entered = „True“

Nun merkt sich der WE, ob jemand die Region betreten hat oder nicht. Das
bisher erstellte Zeugs wollen wir nun auch mal abfragen. Dazu erstellen
wir diesen Auslöser:

    Ereignis: A player skips a Cinematic

    Bedingungen: –
    Aktionen: If (Entered Equal to „True“) then do
    (Game – Display to (All players) the text „Die Region wurde betreten“)
    else do
    (Game – Display to (All players) the text: „Die Region wurde noch nicht betreten“)

Nun testen wir die Map mal… *wart* *wart* … Nach Beginn ESC drücken
und gucken was passiert. Jetzt betretet die Region mit der Einheit und
drückt dann nochmals ESC. Entsprechen die Ergebnisse den Erwartungen?
Musterbeispiel:

  • Beim ersten ESC: Die Region wurde noch nicht betreten
  • Beim zweiten ESC: Die Region wurde betreten

Wir wollen nun aber lieber wissen, wie oft die Region
betreten wurde. Zu diesem Zweck erstellen wir eine Integer-Variable.
Diese soll den Namen „Times“ und den Startwert „0“
haben. Von Array lassen wir weiterhin die Finger… Wir fügen nun
unserem kleinen Auslöser folgende Aktion zu: Set
Variable Times = Times +1
Wenn jetzt jemand die Region betritt,
setzt der WE „Times“ einen höher, was „Times“
zu einem Zähler macht.

Beim zweiten Auslöser (dem mit ESC) ändern
wir nun die Aktion in:

If (Entered Equal to „True“) then do
(Game – Display to (All players) the text: „Die Region wurde “
+ (String(Times)) + “ mal betreten“) else do (Game – Display
to (All players) the text: „Die Region wurde noch nicht betreten.“)
.
Hier wurde die Funktion „Convert Integer to String“

benutzt, da die Text-Nachricht nur String-Variablen unterstützt
und wir eine Integer-Variable darstellen wollen.

Testet die Map und seht, ob alles nach Plan verläuft.
(Muster: „Die Region wurde xy mal betreten“ oder
„Die Region wurde noch nicht betreten“).
Wenn alles geklappt hat und ihr die einzelnen Schritte auch logisch
verstanden habt, habt ihr eine gute Grundlage für spätere
Arbeiten mit Variablen.

Variablen-Typen:
Es gibt noch andere Typen von Variablen. So könnte man theoretisch
bei jedem Betreten der Region den Namen der betretenden Einheit sowie
den Namen der letzten beiden (2,3,4) Einheiten abrufen. Dafür gibt
es so viele Variablentypen. Ich nenne hier alle verfügbaren Einheiten-Typen
sowie eine kleine Erläuterung der einzelnen Typen.

  • Ability: Eine Fähigkeit; so kann man zB „Blizzard“
    oder „Aas-Schwarm“ speichern
  • Boolean: Wahrheitswert; siehe oben
  • Camera Object: Eine erstellte Kameraposition
  • Destructible: Ein Doodad auf der Karte
  • Destructible-Type: Ein Doodad-Typ zB „Elfen-Tor“
    oder „Käfig“
  • Defeat Condition: Eine festgelegte Bedingung für
    eine Niederlage.
  • Dialog: Ein erstelter Dialog („Menü“;
    zB DM-Mod)
  • Dialog Button: Eine Schaltfläche innerhalb
    eines Dialoges
  • Game Cache: Ein erstellter Game Cache zB „highscore.w3v“
  • Game Speed: Hier kann man einen Spielgeschwindigkeitstyp
    speichern (zB Schnell, Langsam)
  • Integer: Ganzzahl; siehe oben
  • Item: Ein bestimmter Gegenstand
  • Item-Type: Typ eines Gegenstandes zB „Ankh
    der Reinkarnation“
  • Leaderboard: Eine Tabelle; wird oft als Highscoreliste
    abused
  • Order: Ein zu erteilender/erteilter Befehl zB „attack“
  • Player: Ein Spieler zB „Spieler1“
  • Playercolor: Die farbe eines Spielers zB „Rot“
  • Playergroup: Eine Spielergruppe zB „Allianzen
    von Spieler1“
  • Point: Ein Punkt auf der Map
  • Quest: Wenn zB „Quest1“ abgeschlossen
    ist
  • Quest-Requirement: Die speicherbare Anforderung
    für ein Quest
  • Race: Rasse (HU/Orc/UD/NE), wenn man Zufallsvölker
    benutzt und Auslöserkontrolle beibehalten will
  • Real: Eine reele Zahl (-n bis n; keine Brüche)
  • Region: Selbsterklärend
  • Sound: zB der zuletzt gespielte Sound
  • Event-ID: Weiss nich, wofür der ist -.-
  • Specialeffect: zB der zuletzt erschienene Effekt
  • String: Eine Zeichenfolge (zB „Max ist doof“
    oder „Dryaden sind imba“ oder „JamesBond007“)
  • Tech-Type: Ein Tech-Stamm zB „Kraft des Mondes“
  • Timer: Ein existierender Timer (zB ein Countdown)
  • Timer-Window: Das Fenster eines Timers
  • Trigger: Ein Auslöser (zB „This trigger“)
  • Trigger Condition: Die Bedingung eines Triggers
    zum ßbertragen von Bedingungen
  • Trigger Action: die Aktionen innerhalb eines Triggers;
    zB if..then…else…
  • Unit: Eine Einheit (zB Held = „Triggering
    unit“)
  • Unit-Group: Wie Player-Group nur halt mit Einheiten
  • Unit-Type: zB „Miliz“ oder „Irrwisch“

Das gute an den vielen Typen ist, dass man alles, wirklich alles, was
auf der Map passiert, aufzeichnen und wiederverwenden kann. Die Funktionen
für jeden Typ sind unterschiedlich.

Arrays:
Wenn ihr eine Variable erstellt, könnt ihr [ ]Array anklicken,
um die Variable zu einer Array-Variablen zu machen. Das hat die Funktion,
dass eine Variable per Index mehrere Sachen speichern kann. Beispiel:

    var_hero[1] (Der Held von Spieler 1 bei einer Arena-Map)
    var_hero[2] (Der Held von Spieler 2 bei einer Arena-Map)

oder:

    kills[1] (Die Kills von Spieler 1)

    kills[2] (Die Kills von Spieler 2)

Das praktische daran ist, dass sie Indices auch Funktionen
haben können, was uns einige andere Variablen erspart. zB kann
man da den Spielerindex eines Spielers einsetzen. Arrays kann man auch
sehr gut bei Dialogfeldern einsetzten, indem man nicht für jedes
Feld eine Variable, sondern ein Array für alle Felder erstellt.

Fazit:
Der Vorteil von Variablen (insbesondere von Arrays) liegt klar auf der
Hand: Man spart viel Auslöser-Gefummel.

Ich hoffe, dass ich einigen Leuten hiermit einen kleinen Einblick in
die Welt der Variablen gegeben habe und sie ihre Projekte nun einfacher
verwirklichen können.


zum Anfang


5.2. Zählen

z.B. ich möchte,
dass eine quest erfüllt ist, wenn 7 bauern in einer region gelandet
sind:

zunächst brauchen wir ne Variable Integer, Zählinteger gennant.
Dann der Trigger:

    Ereignis: Unit enters Region

    Bedingung:Unit is equal to Peasant
    Action:
    – set ZählInteger to Arithmetic: Zählinteger + 1
    – If Zählinteger = 7 then do „quest erfüllt“

Bei jedem Betreten eines Bauern wird die Variable um
eins im Wert erhöht, zählt also die Bauern, die die Region
betreten.Ein Haken: wenn ein bauer 7x raus-und reinrennt, ist die quest
auch erfüllt, also dient meine Variante nur denen, die ihre Bauern
verschinden lassen, invulverable machen oder ähnliches…Man könnte,
um dies zu vermeiden, jedem eintretenden Bauern eine Variable zuweisen,
die dann bei erneutem auslösen des triggers den Zählvorgang
unterbindet.


zum Anfang


5.3. Zufallszahlen

Ist auch recht einfach, man sollte sich nur ein wenig mit den
Variablen auseinandersetzten..

Jede Variablen-Klasse, die halt ne Zahl trägt, hat irgendwo den
Wert Math – Random number zu auswahl. Es existieren hier noch
2 Optionen, nämlich einen Startwert und Endwert. z.B. aus Set
variable (Integer)
folgt die Zuweisung Math – Random Numberbetween
1 and 10.
Danach hat unsere Integer einen zufälligen wert
zwischen 1 und 10!

So wozu kann man das brauchen? glaubt mir, zu allem möglichen
Dreck! daraus können echt tolle Sachen entstehen, z.B. kam die
Idee hierzu von bhody:
Er wollte in zufälligen Zeitintervallen eine Wetteränderung
hervorrufen. Klingelts? zufälliges zeitinterval, damit kann man
doch bestimmt vieles anstellen… Die durchführung ist GANZ einfach,
wir bestimmen eine REAL-variable, die speichert zahlen im format X.XX
(z.B. 1.00 (sec), 3.56), also genau das, was für Wait gebraucht
wird…

    Set Variable (Real)= Random Number 45 – 180
    Wait Real

damit haben wir jetzt ein eitinterval zwischen 45 und 180 sekunden….


zum Anfang


6. Diverses


zum Anfang


6.1. Einheiten bewegen

Es gibt einmal den befehl
Unit – Move Unit to (instantly), welches
bedeutet, dass eine Einheit „gebeamt“ wird,also ohne Berücksichtigung
von hindernissen oder Zeit an dem Punkt erscheint.

Dann gibt es da noch den Befehl Unit –
Issue order Unit targeting a point
. Dieser gibt der Einheit den
gewünschten Befehl, als ob er vom Spieler gegeben würde. Es
ist alles möglich, was ein User im Spiel kommandieren kann, sogar
Spezialfertigkeiten der Helden.


zum Anfang


6.2. Starcraft-Einheiten

Seit
dem TFT-Editor sind die Starcraft-Einheiten (also Chaos-Space-Orc, Space-Marine,
Zergling und Hydralisk) ohne große Probleme zuänglich. Man
findet sie wie jede andere Einheit auch in der Einheitenpalette (U).
Und zwar muss man bei Spieler den Eintrag neutral passiv
wählen, und bei Kategorie Kampagne.


zum Anfang


6.3. Leaderboard

Wie bekommt man rechts
oben ein kleines Fenster hin, das Punkte zählt, oder sonstige Werte
anzeigt, die bei der Durchführung von bestimmten Aufgaben hilfreich
sein können? Dabei handelt es sich um ein Leaderboard (Bestenliste)

Ich möchte
das hier anhand eines Beispiels beschreiben, dabei geht es darum 20
Schafe zu töten, und im Leaderboard wird angezeigt, wieviele Schafe
man noch zu töten hat (wenn man das Beispiel einmal verstanden
hat, kann man ohne Probleme andere Leaderboards machen, da sich nur
die Events/Bedingungen ändern, aber die Funktionsweise des Leaderboades
immer gleich ist). Wenn man mehr Einträge als zB. nur Schafe haben
möchte, muss man lediglich weiter Spieler hinzufügen – so
kann man beispielsweise auch größere Leaderboard erschaffen,
wie das Bild auf der rechten Seite zeigt. Im nachfolgenden Muster möchte
ich aber nur auf einen Eintrag eingehen, da dies für das Verständis
vollkommend ausreichend ist, und weitere Einträge in ähnlicher
Form vorgenommen werden wie der erste. Man kann sein Leaderboard also
nach belieben (bis zu 12 Spieler erweitern).

Leaderboard erzeugen

    Ereignis: Time Elapsed (mit Initialisierung funktioniert es nicht)

    Bedingung: –
    Aktionen:
    – Bestenliste – Create Leaderboard (den Titel des Boardes angeben)
    – Bestenliste – Add Player (Den Namen des Spielers angeben
    [in dem Fall „Schafe“] + Startwert (am Besten eine Variable)

Leaderboard im Einsatz

    Ereignis: A Unit owend by Neutral Passiv stirbt (oder was man sonst halt braucht)
    Bedingung: Type of Dying Unit gleich Schaf
    Aktionen:
    – set Variable (indem Fall hatte die Var den Startwert 20 und wird immer dekrementiert)
    – Bestenliste – Change Player Value (hier wird dann der veränderte Wert im Board angezeigt)

    – If (SchafCount=0) then (Auslöser – Run SchafComplet) else (do Nothing) (Schlussverarbeitung)

Wenn dann das Leaderboard ausgedient hat, weil es seinen Zweck erfüllt
hat, kann man es mit Bestenliste – Destroy
vernichten.


zum Anfang


6.4. Farbige Schrift

In der WC3 Kampagne
wird bei Quests der Text teilweise farbig angezeigt.
Bei einer herkömmlichen Quest Message steht zB:
„Neue Quest:
– Mal’Ganis töten

Nun wird bei „Neue Quest:“ einfach ein Farbcode hinzugefügt,
so dass dann im Editor „|cffffcc00Neue Quest:|r“ steht.

„|c“ ……..aktiviert den Farbcode.
„ff“ ……..steht für die Tranzparentz
der Farbe.
„ffcc00“ .ist der Farbcode in Form von R
G B (Rot Grün Blau), jeweils von 00 (0) bis ff (255).

„|r“ ………beendet den Farbcode.

ffcc00 ist die Farbe, die auch in der Kampagne für Quests
verwendet wird.


zum Anfang


6.5. Portale

  1. 2 Portale auf die Map
    stellen.
  2. 2 Gebiete jeweils unter die Portale zeichnen.
  3. Wechselt auf Einheiten-Palette,drückt die Leertaste und doppelklickt
    auf eins der Portale. Es erscheint ein Fenster.
  4. Markiert das Häkchen „Portal aktiv“ und stellt als Ziel
    das Gebiet ein, das unter dem anderen Portal liegt.
  5. Verfahrt genauso mit dem anderen Portal.

Fertig!!!
Tipp:Ihr könnt natürlich auch nur ein Portal verwenden und
das Ziel-Gebiet irgendwohin setzen.


zum Anfang


6.6. Hero-Glow

Helden ohne
TeamGlow?

Einfach die Datei ReplaceableTextures\\TeamGlow\\TeamGlow13.blp
nehmen und 16mal in eure Map packen (als TeamGlow00;01;02;03;…;14;15)


zum Anfang


6.7. Einheiten-Animation

Jede
Einheit, viele Doodads haben Animationen.. Diese sind im Main Window
bei dem Portrait der ausgewählten Einheit zu finden. Man kann dort
alle durchschauen (sind stellenweise recht viele) und erhält den
Namen der eventuell gewünschten animation, z.B. stand, death,
decay flesh
usw… bei den Actions Animation
– Play Unit Animation
bzw Play Doodad/Destructible
Doodad Animation
einfach den Namen der gewünschten Animation
eintragen.

Aber Achtung: die death-animation von
Einheiten z.B. zeigt die Einheit, wie sie immerwieder tot umfällt
,
also würde erst

    Play Unit Animation death
    Wait 1.00 sec (je nach game speed halt)
    Play Unit Animation decay flesh

eine Einheit tot umfallen und liegenbleiben lassen.

Weitere Anregungen:

B litze, Feuer, Rauch, Kisten, Tiere, eigentlich alles, was man per
drag&drop auf die landschaft knallt, besitzt mindestens die stand
und death animationen.. Frohes experimentieren

zum Anfang


6.8. Quests

Es soll sich hierbei
um ein Hauptquest handeln, wenn man es schafft, hat man gewonnen.Dazu
soll ein gegnerischer Held getötet werden. Das Quest hat man von
Anfang an.

Quest erzeugen

    Ereignis: Map Initialization
    Bedingung: –
    Aktion:
    – Create Quest (Benötigtes Quest, Rest bleibt euch überlassen)
    – set [Variable] = last created Quest (Quest in einer Questvariable speichern)

Quest auslösen

    Ereignis: Unit – Specificed Unit (dies) (die Unit die man töten soll)
    Bedingung: –
    Aktion:
    – Quest – Mark [Variable] as Abgeschlossen (die Questvariable verwenden)

    – Spiel – display (to all Players) the Text [Siegesnachricht]
    – Auslöser turn on [Sieg auslösen]
    – Auslöser – run (Checking conditions) [Sieg Auslösen]
    – Auslöser – turn off [this Trigger]

Sieg Auslösen (am Anfang deaktiviert)

    Ereignis:

    Bedingung:
    Aktion:
    – Wait 3 seconds –Spiel – Victory [Spieler](Zeigen dialogs, zeigen scores)


zum Anfang


Schlußwort

Obwohl nun mein Name
unter diesem Tutorial steht, gebührt der Dank nicht mir. Dieses
Tutorial wurde in erster Linie von BlackLotus zusammengestellt, und
auch er ist nicht allein für den Inhalt verantwortlich. Die einzelnen
Beiträge diese Tutorials wurden von unterschiedlichsten Usern des
Mappingforums verfasst und in den Erkenntnis-Threads zusammengefasst.
BlackLotus hat die wichtigsten davon dann in einem Thread zusammengetragen
– und dieses Tutorial basiert auf jenem Thread. Mein Dank gilt besonders
BlackLotus, aber auch all jenen die an diesem Tutorial quasi indirekt
mitgewirkt haben.

Ich hoffe dieses Tutorial hat euch etwas gebracht, und einige Möglichkeiten
des World Editors offenbart, die ihr vielleicht noch nicht kanntet.
Solltet ihr dennoch Fragen haben, schaut einfach im Forum vorbei…

Viel Spaß noch beim Mappen!

zum Anfang

  • 28.07.2008 um 20:15
Beseitigung von Memory-Leaks Timer selber bauen

Grundlagen und Wissenswertes zum Editor

[nocontentad]

Grundlagen und Wissenswertes zum Editor


zum Anfang

1. Vorwort:

Dieses Tutorial befasst sich mit Grundlagen und Wissenswertem des Editors. Es finden sich hier einige grundlegende Dinge, aber auch
solche, von denen man vielleicht gar nicht weis das es machbar ist bzw. wie es funktioniert, und das deshalb nicht verwenden würde.
Dieses Tutorial basiert im Grunde auf einem Thread aus dem Mapping und Modification Forum und ist eine Sammlung der bis dato zusammengetragenen
Informationen. Ich hoffe ihr findet hier einiges Interessantes und das Tutorial hilft euch dabei mit dem Editor besser umgehen zu können.
Viel Spass noch beim Lesen dieses Tutorials


zum Anfang


2. Videos/Sequenzen


zum Anfang


2.1. Letterbox-Mode

Das ausgeblendete Interface
nennt sich Letterboxmodus. Das ist relativ essentiell, weil es schon
mal sehr professionell aussieht und vor allem die Möglichkeit gibt,
Einheiten per Untertitel sprechen zu sehen..
Die Aktion dazu nennt sich Cinematic – Letterbox
Mode On
die Option over 2.00 sec definiert die Zeit des
Übergangs von Userinterface (also Minimap, Einheitsdetails…)
zum Letterboxmodus. Erfahrungsgemäß sieht 2.00 sec am Besten,
am Weichsten aus. Nur wenn die Letterbox sofort stehen soll (Spiel fängt
mit Sequenz an oder so) sind 0.00 sec angebracht.

Zum Spiel, sprich UserInterface, zurückkehren kann man ebenso einfach:
Cinematic – Letterbox Mode off auch wieder
mit der Option der Zeit.

So, nun haben wir die Rahmenbedingungen für eine Sequenz. Jetzt
will ich noch schnell auf ein paar der schier unendlichen Aktionen während
einer Sequenz eingehen, damit jeder etwas herumexperimentieren kann…

Einheiten sprechen lassen:

Ist relativ einfach, wir benutzen die Action Cinematic
– Transmission from Unit
. Hierbei ist eine Einheit zu wählen,
die sprechen soll. (wichtig wegen Portrait und Speechindicator).Dann
geben wir der Einheit einen Namen (steht dann in Gold-Gelb über
dem Text), wenn wir wollen…
Jetzt fehlt nur noch der zu sprechende text und schon ist es lauffähig.
Wenn der Text sehr lange ist, empfiehlt sich die option „add 0.00
sec“ (füge 0.00 sekunden hinzu) zu erhöhen, ebenso lässt
er sich auch verkürzen. (z.B. substrac 2.00sec führt
zu 5-2=3 sekunden) Das einfachste ist Set to, ein Text mit
Set to 3 ist 3 Sekunden sichtbar


zum Anfang


2.2. Kamerabewegungen

Wichtig sind noch Kamerabewegungen.
Sie vermitteln Athmosphäre und sind einfach „cool“.

Einfachste Art und Weise, eine Kamera zu benutzen, ist die Standard-Game-Camera
zu bewegen. Sie kann auf Einheiten oder Regionen oder sonstwas bewegt
werden, z.B. mit der Aktion Kamera – Pan Camera(Timed).
Es wird ein Objekt gefordert, das dann zentral im Bild stehen soll..
Das wären zum Beispiel Center Of Region Regionen, oder aber
Unit – Position of unit.

Damit lässt sich die Kamera zu nem Helden bewegen, der dann etwas
sagt. Die Zeitangabe besagt, wie lange die Kamera von der aktuellen
Position aus zum Ziel braucht. Der wert 0 bewirkt einen sofortigen Sprung,
da aber Achtung: Kein Rechner der Welt springt wirklich sofort.

Diese Aktionen gibt es noch in fortgeschrittenen Formen, z.B.

  • Kamera – Pan Camera with Interpolatet Height(Timed) bedeutet, dass der Kamera-Mittelpunkt nicht auf dem
    Boden liegt, sondern den eingegebenen Höhenwert besitzt (normale Einheiten sind ca. 60-80 gross).
  • Kamera – Pan Camera as Necessary verhindert einen zu grossen sprung, d.h. wenn die Aktuelle Kamera
    sehr weit vom Ziel entfernt is, springt sie augenblicklich dahin. Ansonsten verhält sie sich wie Camera – Pan Camera(Timed).

Mit diesen Mitteln sollten jetzt schon kleine Sequenzen möglich sein.
Ich habe gerade von der einfachsten Kamerabewegung geschrieben, jetzt kommt die wirklich Lustige: Wir befinden uns in einem 3D-spiel,
daraus folgt wir können auch „vernünftige“ Kameraperspektiven erzeugen… Die Standard-Game-Camera ist nur eine von
unendlich vielen Kameras.

Kameras sind im Camera-Editor herzustellen, oder über die Action
Kamera – Set Camera Field(Timed), was aber
sehr kompliziert und schwierig ist, im Endeffekt aber den saubersten
weg darstellen dürfte, aber vergessen wir das….

Der Kamera-Editor (Tastenkürzel ‚M‘) ist herrlich einfach zu bedinen, der Button ‚Kamera erstellen‘ erstellt eine Kamera im Mittelpunkt
des Kartenauschschnitts, über ‚Kameraeigenschaften bearbeiten‘ erreicht man ein Menü, in dem man die Kamera individuell
einstellen kann.
Sehr empfehlenstwert ist es, ein Häckchen bei ‚Vorschau-Werte im Hauptfenster‘; zu setzen, ich denke alles andere erübrigt sich…
Einfach mal alles testen, die Änderungen sollten sofort sichtbar
sein. Mit der Kombination Strg + Shift + C oder Mittlere
Maustaste
kann man die Standard-Kamera im Editor wiederherstellen…


zum Anfang


2.3. Kamera dreht sich mit Einheit:

Und zwar folgendermaßen:
bei Map Initialization die Aktion ausführen:
Camera – Lock camera target for (der gewünschte
player) to (die entsprechende einheit auswählen), offset by (0.00,
0.00) using The unit’s rotation

Dann eine neuen Trigger erstellen mit einem Periodic Event der alle
0.10 sekunden auftritt und folgende Aktion ausführt:

Camera – Set (gewünschter player) camera
rotation to Facing of (die gewünschte einheit) over 0.10 seconds

Mir is natürlich klar das es problematisch sein kann 10 trigger
per sekunde auszulösen, aber da muss man experimentieren, es geht
auch mit weniger ganz gut (zb. alle 0,2 sec)


zum Anfang


2.4. Videos abbrechen (mit ESC):

Also zunächst einmal
ist es hierbei recht hilfreich, wenn jede Video-Sequenz ihren eigenen
Ordner spendiert bekommt, da man für jede abbrechbare Sequenz mindestens
2 Auslöser braucht. Außerdem braucht man eine Variable vom
Typ Wahrheitswert (Boolean)
, die man am besten ‚CinematicSkipped‘ o.ä.
nennt.

Der Auslöser für das Abbrechen:

    Ereignis: Player – Cinematic Skipped

    Aktion:

    – Set Variable (CinematicSkipped = TRUE)
    – Video – Turn Cinematic Mode Off
    – Kamera – Reset Game Camera
    Wenn während des Videos wichtige Einheiten bewegt werden, Tore
    geöffnet werden oder andere Dinge geschehen, die das Spiel beeinflussen,
    dann muss dies jetzt nachgeholt werden

Der Auslöser für die Sequenz:

    Ereignis: was man braucht
    Aktion:
    – Set Variable (CinematicSkipped = FALSE)
    – Video – Turn Cinematic Mode On

    – diverse..
    – ..Anweisungen (für Video)

In der Sequenz muss nun nur noch hinter jedes „Wait“
der Befehl If (CinematicSkipped Gleich TRUE)
then Skip Remaining Actions else Do Nothing
Dies gilt natürlich
auch für jede „Transmission from Unit“, bei der die Option
Warten verwendet wird.

Eine -zugegeben- umständliche Prozedur, doch leider die einzige,
denn es gibt keine Möglichkeit, einen laufenden Trigger von „außen“
abzubrechen. Auch bei den Blizzard Kampagnen wird es so gemacht wie
beschrieben.

zum Anfang


2.5. „Kritische“ Videos:

Wenn man oft mit InGame
Videos arbeitet, die aber an kritischen Punkten sind (dh. man muss jemanden
befreien der bewacht wird) kann es ja vorkommen, dass das Video dann
anfängt, obwohl noch gegnerische Einheiten in der Nähe sind.
Dabei kann es dann vorkommen, dass man angegriffen wird, ohne sich verteidigen
zu können, da der Ladderboxmode ja eingeschaltet ist, und man somit
nichts machen kann…

Um das zu verhindern baut man folgende Aktionen in den Trigger ein,
bevor man das Video startet::

    – Einheit – Pause all Units :
    – Spieler – Set Alliance (die im Video vorkommenden Parteien verbünden)
    – Einheit – Unpause Unit (die man im Video bewegen möchte)

Wenn das Video aus ist, muss man natürlich die alten Allianzen
wiederherstellen, und die einheiten mit
Einheit – Pause aus All Units in ihren ursprünglichen
Zustand bringen.


zum Anfang


2.6. Blendenfilter:

    Ereignis: Time elapsed 5 sec
    Bedingung : –

    Aktion:
    – Video – Set Fade filter <Schwarze maske> over 10.00 sec

Hier eine Liste der Blendenfilter (falls ich eine vergesse editier
ich das rein)

  1. Weiße Maske – Der Bildschirm wird langsam
    schwarz
  2. Schwarze Maske – Eigentlich das gleiche wie Weiße
    Maske.
  3. Pandaren Nachwuchs – eine Panda Family
  4. Dunstfilter – Am oberen Bildschirmrand bildet sich
    eine schwarze Schicht
  5. Bodennebel – Am unteren Bildschirmrand bildet sich
    eine Schwarze Schicht
  6. Dunst und Nebel – Beschreibt sich von selbst
  7. Schrägstrich – Von links unten in der Ecke
    nach rechts Oben bildet sich eine Schwarze Schicht
  8. Traum – eben…wie ein Traum…
  9. Größe – Alles bis auf einen Kreis in
    der Mitte wird schwarz (wie man es aus alten Filmen am Ende kennt)
  10. Pow! – Ein großes Schwarzes POW! wird auf
    dem Bilschirm gezeigt
  11. Splatt! – Ein großes rotes Splatt! wird auf
    dem Bildschirm gezeigt

Wenn mann die Blendefilter genau betrachted dann sieht man: (100.00,100.00,100.00).
Das bedeuted (rot/100%,grün/100%,blau/100%), also wenn ihr z.B.

  • komplett roten Bildschirm = Schwarze/Weisse Maske + (100.00,0.00,0.00)
  • grünes Splatt!! = Splatt!! + (0.00,100.00,0.00)
  • blauer Traum = Traum + (0.00,0.00,100.00)

ihr könnt das beliebig mischen und so krasse Farben bekommen…


zum Anfang


2.7. Cinematic Feeling:

Stellt
euch eure Szene bildlich vor, was soll passieren, dann stellt euch vor,
wie das von Hollywood verfilmt werden würde. Kein Scherz, Kino
bildet.
Benutzt die Kamera nicht dazu, irgendwas zu zeigen, benutzt sie, um
Feelings zu beeinflussen. Genau wie sounds. Eine langsame (sehr langsam!)
Kameradrehung um zwei sich unterhaltende Charaktere erzeugen z.B. je
nach Zusammenhang eine friedliche oder auch tragische Szene. Öfter
gebraucht wird dann wohl eine spannende Szene, das is sehr schwierig,
aber angesichts des Erdumfangs … Wichtig is, Mut zu kurzen Szenen,
erzeugt etwas Hektik, viele Cuts, sehr schnelle Kamerafahrten, viele
verschiedene Perspektiven. Probiert alles aus, z.B. kann man mit dem
vermindern von FoV schnelle Bewegungen unterstützen.

Eine Kamera (ohne z-offset) im Editor zu erstellen is recht enfach,
man stelle sich die beteiligten Einheiten dorthin, wo sie in der sequenz
stehen werden (wenn ise da net schon sind), dann mittels Taste X im
editor den Letterboxmodus aktivieren. Nun kann man nur mit der maus
(Strg + Mausbewegung verändert Perspektive auf Y- und Drehung auf
X-Achse) die gewünschte Kamera herstellen, dann nur noch den Button
„Kamera erstellen“ klicken, einfacher kann man Perspektiven
nicht erzeugen


zum Anfang


3. Spezialeffekte


zum Anfang


3.1. Feuer erzeugen

Um Feuer im Spiel zu
erstellen, dass nicht von Anfang an sichtbar ist, gibt es die Möglichkeit,
die entsprechenden Doodads zu setzen, und zuerst ihre Dead-Animation
(Animation – Play Doodad Animation) zu
spielen. Was aber, wenn man Feuer in einem Gebiet erstellen will, das
sich dynamisch verhält (also etwa um eine Einheit, die zum Zeitpunkt
X ja nicht immer am gleichen ort sein muss) Alles mit doodads zukleistern?
– Nein ! — Die Spezialeffekte sind die Lösung:

Man erstellst mal ein Gebiet, welches dann brennen soll (nur die Größe,
Position unwichtig) – als Event nimmt man für dieses Feuerchen
was man halt braucht.

Trigger 1 – Der Ausgangsschalter
Im Schalter, der Ausgelöst wird, befindet sich eine Schleife, die
so oft durchlaufen wird, soviele einzelne Feuer man haben will. Als
Aktion wird ein Schalter laufen gelassen, der das Feuer erstellt (im
Folgenden Trigger 2 genannt)

Trigger 2 – Zum erstellen des Feuers hier wird das Feuer erstellt
mit: Spezialeffekt – Create Effekt at Point.
Dort nimmt man random point in region (mit offset, und stellt
das Offset so ein, dass es dem Standort von der Einheit entspricht.
(muss man etwas probieren mit dem x offset – also x/y of unit standort,
und bei x etwas dazuzählen). Die Effekte speichert man in ein Array,
sodass man sie nachher auch wieder löschen kann.

Feuer (Pfad): Doodads\\Cinematic\\TownBurningFireEmitter\\TownBurningFireEmitter.mdl


zum Anfang


3.2. Kreis aus Spezialeffekten

Ganz einfach! Ihr benutzt
hierfür diesen Trigger (Bsp. SpecialFX):

For each (integer A) from 1 to Anzahl do – create
a specialfx at point (x; y) offset by Radius towards ( (integer A) *
(360/Anzahl) ) using specialfxpath

  • Anzahl = Anzahl der Special-FXs
  • x bzw. y = Mittelpunkt an der Position x bzw. y
  • Radius = Radius des Kreises
  • (integer A) * (360/Anzahl) = Nächster Gradschritt, der bestimmt
    wo der nächste SpecialFX gesetzt wird. <= Hängt von der
    Anzahl ab!
  • specialfxpath = Pfad für den SpecialFX


zum Anfang


4. Game-Cache

Vorraussetzungen:

Man sollte den Editor grundlegend bedienen können und auch schon
mal mit dem Trigger Editor gearbeitet haben.
Einleitung: Bestimmt wird sich der ein oder andere
an dieser Stelle fragen wofür dieser Game Cache eigentlich gut
ist? Ganz einfach, nehmen wir mal an wir haben zwei Karten erstellt
die aufeinander folgen sollen. Außerdem soll der Held mit seinem
ganzen Inventar, seiner Erfahrung und seiner Fertigkeiten in der zweiten
Karte vorhanden sein.

Karten verbinden
Ok nun wird die erste Karte geöffnet und wir gehen in den Tigger
Editor. Nun erstellen wir einen neuen Tigger der ausgelöst werden
soll wenn der Spieler gewonnen hat:

    Ereignis: Spieler – Victory
    Bedingung: –
    Aktion: Spiel – Set next Level (Set next Level to [Pfad der nächsten Karte z.b Maps\\map2.w3m])

ACHTUNG: Es dürfen keine Leerzeichen
im Pfad enthalten sein!!!

Einheit mitnehmen:

Nun wollen wir aber auch den Helden den der Spieler in der ersten Karte
gespielt hat auch in die nächste Karte mitnehmen also fügen
wir in den gleichen Trigger wie oben folgende Aktionen ein:

    Spiel Cache – Create Game Cache (Create a Game Cache from [Name der Karte])
    Spiel Cache – Store Unit (Store [Den Helden auswählen] as
    [Name des Helden] of [Category] in [Last Created Game Cache])
    Spiel Cache – Save Game Cache (Save [Last Created Game Cache])

Zur Erklärung:

Die erste Aktion „baut“ einen neuen Game Cache mit dem Namen
den man eingibt. Ich empfehle den Namen der Karte zu verwenden da man
sonst bei mehreren Game Cachees leicht durcheinander kommt. Keine Leerzeichen
und unbedingt *.w3v am Ende. Die zweite Aktion speichert eine Einheit
in den grad erstellten Game Cache damit sie später wieder verwendet

werden kann. Dabei können sie der gespeicherten Einheit einen beliebigen
Namen (ohne Leerzeichen) geben, unter dem sie diese später wiederfinden.
Die dritte Aktion speichert den Game Cache nun endgültig ab.

Einheit laden:
So jetzt ist der Held im Game Cache und wie bekommen wir ihn da wieder
raus? Ganz einfach öffnen wir die zweite Karte in der der Held
wieder spielbar sein soll. Nun erstellen wir einen neuen Trigger:

    Ereignis: Map initialisierung
    Bedingung: –

    Aktionen:
    – Spiel Cache – Create Game Cache (Create a Game Cache from [Name des
    Game Cache der ersten Karte])
    – Spiel Cache – Restore Unit Facing Point (Restor [Name des Helden] of [Categoy]

    from [Last Created Game Cache] for [Besitzer des Helden] at
    [Gebiet in dem der Held erscheinen soll] facing [Einheit die er ansehen soll])

Zur Erklärung: Die erste Aktion
ruft den Game Cache wieder auf den die erste Karte erstellt hat. Dazu
muss nur der gleiche name wie in der ersten Karte angegeben werden.
Die zweite Aktion lädt die Einheit on ein Gebiet, wobei sie eine
Einheit anschaut. Der Name der Einheit muss wie in der ersten Karte
lauten. Den Besitzer des Held muss man auch noch festlegen. Geschaft
war doch garnicht so schwer.

Übersicht Game Cache:

Zum Schluss noch eine Tabelle mit allen Game Cache Funktionen

  • Spiel Cache – Create a Game Cache Erstellt
    einen neuen Game Cache
  • Spiel Cache – Save Game Cache Speichert
    einen vorher erstellten Game Cache ab. <
  • Spiel Cache – Store Unit Speichert
    eine Einheit in einen Game Cache ab
  • Spiel Cache – Store Real Speichert
    eine Real Variable in einen Game Cache
  • Spiel Cache – Store Integer Speichert
    einen Integer in einem Game Cache ab
  • Spiel Cache – Store Boolean Speichert
    einen Boolean (Wahrheitswert) in einem Game Cache ab
  • Spiel Cache – Restore Unit Facing Angle

    Läd eine Einheit aus dem Game Cache in ein bestimmtes Gebiet

  • Spiel Cache – Restore Unit Facing Point
    Läd eine Einheit aus dem Game Cache in ein bestimmtes Gebiet


zum Anfang


5. Variablen


zum Anfang


5.1. Allgemein

Was
sind Variablen?

Variablen sind durch Auslöser gespeicherte Informationen, die der
WE in späteren Auslösern wiederverwenden kann. So kann man
zB die Anzahl der Kills eines Spielers oder die aktuelle Spielgeschwindigkeit
in einer Variable speichern. Da dies allerdings ein Basis-Tutorial sine
soll, bringe ich euch mal nur die wichtigsten bei, die da wären:

  • Integer
  • Boolean
  • String

Wie setze ich Variablen ein?

Erstellt eine neue Map. Drückt im Auslöser-Editor STRG+B,
um in den Variablen-Bildschirm zu gelangen. Dort seht ihr nun alle auf
dieser Map vorhandenen Variablen, das sind nur noch keine. Klickt auf
„New Variable“ und erstellt eine Boolean-Variable
mit dem Namen „Entered“ ohne Array und mit Startwert
„False“. Boolean-Variablen können nur „Wahr“

oder „Falsch“ sein. Nun erstellt ihr irgendwo in
der Map eine Region mit dem Namen „Test“ und setzt
ein paar Doodads zur Kennzeichnung daneben (Wir wollen sie ja gleich
noch finden). Dann setzt ihr eine beliebige Einheit auf die Karte, aber
nicht in die Region. Erstellt nun einen Auslöser, der wie folgt
aussehen sollte:

    Ereignis: A unit enter Test
    Bedingungen: –
    Aktionen: Set Variable Entered = „True“

Nun merkt sich der WE, ob jemand die Region betreten hat oder nicht. Das
bisher erstellte Zeugs wollen wir nun auch mal abfragen. Dazu erstellen
wir diesen Auslöser:

    Ereignis: A player skips a Cinematic

    Bedingungen: –
    Aktionen: If (Entered Equal to „True“) then do
    (Game – Display to (All players) the text „Die Region wurde betreten“)
    else do
    (Game – Display to (All players) the text: „Die Region wurde noch nicht betreten“)

Nun testen wir die Map mal… *wart* *wart* … Nach Beginn ESC drücken
und gucken was passiert. Jetzt betretet die Region mit der Einheit und
drückt dann nochmals ESC. Entsprechen die Ergebnisse den Erwartungen?
Musterbeispiel:

  • Beim ersten ESC: Die Region wurde noch nicht betreten
  • Beim zweiten ESC: Die Region wurde betreten

Wir wollen nun aber lieber wissen, wie oft die Region
betreten wurde. Zu diesem Zweck erstellen wir eine Integer-Variable.
Diese soll den Namen „Times“ und den Startwert „0“
haben. Von Array lassen wir weiterhin die Finger… Wir fügen nun
unserem kleinen Auslöser folgende Aktion zu: Set
Variable Times = Times +1
Wenn jetzt jemand die Region betritt,
setzt der WE „Times“ einen höher, was „Times“
zu einem Zähler macht.

Beim zweiten Auslöser (dem mit ESC) ändern
wir nun die Aktion in:

If (Entered Equal to „True“) then do
(Game – Display to (All players) the text: „Die Region wurde “
+ (String(Times)) + “ mal betreten“) else do (Game – Display
to (All players) the text: „Die Region wurde noch nicht betreten.“)
.
Hier wurde die Funktion „Convert Integer to String“

benutzt, da die Text-Nachricht nur String-Variablen unterstützt
und wir eine Integer-Variable darstellen wollen.

Testet die Map und seht, ob alles nach Plan verläuft.
(Muster: „Die Region wurde xy mal betreten“ oder
„Die Region wurde noch nicht betreten“).
Wenn alles geklappt hat und ihr die einzelnen Schritte auch logisch
verstanden habt, habt ihr eine gute Grundlage für spätere
Arbeiten mit Variablen.

Variablen-Typen:
Es gibt noch andere Typen von Variablen. So könnte man theoretisch
bei jedem Betreten der Region den Namen der betretenden Einheit sowie
den Namen der letzten beiden (2,3,4) Einheiten abrufen. Dafür gibt
es so viele Variablentypen. Ich nenne hier alle verfügbaren Einheiten-Typen
sowie eine kleine Erläuterung der einzelnen Typen.

  • Ability: Eine Fähigkeit; so kann man zB „Blizzard“
    oder „Aas-Schwarm“ speichern
  • Boolean: Wahrheitswert; siehe oben
  • Camera Object: Eine erstellte Kameraposition
  • Destructible: Ein Doodad auf der Karte
  • Destructible-Type: Ein Doodad-Typ zB „Elfen-Tor“
    oder „Käfig“
  • Defeat Condition: Eine festgelegte Bedingung für
    eine Niederlage.
  • Dialog: Ein erstelter Dialog („Menü“;
    zB DM-Mod)
  • Dialog Button: Eine Schaltfläche innerhalb
    eines Dialoges
  • Game Cache: Ein erstellter Game Cache zB „highscore.w3v“
  • Game Speed: Hier kann man einen Spielgeschwindigkeitstyp
    speichern (zB Schnell, Langsam)
  • Integer: Ganzzahl; siehe oben
  • Item: Ein bestimmter Gegenstand
  • Item-Type: Typ eines Gegenstandes zB „Ankh
    der Reinkarnation“
  • Leaderboard: Eine Tabelle; wird oft als Highscoreliste
    abused
  • Order: Ein zu erteilender/erteilter Befehl zB „attack“
  • Player: Ein Spieler zB „Spieler1“
  • Playercolor: Die farbe eines Spielers zB „Rot“
  • Playergroup: Eine Spielergruppe zB „Allianzen
    von Spieler1“
  • Point: Ein Punkt auf der Map
  • Quest: Wenn zB „Quest1“ abgeschlossen
    ist
  • Quest-Requirement: Die speicherbare Anforderung
    für ein Quest
  • Race: Rasse (HU/Orc/UD/NE), wenn man Zufallsvölker
    benutzt und Auslöserkontrolle beibehalten will
  • Real: Eine reele Zahl (-n bis n; keine Brüche)
  • Region: Selbsterklärend
  • Sound: zB der zuletzt gespielte Sound
  • Event-ID: Weiss nich, wofür der ist -.-
  • Specialeffect: zB der zuletzt erschienene Effekt
  • String: Eine Zeichenfolge (zB „Max ist doof“
    oder „Dryaden sind imba“ oder „JamesBond007“)
  • Tech-Type: Ein Tech-Stamm zB „Kraft des Mondes“
  • Timer: Ein existierender Timer (zB ein Countdown)
  • Timer-Window: Das Fenster eines Timers
  • Trigger: Ein Auslöser (zB „This trigger“)
  • Trigger Condition: Die Bedingung eines Triggers
    zum Übertragen von Bedingungen
  • Trigger Action: die Aktionen innerhalb eines Triggers;
    zB if..then…else…
  • Unit: Eine Einheit (zB Held = „Triggering
    unit“)
  • Unit-Group: Wie Player-Group nur halt mit Einheiten
  • Unit-Type: zB „Miliz“ oder „Irrwisch“

Das gute an den vielen Typen ist, dass man alles, wirklich alles, was
auf der Map passiert, aufzeichnen und wiederverwenden kann. Die Funktionen
für jeden Typ sind unterschiedlich.

Arrays:
Wenn ihr eine Variable erstellt, könnt ihr [ ]Array anklicken,
um die Variable zu einer Array-Variablen zu machen. Das hat die Funktion,
dass eine Variable per Index mehrere Sachen speichern kann. Beispiel:

    var_hero[1] (Der Held von Spieler 1 bei einer Arena-Map)
    var_hero[2] (Der Held von Spieler 2 bei einer Arena-Map)

oder:

    kills[1] (Die Kills von Spieler 1)

    kills[2] (Die Kills von Spieler 2)

Das praktische daran ist, dass sie Indices auch Funktionen
haben können, was uns einige andere Variablen erspart. zB kann
man da den Spielerindex eines Spielers einsetzen. Arrays kann man auch
sehr gut bei Dialogfeldern einsetzten, indem man nicht für jedes
Feld eine Variable, sondern ein Array für alle Felder erstellt.

Fazit:
Der Vorteil von Variablen (insbesondere von Arrays) liegt klar auf der
Hand: Man spart viel Auslöser-Gefummel.

Ich hoffe, dass ich einigen Leuten hiermit einen kleinen Einblick in
die Welt der Variablen gegeben habe und sie ihre Projekte nun einfacher
verwirklichen können.


zum Anfang


5.2. Zählen

z.B. ich möchte,
dass eine quest erfüllt ist, wenn 7 bauern in einer region gelandet
sind:

zunächst brauchen wir ne Variable Integer, Zählinteger gennant.
Dann der Trigger:

    Ereignis: Unit enters Region

    Bedingung:Unit is equal to Peasant
    Action:
    – set ZählInteger to Arithmetic: Zählinteger + 1
    – If Zählinteger = 7 then do „quest erfüllt“

Bei jedem Betreten eines Bauern wird die Variable um
eins im Wert erhöht, zählt also die Bauern, die die Region
betreten.Ein Haken: wenn ein bauer 7x raus-und reinrennt, ist die quest
auch erfüllt, also dient meine Variante nur denen, die ihre Bauern
verschinden lassen, invulverable machen oder ähnliches…Man könnte,
um dies zu vermeiden, jedem eintretenden Bauern eine Variable zuweisen,
die dann bei erneutem auslösen des triggers den Zählvorgang
unterbindet.


zum Anfang


5.3. Zufallszahlen

Ist auch recht einfach, man sollte sich nur ein wenig mit den
Variablen auseinandersetzten..

Jede Variablen-Klasse, die halt ne Zahl trägt, hat irgendwo den
Wert Math – Random number zu auswahl. Es existieren hier noch
2 Optionen, nämlich einen Startwert und Endwert. z.B. aus Set
variable (Integer)
folgt die Zuweisung Math – Random Numberbetween
1 and 10.
Danach hat unsere Integer einen zufälligen wert
zwischen 1 und 10!

So wozu kann man das brauchen? glaubt mir, zu allem möglichen
Dreck! daraus können echt tolle Sachen entstehen, z.B. kam die
Idee hierzu von bhody:
Er wollte in zufälligen Zeitintervallen eine Wetteränderung
hervorrufen. Klingelts? zufälliges zeitinterval, damit kann man
doch bestimmt vieles anstellen… Die durchführung ist GANZ einfach,
wir bestimmen eine REAL-variable, die speichert zahlen im format X.XX
(z.B. 1.00 (sec), 3.56), also genau das, was für Wait gebraucht
wird…

    Set Variable (Real)= Random Number 45 – 180
    Wait Real

damit haben wir jetzt ein eitinterval zwischen 45 und 180 sekunden….


zum Anfang


6. Diverses


zum Anfang


6.1. Einheiten bewegen

Es gibt einmal den befehl
Unit – Move Unit to (instantly), welches
bedeutet, dass eine Einheit „gebeamt“ wird,also ohne Berücksichtigung
von hindernissen oder Zeit an dem Punkt erscheint.

Dann gibt es da noch den Befehl Unit –
Issue order Unit targeting a point
. Dieser gibt der Einheit den
gewünschten Befehl, als ob er vom Spieler gegeben würde. Es
ist alles möglich, was ein User im Spiel kommandieren kann, sogar
Spezialfertigkeiten der Helden.


zum Anfang


6.2. Starcraft-Einheiten

Seit
dem TFT-Editor sind die Starcraft-Einheiten (also Chaos-Space-Orc, Space-Marine,
Zergling und Hydralisk) ohne große Probleme zuänglich. Man
findet sie wie jede andere Einheit auch in der Einheitenpalette (U).
Und zwar muss man bei Spieler den Eintrag neutral passiv
wählen, und bei Kategorie Kampagne.


zum Anfang


6.3. Leaderboard

Wie bekommt man rechts
oben ein kleines Fenster hin, das Punkte zählt, oder sonstige Werte
anzeigt, die bei der Durchführung von bestimmten Aufgaben hilfreich
sein können? Dabei handelt es sich um ein Leaderboard (Bestenliste)

Ich möchte
das hier anhand eines Beispiels beschreiben, dabei geht es darum 20
Schafe zu töten, und im Leaderboard wird angezeigt, wieviele Schafe
man noch zu töten hat (wenn man das Beispiel einmal verstanden
hat, kann man ohne Probleme andere Leaderboards machen, da sich nur
die Events/Bedingungen ändern, aber die Funktionsweise des Leaderboades
immer gleich ist). Wenn man mehr Einträge als zB. nur Schafe haben
möchte, muss man lediglich weiter Spieler hinzufügen – so
kann man beispielsweise auch größere Leaderboard erschaffen,
wie das Bild auf der rechten Seite zeigt. Im nachfolgenden Muster möchte
ich aber nur auf einen Eintrag eingehen, da dies für das Verständis
vollkommend ausreichend ist, und weitere Einträge in ähnlicher
Form vorgenommen werden wie der erste. Man kann sein Leaderboard also
nach belieben (bis zu 12 Spieler erweitern).

Leaderboard erzeugen

    Ereignis: Time Elapsed (mit Initialisierung funktioniert es nicht)

    Bedingung: –
    Aktionen:
    – Bestenliste – Create Leaderboard (den Titel des Boardes angeben)
    – Bestenliste – Add Player (Den Namen des Spielers angeben
    [in dem Fall „Schafe“] + Startwert (am Besten eine Variable)

Leaderboard im Einsatz

    Ereignis: A Unit owend by Neutral Passiv stirbt (oder was man sonst halt braucht)
    Bedingung: Type of Dying Unit gleich Schaf
    Aktionen:
    – set Variable (indem Fall hatte die Var den Startwert 20 und wird immer dekrementiert)
    – Bestenliste – Change Player Value (hier wird dann der veränderte Wert im Board angezeigt)

    – If (SchafCount=0) then (Auslöser – Run SchafComplet) else (do Nothing) (Schlussverarbeitung)

Wenn dann das Leaderboard ausgedient hat, weil es seinen Zweck erfüllt
hat, kann man es mit Bestenliste – Destroy
vernichten.


zum Anfang


6.4. Farbige Schrift

In der WC3 Kampagne
wird bei Quests der Text teilweise farbig angezeigt.
Bei einer herkömmlichen Quest Message steht zB:
„Neue Quest:
– Mal’Ganis töten

Nun wird bei „Neue Quest:“ einfach ein Farbcode hinzugefügt,
so dass dann im Editor „|cffffcc00Neue Quest:|r“ steht.

„|c“ ……..aktiviert den Farbcode.
„ff“ ……..steht für die Tranzparentz
der Farbe.
„ffcc00“ .ist der Farbcode in Form von R
G B (Rot Grün Blau), jeweils von 00 (0) bis ff (255).

„|r“ ………beendet den Farbcode.

ffcc00 ist die Farbe, die auch in der Kampagne für Quests
verwendet wird.


zum Anfang


6.5. Portale

  1. 2 Portale auf die Map
    stellen.
  2. 2 Gebiete jeweils unter die Portale zeichnen.
  3. Wechselt auf Einheiten-Palette,drückt die Leertaste und doppelklickt
    auf eins der Portale. Es erscheint ein Fenster.
  4. Markiert das Häkchen „Portal aktiv“ und stellt als Ziel
    das Gebiet ein, das unter dem anderen Portal liegt.
  5. Verfahrt genauso mit dem anderen Portal.

Fertig!!!
Tipp:Ihr könnt natürlich auch nur ein Portal verwenden und
das Ziel-Gebiet irgendwohin setzen.


zum Anfang


6.6. Hero-Glow

Helden ohne
TeamGlow?

Einfach die Datei ReplaceableTextures\\TeamGlow\\TeamGlow13.blp
nehmen und 16mal in eure Map packen (als TeamGlow00;01;02;03;…;14;15)


zum Anfang


6.7. Einheiten-Animation

Jede
Einheit, viele Doodads haben Animationen.. Diese sind im Main Window
bei dem Portrait der ausgewählten Einheit zu finden. Man kann dort
alle durchschauen (sind stellenweise recht viele) und erhält den
Namen der eventuell gewünschten animation, z.B. stand, death,
decay flesh
usw… bei den Actions Animation
– Play Unit Animation
bzw Play Doodad/Destructible
Doodad Animation
einfach den Namen der gewünschten Animation
eintragen.

Aber Achtung: die death-animation von
Einheiten z.B. zeigt die Einheit, wie sie immerwieder tot umfällt
,
also würde erst

    Play Unit Animation death
    Wait 1.00 sec (je nach game speed halt)
    Play Unit Animation decay flesh

eine Einheit tot umfallen und liegenbleiben lassen.

Weitere Anregungen:

B litze, Feuer, Rauch, Kisten, Tiere, eigentlich alles, was man per
drag&drop auf die landschaft knallt, besitzt mindestens die stand
und death animationen.. Frohes experimentieren

zum Anfang


6.8. Quests

Es soll sich hierbei
um ein Hauptquest handeln, wenn man es schafft, hat man gewonnen.Dazu
soll ein gegnerischer Held getötet werden. Das Quest hat man von
Anfang an.

Quest erzeugen

    Ereignis: Map Initialization
    Bedingung: –
    Aktion:
    – Create Quest (Benötigtes Quest, Rest bleibt euch überlassen)
    – set [Variable] = last created Quest (Quest in einer Questvariable speichern)

Quest auslösen

    Ereignis: Unit – Specificed Unit (dies) (die Unit die man töten soll)
    Bedingung: –
    Aktion:
    – Quest – Mark [Variable] as Abgeschlossen (die Questvariable verwenden)

    – Spiel – display (to all Players) the Text [Siegesnachricht]
    – Auslöser turn on [Sieg auslösen]
    – Auslöser – run (Checking conditions) [Sieg Auslösen]
    – Auslöser – turn off [this Trigger]

Sieg Auslösen (am Anfang deaktiviert)

    Ereignis:

    Bedingung:
    Aktion:
    – Wait 3 seconds –Spiel – Victory [Spieler](Zeigen dialogs, zeigen scores)


zum Anfang


Schlußwort

Obwohl nun mein Name
unter diesem Tutorial steht, gebührt der Dank nicht mir. Dieses
Tutorial wurde in erster Linie von BlackLotus zusammengestellt, und
auch er ist nicht allein für den Inhalt verantwortlich. Die einzelnen
Beiträge diese Tutorials wurden von unterschiedlichsten Usern des
Mappingforums verfasst und in den Erkenntnis-Threads zusammengefasst.
BlackLotus hat die wichtigsten davon dann in einem Thread zusammengetragen
– und dieses Tutorial basiert auf jenem Thread. Mein Dank gilt besonders
BlackLotus, aber auch all jenen die an diesem Tutorial quasi indirekt
mitgewirkt haben.

Ich hoffe dieses Tutorial hat euch etwas gebracht, und einige Möglichkeiten
des World Editors offenbart, die ihr vielleicht noch nicht kanntet.
Solltet ihr dennoch Fragen haben, schaut einfach im Forum vorbei…

Viel Spaß noch beim Mappen!

zum Anfang

  • 28.07.2008 um 18:15
Kopicon´s Melee-Map Tutorial V1.02 360eSports mit neuem Team