package game import ( "strings" "thehouseoficarus/internal/casino" "thehouseoficarus/internal/net" ) // Tables are room fixtures in their own right, not authored scenery objects. func (g *Game) lookBlackjackTable(sess *net.Session, target string) bool { return g.lookCardTable(sess, target, casino.GameBlackjack) } func (g *Game) lookBaccaratTable(sess *net.Session, target string) bool { return g.lookCardTable(sess, target, casino.GameBaccarat) } func (g *Game) lookCrapsTable(sess *net.Session, target string) bool { return g.lookCardTable(sess, target, casino.GameCraps) } func (g *Game) lookRouletteTable(sess *net.Session, target string) bool { return g.lookCardTable(sess, target, casino.GameRoulette) } // A cabinet's published pay table is public; another player's cards are not. func (g *Game) lookVideoPokerCabinet(sess *net.Session, target string) bool { if g.Casino == nil || sess.Player == nil { return false } room, err := g.World.LoadRoom(sess.Player.RoomID) if err != nil { return false } target = strings.TrimSpace(strings.ToLower(target)) for _, cfg := range room.CasinoTables { if cfg.Game != casino.GameVideoPoker { continue } id := strings.ToLower(cfg.ID) if target != id && target != id+" machine" && target != id+" cabinet" { continue } table, ok := g.casinoTable(room.ID, cfg.ID) if !ok { return false } if seated, playing := g.Casino.Participation(sess.Player.Name); playing && seated == table { g.emitCasinoEvents(table.Status(sess.Player.Name)) return true } c := table.Config.VideoPoker.Normalize() sess.WriteLine(table.Config.Label() + g.renderCasinoSnapshot(sess, &casino.VideoPokerSnapshot{Config: c, ShowPayTable: true, Denomination: 1, Hands: casino.CabinetHandCounts(c.Cabinet, c.Variant)[0], FeatureOn: c.Feature != "", Multiplier: 1})) return true } return false } func (g *Game) lookCardTable(sess *net.Session, target string, game casino.GameName) bool { room, err := g.World.LoadRoom(sess.Player.RoomID) if err != nil { return false } target = strings.TrimSpace(strings.ToLower(target)) for _, cfg := range room.CasinoTables { if cfg.Game != game { continue } id := strings.ToLower(cfg.ID) if target != string(game) && target != string(game)+" table" && target != id && target != id+" table" && !(target == "table" && len(room.CasinoTables) == 1) { continue } // Use the active configuration: live edits may be pending until a round ends. table, ok := g.casinoTable(room.ID, string(cfg.Game)) if !ok { return false } sess.WriteLine(g.renderCasinoRules(sess, table.Config)) return true } return false }