Zum Inhalt springen

Skripte im Überblick

An mehreren Stellen kannst du in Poker Club HQ ein kleines Stück Code schreiben, statt aus einer festen Liste zu wählen. So kann eine Auszahlungsstruktur mehr Plätze bekommen, wenn das Feld wächst, eine Warnung genau im richtigen Moment auslösen, und der Timer-Bildschirm die eigene Punktewertung deiner Liga anzeigen.

Die Sprache heißt EZScript. Sie ist bewusst klein gehalten, näher an einer Tabellenkalkulations-Formel als an einer Programmiersprache, und sie läuft in einer Sandbox: Ein Skript darf dein Turnier lesen, aber es kann es nicht verändern, nicht ins Netz greifen und die App nicht ausbremsen.

Du musst sie nicht lernen, um die App zu nutzen. Jede Voreinstellung funktioniert sofort, und die eingebauten Beispiele sind zum Kopieren da.

Es gibt sieben Stellen, in zwei Ausprägungen.

Wo du es findestWas du schreibstErgebnis muss sein
InhaltWertVorlageText
InhaltBedingungAusdruckWahr oder falsch
Layout & Inhalt → Zeile oder Spalte → BedingungAusdruckWahr oder falsch
WarnungenBedingungAusdruckWahr oder falsch
WarnungenTTS-textVorlageZu sprechender Text
AuszahlungenSkriptSkriptEine Liste von Beträgen
StatistikenSpielerpunktformelSkriptEine Zahl

Ein Ausdruck ist eine einzelne Frage mit einer Ja-oder-Nein-Antwort. Du schreibst ihn blank, ohne Klammern:

totalChipsInPlay > 0
currentLevel.ante > 0 && currentLevel.bigBlind == 0

Bedingungen entscheiden nur darüber, ob etwas erscheint oder auslöst. Sonst nichts.

Eine Vorlage ist ganz normaler Text mit Ausdrücken in doppelten geschweiften Klammern. Was außerhalb der Klammern steht, wird genau so verwendet, wie du es schreibst; jedes {{ … }} wird durch sein Ergebnis ersetzt:

Chips im Spiel {{ totalChipsInPlay }}
Level {{ blindLevelNumber }} von {{ blindLevelCount }}
Das Turnier beginnt in etwa {{ round(secondsLeftInLevel/60) }} Minuten.

Eine Vorlage darf beliebig viele Klammernpaare enthalten, oder auch gar keines.

Die Editoren für Auszahlungen und Punkte nehmen ein Skript entgegen, also mehrere Zeilen, die in einem Ergebnis enden. Zwischenwerte bekommen unterwegs Namen, und die letzte Zeile ist das, was zählt:

places = 1 + totalBuyIns / 5
defaultPayoutPercentages(places).map(func(p) { p * netPrize })

Alle sieben Felder teilen sich einen Editor, du musst ihn also nur einmal kennenlernen.

  • Syntax-Hervorhebung färbt Namen, Zahlen, Zeichenketten und Schlüsselwörter ein, wodurch ein nicht geschlossenes Anführungszeichen oder eine offene Klammer sofort auffällt.
  • Autovervollständigung schlägt beim Tippen passende Werte vor, jeden mit einer Beschreibung. In Vorlagen-Feldern greift sie nur innerhalb von {{ }}, wo sie nützlich ist.
  • Live-Ergebnisse stehen unter dem Feld und aktualisieren sich beim Tippen: der fertige Text, die berechneten Auszahlungen, die Punkte deiner fünf Bestplatzierten. Das ist der schnellste Weg herauszufinden, ob ein Skript tut, was du meinst.
  • Fehler erscheinen rot, statt still zu scheitern, und benennen das Problem.
Der Inhalts-Editor beim Tippen, mit einer Autovervollständigungs-Liste, die abs, ceil, floor, round und toDouble mit je einer kurzen Beschreibung anbietet Derselbe Editor mit einem roten Fehler: Attempted to access missing element rounds on double

Das Symbol { } in der Symbolleiste öffnet den Script object explorer mit zwei Reitern:

  • Properties (Eigenschaften): alles zu diesem Turnier, worauf das aktuelle Feld zugreifen darf, jeweils mit Beschreibung und aktuellem Wert. Du kannst in Objekte hineingehen, in einen Spieler, ein Level, einen Tisch, um zu sehen, was darin steckt.
  • Global: die eingebauten Funktionen und Konstanten der Sprache selbst.

Durchsuchen kannst du die Liste über die Symbolleiste, und ein Tipp auf das Kopieren-Symbol neben einem Namen legt ihn in die Zwischenablage.

Er ist die beste Antwort auf „wie hieß dieser Wert noch mal?“, und er ist auf das Feld zugeschnitten, aus dem du ihn geöffnet hast. Der Explorer der Auszahlungen listet zum Beispiel keine Werte auf, die ein Auszahlungsskript gar nicht verwenden darf.

Der Script object explorer mit den Reitern Properties und Global, der Werte wie activeBigBlind, anteType und blindLevelCount mit ihren aktuellen Werten und Beschreibungen auflistet

Ein kaputtes Skript macht dir nie das Turnier kaputt. Was passiert, hängt davon ab, wo es steht:

WoWas passiert
Inhalt BedingungGilt als falsch, die Zelle wird ausgeblendet
Inhalt WertDas fehlschlagende {{ … }} wird leer; bleibt nichts übrig, zeichnet die Zelle gar nichts
Zeilen-/Spalten-BedingungGilt als falsch, der Block wird ausgeblendet
Warnungs-BedingungDie Warnung löst nicht aus
AuszahlungsskriptDie Auszahlungen fallen still auf die Prozentsätze zurück, und der Auszahlungen-Bildschirm zeigt einen Hinweis
SpielerpunktformelDieser Spieler bekommt 0 Punkte

Im Bearbeitungsmodus behält eine Zelle, die nichts liefert, trotzdem ihren Platz, mit gestreifter Beschriftungsleiste und einer Vorschau ihres Rohtexts. Eine still leer gebliebene Zelle ist also leicht zu finden. Um zu sehen, warum sie leer ist, öffnest du ihren Inhalt oder ihre Bedingung: Der Editor wertet beim Tippen aus und meldet den Fehler in Rot.

Skripte sind gedeckelt, damit ein Fehler den Timer nicht einfrieren kann:

  • Jedes Skript bekommt etwa 10 Millisekunden Laufzeit; Warnbedingungen, die jede Sekunde für jede Warnung geprüft werden, bekommen ein noch knapperes Budget.
  • Funktionen dürfen sich bis zu 500 Ebenen tief selbst aufrufen.

Ein Skript, das eine der beiden Grenzen überschreitet, bricht mit einem Fehler ab und gilt als fehlgeschlagen. In der Praxis müsstest du schon eine Endlosschleife schreiben, um dort anzukommen. Jedes eingebaute Skript der App ist in einem Bruchteil des Budgets fertig.

  • Sprachreferenz: die Syntax sowie die eingebauten Funktionen und Formatierer
  • Turnierdaten: jeder Wert, den du lesen kannst, und was in einem Spieler, Tisch, Level oder Protokolleintrag steckt
  • Beispiele: echte Skripte aus der App, erklärt