feat: add coin for private table
This commit is contained in:
+26
-3
@@ -50,6 +50,7 @@ type pendingTable struct {
|
||||
clients []*Client
|
||||
hands int // تعداد دستِ انتخابشده توسط میزبان (۳/۵/۷)
|
||||
rot int // چرخشِ جایگاههای غیرِمیزبان (۰..۲)
|
||||
stake int // شرطِ سکهایِ هر بازیکن (۰ یعنی رایگان)
|
||||
started bool // پس از فشردن «شروع» توسط میزبان
|
||||
}
|
||||
|
||||
@@ -188,7 +189,9 @@ func (h *Hub) handle(in inbound) {
|
||||
case "join_table":
|
||||
h.joinTable(c, in.msg.Code)
|
||||
case "start_table":
|
||||
h.startTable(c, in.msg.Hands)
|
||||
h.startTable(c, in.msg.Hands, in.msg.Stake)
|
||||
case "set_stake":
|
||||
h.setStake(c, in.msg.Stake)
|
||||
case "rotate_table":
|
||||
h.rotateTable(c, in.msg.Dir)
|
||||
case "leave_table":
|
||||
@@ -245,12 +248,15 @@ func (h *Hub) joinTable(c *Client, code string) {
|
||||
}
|
||||
|
||||
// startTable شمارش معکوس را آغاز و پس از آن بازی را شروع میکند (فقط میزبان).
|
||||
func (h *Hub) startTable(c *Client, hands int) {
|
||||
func (h *Hub) startTable(c *Client, hands, stake int) {
|
||||
t := h.tables[c.tableCode]
|
||||
if t == nil || t.host != c.UserID || t.started {
|
||||
return
|
||||
}
|
||||
t.hands = clampHands(hands) // تعداد دستِ انتخابیِ میزبان (۳/۵/۷)
|
||||
if stake >= 0 {
|
||||
t.stake = stake // آخرین شرطِ سکهای (اگر همراهِ شروع فرستاده شد)
|
||||
}
|
||||
t.started = true
|
||||
cd := mustJSON(countdownMsg{Type: "countdown", Seconds: 3})
|
||||
for _, cl := range t.clients {
|
||||
@@ -298,6 +304,7 @@ func (h *Hub) onStartTable(code string) {
|
||||
room.tier = defaultTier // برای جایزه/ورودی بیاثر است (میز خصوصی)
|
||||
room.private = true
|
||||
room.handsOverride = clampHands(t.hands) // تعداد دستِ انتخابیِ میزبان
|
||||
room.stake = int64(t.stake) // شرطِ سکهایِ هر بازیکن
|
||||
for s := 0; s < 4; s++ {
|
||||
if seats[s].isBot {
|
||||
continue
|
||||
@@ -312,6 +319,22 @@ func (h *Hub) onStartTable(code string) {
|
||||
slog.Info("private room started", "room", room.ID, "code", code, "humans", humans)
|
||||
}
|
||||
|
||||
// setStake شرطِ سکهایِ میز را تنظیم و برای همه پخش میکند (فقط میزبان، پیش از شروع).
|
||||
func (h *Hub) setStake(c *Client, stake int) {
|
||||
t := h.tables[c.tableCode]
|
||||
if t == nil || t.host != c.UserID || t.started {
|
||||
return
|
||||
}
|
||||
if stake < 0 {
|
||||
stake = 0
|
||||
}
|
||||
if stake > 1_000_000 {
|
||||
stake = 1_000_000
|
||||
}
|
||||
t.stake = stake
|
||||
h.broadcastLobby(t)
|
||||
}
|
||||
|
||||
// rotateTable جایگاهِ بازیکنانِ غیرِمیزبان را دورِ میز میچرخاند (فقط میزبان).
|
||||
// میزبان همیشه جایگاهِ اولش را حفظ میکند؛ چرخش تیمبندی را تغییر میدهد.
|
||||
func (h *Hub) rotateTable(c *Client, dir int) {
|
||||
@@ -379,7 +402,7 @@ func (h *Hub) broadcastLobby(t *pendingTable) {
|
||||
cl.trySend(mustJSON(tableLobbyMsg{
|
||||
Type: "table_lobby", Code: t.code, Players: players,
|
||||
Host: cl.UserID == t.host, YouSeat: t.seatOf(i),
|
||||
Remaining: remaining, Unlimited: unlimited,
|
||||
Remaining: remaining, Unlimited: unlimited, Stake: t.stake,
|
||||
}))
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user