jsplanet
Version:
A controller for Trackmania 2020 dedicated server.
76 lines (75 loc) • 3.34 kB
JavaScript
import { Checkpoint, EndRoundEnd, Round, Scores, TeamColor, WarmupRound, } from "../structures/index.js";
class ScoresManager {
jsPlanet;
playersManager;
remote;
constructor(jsPlanet, remote, playersManager) {
this.jsPlanet = jsPlanet;
this.remote = remote;
this.playersManager = playersManager;
this.setupListeners();
}
setupListeners() {
this.remote.on("Trackmania.Event.WayPoint", (waypoint) => {
const checkpoint = new Checkpoint(this.playersManager["create"]({
isConnected: null,
login: waypoint.login,
nickname: null,
status: null,
team: null,
}), waypoint.racetime, waypoint.checkpointinrace, waypoint.isendrace);
this.jsPlanet.emit("checkpoint", checkpoint);
if (checkpoint.isRaceEnded) {
this.jsPlanet.emit("race", checkpoint);
}
});
this.remote.on("Trackmania.Scores", (scores) => {
const score = new Scores(scores.section, scores.players.map((player) => ({
mapPoints: player.mappoints,
matchPoints: player.matchpoints,
player: this.playersManager["create"]({
isConnected: null,
login: player.login,
nickname: player.name,
status: null,
team: null,
}),
raceTime: player.prevracetime,
roundPoints: player.roundpoints,
})), scores.teams.map((team) => ({
mapPoints: team.mappoints,
matchPoints: team.matchpoints,
name: team.name === "Blue" ? TeamColor.Blue : TeamColor.Red,
roundPoints: team.roundpoints,
})));
this.jsPlanet.emit("scores", score);
});
this.remote.on("Trackmania.WarmUp.Start", () => {
this.jsPlanet.emit("warmupStart");
});
this.remote.on("Trackmania.WarmUp.StartRound", (round) => {
const warmupRound = new WarmupRound(round.current, round.total);
this.jsPlanet.emit("warmupRoundStart", warmupRound);
});
this.remote.on("Trackmania.WarmUp.EndRound", (round) => {
const warmupRound = new WarmupRound(round.current, round.total);
this.jsPlanet.emit("warmupRoundEnd", warmupRound);
});
this.remote.on("Trackmania.WarmUp.End", () => {
this.jsPlanet.emit("warmupEnd");
});
this.remote.on("Maniaplanet.StartRound_Start", (round) => {
this.jsPlanet.emit("startRoundStart", new Round(round.count, round.valid ?? null));
});
this.remote.on("Maniaplanet.StartRound_End", (round) => {
this.jsPlanet.emit("startRoundEnd", new Round(round.count, round.valid ?? null));
});
this.remote.on("Maniaplanet.EndRound_Start", (round) => {
this.jsPlanet.emit("endRoundStart", new Round(round.count, round.valid ?? null));
});
this.remote.on("Maniaplanet.EndRound_End", (round) => {
this.jsPlanet.emit("endRoundEnd", new EndRoundEnd(round.count, round.valid ?? null, round.isvalid ?? true));
});
}
}
export default ScoresManager;