Multiboard
| Variablentyp: multiboard | |
|---|---|
| | |
| | |
| |
Ein Multiboard ist vereinfacht gesehen eine große Erweiterung der Bestenliste. Die Vorteile, die so ein Multiboard bietet, liegen klar auf der Hand:
- Es ist möglich, Icons mit in das Bord zu integrieren
- Man kann verschiedene Variablen einfügen
- Die Größe des Multiboards ist bestimmbar
- Das Multiboard kann parallel zu einer Bestenliste laufen
uvm.
Inhaltsverzeichnis |
Tutorial zum Erstellen eines Multiboards
Aufbau
Ein Standard-Multiboard, wie man es in vielen Maps findet, besteht meistens aus dem Spielernamen, der Anzahl der von ihm getöteten Einheiten und seine Zahl an Wiederbelebungen. Wir werden nun ein solches Multiboard für 4 Spieler einrichten.
Hierfür brauchen wir eine Variable vom Typ String und zwei Variablen vom Typ Integer.
Variablen festlegen
Zuerst müssen wir uns natürlich im Klarem darüber sein, was wir denn anzeigen lassen wollen. In diesem Beispiel werden wir, Spielernamen, Kills und Deaths des Helden anzeigen lassen. Das Ganze machen wir für 4 Spieler. Im folgendem Trigger speichere ich die Namen der Spieler in einer String-Variablen mit Array ab.
Variables
Ereignisse

Zeit - Elapsed game time is 0.05 seconds
Bedingungen
Aktionen

For each (Integer A) from 1 to 4, do (Actions)


Schleifen - Aktionen



If (All Conditions are True) then do (Then Actions) else do (Else Actions)




'IF'-Bedingungen





((Player((Integer A))) slot status) Gleich Spielt




'THEN'-Aktionen





Set SPlayerstring[(Integer A)] = (Name of (Player((Integer A))))




'ELSE'-Aktionen





Set SPlayerstring[(Integer A)] = |cffff0000Empty|rFür die Folgenden Auslöser werden noch folgende Variablen benötigt :
Größe festlegen und Multiboard füllen
Nun werden wir mit dem eigentlichem Multiboard beginnen. Rows sind die einzelnen Zeilen der Columns (Spalten). In diesem Fall erstellen wir ein Multiboard mit 3x5. In die ersten 3 Zeilen schreibe ich Name:, Kills: und Deaths:. Durch

Multiboard - Set the display style for (Last created multiboard) item in column 0, row 0 to Zeigen text and Verbergen iconsAls nächstes stellen wir noch die Breite ein, die das Multiboard auf dem Bildschirm einnhemen soll, diese Angaben sind prozentual. Unter dem nächsten Punkt weise ich den Zellen durch eine Schleife ihre verschiedenen Werte zu. Und als letztes maximieren wir das Multiboard noch und zeigen es den Spielern.
Multiboard
Ereignisse
Bedingungen
Aktionen

Multiboard - Create a multiboard with 3 columns and 5 rows, titled Multiboard

Multiboard - Set the display style for (Last created multiboard) item in column 0, row 0 to Zeigen text and Verbergen icons

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

Multiboard - Set the width for (Last created multiboard) item in column 2, row 0 to 4.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

-------- Text --------

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 Deaths:

-------- names;kills;deaths --------

For each (Integer A) from 1 to 4, do (Actions)


Schleifen - Aktionen



Multiboard - Set the text for (Last created multiboard) item in column 1, row ((Integer A) + 1) to SPlayerstring[(Integer A)]



Multiboard - Set the text for (Last created multiboard) item in column 2, row ((Integer A) + 1) to (String(kills[(Integer A)]))



Multiboard - Set the text for (Last created multiboard) item in column 3, row ((Integer A) + 1) to (String(Deaths[(Integer A)]))

-------- ----------- --------

Multiboard - Zeigen (Last created multiboard)

Multiboard - Maximieren (Last created multiboard)In einem separaten Trigger muss man nun noch die Integer-Variablen zählen lassen und jeweils am Ende etwas Vergleichbares hinzufügen.

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)))]))Das wars dann auch schon.
Anzeigen des Multiboards für einzelne Spieler
Leider kann der Welteditor Multiboards nur für alle Spieler gleichzeitig anzeigen, sofern man einen normalen Auslöser dazu verwendet. Allerdings gibt es für einen solchen Fall eine Lösung mit JASS, die ich nun genauer beschreiben werde.
Als erstes kopiert man folgenden JASS-Code in den Header der Map:
function MultiboardDisplayForPlayer takes integer playerid, multiboard mb, boolean flag returns nothing local player cplayer = ConvertedPlayer(playerid) if( cplayer == GetLocalPlayer() ) then call MultiboardDisplay( mb, flag ) endif endfunction
Vielen Dank an SantoRayo für diese Funktion
Aufrufen muss man das dann im GUI über eine Custom Script-Aktion, die zum Beispiel für Spieler eins wie folgt aussieht:

custom script: call MultiboardDisplayForPlayer( 1, udg_Multiboard, true )Dabei steht 1 für die Nummer des Spielers, udg_Multiboard für die Variable, die ihr für das Multiboard gewählt habt mit dem Präfix udg_ (nicht vergessen!) und true ist der Boolean-Wert, der angibt, ob es angezeigt oder verborgen werden soll.
Spielerfarben hinzufügen
Um die Spieler noch wie in vielen Maps in ihrer Farbe anzeigen zu lassen, benötigen wir zuerst einmal die jeweiligen Farbcodes. Diese Speichern wir dann in einem String-Array ab. Hierbei dürfen wir den Farbcode allerdings nicht mit |r schließen, da man ja sonst nichts einfärben kann, wenn man ihn gleich wieder schließt.

-------- Farbcodes --------


Set farbcode[1] = |cffff0303


Set farbcode[2] = |cff0042ff


Set farbcode[3] = |cff1ce69b


Set farbcode[4] = |cff540081


Set farbcode[5] = |cfffffc01


Set farbcode[6] = |cfffe8a0e


Set farbcode[7] = |cff20c000


Set farbcode[8] = |cffe55bb0Als nächstes ändern wir unseren Starttrigger wie folgt (hier bauen wir nun je nach Spielernummer den entsprechenden Farbcode ein):
Variables
Ereignisse

Zeit - Elapsed game time is 0.05 seconds
Bedingungen
Aktionen

For each (Integer A) from 1 to 4, do (Actions)


Schleifen - Aktionen



If (All Conditions are True) then do (Then Actions) else do (Else Actions)




'IF'-Bedingungen





((Player((Integer A))) slot status) Gleich Spielt




'THEN'-Aktionen





Set SPlayerstring[(Integer A)] = ((farbcode[(Interger A)]+(Name of (Player((Integer A)))) + |r)




'ELSE'-Aktionen





Set SPlayerstring[(Integer A)] = |cffff0000Empty|rUnd schon haben wir für alle spielenden Spieler ihren Namen in die Spielerfarben geändert.
