ManiaJS/ManiaJS

View on GitHub
src/Server/callbacks/TrackManiaCallbacks.ts

Summary

Maintainability
C
1 day
Test Coverage
/**
 * TrackMania Callbacks
 */

import {CallbackManager} from '../CallbackManager';

/**
 * Run the registers.
 *
 * @param {CallbackManager} manager
 * @param {function} manager.register
 */
export function legacy (manager: CallbackManager) {

  manager.register({
    callback: 'TrackMania.PlayerCheckpoint',
    event: 'trackmania.player.checkpoint',
    parameters: {
      playerId: 0,
      login: 1,
      timeOrScore: 2,
      curLap: 3,
      checkpoint: 4
    }
  });

  manager.register({
    callback: 'TrackMania.PlayerFinish',
    event: 'trackmania.player.finish',
    parameters: {
      playerId: 0,
      login: 1,
      timeOrScore: 2
    }
  });

  manager.register({
    callback: 'TrackMania.PlayerIncoherence',
    event: 'trackmania.player.incoherence',
    parameters: {
      playerId: 0,
      login: 1
    }
  });
}

export function script (manager: CallbackManager) {
  legacy(manager);

  // Common Trackmania

  manager.register({
    callback: 'LibXmlRpc_OnStartCountdown',
    event: 'script.trackmania.startcountdown',
    parameters: {
      login: 0
    }
  });

  manager.register({
    callback: 'LibXmlRpc_OnStartLine',
    event: 'script.trackmania.startline',
    parameters: {
      login: 0
    }
  });

  manager.register({
    callback: 'LibXmlRpc_OnWayPoint',
    event: ['script.trackmania.waypoint', 'script.trackmania.checkpoint'],
    parameters: {
      login: 0,
      blockid: 1,
      racetime: 2,
      waypointnumberrace: 3,
      endrace: 4,
      laptime: 5,
      waypointnumberlap: 6,
      endlap: 7
    }
  });

  manager.register({
    callback: 'LibXmlRpc_OnPlayerFinish',
    event: 'script.trackmania.finish',
    parameters: {
      login: 0,
      blockid: 1,
      time: 2
    }
  });

  manager.register({
    callback: 'LibXmlRpc_OnGiveUp',
    event: 'script.trackmania.giveup',
    parameters: {
      login: 0
    }
  });

  manager.register({
    callback: 'LibXmlRpc_OnRespawn',
    event: 'script.trackmania.respawn',
    parameters: {
      login: 0,
      blockid: 1,
      waypointnumberrace: 2,
      waypointnumberlap: 3,
      respawns: 4
    }
  });

  //The stunts names are: None, StraightJump, Flip, BackFlip, Spin, Aerial, AlleyOop, Roll, Corkscrew, SpinOff, Rodeo,
  // FlipFlap, Twister, FreeStyle, SpinningMix, FlippingChaos, RollingMadness, WreckNone, WreckStraightJump, WreckFlip,
  // WreckBackFlip, WreckSpin, WreckAerial, WreckAlleyOop, WreckRoll, WreckCorkscrew, WreckSpinOff, WreckRodeo,
  // WreckFlipFlap, WreckTwister, WreckFreeStyle, WreckSpinningMix, WreckFlippingChaos, WreckRollingMadness,
  // TimePenalty, RespawnPenalty, Grind, Reset.
  manager.register({
    callback: 'LibXmlRpc_OnStunt',
    event: 'script.trackmania.stunt',
    parameters: {
      login: 0,
      stuntpoints: 1,
      combo: 2,
      totalscore: 3,
      factor: 4,
      stuntname: 5,
      angle: 6,
      straight: 7,
      reversed: 8,
      masterjump: 9
    }
  });

  manager.register({
    callback: 'LibXmlRpc_PlayerRanking',
    event: 'script.player.ranking',
    parameters: {
      score: 0,
      login: 1,
      nickname: 2,
      teamid: 3,
      spectatorstatus: 4,
      awaystatus: 5,
      points: 6,
      zone: 7
    }
  });

  manager.register({
    callback: 'LibXmlRpc_PlayersRanking',
    event: 'script.players.ranking',
    parse (raw) {
      let res = {};
      raw.forEach((playerRaw) => {
        let playerSplit = playerRaw.split(/:/);

        res[playerSplit[0]] = {
          login: playerSplit[0],
          rank: parseInt(playerSplit[1]),
          bestcheckpoints: playerSplit[2].split(/,/),
          teamid: parseInt(playerSplit[3]),
          spectatorstatus: playerSplit[4] === 'True',
          awaystatus: playerSplit[5] === 'True',
          besttime: parseInt(playerSplit[6]),
          zone: playerSplit[7],
          points: parseInt(playerSplit[8]),
          score: parseInt(playerSplit[9])
        };
      });
      return res;
    }
  });

  manager.register({
    callback: 'LibXmlRpc_PlayersScores',
    event: 'script.players.scores',
    parse (raw) {
      let res = {};
      raw.forEach((playerRaw: string) => {
        let playerSplit = playerRaw.split(/:/);
        res[playerSplit[0]] = parseInt(playerSplit[1]);
      });
      return res;
    }
  });

  manager.register({
    callback: 'LibXmlRpc_PlayersTimes',
    event: 'script.players.times',
    parse (raw) {
      let res = {};
      raw.forEach((playerRaw: string) => {
        let playerSplit = playerRaw.split(/:/);
        res[playerSplit[0]] = parseInt(playerSplit[1]);
      });
    }
  });

  manager.register({
    callback: 'LibXmlRpc_Scores',
    event: 'script.scores',
    parse (raw) {return raw;}
  });

  manager.register({
    callback: 'LibXmlRpc_TeamsScores',
    event: 'script.teams.scores',
    parse (raw) {return raw;}
  });

  manager.register({
    callback: 'LibXmlRpc_TeamsMode',
    event: 'script.teams.mode',
    parameters: {
      teams: 0
    }
  });


  // Rounds/Cup

  manager.register({ // Answer on Rounds_GetPointsRepartition
    callback: 'Rounds_PointsRepartition',
    event: 'script.trackmania.rounds.pointsrepartition',
    parse (raw) {return raw;}
  });
}