{{-- GIGAX_AC_PANEL_V2 - PAINEL COMPLETO --}} @extends('layouts.app') @section('title', 'Monitor do Anti-Cheat - GIGAX ARENA') @section('page_title', 'Monitor do Anti-Cheat') @php use Illuminate\Support\Facades\Route; $devices = collect($devices ?? []); $allDevices = collect($allDevices ?? $devices); $onlinePlayers = $allDevices->filter(fn ($d) => (bool) ($d->is_online ?? false))->values(); $recentIncidents = collect($recentIncidents ?? []); $recentMatches = collect($recentMatches ?? []); $playerUrl = static function ($id) { if (!$id) return '#'; if (Route::has('players.show')) return route('players.show', $id); if (Route::has('player.profile')) return route('player.profile', $id); return url('/players/' . $id); }; $adminMatchesUrl = Route::has('admin.matches') ? route('admin.matches') : url('/admin/matches'); $teamspeakUrl = Route::has('admin.teamspeak') ? route('admin.teamspeak') : url('/admin/teamspeak'); $usersUrl = Route::has('admin.users') ? route('admin.users') : url('/admin/users'); $initial = static function ($name) { $name = trim((string) $name); return $name !== '' ? mb_strtoupper(mb_substr($name, 0, 1)) : 'G'; }; $incidentLabel = static function ($type) { $type = strtolower((string) $type); if (str_contains($type, 'macro') || str_contains($type, 'click')) return 'Macro / Auto Click'; if (str_contains($type, 'inject')) return 'Injeção Detectada'; if (str_contains($type, 'file') || str_contains($type, 'integrity') || str_contains($type, 'modif')) return 'Modificação de Arquivos'; if (str_contains($type, 'vpn') || str_contains($type, 'proxy')) return 'Proxy / VPN'; return $type !== '' ? ucwords(str_replace(['_','-'], ' ', $type)) : 'Incidente'; }; @endphp @push('styles') @endpush @section('content')
Dispositivos{{ $stats['total'] }}● monitorados▱ Online agora{{ $stats['online'] }}● heartbeat real♙ Bloqueados{{ $stats['blocked'] }}● segurança♢ Incidentes abertos{{ $stats['open_incidents'] }}● análise△ Partidas ativas{{ $stats['active_matches'] }}● agora🎮 Jogadores em fila{{ $stats['queue_players'] }}● fila MIX♧
Anti-Cheat OnlineVer todos →
Atividade dos últimos 7 diasdados reais
Dispositivos Incidentes Bloqueios
Status do sistemaao vivo
◉ Serviço Anti-Cheat{{ $system['ac_service'] ? 'Online' : 'Indisponível' }}
◎ Banco de Dados{{ $system['database'] ? 'Online' : 'Offline' }}
◷ Última verificação{{ $system['last_check_seconds'] !== null ? $system['last_check_seconds'].'s atrás' : '—' }}
◫ Versão AC{{ $system['client_version'] ?: '—' }}
♧ Conexões ativas{{ $system['connections'] }}
Tipos de incidentes (7 dias)Ver →
{{ collect($incidentTypes)->sum('total') }}
Total
@forelse(collect($incidentTypes) as $idx => $it) @php $colors = ['#ff3f57','#ff9f0a','#2694eb','#7e3ff2','#25d7df']; @endphp
{{ $incidentLabel($it['type']) }}{{ $it['total'] }}
@empty
Sem incidentes0
@endforelse
Jogadores e dispositivos ({{ $devices->count() }} registros exibidos)Usuários →
@forelse($devices as $d) @php $blocked = in_array(strtolower((string)($d->status ?? '')), ['blocked','banned','bloqueado','banido'], true); $url = $playerUrl($d->user_id); @endphp @empty @endforelse
JogadorE-mailHWID / IDStatusDispositivoACÚltimo heartbeatRisco
@if($d->avatar_url)@else{{ $initial($d->nickname) }}@endif
{{ $d->nickname }}#{{ $d->user_id ?: '—' }}
{{ $d->email ?: '—' }} {{ $d->machine_hwid_hash ?: ($d->device_uuid ?: '—') }} {{ $blocked ? 'BLOQUEADO' : ($d->is_online ? 'ONLINE' : 'OFFLINE') }}
{{ strtoupper($d->status ?: '-') }}
{{ $d->computer_name ?: '—' }}
{{ collect([$d->windows_user,$d->os_version])->filter()->implode(' · ') ?: '—' }}
{{ $d->client_version ?: '—' }} {{ $d->seconds_since_heartbeat !== null ? $d->seconds_since_heartbeat.'s atrás' : ($d->last_seen_at ?: '—') }} {{ $d->risk_score }}
Nenhum dispositivo encontrado.
Incidentes recentesVer todos →
@forelse($recentIncidents as $i) @php $type = $i->event_type ?? $i->incident_type ?? 'incident'; $sev = strtolower((string)($i->severity ?? 'low')); $uid = $i->user_id ?? null; @endphp ⚑ {{ $incidentLabel($type) }}{{ $i->nickname ?? ('Jogador #'.$uid) }} {{ !empty($i->detected_at) ? \Illuminate\Support\Carbon::parse($i->detected_at)->diffForHumans(short:true) : '' }}
{{ strtoupper($sev) }}
@empty
Nenhum incidente recenteMonitor limpo
@endforelse
Histórico de partidasVer todos →
@forelse($recentMatches as $m) @php $active = in_array(strtolower((string)($m->status ?? '')), ['waiting','ready_check','veto','active','in_progress','playing'], true); @endphp
Partida #{{ $m->id }}{{ $active ? 'ATIVA' : 'FINALIZADA' }}
{{ $m->title ?? $m->training_type ?? 'Partida GIGAX' }}
{{ $m->map_name ?? 'Mapa —' }} · {{ strtoupper((string)($m->status ?? '-')) }}
@empty
Nenhuma partida encontrada.
@endforelse
@endsection @push('scripts') @endpush