Chairface's Casino

Multiplayer casino games - Blackjack, 5 Card Stud, High-Lo and more coming soon!

File Details

Chairface's Casino v1.2.0

  • R
  • Jan 1, 2026
  • 10.87 MB
  • 21
  • 5.5.3+38
  • Classic + 2

File Name

Chairfaces_Casino_v1.2.0.zip

Supported Versions

  • 5.5.3
  • 5.5.2
  • 5.5.1
  • 5.5.0
  • 4.4.2
  • 4.4.1
  • 4.4.0
  • 3.4.5
  • 3.4.4
  • 3.4.3
  • 3.4.2
  • 3.4.1
  • 3.4.0
  • 2.5.5
  • 2.5.4
  • 2.5.3
  • 2.5.2
  • 2.5.1
  • 1.15.8
  • 1.15.7
  • 1.15.6
  • 1.15.5
  • 1.15.4
  • 1.15.3
  • 1.15.2
  • 1.15.1
  • 1.15.0
  • 1.14.4
  • 1.14.3
  • 1.14.2
  • 1.14.1
  • 1.14.0
  • 1.13.7
  • 1.13.6
  • 1.13.5
  • 1.13.4
  • 1.13.3
  • 1.13.2
  • 1.13.0

Chairface's Casino v1.1.1
Changes:

Clickable game links in chat - When a table opens, the game name (e.g., [High-Lo], [Blackjack], [5 Card Stud]) is now clickable and opens that game's window
Trixie intro reset - All players will see Trixie's intro again when they first open the lobby with this update


Chairface's Casino v1.1.1 updated!

Trixie easter egg poke sound chance increased from 1 in 2000 to 1 in 500 clicks


Chairface's Casino v1.1.2 - Settings now include:

Voice Frequency Slider (all users)

Always (100% chance)
Frequent (50% chance)
Normal (33% chance) - default
Occasional (20% chance)
Rare (10% chance)


Debug: Poke Chance Input (debug mode only)

Manual text input for "1 in X" chance
Type a number and press Enter to set
Lower = more frequent easter egg triggers

 

Chairface's Casino v1.1.3 - Networking hardened with AceComm
Changes:

All three multiplayer modules (Blackjack, Poker, High-Lo) now use AceComm:SendCommMessage() instead of direct C_ChatInfo.SendAddonMessage() calls
Updated channel prefixes:

Blackjack: CCBlackjack
Poker: CCPoker
High-Lo: CCHiLo


Removed all C_ChatInfo.RegisterAddonMessagePrefix() calls - AceComm handles this internally
Changed message handlers from OnAddonMessage() to OnCommReceived() using AceComm's callback system


Chairface's Casino v1.1.4
Changes:

Party/Raid Requirement Messaging

Blackjack & 5 Card Stud: Status bar shows "Join a party or raid to host a game." when not in group
High-Lo: Warning displayed in game window AND Host button disabled entirely
Debug mode bypasses these requirements


Version Check on Join

Host broadcasts addon version when opening table
Players with mismatched versions are rejected with popup dialog
Prevents sync issues between different addon versions


Reset Button Confirmation

Added confirmation popup to 5 Card Stud reset button (was missing)
Blackjack and High-Lo already had confirmations


Chairface's Casino v1.1.5

Fixed: Opening Blackjack now properly closes the 5 Card Stud window (was checking wrong frame property UI.Poker.frame instead of UI.Poker.mainFrame)

 

Chairface's Casino v1.1.6

Fixed: Poker UI event handlers now check isInitialized before accessing UI elements, preventing errors when receiving network messages while the Poker window hasn't been opened yet


Chairface's Casino v1.1.7

Fixed: Blackjack ANTE message now uses empty string instead of nil for the anteType parameter, preventing table.concat error when joining a table

 

Chairface's Casino v1.1.8
LibCompress Integration:

Added new Compression.lua module that wraps LibCompress
All three multiplayer modules (Blackjack, Poker, High-Lo) now compress outgoing messages using Huffman compression
Compression is only applied to messages >50 bytes and only if the compressed result is actually smaller
Compressed messages are prefixed with ~ to distinguish them from uncompressed
Gracefully degrades if LibCompress is not available - messages are sent uncompressed
Added LibCompress as optional dependency in TOC

How it works:

Outgoing: Serialize → Compress (if beneficial) → Send via AceComm
Incoming: Receive → Decompress (if prefixed with ~) → Deserialize → Handle

Benefits:

Reduces network traffic for large messages (deal syncs with many players, settlements)
Falls back to uncompressed if LibCompress isn't installed
Backward compatible - uncompressed messages from older versions still work


Chairface's Casino v1.1.9

Fixed: Turn timer now restarts when a player splits, giving them a fresh 30 seconds for each split hand

 

Chairface's Casino v1.1.10

5 Card Stud: Increased window width from 920 to 970 pixels
5 Card Stud: Increased player cell width from 175 to 185 pixels (+10pt spacing between players)
5 Card Stud: Lowered the hand value caption during settlement by 5 points (from -4 to -9)

 


Chairface's Casino v1.1.11

Blackjack: Increased player turn timer from 30 seconds to 60 seconds
Blackjack: Trixie now resets to "waiting" state when a new game is hosted (both for host and joining clients)


Chairface's Casino v1.1.12

5 Card Stud: Kickers are now only shown when relevant

"Pair of Aces" vs "Pair of 8's" - no kickers shown (aces clearly beat 8's)
"Pair of Aces, Q Kicker" vs "Pair of Aces, 9 Kicker" - kickers shown (same pair, kicker decides winner)
Logic: Only displays kicker information when another player has the same hand rank


Chairface's Casino v1.1.13

High-Lo: Added 5pt vertical spacing between lines in the settlement text display

 

Chairface's Casino v1.1.14
All three games now have a unified centered action button:

New centered HOST/JOIN button - A large (180x54) button centered in each game window, layered above all other UI elements
Triple-sized text (24pt font) for high visibility
Context-aware label: Shows "HOST" when no game is active, "JOIN" when a table is open and waiting for players
Auto-hide behavior:

Disappears when host clicks it (until game ends/resets)
Disappears when client clicks to join (until game ends/resets)
Reappears after settlement/game conclusion


Removed from button bar: HOST and ANTE/JOIN buttons no longer appear in the bottom button bar for all three games

Changes applied to:

Blackjack (MainFrame.lua)
5 Card Stud (PokerFrame.lua)
High-Lo (HiLoFrame.lua)


Chairface's Casino v1.1.15
High-Lo UI Changes:

Trixie checkbox moved to bottom-left corner of the window, vertically aligned with the reset button

High-Lo Chat Integration (for players without the addon):
Join Phase:

When game is hosted, announces in party/raid chat: === HIGH-LO GAME === Type 1 to join!
Players can type 1 in party/raid chat to join the game
Host's addon automatically adds chat-joiners to the game

Rolling Phase:

Announces: === ROLLING PHASE === Everyone /roll X - You have 2 minutes!
Timer announcements at:

1:30 remaining
1 minute remaining
30 seconds remaining
Countdown from 10, 9, 8... 1

 

Tiebreaker:

Announces: === TIE! Both players rolled X === Reroll needed! /roll 100
For multi-player ties: === TIEBREAKER for HIGH/LOW === [players] must /roll 100

Settlement:

Announces: === GAME OVER ===
Shows winner: [Player] rolled [X] (HIGH) - WINNER!
Shows loser: [Player] rolled [X] (LOW) - LOSER
Shows debt: [Loser] owes [Winner] Xg (high - low = amount)

Game End:

Reset: === HIGH-LO GAME RESET ===
Cancel: === HIGH-LO GAME CANCELLED ===

 


Chairface's Casino v1.1.16
New /hilo Quick Start Command:

Usage: /hilo X where X is the max roll value (default 100)
Automatically hosts a High-Lo game with a 60 second join window
Opens the High-Lo UI automatically
Example: /hilo 500 starts a game with max roll of 500

Chat Message Formatting:

All High-Lo chat messages now have [Casino] prefix
Messages appear in party or raid chat as: [Player]: [Casino] === HIGH-LO GAME === Type 1 to join!
This makes it clear the messages are addon-generated and helps identify the game in busy chats
Raid chat is properly used when in a raid (instead of party chat)


Chairface's Casino v1.1.17
Bug Fixes:

Reset button now properly cancels and resets the join timer countdown display
Join timer is cancelled on game reset, table close, and game cancel

High-Lo Chat Join Improvements:

When a player joins via chat (typing "1"), their name is now announced in chat: [Casino] PlayerName has joined the game!

/hilo Command Updates:

No longer opens the game window - just hosts the table quietly
Now includes a 60 second join timer with chat announcements:

At 30 seconds: [Casino] 30 seconds to join! Type 1 to join!
Final 5 second countdown: [Casino] 5... 4... 3... 2... 1...
Auto-starts rolling phase when timer expires (if 2+ players)

 

Timer Countdown Changes:

Join phase final countdown: 5 seconds (30s warning, then 5-4-3-2-1)
Rolling phase final countdown: Changed from 10 to 5 seconds (5-4-3-2-1)


Chairface's Casino v1.1.18
High-Lo Timer Fix:

Timer now continues running when the window is closed - The join timer and rolling timer are now fully managed by HiLoMultiplayer (which runs independently of the UI)
When the High-Lo window is reopened, it correctly shows the remaining time by reading from the HiLoMultiplayer timer state
Previously the UI had its own timer that would stop when the window was hidden, causing the countdown to freeze

Technical Changes:

Removed duplicate timer logic from HiLoFrame's OnUpdate
UI now reads remaining time directly from HiLoMultiplayer.joinStartTime and HiLoMultiplayer.joinDuration
All game logic (auto-start rolling, not enough players) is handled by HiLoMultiplayer's timer, which keeps running even when the window is closed
Removed obsolete joinCountdown variable from UI


Chairface's Casino v1.1.19
Major Feature: State Synchronization System
Implemented a robust versioned state synchronization system for all three games (Blackjack, 5 Card Stud, High-Lo) to handle network reliability issues.
Architecture:

Version Tracking: Each game state change increments a version number
Gap Detection: Clients track the last received version; if a gap is detected (received v7 when expected v6), the client ignores the message and requests a full sync
Full State Dumps: Host can send complete game state to individual players via whisper using AceSerializer compression

New File: StateSync.lua

SS:IncrementVersion(game) - Increments and returns version (host only)
SS:ValidateVersion(game, version, host) - Checks if version is valid, requests sync if gap detected
SS:RequestFullSync(game, host) - Client requests full state from host
SS:HandleSyncRequest(game, requester) - Host builds and sends full state
SS:BuildFullState(game) - Creates complete state table for serialization
SS:HandleFullState(game, data) - Client receives and applies full state
SS:ApplyBlackjackState(state) - Apply Blackjack state
SS:ApplyPokerState(state) - Apply Poker state
SS:ApplyHiLoState(state) - Apply High-Lo state

Flow:

Host sends: SYNC|ACTION|version=5|data...
Client receives v5, expected v5 ✓ → Apply normally
Client receives v7, expected v6 ✗ → Gap detected!
Client sends whisper: REQUEST_SYNC|blackjack
Host responds with full compressed state dump via AceSerializer
Client deserializes and applies full state, synced!

Benefits:

Handles packet loss: If messages are dropped, client auto-recovers
Handles lag/reloads: Player can /reload and request current state
Handles disconnects: When rejoining, gap detection triggers resync
Efficient: Uses AceSerializer + compression for minimal bandwidth
Per-game tracking: Each game has independent version counters


Chairface's Casino v1.1.20
New: Sync Button in Lobby
Added a Sync button to the lobby screen, positioned next to Settings and Help buttons.
Features:

Manual Full Sync: Click to request a complete state dump from all active game hosts
5 Second Cooldown: Prevents spam - shows remaining cooldown time if clicked too soon
Multi-Game Support: Syncs all three games at once (Blackjack, 5 Card Stud, High-Lo)
Smart Detection: Only requests sync from games where you're connected to a host (not if you ARE the host)
Feedback Messages:

Shows which games are being synced and from which hosts
Shows "No active games to sync" if not connected to any hosts
Shows cooldown remaining if clicked too soon

 

Button Layout:

Buttons are now 3 across: [Settings] [Help] [Sync]
Each button is 78px wide to fit in the row

Tooltip:

Hovering shows: "Sync Game State - Request full state sync from hosts for all active games. 5 second cooldown between clicks"


Chairface's Casino v1.1.21
Fixed: Sync Button Now Works for Spectators
The Sync button now works even if you haven't joined/anted into the game. This enables spectator mode - anyone in the party/raid can sync to see the current game state.
How it works now:

Click Sync - If no known hosts, broadcasts a discovery request on all 3 game channels
Hosts respond - Any active game host (not in idle phase) responds with a host announcement via whisper
Client learns host - The client's multiplayer module is updated with the discovered host
Auto-sync - Immediately requests full state sync from the discovered host
UI updates - Game state is applied and UI refreshes to show current game

Flow for a reloading player:

Player reloads UI, loses all game state
Opens Casino lobby, clicks Sync
Sees: "Searching for active game hosts..."
Host responds automatically
Sees: "Found blackjack host: HostName - Requesting sync..."
Full game state synced, can now spectate (or play if it was their turn)

Changes:

Added BroadcastDiscovery() - Sends DISCOVER message on all 3 channels
Added HandleDiscoveryRequest() - Host responds if hosting active game
Added HandleHostAnnounce() - Client learns about host and auto-syncs
All 3 multiplayer modules (Blackjack, Poker, HiLo) now handle discovery/announce messages


Chairface's Casino v1.1.22
Fixed: Sync Success/Failure Messages + Blackjack Cards Display
1. Success/Failure Feedback:

After sync completes: |cff00ff00Sync successful:|r Blackjack state restored.
If deserialize fails: |cffff4444Sync failed:|r Could not deserialize blackjack state.
If apply fails: |cffff4444Sync failed:|r Could not apply blackjack state.

2. Blackjack Cards Now Display After Sync:
The UI tracks dealt cards separately from game state (UI.dealtCards and UI.dealerDealtCards). After sync, these are now properly set:

UI.dealerDealtCards = number of dealer cards
UI.dealtCards[playerName_handIndex] = number of cards in each player's hand
UI.isDealingAnimation = false (clears any stuck animation state)

3. Host Tracking Updated:
All three Apply functions now also update the multiplayer module's host tracking:

MP.currentHost / PM.currentHost / HLM.currentHost = host name
MP.tableOpen / etc. = true
MP.isHost / etc. = whether you are the host

This ensures subsequent actions (hit, stand, etc.) work correctly after syncing.


Chairface's Casino v1.1.23
Fixed friendly game names in all sync feedback messages:

Success: |cff00ff00Sync successful:|r Blackjack state restored.
Success: |cff00ff00Sync successful:|r 5 Card Stud state restored.
Success: |cff00ff00Sync successful:|r High-Lo state restored.
Failure: |cffff4444Sync failed:|r Could not deserialize Blackjack state.
Failure: |cffff4444Sync failed:|r Could not apply 5 Card Stud state.

 

Chairface's Casino v1.1.24
Changes:
1. Removed Blackjack Turn Timer

Removed the 60-second turn timer completely
No more auto-stand when time expires
Players can take as long as they need

2. Improved Sync Feedback (from 1.1.23)

All games now show friendly names in success/failure messages


Chairface's Casino v1.1.25
Fixed: HOST Button Now Shows After Settlement
The HOST button was being hidden during the SETTLEMENT phase, which prevented the host from starting a new hand after the game completed.
Changes:

During SETTLEMENT or IDLE phase, the host now sees the HOST button to start a new hand
Non-hosts in a party/raid can also see HOST button during IDLE if no table is open
Button is still hidden during active gameplay (DEALING, PLAYER_TURN, DEALER_TURN)

Updated Logic:

Active game phases (dealing, player turn, dealer turn): Button hidden for everyone
Settlement/Idle phases:

If you're the current host → Show HOST button
If no table is open and you can host → Show HOST button
Otherwise → Hide button


Waiting for players phase: Show JOIN button for non-host players who haven't anted


Chairface's Casino v1.1.26
New Features:
1. Auto-Sync on Login/Reload
When you log in or reload your UI while in a party/raid, the addon automatically pings "Am I playing?" to the group. If a host has you in their active game, they'll automatically send you the full game state.
Flow:

Player reloads UI → PLAYER_ENTERING_WORLD fires
After 2 second delay, broadcasts AM_I_PLAYING|PlayerName to party/raid
Each host checks if that player is in their GS.players table
If found, host sends YOU_ARE_PLAYING|game and then full state sync
Player receives sync and UI updates automatically

2. Host Disconnect Detection & Recovery
If the host goes offline (disconnects but stays in group), the game is no longer stuck:

Detects when host is in group but UnitIsConnected() returns false
Shows status: HOST DISCONNECTED - Type /bj reset session to clear
Shows RESET button for everyone (not just host)
Anyone can click RESET or use /bj reset session to clear the stuck game
Trixie shows concerned expression

3. Improved Host Leave Detection

If host completely leaves the group, table auto-closes immediately
More robust online/offline checking for all players

Changes to OnRosterUpdate:

Separate checks for host in-group vs host online
Tracks MP.hostDisconnected flag
New MP:CanForceReset() helper function


Chairface's Casino v1.1.27
Fixed: Auto-Sync Now Works for Spectators
Changed CheckIfPlayerInGame to send sync to anyone in the party/raid when a game is active, not just players who have joined/anted.
Before: Only checked if GS.players[playerName] existed
After: Checks if GS.phase ~= "idle" (any active game state)
Flow:

Player logs in/reloads while in party/raid
Broadcasts "Am I playing?" to group
Host checks: Is any game active (not idle)?
If yes → Send sync to that player (whether they're a player OR spectator)
Player receives full game state and can watch the action

This enables:

Rejoining players - Get back into their active hand
Spectators - Watch games in progress without joining
Late joiners - See current game state immediately


Chairface's Casino v1.1.28
Fixed: Duplicate Sync Message
The sync was happening twice because:

Host receives "Am I playing?" → sends YOU_ARE_PLAYING notification AND pushes full sync
Client receives YOU_ARE_PLAYING → was calling OnHostDiscovered() which requested sync again

Fix: The YOU_ARE_PLAYING handler now only updates host tracking (currentHost, tableOpen, isHost) without requesting sync, since the host is already pushing it.
Now you'll see:
[Casino] Found active blackjack game hosted by Playtester - syncing...
[Casino] Sync successful: Blackjack state restored.


Chairface's Casino v1.1.29
Fixed: HOST Button Now Shows for All Players During Settlement
Problem: During settlement phase, only the previous host saw the HOST button. Clients couldn't start a new game.
Cause: The logic checked MP.tableOpen which was still true during settlement, preventing non-hosts from seeing the button.
Fix: Separated settlement and idle phase handling:

Settlement phase: Anyone who can host (in party/raid or test mode) sees the HOST button
Idle phase: Original logic - host sees button, or anyone if no table is open

Now after a hand completes, any player in the party/raid can click HOST to start the next hand.


Chairface's Casino v1.1.30
Fixed: HOST Button Now Works for All Players During Settlement
Problem: The HOST button appeared for non-hosts during settlement, but clicking it did nothing.
Cause: OnActionButtonClick only allowed the previous host to proceed during settlement phase (line 556 checked isCurrentHost or MP.isHost).
Fix: Updated click handler to match the visibility logic:

Settlement phase: Anyone who can host (in party/raid or test mode) can click to start a new game
Idle phase: Host can start new hand, or anyone if no table is open

Now any player can click HOST after a hand completes to start the next game.

 

Chairface's Casino v1.1.31
Added: Clickable Game Links in Sync Messages
Game names in sync messages are now clickable links that open the game window:
Messages updated:

Found active [Blackjack] game hosted by PlayerName - syncing...
Sync successful: [Blackjack] state restored.

Click [Blackjack], [5 Card Stud], or [High-Lo] to open that game's window directly from chat.
Uses the existing BJ:CreateGameLink() system that was already in place for other chat messages.

 

Chairface's Casino v1.1.32
Added: Persistent Shoe Between Hands
When the same host continues dealing, the deck is now preserved between hands:
New behavior:

Same host continuing: Shoe is preserved, cards continue to be dealt from same deck
Reshuffle only when needed: At 75% penetration (per Vegas rules)
New host: Full reset, new shuffled deck
Shuffle notification: Shuffling deck... message when reshuffle occurs

Changes:

Added GS:ResetForNewHand() - Clears hands/players but preserves shoe
Updated GS:StartRound() - Detects if same host, uses ResetForNewHand() if so
TABLE_OPEN now broadcasts cardsRemaining to clients
Clients track syncedCardsRemaining for UI display

Why this matters:

More realistic casino experience
Card counting becomes possible (for those who track)
Consistent with real blackjack rules


Chairface's Casino v1.1.33
Added: Conditional Shuffle Animation
The shuffle sound/animation sequence now only plays when a reshuffle actually occurs:
When shuffle animation plays:

First hand of a new session (new host)
When deck reaches 75% penetration and needs reshuffling

When shuffle animation skips:

Same host continuing with existing deck
Cards dealt immediately with "Dealing..." status

Changes:

Added GS.reshuffledThisRound flag in StartRound()
OnCardsDealt() checks flag to decide whether to play shuffle sequence
If no shuffle needed: Trixie goes straight to dealing pose, cards dealt immediately
Faster gameplay when continuing with same deck


Fixed v1.1.33 - Added the missing end to properly close the startDealing() function.


Fixed v1.1.33 - Added the missing end to properly close the startDealing() function.


Chairface's Casino v1.1.34
Added: Auto-Stand on 21
Players now automatically stand when they hit 21:

After hitting, if hand total equals 21, player auto-stands
Logged as "auto-stand at 21" in game history
Speeds up gameplay - no need to manually stand on perfect hand

Priority order for auto-actions after hit:

Bust (over 21) → Hand loses
5-Card Charlie (5+ cards ≤21) → Auto-win
21 exactly → Auto-stand (new!)


Chairface's Casino v1.1.37
Fixed: Max Players Options

Changed Host Panel max players options from { 1, 2, 4, 6, 10, 20 } to { 2, 4, 6, 10, 15, 20 }
Now includes 15 as an option

Fixed: Shuffle Sequence Properly Blocks Dealing
During shuffle:

Info bar shows "Shuffling..." instead of card count during the shuffle sequence
Card count updates only AFTER shuffle completes - not before/during
Cards don't fly until shuffle finishes - the startDealing callback only fires after the 3.5 second shuffle sequence

Shuffle sequence flow:

isShuffling = true, hide card count
Play 3 shuffle sounds with Trixie animation (3.5 seconds total)
After shuffle: isShuffling = false, update displayedCardCount to new deck amount
Update info bar with fresh card count
THEN call startDealing() to animate cards


Chairface's Casino v1.1.38
Fixed: 5 Card Stud Join Error
Root Cause: When StateSync sent FULLSTATE|<serialized_data> messages to game channels (CCPoker, CCHiLo, CCBlackjack), the multiplayer handlers didn't recognize the FULLSTATE message type. The serialized data contained | delimiters which got parsed into the parts array, causing parts to be misinterpreted. For example, if serialized data started with something like ANTE|1|..., the handler might try to process parts[2] as "ANTE" and call PlayerAnte("1", nil).
Fix: Added proper FULLSTATE and REQSYNC message handlers to all three multiplayer modules:

Multiplayer.lua (Blackjack)
PokerMultiplayer.lua (5 Card Stud)
HiLoMultiplayer.lua (High-Lo)

Each handler now:

Recognizes FULLSTATE message type
Rejoins the remaining parts with | delimiter (table.concat(parts, "|", 2))
Routes to BJ.StateSync:HandleFullState(game, serializedData)

Also handles REQSYNC requests by routing to BJ.StateSync:HandleSyncRequest().
Also Fixed: Max Players Options

Updated Host Panel max players buttons to { 2, 4, 6, 10, 15, 20 }

 

Chairface's Casino v1.1.40
Fixes:

5 Card Stud: ANTE sync error fixed

Added nil check before calling PlayerAnte in HandleSyncState
If malformed data is received (playerName or amount is nil), it's now logged and ignored instead of crashing


5 Card Stud: "Betting Countdown" → "Join Countdown"

Changed label in the poker host panel to correctly reflect that it's for joining, not betting


5 Card Stud: Buttons inactive after player action

Added an explicit UpdateButtons() call with a 0.1 second delay after OnPlayerAction
This ensures button states are properly refreshed after any action, even if there's a timing issue with state updates

Chairface's Casino v1.1.42
5 Card Stud Sync Improvements:

Client join visibility - The client already optimistically adds themselves to local state when they click JOIN, so they should see themselves immediately. The ANTE sync from host then confirms it. If this still isn't working, enable debug mode (/cc db) to see the sync messages.
Turn change sync debugging - Added extensive debug logging:

Host logs: "ProcessAction: Sending sync - nextPlayerIdx=X (PlayerName), phase=Y"
Client logs: "Client received ACTION sync: player=X, action=Y, nextPlayerIdx=Z, phase=W"
Client also logs: "Client: Next player should be: PlayerName (index X)"


Improved OnPlayerAction UI refresh:

Calls UpdateDisplay() immediately
Then calls UpdateStatus() and UpdateButtons() again after 0.1 second delay
Added isInitialized check in the timer callback for safety

 

To debug: Enable debug mode with /cc db or /bj debug, then perform actions and check chat for the debug messages. This will show exactly what data is being sent and received.


Chairface's Casino v1.1.43
Debug Build for 5 Card Stud Turn Sync
This version adds extensive debug logging to track down why clients don't see turn changes when the host acts first.
Changes:

Host UI refresh after action - When host acts and game is still in BETTING phase, explicitly calls UpdateDisplay() on host's UI before checking for test players
More debug logging in HandleSyncState:

Logs sender name, currentHost, and syncType at entry
Logs if message is REJECTED because sender != host
This will help identify if clients are receiving the sync or filtering it

 

To debug:

Enable debug mode on BOTH host and client: /cc db
Have the host be first to act on a street
Host performs action (check/call/raise)
Check BOTH clients' chat for debug messages:

Client should see: "HandleSyncState: sender=HostName, currentHost=HostName, syncType=ACTION"
Client should see: "Client received ACTION sync: player=HostName, action=check, nextPlayerIdx=2, phase=betting"
If you see "REJECTED - sender is not host", that's the problem


Chairface's Casino v1.1.44
Fixed: 5 Card Stud SYNC_STATE Message Parsing
Root Cause Found: The PM:Send() function was inserting a version number into SYNC_STATE messages at position 2 (after syncType), making the message format:
PSYNC|syncType|version|...data
But HandleSyncState was reading:

parts[2] expecting syncType → actually got VERSION NUMBER
parts[3] expecting playerName → actually got syncType

So when syncType was "5" (the version number) instead of "ACTION", neither the ANTE nor ACTION branch matched, and the message was silently ignored!
Fix: Updated HandleSyncState to correctly parse the message format:

parts[2] = syncType (ANTE, ACTION, etc.)
parts[3] = version number
parts[4+] = actual data

This should fix both:

Clients not seeing when they've joined
Clients not seeing turn changes when host acts


Chairface's Casino v1.1.46
Fixed: Double ante sound on join

Added skipSound parameter to OnPlayerAnted()
When client receives ANTE sync for themselves (after optimistically adding), the sound is skipped since it already played
Other players' antes still play the sound

Fixed: HOST button visible after 5 Card Stud settlement

During SETTLEMENT phase, anyone who can host (in party/raid or test mode) now sees the HOST button
Both previous host and clients can start a new game after one concludes


Chairface's Casino v1.1.47
Fixed: HOST button now works during settlement
Changes:

Custom Enable/Disable for action button - Added custom Enable(), Disable(), and IsEnabled() methods with proper visual feedback:

Enabled: Green background, white text
Disabled: Gray background, gray text
Also enables/disables mouse input


Click handler for settlement phase - Added settlement phase handling to OnPokerActionButtonClick() so clicking HOST during settlement opens the host panel
RegisterForClicks and EnableMouse - Ensured the button properly receives mouse clicks


Chairface's Casino v1.1.47
Fixed: HOST button now works during settlement
Changes:

Custom Enable/Disable for action button - Added custom Enable(), Disable(), and IsEnabled() methods with proper visual feedback:

Enabled: Green background, white text
Disabled: Gray background, gray text
Also enables/disables mouse input


Click handler for settlement phase - Added settlement phase handling to OnPokerActionButtonClick() so clicking HOST during settlement opens the host panel
RegisterForClicks and EnableMouse - Ensured the button properly receives mouse clicks

 

Chairface's Casino v1.1.48
Fixed: 5 Card Stud reconnect sync issues

playerArea nil error - Added initialization checks to:

UpdateDisplay() - returns early if self.isInitialized is false
UpdatePlayerHands() - returns early if not initialized or playerArea is nil


Cards face down after sync - Now includes faceUp property when serializing cards in BuildPokerState()
Cards disappearing after sync - ApplyPokerState() now initializes dealtCards for each player based on their hand size, so synced cards appear immediately instead of requiring new card animations


Chairface's Casino v1.1.49
Fixed: currentBet nil error after sync

Added nil safety in GetAvailableActions - Now uses player.currentBet or 0 instead of directly accessing player.currentBet
Include currentBet in sync data - BuildPokerState now includes currentBet when serializing player data, so it's restored properly after reconnect


Chairface's Casino v1.1.50
Fixed: Buttons active after state restore

Added missing state fields to sync:

currentStreet - which betting round we're in
maxRaise - maximum raise amount


Delayed button update after sync - Added a 0.1 second delayed call to UpdateButtons() after poker state is restored to ensure all state is fully applied
Debug logging - When debug mode is on, shows phase, currentPlayerIndex, currentPlayer, and myName after sync to help diagnose any remaining issues

Test with /cc db enabled to see the debug output showing whether it correctly identifies you as the current player.


Chairface's Casino v1.1.51
Added: Raise input auto-fills with max remaining raise
The raise input box now:

Shows remaining raise amount in gray text (e.g., if max is 100g and current bet is 15g, shows "85")
Clears on focus - When you click the box, it clears and turns white for typing
Restores placeholder on blur - If you click away without entering a value, it shows the max again
Uses the displayed value - If you just click Raise without changing it, it raises by the max remaining amount

Chairface's Casino v1.1.51
Added: Raise input auto-fills with max remaining raise
The raise input box now:

Shows remaining raise amount in gray text (e.g., if max is 100g and current bet is 15g, shows "85")
Clears on focus - When you click the box, it clears and turns white for typing
Restores placeholder on blur - If you click away without entering a value, it shows the max again
Uses the displayed value - If you just click Raise without changing it, it raises by the max remaining amount


Chairface's Casino v1.1.53
Changes:

Minimap scale range changed to 1x-5x (was 0.25x-3x)

Step size: 0.5x increments


Added /cc default command - Resets all settings to defaults:

Sound: ON
Voice: ON
Voice Frequency: Normal (3)
Card Back: Blue
Minimap Scale: 1.0x
Window Scale: 100%
Poke Chance: 1 in 500
Debug: OFF

Also updates the settings panel sliders/buttons if it's open, and immediately applies the minimap and window scale changes.


Chairface's Casino v1.1.55
Window scale slider now only applies the scale on mouse release, not during dragging. The percentage text still updates live so you can see what value you're selecting.


Chairface's Casino v1.1.56 - Window scale range changed to 60% - 120%.


Chairface's Casino v1.1.57
Changes:

Minimap scale range changed to 1.5x - 5x (was 1x - 5x)

Default is now 1.5x


Minimap hover scaling now matches the set scale

On hover, the button grows 15% larger than its current scaled size
On leave, it returns to the exact scaled size
Works correctly regardless of what scale you've set


Chairface's Casino v1.1.59
Changes:

Help window now shows commands and tips by default:

Slash Commands: /cc, /casino, /cc help, /cc default, /cc intro, /hilo
Tips about clickable game links in chat, party requirements, hosting, settling debts, and clicking Trixie
Still shows "Select a game on the left to see its rules"


Fixed /cc help - Now only shows commands that actually exist:

/cc or /casino - Open casino lobby
/cc default - Reset all settings to defaults
/cc intro - Replay Trixie's introduction
/cc help - Show this help
/hilo - Quick start High-Lo game


Chairface's Casino v1.1.59
Changes:

Help window now shows commands and tips by default:

Slash Commands: /cc, /casino, /cc help, /cc default, /cc intro, /hilo
Tips about clickable game links in chat, party requirements, hosting, settling debts, and clicking Trixie
Still shows "Select a game on the left to see its rules"


Fixed /cc help - Now only shows commands that actually exist:

/cc or /casino - Open casino lobby
/cc default - Reset all settings to defaults
/cc intro - Replay Trixie's introduction
/cc help - Show this help
/hilo - Quick start High-Lo game


Chairface's Casino v1.1.61
Changes:

Help panel updated:

/hilo <max> now shows it requires a max roll parameter with example: /hilo 1000
Removed "Click Trixie for a surprise!" tip


/cc help updated to show /hilo <max> syntax with example
Settings left column moved up 20 pts - Card Face section now starts at -20 instead of -40


Chairface's Casino v1.2.0 (Updated)
/hilo Command Updated
New syntax: /hilo <max> [timer]

max = maximum roll value (required, minimum 2)
timer = join window in seconds (optional, 20-120, default 60)

Examples:

/hilo 1000 - Max roll 1000, 60 second join window
/hilo 1000 30 - Max roll 1000, 30 second join window
/hilo 500 120 - Max roll 500, 2 minute join window

Updated in:

/hilo command handler
/cc help output
Help panel default content
CurseForge description

 

 

Chairface's Casino v1.2.0 (Fixed)

High-Lo Join Timer Fix

When the join timer expires with insufficient players (less than 2):

  • Before: Game stayed in LOBBY phase, HOST button hidden, "Waiting for manual start" message
  • After: Game is cancelled automatically, all clients reset, HOST button reappears for everyone

Changes:

  1. HiLoMultiplayer.lua - Join timer expiry now broadcasts TCLOSE and resets game state when < 2 players
  2. HandleTableClose - Now also clears tableOpen, isHost flags and cancels any running join timer on clients

The message now says "Game cancelled" instead of "Waiting for manual start".