Zum Inhalt springen

Turnierdaten

Das ist die Referenz für alles, worauf ein Skript zeigen kann. Der Skript-Explorer { } in jedem Skript-Editor zeigt dieselbe Liste mit dem aktuellen Wert daneben, was meistens schneller geht, als diese Seite zu lesen. Diese Seite hat dafür das ganze Bild an einer Stelle.

Alle Werte sind schreibgeschützt. Ein Skript darf sich das Turnier ansehen, verändern kann es das Turnier nicht.

WertBeschreibung
isTimerRunningLäuft der Timer?
isTimerPausedIst der Timer pausiert?
levelIndexDie Position des aktuellen Levels in der Liste — Pausen zählen mit, eine Pause zwischen Level 4 und Level 5 macht Letzteres also zu Index 5
secondsLeftInLevelVerbleibende Sekunden im aktuellen Level
secondsUntilNextBreakSekunden bis zur nächsten Pause, oder 0, wenn keine geplant ist
rebuysOpenLäuft die Rebuy-Phase noch? Immer wahr, wenn kein Endlevel gesetzt ist
secondsUntilRebuysEndSekunden bis sie schließt, oder 0, wenn sie geschlossen oder nie begrenzt war
currentLevelDas aktuelle Level
nextLevelDas nächste Level, oder nichts, wenn dies das letzte ist
levelsJedes Level der Struktur
blindLevelNumberDas aktuelle Blind-Level, ohne Pausen zu zählen. 0 vor dem ersten; während einer Pause das gerade beendete Level
blindLevelCountWie viele Blind-Level es gibt, Pausen nicht mitgezählt
isBlindsLevelIst das aktuelle Level ein Blind-Level?
isBreakLevelIst das aktuelle Level eine Pause nach dem ersten Blind-Level?
isPregameLevelLiegt das aktuelle Level vor dem ersten Blind-Level?
dtDie aktuelle Zeit, in Millisekunden
WertBeschreibung
isPregameDas Turnier hat noch nicht begonnen
isInGameEs hat begonnen, ist aber noch nicht vorbei
isPostgameEs ist vorbei

isPregame bezieht sich auf das Turnier, isPregameLevel auf das Level, das du gerade ansiehst. Sie unterscheiden sich, wenn du den Timer mitten im Spiel auf ein früheres Level zurückscrollst.

WertBeschreibung
playersJeder Spieler
playersActiveSpieler, die noch dabei sind
playersEliminatedAusgeschiedene oder entfernte Spieler, in der Reihenfolge ihrer Platzierung
playersWithPayoutsSpieler, die im Geld gelandet sind
currentPlayerCountWie viele Spieler noch dabei sind
totalPlayerCountWie viele tatsächlich gespielt haben — eingekauft und gesetzt
expectedPlayerCountDer größere Wert aus Buy-in-Anzahl und deiner erwarteten Spielerzahl
tablesJeder offene oder besetzte Tisch
tablesOutOfBalanceThresholdAb welcher Sitzplatzdifferenz Tische als unausgeglichen gelten
WertBeschreibung
totalCollectedBuy-ins + Addons + Rebuys
netPrizetotalCollected plus die Auszahlungs-Korrektur
totalBuyIns, totalAddons, totalRebuysAnzahlen
totalBuyInsCollected, totalAddonsCollected, totalRebuysCollectedGeld aus jedem davon
totalBuyInChips, totalAddonChips, totalRebuyChipsChips aus jedem davon
totalChipsInPlayBuy-in-, Addon- und Rebuy-Chips
expectedChipsInPlayHochgerechnete Gesamtzahl, bezogen auf die erwarteten Spieler
averageChipsPerPlayerChips im Spiel geteilt durch die verbliebenen Spieler
activeBigBlindDer aktuelle Big Blind, oder der nächste, wenn dieses Level keinen hat
estimatedLastBigBlindWo die Blinds voraussichtlich enden
estimatedSecondsUntilEndVoraussichtliche Restzeit, oder nichts, wenn sie sich nicht schätzen lässt

Wenn die Blinds steigen, werden Stückelungen überflüssig. Zwei Werte verfolgen das:

WertBeschreibung
colorUpChipsDie Chips, die seit der letzten Pause entbehrlich geworden sind — von hier an braucht sie kein Blind, kein Ante und kein Bring-in mehr. Kleinste zuerst, leer, wenn es keine gibt
colorUpTargetDer kleinste noch benötigte Chip, in den die anderen getauscht werden

Jeder Eintrag ist ein Chip, lies also value daraus. Darauf baut das Widget Chips tauschen! auf:

{{ colorUpChips.map(func(c) { c.value.toString + "s" }).join(" ") }}

Den Wert eines Chips mit einem s dahinter zu schreiben, ist das, was ihn als Chip statt als Text zeichnet, siehe Chips in deinem Text.

WertBeschreibung
payoutsDie Auszahlungsbeträge, größter zuerst
payoutsToShowWie viele Plätze anzuzeigen sind — die Zahl schrumpft, sobald Plätze namentlich belegt sind
playersWithPayoutsSpieler, die im Geld gelandet sind
eliminationsUntilBubbleBurstWie viele Knockouts noch bis ins Geld fehlen
chopsAlle vereinbarten Chops
payoutCount, payoutPercentages, payoutRoundTo, payoutAdjustmentDie eingestellten Werte
WertBeschreibung
hasHighHandWurde eine beste Hand erfasst?
highHandDie Hand, als Zahl, die du mit pokerHandToCards entschlüsselst
highHandPlayerDer Spieler, der sie hatte

Das Entschlüsseln geht in zwei Schritten: erst die Zahl in Karten verwandeln, dann die Karten nach dem fragen, was du willst.

Angewandt aufEigenschaftErgebnis
highHandpokerHandToCardsDie fünf Karten
die KartenpokerCardsToHandNameFull House
die KartenpokerCardsToTextA♠ A♥ A♦ K♠ K♥
die KartenpokerCardsToValueEine Zahl, zum Vergleichen von Händen
{{ cards = highHand.pokerHandToCards; highHandPlayer.shortName + " — " + cards.pokerCardsToHandName + " " + cards.pokerCardsToText }}

Die Namen der Hände, die pokerCardsToHandName liefert, sind englisch, also Full House, Two Pair, Straight.

Gespeist aus den Chipständen, die die Spieler selbst melden, siehe Spielerprofil-Updates.

WertBeschreibung
chipLeadersDie aktiven Spieler mit erfasstem Chipstand, meiste Chips zuerst — bei Gleichstand nach Spielername, leer, wenn es keine gibt

Jeder Eintrag ist ein Spieler, lies also currentChips und shortName daraus. Prüfen kannst du das mit chipLeaders.isNotEmpty. Für die Top drei:

{{ chipLeaders.take(3).map(func(p) { p.shortName + " — " + p.currentChips.round.toCompactDecimalString }).join("\n") }}

Auch alles vom Bildschirm Turnier einrichten lässt sich lesen. Das Nützlichste:

WertBeschreibung
titleDer Name des Turniers
startingChipsStartstapel
buyInCost, addonCost, rebuyCostDie eingestellten Kosten
addonsAllowed, rebuysAllowedOb das jeweils erlaubt ist
rebuyEndLevelDas Blind-Level, bis zu dem Rebuys laufen, oder 0 für keine Grenze
useBountyChips, bountyChipCostKopfgeld-Einstellungen
anteType0 keins, 1 Standard, 2 Big-Blind-Ante
initialBigBlind, blindGrowthRateEingaben für die Blind-Struktur
levelMinutes, breakMinutes, levelsPerBreak, pregameMinutesZeiten
pauseAfterLevel, pauseAfterBreakAutomatische Pausen
defaultSeatsPerTable, minPlayersForConsolidationTisch-Einstellungen
chipsDas Chip-Set
logDas Protokoll des Turniers
EigenschaftBeschreibung
name, shortName, initialsWie der Spieler angezeigt wird
idDie Nummer des Spielers
isActiveNoch im Turnier?
tableId, seatWo er sitzt, falls er sitzt
place, placeCountPlatzierung, und wie viele sie sich teilen
payoutSein Gewinn, oder 0
pointsSeine Punkte nach der Punkteformel des Turniers, oder 0, solange er keine Platzierung hat
totalWinningsGewinn plus Kopfgeld-Gewinne, inklusive eines noch gehaltenen Kopfgeld-Chips
currentChipsZuletzt gemeldeter Stapel, oder 0
currentChipsDtWann er gemeldet wurde
totalChipsChips aus Buy-in, Addons und Rebuys
totalPaidEingezahltes Geld
totalEliminatedAusgeschaltete Spieler — ein Bruchteil, wenn ein Pot geteilt wurde
timesEliminatedWie oft er selbst ausgeschieden ist, für Turniere mit Wiedereinstieg
hasBountyChip, bountyChipValueSein Kopfgeld-Chip, falls vorhanden
bountyChipsWon, bountyChipWinnings, totalBountyPaidKopfgeld-Summen
msActive, msSeatedZeit im Turnier und am Tisch, ohne Pausen und Unterbrechungen
EigenschaftBeschreibung
name, colorOptionale Beschriftung und Farbe
seatsWie viele Plätze
isOpenNimmt Spieler auf?
closeOrder0 zuerst, 1 beliebig, 2 zuletzt
playersDie hier sitzenden Spieler, in Sitzplatzreihenfolge
EigenschaftBeschreibung
title, subtitleDie Beschriftungen des Levels
smallBlind, bigBlind, anteBlinds für dieses Level
minutesSeine Länge
isBreakLevel, isBlindLevel, isPregameLevelUm welche Art Level es sich handelt
pauseAfterTimer anhalten, wenn es endet?

place, totalPayout, type, players, stacks, percents, payouts.

value, count, image, svgId, dazu alle Parameter, die die Grafik des Chips definiert.

log.entries sind alle Einträge des Turnier-Protokolls, ältester zuerst. Jeder Eintrag hat:

EigenschaftBeschreibung
type"buyIn", "knockout", "seating", "blindsChanged" und so weiter — oder dein eigener Name bei einem benutzerdefinierten Eintrag
dtWann es passiert ist, in Millisekunden
status"enabled", wenn der Eintrag zählt
createdByWer ihn erfasst hat

Über diese vier hinaus hängen die Eigenschaften vom Typ ab: cost, chips und players bei einem Buy-in; players und byPlayers bei einem Knockout; table und seats bei einem Sitzplatz-Eintrag; bigBlind, smallBlind, ante und level bei einem Blind-Wechsel. Ein benutzerdefinierter Protokolleintrag bietet pro Feld, das du definiert hast, eine Eigenschaft an, benannt nach der Beschriftung des Feldes.

players und byPlayers enthalten Spielernummern, keine Spieler. Mit den Helfern unten machst du etwas Brauchbares daraus.

Die Werte in type und status sind feste englische Kennungen und bleiben es in jeder Sprache. Vergleiche also immer gegen "knockout" und "enabled", nie gegen die deutsche Beschriftung, die du im Protokoll siehst.

MethodeErgebnis
.toPlayer()Der Spieler mit dieser Nummer
.toPlayerName()Sein voller Name
.toPlayerShortName()Sein Kurzname
.toPlayerInitials()Seine Initialen
.toTable()Der Tisch mit dieser Nummer
{{ e = log.entries.last; e.players.map(func(p) { p.toPlayerName() }).join(", ", ", and ") }}

Warnbedingungen und TTS-Text bekommen ein paar Extras, und genau die sorgen dafür, dass eine Warnung einmal auslöst statt jede Sekunde:

WertBeschreibung
becameTrue(x)Ist die Bedingung jetzt wahr und war es vor einer Sekunde nicht?
changed(x)Ist der Wert anders als vor einer Sekunde?
was(x)Was ein beliebiger Turnierwert vor einer Sekunde war — was(levelIndex), was(secondsLeftInLevel) und so weiter
handTimerDer Hand-Timer: isRunning, seconds, defaultSeconds
previousHandTimerDer Hand-Timer vor einer Sekunde
previousDas ganze Turnier so, wie es vor einer Sekunde war. Die drei Funktionen darüber ersetzen das; Bedingungen mit previous funktionieren weiterhin

Warum die wichtig sind, steht unter Warnungen.

Die Punkteformel wird einmal pro Spieler ausgewertet und bekommt playerId, die Nummer dieses Spielers. Mit playerId.toPlayer() machst du einen Spieler daraus.

Ein Auszahlungsskript läuft, bevor es Auszahlungen gibt, und darf deshalb bewusst weder payouts noch playersWithPayouts sehen. Sie zu verwenden ist ein Fehler und keine stille Null. Stattdessen bekommt es einen enger gefassten Satz:

netPrize, totalCollected, totalBuyIns, totalAddons, totalRebuys, totalPlayerCount, currentPlayerCount, expectedPlayerCount, payoutCount, payoutRoundTo, buyInCost, addonCost, rebuyCost

dazu eine eigene Funktion:

FunktionErgebnis
defaultPayoutPercentages(count)Die Standardaufteilung der App für so viele Plätze — defaultPayoutPercentages(3) ergibt [0.5, 0.3, 0.2]