Voraussetzungen
- Ikarus Script-Paket: Thread @ World of Gothic
- LeGo Script-Paket: Thread @ World of Gothic
- Spine Script-Paket: Download @ GitHub
- Tutorial 1 – Initialisierung
Einleitung
Dieses Tutorial befasst sich mit der Befüllung und Verwaltung von Highscores inklusive Rankings. Benötigt wird das Modul SPINE_MODULE_SCORES. Nützlich sind Scores für Modifikationen wie Elemental War, JiBo, Battle of the Kings, DoodleGoth, Sumpfkrautscavenger oder auch den GothicRacer.
Scores
Zuerst einmal sollte geklärt werden, was konkret unter Scores zu verstehen ist. Das lässt sich relativ einfach anhand einer Tabelle darstellen.
Rang | Username | Score |
1 | Diego | 1000 |
2 | Gorn | 900 |
2 | Lester | 900 |
4 | Milten | 800 |
Jeder Spieler bekommt in einem Score entsprechend seines Scores einen Rang oder auch eine Platzierung. Die Sortierung wird komplett von Spine übernommen. Als Nutzer des Scores-Modul muss man lediglich den Score setzen und kann sämtliche Werte abfragen.
Zusätzlich bietet Spine die Möglichkeit, mehrere solcher Ranking für eine Modifikation anzulegen. Diese werden über eine ID identifiziert. Eine ID kann z.B. für einen Spielmodus oder ein Level stehen. Sie ist eindeutig und sie beginnen bei 0.
Standardmäßig werden Scores absteigend sortiert. Das heißt, dass der höchste Score der Beste ist. Im Management-Dialog kannst du die Reihenfolge zu aufsteigend ändern. Das ist z.B. für Bestzeiten nützlich, wo überlicherweise gilt je niedriger desto besser.
Die Funktionen
Die verschiedenen Funktionen des Scores-Modul sollen hier kurz vorgestellt werden.
Spine_UpdateScore
Mit Spine_UpdateScore lässt sich der Score für den aktuellen Spine-Nutzer für eine gegebene ID erhöhen. Um einen Wert in die Tabelle aus dem Beispiel oben einzutragen, müsste man also folgenden Code ausführen:
Spine_UpdateScore(0, 1001);
Damit würde man auf Platz 1 des Highscores kommen.
Spine_GetUserScore
Mit Spine_GetUserScore lässt sich der Score für den aktuellen Spine-Nutzer für eine gegebene ID auslesen. Das bedeutet, dass man mit
Spine_GetUserScore(0);
den Wert 1001 bekommt, wenn man das Beispiel oben ausgeführt hat.
Spine_GetUserRank
Mit Spine_GetUserRank lässt sich die Platzierung für den aktuellen Spine-Nutzer für eine gegebene ID auslesen. Das bedeutet, dass man mit
Spine_GetUserRank(0);
den Wert 1 bekommt, wenn man das Beispiel oben ausgeführt hat.
Spine_GetScoreForRank
Mit Spine_GetScoreForRank lässt sich der Score für den Spieler auf dem angegebenen Platz für eine gegebene ID auslesen. Das bedeutet, dass man mit
Spine_GetScoreForRank(0, 1);
den Wert 1001 bekommt, wenn man das Beispiel oben ausgeführt hat. Für Platz 2 bekäme man 1000.
Wichtiger Hinweis: Haben zwei Spieler den gleichen Score, werden sie alphabetisch sortiert und werden über den Platz in der Tabelle identifiziert und nicht über den Rang. D.h. Gorn und Lester haben zwar beide Rang 3 im Beispiel, jedoch würde man mit Spine_GetScoreForRank(0, 3); den Score für Gorn, mit Spine_GetScoreForRank(0, 4); den von Lester bekommen. Das ist beim Score allerdings noch egal, wichtig ist es jedoch für den zugehörigen Username.
Spine_GetUsernameForRank
Mit Spine_GetUsernameForRank lässt sich der Name für den Spieler auf dem angegebenen Platz für eine gegebene ID auslesen. Das bedeutet, dass man mit
Spine_GetUsernameForRank(0, 1);
den Namen des aktuellen Spielers bekommt, wenn man das Beispiel oben ausgeführt hat. Für Platz 2 bekäme man Diego.
Wichtiger Hinweis: Haben zwei Spieler den gleichen Score, werden sie alphabetisch sortiert und werden über den Platz in der Tabelle identifiziert und nicht über den Rang. D.h. Gorn und Lester haben zwar beide Rang 2 im Beispiel, jedoch würde man mit Spine_GetUsernameForRank(0, 2); den Namen Gorn, mit Spine_GetUsernameForRank(0, 3); Lester bekommen.
Hinweis
Die Benutzung ist wie in den Beispielen gezeigt sehr einfach. Es gilt jedoch zu beachten, dass Scores immer überschrieben werden. Will man also immer nur höhere Scores eintragen, so muss man sich selbst um den Code dafür kümmern. Das ist jedoch ebenfalls sehr einfach, wie im folgenden Beispiel zu sehen ist:
var int newScore; newScore = 100;
if (newScore > Spine_GetUserScore(0)) {
Spine_UpdateScore(0, newScore);
};
Scores in Spine-Datenbank bekommen
Gut, so weit kannst du die Scores in den Scripts benutzen, aber beim Datenbankeintrag in Spine werden sich nicht angezeigt und auch neue setzen funktioniert nicht.
Um das zu ändern musst du folgendes tun:
- Starte Spine
- In der Menüleiste oben wähle „Entwickler“ => „Management“
- Wähle deine Modifikation auf der linken Seite aus
- Wähle in den „Scores“ Tab
- Gibt hier alle Informationen zu deinen Scores ein
- Wenn du alles eingegeben hast, schicke die Änderungen ab
Jetzt werden die Scores auf der Infoseite, in der Bibliothek und im Profil angezeigt und können vom Spiel aus gesetzt werden.
Schaue auch ins Tutorial Veröffentlichen auf Spine.