|
|
| Строка 1: |
Строка 1: |
| (function () {
| |
| function formatRoundTime(rawTime) {
| |
| if (!rawTime) {
| |
| return '?';
| |
| }
| |
|
| |
|
| try {
| |
| var normalized = rawTime.replace('Z', '+00:00');
| |
| var start = new Date(normalized);
| |
| var now = new Date();
| |
|
| |
| if (Number.isNaN(start.getTime())) {
| |
| return '?';
| |
| }
| |
|
| |
| var totalMinutes = Math.max(0, Math.floor((now - start) / 60000));
| |
| var hours = Math.floor(totalMinutes / 60);
| |
| var minutes = totalMinutes % 60;
| |
|
| |
| if (hours > 0) {
| |
| return hours + 'ч ' + minutes + 'м';
| |
| }
| |
|
| |
| return minutes + 'м';
| |
| } catch (e) {
| |
| return '?';
| |
| }
| |
| }
| |
|
| |
| function setStatusOffline() {
| |
| var main = document.getElementById('redstar-status-main');
| |
| var details = document.getElementById('redstar-status-details');
| |
|
| |
| if (main) {
| |
| main.textContent = '● Оффлайн';
| |
| main.style.color = '#ff4545';
| |
| }
| |
|
| |
| if (details) {
| |
| details.textContent = 'Сервер недоступен';
| |
| }
| |
| }
| |
|
| |
| function setStatus(data) {
| |
| var main = document.getElementById('redstar-status-main');
| |
| var details = document.getElementById('redstar-status-details');
| |
|
| |
| if (!main || !details) {
| |
| return;
| |
| }
| |
|
| |
| var players = data.players ?? '?';
| |
| var maxPlayers = data.soft_max_players ?? '?';
| |
| var mapName = data.map;
| |
| var runLevel = data.run_level;
| |
| var roundStartTime = data.round_start_time;
| |
|
| |
| main.textContent = '● Онлайн';
| |
| main.style.color = '#4ee26b';
| |
|
| |
| if (runLevel === 0 || !mapName || !roundStartTime) {
| |
| details.textContent = players + '/' + maxPlayers + ' игроков · Лобби';
| |
| return;
| |
| }
| |
|
| |
| details.textContent = players + '/' + maxPlayers + ' игроков · ' + mapName + ' · ' + formatRoundTime(roundStartTime);
| |
| }
| |
|
| |
| function updateStatus() {
| |
| fetch('/ss14-status', { cache: 'no-store' })
| |
| .then(function (response) {
| |
| if (!response.ok) {
| |
| throw new Error('Bad response');
| |
| }
| |
|
| |
| return response.json();
| |
| })
| |
| .then(setStatus)
| |
| .catch(setStatusOffline);
| |
| }
| |
|
| |
| mw.hook('wikipage.content').add(function () {
| |
| updateStatus();
| |
| setInterval(updateStatus, 30000);
| |
| });
| |
| })();
| |