mirror of
https://github.com/lexogrine/cs2-react-hud.git
synced 2025-12-10 02:42:49 +01:00
88 lines
2.5 KiB
TypeScript
88 lines
2.5 KiB
TypeScript
import { CSGOGSI, Player, PlayerExtension } from 'csgogsi';
|
|
import api, { isDev } from '..';
|
|
|
|
export const hudIdentity = {
|
|
name: '',
|
|
isDev
|
|
};
|
|
|
|
export const GSI = new CSGOGSI();
|
|
GSI.regulationMR = 12;
|
|
|
|
GSI.on("data", data => {
|
|
loadPlayers(data.players);
|
|
});
|
|
|
|
const requestedSteamIDs: string[] = [];
|
|
|
|
const loadPlayers = async (players: Player[]) => {
|
|
const leftOvers = players.filter(player => !requestedSteamIDs.includes(player.steamid));
|
|
const leftOverSteamids = leftOvers.map(player => player.steamid);
|
|
if(!leftOvers.length) return;
|
|
|
|
requestedSteamIDs.push(...leftOverSteamids);
|
|
|
|
const extensions = await api.players.get(leftOverSteamids);
|
|
|
|
const playersExtensions: PlayerExtension[] = extensions.map(player => (
|
|
{
|
|
id: player._id,
|
|
name: player.username,
|
|
realName: `${player.firstName} ${player.lastName}`,
|
|
steamid: player.steamid,
|
|
country: player.country,
|
|
avatar: player.avatar,
|
|
extra: player.extra,
|
|
})
|
|
)
|
|
|
|
GSI.players.push(...playersExtensions);
|
|
|
|
|
|
leftOvers.forEach(player => {
|
|
loadAvatarURL(player);
|
|
});
|
|
}
|
|
|
|
|
|
interface AvatarLoader {
|
|
loader: Promise<string>,
|
|
url: string,
|
|
}
|
|
|
|
const avatars: { [key: string]: AvatarLoader } = {};
|
|
|
|
const loadAvatarURL = (player: Player) => {
|
|
if(!player.steamid) return;
|
|
if(avatars[player.steamid]) return avatars[player.steamid].url;
|
|
avatars[player.steamid] = {
|
|
url: player.avatar || '',
|
|
loader: new Promise((resolve) => {
|
|
api.players.getAvatarURLs(player.steamid).then(result => {
|
|
const avatarUrl = result.custom || result.steam;
|
|
const existing = GSI.players.find(playerEx => playerEx.steamid === player.steamid);
|
|
const target = existing || {
|
|
id: player.steamid,
|
|
name: player.name,
|
|
realName: player.realName,
|
|
steamid: player.steamid,
|
|
country: player.country,
|
|
avatar: player.avatar,
|
|
extra: player.extra
|
|
}
|
|
if(target) target.avatar = avatarUrl;
|
|
|
|
if(!existing){
|
|
GSI.players.push(target);
|
|
}
|
|
|
|
|
|
avatars[player.steamid].url = result.custom || result.steam;
|
|
resolve(result.custom || result.custom);
|
|
}).catch(() => {
|
|
delete avatars[player.steamid];
|
|
resolve('');
|
|
});
|
|
})
|
|
}
|
|
} |