Tutorial:Hero-Survival-Map – Mappedia

Tutorial:Hero-Survival-Map

Aus Mappedia
Wechseln zu: Navigation, Suche

Inhaltsverzeichnis

Vorwort

Dieses Tutorial benötigt keine Vorkenntnisse und versucht die Grundlagen des mapping am Beispiel einer Hero-Survival map zu erklären. Das Ergebnis des Tutorials wird eine kleine map sein, in der man sich zu Beginn einen Helden auswählt und dann in einer Arena gegen Computergesteuerte Gegner kämpft. Ziel der map ist es möglichst lang zu überleben. Wenn es Fragen zum Tutorial gibt, dann stellt diese bitte auf der Diskussionsseite dieses Artikels.


Kapitel 1 - Erstellen der Karte

Starten des Welteditors

Im Warcraft-Verzeichniss befindet sich ein Programm mit dem Namen World Editor.exe, welches du bitte startest.

Neue Karte erstellen

Um eine neue Karte zu erstellen gehst du auf Datei->Neue Karte .... Es öffnet sich ein Dialog mit dem Titel Neue Karte erzeugen. Im ersten Punkt wird die Kartengröße eingestellt, wähle hier 128 für Breite und 64 für Höhe. Als Grafikset nehmen wir Ashenvale, die Start-Klippenstufe behalten wir bei 2. Bei Start-Wasserspiegel wählen wir den mittlern Knopf (flaches Wasser). Unten links wählen wir noch die Textur, mit der die Karte zu Beginn bedeckt sein wird. Hier nehmen wir Gras (1. Reihe, 3.Knopf) . Nachdem alle Einstellungen gemacht worden sind wird die Karte mit einem Click auf Ok erstellt.

speichern

So, jetzt solltet ihr eine Überflutete Ebene sehen. Das wird sich gleich ändern, aber zuerst wird die Karte gespeichert (Datei->Karte speichern unter). Es erscheint eine Warnung, weil wir noch keine Startpositionen für die Spieler festgelegt haben - einfach mit Ja wegclicken. Auch die Anderen Warnungen könne wir ignorieren. Nun öffnet sich der Speichern unter- Dialog, den ja jeder kennen sollte. Speicher deine maps immer unter einem aussgakräftigem Namen (nicht map1.w3x). Es ist auch empfehlenswert für jedes Projekt einen neuen Ordner anzulegen und den Dateinamen mit einer Versionsnummer zu versehen. Um Frust bei Fehlern oder Abstürzen zu vermeiden sollte man oft speichern und bei jeder großen Änderung unter einem anderm Namen speichern, da es bei einem Absturz passieren kann, dass eine map zerstört wird.

Kapitel 2 - Lanschaftsgestaltung

Kamera-Steuerung

Um die Karte bearbeiten zu können muss man zuerst wissen, wie die Kamera bewegt wird.

Probiert alle Methoden einmal aus um ein Gefühl für die Steuerungzu bekommen. Es ist auch möglich sich mit Hilfe der Minimap(oben links) zu bewegen. Dies funktioniert wie in Warcraft.

Terrain editiern

Für die folgenden Schritte braucht ihr die Werkzeug-Palette. Wenn diese sich nicht im Bild befindet, dann könnt ihr sie unter Fenster->neue Palette->Gelände anzeigen.

In der Werkzeug-Palette befindet sich ganz oben eine Auswahl an Paletten. Da wir das Gelände bearbeiten wollen wählen wir hier Gelände-Palette. Die Gelände-Palette bietet 3 Werkzeuge:

Außerdem gibt es noch eine Auswahl von 5 verschiedenen Pinselgrößen und 2 verschiedenen Formen.

Wir wollen zuerst ein bisschen Land aus dem Wasser heben, damit unsere Helden später nicht im Wasser stehen müssen. Dazu wählen wir unter Höhe übernehmen den Knopf (Erhöhen). Als Pinselgröße wählen wir 8 (5. Knopf) und als Form nehmen wir den Kreis.

Wir werden nun 2 Inseln aus dem Wasser heben - eine Insel zum auswählen der Helden und eine andere zum Kämpfen. Zuerst erstellen wir die Insel zum Auswählen der Helden, und zwar auf der rechten Seite der Karte. Um Land anzuheben muss man jetzt einfach mit der linken Maustaste auf den Boden clicken und der markierte Bereich wird angehoben. Dies wiederholen wir solange, bis wir eine schöne Insel haben.
Hsm-tut01.jpg
Tipp: durch mehrfaches Drücken von g kann man das Gitternetzt ausschalten. Das ganze wiederholen wir noch einmal für die 2. Insel. Damit man die Inseln nicht verlassen kann benutzen wir das Verringern-Werkzeug aus der Gelände-Palette um das Land um die Inseln so weit abzusenken, bis es unpassierbar ist (das Wasser wird dunkel). Das ganze sollte nun so aussehen:
Hsm-tut02.jpg


Doodads erstellen

Da das ganze jetzt noch ziemlich leer aussieht, wählen wir nun die Doodad-Palette aus (Auswahlliste in der Werzeugpalette oder im Menu unter Fenster->Neue Palette->Doodads). Ein Doodad ist ein unbewegbares Objekt in der Welt, dass niemanden gehört. Die Doodad Palette sieht etwas anders aus, als die Gelände-Palette. Ganz oben befinden sich 2 Auswahl-Felder. Das erste gibt das Grafikset an, das zweite die Kategorie. Da wir zuerst ein par Ashenvale-Bäume pflanzen wollen wählen wir als Grafikset Ashenvale und als Kategorie Bäume/Zerstörbare Objekte und wählen aus der untern Liste Ashenvale als Doodad-Typ aus. Die Pinselgröße sollte auf 1 gestellt sein. Nun können wir mit einem Click auf den Boden Bäume pflanzen (um viele Objekte zu erstellen kann man die Maustaste gedrückt halten, oder die Pinselgröße verändern). Auf der linken Seite sollten es nicht zu viele Bäume sein, damit man noch Platz hat sich zu bewegen. Die linke Insle sollte dann in etwa so aussehen:
Hsm-tut03.jpg
Um die Insel weiter zu verschönern wechseln wir jetzt die Doodad-Kategorie von Bäume/Zerstörbare Objekte zu Umgebung uns setzen ein par Pilze und Sträucher, Felsen und Blumen. Als Vorbild kann man oft die Natur nehmen - zum Beispiel wachsen Pillze meistens im Wald oder am Waldrand. Andere Vorbilder sind natürlich auch maps, die einem gut gefallen. Beim Gestalten der Umgebung ist es wichtig viel auszuprobieren, bis man ein schönes Ergebnis gefunden hat. An dieser Stelle möchte ich noch einmal daran erinnern, dass man mit der Leertaste in den Auswahl-Modus wechseln kann um Doodads zu löschen oder zu verschieben. Außerdem sollte man wissen, dass man mit Strg + Z die letzte Änderung rückgängig machen kann. Um besser einschätzen zu können, wie das Ergebnis später im Spiel aussieht, sollte man auch von Zeit zu Zeit mit der Taste V in die Spielansicht wechseln und mit der Taste C die Kamera auf die Spielkamera umstellen.

Feineinstellungen: Mit der Leertaste gelangt man in den Auswahl-Modus( Man kann Doodads anwählen und löschen , verschieben oder kopieren. Herfür kann man die bekannten Shortcuts benutzen (Strg + X = Ausschneiden, Strg + C = Kopieren, Strg + V = Einfügen, Entf = löschen) oder die Doodads mit gedrückter linker Maustast verschieben). Hat man ein oder mehrere Doodads ausgewählt, kann man sie mit bei gedrückter Strg-Taste drehen (Mausclick in die gewünschte Drehrichtung). Mit einem Doppelclick auf ein Doodad öffnet man einen Dialog, in dem man Größe und Variation einstellen kann. Wenn man Strg gedrückt hält und dabei Bild hoch bzw. Bild runter drückt kann man die Flug-Höhe des ausgewählten Doodads verändern. Mit Bild hoch und runter (ohne Strg) kann man bei manchen Doodads die Höhe ändern, mit Pos1 und Ende ihre Breite.

Nach dem Setzen der Doodads sieht die rechte Insel bei mir so aus:
Hsm-tut04.jpg

Mit der anderen Insel kann man genau so verfahren. Bei mir sieht die rechte Insel dann so aus:
Hsm-tut05.jpg

Tipp: Wenn man Objekte dicht zusammen platzieren will muss man gleichzeitig die Shift Taste gedrückt halten. So kann man zum Beispiel Felsen in dichten Wald setzen.

Texturen

Bis jetzt ist die gesamte Karte mit der Textur Gras bedeckt, doch das wird sich gleich ändern. Hierzu wählen wir wieder die Gelände-Palette und wählen dort unter Textur übernehmen die Textur Grasbewachsene Erde (2.Reihe, 3.Knopf). Die Pinselgröße sollte 1 oder 2 sein. Jetzt können wir mit dieser Textur malen. Das gleiche macht man auch noch mit anderen Texturen. Auch hier sollte man ausprobieren, welche Texturen wo am besten aussehen. Die Texturen sollten zu den gesetzten Doodads passen (z.B.: Fels-Textur unter den Felsen). Außerdem sollte man darauf achten, welche Texturen nebeneinander gut aussehen (negativ Beispiel: Buschiges Gras auf rauer Erde).

Die linke Insel sieht bei mir nun so aus (mit v in die Spielansicht gewechselt):
Hsm-tut06.jpg
Die rechte Insel habe ich schon für das auswählen der Helden vorbereitet:
Hsm-tut07.jpg

Kapitel 3 - Voreinstellungen

Spielereigenschaften

Bis jetzt ist unsere Karte nur für einen Spieler geeignet. Um das zu ändern öffnen wir die Spielereigenschaften (Szenario->Spieler-Eigenschaften ...). Nun stellen wir bei Spieler 1 bis 8 die Steuerung auf Benutzer und bei Spieler 9 auf Computer. Nun können wir auf den Tab Streitmächte wechseln. Hier werden die Streitkräfte (Teams) eingestellt. Dort aktivieren wir die Häkchen bei Eigene Streitmächte verwenden (dadurch werden die Teams schon von der map vorgegeben) und bei Festgelegte Spieler-Eigenschaften(die Einstellungen von der Seite Benutzer werden festgelegt, es kann also niemand Spieler9 nehmen, weil wir dort nicht Benutzer sondern Computer eingestellt haben, auch die Rassen kann man nicht mehr wechseln, es sei denn sie wurden auf auswählbar eingestellt). Nun erstellen wir eine neue Streitmacht mit einem Click auf Streitmacht hinzufügen und verschieben Spieler 9 in diese Streitmacht (einfach den Spieler mit gedrückter Maustaste den Spieler nach unten verschieben). Man kann den Streitmächten auch noch Namen geben, indem man sie auswählt und den Knopf Streitmacht umbenennen drückt. Streitmacht1 benennen wir um in Helden und Streitmacht2 in Creeps. Jetzt müssen wir noch einstellen, das alle Spieler zusammen kämpfen, indem wir in der Tabelle in der Zeile der Streitmacht Helden das Häkchen unter Verbündet markieren.


Hier ist nochmal ein Kontrollbild:
Hsm-tut08.jpg

Das Fenster kann nun mit Ok geschlossen werden.

Startpositionen setzen

Um die Startpositionen zu setzen brauchen wir die Einheiten-Palette. Diese wird gleich noch mal genau erklärt. Jetzt wählen wir einfach nur unter der Rubrik Gebäude das letzte Gebäude aus ( der einzige Button ohne Einheit als Symbol , Startposition) und platzieren diese an der Stelle, an der die Spieler starten sollen ( auf der rechten Insel, wo später die Helden ausgewählt werden). Das rote Kreuz auf der Minimap sollte jetzt ebenfalls an dieser Stelle sein. Nun wählen wir im oberen Auswahlfeld Spieler 2 aus und platzieren seine Startposition an der gleichen Stelle. Das gleiche machen wir für alle Spieler. Die Startposition von Spieler9 kann an eine beliebige Stelle gesetzt werden, da sie für uns keine Bedeutung hat. Wenn man eine Startposition falsch gesetzt hat kann man einfach eine neue setzen, die alte wird dann automatisch entfernt.


Kapitel 4 - Einheiten (Teil 1)

Einheiten auf die Karte setzen

Wir benutzen wieder die Einheiten-Palette und wählen Spieler10 aus. Die 2 Felder darunter sind für die Auswahl der Rasse und die Kategorie. In der Kategorie Nahkampf befinden sich alle Einheiten, die es in einem normalen Ladder-Spiel gibt, unter Kampagne findet man die Einheiten aus der Kampagner und unter Eigene befinden sich die selbst erstellten Einheiten. Wir nehmen Mensch und Kampagne und erstellen eine Heldin Jaina auf der rechten Insel:
Hsm-tut10.jpg
Einheiten können genau wie Doodads gedreht werden (Leertaste, auswählen, Strg gedrückt halten, clicken). Mit einem Doppelclick öffnet man einen Dialog, in dem man bestimmte Voreistellungen festlegen kann.

Eigene Einheiten erstellen

Tipp: Um die Geschwindigkeit während des folgenden Teils zu erhöhen sollte unter dem Menüpunkt Fenster die Pinsel-Liste ausgeschaltet werden. Die Pinselliste wird normalerweise unten links angezeigt und ist eine Übersicht in der man alles auswählen kann, was man in die Welt setzen kann. Da dies auch mit der Werkzeugpalette geht kann man auf die Pinsel-Liste verzichten. Wenn man diesen Tipp nicht befolgt wird man deutlich den Geschwindigkeitsnachteil spüren, da die Pinsel-Liste bei einzelnen Änderungen komplett neu geladen wird.

Um eigene Einheiten zu erstellen benötigt man den Objekt-Editor, den man über Modul->Objekt-Editor öffnen kann. Dadrin gibt es ein Tab Einheiten (das erste). Nun sollte man ein Fenster haben, das ungefär so aussieht:
Hsm-tut11.jpg
Zuerst erstellen wir uns eine Einheit, mit der man später seinen Helden auswählen kann. Um eine neue Einheit zu erstellen öffnet man den Menüpunkt Datei->Neue eigene Einheit .... Es erschein ein Dialog. In das oberste Feld geben wir den Namen der Einheit ein, wir nenne sie einfach "Wähle einen Helden". Im unteren Teil des Dialogs wählen wir die Grundeinheit aus - wir hier einfach mal einen Ritter. Mit Ok erstellen wir nun unsere erste eigene Einheit. Es müssen aber noch einige Einstellungen geändert werden. Dazu wählen wir unsere Einheit im Objekt-Editor links aus der Übersicht aus. Im rechten Teil werden nun die dazugehörigen Eigenschaften angezeigt. Als erstes verpassen wir unserer Einheit ein neues Aussehen. Das Aussehen wird über das Feld Grafik - Modell-Datei bestimmt. Der aktuelle Wert dieses Feldes ist Ritter. Wenn wir das Feld gefunden haben (Tipp: Strg + F öffnet die Suchfunktion; man muss darauf achten, dass man in dem Teil, den man durchsuchen möchte einen Eintrag markiert hat) öffnen wir es mit einem Doppelclick. Es erscheint ein Dialog. Im ersten Auswahlfeld wählen wir die Kategorie Zauberverstärker und im zweiten Auswahlfeld das Modell Manaschild. Dies ist zwar normalerweise kein Einheitenmodell, sondern ein Modell für einen Zauberverstärker(deshalb steht hinter Manaschild auch <Ziel>) , es kann aber trotzdem für Einheiten verwendet werden. "Echte" Einheitenmodelle findet man in der Kategorie Einheiten.

Anschließend bestätigen wir mit Ok. Nach dem gleichen Prinzip kann man auch die anderen Felder editieren. Als nächstes machen wir die Einheit unverwundbar, in dem wir ihr die entsprechende Fähigkeit geben. Dazu Doppelclicken wir auf das Feld Fähigkeiten - Normal. Wie man sehen kann hat die Einheit schon die Fähigkeit Einheiten-Inventar (Menschen). Dise Fähigkeit kann gelöscht werden, da unsere Einheit kein Inventar braucht. Um die Einheit nun unverwundbar zu machen clickt man auf Fähigkeit hinzufügen und wählt dort die Fähigkeit Unverwundbar (Neutral) aus. Außerdem ändern wir zur Übung noch folgende Felder:

Der Objekt-Editor kann jetzt geschlossen oder minimiert werden, man muss die erstellte Einheit nicht noch einmal extra speichern. Sie kann nun mit der Einheiten-Palette (Auswahlfeld in der Werkzeugpalette oder im Menu unter Fenster->Neue Palette->Einheiten) die erstellte Einheit auf der Karte platzieren. Man findet sie unter der Rasse Mensch und der Kategorie Eigene. Sie besitzt immer noch das Symbol des Ritters. Wir könnten nun einfach für jeden Spieler eine solche Einheit auf die Karte setzen, wir werden die Einheit jedoch mit einem Auslöser erstellen.

Kapitel 5 - Auslöser (Teil 1)

Was sind Auslöser?

Auslöser (englisch Trigger) bestehen aus Ereignissen, Bedingungen und Aktionen und steuern so, was auf der map passiert. Die Aktionen eines Auslösers werden ausgeführt, wenn eines seiner Ereignisse eintritt und alle Bedingungen erfüllt sind.

Es ist wichtig, dass ihr jetzt alles genau so macht, wie es hier steht, da die Auslöser ansonsten wahrscheinlich nicht funktionieren! Sobald alles funktioniert könnt ihr mit den Auslösern rumspielen und sie und euren eigenen Vorstellungen anpassen.

Der Start-Auslöser

Zu erst öffnen wir den Auslöser-Editor über Modul->Auslöser-Editor. Dort gibt es schon einen Auslöser mit dem Namen "Nahkampf-Initialisierung":

Nahkampf-Initialisierung
Ereignisse
Map initialization
Bedingungen
Aktionen
Nahkampf-Spiel - Use melee time of day (for all players)
Nahkampf-Spiel - Limit Heroes to 1 per Hero-type (for all players)
Nahkampf-Spiel - Give trained Heroes a Scroll of Town Portal (for all players)
Nahkampf-Spiel - Set starting resources (for all players)
Nahkampf-Spiel - Remove creeps and critters from used start locations (for all players)
Nahkampf-Spiel - Create starting units (for all players)
Nahkampf-Spiel - Run melee AI scripts (for computer players)
Nahkampf-Spiel - Enforce victory/defeat conditions (for all players)

Dieser Trigger dient dazu eine normales Spiel (Nahkampf-Spiel) zu starten. Da das hier aber eine Fun-map wird können wir alle Aktionen des Triggers löschen, in dem wir sie markieren und Entf drücken. Das Ereignis kann stehen gelassen werden. Das Ereignis Map initialization bedeutet, dass die Aktionen in diesem Trigger vor dem Starten der map ausgelöst werden.

Nahkampf-Initialisierung
Ereignisse
Map initialization
Bedingungen
Aktionen

Wir wollen beim Starten der map für jeden Spieler eine Einheit erstellen, mit der er seinen Helden auswählen kann. Dazu brauchen wir eine Aktion, die wir über das Menü Neu->Aktion ... erstellen. Es öffnet sich ein Dialog mit 2 Auswahlfeldern. Im ersten Feld wählen wir die Kategorie Einheit, da wir eine Einheit erstellen wollen. Im zweiten Feld wählen wir die Aktion Create Units Facing Angle. Im unteren Bereich des Dialogs wird die Aktion genau angezeigt, wobei die Blau markierten Bereiche Parameter sind. Wenn man auf einen solchen Bereich clickt kann man die Funktionsweise einer Aktion bestimmen. Zuerst ändern wir die Art der erstellten Einheit, indem wir auf Soldat clicken und in dem darauf hin aufklappenden Dialog unsere vorhin erstellte Einheit auswählen (befindet sich nich in der Kategorie Nahkampf sondern in Eigene). Nun müssen wir noch die Stelle bestimmen, an der die Einheit erstellt wird. Dies ist zur Zeit noch (Center of (Playable map area)). Da wir das ändern wollen clicken wir darauf und wählen statt Center of Region den Ort Spieler - Player Start Location. Jetzt noch 2mal Ok drücken und dann sollte das ganze so aussehen:

Nahkampf-Initialisierung
Ereignisse
Map initialization
Bedingungen
Aktionen
Einheit - Create 1 Wähle einen Helden for Spieler 1 (Rot) at (Spieler 1 (Rot) start location) facing Vorgabe für Gebäude-Ausrichtung degrees

Wenn wir dies nun für alle 8 Spieler wiederholen würden würde das so aussehen:

Nahkampf-Initialisierung
Ereignisse
Map initialization
Bedingungen
Aktionen
Einheit - Create 1 Wähle einen Helden for Spieler 1 (Rot) at (Spieler 1 (Rot) start location) facing Vorgabe für Gebäude-Ausrichtung degrees
Einheit - Create 1 Wähle einen Helden for Spieler 2 (Blau) at (Spieler 2 (Blau) start location) facing Vorgabe für Gebäude-Ausrichtung degrees
Einheit - Create 1 Wähle einen Helden for Spieler 3 (Blaugrau) at (Spieler 3 (Blaugrau) start location) facing Vorgabe für Gebäude-Ausrichtung degrees
Einheit - Create 1 Wähle einen Helden for Spieler 4 (Lila) at (Spieler 4 (Lila) start location) facing Vorgabe für Gebäude-Ausrichtung degrees
Einheit - Create 1 Wähle einen Helden for Spieler 5 (Gelb) at (Spieler 5 (Gelb) start location) facing Vorgabe für Gebäude-Ausrichtung degrees
Einheit - Create 1 Wähle einen Helden for Spieler 6 (Orange) at (Spieler 6 (Orange) start location) facing Vorgabe für Gebäude-Ausrichtung degrees
Einheit - Create 1 Wähle einen Helden for Spieler 7 (Grün) at (Spieler 7 (Grün) start location) facing Vorgabe für Gebäude-Ausrichtung degrees
Einheit - Create 1 Wähle einen Helden for Spieler 8 (Rosa) at (Spieler 8 (Rosa) start location) facing Vorgabe für Gebäude-Ausrichtung degrees

Wenn sich etwas oft wiederholt gibt es meistens eine einfachere Möglichkeit: Schleifen. Mit einer Schleife kann man eine Aktion mehrfach wiederholen. Eine Schleife wird genau so erstellt, wie jede andere Aktion auch (Neu->Aktion ...). Da wir unsere Starteinheit für eine Gruppe von Spielern erstellen wollen heisst die Kategorie der Aktion Spielergruppe und die Aktion heisst Pick every Player in Player Group And Do Multiple Actions. Den Parameter (All player) ändern wir in Allies Of Player -> All allies of Spieler 1(Rot). Der Auslöser sollte nun so aussehen:

Nahkampf-Initialisierung
Ereignisse
Map initialization
Bedingungen
Aktionen
Einheit - Create 1 Wähle einen Helden for Spieler 1 (Rot) at (Spieler 1 (Rot) start location) facing Vorgabe für Gebäude-Ausrichtung degrees
Spielergruppe - Pick every player in (All allies of Spieler 1 (Rot)) and do (Actions)
Schleifen - Aktionen

Jetzt markieren wir die erste Aktion und verschieben sie in die Schleife:

Nahkampf-Initialisierung
Ereignisse
Map initialization
Bedingungen
Aktionen
Spielergruppe - Pick every player in (All allies of Spieler 1 (Rot)) and do (Actions)
Schleifen - Aktionen
Einheit - Create 1 Wähle einen Helden for Spieler 1 (Rot) at (Spieler 1 (Rot) start location) facing Vorgabe für Gebäude-Ausrichtung degrees

Der aktuelle Auslöser würde pro Spieler eine Einheit für Rot erstellen. Das wollen wir ändern. Wir ersetzen Spieler 1(Rot) in der Schleife durch Picked Player. Dies bezieht sich dann immer auf den Spieler der gerade von der Schleife ausgewählt wurde. Der Trigger sollte dann so aussehen:

Nahkampf-Initialisierung
Ereignisse
Map initialization
Bedingungen
Aktionen
Spielergruppe - Pick every player in (All allies of Spieler 1 (Rot)) and do (Actions)
Schleifen - Aktionen
Einheit - Create 1 Wähle einen Helden for (Picked player) at ((Picked player) start location) facing Vorgabe für Gebäude-Ausrichtung degrees

Nachdem wir unseren ersten Auslöser erstellt haben ist ein guter Zeitpunkt um die map zum ersten mal zu testen. Dazu muss man nur auf das rote Häkchen in der Symbol-Leiste drücken. Hier ist der erste Screenshot im Spiel:
Hsm-tut14.jpg


Kleine Auslöser-Übung:

Man kann die Starteinheiten auch mit Hilfe einer For-Schleife erstellen. Versuche folgenden Auslöser nachzubauen:

Nahkampf-Initialisierung Kopieren
Ereignisse
Map initialization
Bedingungen
Aktionen
For each (Integer A) from 1 to 8, do (Actions)
Schleifen - Aktionen
Einheit - Create 1 Wähle einen Helden for (Player((Integer A))) at ((Player((Integer A))) start location) facing Vorgabe für Gebäude-Ausrichtung degrees

Hier eine Kurzanleitung in Stichpunkten:

Der Auslöser dieser Übung erstellt Starteinheiten für alle Spieler, egal, ob sie im Spiel sind oder nicht, deshalb benutzen wir auch nur den ersten Auslöser. Den Auslöser aus der Übung deaktivieren wir, indem wir im Auslöser-Editor den Auslöser auswählen und dort das Häkchen bei Aktiviert entfernen.

Der Helden-Auswahl-Auslöser

Ein Held soll dann ausgewählt werden, wenn die Auswahleinheit in seine Nähe kommt. Damit steht das Ereignis schon fest. Wir erstellen also einen neuen Auslöser (Neu->Auslöser) und nennen ihn "Auswahl Jaina" (Auslöser markieren -> F2 drücken -> Name eingeben). Dann fügen wir ein neues Ereignis hinzu (Neu->Ereignis). Im oberen Auswahlfeld wählen wir die Kategorie Einheit und im unteren Feld das Ereignis Unit Within Range. Die Reichweite lassen wir bei 256.00. Nach einem Click auf das rotgefärbte Unit öffnet sich ein Dialog und mit einem Click auf Eine Einheit wählen öffnet sich die Karte und wir wir können unsere Jaina auswählen. Der Trigger sollte nun so aussehen:

Auswahl Jaina
Ereignisse
Einheit - A unit comes within 256.00 of Jaina 0009 <gen>
Bedingungen
Aktionen

Die Bedingung ist, dass der Einheitentyp "Wähle einen Helden" ist. Wir fügen mit (Neu->Bedingung) eine Bedingung hinzu. Als Typ wählen wir Unit-Type Comparision. Wir vergleichen den Typ der Einheit, die den Auslöser gestartet hat (Unit-type of(Triggerring unit)) mit dem Einheitentyp "Wähle einen Helden". Der Vergleichsopertator ist Gleich. Statt Soldat wählen wir unsere eigene Einheit "Wähle einen Helden". Der Trigger sollte jetzt so aussehen:

Auswahl Jaina
Ereignisse
Einheit - A unit comes within 256.00 of Jaina 0009 <gen>
Bedingungen
(Unit-type of (Triggering unit)) Gleich Wähle einen Helden
Aktionen

Übersetzt bedeutet die Bedigung:

Da auch etwas passieren sollte brauchen wir noch eine Aktion. Zuerst brauchen wir aber ein Gebiet, in dem der ausgewählte Held erstellt wird. Dazu bentzen wir wieder mal die Werzeugpalette im Hauptfenster. Diesmal ist es die Gebiet-Palette. Dort gibt es nur einen Knopf mit dem man Gebiete erstellen kann. Wenn wir den Knopf markiert haben ziehen wir einfach mit der linken Maustaste ein Gebiet in der Mitte der linken Insel. Das neue Gebiet erscheint nun in der Liste in der Gebiet-Palette. Mit Rechtsclick darauf -> Gebietseigenschaften bearbeiten kann man einen Dialog öffnen, in dem man (unter anderem) den Namen des Gebiets ändern kann. Wir ändern den Namen auf "Arena Mitte".
Hsm-tut13.jpg

Kleine Auslöser-Übung:

Schreibe den "Auswahl Jaina"-Auslöser fertig. Er sollte dann so aussehen:

Auswahl Jaina
Ereignisse
Einheit - A unit comes within 256.00 of Jaina 0009 <gen>
Bedingungen
(Unit-type of (Triggering unit)) Gleich Wähle einen Helden
Aktionen
Spezialeffekt - Create a special effect at (Position of (Triggering unit)) using Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
Einheit - Create 1 Jaina for (Owner of (Triggering unit)) at (Center of Arena Mitte <gen>) facing Vorgabe für Gebäude-Ausrichtung degrees
Auswahl - Select (Last created unit) for (Owner of (Last created unit))
Kamera - Pan camera for (Owner of (Triggering unit)) to (Center of Arena Mitte <gen>) over 1.00 seconds
Einheit - Remove (Triggering unit) from the game

Was macht der Trigger?

Anmerkung: Es ist normal, dass man am Anfang sehr lange braucht um einen Auslöser einfach nur nachzubauen. Wenn du eine Aktion oder Funktion gar nicht findest, dann kannst du auch die Diskussionsseite dieses Tutorials benutzen um Fragen zu stellen.

Gegnerwellen erstellen

Das erstellen der Gegnerwellen soll folgendermaßen funktionieren. Die erste Gegnerwelle soll nach 30 Sekunden starten. Wenn alle Gegner einer Welle getötet worden sind soll die nächste Welle erscheinen und Leben und Mana der Helden wieder auf 100% gesetzt werden.

Wir erstellen einen neuen Trigger und nennen ihn "Gegnerwellen". Der Trigger hat 2 Ereignisse:

Es gibt allerdings kein Ereignis "last unit of player dies". Statt dessen nehmen wir ein Generi-Unit-Event und überprüfen in den Bedingungen mit einer Integer - Comparison (Integer sind ganze Zahlen), ob die Zahl der lebenden Einheiten von Spieler 9 gleich 0 ist. Um diese Bedingung zu erstellen gehen wir folgendermaßen vor:

Wir haben in dieser Bedingung mehrere Funktionen benutzt. Die Funktion Einheit - Count Units in Unitgroup liefert uns die Anzahl der Einheiten in einer Einheitengruppe, welche wir durch die Funktion Units Owned By Player Matching Conndition bekommen. Die Funktion Units Owned By Player Matching Conndition ist etwas besonderes, weil sie eine Bedingung als Parameter hat. Mit dieser Bedingung werden alle Einheiten überprüft, die Spieler 9 gehören, wobei Matching Unit in der Bedingung immer mit der Einheit ersetzt wird, die gerade überprüft wird.

Hier ist der Trigger:

Gegnerwellen
Ereignisse
Zeit - Elapsed game time is 30.00 seconds
Einheit - A unit Stirbt
Bedingungen
(Number of units in (Units owned by Spieler 9 (Grau) matching (((Matching unit) is alive) Gleich True))) Gleich 0
Aktionen

Wir könnten jetzt in jeder Welle einfach 10 Ghule in der Arena erstellen:

Gegnerwellen
Ereignisse
Zeit - Elapsed game time is 30.00 seconds
Einheit - A unit Stirbt
Bedingungen
(Number of units in (Units owned by Spieler 9 (Grau) matching (((Matching unit) is alive) Gleich True))) Gleich 0
Aktionen
Einheit - Create 10 Ghul for Spieler 9 (Grau) at (Random point in Arena Mitte <gen>) facing Vorgabe für Gebäude-Ausrichtung degrees

Jetzt würde aber jede Welle gleich aussehen, am Anfang zu stark und am Ende zu schwach. Man muss sich also irgendwie merken, welch Welle gerade dran ist. Wir suchen also im mapping-wiki und finden den Artikel Variablen. Da wir den Artikel gelesen haben, und gemerkt haben, dass das genau das ist, was wir brauchen clicken wir nun auf das gelbe X im Auslöser-Editor, woraufhin sich ein Fenster mit dem Titel Variablen öffnet. Jetzt legen wir eine neue Variable an, indem wir auf das grüne +X drücken. Als Variablenname nehmen wir "welle" und als Variablentyp Integer. Den Startwert lassen wir bei 0 und das Kästchen vor Array bleibt auch leer. Wir beenden alle Dialoge mit Ok und schon haben wir unsere erste Variable erstellt. Diese Variable soll nun bei jedem Aufruf des Auslösers "Gegnerwellen" um 1 erhöht werden. Dies machen wir mit einer Aktion namens Set Variable. Bei dieser Funktion wird der Variablen links vom = der Wert rechts vom = zugewiesen. Wir clicken auf das rotmarkierte Variable und ersetzen es durch unsere Varaiable "welle". Nun clicken wir auf das rotmarkierte Value und wählen die Funktion Arithmetic, was hier soviel bedeutet wie einfache Rechnung. Die Funktion Arithmetic besteht aus 2 Werten und einem Rechenzeichen. Wir lassen das Rechenzeichen bei + und den 2. Wert bei 1 und ändern nur den ersten Wert, und zwar auf den Wert unserer Variable. Der Auslöser sieht nun so aus:

Gegnerwellen
Ereignisse
Zeit - Elapsed game time is 30.00 seconds
Einheit - A unit Stirbt
Bedingungen
(Number of units in (Units owned by Spieler 9 (Grau) matching (((Matching unit) is alive) Gleich True))) Gleich 0
Aktionen
Set welle = (welle + 1)

Als nächstes wollen wir überprüfen, welchen Wert unsere Variable Welle hat und je nachdem verschiedene Gegner erstellen. Für diesen Zweck gibt es die If-Struktur. Wir fügen eine neue Aktion ein und wählen als Typ If / Then / Else, Multiple Functions. Es entsteht folgender Trigger:

Gegnerwellen
Ereignisse
Zeit - Elapsed game time is 30.00 seconds
Einheit - A unit Stirbt
Bedingungen
(Number of units in (Units owned by Spieler 9 (Grau) matching (((Matching unit) is alive) Gleich True))) Gleich 0
Aktionen
Set welle = (welle + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
'IF'-Bedingungen
'THEN'-Aktionen
'ELSE'-Aktionen

Wie man sieht gibt einen neuen Punkt, an dem man Bedingungen einfügen kann ('IF'-Bedingungen). Diesen Punkt markieren wir und fügen eine neue Bedingung ein. Als Typ wählen wir Integer-Comparison. Den Teil vor dem "Gleich" ändern wir in unsere Variable "welle", den Teil danach ersetzen wir durch den Wert 1. Die Aktionen, die unter dem Punkt 'Then'-Aktionen stehen werden nur ausgeführt wenn die Bedingung erfüllt ist. Die 'Else'-Aktionen werden nur ausgeführt, wenn die Bedingung nicht erfüllt ist. Wir fügen nun die Aktion zum erstellen von Einheiten unter den 'Then'-Aktionen ein:

Gegnerwellen
Ereignisse
Zeit - Elapsed game time is 30.00 seconds
Einheit - A unit Stirbt
Bedingungen
(Number of units in (Units owned by Spieler 9 (Grau) matching (((Matching unit) is alive) Gleich True))) Gleich 0
Aktionen
Set welle = (welle + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
'IF'-Bedingungen
welle Gleich 1
'THEN'-Aktionen
Einheit - Create 1 Ghul for Spieler 9 (Grau) at (Random point in Arena Mitte <gen>) facing Vorgabe für Gebäude-Ausrichtung degrees
'ELSE'-Aktionen

Für die zweite Welle wiederholen wir das ganze noch einmal, diesmal aber mit einem stärkerem gegner:

Gegnerwellen
Ereignisse
Zeit - Elapsed game time is 30.00 seconds
Einheit - A unit Stirbt
Bedingungen
(Number of units in (Units owned by Spieler 9 (Grau) matching (((Matching unit) is alive) Gleich True))) Gleich 0
Aktionen
Set welle = (welle + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
'IF'-Bedingungen
welle Gleich 1
'THEN'-Aktionen
Einheit - Create 1 Ghul for Spieler 9 (Grau) at (Random point in Arena Mitte <gen>) facing Vorgabe für Gebäude-Ausrichtung degrees
'ELSE'-Aktionen
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
'IF'-Bedingungen
welle Gleich 2
'THEN'-Aktionen
Einheit - Create 1 Gruftbestie for Spieler 9 (Grau) at (Random point in Arena Mitte <gen>) facing Vorgabe für Gebäude-Ausrichtung degrees
'ELSE'-Aktionen

Wie wir sicherlich alle beim erwähnen des Wortes wiederholen bemerkt haben kann man das ganze auch eleganter lösen. Dafür benötigt man aber Arrays. Wir geben uns deshalb erst einmal mit unserer Lösung zufrieden und fügen statt dessen noch eine Aktion hinzu, die die Helden heilt ("Einheit - Set Life (to Percentage)"), sowie eine weitere Gegnerwelle:

Gegnerwellen
Ereignisse
Zeit - Elapsed game time is 30.00 seconds
Einheit - A unit Stirbt
Bedingungen
(Number of units in (Units owned by Spieler 9 (Grau) matching (((Matching unit) is alive) Gleich True))) Gleich 0
Aktionen
Set welle = (welle + 1)
Einheitengruppe - Pick every unit in (Units in (Playable map area) matching (((Matching unit) is alive) Gleich True)) and do (Actions)
Schleifen - Aktionen
Einheit - Set life of (Picked unit) to 100.00%
Einheit - Set mana of (Picked unit) to 100.00%
Spezialeffekt - Create a special effect attached to the overhead of (Picked unit) using Abilities\Spells\Human\Resurrect\ResurrectTarget.mdl
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
'IF'-Bedingungen
welle Gleich 1
'THEN'-Aktionen
Einheit - Create 1 Ghul for Spieler 9 (Grau) at (Random point in Arena Mitte <gen>) facing Vorgabe für Gebäude-Ausrichtung degrees
'ELSE'-Aktionen
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
'IF'-Bedingungen
welle Gleich 2
'THEN'-Aktionen
Einheit - Create 1 Gruftbestie for Spieler 9 (Grau) at (Random point in Arena Mitte <gen>) facing Vorgabe für Gebäude-Ausrichtung degrees
'ELSE'-Aktionen
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
'IF'-Bedingungen
welle Gleich 3
'THEN'-Aktionen
Einheit - Create 1 Monstrosität for Spieler 9 (Grau) at (Random point in Arena Mitte <gen>) facing Vorgabe für Gebäude-Ausrichtung degrees
'ELSE'-Aktionen

Es wurde eine neue Schleife benutzt (Pick every unit in Unitgroup). Diese Schleife führt eine bestimmte Aktion für alle Einheiten in einer Einheitengruppe durch. Innerhalb der Schleife wird mit Picked Unit auf die Einheit zugegriffen, die gerade von der Schleife ausgewählt wurde.

Zum Abschluss dieses Kapitels sollte die map noch einmal getestet werden, wenn alles funktioniert könnt ihr noch ein bisschen an der Gegnerzahlen der Wellen rumspielen, oder des Spezialeffekt für das Heilen ändern. Wenn es nicht funktioniert, dann überprüft bitte, ob alle Trigger bei euch genau so aussehen, wie hier und ob es nicht schon Einheiten von Spieler9 auf der Karte gibt. Ihr könnt auch gerne Fragen auf der Diskussionsseite dieses Tutorials stellen.

Kapitel 6 - Einheiten (Teil 2)

Wir wollen nun einen eigenen Helden erstellen, der auch eigene Fähigkeiten besitzt. Dazu öffnen wir den Objekt-Editor und drücken dort den Button zum Erstellen einer neuen Einheit (ein Helm). Als Basis-Einheit wählen wir den Bergkönig (es ist wichtig, dass wir einen Helden nehmen). Als Name nehmen wir Basher (könnt ihr später noch ändern, wenn er euch nicht gefällt). Ich werde in diesem Tutorial nicht auf alle Eigenschaften eingehen, die man verändern kann. Wir ändern nur die wichtigsten. Jetzt ändern wir aber noch gar nichts, sondern erstellen zuerst eine eigene Fähigkeit für unseren Helden.

Eigene Fähigkeiten

Eigene Fähigkeit kann man wie eigene Einheiten im Objekt-Editor erstellen. Dort gibt es einen Tab mit dem Titel "Fähigkeiten". Nachdem wir in diesen Tab gewechselt haben sehen wir alle Fähigkeiten, die es gibt. Um eine neue Fähigkeit zu erstellen drücken wir auf das Symbol für "Neue Eigene Fähigkeit" (Eine Faust). Darauf hin öffnet sich eine Liste, aus der wir unsere Grundfähigkeit wählen können. Für unsere erste Fähigkeit nehmen wir "Kriegsdonner". Als Namen nehmen wir "Spikes". Nun drücken wir noch auf Ok und schon haben wir unsere erste eigene Fähigkeit. Wie bei den Einheiten gibt es auch hier jede Menge Felder, die man verändern kann. Ich liste mal die wichtigsten auf:

Wir ändern nun folgende Felder:

Diese Zeilen kopieren wir und fügen sie auch bei den Feldern von

ein.

Weiter geht es mit folgenden Feldern:

Als letztes ändern wir noch den Zauberverstärker. Dafür müssen wir aber zuerst noch einen erstellen, also wechseln wir im Objekt-Editor zu "Zauberverstärker/Effekte" und erzeugen dort einen neuen Zauberverstärker. Als Basis-Zauberverstärker sollte man immer den zur Fähigkeit gehörigen Zauberverstärker verwenden. Deshalb nehmen wir "Betäubt (Pause)". Als Name nehmen wir wieder "Spikes". Nach einem Click auf Ok haben wir unseren ersten eigenen Zauberverstärker. Dort ändern wir das angezeigte Symbol (Grafik - Symbol) auf "Aufspießen" und das Aussehen (Grafik - Ziel) auf "Aufspießen<Effekt>".

Jetzt wechseln wir wieder zu "Fähigkeiten", wählen unsere Fähigkeit aus (normalerweise in der Übersicht ganz unten) und setzen den Zauberverstärker aller 3 Levels auf "Spikes (Pause)". Damit haben wir unsere erste eigene Fähigkeit fertig gestellt. Wir können nun wieder zu "Einheiten" wechseln und dort unseren Helden "Basher" auswählen. Die erlernbaren Fähigkeiten eines Helden befinden sich unter "Fähigkeiten - Held" in einer Liste. Dort markieren wir "Hieb" und Clicken auf "Helden-Fähigkeit bearbeiten". Nun wählen wir aus der Liste der verfügbaren Fähigkeiten "Spikes" aus un bestätigen mit Ok. Jetzt ist unser Held etwas besonderes! Setzen wir ihn also auf die Karte (für Spieler 10), in die Nähe von Jaina, aber auch mit genug Abstand, so dass man im Spiel nicht aus Versehen den falschen Helden auswählt. Um den neuen Helden auch auswählbar zu machen kopieren wir einfach den Auslöser "Auswahl Jaina" und nennen ihn "Auswahl Basher". Jetzt müssen wir in diesem Trigger nur noch den richtigen Helden einsetzen:

Auswahl Basher
Ereignisse
Einheit - A unit comes within 256.00 of Basher 0010 <gen>
Bedingungen
(Unit-type of (Triggering unit)) Gleich Wähle einen Helden
Aktionen
Spezialeffekt - Create a special effect at (Position of (Triggering unit)) using Abilities\Spells\Human\Thunderclap\ThunderClapCaster.mdl
Einheit - Create 1 Basher for (Owner of (Triggering unit)) at (Center of Arena Mitte <gen>) facing Vorgabe für Gebäude-Ausrichtung degrees
Auswahl - Select (Last created unit) for (Owner of (Last created unit))
Kamera - Pan camera for (Owner of (Triggering unit)) to (Center of Arena Mitte <gen>) over 1.00 seconds
Einheit - Remove (Triggering unit) from the game

Dies ist außerdem ein guter Zeitpunkt, um die Gegnerzahl im Auslöser "Gegnerwellen" zu erhöhen:

Gegnerwellen
Ereignisse
Zeit - Elapsed game time is 30.00 seconds
Einheit - A unit Stirbt
Bedingungen
(Number of units in (Units owned by Spieler 9 (Grau) matching (((Matching unit) is alive) Gleich True))) Gleich 0
Aktionen
Set welle = (welle + 1)
Einheitengruppe - Pick every unit in (Units in (Playable map area) matching (((Matching unit) is alive) Gleich True)) and do (Actions)
Schleifen - Aktionen
Einheit - Set life of (Picked unit) to 100.00%
Einheit - Set mana of (Picked unit) to 100.00%
Spezialeffekt - Create a special effect attached to the overhead of (Picked unit) using Abilities\Spells\Human\Resurrect\ResurrectTarget.mdl
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
'IF'-Bedingungen
welle Gleich 1
'THEN'-Aktionen
Einheit - Create 5 Ghul for Spieler 9 (Grau) at (Random point in Arena Mitte <gen>) facing Vorgabe für Gebäude-Ausrichtung degrees
'ELSE'-Aktionen
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
'IF'-Bedingungen
welle Gleich 2
'THEN'-Aktionen
Einheit - Create 3 Gruftbestie for Spieler 9 (Grau) at (Random point in Arena Mitte <gen>) facing Vorgabe für Gebäude-Ausrichtung degrees
'ELSE'-Aktionen
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
'IF'-Bedingungen
welle Gleich 3
'THEN'-Aktionen
Einheit - Create 2 Monstrosität for Spieler 9 (Grau) at (Random point in Arena Mitte <gen>) facing Vorgabe für Gebäude-Ausrichtung degrees
'ELSE'-Aktionen

Jetzt ist es an der Zeit die Änderungen an der map zu testen... Wenn alles funktioniert, sollte es im Spiel etwa so aussehen:
Hsm-tut15.jpg




aktuelle map

Ich lad jetzt mal meine map hoch, für alle, die zu faul sind oder es nicht hinkriegen oder einfach nur vergleichen wollen:
download

Nächste Punkte

Dises Tutorial wird noch fortgesetzt. Die nächsten Punkte sind wahrscheinlich:

Meine Werkzeuge
Namensräume
Varianten
Aktionen
Navigation
Warcraft-Mapping
Werkzeuge