add: marketplace
This commit is contained in:
@ -1,4 +1,4 @@
|
||||
import { fetchActiveServers, fetchOnlinePlayers } from '../api';
|
||||
import { fetchActiveServers, fetchOnlinePlayers, Server } from '../api';
|
||||
|
||||
/**
|
||||
* Проверяет, находится ли указанный игрок онлайн на любом из серверов
|
||||
@ -77,3 +77,52 @@ export async function isPlayerOnlineOnServer(
|
||||
return false;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Проверяет, на каком сервере находится игрок
|
||||
* @param username Имя игрока для проверки
|
||||
* @returns Объект с информацией: онлайн ли игрок и на каком сервере
|
||||
*/
|
||||
export async function getPlayerServer(
|
||||
username: string,
|
||||
): Promise<{ online: boolean; server: Server | null }> {
|
||||
try {
|
||||
// Получаем список активных серверов
|
||||
const servers = await fetchActiveServers();
|
||||
|
||||
// Фильтруем серверы с игроками
|
||||
const serversWithPlayers = servers.filter(
|
||||
(server) => server.online_players > 0,
|
||||
);
|
||||
|
||||
// Если нет серверов с игроками, игрок точно не онлайн
|
||||
if (serversWithPlayers.length === 0) {
|
||||
return { online: false, server: null };
|
||||
}
|
||||
|
||||
// Проверяем каждый сервер на наличие игрока
|
||||
for (const server of serversWithPlayers) {
|
||||
try {
|
||||
const onlinePlayers = await fetchOnlinePlayers(server.id);
|
||||
|
||||
if (
|
||||
Array.isArray(onlinePlayers.online_players) &&
|
||||
onlinePlayers.online_players.some(
|
||||
(player) => player.username === username,
|
||||
)
|
||||
) {
|
||||
// Игрок найден на этом сервере
|
||||
return { online: true, server };
|
||||
}
|
||||
} catch (error) {
|
||||
console.error(`Ошибка при проверке сервера ${server.id}:`, error);
|
||||
}
|
||||
}
|
||||
|
||||
// Игрок не найден ни на одном сервере
|
||||
return { online: false, server: null };
|
||||
} catch (error) {
|
||||
console.error('Ошибка при проверке сервера игрока:', error);
|
||||
return { online: false, server: null };
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user