jsplanet
Version:
A controller for Trackmania 2020 dedicated server.
91 lines (90 loc) • 2.96 kB
JavaScript
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 };