mirror of
https://github.com/amiayweb/Hytale-F2P.git
synced 2026-02-26 18:11:46 -03:00
155 lines
3.8 KiB
JavaScript
155 lines
3.8 KiB
JavaScript
|
|
const API_URL = 'https://api.hytalef2p.com/api';
|
|
let updateInterval = null;
|
|
let currentUserId = null;
|
|
|
|
export async function initPlayersCounter() {
|
|
setupPlayersCounter();
|
|
|
|
if (window.electronAPI && window.electronAPI.getUserId) {
|
|
currentUserId = await window.electronAPI.getUserId();
|
|
} else {
|
|
console.error('Electron API not available');
|
|
return;
|
|
}
|
|
|
|
let username = 'Player';
|
|
if (window.electronAPI.loadUsername) {
|
|
const savedUsername = await window.electronAPI.loadUsername();
|
|
if (savedUsername) username = savedUsername;
|
|
}
|
|
|
|
await registerPlayer(username, currentUserId);
|
|
|
|
await fetchPlayerStats();
|
|
startAutoUpdate();
|
|
}
|
|
|
|
function setupPlayersCounter() {
|
|
const counterElement = document.getElementById('playersOnlineCounter');
|
|
if (!counterElement) {
|
|
console.warn('Players counter element not found');
|
|
}
|
|
}
|
|
|
|
async function fetchPlayerStats() {
|
|
try {
|
|
const response = await fetch(`${API_URL}/players/stats`);
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`API error: ${response.status}`);
|
|
}
|
|
|
|
const data = await response.json();
|
|
updateCounterDisplay(data);
|
|
} catch (error) {
|
|
console.error('Error fetching player stats:', error);
|
|
updateCounterDisplay({ online: 0, peak: 0 });
|
|
}
|
|
}
|
|
|
|
function updateCounterDisplay(stats) {
|
|
const counterElement = document.getElementById('playersOnlineCounter');
|
|
const onlineCount = document.getElementById('onlineCount');
|
|
|
|
if (onlineCount) {
|
|
onlineCount.textContent = stats.online || 0;
|
|
}
|
|
|
|
if (counterElement) {
|
|
counterElement.classList.add('updated');
|
|
setTimeout(() => {
|
|
counterElement.classList.remove('updated');
|
|
}, 300);
|
|
}
|
|
}
|
|
|
|
async function registerPlayer(username, userId) {
|
|
try {
|
|
const response = await fetch(`${API_URL}/players/register`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({ username, userId })
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Failed to register player: ${response.status}`);
|
|
}
|
|
|
|
const data = await response.json();
|
|
currentUserId = userId;
|
|
console.log('Player registered:', data);
|
|
|
|
await fetchPlayerStats();
|
|
|
|
return data;
|
|
} catch (error) {
|
|
console.error('Error registering player:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
async function unregisterPlayer(userId) {
|
|
try {
|
|
const response = await fetch(`${API_URL}/players/unregister`, {
|
|
method: 'POST',
|
|
headers: {
|
|
'Content-Type': 'application/json'
|
|
},
|
|
body: JSON.stringify({ userId })
|
|
});
|
|
|
|
if (!response.ok) {
|
|
throw new Error(`Failed to unregister player: ${response.status}`);
|
|
}
|
|
|
|
const data = await response.json();
|
|
currentUserId = null;
|
|
console.log('Player unregistered:', data);
|
|
|
|
await fetchPlayerStats();
|
|
|
|
return data;
|
|
} catch (error) {
|
|
console.error('Error unregistering player:', error);
|
|
return null;
|
|
}
|
|
}
|
|
|
|
function startAutoUpdate() {
|
|
updateInterval = setInterval(async () => {
|
|
await fetchPlayerStats();
|
|
|
|
if (currentUserId) {
|
|
const username = window.LauncherState?.username || 'Player';
|
|
await registerPlayer(username, currentUserId);
|
|
}
|
|
}, 3000);
|
|
}
|
|
|
|
function stopAutoUpdate() {
|
|
if (updateInterval) {
|
|
clearInterval(updateInterval);
|
|
updateInterval = null;
|
|
}
|
|
}
|
|
|
|
|
|
window.addEventListener('beforeunload', () => {
|
|
if (currentUserId) {
|
|
const data = JSON.stringify({ userId: currentUserId });
|
|
navigator.sendBeacon(`${API_URL}/players/unregister`, data);
|
|
}
|
|
stopAutoUpdate();
|
|
});
|
|
|
|
window.PlayersAPI = {
|
|
register: registerPlayer,
|
|
unregister: unregisterPlayer,
|
|
fetchStats: fetchPlayerStats
|
|
};
|
|
|
|
document.addEventListener('DOMContentLoaded', initPlayersCounter);
|