aboutsummaryrefslogtreecommitdiff
path: root/internal/game/blackjack_rules.go
blob: b56d3ee903f3099dbf7d73da5b18e586294cf961 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
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) lookRouletteTable(sess *net.Session, target string) bool {
	return g.lookCardTable(sess, target, casino.GameRoulette)
}

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(table.Config.RulesText())
		return true
	}
	return false
}