UNPKG

jsplanet

Version:

A controller for Trackmania 2020 dedicated server.

91 lines (90 loc) 2.96 kB
import { loginToUuid } from "../utils.js"; import { TeamColor } from "./Teams.js"; var PlayerStatus; (function (PlayerStatus) { PlayerStatus["Player"] = "Player"; PlayerStatus["Spectator"] = "Spectator"; })(PlayerStatus || (PlayerStatus = {})); var SpectatorStatus; (function (SpectatorStatus) { SpectatorStatus[SpectatorStatus["UserSelectable"] = 0] = "UserSelectable"; SpectatorStatus[SpectatorStatus["Spectator"] = 1] = "Spectator"; SpectatorStatus[SpectatorStatus["Player"] = 2] = "Player"; SpectatorStatus[SpectatorStatus["SpectatorSelectable"] = 3] = "SpectatorSelectable"; })(SpectatorStatus || (SpectatorStatus = {})); class Player { isConnected = true; login; nickname = ""; status = PlayerStatus.Player; team = TeamColor.None; get uuid() { return loginToUuid(this.login); } remote; constructor(remote, data) { this.remote = remote; this.login = data.login; this.patch(data); } async fetch() { try { const [playerInfos] = await this.remote.callMethod("GetPlayerInfo", this.login); this.patch({ isConnected: true, login: playerInfos.Login, nickname: playerInfos.NickName, status: playerInfos.SpectatorStatus === 0 ? PlayerStatus.Player : PlayerStatus.Spectator, team: playerInfos.TeamId, }); } catch { this.patch({ isConnected: false, login: this.login, nickname: null, status: null, team: null, }); } return this; } async forcePlayer() { const [isSuccess] = await this.remote.callMethod("ForceSpectator", this.login, SpectatorStatus.Player); return isSuccess; } async forceSpectator() { const [isSuccess] = await this.remote.callMethod("ForceSpectator", this.login, SpectatorStatus.SpectatorSelectable); return isSuccess; } async kick() { const [isSuccess] = await this.remote.callMethod("Kick", this.login); return isSuccess; } async send(message) { const [isSuccess] = await this.remote.callMethod("ChatSendServerMessageToLogin", message, this.login); return isSuccess; } patch(data) { if (data.login !== this.login) { throw new Error("Patching wrong player."); } if (data.isConnected !== null) { this.isConnected = data.isConnected; } if (data.nickname !== null) { this.nickname = data.nickname; } if (data.status !== null) { this.status = data.status; } if (data.team !== null) { this.team = data.team; } return this; } } export default Player; export { PlayerStatus, SpectatorStatus };