Minigame: Bank Heist ( TWITCH Only - Multilingual - StreamElements)

Description

:money_bag: Streamer.bot Minigame: Bank Heist Multilingual

A fully automated, dynamic minigame for Streamer.bot (Twitch). Viewers can form a heist crew by betting channel points and attempt to rob a bank together. The system supports flexible survival chances based on user roles (Broadcaster, Mod, VIP, User), dynamic timer controls, and multiple outcome scenarios.
Default language is German in this bot. But you can change it in the setup.
These language (custom, de (German) , en (English), es (Spanish), fr (French), pt (Portuguese), tr (Turkish), nl (Dutch), pl (Polish) ) are available.

IMPORTANT
You need a Currency System like “[Currency] Core System ( Points System (Core) - #6 by TerrierDarts )” for the Streamer.bot usage or
for Streamelements you need some information (Account ID und JWT) StreamElements Support Page

:hammer_and_wrench: System Architecture & Workflow

The minigame operates on a **3-phase logic**:

1. **Lobby Phase (Join):**

  • A user initiates the heist with “!heist”.

  • The script saves the start time as an ISO-8601 timestamp and enables the “Join Timer”.

  • Other users can join the heist crew within the entry window (heistJoinTime) using !heist < bet >.

2. **Execution Phase:**

  • When the “Join Timer” expires, Streamer.bot triggers the “ExecuteHeist()” entry point.

  • Each crew member rolls individually against their role-based survival chance.

  • Chat outcome messages are chosen based on success (Full Success, Partial Success, Total Failure).

3. **Cooldown Phase:**

  • After the heist, the bank enters a lockout period (heistCooldown).

  • The “Cooldown Timer” is started.

  • Once elapsed, “ResetCooldown()” clears the lockout **and sends a chat reminder (heistMsgReminder)** announcing that the bank can be raided again.

Video Tutorial

Import File

minigame_bankheist_multiligual_V2.0.sb (36.2 KB)

Resources

For Streamer.bot Currency you need [Currency] Core System

For Streamelements infos from here StreamElements Support Page ( heistStreamElementsChannelId= Account ID
heistStreamElementsJwt = JWT Token
)

Installation

First Step

In Streamer.bot click the Import button in the top menu. Drag the **.sb** file into the Import String field.

Second Step

Initial all Settigs and Timers (default is German).

Via Chat

Execute the following command in your Twitch chat as the Broadcaster or a Moderator:

!raub status setup

Via Trigger - Core > Test

Also a Trigger is in the Action [MINIGAME] [Bankheist] Code - Main with the argument Name: status Value: setup to run the setup.

Configuration

First Step

Copy the Timer IDs by right-clicking each timer (Copy ID) into the 2 variables (heistJoinTimerId, heistCooldownTimerId)

  • [MINIGAME] Bankheist Multilingual - Timer - Join
    [MINIGAME] Bankheist Multilingual - Timer - Cooldown

Second Step

Configure all Variables as you wish inside these actions.

  • [MINIGAME] Bankheist Multilingual - Settings - Config
    You need to enable the System you want to use and disable the other systems. Default is the system “Streamer.bot”.

  • [MINIGAME] Bankheist Multilingual - Settings - Language
    To change the Language heistLanguage and/or the Custom Language.

  • [MINIGAME] Bankheist Multilingual - Settings - Streamelements (if you want to use Streamelements)

  • [MINIGAME] Bankheist Multilingual - Settings - Streamer.bot (if you want to use Streamer.bot)

  • Commands → [MINIGAME] Bankheist Multilingual - !raub
    Here you can change the command to !heist if you want.

Third Step

Reconfigure all Variables as mention in Installation → Second Step

Commands

Command Description
!raub status setup To starting the setup initial (Only as Broadcaster/Mod)
!raub 2000 To join a heist with 2000 Points (must be between heistMinBet and heistMaxBet)
!raub status To get the actual status of the heist or Cooldown

This is the only command !raub that you need to configure. All others are managed in the C# Code.

:clipboard: Variables & Arguments Overview

1. Global Configuration Variables (`Persisted Globals`)

Action: [MINIGAME] [Bankheist] Settings - Config

These values are stored permanently (Global Variables) in Streamer.bot to control the game rules:

Variable Default Value Description
heistLanguage “de” The selected language (de, en, es, fr, pt-br, tr, nl, pl or custom).
heistPointsSystem “streamerbot” The active points system (streamerbot or streamelements).
heistPointsVariable “userPoints” The name of the variable storing the viewers’ points in Streamer.bot.
heistDefaultPoints 1000 Default balance for new users if they don’t have an entry in Streamer.bot yet.
heistMinBet 50 The minimum bet required to join the heist.
heistMaxBet 10000 The maximum allowed bet per player.
heistMinParticipants 1 The minimum number of players required for the heist to actually start.
heistWinMultiplier 1.8 The win multiplier in case of success (bet × multiplier).
heistJoinTime 60 Time in seconds during which players can join the heist lobby.
heistCooldown 300 The cooldown time in seconds after a heist before a new one can be started.
heistChanceBroadcaster 95 Survival chance in percent (%) for the streamer/broadcaster.
heistChanceMod 80 Survival chance in percent (%) for moderators.
heistChanceVip 70 Survival chance in percent (%) for VIPs.
heistChanceUser 50 Survival chance in percent (%) for regular viewers.
heistJoinTimerId “” (Leer) ID of a created Streamer.bot timer for the join phase.
heistCooldownTimerId “” (Leer) ID of a created Streamer.bot timer for the cooldown phase.
heistStreamElementsChannelId “” (Leer) Channel ID for the StreamElements API (only needed if heistPointsSystem = streamelements).
heistStreamElementsJwt “” (Leer) JWT Token for the StreamElements API (only needed if heistPointsSystem = streamelements).
heistPointsApiTimeoutMs 7000 Maximum timeout in milliseconds for StreamElements API requests.
heistDebugApiErrors “false” “Set to ““true”” to log points API errors in the Streamer.bot logs.”

Also you can change and define it in the action

2. Chat & Language Templates (heistMsg…)

Action: [MINIGAME] [Bankheist] Settings - Language

Supports placeholders such as %user%, %command%, %remainingTime%, %amount%, %survivors%, %caught%, %payout%, %min%, %max%:

Variable Default Value Description
heistMsgSetupStarted :gear: Starte…” System message when executing the setup command.
heistMsgSetupCompleted :white_check_mark: Setup abgeschlossen…” Confirmation that the setup was successfully saved to globals.
heistMsgSetupDenied :cross_mark: %user% Du hast…” Error message when a regular user tries to start the setup.
heistMsgStart :police_car_light: BANKRAUB!..” The start message (lobby opens). Supports %user%, %command%, %remainingTime%.
heistMsgJoined :white_check_mark: %user% ist dem…” Message when another player successfully joins (%user%, %amount%).
heistMsgReminder :alarm_clock: ACHTUNG: Der…” Reminder when the cooldown has expired (%command%, %min%, %max%).
heistMsgNotEnoughPoints :cross_mark: %user%, du hast…” Error message if the player does not have enough points.
heistMsgInvalidBet :cross_mark: Ungültiger Einsatz…” Error message if the bet is outside the min/max limits.
heistMsgCooldown :hourglass_not_done: Die Bank ist…” Error message if someone tries to start a heist during an active cooldown (%cooldown%).
heistMsgAlreadyIn :warning: %user%, du bist…” Error message if a player tries to join multiple times.
heistMsgNotEnoughPlayers :cross_mark: Der Raubzug…” Cancellation message if heistMinParticipants is not reached.
heistMsgProgress :money_bag: Die Crew ist in…” Suspense message right before the result is calculated.
heistMsgSuccess :trophy: DER RAUB WAR…” Result message: ALL robbers escaped. (%survivors%, %caught%, %payout%)
heistMsgPartial :warning: DER RAUB WAR…” Result message: SOME escaped, others were caught.
heistMsgFailed :skull: DER RAUB IST…” Result message: ALL robbers were caught.
heistMsgStatusActive :magnifying_glass_tilted_left: STATUS: Raubzug…” Output of the !heist status command while the lobby is open.
heistMsgStatusCooldown :hourglass_not_done: STATUS: Aktuell…” Output of the !heist status command during the cooldown.
heistMsgStatusIdle :information_source: Aktuell ist kein…” Output of the !heist status command when everything is ready for a new start.
heistMsgNobodySurvivors “Niemand” Placeholder word for %survivors% if everyone was caught.
heistMsgNobodyCaught “Niemand” Placeholder word for %caught% if everyone escaped.
heistMsgPointsApiError :cross_mark: Das Punktesystem…” Fallback error message if the API or point assignment fails.
heistMsgStatusNotJoined “Nicht dabei” Status text if the requesting user is not participating in the active heist.
heistWordPoints “Punkte” The word for the currency (used in the status output).

Also you can change and define it in the action for diffrent language (default is german)

3. Dynamic Runtime Variables (Internal)

Managed automatically by the script during execution:

Variable Function Description
heist_active false bool - Indicates whether the join phase (lobby) is currently open.
heist_cooldown_active false bool - Indicates whether the heist is currently in the cooldown phase.
heist_start_time_iso (dynamisch) string - ISO 8601 timestamp of the lobby start (for status query).
heist_last_run_iso (dynamisch) string - ISO 8601 timestamp of the last heist (for self-healing cooldown).
heist_participants (dynamisch) Dictionary<string, string> - Stores all active participants and their bets.
heist_used_command (dynamisch) string - Stores the chat command used by the first user (e.g., !heist) to reproduce it in timer methods.

Contributors

  • ErictheVirus (Twitch): For helping and asking for the integration of StreamElements

Troubleshot

If its not startting you can check this. “Find Refs” and “Compile” in the Execude Code section fo the “[Bankheist] Main - Code”.

Please provide all this infos if you have some problems.

Streamer.bot Version:
Which point system do you use: [[Currency] Core System // StreamElements]
Command enabled: [YES/NO]
Is the ! in front of the command trigger:[YES/NO]
Changed the variable heistPointsVariable to your CurrencyField?

Screenshots from (via Imgur: The magic of the Internet or via the buildin function)

  • Command
  • Action: [MINIGAME] [Bankheist] Settings - Language
  • Action: [MINIGAME] [Bankheist] Settings - Config

Testing Log

Testing Phase Log

Version 2

  • Major Rework
  • Multiple default languages
  • StreamElements connection

Version 1

Running now multiple Days stable.