[Tutorial] Talentbäume

Habt ihr Fragen zum Galaxy Editor, oder möchtet ihr eure Karte vorstellen? Alles was mit dem Thema Editor und Modding zu tun hat, gehört hier rein.

Moderatoren: Exekutor[NHF], Deathwing, GarfieldKlon, G A F, SaVi

Antworten
Deathwing
Moderator der Leere
Moderator der Leere
Beiträge: 287
Registriert: 30.04.2010, 16:15
Liga 1vs1: Meister
Liga 2vs2: Keine
Mainrace: Random
Wohnort: Berlin

[Tutorial] Talentbäume

Beitrag von Deathwing » 28.05.2010, 23:37

Liebe Leute,
hiermit will ich Euch mein erstes Tutorial an's Herz legen. :)
Dieses Tutorial beschäftigt sich mit Talentbäumen(Hier wird jedoch nur einer gezeigt!).

Ich muss auch dazusagen, dass es relativ KOMPLEX und UMFANGREICH ist, Talentbaum zuerschaffen :)
ich setze daher schon eine Grunderfahrung mit den GUI des Auslöser-Editors voraus :)
Eine Englische Version des Editors macht es euch noch einfacher, da ich diesen benutze
und somit jegliche hier geposteten Auslöser auf englisch sind :)
Wer sich jedoch mit den Deutschen auskennt und weiß was was übersetzt bedeutet,
so stellt für diese Person das Tutorial auch keine Große Herausforderung da :)



Dieses Tutorial habe ich wie folgt für euch gegliedert:

Tutorial:Talentbäume
1. Vorwort
2. Theorie
3. Praxis
3.1. Grundgerüst
3.2. Veränderungsverfahren
3.3. Erhalt der Talente
4. Abschluss



1. Vorwort
Zuerst will ich kurz erklären was ein Talentbaum ist. Ein Talentbaum bietet dem Spieler
das Lernen mehrerer Talente(sowohl passive als auch aktive Fähigkeiten) an.
Jedoch hat der Spieler dabei eine schier unendliche Möglichkeit seine Punkte
zuverteilen, wodurch theoretisch jeder Spieler im Vergleich zu einen anderen Spieler
eine andere Skillung(=Talentevergabe) hat. Das ist in der Praxis jedoch meist nur
eingeschränkt der Fall, weil sich einfach meist einige Talente abheben und sich daraus
eine optimale Skillung ergibt. Ebenfalls benötigen weit effizientere Talente eine bereits
in diesen Talentbaum investierte Anzahl von Punkten, damit diese nicht bereits am
Anfang erlernt werden können. Diese Talentbäume die ich hier vorstellen, sind vom
Design stark an die von World of Warcraft angelehnt(wer die nicht kennt, einfach mal googlen).

***!Ganz unten befinden sich die Downloadlinks
für die benutzten Images und die Map im Gesamten!***



2. Theorie
Nun gut, zuerst müssen wir uns überlegen:
a) wie groß soll der Talentbaum werden?
b) soll es Talente geben welche von anderen Abhängig sind?
c) auf welche Stufe sollen die einzelnen Talente gebracht werden können?

In meinen Tutorial habe ich mich dazuentschieden, dass
a) der Baum 4 Talente breit und 5 Talente in die Tiefe geht --> 20 Talente gesamt,
wobei jedoch aus Gründen der Schönheit nicht alle 20 benutzt werden.
b) Der Baum besitzt 2 Talente, welche in Abhängigkeit zu einem anderen Talent stehen.
c) Die Talente können als Maximalstufe 1 ; 2 ; 3 ; 5 haben

Gut, da wir das nun haben, setzen wir das alles mal künstlerisch um,
dabei bestimmen wir auch gleich mal unser Hindergrundbild des Baums :)
so sieht erstmal das Bild aus:
Bild

und so sieht es dann als "Vorschau" für den zukünftigen Talentbaum aus:
(ist nicht alles ganz symmetrisch aber ist eh nicht schlimm^^)
Bild

Die grünen Zahlen stellen dabei den gewünschten maximalen Level der Talente da,
wobei die roten Zahlen die Position der einzelnen Talente angeben!
Nur weil ein Talent nicht existiert, wie die 2, gibt es trotzdem die Position.


(man kann auch schon erkennen wenn man sich den Link anguckt, dass ich den Talentbaum Mutation nenne)

3. Praxis
so dann geht es jetzt um die Umsetzung des Meisterwerkes :)
wichtig zu sagen ist, dass ich es alles mit den GUI gemacht habe, da dies doch
verständlicher ist, wobei es natürlich auch ohne geht :)

3.1. Grundgerüst
Fangen wir also an!
Erstellen wir erstmal alle Variablen die für den Talentbaum notwendig sind!

Variablen:
Die Variable Talent_Dialog für den Dialog selber:
Talent_Dialog = No Dialog <Dialog>

Die Variable Talent_Tooltip für die Tooltips(Typ:Text) mit einen 2-dimensionalen Feld mit den Größen
20 und 8, 20 weil es 20 Talente sind und 8 für 8 unterschiedliche Tooltips je Talent:
Talent_Tooltip = No Text <Text[20][8]>

Die Variable Talent_Images für die Umrandungen der Talentbuttons(Typ:Dialog-Item) diesmal ein
1-dimensionales Feld mit der Größe 20, weil es ja 20 Talente sind:
Talent_Images = No Dialog Item <Dialog Item[20]>

Die Variable Talent_Images Level für die Bilder der Talente selber(Typ:Dialog-Item), auch wieder ein
1-dimensionales Feld wegen 20 Talenten:
Talent_Images Level = No Dialog Item <Dialog Item[20]>

Die Variable Talent_Images Button für die Upgradestufe der Talente selbst(Typ:Dialog-Item),
auch wieder ein 1-dimensionales Feld wegen 20 Talenten:
Talent_Images Button = No Dialog Item <Dialog Item[20]>

Wer sich jetzt fragt: Warum das nicht alles in eine Variable mit einer Größe von 60?
Weil so ist es leicht erweiterbar für MEHRERE Talentbäume und leichter aufzrufen.


Die Variable Talent_Bedingungspfeile für die zwei "Bedingungspfeile", wie ich sie so gern nenne :)
Diese dienen nur zur optischen Unterstützung und bekommen jedoch trotzdem ihre
eigene Variable vom Typ Dialog-Item mit einer Feldgröße von 2, da es ja nur 2 gibt:
Talent_Bedingungspfeile = No Dialog Item <Dialog Item[2]>

Die Variable Talent_Check legt fest, ob es diese Talente überhaupt gibt, wie man oben sehen kann
gibt es bei uns die Talente an der Position 2,5,8,9,10,12,16,17,19 nicht, diese
werden durch diese Variable vom Typ Boolean aussortiert:
Talent_Check = true <Boolean[20]>

Der Standard-Wert dieser Variable liegt bei true!

Die 2 Variablen Talent_Maxlevel und Talent_Skilllevel legen wie der Name bereits sagt,
in einem Feld mit der Größe 20 vom Typ Integer die aktuelle Stufe der Talente, sowie
die maximale Stufe der Talente fest:
Talent_Skilllevel = 0 <Integer[20]>
Talent_Maxlevel = 0 <Integer[20]>

Die Variable Talent_Spended Points vom Typ Integer dient dazu,
um festzulegen wie viele Talentpunkte bereits in den Talentpunkt reingesteckt wurden:
Talent_Spended Points = 0 <Integer>

Die Variable Talent_Remaining Points legt dementsprechend fest, wie viele Talentpunkte
der Spieler am Anfang hat:
Talent_Remaining Points = 50 <Integer>

Der Standard-Wert dieser Variable liegt bei mir bei 50,
dieser Wert ist jedoch nach belieben zuverändern!


Die Variable Talent_Needed Points unterteilt die 20 Talente in Ebenen, je nachdem
wie viel Punkte man halt für die nächste Ebene voraussetzt:
Talent_Needed Points = 0 <Integer[20]>

Die Variable Talent_Texte dient für die beiden Texte "Unverteilte Talentpunkte"
und "Verteilte Talentpunkte im Talentbaum", ist jedoch vom Typ Dialog-Item:
Talent_Texte = No Dialog Item <Dialog Item[2]>

Die letzten beiden Variablen Talent_Pos X und Talent_Pos Y dienen alleine zur Bestimmung
jeglicher Positionen der Umrandungen, der Bilder, der Upgradesymbole und der Bedingungspfeile:
Talent_Pos X = 0 <Integer[42]>
Talent_Pos Y = 0 <Integer[42]>

Am Ende sollte das alles bei Euch so aussehen:
Bild

Damit haben wir schonmal alle Variablen erzeugt!
Jetzt geht es darum, die Variablen erstmal mit nötigen Grundwerten auszustatten!
Das ist eigentlich jetzt der langwierigste Schritt :)

Triggers
Zuerst erstellen wir uns also einen neuen Auslöser: Initialization Start
Als Event legen wir da fest: Game - Map initialization
Dieser Auslöser benötigt sogar nur eine Lokale Variable:
Temp_Anzahl = 0 <Integer> , ist natürlich eine Variable vom Typ Integer

Nun kommen wir zu den Aktionen:
Als erstes setzen wir die Variable Talent_Check da false,
wo wir kein Talent später haben wollen, sprich bei: 2 5 8 9 10 12 16 17 19
Das sieht dann so aus:
Bild

Nun legen wir die jeweiligen maximalen Stufen der Talente fest(siehe Bild oben):
Dafür müssen wir nur die Variable Talent_Maxlevel an den jeweiligen
Positionen definieren:
also bei Pos 1 -> 2, Pos 3 -> 5, Pos 4 -> 3, Pos 6 -> 5, Pos 7 -> 2, Pos 10 -> 3,
Pos 12 -> 1, Pos 13 -> 2, Pos 14 -> 1, Pos 15 -> 1, Pos 18 -> 3, Pos 20 -> 5
Das sieht dann auch wieder so aus:
Bild


Als nächstes definieren wir nun die Positionen aller Talente,Pfeile,etc. :
Sprich die Variablen Talente_Pos X und Talente_Pos Y werden hier bestimmt.
Dafür lassen wir erstmal die lokale Variable Temp_Anzahl
in einer Schleife von 1 bis 20 mit einer Erhöhung von 1 durchlaufen.
(falls das unverständlich war hier eine javaumsetzung: for(i=1;i++;i<20))

in SC2 Sieht das so aus:
General - For each integer Temp_Anzahl from 1 to 20 with increment 1, do (Actions)
Die Aktionen
Talent_Pos X[Temp_Anzahl] = (-103 + (69 * ((Temp_Anzahl + 3) mod 4)))
Talent_Pos Y[Temp_Anzahl] = (-175 + (70 * (((Temp_Anzahl + 3) / 4) - 1)))
Talent_Pos X[(Temp_Anzahl + 20)] = (-89 + (69 * ((Temp_Anzahl + 3) mod 4)))
Talent_Pos Y[(Temp_Anzahl + 20)] = (-159 + (70 * (((Temp_Anzahl + 3) / 4) - 1)))


Auf den ersten Blick sieht das alles sehr komplziert aus und es war auch gar nicht so
einfach die Positionen mit Hilfe einer Variable so festzulegen, dass daraus ein Rechteck
am Ende wird :) Allein um alle diese Werte auszurechnen, damit es am Ende stimmt,
dauerte lange xD Daher empfehle ich ein einfach übernehmen dieser arithmetischen Funktionen.

Die Bestimmungen von Talent_Pos X[(Temp_Anzahl + 20)] und Talent_Pos
Y[(Temp_Anzahl + 20)]
dienen hier zur Bestimmung der Upgradebilder, da diese ja
nicht an der gleichen Position sind!

Das würde dann am Ende wieder so aussehen:
Bild

Als nächstes legen wir noch die Positionen der beiden Pfeile fest:
Variable - Set Talent_Pos X[41] = (-103 + (69 * (4 - 1)))
Variable - Set Talent_Pos Y[41] = (-104 + (70 * (3 - 1)))
Variable - Set Talent_Pos X[42] = (-67 + (69 * (2 - 1)))
Variable - Set Talent_Pos Y[42] = (-175 + (70 * (4 - 1)))


Wenn man sich das jetzt anguckt könnte man sich fragen warum ich das nicht
zusammengefasst haben den Wert. Ich habe das jedoch nicht getan, weil es so
wirklich viel einfacher ist die Position wieder zuverändern. Man verändert nur
die Zahl vor " - 1)))" , sprich die erste Zahl in der letzten Klammer.

Damit haben wir erstmal den 1. Auslöser fertig. Aber die Initialisierung ist noch lange
nicht abgeschlossen, jedoch ist es besser nicht alles in einen Auslöser zupacken,
da es für die Übersicht und so besser ist.

Also erstellen wir einen neuen Auslöser: Initialization Tooltips
Dieser Auslöser benötigt kein Event, keine lokalen Variablen oder eine Bedingung,
dafür umfasst er verdammt viele Zeilen von Set Variable = .... .
Hier bestimmen wir NUR die Tooltips.

Ein jedes Tooltip eines Talents wird in Talent_Tooltip gespeichert, wobei die 1. Dimension des Arrays die Talentnummer(=Talentposition) annimmt
und die 2. Dimension des Arrays legt hierbei die Tooltips für jede Stufe des Talents fest:
[0] -> ungelernt
[1] -> auf Stufe 1
[2] -> auf Stufe 2
[3] -> auf Stufe 3
[4] -> auf Stufe 4
[5] -> auf Stufe 5
[6] -> ungelernt, mit fehlenden Voraussetzungen(a+b)(auch wenn b nicht vorhanden!)
[7] -> ungelernt, mit fehlender Voraussetzung(a)
[8] -> ungelernt, mit fehlender Voraussetzung(b)

Voraussetzung a: Benötigt X Talentpunkte im Talentbaum
Voraussetzung b: Benötigt X Talentpunkte im Talent Y

WICHTIG!
Talente welche KEINE Vorausetzungen haben(Talente der 1. Ebene)
müssen trotzdem das Tooltip [6] haben anstatt das Tooltip [0]!

(weil es einfacher ist)

Desweiteren besteht jedes Tooltip aus einen 4fachen kombinierten Text:
Text 1 = Voraussetzungen (wenn keine vorhanden ist, dann leer lassen!)
Text 2 = Name<n/>
Text 3 = Rang<n/>
Text 4 = Beschreibung

Bsp.:
Text 1 =
Text 2 = Tötungsdrang<n/>
Text 3 = Rang 0/3<n/>
Text 4 = Verursacht 5% mehr Schaden.

<n/> <-- steht für einen Zeilenumbruch!

Nach diesen vielen Informationen will ich also kurz zeigen wie dass dann für ein spezielles Beispiel aussieht!

Talent_Tooltip[10][6] = (Combine ("Benötigt 10 Punkte im Talentbaum '...", "Skill 10 ", "Rang 0/3 ", "Beschreibung"))

In dieser Darstellung wirkt das doch erstmal unübersichtlich, aber anders dargestellt:

Code: Alles auswählen

Set Variable
    Variable: Talent_Tooltip
        Index 1: 10
        Index 2: 6
    Value: Combine Text Multiple
        Text <Text+>
            Text: "Benötigt 10 Punkte im Talentbaum '..."
            Text: "Skill 10 "
            Text: "Rang 0/3 "
            Text: "Beschreibung"
Nur so als kleinen Vorgeschmack, für den obrigen Talentbaum benötigt man auf diese
Art und Weise 58 Tooltips für den ganzen Talentbaum.

So als nächstes erzeugen wir wieder einen neuen Auslöser: Initialization End
Dieser Auslöser benötigt wieder kein Event oder eine Bedingung,
dafür benötigt er 2 lokale Variablen:
1. Temp_Nummeriert = 0 <Integer> , sprich Typ Integer
2. Temp_Pfad = "" <String> , sprich Typ String

Dieser komplette Auslöser dient dazu, um den ganzen Talentbaum zuerzeugen :)
Als erstes erstellen wir nun also einen Dialog mit der Größe 381/500 genau in der Mitte:
Dialog - Create a Modal dialog of size (381, 500) at (0, 0) relative to Center of screen

Danach setzen wir die Variable Talent_Dialog gleich diesen neuen Dialog.
Variable - Set Talent_Dialog = (Last created dialog)

Danach erstellen wir einen Text(Label) für den Dialog Talent_Dialog mit einer Größe von 400 x 100 in der Mitte
mit einem Offset von 50 x 215, der Text dabei ist erstmal:
"Unverteilte Talentpunkte: Talent_Remaining Points"
Als Quellcode:

Code: Alles auswählen

Create Dialog Item (Label)
    Dialog: Talent_Dialog
    Width: 400
    Height: 100
    Anchor: Center
    Offset X: 50
    Offset Y: 215
    Text: Combine Text
        Text 1: "Unverteilte Talentpunkte: "
        Text 2: Combine Text Multiple
            Text <Text+>
                Text: "<c val="FFFF00">" // dient nur zur farblichen Untermalung
                Text: Convert Integer To Text
                    Value: Talent_Remaining Points
                Text: "</c>" // dient nur zur farblichen Untermalung
    Color: White
    Text Writeout: false
    Text Writeout Duration: 1.0
Danach setzen wir Talent_Texte[2] gleich diesem neu erstellen Dialog-Item:
Variable - Set Talent_Texte[2] = (Last created dialog item)

Danach erzeugen wir das Bild von unserem Talentbaum:
Das Bild ist 310 x 350 Groß, wieder Verankert in der Mitte mit einem Offset von -1 x -36
und anstatt dann ein Bild auszuwählen gehen wir auf Custom Script und geben:
"Mutation.dds" ein.

Das ganze sieht dann wieder so aus:

Code: Alles auswählen

Create Dialog Item (Image)
    Dialog: Talent_Dialog
    Width: 310
    Height: 350
    Anchor: Center
    Offset X: -1
    Offset Y: -36
    Tooltip: ""
    Image: "Mutation.dds"
    Image Type: Normal
    Tiled: false
    Tint Color: White
    Blend Mode: Normal
Danach geht es die Erzeugung der Talente, dafür lassen wir (wie oben) die lokale
Variable Temp_Nummeriert
in einer Schleife von 1 bis 20 mit einer Erhöhung von 1 durchlaufen:
In dieser Schleife definieren wir dann eine IF-THEN-ELSE Anweisung.
bei IF legen wir fest:
Talent_Check[Temp_Nummeriert] == true
bei THEN wird es dann schon etwas länger:
zuerst legen wir die lokale Variable Temp_Pfad fest.
Temp_Pfad dient dazu uns das Leben leichter zumachen und bestimmt die Bildpfade.
Jedes Bild MUSS folgenden Pfad haben: Tree_Skill<Skillnummer von 1-20>.dds
daraus folgt für Temp_Pfad:
Temp_Pfad = (Combine ("Tree_Skill", (String(Temp_Nummeriert)), ".dds"))

Code: Alles auswählen

Set Variable
    Variable: Temp_Pfad
    Value: Combine Strings Multiple
        Strings <String+>
            Strings: "Tree_Skill"
            Strings: Convert Integer To String
                Value: Temp_Nummeriert
            Strings: ".dds"
Danach erstellen wir einen Button mit der Größe 41 x 42 an der Position Talent_Pos X[Temp_Nummeriert] x Talent_Pos Y[Temp_Nummeriert], natürlich in der Mitte verankert. Wir legen kein Bild und Text fest jedoch ein Tooltip:
Das Tooltip wird Talent_Tooltip[Temp_Nummeriert][6]

Code: Alles auswählen

Create Dialog Item (Button)
    Dialog: Talent_Dialog
    Width: 41
    Height: 42
    Anchor: Center
    Offset X: Talent_Pos X
        Index 1: Temp_Nummeriert
    Offset Y: Talent_Pos Y
        Index 1: Temp_Nummeriert
    Tooltip: Talent_Tooltip
        Index 1: Temp_Nummeriert
        Index 2: 6
    Button Text: ""
    Hover Image: ""
Danach setzen wir Talent_Images Button[Temp_Nummeriert] gleich dem eben erzeugten Dialog-Item.
Variable - Set Talent_Images Button[Temp_Nummeriert] = (Last created dialog item)

Danach erstellen wir Bild mit der Größe 41 x 42 an der Position
Talent_Pos X[Temp_Nummeriert] x Talent_Pos Y[Temp_Nummeriert],
natürlich in der Mitte verankert. Beim Bildpfad legen wir "Unlearned.dds" fest.

Code: Alles auswählen

Create Dialog Item (Image)
    Dialog: Talent_Dialog
    Width: 41
    Height: 42
    Anchor: Center
    Offset X: Talent_Pos X
        Index 1: Temp_Nummeriert
    Offset Y: Talent_Pos Y
        Index 1: Temp_Nummeriert
    Tooltip: ""
    Image: "Unlearned.dds"
    Image Type: Normal
    Tiled: false
    Tint Color: White
    Blend Mode: Normal
Danach setzen wir Talent_Images[Temp_Nummeriert] gleich dem eben erzeugten Dialog-Item.
Variable - Set Talent_Images[Temp_Nummeriert] = (Last created dialog item)

Danach erstellen wir wieder Bild mit der Größe 41 x 42 an der Position
Talent_Pos X[Temp_Nummeriert] x Talent_Pos Y[Temp_Nummeriert],
natürlich in der Mitte verankert. Beim Bildpfad legen wir diesmal jedoch unter Custom
Script folgendes fest: lv_temp_Pfad

Code: Alles auswählen

Create Dialog Item (Image)
    Dialog: Talent_Dialog
    Width: 41
    Height: 42
    Anchor: Center
    Offset X: Talent_Pos X
            Index 1: Temp_Nummeriert
    Offset Y: Talent_Pos Y
            Index 1: Temp_Nummeriert
    Tooltip: ""
    Image: lv_temp_Pfad
    Image Type: Normal
    Tiled: false
    Tint Color: White
    Blend Mode: Normal
und dann "oh amazing!" wir erstellen noch ein Bild... diesmal mit der Größe 11 x 11 an der Position
Talent_Pos X[Temp_Nummeriert+20] x Talent_Pos Y[Temp_Nummeriert+20],
natürlich in der Mitte verankert. Beim Bildpfad legen wir diesmal jedoch "Unlearned.dds" fest.

Code: Alles auswählen

Create Dialog Item (Image)
    Dialog: Talent_Dialog
    Width: 11
    Height: 11
    Anchor: Center
    Offset X: Talent_Pos X
        Index 1: Arithmetic (Integer)
            Value 1: Temp_Nummeriert
            Operator: +
            Value 2: 20
    Offset Y: Talent_Pos Y
        Index 1: Arithmetic (Integer)
            Value 1: Temp_Nummeriert
            Operator: +
            Value 2: 20
    Tooltip: ""
    Image: "unlearned_0.dds"
    Image Type: Normal
    Tiled: false
    Tint Color: White
    Blend Mode: Normal
Danach setzen wir (mal wieder) Talent_Images Level[Temp_Nummeriert] gleich dem eben erzeugten Dialog-Item.
Variable - Set Talent_Images Level[Temp_Nummeriert] = (Last created dialog item)

Danach legen wir innerhalb dieser Schleife nur noch die Renderprioritäten der Talente_Images und Talente_Images Level fest, damit diese IMMER über den
Bild des Talents sind:
Dialog - Set Talent_Images[Temp_Nummeriert] Render Priority to 513 for (All players)
Dialog - Set Talent_Images Level[Temp_Nummeriert] Render Priority to 514 for (All players)


Diese gesamte komplizierte Schleife sieht dann so aus:
Bild

Danach muss in diesen tollen Auslöser(Initialization End)
nur noch die Erstellung der beiden Bedingungspfeile :)
Da wir jetzt aber schon geübt im Erstellen von Bildern sind geht das ruckzug:
15 x 103 groß, Offset Talent_Pos X[41] x Talent_Pos Y[41]
mit den Bild "Unlearned_ArrowDown.dds".

Code: Alles auswählen

Create Dialog Item (Image)
    Dialog: Talent_Dialog
    Width: 15
    Height: 103
    Anchor: Center
    Offset X: Talent_Pos X
        Index 1: 41
    Offset Y: Talent_Pos Y
        Index 1: 41
    Tooltip: ""
    Image: "Unlearned_ArrowDown.dds"
    Image Type: Normal
    Tiled: false
    Tint Color: White
    Blend Mode: Normal
Danach setzen wir Talent_Bedingungspfeil[1] dem ebend erzeugten Dialog-Item
Variable - Set Talent_Bedingungspfeile[1] = (Last created dialog item)
Dann noch die Renderpriorität wieder verändern:
Dialog - Set Talent_Bedingungspfeile[1] Render Priority to 515 for (All players)

Und das ganze jetzt noch für den 2. Pfeil:
32 x 15 groß, Offset Talent_Pos X[42] x Talent_Pos Y[42]
mit den Bild "Unlearned_ArrowRight.dds".

Code: Alles auswählen

Create Dialog Item (Image)
    Dialog: Talent_Dialog
    Width: 32
    Height: 15
    Anchor: Center
    Offset X: Talent_Pos X
        Index 1: 42
    Offset Y: Talent_Pos Y
        Index 1: 42
    Tooltip: ""
    Image: "Unlearned_ArrowRight.dds"
    Image Type: Normal
    Tiled: false
    Tint Color: White
    Blend Mode: Normal
Danach setzen wir Talent_Bedingungspfeil[2] dem ebend erzeugten Dialog-Item
Variable - Set Talent_Bedingungspfeile[2] = (Last created dialog item)
Dann noch die Renderpriorität wieder verändern:
Dialog - Set Talent_Bedingungspfeile[2] Render Priority to 515 for (All players)

Und zum krönenden Abschluss des Auslösers fügen wir noch ein Text(Label) hinzu:
Größe von 400 x 100 in der Mitte mit einem Offset von 50 x 195, der Text dabei ist erstmal:
"Mutation-Talente: Talent_Spended Points"
Als Quellcode:

Code: Alles auswählen

Create Dialog Item (Label)
    Dialog: Talent_Dialog
    Width: 400
    Height: 100
    Anchor: Center
    Offset X: 50
    Offset Y: 195
    Text: Combine Text
        Text 1: "Mutation-Tal<c "
        Text 2: Combine Text Multiple
            Text <Text+>
                Text: "<c val="6000BF">" // dient nur zur farblichen Untermalung
                Text: Convert Integer To Text
                    Value: Talent_Spended Points
                Text: "</c>" // dient nur zur farblichen Untermalung
    Color: White
    Text Writeout: false
    Text Writeout Duration: 1.0
Danach setzen wir Talent_Texte[1] gleich diesem neu erstellen Dialog-Item:
Variable - Set Talent_Texte[1] = (Last created dialog item)

Jetzt sind wir mit diesen Auslöser fertig und springen nochmal zum Auslöser Initialization Start
und gehen dort zum Ende runter, da wurde als letztes die Position der Pfeile definiert.
Dort fügen wir jetzt 2 weiter Aktionen hinzu:
Diese starten die Auslöser Initialization Tooltip, wobei dort
gewartet wird bis dieser fertig ist und dann noch den Auslöser Initialization End:
Trigger - Run Initialization Tooltips (Check Conditions, Wait until it finishes)
Trigger - Run Initialization End (Check Conditions, Don't Wait until it finishes)
Sieht dann so aus:
Bild

So damit sind jetzt 3/5 Auslösern fertig :-D

Kommen wir nun zum 4. Auslöser: Show
Als Event definieren wir dabei: Ein Spieler drückt die Taste N runter, ob shift/alt/ctrl ist egal^^
Die Aktion ist hierbei eine multiple IF-THEN-ELSE Anweisung:
die 1. Else If Anweisung hat als IF:
(Talent_Dialog is visible for (Triggering player)) == false
sprich der Dialog kann vom Spieler nicht gesehen werden.
(im deutschen heißt das sicher : Dialog X ist sichtbar für Spieler Y)
als THEN kommt dann:
Dialog - Show Talent_Dialog for (Player group((Triggering player)))
(zufinden unter Dialog - Zeige/Verberge Dialog)
danach muss der Auslöser auch noch beendet werden, da sonst die 2. Else If Anweisung durchlaufen wird, daher:
Trigger - Clear the action queue (Interrupt the active action)

die 2. Else If Anweisung ist die Implikation der 1., sprich:
IF:
(Talent_Dialog is visible for (Triggering player)) == true
THEN:
Dialog - Hide Talent_Dialog for (Player group((Triggering player)))
Trigger - Clear the action queue (Interrupt the active action)

Der ganze Auslöser sieht dann so aus:
Bild

Nun können wir mal das Spiel starten und wenn alles geklappt hat und die Bilder richtig importiert wurden(ich habe derzeit keine Skill-Images drin^^) müsste das Ergebnis so ausssehen:
Bild

3.2. Veränderungsverfahren
So jetzt sind wir endlich beim nächsten Punkt angekommen!
Hier geht es darum ,dass wenn man auf ein Talent klickt, es sich, wenn die Bedingungen erfüllt sind, erhöht!
Auch das ist wieder ein recht umfangreicher Komplex und dazu werden benötigt:
  • 1 Trigger
  • 2 Condition Definitions
  • 1 Action Definition
Fangen wir also mit den Condition Definitions(Bedingungsdefinitionen) an:
Diese brauchen wir zur Überprüfung dafür, ob wir das Talent lernen können, wenn
es eine Bedingung besitzt(wie benötigt Talent 12 oder so):
also rechtsklick im auslösereditor, dann neu->neue bedingungsdefinition(sry engl. client -.-)
Dieses neue Bedingung nennen wir mal ganz unkompliziert Bedingung für Talentnummer 15
Bei Return Type stellen wir Boolean ein
Bei Paramaters fügen wir einen Integer hinzu, mit den Namen Talentnummer.
bei Grammar text müsste dann stehen: Bedingung für Talentnummer 15(Talentnummer)

nun fügen wir die Aktionen dafür hinzu:
eine If-then-else anweisung
if: Talentnummer == 15
then:
-->if then else(mal wieder)
-->if:Talent_Skilllevel[14]== 1
-->then: Return true
-->else: Return false
else: Return true

das sieht hier grad wirklich sehr unstrukturiert aus,
im editor müsste das bei euch dann so aussehen:
Bild

Die 2. Bedingungsdefinition(Bedingung für Talentnummer 15)
ist genau das selbe, nur das wir dort:
Talentnummer == 15 mit Talentnummer == 20 austauschen und
Talent_Skilllevel[14] == 1 mit Talent_Skilllevel[12] == 1 austauschen.
Also:
Bild

Nun müssen wir noch eine Aktionendefinition erstellen,
diese nennen wir auch ganz unkompliziert: Aktualisierung der Bedingungen
(mir fallen immer so kurze Namen ein, wa?^^)
Als Parameter benötigen wir hier 2 Dinge,
1. Talentnummer , vom Typ Integer
2. Spieler, vom Typ Integer

und eine Lokale Variable:
Temp_Talentnummer , vom Typ Integer
mit den Startwert : Talentnummer

Die Aktionen dieser Definition beschränken sich auf 16 If-Then-Else Anweisungen,
welche wahrscheinlich hier alle reinzuschreiben und zu erklären erstmal
a) meine Motivation und
b) eure Nerven sprengen würden^^ Daher verzichte ich VOERST darauf, werde sie jedoch noch später hinzufügen,
da ich inzwischen eh schon mehrere Stunden hier dran arbeite :)
der Code dieser Action Definition werde ich
erstmal ohne Kommentar hier reinposten -.- erklärung kommt später

Code: Alles auswählen

Aktualisierung der Bedingungen
    Options: Action
    Return Type: (None)
    Parameters
        Talentnummer = 0 <Integer>
        Spieler = 0 <Integer>
    Grammar Text: Aktualisierung der Bedingungen(Talentnummer, Spieler)
    Hint Text: (None)
    Custom Script Code
    Local Variables
        Temp_Talentnummer = Talentnummer <Integer>
    Actions
        General - If (Conditions) then do multiple (Actions)
            If Then Else
                General - Else if (Conditions) then do (Actions)
                    Else If
                        And
                            Conditions
                                Temp_Talentnummer == 12
                                Talent_Skilllevel[Temp_Talentnummer] == Talent_Maxlevel[Temp_Talentnummer]
                                (Image of Talent_Bedingungspfeile[1] for (Triggering player)) != "Learned_ArrowDown.dds"
                    Then
                        Dialog - Set Talent_Bedingungspfeile[1] image to Learned_ArrowDown.dds for (Player group(Spieler))
                        Dialog - Set Talent_Bedingungspfeile[1] Render Priority to 515 for (All players)
                General - Else if (Conditions) then do (Actions)
                    Else If
                        And
                            Conditions
                                Temp_Talentnummer == 14
                                Talent_Skilllevel[Temp_Talentnummer] == Talent_Maxlevel[Temp_Talentnummer]
                                (Image of Talent_Bedingungspfeile[2] for (Triggering player)) != "Learned_ArrowRight.dds"
                    Then
                        Dialog - Set Talent_Bedingungspfeile[2] image to Learned_ArrowRight.dds for (Player group(Spieler))
                        Dialog - Set Talent_Bedingungspfeile[2] Render Priority to 515 for (All players)
                General - Else if (Conditions) then do (Actions)
                    Else If
                        Talent_Spended Points >= 5
                        Talent_Spended Points < 10
                    Then
                        General - Pick each integer from 5 to 8, and do (Actions)
                            Actions
                                General - If (Conditions) then do (Actions) else do (Actions)
                                    If
                                        Talent_Skilllevel[(Picked integer)] == 0
                                    Then
                                        Dialog - Set Talent_Images Button[(Picked integer)] tooltip to Talent_Tooltip[(Picked integer)][0] for (Player group(Spieler))
                                    Else
                General - Else if (Conditions) then do (Actions)
                    Else If
                        Talent_Spended Points >= 10
                        Talent_Spended Points < 15
                    Then
                        General - Pick each integer from 9 to 12, and do (Actions)
                            Actions
                                General - If (Conditions) then do (Actions) else do (Actions)
                                    If
                                        Talent_Skilllevel[(Picked integer)] == 0
                                    Then
                                        Dialog - Set Talent_Images Button[(Picked integer)] tooltip to Talent_Tooltip[(Picked integer)][0] for (Player group(Spieler))
                                    Else
                General - Else if (Conditions) then do (Actions)
                    Else If
                        Talent_Spended Points >= 15
                        Talent_Spended Points < 20
                    Then
                        General - Pick each integer from 13 to 16, and do (Actions)
                            Actions
                                General - If (Conditions) then do (Actions) else do (Actions)
                                    If
                                        Talent_Skilllevel[(Picked integer)] == 0
                                        (Picked integer) != 15
                                    Then
                                        Dialog - Set Talent_Images Button[(Picked integer)] tooltip to Talent_Tooltip[(Picked integer)][0] for (Player group(Spieler))
                                    Else
                General - Else if (Conditions) then do (Actions)
                    Else If
                        Talent_Spended Points >= 20
                    Then
                        General - Pick each integer from 17 to 20, and do (Actions)
                            Actions
                                General - If (Conditions) then do (Actions) else do (Actions)
                                    If
                                        Talent_Skilllevel[(Picked integer)] == 0
                                        (Picked integer) != 20
                                    Then
                                        Dialog - Set Talent_Images Button[(Picked integer)] tooltip to Talent_Tooltip[(Picked integer)][0] for (Player group(Spieler))
                                    Else
        General - If (Conditions) then do (Actions) else do (Actions)
            If
                And
                    Conditions
                        Talent_Spended Points >= 15
                        Talent_Skilllevel[14] == 1
                        Talent_Skilllevel[15] == 0
            Then
                Dialog - Set Talent_Images Button[15] tooltip to Talent_Tooltip[15][0] for (Player group(Spieler))
            Else
                General - If (Conditions) then do (Actions) else do (Actions)
                    If
                        And
                            Conditions
                                Talent_Spended Points < 15
                                Talent_Skilllevel[14] == 1
                                Talent_Skilllevel[15] == 0
                    Then
                        Dialog - Set Talent_Images Button[15] tooltip to Talent_Tooltip[15][7] for (Player group(Spieler))
                    Else
                        General - If (Conditions) then do (Actions) else do (Actions)
                            If
                                And
                                    Conditions
                                        Talent_Spended Points >= 15
                                        Talent_Skilllevel[14] == 0
                                        Talent_Skilllevel[15] == 0
                            Then
                                Dialog - Set Talent_Images Button[15] tooltip to Talent_Tooltip[15][8] for (Player group(Spieler))
                            Else
        General - If (Conditions) then do (Actions) else do (Actions)
            If
                And
                    Conditions
                        Talent_Spended Points >= 20
                        Talent_Skilllevel[12] == 1
                        Talent_Skilllevel[20] == 0
            Then
                Dialog - Set Talent_Images Button[20] tooltip to Talent_Tooltip[20][0] for (Player group(Spieler))
            Else
                General - If (Conditions) then do (Actions) else do (Actions)
                    If
                        And
                            Conditions
                                Talent_Spended Points < 20
                                Talent_Skilllevel[12] == 1
                                Talent_Skilllevel[20] == 0
                    Then
                        Dialog - Set Talent_Images Button[20] tooltip to Talent_Tooltip[20][7] for (Player group(Spieler))
                    Else
                        General - If (Conditions) then do (Actions) else do (Actions)
                            If
                                And
                                    Conditions
                                        Talent_Spended Points >= 20
                                        Talent_Skilllevel[12] == 0
                                        Talent_Skilllevel[20] == 0
                            Then
                                Dialog - Set Talent_Images Button[20] tooltip to Talent_Tooltip[20][8] for (Player group(Spieler))
                            Else
Nun erstellen wir einen Auslöser: Learn
Als Event benutzen wir hier:
Ein Dialog-Item wird von einen beliebigen Spieler gedrückt
(Dialog - Any Dialog Item is Clicked by Player Any Player)

Für diesen Auslöser benötigen wir exakt 4 lokale Variablen:
1. Temp_Talentnummer , vom Typ Integer
2. Temp_Talenttreenumber , vom Typ Integer
3. Temp_Tooltip , vom Typ Text
4. Temp_Pfad , vom Typ String

Ich werde die Aktionen jetzt als Code posten und dann im Code erklären:
Es steht immer über der jeweiligen Aktion!
(wer will kann diesen code auch ohne jegliches Verständtnis in ein Custom Script kopieren,
das läuft zumindest auch xD

Code: Alles auswählen

//Es soll eine Schleife von 1-20 ausgeführt werden
General - Pick each integer from 1 to 20, and do (Actions)
      Actions
         //If then else Anweisung
         General - If (Conditions) then do (Actions) else do (Actions)
               If 
                  //wenn der angeklickte button gleich der von der schleife ist,
                 (Used dialog item) == Talent_Images Button[(Picked integer)]
               Then 
                 //dann soll die Nummer des Talents in Temp_Talentnummer gespeichert werden
                 Variable - Set Temp_Talentnummer = (Picked integer)
               Else 
//if-then-else anweisung wieder
General - If (Conditions) then do (Actions) else do (Actions)
   If 
      //wenn die 2 erstellen Bedingungen erfüllt sind,
      (Bedingung für Talentnummer 15(Temp_Talentnummer)) == true
      (Bedingung für Talentnummer 20(Temp_Talentnummer)) == true
      //und die Punkte die man in den Baum gesteckt hat, mindestens so groß ist,
      //wie die benötigten Punkte für diese Ebene,
      (Talent_Needed Points[Temp_Talentnummer] * 5) <= Talent_Spended Points
      //und der Skilllevel des gewünschten Talents noch nicht auf der maximalen Stufe ist,
      Talent_Skilllevel[Temp_Talentnummer] < Talent_Maxlevel[Temp_Talentnummer]
      //und man noch mindestens 1 Talentpunkt über hat, dann:
      Talent_Remaining Points > 0
   Then
      //Sollen die verbleibenden Punkte um 1 verringert werden
      Variable - Set Talent_Remaining Points = (Talent_Remaining Points - 1)
      //Sollen die Punkte, die in diesen Talentbaum stecken, um 1 erhöht werden
      Variable - Set Talent_Spended Points = (Talent_Spended Points + 1)
      //Soll die Stufe des Talents um 1 erhöht werden
      Variable - Set Talent_Skilllevel[Temp_Talentnummer] = (Talent_Skilllevel[Temp_Talentnummer] + 1)
      //Ebenfalls soll natürlich auch das Tooltip angepasst werden an die neue Stufe!
      Dialog - Set Talent_Images Button[Temp_Talentnummer] tooltip to Talent_Tooltip[Temp_Talentnummer] 
                   Talent_Skilllevel[Temp_Talentnummer]] for (Player group((Triggering player)))
      General - If (Conditions) then do (Actions) else do (Actions)
         If
           //Wenn das Talent dann auf der maximalen Stufe ist,
           Talent_Skilllevel[Temp_Talentnummer] == Talent_Maxlevel[Temp_Talentnummer]
         Then
           //Dann soll der Pfad fürs angepasste neue Bild bestimmt werden
           Variable - Set Temp_Pfad = (Combine ("Maxlearned_", (String(Talent_Maxlevel[Temp_Talentnummer])), ".dds"))
           // Und die Umrandung muss auch geändert werden, weil ausgelernt!
           Dialog - Set Talent_Images[Temp_Talentnummer] image to Maxlearned.dds for (Player group((Triggering player)))
           // Ebenfalls soll es natürlich wieder von der Renderpriorität angepasst werden,
           // Damit es ÜBER allen anderen ist
           Dialog - Set Talent_Images[Temp_Talentnummer] Render Priority to 513 for (Player group((Triggering player)))
         Else
           //Sonst soll der Pfad fürs angepasste neue Bild bestimmt werden,
           // in diesem Fall aber ein NICHT_ausgelerntes bild
           Variable - Set Temp_Pfad = (Combine ("Learned_", (String(Talent_Skilllevel[Temp_Talentnummer])), ".dds"))
           //Ebenfalls soll trotzdem die Umrandung geändert werden, aber zu einer
           // nicht ausgelernten Version der Umrandung
           Dialog - Set Talent_Images[Temp_Talentnummer] image to Learned.dds for (Player group((Triggering player)))
           // Auch davon soll wieder die Renderpriorität angepasst werden
           Dialog - Set Talent_Images[Temp_Talentnummer] Render Priority to 513 for (Player group((Triggering player)))
      // Das Upgradesymbol soll nun das Bild von Temp_Pfad kriegen
      Dialog - Set Talent_Images Level[Temp_Talentnummer] image to lv_temp_Pfad for (Player group((Triggering player)))
      // Auch davon soll natürlich die Renderpriorität erhöht werden :)
      Dialog - Set Talent_Images Level[Temp_Talentnummer] Render Priority to 514 for (Player group((Triggering player)))
      // Der Text für die Anzahl der investierten Punkte muss angepasst werden!
      Dialog - Set Talent_Texte[1] text to ("Mutation-Tal<c " + (Combine ("<c val="6000BF">", 
                   (Text(Talent_Spended Points)), "</c>"))) for (Player group((Triggering player)))
      // Der Text für die Anzahl der unverteiltenPunkte muss angepasst werden!
      Dialog - Set Talent_Texte[2] text to ("Unverteilte Talentpunkte: " + (Combine ("<c val="FFFF00">", 
                   (Text(Talent_Remaining Points)), "</c>"))) for (Player group((Triggering player)))
      // Dann soll unsere tolle Aktionendefinition ausgeführt werden!
      Aktualisierung der Bedingungen(Temp_Talentnummer, (Triggering player))
   Else
Wenn auch dieser umfangreiche Auslöser fertig ist, dann könnt ihr bereits Talentpunkte verteilen :)
Ebenfalls könnt ihr im Spiel testen und werdet feststellen, dass die Umrandungen sich
bereits verändern nur es gibt halt noch keine Auswirkungen :)
Hier ein Beispiel:
Bild

3.3. Erhalt der Talente

Das letzte was wir jetzt noch brauchen ist eine Action Definition(Aktionendefinition),
welche wir Erhalt des Talents nennen.
Diese Aktionendefinition beinhaltet folgende Parameter:
Talentnummer , vom Typ Integer
Spieler , vom Typ Integer
Der Gramar Text müsste dann so aussehen: Erhalt des Talents(Talentnummer, Spieler)

Hier erstellen wir wieder eine Multiple If-then-else Anweisung:
und jetz geht es ganz schematisch vor :)
Für jedes Talent das wir haben(in diesem Fall 12 Stück) erstellen wir eine
Else If then do Aktion
der Else If part ist immer:

Code: Alles auswählen

Else If
   Talentnummer == #nummer
   //#nummer bitte mit der Nummer von 1-20 ersetzen
bei Then kommt dann das, was euer Talent machen soll :)
ich habe hier für meine Map 4 Beispielskills(relativ simpel alle^^):
Erklären stehen im Code über den Aktionen :)

Code: Alles auswählen

        
General - If (Conditions) then do multiple (Actions)
       If Then Else
           General - Else if (Conditions) then do (Actions)
               Else If
                   Talentnummer == 1
               Then
                   //Erhöht die Geschwindigkeit des Thors um je 2.5
                   Unit - Set Thor [6.89, 3.28] Movement Speed to ((Thor [6.89, 3.28] Movement Speed (Current)) + 2.5)
           General - Else if (Conditions) then do (Actions)
               Else If
                   Talentnummer == 3
               Then
                   //Diese Variable vom Typ Real muss vorher aber global erstellt werden
                   Variable - Modify Talent 3: + 20.0
                   //Erhöht die Größe des Thors um je 20%
                   Unit - Set Thor [6.89, 3.28] scale to (Talent 3%, Talent 3%, Talent 3%) of its original size
           General - Else if (Conditions) then do (Actions)
               Else If
                   Talentnummer == 4
               Then
                   // Erhöht das maximale Leben des Thors um je 100
                   Unit - Set Thor [6.89, 3.28] Maximum Life to ((Thor [6.89, 3.28] Maximum Life (Current)) + 100.0)
           General - Else if (Conditions) then do (Actions)
               Else If
                   Talentnummer == 6
               Then
                   // Erhöht die Schilde des Thors um je 100
                   Unit - Set Thor [6.89, 3.28] Maximum Shields to ((Thor [6.89, 3.28] Maximum Shields (Current)) + 100.0)
Jetzt müsst ihr nur zum zum Auslöser Learn gehen, dann
zu der Aktion gehen wo steht:
Aktualisierung der Bedingungen(Temp_Talentnummer, (Triggering player))
und direkt darunter fügt ihr hinzu mit unserer neuen Aktionendefinition:
Erhalt des Talents(Temp_Talentnummer, (Triggering player))

Nun kann ich nur sagen: Congratulation!
Es ist vollbracht :) Nun könnt ihr Talentpunkte verteilen und erhaltet Boni,
hier ein Video von mir was das auch nochma zeigt:
Bild


4. Abschluss
Nun, ich hoffe dieses Tutorial war verständlich und hilfreich, sobald ich an einen
deutschen Editor komme, werde ich mir auch noch die Mühe machen den Teil
zuübersetzen, der bisher auf Englisch ist. Ebenfalls fehlt noch 1 Auslöser, welcher
nur in der kompletten Map drin ist, den werde ich binnen 1 Tag nachreichen.
Ebenfalls stelle ich hiermit alle benutzten Images für die Umrandungen, Upgradestufen, etc. nachreichen:
http://www.file-upload.net/download-255 ... e.rar.html

Hier ist auch noch die Map:
enGB-Version: http://www.file-upload.net/download-255 ... C2Map.html
deDE-Version: http://www.file-upload.net/download-255 ... C2Map.html

falls es noch Fragen gibt :)
so stellt sie bitte :)

grüße

Deathwing
It is done... All have been given that which must be given.
I now seal the Dragon Soul forever...
For it to be as it must, yes.

Bild

Benutzeravatar
Kevion
Zergling
Beiträge: 30
Registriert: 11.05.2010, 19:09
Liga 1vs1: Meister
Liga 2vs2: Diamant

Re: [Tutorial] Talentbäume

Beitrag von Kevion » 29.05.2010, 00:56

erstmal... WOW
echt klasse das sich jemand so viel mühe macht das alles aufzuschreiben und dann auch noch schön geordnet :) eigentlich steh ich nicht so aufs mappen aber ist ja ziemlich perfekt erklärt evtl probier ichs mal! :D

weiter so ;)
Bild

Exekutor[NHF]
Moderator der Stämme
Moderator der Stämme
Beiträge: 5724
Registriert: 07.07.2007, 14:33
Liga 1vs1: Diamant
Liga 2vs2: Keine
Mainrace: Protoss
Wohnort: Bremen

Re: [Tutorial] Talentbäume

Beitrag von Exekutor[NHF] » 29.05.2010, 09:17

Ich kann zwar echt nichts mit dem Editor anfangen, aber das ist ja wohl mal ein richtig epic genialer Guide! Ich ziehe meinen Hut, sehr geniale Arbeit!
Martin: What is the advantage of being able to touch one's noes with the tongue?
Marie: I'm one step ahead of you in the evolution!

GarfieldKlon
Moderator des Schwarmstocks
Moderator des Schwarmstocks
Beiträge: 4397
Registriert: 02.07.2007, 19:37
Liga 1vs1: Keine
Liga 2vs2: Keine
Mainrace: Zerg
Wohnort: Hannover

Re: [Tutorial] Talentbäume

Beitrag von GarfieldKlon » 29.05.2010, 09:39

Echt Klasse! Sehr Informativ, guter Aufbau, sehr übersichtlich usw. usw.

Da sag ich einfach nur : Epic genial :gut: :anbeten: :mrgreen:
║▌║█║║▌║█║ Warnung! Falscher oder fehlender Kaffee - Benutzer angehalten --(◔̯◔)--
1334566890100

Deathwing
Moderator der Leere
Moderator der Leere
Beiträge: 287
Registriert: 30.04.2010, 16:15
Liga 1vs1: Meister
Liga 2vs2: Keine
Mainrace: Random
Wohnort: Berlin

Re: [Tutorial] Talentbäume

Beitrag von Deathwing » 05.11.2011, 14:00

Liebe Leute,

ich würde dieses Tutorial gerne mal aktualisieren, da sich einiges verändert hat seit 2010!
Ich bin jedoch leider nicht mehr im Besitz meiner Map,
da meine alte Festplatte sich damals verabschiedet hatte und der Downloadlink nicht mehr funktioniert!
Daher wollte ich fragen, ob irgendjemand die Talente.rar noch auf seinen Computer hat oder zumindest die StarCraft II Map.
Ich würde mich über eine positive Resonanz freuen!

grüße

Deathwing
It is done... All have been given that which must be given.
I now seal the Dragon Soul forever...
For it to be as it must, yes.

Bild

Antworten