Multiboard – Mappedia

Multiboard

Aus Mappedia
Wechseln zu: Navigation, Suche


Variablentyp: multiboard
extends handle
Funktionen mit multiboard als Rückgabewert
Funktionen mit multiboard als Parameter

Ein Multiboard ist vereinfacht gesehen eine große Erweiterung der Bestenliste. Die Vorteile, die so ein Multiboard bietet, liegen klar auf der Hand:

  1. Es ist möglich, Icons mit in das Bord zu integrieren
  2. Man kann verschiedene Variablen einfügen
  3. Die Größe des Multiboards ist bestimmbar
  4. 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|r

Fü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 icons
wird dieser Style in jedem Feld dieses Multiboards so angewendet, denn 0 steht immer für alle Zeilen bzw. Spalten des Multiboards.

Als 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] = |cffe55bb0

Als 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|r

Und schon haben wir für alle spielenden Spieler ihren Namen in die Spielerfarben geändert.

siehe auch

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

Notice: Memcache::get() [memcache.get]: Server 85.13.160.44 (tcp 11212) failed with: Connection refused (111) in /www/htdocs/global/live/codecraft/classes/cache/cache.class.php on line 56