Ein einfaches Leaderboard

Geschrieben von LordValdis.

zum Anfang Ein einfaches Leaderboard

Hier werde ich euch zeigen, wie man ein einfaches Leaderboard erstellt, in dem die Unit Kills und Deaths der Spieler angezeigt werden.

Was wir benötigen: 3 Globale Variablen (2 mal ein Integer Array und ein Leaderboard), 2 Trigger und optional einen Unterordner für die bessere Übersicht. Zuerst erstellen wir den Unterordner (Rechtsklick in den Kasten unten links->New->New Folder). Dort packen wir dann die benötigten Variablen rein (New->New Variable und rechts bei Typ den richtigen Typ einstellen). Bei den Arrays muss man noch einen Hacken bei Array machen, außerdem ist darauf zu achten, dass die Größe richtig angegeben wird. In unserem Fall sollte die Größe mit der Anzahl der Spieler übereinstimmen. Ich nehme 5.

Von der Struktur sollte es es etwa so aussehen: (Icons falsch)

Scoreboard
    Kills = 0 <Integer[5]>
    Deaths = 0 <Integer[5]>

    Leaderboard = No Leaderboard <Leaderboard>
    Init
    Add Kills

So nun geht es an die Trigger. Der erste initialisiert das Leaderboard:

 Init
      Events
          Game - Map initialization
      Local Variables
          Iterator = 0 <Integer>
      Conditions
      Actions
          Leaderboard - Create a leaderboard with 3 columns and 6 rows, with the name "My first Leaderboard", and using (100%, 100%, 100%) color.
          Variable - Set Leaderboard = (Last created leaderboard)
          Leaderboard - Set Leaderboard item text at column 1 and row 6 to "Player"
          Leaderboard - Set Leaderboard item text at column 2 and row 6 to "Kills"
          Leaderboard - Set Leaderboard item text at column 3 and row 6 to "Deaths"
          General - For each integer Iterator from 1 to 5 with increment 1, do (Actions)
              Actions
                  Leaderboard - Set Leaderboard item text at column 1 and row Iterator to (Text (Name of player Iterator) with color (Color((Current player Iterator color))))
                  Leaderboard - Set Leaderboard item text at column 2 and row Iterator to "0"
                  Leaderboard - Set Leaderboard item text at column 3 and row Iterator to "0"
          Leaderboard - Sort Leaderboard by column 2, in Descending order, with priority 1
          Leaderboard - Sort Leaderboard by column 3, in Ascending order, with priority 2
          Leaderboard - Sort Leaderboard by column 1, in Ascending order, with priority 3
          Leaderboard - Set Leaderboard item sort order at column 1 and row 6 to 1
          Leaderboard - Set Leaderboard item sort order at column 2 and row 6 to 1
          Leaderboard - Set Leaderboard item sort order at column 3 and row 6 to 1
          Leaderboard - Enable Sorted state for Leaderboard for (Active Players)

Game - Map initialization gibt an, dass der Trigger beim Laden der Map ausgeführt wird. Außerdem deklarieren wir noch eine lokale Integer Variable, die wir später für die For-Schleife brauchen. Die Leaderboard - Create Funktion sollte sich eigentlich selbst erklären. Danach wird das Leaderboard in die oben beschriebene Leaderboard Variable gespeichert. Die drei Set Leaderboard item text Funktionen für die Überschriften sind eigentlich auch selbsterklärend, sie werden erstmal in die letzte Zeile geschrieben, damit die Schleife später übersichtlicher ist. Nun benutzen wir eine For Schleife. Sie geht von 1 bis 5, weil sie für die 5 anderen Zeilen des Leaderboards zuständig ist. Die erste Zeile der Schleife sieht etwas verwirrend aus, deswegen hier noch der Subview (Die Icons sind noch falsch, das hängt mit dem Wiki zusammen):

 Set Leaderboard Item Text
      Board: Leaderboard
      Column: 1
      Row: Iterator
      Text: Text With Color
          Text: Name Of Player
              Player: Iterator
          Color: Convert Player Color To Color
              Player Color: Player Color
                  Option: Current
                  Player: Iterator

Im Prinzip kann man anstatt des Text With Color auch einfach nur den Namen des Spielers ohne Farbe nehmen, so sieht es aber schöner aus. Danach wird die Sortierung des Leaderboards eingestellt. Zuerst wird nach Kills, dann nach Deaths und schließlich nach Namen sortiert. Die 3 folgenden Zeilen sind dafür da, dass die Titel immer in die erste Zeile sortiert werden. Am Schluss wird noch eingestellt, dass das Leaderboard sortiert ist.

Nun folgt der zweite Trigger:

 Add Kills
      Events
          Unit - Any Unit dies
      Local Variables
          Killing Player = 0 <Integer>
          Killed Player = 0 <Integer>
      Conditions
      Actions
          Variable - Set Killing Player = ((Owner of (Killing unit)) - 1)
          Variable - Set Killed Player = ((Owner of (Triggering unit)) - 1)
          General - If (Conditions) then do (Actions) else do (Actions)
              If
                  Killed Player == Killing Player
              Then
                  Variable - Set Kills[Killing Player] = (Kills[Killing Player] - 1)
              Else
                  Variable - Set Kills[Killing Player] = (Kills[Killing Player] + 1)
          Variable - Set Deaths[Killed Player] = (Deaths[Killed Player] + 1)
          Leaderboard - Set Leaderboard item text at column 2 and row (Killing Player + 1) to (Text(Kills[Killing Player]))
          Leaderboard - Set Leaderboard item text at column 3 and row (Killed Player + 1) to (Text(Deaths[Killed Player]))

Hier haben wir gleich 2 lokale Integer Variablen. Diese werden zunächst auf die Spielernummern der Spieler gesetzt, jedoch um 1 verringert, da die Spieler zwar bei 1 anfangen, unsere Arrays für die Kills und Deaths aber bei 0. Die If Abfrage dient nur dazu festzustellen, ob der Spieler seine eigene Einheit getötet hat. Falls ja gibt es einen minus Kill falls nein einen Plus kill. Am Ende werden die neuen Werte noch in das Leaderboard eingetragen.

Falls ihr noch Fragen zum Tutorial habt, so benutzt bitte das Trigger-Forum. Feedback zum Tutorial könnt ihr in den zugehörigen Feedback Thread im Tutorial-Forum schreiben.

Mit freundlichen Grüßen
LordValdis

erstellt am 19.11.2010

Kommentare

Kommentar abgeben

Du solltest dich vor dem Kommentieren einloggen.



Grafischer Code zur Spamvermeidung


Adblock installiert? :(

Jeder Aufruf der Seite ohne Werbung kostet uns Geld.
Hilf uns, das Fortbestehen Deiner Seite zu sichern!

Falls du kein Adblock installiert hast, ignoriere diese Meldung! ;) Bei NoScript kann diese Meldung auch erscheinen. In dem Fall kostet der Aufruf uns auch Geld. Klicke auf "Alle Beschränkungen für diese Seite aufheben", um dies zu ändern. Vielen Dank!
Anzeige

Weiter zu ingame >>