feat: 实现 AI 钓鱼与百家乐游戏的参与逻辑,并支持后台面板配置开关

This commit is contained in:
2026-03-26 11:49:36 +08:00
parent 532dc20a2d
commit a68e82107e
9 changed files with 422 additions and 78 deletions
+25
View File
@@ -25,6 +25,7 @@ use App\Services\UserCurrencyService;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Foundation\Queue\Queueable;
use Illuminate\Support\Facades\DB;
use Illuminate\Support\Facades\Redis;
class CloseBaccaratRoundJob implements ShouldQueue
{
@@ -103,6 +104,10 @@ class CloseBaccaratRoundJob implements ShouldQueue
$bet->update(['status' => 'lost', 'payout' => 0]);
$losers[] = "{$username}-{$bet->amount}";
if ($username === 'AI小班长') {
$this->handleAiLoseStreak();
}
continue;
}
@@ -121,9 +126,17 @@ class CloseBaccaratRoundJob implements ShouldQueue
);
$totalPayout += $payout;
$winners[] = "{$username}+".number_format($payout);
if ($username === 'AI小班长') {
Redis::del('ai_baccarat_lose_streak'); // 赢了清空连输
}
} else {
$bet->update(['status' => 'lost', 'payout' => 0]);
$losers[] = "{$username}-".number_format($bet->amount);
if ($username === 'AI小班长') {
$this->handleAiLoseStreak();
}
}
}
});
@@ -149,6 +162,18 @@ class CloseBaccaratRoundJob implements ShouldQueue
$this->pushResultMessage($round, $chatState, $winners, $losers);
}
/**
* 处理 AI 小班长连输逻辑
*/
private function handleAiLoseStreak(): void
{
$streak = Redis::incr('ai_baccarat_lose_streak');
if ($streak >= 3) {
Redis::setex('ai_baccarat_timeout', 3600, 'timeout'); // 连输三次,停赛1小时
Redis::del('ai_baccarat_lose_streak');
}
}
/**
* 向公屏发送开奖结果系统消息(含各用户输赢情况)。
*