Zum Inhalt springen
  • Dunkel
  • Hell
  • System

!kd

!kd

Fortgeschritten

!record !winrate !wl

Session Win/Loss-Tracker für Competitive-FPS. Mods tracken W/L, der Bot rechnet Win-Rate plus Streak.

Steps
8
Cooldown
5s/User
Cooldown
0sglobal
Zugriff
Public

Ergänzt !rang um den heutigen Session-Score. Du und deine Mods tracken Sieg und Niederlage live mit !w und !l, der Bot zählt die Win-Streak mit und !kd postet Bilanz plus Win-Rate in den Chat. Drei Persisted Globals halten die Werte: sessionWins, sessionLosses und winStreak. Persisted bedeutet, sie überleben einen Streamer.bot-Neustart oder PC-Crash mitten in der Ranked-Session.

Erhöht die Siege und die laufende Streak um eins.

Global (Set): sessionWins +1

Core Globals Global (Set)

Erhöht den Sieg-Counter. Mode Increment addiert auf den bestehenden Wert.

Variable Name sessionWins
Mode Increment
Value 1
Persisted Persisted

Global (Set): winStreak +1

Core Globals Global (Set)

Streak läuft weiter. Ebenfalls Increment.

Variable Name winStreak
Mode Increment
Value 1
Persisted Persisted

Global (Get): sessionWins nach %wins%

Core Globals Global (Get)

Holt den frischen Wert für die Bestätigung. Increment liefert den neuen Stand nicht direkt als Argument, deshalb erst Get.

Variable Name sessionWins
Default Value 0
Variable Name (Destination) wins

Global (Get): sessionLosses nach %losses%

Core Globals Global (Get)
Variable Name sessionLosses
Default Value 0
Variable Name (Destination) losses

Send Message: Win bestätigen

Twitch Chat Send Message to Channel
Message ✅ Win! Aktuell %wins%-%losses%.
Send using bot account aktiv
AzaBot: ✅ Win! Aktuell %wins%-%losses%.
So sieht's im Chat aus

Erhöht die Niederlagen und bricht die Streak.

Global (Set): sessionLosses +1

Core Globals Global (Set)
Variable Name sessionLosses
Mode Increment
Value 1
Persisted Persisted

Global (Set): winStreak auf 0

Core Globals Global (Set)

Streak gebrochen. Mode Value (nicht Increment) setzt hart auf 0. Diesen Step vergisst man leicht, dann läuft die Streak trotz Loss weiter.

Variable Name winStreak
Mode Value
Value 0
Persisted Persisted

Global (Get): sessionWins nach %wins%

Core Globals Global (Get)
Variable Name sessionWins
Default Value 0
Variable Name (Destination) wins

Global (Get): sessionLosses nach %losses%

Core Globals Global (Get)
Variable Name sessionLosses
Default Value 0
Variable Name (Destination) losses

Send Message: Loss bestätigen

Twitch Chat Send Message to Channel
Message ❌ Loss. Aktuell %wins%-%losses%.
Send using bot account aktiv
AzaBot: ❌ Loss. Aktuell %wins%-%losses%.
So sieht's im Chat aus

Die Hauptaction. Liest alle drei Globals, fängt Divide-by-Zero ab und postet Bilanz plus Win-Rate plus Streak. Das ist der Command, den Viewer tippen, deshalb permissionLevel: everyone.

Global (Get): sessionWins nach %wins%

Core Globals Global (Get)

Default 0, falls die Session noch leer ist.

Variable Name sessionWins
Default Value 0
Variable Name (Destination) wins

Global (Get): sessionLosses nach %losses%

Core Globals Global (Get)
Variable Name sessionLosses
Default Value 0
Variable Name (Destination) losses

Global (Get): winStreak nach %streak%

Core Globals Global (Get)
Variable Name winStreak
Default Value 0
Variable Name (Destination) streak

If/Else: noch keine Spiele?

Core Logic If/Else

Prüft ob Wins plus Losses gleich 0 ist. Genau dann würde die Win-Rate durch 0 teilen. Then-Branch postet eine Sonderausgabe, Else-Branch rechnet.

Input $math(%wins% + %losses%)$
Operation Equals
Value 0
Then

Send Message: noch kein Spiel

Twitch Chat Send Message to Channel

Then-Branch. Keine Win-Rate möglich, deshalb eigener Text.

Message 📊 Noch kein Spiel in dieser Session. Los geht's!
Then

Break

Core Logic Break

Beendet die Action im Then-Branch. So läuft die Berechnung im Else-Branch nicht doch noch.

Else

Set Argument: winrate (Else-Branch)

Core Arguments Set Argument

Else-Branch. Wins durch Gesamtspiele mal 100, auf ganze Prozent gerundet. Alles in einem $math()$, weil Streamer.bot Arithmetik und round() innerhalb dieser einen Inline-Funktion auswertet. So steht im Chat 67 statt 66.6666.

Variable Name winrate
Value $math(round(%wins% / (%wins% + %losses%) * 100))$
Else

Send Message: Bilanz posten

Twitch Chat Send Message to Channel
Message 📊 %wins%S-%losses%N (%winrate%% WR), Streak: %streak%
Send using bot account aktiv
AzaBot: 📊 %wins%S-%losses%N (%winrate%% WR), Streak: %streak%
Bei 8 Siegen, 4 Niederlagen, Streak 3: 8S-4N (67% WR), Streak: 3

Setzt alle drei Globals zurück. Für den Start einer neuen Session.

Global (Set): sessionWins auf 0

Core Globals Global (Set)
Variable Name sessionWins
Mode Value
Value 0
Persisted Persisted

Global (Set): sessionLosses auf 0

Core Globals Global (Set)
Variable Name sessionLosses
Mode Value
Value 0
Persisted Persisted

Global (Set): winStreak auf 0

Core Globals Global (Set)
Variable Name winStreak
Mode Value
Value 0
Persisted Persisted

Send Message: Bestätigung

Twitch Chat Send Message to Channel
Message 🔄 Session-Score zurückgesetzt.

Die anderen drei Actions sind reine Counter-Steps. Hier der spannende Teil, die Anzeige mit dem Divide-by-Zero-Schutz:

  1. 1 Global (Get): sessionWins nach %wins% (Default 0, Persisted)
  2. 2 Global (Get): sessionLosses nach %losses% (Default 0, Persisted)
  3. 3 Global (Get): winStreak nach %streak% (Default 0, Persisted)
  4. 4 If/Else: $math(%wins% + %losses%)$ Equals 0
    1. Then 5a Send Message: "Noch kein Spiel in dieser Session."
    2. Then 5b Break
    3. Else 6a Set Argument: winrate = $math(round(%wins% / (%wins% + %losses%) * 100))$
    4. Else 6b Send Message: "%wins%S-%losses%N (%winrate%% WR), Streak: %streak%"
FeldWert
Name!kd. Session-Record
GroupStandard
Commands!kd
!record
!winrate
!wl
Text Matching ModeBasic
LocationStart
SourcesTwitch Message
Ignore Bot Accountaktiv
User PermissionsEveryone
User Cooldown5
Global Cooldown0

Die schreibenden Commands brauchen härtere Permissions:

CommandCommandsUser PermissionsZweck
!w!w
!win
Moderator + BroadcasterSieg +1
!l!l
!loss
Moderator + BroadcasterNiederlage +1
!resetkd!resetkdModerator + BroadcasterSession leeren
ChatResultat
!w (Mod)”✅ Win! Aktuell 1-0.”
!w nochmal”✅ Win! Aktuell 2-0.”, Streak intern 2
!l (Mod)”❌ Loss. Aktuell 2-1.”, Streak intern 0
!kd (Viewer)”📊 2S-1N (67% WR), Streak: 0”
!kd bei leerer Session”📊 Noch kein Spiel in dieser Session. Los geht’s!”
!resetkd (Mod)”🔄 Session-Score zurückgesetzt.”

Statt jede Session manuell mit !resetkd zu leeren, kannst du die drei Globals automatisch beim Stream-Online-Event auf 0 setzen. Eine Action mit den drei Global (Set) Value-0-Steps aus !resetkd, getriggert vom Event. So startest du jeden Stream mit sauberem 0-0. Siehe Stream Online Event.

  • Divide-by-Zero: Ganz am Anfang der Session ist %wins% + %losses% gleich 0. Ohne den If/Else-Check teilt die Win-Rate durch 0 und der Step liefert Müll oder ein leeres Argument. Immer erst die Gesamtspiele gegen 0 prüfen, dann erst rechnen.
  • Increment ohne Get: Global (Set) mit Mode Increment schreibt nur, gibt aber den neuen Wert nicht automatisch als Argument zurück. Für die Bestätigungs-Message in !w und !l brauchst du danach ein Global (Get), sonst ist %wins% leer.
  • $math()$-Syntax: Streamer.bot wertet Arithmetik und Rundung innerhalb einer einzigen $math(...)$-Inline-Funktion aus (mXparser). Division ist /, Multiplikation *, Rundung round(...). Also $math(round(%wins% / (%wins% + %losses%) * 100))$ in einem Stück. Es gibt kein eigenes $divide()$ oder $round()$. Mische die Klammern nicht, sonst rendert Streamer.bot den rohen String in den Chat. Für komplexere Formeln ist eine C# Execute Code Sub-Action der saubere Weg, weil du dort echtes Math.Round nutzt.
  • Persisted vergessen: Ohne Haken bei Persisted gehen alle Counter bei jedem Streamer.bot-Neustart verloren. Mitten in einer langen Ranked-Session nach einem Crash ist das ärgerlich. Alle drei Globals auf Persisted setzen.
  • Streak-Reset bei Loss vergessen: Der zweite Step in !l setzt winStreak per Mode Value hart auf 0. Lässt du ihn weg, läuft die Streak trotz Niederlage weiter und zeigt eine Lüge an.
  • Reset-Strategie: !resetkd leert manuell. Wer es automatisch will, hängt die Reset-Steps ans Stream-Online-Event. Nicht beides gleichzeitig erwarten, sonst überschreibt das Event einen laufenden Score, falls der Stream neu verbindet.