UNPKG

jsplanet

Version:

A controller for Trackmania 2020 dedicated server.

76 lines (75 loc) 3.34 kB
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;