params ?? []; $betSeconds = (int) ($config['bet_window_seconds'] ?? 60); // 防止重复开局(如果上一局还在押注中则跳过) if (BaccaratRound::currentRound()) { return; } $now = now(); $closesAt = $now->copy()->addSeconds($betSeconds); // 创建新局次 $round = BaccaratRound::create([ 'status' => 'betting', 'bet_opens_at' => $now, 'bet_closes_at' => $closesAt, ]); // 广播开局事件 broadcast(new BaccaratRoundOpened($round)); // 公屏系统公告 $minBet = number_format($config['min_bet'] ?? 100); $maxBet = number_format($config['max_bet'] ?? 50000); $content = "🎲 【百家乐】第 #{$round->id} 局开始!下注时间 {$betSeconds} 秒,可押「大/小/豹子」,押注范围 {$minBet}~{$maxBet} 金币。"; $msg = [ 'id' => $chatState->nextMessageId(1), 'room_id' => 1, 'from_user' => '系统传音', 'to_user' => '大家', 'content' => $content, 'is_secret' => false, 'font_color' => '#8b5cf6', 'action' => '大声宣告', 'sent_at' => $now->toDateTimeString(), ]; $chatState->pushMessage(1, $msg); broadcast(new MessageSent(1, $msg)); SaveMessageJob::dispatch($msg); // 在下注截止时安排结算任务 CloseBaccaratRoundJob::dispatch($round)->delay($closesAt); } }