exec("CREATE TABLE IF NOT EXISTS hourly_active_players (player_name TEXT PRIMARY KEY, first_seen INTEGER NOT NULL, last_seen INTEGER NOT NULL, hour_key TEXT NOT NULL)"); $db->exec("CREATE TABLE IF NOT EXISTS online_players (player_name TEXT PRIMARY KEY, login_time INTEGER DEFAULT 0)"); $currentHourKey = date('Y-m-d H'); // ★ 查询本小时活跃过的所有玩家(包括已离线但本小时曾上线的) $res = $db->query("SELECT player_name, first_seen, last_seen FROM hourly_active_players WHERE hour_key = '" . SQLite3::escapeString($currentHourKey) . "' ORDER BY first_seen ASC"); $now = time(); while ($row = $res->fetchArray(SQLITE3_ASSOC)) { // 检查玩家当前是否在线(从online_players表判断) $checkStmt = $db->prepare("SELECT 1 FROM online_players WHERE player_name = :name"); $checkStmt->bindValue(':name', $row['player_name'], SQLITE3_TEXT); $checkRes = $checkStmt->execute(); $isOnline = $checkRes->fetchArray() !== false; $online[] = [ 'name' => $row['player_name'], 'login_time' => (int)$row['first_seen'], 'login_time_fmt' => $row['first_seen'] > 0 ? date('H:i:s', (int)$row['first_seen']) : '-', 'duration' => $row['first_seen'] > 0 ? $now - (int)$row['first_seen'] : 0, 'is_online' => $isOnline, 'last_seen' => (int)$row['last_seen'], ]; } $count = count($online); } catch (\Throwable $e) { debugLog('[active_players] 查询异常: ' . $e->getMessage()); } return ['online_list' => $online, 'online_count' => $count]; } if ($isApi) { success(getActivePlayers()); exit; } $initialState = json_encode(getActivePlayers(), JSON_UNESCAPED_UNICODE); ?> SDF1 - 在线活跃

🟢 本小时在线活跃

每10秒刷新
加载中...