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
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
|
package casino
import "fmt"
type GameName string
const (
GameSlots GameName = "slots"
)
type TableConfig struct {
ID string `yaml:"id"`
Game GameName `yaml:"game"`
MaxPlayers int `yaml:"max_players,omitempty"`
BettingTicks int `yaml:"betting_ticks,omitempty"`
MinBet int `yaml:"min_bet,omitempty"`
MaxBet int `yaml:"max_bet,omitempty"`
}
type MachineConfig struct {
ID string `yaml:"id"`
Game GameName `yaml:"game"`
Variant string `yaml:"variant,omitempty"`
MinBet int `yaml:"min_bet,omitempty"`
MaxBet int `yaml:"max_bet,omitempty"`
SpinTicks int `yaml:"spin_ticks,omitempty"`
Payout float64 `yaml:"payout,omitempty"`
}
func (c MachineConfig) Normalize() MachineConfig {
if c.MinBet <= 0 {
c.MinBet = 1
}
if c.MaxBet <= 0 {
c.MaxBet = int(^uint(0) >> 1)
}
if c.SpinTicks <= 0 {
c.SpinTicks = 2
}
if c.Variant == "" {
c.Variant = "huff_and_even_more_puff"
}
if c.Payout <= 0 {
c.Payout = 0.97
}
return c
}
func (c TableConfig) Normalize() TableConfig {
if c.MaxPlayers <= 0 {
c.MaxPlayers = 8
}
if c.BettingTicks <= 0 {
c.BettingTicks = 20
}
if c.MinBet <= 0 {
c.MinBet = 1
}
if c.MaxBet <= 0 {
c.MaxBet = int(^uint(0) >> 1)
}
return c
}
type Wager struct {
Total int
Chips int
Credits int
}
type Wallet interface {
Wager(amount int) (Wager, bool)
PayCredits(amount int)
}
type EventType string
const (
EventJoined EventType = "joined"
EventBetting EventType = "betting"
EventBetPlaced EventType = "bet_placed"
EventRoundStarted EventType = "round_started"
EventResult EventType = "result"
EventPayout EventType = "payout"
EventTimedOut EventType = "timed_out"
EventLeft EventType = "left"
EventClosed EventType = "closed"
)
type Event struct {
RoomID int
TableID string
Type EventType
Player string
Message string
PrivateMessage string
PrivateTo string
Color string
Public bool
Slot *SlotSnapshot
}
type SlotSnapshot struct {
Grid [3][5]string
StoppedReels int
}
func (e Event) String() string {
if e.Message != "" {
return e.Message
}
return fmt.Sprintf("%s at %s", e.Type, e.TableID)
}
type Participant struct {
Name string
Connected bool
HasBet bool
Wager Wager
Wallet Wallet
}
|