支持所有游戏按房间范围配置和运行

This commit is contained in:
pllx
2026-04-29 14:37:28 +08:00
parent 3672140987
commit 1607f57e3c
37 changed files with 1033 additions and 255 deletions
@@ -5,7 +5,6 @@
@section('content')
@php
$riddleTypeOptions = \App\Models\Riddle::typeOptions();
$availableRooms = \App\Models\Room::orderBy('id')->get();
@endphp
<div class="space-y-6">
@@ -88,6 +87,7 @@
{{-- 参数配置区域 --}}
<div class="p-5">
<form action="{{ route('admin.game-configs.params', $game) }}" method="POST"
data-game-room-form
@if ($game->game_key === 'idiom') data-idiom-config-form @endif>
@csrf
@@ -97,8 +97,9 @@
$hiddenLegacyKeys = $game->game_key === 'mystery_box'
? ['min_reward', 'max_reward', 'rare_min_reward', 'rare_max_reward']
: [];
$hiddenConfigKeys = ['room_scope_mode', 'room_ids'];
$paramKeys = array_values(array_unique(array_merge(array_keys($labels), array_keys($params))));
$paramKeys = array_values(array_filter($paramKeys, fn ($key) => ! in_array($key, $hiddenLegacyKeys, true)));
$paramKeys = array_values(array_filter($paramKeys, fn ($key) => ! in_array($key, array_merge($hiddenLegacyKeys, $hiddenConfigKeys), true)));
@endphp
@if ($game->game_key === 'idiom')
@@ -108,6 +109,9 @@
'riddleTypeOptions' => $riddleTypeOptions,
])
@else
@php
$roomScopeConfig = gameRoomScopeConfig($params);
@endphp
<div class="grid grid-cols-2 gap-4 md:grid-cols-3 lg:grid-cols-4">
@foreach ($paramKeys as $paramKey)
@php
@@ -155,6 +159,14 @@
</div>
@endforeach
</div>
<div class="mt-4 border-t border-gray-100 pt-4">
@include('admin.game-configs.partials.common-room-scope', [
'availableRooms' => $availableRooms,
'roomScopeConfig' => $roomScopeConfig,
'roomScopeTitle' => '参与房间',
])
</div>
@endif
<div class="mt-4 flex items-center gap-3">
@@ -189,7 +201,7 @@
style="padding:8px 16px; background:linear-gradient(135deg,#7f1d1d,#ef4444); color:#fff; border:none; border-radius:8px; font-size:13px; font-weight:700; cursor:pointer; transition:opacity .15s;">
☠️ 投放黑化箱
</button>
<span class="text-xs text-gray-400">直接向 #1 房间投放,立即广播暗号</span>
<span class="text-xs text-gray-400">投放到当前配置的首选房间,立即广播暗号。</span>
</div>
</div>
@endif
@@ -461,4 +473,16 @@
->all(),
];
}
/**
* 解析通用游戏的房间范围配置。
*
* @return array{room_scope_mode:string,room_ids:array<int, int>}
*/
function gameRoomScopeConfig(array $params): array
{
$roomScopeService = app(\App\Services\GameRoomScopeService::class);
return $roomScopeService->getScopeConfigForParams($params);
}
@endphp