Tutorial:Multiboard – Mappedia

Tutorial:Multiboard

Aus Mappedia
Wechseln zu: Navigation, Suche

Ein Multiboard besteht immer aus n*m Feldern. Diese Felder können jedoch verschiedene Breiten haben. Die Folgende Grafik verdeutlicht den aufbau eines MB's (Mutltiboards):Das Bild stammt übrigens von Nemesis[DK].

Multiboard.JPG

Nun können wir in jede Zelle Text und/oder Bilder einfügen, und dies wollen wir nun auch tun.

Inhaltsverzeichnis

Erstellung eines Grundmultiboards

Initialition

Für dieses Tutorial nehmen wir an, dass wir eine Heroarena mit ganzen 12 Spielern bauen; das heißt, dass das MB 12 rows (Reihen sh. Bild), für die Spieler haben muss und nochmal eine Reihe für die "Überschriften" a la "Kills", "Name" usw.. Also brauch das MB auch noch 3 Colums (Spalten sh. Bild). Gesagt getan:

Multiboard Init
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
Multiboard - Create a multiboard with 3 columns and 13 rows, titled Hier steht der Titel

Jedoch sieht man, wenn man das Spiel startet nichts... Dies liegt daran, dass man das Multiboard erst Zeigen muss:


Multiboard Init
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
Multiboard - Create a multiboard with 3 columns and 13 rows, titled Hier steht der Titel
Multiboard - Show (Last created multiboard)

Leider sieht man nun in jeder Zelle so ein komisches Auge; dies liegt daran, dass WarCraft jede Zelle mit einem Icon füllt, solange man diese nicht selbst mit einem Bild füllt. Da wir in diesem Kapitel nicht mit Icons arbeiten, deaktivieren wir in unserem Multiboard erstmal alle Icons:

Multiboard Init
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
Multiboard - Create a multiboard with 3 columns and 13 rows, titled Hier steht der Titel
Multiboard - Show (Last created multiboard)
Multiboard - Set the display style for (Last created multiboard) item in column 0, row 0 to Show text and Hide icons

Wie ihr seht, sage ich WarCraft, dass er alle Icons in Spalte und Reihe 0 verstecken soll. Die 0 steht für alle Spalten bzw. Reihen, sodass ich jede Reihe und Spalte einzeln machen muss.

Also merken: 0 steht für alle Reihen bzw. Spalten.

Nun wollen wir aber damit beginnen das MB mit Text zu füllen.

Multiboard Init
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
Multiboard - Create a multiboard with 3 columns and 13 rows, titled Hier steht der Titel
Multiboard - Show (Last created multiboard)
Multiboard - Set the display style for (Last created multiboard) item in column 0, row 0 to Show text and Hide icons
Multiboard - Set the text for (Last created multiboard) item in column 1, row 1 to Name
Multiboard - Set the text for (Last created multiboard) item in column 2, row 1 to Kills
Multiboard - Set the text for (Last created multiboard) item in column 3, row 1 to Herokills
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Multiboard - Set the text for (Last created multiboard) item in column 1, row ((Integer A) + 1) to (Name of (Player((Integer A))))
Multiboard - Set the text for (Last created multiboard) item in column 2, row ((Integer A) + 1) to 0
Multiboard - Set the text for (Last created multiboard) item in column 3, row ((Integer A) + 1) to 0

Wie man sieht benutze ich hier für die Bestimmung der Reihe ((Integer A) + 1). Das mache ich, weil die erste Reihe ja für die "Überschriften" benutzt wird. Und außerdem erspare ich mir so das manuelle Eintragen jedes Spielers.

Doch leider sieht das Ergebnis ingame nicht so schön aus; das liegt daran, dass der Text zu lang für die Breite der Zelle ist, also müssen wir die Zelle verbreitern. Dies geht mit folgendem Befehl:

Multiboard - Set the width for (Last created multiboard) item in column 1, row 1 to 3.00% of the total screen width

Also einfach mal die Zellen verbreitern:

Multiboard Init
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
Multiboard - Create a multiboard with 3 columns and 13 rows, titled Hier steht der Titel
Multiboard - Show (Last created multiboard)
Multiboard - Set the display style for (Last created multiboard) item in column 0, row 0 to Show text and Hide icons
Multiboard - Set the text for (Last created multiboard) item in column 1, row 1 to Name
Multiboard - Set the text for (Last created multiboard) item in column 2, row 1 to Kills
Multiboard - Set the text for (Last created multiboard) item in column 3, row 1 to Herokills
Multiboard - Set the width for (Last created multiboard) item in column 1, row 0 to 8.00% of the total screen width
Multiboard - Set the width for (Last created multiboard) item in column 2, row 0 to 3.00% of the total screen width
Multiboard - Set the width for (Last created multiboard) item in column 3, row 0 to 4.00% of the total screen width
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Multiboard - Set the text for (Last created multiboard) item in column 1, row ((Integer A) + 1) to (Name of (Player((Integer A))))
Multiboard - Set the text for (Last created multiboard) item in column 2, row ((Integer A) + 1) to 0
Multiboard - Set the text for (Last created multiboard) item in column 3, row ((Integer A) + 1) to 0
Multiboard - Minimize (Last created multiboard)
Multiboard - Maximize (Last created multiboard)

Am besten probiert man die Breite für verschiedene Zellen einfach so lange aus, bis man das gewünschte Ergebnis hat. Ausserdem hat der aufmerksame Leser auch noch die letzten beiden neuen Aktionen entdeckt (Multiboard - Minimize bzw. Multiboard - Maximize). Diese verhindern mögliche Darstellungsprobleme beim Text.

Kills zählen

So weit, so gut, aber wie added man nun Kills und in wie in diesem Beispiel auch Herokills? Natürlich sollte man, wie solls auch anders sein mit Variablen arbeiten.

Ich nenne diese Variablen "Kills" und "Herokills". Beide sind Integer-variablen und haben einen Array. Beginnen wir damit, dass wir einfach einen neuen Trigger erstellen und ihn "Multiboard Kills" nennen. Als Event nemen wir natürlich "A Unit dies". Als Condition, die wir direkt bei Conditions eintragen nehmen wir "((Triggering unit) belongs to an enemy of (Owner of (Killing unit))) Equal to True" (Boolean Comparsion), damit man nicht für das Killen seiner Freunde Kills angestrichen bekommt. Nun unterscheiden wir mit Hilfe eines If-Then-Else-Blockes, ob es sich um eine normale Einheit, oder um einen Helden handelt:

Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Triggering unit) is A Hero) Equal to True
Then - Actions
Set Herokills[(Player number of (Owner of (Killing unit)))] = (Herokills[(Player number of (Owner of (Killing unit)))] + 1)
Else - Actions
Set Kills[(Player number of (Owner of (Killing unit)))] = (Kills[(Player number of (Owner of (Killing unit)))] + 1)

Aber wie übertragen wir den Wert der Variable nun in das MB? Da die Nummer der Reihe eines Spielers im MB genau Nummer des Spielers + 1 entspricht nemen wir nun einfach diesen Wert und benutzen ihn um den Wert der Variable in MB einzutragen:

Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Triggering unit) is A Hero) Equal to True
Then - Actions
Set Herokills[(Player number of (Owner of (Killing unit)))] = (Herokills[(Player number of (Owner of (Killing unit)))] + 1)
Multiboard - Set the text for (Last created multiboard) item in column 3, row ((Player number of (Owner of (Killing unit))) + 1) to (String(Herokills[(Player number of (Owner of (Killing unit)))]))
Else - Actions
Set Kills[(Player number of (Owner of (Killing unit)))] = (Kills[(Player number of (Owner of (Killing unit)))] + 1)
Multiboard - Set the text for (Last created multiboard) item in column 2, row ((Player number of (Owner of (Killing unit))) + 1) to (String(Kills[(Player number of (Owner of (Killing unit)))]))

Also sieht der ganze Trigger nun folgendermaßen aus:

Multiboard Kills
Events
Unit - A unit Dies
Conditions
((Triggering unit) belongs to an enemy of (Owner of (Killing unit))) Equal to True
Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Triggering unit) is A Hero) Equal to True
Then - Actions
Set Herokills[(Player number of (Owner of (Killing unit)))] = (Herokills[(Player number of (Owner of (Killing unit)))] + 1)
Multiboard - Set the text for (Last created multiboard) item in column 3, row ((Player number of (Owner of (Killing unit))) + 1) to (String(Herokills[(Player number of (Owner of (Killing unit)))]))
Else - Actions
Set Kills[(Player number of (Owner of (Killing unit)))] = (Kills[(Player number of (Owner of (Killing unit)))] + 1)
Multiboard - Set the text for (Last created multiboard) item in column 2, row ((Player number of (Owner of (Killing unit))) + 1) to (String(Kills[(Player number of (Owner of (Killing unit)))]))

Nun aber noch mal zur genauen erläuterung der wichtigsten Funktionen:

Player Number Of ( ) Gibt die Nummer eines Spielers aus
Owner Of Unit ( ) Gibt den Besitzer einer Einheit aus
String ( ) Konvertiert in diesem Fall einen Integer zu einem String

Farben

Da es ganz schön wäre, die Spieler auch in ihrer richtigen Farbe im MB anzuzeigen, gebe ich euch hier ein paar Hilfen, wie ihr das umsetzt.

Colorstrings

Wie ist ein "Colorstring" aufgebaut? Ein String zum angeben der Farbe besteht aus 6 Teilen:

Die einzelnen Werte für die Rot/Grün/Blau-Werte werden im Hexadezimalsystem angeben. So ist 255 genau ff, die größte Zahl, die ihr mit zwei Zeichen im Hexedezimalystem darstellen könnt.

Liste

Liste aller Colorstrings für die Farben der einzelnen Spieler:

Spieler 01 Rot cffff0303
Spieler 02 Blau cff0042ff
Spieler 03 Cyan cff1ce6b9
Spieler 04 Lila cff540081
Spieler 05 Gelb cfffffc01
Spieler 06 Orange cfffe8a0e
Spieler 07 Grün cff20c000
Spieler 08 Pink cffe55bb0
Spieler 09 Grau cff959697
Spieler 10 Silber cff7ebff1
Spieler 11 Dunkelgrün cff106246
Spieler 12 Braun cff4e2a04

Einbau - Verwendung der Colorstrings

Am einfachsten ist es die Farbwerte in einen Stringarray zu packen; also packen wir den Wert für Spieler 1 einfach in den Array (ich nenn ihn hier mal "Playercolor") unter dem Index 1, mit Spieler 2 genauso, usw.. Also wird unser Trigger "Multiboard Init" um folgende 12 Zeilen erweitert:

Multiboard Init
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
Multiboard - Create a multiboard with 3 columns and 13 rows, titled Hier steht der Titel
Multiboard - Show (Last created multiboard)
Multiboard - Set the display style for (Last created multiboard) item in column 0, row 0 to Show text and Hide icons
Multiboard - Set the text for (Last created multiboard) item in column 1, row 1 to Name
Multiboard - Set the text for (Last created multiboard) item in column 2, row 1 to Kills
Multiboard - Set the text for (Last created multiboard) item in column 3, row 1 to Herokills
Multiboard - Set the width for (Last created multiboard) item in column 1, row 0 to 8.00% of the total screen width
Multiboard - Set the width for (Last created multiboard) item in column 2, row 0 to 3.00% of the total screen width
Multiboard - Set the width for (Last created multiboard) item in column 3, row 0 to 4.00% of the total screen width
Set Playercolor[1] = |cffff0202
Set Playercolor[2] = |cff0041ff
Set Playercolor[3] = |cff1be6b8
Set Playercolor[4] = |cff530080
Set Playercolor[5] = |cffffcc00
Set Playercolor[6] = |cfffe890d
Set Playercolor[7] = |cff1fbf00
Set Playercolor[8] = |cffe55aaf
Set Playercolor[9] = |cff949596
Set Playercolor[10] = |cff7dbef1
Set Playercolor[11] = |cff0f6145
Set Playercolor[12] = |cff4d2903
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Multiboard - Set the text for (Last created multiboard) item in column 1, row ((Integer A) + 1) to (Name of (Player((Integer A))))
Multiboard - Set the text for (Last created multiboard) item in column 2, row ((Integer A) + 1) to 0
Multiboard - Set the text for (Last created multiboard) item in column 3, row ((Integer A) + 1) to 0
Multiboard - Minimize (Last created multiboard)
Multiboard - Maximize (Last created multiboard)

Und damit die Spielernamen auch in der passenden Farbe angezeigt werden, benutzen wir einfach "Integer A" als Index für unseren Array:

Multiboard Init
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
Multiboard - Create a multiboard with 3 columns and 13 rows, titled Hier steht der Titel
Multiboard - Show (Last created multiboard)
Multiboard - Set the display style for (Last created multiboard) item in column 0, row 0 to Show text and Hide icons
Multiboard - Set the text for (Last created multiboard) item in column 1, row 1 to Name
Multiboard - Set the text for (Last created multiboard) item in column 2, row 1 to Kills
Multiboard - Set the text for (Last created multiboard) item in column 3, row 1 to Herokills
Multiboard - Set the width for (Last created multiboard) item in column 1, row 0 to 8.00% of the total screen width
Multiboard - Set the width for (Last created multiboard) item in column 2, row 0 to 3.00% of the total screen width
Multiboard - Set the width for (Last created multiboard) item in column 3, row 0 to 4.00% of the total screen width
Set Playercolor[1] = |cffff0303
Set Playercolor[2] = |cff0042ff
Set Playercolor[3] = |cff1ce6b9
Set Playercolor[4] = |cff540081
Set Playercolor[5] = |cfffffc01
Set Playercolor[6] = |cfffe8a0e
Set Playercolor[7] = |cff20c000
Set Playercolor[8] = |cffe55bb0
Set Playercolor[9] = |cff959697
Set Playercolor[10] = |cff7ebff1
Set Playercolor[11] = |cff106246
Set Playercolor[12] = |cff4e2a04
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Multiboard - Set the text for (Last created multiboard) item in column 1, row ((Integer A) + 1) to (Playercolor[(Integer A)] + ((Name of (Player((Integer A)))) + |r))
Multiboard - Set the text for (Last created multiboard) item in column 2, row ((Integer A) + 1) to 0
Multiboard - Set the text for (Last created multiboard) item in column 3, row ((Integer A) + 1) to 0
Multiboard - Minimize (Last created multiboard)
Multiboard - Maximize (Last created multiboard)

Hier möchte ich nochmal auf die Funktion " Player ( ) ", bzw. wie sie im Auswahlmenu heisst "Conversion - Convert Player Index To Player", hinweisen:

Diese Funktion nimmt einen Integer und macht daraus einen Spieler. Also wenn wir Player(1) haben, so ist das Spieler 1 Rot; bei Player(2) Spieler 2 Blau usw..

Damit hätten wir die Farben geschafft, jedoch werden in so, die selbst ausgewählte Farbe eines Spielers nicht berücksichtigt; ihr solltet also die Farben in den Spielerpreferenzen festlegen.

Icons

Anzeigen des Helden als Icon im MB. Wir müssen es also irgendwie schaffen, dass wir ein Icon an einen Helden speichern. Dies lässt sich am besten mit dem Gamecache realisieren, da wir bei ihm einfach an den Eiheitentyp einen String speichern können: Benötigt werden folgende Funktionen (und Variablen):

Praxis

Und wie speichere ich nun ein Icon und wie hole ich das wieder?

Nun erstmal muss man die Icons initialisieren; also wieder ab in den Trigger "Multiboard Init". Dort erstellen wir erstmal unseren Cache:

Game Cache - Create a game cache from blablabla
Set Multiboardcache = (Last created game cache)

Und nun speichert man den Pfad des Icons in dem Cache:

Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp as Multiboard of (Icons - + (String(Paladin))) in Multiboardcache

Bei einem Cache ist es wichtig, dass man sich nicht mit den Labeln und den Caterogies in die Quere kommt, daher sollte man möglichst aussagekräftige und einmalige Werte benutzen. Hier speicher in unter dem Label "Multiboard" mit der Caterogie "Icons - " + String(Paladin). Ich benutze den Präfix "Icons - ", damit ich nacher keine Probleme habe, sollte ich String(Paladin) nochmals verwenden. Da wir nun Icons in unser MB einbauen brauchen wir auch eine Spalte mehr; ich packe die Icons vor den Spielernamen. Also muss die Zeile "Multiboard - Create a multiboard with 3 columns and 13 rows, titled Hier steht der Tite..." in "Multiboard - Create a multiboard with 4 columns and 13 rows, titled Hier steht der Tite..." geändert werden. Jedoch müssen nun aber auch alle anderen Werte für die Breite der Zellen gändert werden und ausserdem werden ja im ganzen MB keine Icons angezeigt, jedoch sollen jetzt aber welche angezeigt werden; da gibt es nur eins: ändern. Der geänderte Trigger sieht nun folgendermaßen aus:

Multiboard Init
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
-------- *** Erstellen des Multiboards *** --------
Multiboard - Create a multiboard with 4 columns and 13 rows, titled Hier steht der Tite...
1. Set MB = (Last created multiboard)
Multiboard - Show MB
Multiboard - Set the display style for MB item in column 0, row 0 to Show text and Hide icons
2. Multiboard - Set the text for MB item in column 2, row 1 to Name
2. Multiboard - Set the text for MB item in column 3, row 1 to Kills
2. Multiboard - Set the text for MB item in column 4, row 1 to Herokills
2. Multiboard - Set the width for MB item in column 1, row 0 to 2.00% of the total screen width
2. Multiboard - Set the width for MB item in column 2, row 0 to 8.00% of the total screen width
2. Multiboard - Set the width for MB item in column 3, row 0 to 3.00% of the total screen width
2. Multiboard - Set the width for MB item in column 4, row 0 to 4.00% of the total screen width
3. -------- *** Definieren der Farben *** --------
Set Playercolor[1] = |cffff0303
Set Playercolor[2] = |cff0042ff
Set Playercolor[3] = |cff1ce6b9
Set Playercolor[4] = |cff540081
Set Playercolor[5] = |cfffffc01
Set Playercolor[6] = |cfffe8a0e
Set Playercolor[7] = |cff20c000
Set Playercolor[8] = |cffe55bb0
Set Playercolor[9] = |cff959697
Set Playercolor[10] = |cff7ebff1
Set Playercolor[11] = |cff106246
Set Playercolor[12] = |cff4e2a04
3. -------- *** Erstellen des Cache *** --------
Game Cache - Create a game cache from blablabla
Set Multiboardcache = (Last created game cache)
3. -------- *** Einrichten der Icons *** --------
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp as Multiboard of (Icons - + (String(Paladin))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroArchMage.blp as Multiboard of (Icons - + (String(Erzmagier))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroMountainKing.blp as Multiboard of (Icons - + (String(Bergkönig))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroBloodElfPrince.blp as Multiboard of (Icons - + (String(Blutmagier))) in Multiboardcache
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
4. Multiboard - Set the display style for MB item in column 1, row ((Integer A) + 1) to Hide text and Show icons
Multiboard - Set the text for MB item in column 2, row ((Integer A) + 1) to (Playercolor[(Integer A)] + ((Name of (Player((Integer A)))) + |r))
Multiboard - Set the text for MB item in column 3, row ((Integer A) + 1) to 0
Multiboard - Set the text for MB item in column 4, row ((Integer A) + 1) to 0
Multiboard - Minimize MB
Multiboard - Maximize MB

Wie man sieht, habe ich viele veränderungen vorgenommen (siehe Zahlen), die ich nun erläutere:

  1. Ich habe LastCreatedMultiboard" durch eine Variable "MB" ausgetauscht; dies wird später wichtig.
  2. Da wir nun eine neue Spalte haben musste ich natürlich alles um eine Zelle nach rechts "verschieben" (natürlich müsst ihr das gleiche auch im Kill-Trigger machen)
  3. Ich habe Kommentare eingefügt, damit der Trigger übersichtlich bleibt
  4. Da wir ja im gesamten MB die Icons ausgeschaltet haben, aktiviere ich sie wieder für die Stellen, wo später die Heldenicons angezeigt werden

Und wie kriege ich jetzt die Icons?

Nun dies hängt von eurer Heldenwahl (also wie die Spieler ihren Helden auswählen) ab. Ich habe einfach mal ein Beispielasuwahlsystem gemacht:

BEISPIEL Auswahl
Events
Player - Player 1 (Red) Selects a unit
Player - Player 2 (Blue) Selects a unit
Player - Player 3 (Teal) Selects a unit
Player - Player 4 (Purple) Selects a unit
Player - Player 5 (Yellow) Selects a unit
Player - Player 6 (Orange) Selects a unit
Player - Player 7 (Green) Selects a unit
Player - Player 8 (Pink) Selects a unit
Player - Player 9 (Gray) Selects a unit
Player - Player 10 (Light Blue) Selects a unit
Player - Player 11 (Dark Green) Selects a unit
Player - Player 12 (Brown) Selects a unit
Conditions
BEISPIEL_Chosen[(Player number of (Triggering player))] Equal to False
Actions
Set BEISPIEL_Chosen[(Player number of (Triggering player))] = True
Unit - Create 1 (Unit-type of (Triggering unit)) for (Triggering player) at ((Triggering player) start location) facing Default building facing degrees
Multiboard - Set the icon for MB item in column 1, row ((Player number of (Triggering player)) + 1) to (Load Multiboard of (Icons - + (String((Unit-type of (Triggering unit))))) from Multiboardcache)

Ihr müsste diesen Trigger NICHT verwenden, damit das Multiboard funktioniert! Alle Sachen (Variablen, Trigger), vor denen "BEISPIEL" steht müssen NICHT verwendet werden!

Ich zeige euch an diesem Trigger nur wie ihr jetzt das Icon eures Helden in das MB bekommt. Dafür gucken wir uns folgende Zeile an:

Multiboard - Set the icon for MB item in column 1, row ((Player number of (Triggering player)) + 1) to (Load Multiboard of (Icons - + (String((Unit-type of (Triggering unit))))) from (Last created game cache))

Wir setzen das Item in Spalte 1 und Reihe Playernumber + 1 gleich des, unter der Einheit im Cache gespeichertem Wert. Dafür benutzen wir einfach "Game Cache - Load String Value" und schwupps haben wir das Item.

Zeitanzeige

Nun kommen wir zu etwas, was in allen Maps, egal ob herobasierte Map, oder nicht, gerne gesehen wird: der Zeitanzeige. Ich packe die Zeitanzeige gerne in den Titel des MB's, da ich finde dies übersichtlicher und schöner ist; jedoch könnt ihr euch, wenn ihr hier das Tutorial durch habt, die Zeitanzeige in jede andere Zelle legen.

Die Theorie ist, das wir jede Sekunde einen Trigger laufen lassen, der eine Variable, die die Sekunden zählt um 1 erhöht; ist diese Varialbe nun über 60, so wird eine Minuten-Variable um 1 erhöht, die wiederum, falls sie über 60 ist eine Stunden-Variable um 1 erhöht. Hört sich nicht allzu schwer an; ist es auch nicht: los gehts.

(Anfänglich aus)

Multiboard Update
Events
Time - Every 1.00 seconds of game time
Conditions
Actions
Set Sekunden = (Sekunden + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Sekunden Greater than 60
Then - Actions
Set Sekunden = 0
Set Minuten = (Minuten + 1)
Else - Actions
Do nothing
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Minuten Greater than 60
Then - Actions
Set Minuten = 0
Set Stunden = (Stunden + 1)
Else - Actions
Do nothing

Benötigte Variablen sind hier die drei Integer-Variablen, von denen ich grade sprach (Sekunden, Minuten, Stunden). Würden wir diese drei Variablen jetzt einfach hintereinander reihen und durch Doppelpunkte trennen, so würde dies nicht nach der typischen Uhr-Anzeige aussehen, da, falls die Werte unter 10 sind sowas z.B. bei rauskommt 1:3:7 .Da wir aber eine richtige Uhranzeige haben wollen (also 01:03:07) müssen wir mit wieteren IF's arbeiten. Um uns die Sache leichter zu machen besorgen wir uns ausserdem eine neue Varialbe; einen String mit dem Namen "Title".

(Anfänglich aus)

Multiboard Update
Events
Time - Every 1.00 seconds of game time
Conditions
Actions
Set Sekunden = (Sekunden + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Sekunden Equal to 60
Then - Actions
Set Sekunden = 0
Set Minuten = (Minuten + 1)
Else - Actions
Do nothing
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Minuten Equal to 60
Then - Actions
Set Minuten = 0
Set Stunden = (Stunden + 1)
Else - Actions
Do nothing
Set Title = |cffab2d5e
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Stunden Less than 10
Then - Actions
Set Title = (Title + (0 + (String(Stunden))))
Else - Actions
Set Title = (Title + (String(Stunden)))
Set Title = (Title + |cff23def1:|cffab2d5e)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Minuten Less than 10
Then - Actions
Set Title = (Title + (0 + (String(Minuten))))
Else - Actions
Set Title = (Title + (String(Minuten)))
Set Title = (Title + |cff23def1:|cffab2d5e)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Sekunden Less than 10
Then - Actions
Set Title = (Title + (0 + (String(Sekunden))))
Else - Actions
Set Title = (Title + (String(Sekunden)))
Multiboard - Change the title of MB to Title

Gehen wir den Trigger, bis aud dei Stellen mit dem Sekundenerhöhen mal durch: Also zuerst setze ich den String "Title" auf eine Farbe (damit es schöner aussieht); dann prüfe ich ob Stunden noch kleiner als 10 sind. Sind sie dies, so setze ich Title=Tile + "0" + String(Stunden) Aber warum + "0" ? Nun das mache ich, damit ich die schöne Uhranzeige bekomme. Danach setze ich Title=Title+":" (Allerdings färbe ich : noch ein bisschen, damits noch schöner wird). Und wiederhole, das was ich grade mit Stunden gemacht habe, mit Minuten, und Sekunden und am Ende setze ich einfach den Title des Multiboards auf den Wert, den die Variable "Title" hat.

Revive-Anzeige

Da dieses Multiboard vor allem für eine Heldenbasierte Map gedacht ist, werde ich die Zeitanzeige in den Multiboardtitel packen, da ich finde, dass die Revivezeit sehr wichtig ist und man sie immer im Auge behalten sollte. Da wir ja schon einen Trigger haben, der Jede Sekunde feuert, wäre es doch Ressourcensparend die Wiederbelebung auch in diesem Trigger zu machen. Dafür brauchen wir natürlich ein paare neue Variablen:

Zudem brauchen wir ja auch nun für jeden Spieler ein eigenes MB, damit wir den Title nur für den Spieler des gestorbenen Helden anzeigen; also aus MB einen Multiboard-Array machen. Jetzt zeigt sich eine Fehlermeldung... WarCraft weiss nicht mehr welches Multiboard er in den Trigger behandeln soll: Also packen wir, wo immer nun son graues Kästchen ist, die Zeile in eine Schleife, die von 1 bis 12 geht und machen dann diese Aktion für jeweils MB[Integer A] (Da wir in Multiboard Init schon einmal Integer A benutzen benutzen wir in der Integer A schleife einfach Integer B um durch alle MB's zu gehen). Nun bearbeiten wir unseren Inittrigger, sodass für jeden Spieler ein eigenes MB erstellt wird:

Multiboard Init
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
-------- *** Erstellen des Multiboards *** --------
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Multiboard - Create a multiboard with 4 columns and 13 rows, titled |cffab2d5e00|cff23d...
Set MB[(Integer A)] = (Last created multiboard)
Multiboard - Set the display style for MB[(Integer A)] item in column 0, row 0 to Show text and Hide icons
Multiboard - Set the text for MB[(Integer A)] item in column 2, row 1 to Name
Multiboard - Set the text for MB[(Integer A)] item in column 3, row 1 to Kills
Multiboard - Set the text for MB[(Integer A)] item in column 4, row 1 to Herokills
Multiboard - Set the width for MB[(Integer A)] item in column 1, row 0 to 2.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 2, row 0 to 8.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 3, row 0 to 3.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 4, row 0 to 4.00% of the total screen width
-------- *** Definieren der Farben *** --------
Set Playercolor[1] = |cffff0303
Set Playercolor[2] = |cff0042ff
Set Playercolor[3] = |cff1ce6b9
Set Playercolor[4] = |cff540081
Set Playercolor[5] = |cfffffc01
Set Playercolor[6] = |cfffe8a0e
Set Playercolor[7] = |cff20c000
Set Playercolor[8] = |cffe55bb0
Set Playercolor[9] = |cff959697
Set Playercolor[10] = |cff7ebff1
Set Playercolor[11] = |cff106246
Set Playercolor[12] = |cff4e2a04
-------- *** Erstellen des Cache *** --------
Game Cache - Create a game cache from blablabla
Set Multiboardcache = (Last created game cache)
-------- *** Einrichten der Icons *** --------
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp as Multiboard of (Icons - + (String(Paladin))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroArchMage.blp as Multiboard of (Icons - + (String(Erzmagier))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroMountainKing.blp as Multiboard of (Icons - + (String(Bergkönig))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroBloodElfPrince.blp as Multiboard of (Icons - + (String(Blutmagier))) in Multiboardcache
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Wait 0.00 seconds //(ka warum aber WarCraft sagt, dass die zwei Schleife ineinander zu viel ist,
//daher benutze ich hier ein Wait, damit WarCraft den Trigger bis zum Ende aufruft)
For each (Integer B) from 1 to 12, do (Actions)
Loop - Actions
Multiboard - Set the display style for MB[(Integer B)] item in column 1, row ((Integer A) + 1) to Hide text and Show icons
Multiboard - Set the text for MB[(Integer B)] item in column 2, row ((Integer A) + 1) to (Playercolor[(Integer A)] + ((Name of (Player((Integer A)))) + |r))
Multiboard - Set the text for MB[(Integer B)] item in column 3, row ((Integer A) + 1) to 0
Multiboard - Set the text for MB[(Integer B)] item in column 4, row ((Integer A) + 1) to 0
Multiboard - Minimize MB[(Integer A)]
Multiboard - Maximize MB[(Integer A)]
Custom script: call ShowMultiboardForPlayer(Player(bj_forLoopAIndex-1), udg_MB[bj_forLoopAIndex])
Trigger - Turn on Multiboard Update <gen>

Am wichtigsten ist das Custom Scripts "ShowmultiboardForPlayer()". Diese Funktion erlaubt es uns jedem Spieler ein anderes Mb zu zeigen. Die Funktion, die das tut, sieht so aus:

function ShowMultiboardForPlayer takes player p, multiboard m returns nothing
	if GetLocalPlayer()==p then
		call MultiboardDisplay(m, true)
	endif
endfunction

Die müsst ihr einfach in euren Map-Header kopieren (einfach im Triggereditor oben auf den Mapnamen klicken).

Die Funktion nimmt einen Spieler und ein MB entgegen, jedoch geben wir der Funktion beim Aufruf den Spieler IntegerA - 1 und dass passende MB. Warum? Nun ja, dies liegt daran, dass in Jass die Spieler bei 0 beginnen also Spieler 1 Rot = Player(0).

Der Updatetrigger wird folgendermaßen geändert:

Multiboard Update
Events
Time - Every 1.00 seconds of game time
Conditions
Actions
Set Sekunden = (Sekunden + 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Sekunden Equal to 60
Then - Actions
Set Sekunden = 0
Set Minuten = (Minuten + 1)
Else - Actions
Do nothing
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Minuten Equal to 60
Then - Actions
Set Minuten = 0
Set Stunden = (Stunden + 1)
Else - Actions
Do nothing
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Dead[(Integer A)] Equal to False
Then - Actions
Set Title = |cffab2d5e
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Stunden Less than 10
Then - Actions
Set Title = (Title + (0 + (String(Stunden))))
Else - Actions
Set Title = (Title + (String(Stunden)))
Set Title = (Title + |cff23def1:|cffab2d5e)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Minuten Less than 10
Then - Actions
Set Title = (Title + (0 + (String(Minuten))))
Else - Actions
Set Title = (Title + (String(Minuten)))
Set Title = (Title + |cff23def1:|cffab2d5e)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Sekunden Less than 10
Then - Actions
Set Title = (Title + (0 + (String(Sekunden))))
Else - Actions
Set Title = (Title + (String(Sekunden)))
Else - Actions
Set Title = |cff23def1
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Revivetime[(Integer A)] Equal to 0
Then - Actions
Hero - Instantly revive Hero[(Integer A)] at ((Player((Integer A))) start location), Hide revival graphics
Camera - Pan camera for (Player((Integer A))) to (Position of Hero[(Integer A)]) over 0.00 seconds
Selection - Select Hero[(Integer A)] for (Player((Integer A)))
Set Dead[(Integer A)] = False
Else - Actions
Do nothing
Set Tmpint[0] = (Revivetime[(Integer A)] / 60)
Set Tmpint[1] = (Revivetime[(Integer A)] mod 60)
Set Revivetime[(Integer A)] = (Revivetime[(Integer A)] - 1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Tmpint[0] Less than 10
Then - Actions
Set Title = (Title + (0 + (String(Tmpint[0]))))
Else - Actions
Set Title = (Title + (String(Tmpint[0])))
Set Title = (Title + |cffab2d5e:|cffab2d5e|cff23def1)
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
Tmpint[1] Less than 10
Then - Actions
Set Title = (Title + (0 + (String(Tmpint[1]))))
Else - Actions
Set Title = (Title + (String(Tmpint[1])))
Multiboard - Change the title of MB[(Integer A)] to Title

Eigentlich ist zu diesem Trigger recht wenig zu sagen. Es werden wie gewohnt die Sekunden geprüft, dass geguckt, ob man die Minuten oder die Stunden erhöhen muss. Dann kommt etwas neues: Es wird eine If-Then-Else-Aktion erstellt, die prügt, ob ein Boolean (Dead) true oder false ist. Is dieser false, so wir das gemacht, was auch schon früher gemacht wurde; ist er jedoch auf true, so wird der Titel ein anderer. Tmpint[0] wird auf die Minutenanzahl gesetzt, die der Spieler noch warten muss, bis sein Held wiederbelebt wird; Tmpint[1] wir auf die Sekunden gesetzt, die der Spieler noch warten muss. Dies wird aus dem Integer-Array Revivetime entnommen, der jede Sekunde um eins heruntergezählt wird, und falls er 0 ist, der Held revived wird. Ansonsten nur der übliche Schnack wie zu überprüfen, dass beide Zahlenstring über 10 sind, und wenn nicht, dass eine 0 hinzugefügt wird.

Nur so viele Reihen wie Spieler

Nun widmen wir uns einem Kapitel, dass vor allem für Anfänger recht schwer ist: das MB soll nur so viele Reihen wie Spieler (+ extra Reihen) haben. Dies ist mit der passenden Technik kein Problem. Zu erläuterung, ein kleines Beispiel:

Spieler Spielt? Zähltvariable
Spieler 1 [ ] 1
Spieler 2 [x] 2
Spieler 3 [x] 3
Spieler 4 [ ] 3
Spieler 5 [ ] 3
Spieler 6 [x] 4
Spieler 7 [x] 5
Spieler 8 [ ] 6
Spieler 9 [x] 7
Spieler 10 [ ] 7
Spieler 11 [x] 8
Spieler 12 [ ] 8

Zähltvariable ist zu anfangs 1, da die erste Reihe für den Spieler erst Reihe 2 ist

So einfach kriegen wir die passende Reihe für jeden Spieler. Nun brauchen wir nurnoch einen Weg, diese Zahl für den jeweiligen Spieler zu speichern. Man könnte dies über einen Integer-Array lösen, jedoch haben wir ja noch einen Cache, und warum nicht den benutzen!

Game Cache - Store CountPlayer as Multiboard of (Player - + (String((Integer A)))) in Multiboardcache

Man beachte hier wieder den Präfix "Player - ", damit es zu keinen Konflikten kommt. Zudem speicher ich den Wert unter der Spielernummer (oder bzw. Integer A). Dies erlaubt den Spieler wärend des Spiels die Namen zu ändern, ohne das es zu Problemen kommt. Das ganze sieht in einer Schleife so aus:

For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Wait 0.00 seconds
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
--> ((Player((Integer A))) controller) Equal to User
--> ((Player((Integer A))) slot status) Equal to Is playing
Then - Actions
--> Set CountPlayer = (CountPlayer + 1)
--> Game Cache - Store CountPlayer as Multiboard of (Player - + (String((Integer A)))) in Multiboardcache
For each (Integer B) from 1 to 12, do (Actions)
Loop - Actions
Multiboard - Set the display style for MB[(Integer B)] item in column 1, row CountPlayer to Hide text and Show icons
Multiboard - Set the text for MB[(Integer B)] item in column 2, row CountPlayer to (Playercolor[(Integer A)] + ((Name of (Player((Integer A)))) + |r))
Multiboard - Set the text for MB[(Integer B)] item in column 3, row CountPlayer to 0
Multiboard - Set the text for MB[(Integer B)] item in column 4, row CountPlayer to 0
Else - Actions
Do nothing
Multiboard - Minimize MB[(Integer A)]
Multiboard - Maximize MB[(Integer A)]
Custom script: call ShowMultiboardForPlayer(Player(bj_forLoopAIndex-1), udg_MB[bj_forLoopAIndex])

Die Pfeile zeigen die neuen Aktionen

Wollen wir nun z.B. die Kills erhöhen, so kriegen wir die passende Reihe, indem wir den Wert aus dem Cache mit der Katerogie

       (Player -  + String(Playernumber of Owner of (Killing Unit)))
       

Natürlich darf das MB jetzt auch nur "Anzahl der Spieler + Extra Reihen" Besitzen. Aber das ist ja kein Problem:

Set Tmpint[2] = ((Number of players in (All players matching ((((Matching player) controller) Equal to User) and (((Matching player) slot status) Equal to Is playing)))) + 1)

und

Multiboard - Create a multiboard with 4 columns and Tmpint[2] rows, titled |cffab2d5e00|cff23d...

Der ganze Inittrigger sieht nun so aus:

Multiboard Init
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
Set Tmpint[2] = ((Number of players in (All players matching ((((Matching player) controller) Equal to User) and (((Matching player) slot status) Equal to Is playing)))) + 1)
Set CountPlayer = 1
-------- *** Erstellen des Multiboards *** --------
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Multiboard - Create a multiboard with 4 columns and Tmpint[2] rows, titled |cffab2d5e00|cff23d...
Set MB[(Integer A)] = (Last created multiboard)
Multiboard - Set the display style for MB[(Integer A)] item in column 0, row 0 to Show text and Hide icons
Multiboard - Set the text for MB[(Integer A)] item in column 2, row 1 to |cff6785a7Name
Multiboard - Set the text for MB[(Integer A)] item in column 3, row 1 to |cff6785a7Kills
Multiboard - Set the text for MB[(Integer A)] item in column 4, row 1 to |cff6785a7Herokills
Multiboard - Set the width for MB[(Integer A)] item in column 1, row 0 to 2.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 2, row 0 to 8.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 3, row 0 to 3.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 4, row 0 to 4.00% of the total screen width
-------- *** Definieren der Farben *** --------
Set Playercolor[1] = |cffff0303
Set Playercolor[2] = |cff0042ff
Set Playercolor[3] = |cff1ce6b9
Set Playercolor[4] = |cff540081
Set Playercolor[5] = |cfffffc01
Set Playercolor[6] = |cfffe8a0e
Set Playercolor[7] = |cff20c000
Set Playercolor[8] = |cffe55bb0
Set Playercolor[9] = |cff959697
Set Playercolor[10] = |cff7ebff1
Set Playercolor[11] = |cff106246
Set Playercolor[12] = |cff4e2a04
-------- *** Erstellen des Cache *** --------
Game Cache - Create a game cache from blablabla
Set Multiboardcache = (Last created game cache)
-------- *** Einrichten der Icons *** --------
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp as Multiboard of (Icons - + (String(Paladin))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroArchMage.blp as Multiboard of (Icons - + (String(Erzmagier))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroMountainKing.blp as Multiboard of (Icons - + (String(Bergkönig))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroBloodElfPrince.blp as Multiboard of (Icons - + (String(Blutmagier))) in Multiboardcache
-------- ***Anpassen der Reihen*** --------
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Wait 0.00 seconds
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Player((Integer A))) controller) Equal to User
((Player((Integer A))) slot status) Equal to Is playing
Then - Actions
Set CountPlayer = (CountPlayer + 1)
Game Cache - Store CountPlayer as Multiboard of (Player - + (String((Integer A)))) in Multiboardcache
For each (Integer B) from 1 to 12, do (Actions)
Loop - Actions
Multiboard - Set the display style for MB[(Integer B)] item in column 1, row CountPlayer to Hide text and Show icons
Multiboard - Set the text for MB[(Integer B)] item in column 2, row CountPlayer to (Playercolor[(Integer A)] + ((Name of (Player((Integer A)))) + |r))
Multiboard - Set the text for MB[(Integer B)] item in column 3, row CountPlayer to 0
Multiboard - Set the text for MB[(Integer B)] item in column 4, row CountPlayer to 0
Else - Actions
Do nothing
Multiboard - Minimize MB[(Integer A)]
Multiboard - Maximize MB[(Integer A)]
Custom script: call ShowMultiboardForPlayer(Player(bj_forLoopAIndex-1), udg_MB[bj_forLoopAIndex])
Trigger - Turn on Multiboard Update <gen>

Extras

Führender Spieler

Ersteinmal erstellen wir eine neue Variable names "Leader". Zudem brauchen wir noch ein neues Customscript, dass uns den Spieler mit den meisten Punkten gibt (Als Jass-Script, da es dadrin viel einfacher ist).

function GetLeader takes nothing returns integer  
     local integer i = 1  
     local integer array p  
     local integer r =  - 1  
     local integer a = 15  
     loop  
          exitwhen i > 12  
          set p[ i ] = udg_Kills[ i ] + udg_Herokills[ i ] * 10  
          set i      = i + 1  
     endloop  
     set i = 1  
     loop  
          exitwhen i > 12  
          if p[ i ] > r then  
               set r = p[ i ]  
               set a = i  
          endif  
          set i = i + 1  
     endloop  
     return a - 1  
endfunction  

Wie man sieht, werden hier die Herokills * 10 gerechnet, da ich finde, dass Herokills mehr zählen als normale; wer das nicht möchte, ändert den Wert einfach in der Funktion und im Kill Trigger. Da wir nun natürlich auch eine (bzw 2, da ich noch ne "Grenzlinie" gezogen habe) müssen wir den Init trigger verändern.

Multiboard Init
Events
Time - Elapsed game time is 0.00 seconds
Conditions
Actions
Custom script: set bj_wantDestroyGroup=true
Set Tmpint[2] = ((Number of players in (All players matching ((((Matching player) controller) Equal to User) and (((Matching player) slot status) Equal to Is playing)))) + 1)
Set Tmpint[2] = (Tmpint[2] + 2)
Set CountPlayer = 1
-------- *** Erstellen des Multiboards *** --------
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Multiboard - Create a multiboard with 4 columns and Tmpint[2] rows, titled |cffab2d5e00|cff23d...
Set MB[(Integer A)] = (Last created multiboard)
Multiboard - Set the display style for MB[(Integer A)] item in column 0, row 0 to Show text and Hide icons
Multiboard - Set the text for MB[(Integer A)] item in column 2, row 1 to |cff6785a7Name
Multiboard - Set the text for MB[(Integer A)] item in column 3, row 1 to |cff6785a7Kills
Multiboard - Set the text for MB[(Integer A)] item in column 4, row 1 to |cff6785a7Herokills
Multiboard - Set the width for MB[(Integer A)] item in column 1, row 0 to 2.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 2, row 0 to 8.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 3, row 0 to 3.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 4, row 0 to 4.00% of the total screen width
-------- *** Definieren der Farben *** --------
Set Playercolor[1] = |cffff0303
Set Playercolor[2] = |cff0042ff
Set Playercolor[3] = |cff1ce6b9
Set Playercolor[4] = |cff540081
Set Playercolor[5] = |cfffffc01
Set Playercolor[6] = |cfffe8a0e
Set Playercolor[7] = |cff20c000
Set Playercolor[8] = |cffe55bb0
Set Playercolor[9] = |cff959697
Set Playercolor[10] = |cff7ebff1
Set Playercolor[11] = |cff106246
Set Playercolor[12] = |cff4e2a04
-------- *** Erstellen des Cache *** --------
Game Cache - Create a game cache from blablabla
Set Multiboardcache = (Last created game cache)
-------- *** Einrichten der Icons *** --------
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroPaladin.blp as Multiboard of (Icons - + (String(Paladin))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroArchMage.blp as Multiboard of (Icons - + (String(Erzmagier))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroMountainKing.blp as Multiboard of (Icons - + (String(Bergkönig))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroBloodElfPrince.blp as Multiboard of (Icons - + (String(Blutmagier))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroBladeMaster.blp as Multiboard of (Icons - + (String(Klingenmeister))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroFarSeer.blp as Multiboard of (Icons - + (String(Scharfseher))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroTaurenChiefTain.blp as Multiboard of (Icons - + (String(Tauren-Häuptling))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNShadowHunter.blp as Multiboard of (Icons - + (String(Schattenjäger))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroDeathKnight.blp as Multiboard of (Icons - + (String(Todesritter))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroLich.blp as Multiboard of (Icons - + (String(Lich))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroDreadLord.blp as Multiboard of (Icons - + (String(Schreckenslord))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroCryptLord.blp as Multiboard of (Icons - + (String(Gruftlord))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNKeeperOfTheGrove.blp as Multiboard of (Icons - + (String(Hüter des Hains))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNPriestessOfTheMoon.blp as Multiboard of (Icons - + (String(Mond-Priesterin))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroDemonHunter.blp as Multiboard of (Icons - + (String(Dämonenjäger))) in Multiboardcache
Game Cache - Store ReplaceableTextures\CommandButtons\BTNHeroWarden.blp as Multiboard of (Icons - + (String(Wächterin))) in Multiboardcache
-------- ***Anpassen der Reihen*** --------
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Wait 0.00 seconds
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Player((Integer A))) controller) Equal to User
((Player((Integer A))) slot status) Equal to Is playing
Then - Actions
Set CountPlayer = (CountPlayer + 1)
Game Cache - Store CountPlayer as Multiboard of (Player - + (String((Integer A)))) in Multiboardcache
For each (Integer B) from 1 to 12, do (Actions)
Loop - Actions
Multiboard - Set the display style for MB[(Integer B)] item in column 1, row CountPlayer to Hide text and Show icons
Multiboard - Set the text for MB[(Integer B)] item in column 2, row CountPlayer to (Playercolor[(Integer A)] + ((Name of (Player((Integer A)))) + |r))
Multiboard - Set the text for MB[(Integer B)] item in column 3, row CountPlayer to 0
Multiboard - Set the text for MB[(Integer B)] item in column 4, row CountPlayer to 0
Else - Actions
Do nothing
-------- ***Grenze*** --------
Multiboard - Set the width for MB[(Integer A)] item in column 1, row (Tmpint[2] - 1) to 17.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 2, row (Tmpint[2] - 1) to 0.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 3, row (Tmpint[2] - 1) to 0.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 4, row (Tmpint[2] - 1) to 0.00% of the total screen width
Multiboard - Set the text for MB[(Integer A)] item in column 1, row (Tmpint[2] - 1) to |cff777777#########...
-------- ***Bester Spieler*** --------
Multiboard - Set the width for MB[(Integer A)] item in column 1, row Tmpint[2] to 8.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 2, row Tmpint[2] to 10.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 3, row Tmpint[2] to 0.00% of the total screen width
Multiboard - Set the width for MB[(Integer A)] item in column 4, row Tmpint[2] to 0.00% of the total screen width
Multiboard - Set the text for MB[(Integer A)] item in column 1, row Tmpint[2] to |cff3b4a9aBester Sp...
-------- ***Einklappen und Ausklappen*** --------
Multiboard - Minimize MB[(Integer A)]
Multiboard - Maximize MB[(Integer A)]
Custom script: call ShowMultiboardForPlayer(Player(bj_forLoopAIndex-1), udg_MB[bj_forLoopAIndex])
Trigger - Turn on Multiboard Update <gen>

Ausserdem brauchen wir noch einen veränderten Kill Trigger

Multiboard Kills
Events
Unit - A unit Dies
Conditions
(Killing unit) Not equal to No unit
(Player number of (Owner of (Killing unit))) Less than 13
((Triggering unit) belongs to an enemy of (Owner of (Killing unit))) Equal to True
Actions
Set Tmpint[2] = (Number of rows in MB[1])
Set Tmpint[3] = (Load Multiboard of (Player - + (String((Player number of (Owner of (Killing unit)))))) from (Last created game cache))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Triggering unit) is A Hero) Equal to True
Then - Actions
Set Herokills[(Player number of (Owner of (Killing unit)))] = (Herokills[(Player number of (Owner of (Killing unit)))] + 1)
Else - Actions
Set Kills[(Player number of (Owner of (Killing unit)))] = (Kills[(Player number of (Owner of (Killing unit)))] + 1)
Custom script: set udg_Leader=Player(GetLeader())
For each (Integer A) from 1 to 12, do (Actions)
Loop - Actions
Multiboard - Set the text for MB[(Integer A)] item in column 2, row Tmpint[2] to ((Playercolor[(Player number of Leader)] + (Name of Leader)) + (( ( + (String((Kills[(Player number of Leader)] + (Herokills[(Player number of Leader)] x 10))))) + )))
If (All Conditions are True) then do (Then Actions) else do (Else Actions)
If - Conditions
((Triggering unit) is A Hero) Equal to True
Then - Actions
Multiboard - Set the text for MB[(Integer A)] item in column 4, row Tmpint[3] to (String(Herokills[(Player number of (Owner of (Killing unit)))]))
Else - Actions
Multiboard - Set the text for MB[(Integer A)] item in column 3, row Tmpint[3] to (String(Kills[(Player number of (Owner of (Killing unit)))]))

Wir setzen einfach Tmpint[2] auf die Anzahl der Reihen eines MB's (das geht, da wir den besten Spieler ja in der letzten Reihe anzeigen wollen).

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