UNPKG

maniajs

Version:

ManiaPlanet (Dedicated) Server Controller.

241 lines (216 loc) 5.29 kB
/** * ManiaPlanet Generic Callbacks * * Maps generic mp callbacks into events. */ 'use strict'; /** * Run the registers. * * @param {CallbackManager} manager * @param {function} manager.register */ Object.defineProperty(exports, "__esModule", { value: true }); exports.default = function (manager) { /** * PLAYER EVENTS */ // Connect manager.register({ callback: 'ManiaPlanet.PlayerConnect', event: 'player.connect', parameters: { login: 0, spectator: 1 }, pass: function pass(params) { return false; // We don't have the player info yet, wait until info change event is fetching player info from db. } }); // Disconnect manager.register({ callback: 'ManiaPlanet.PlayerDisconnect', event: 'player.disconnect', parameters: { login: 0, reason: 1 }, flow: function flow(app, params) { return app.gameFacade.players.disconnect(params.login); } }); // Chat manager.register({ callback: 'ManiaPlanet.PlayerChat', event: 'player.chat', parameters: { playerid: 0, login: 1, text: 2, command: 3 }, pass: function pass(params) { return params[0] !== 0; // Prevent the server itself being seen as a chat message event. } }); // info change manager.register({ callback: 'ManiaPlanet.PlayerInfoChanged', event: 'player.change', parse: function parse(raw) { var info = raw[0]; var isSpectator = info.SpectatorStatus % 10; var isTempSpectator = info.SpectatorStatus / 10 % 10; var isPureSpectator = info.SpectatorStatus / 100 % 10; var autoTarget = info.SpectatorStatus / 1000 % 10; var targetId = info.SpectatorStatus / 10000; return { login: info.Login, nickName: info.NickName, playerId: info.PlayerId, teamId: info.TeamId, spectatorStatus: info.SpectatorStatus, flags: info.Flags, isSpectator: isSpectator, isTempSpectator: isTempSpectator, isPureSpectator: isPureSpectator, autoTarget: autoTarget, targetId: targetId }; }, flow: function flow(app, params) { if (!app.gameFacade.players.list.hasOwnProperty(params.login) || app.gameFacade.players.list[params.login].disconnected) { return app.gameFacade.players.connect(params.login, params.nickName, params, true); } return Promise.resolve(); } }); // alies changed manager.register({ callback: 'ManiaPlanet.PlayerAlliesChanged', event: 'player.alieschange', parameters: { login: 0 } }); // manialink answer manager.register({ callback: 'ManiaPlanet.PlayerManialinkPageAnswer', event: 'player.manialinkanswer', parameters: { playerid: 0, login: 1, answer: 2, entries: 3 }, flow: function flow(app, params) { // First call the ui manager. return app.uiFacade.manager.answer(params); } }); /** * SERVER EVENTS */ manager.register({ callback: 'ManiaPlanet.Echo', event: 'server.echo', parameters: { internal: 0, public: 1 } }); manager.register({ callback: 'ManiaPlanet.ServerStart', event: 'server.start' }); manager.register({ callback: 'ManiaPlanet.ServerStop', event: 'server.stop' }); /** * MATCH EVENTS */ manager.register({ callback: 'ManiaPlanet.BeginMatch', event: 'match.begin' }); manager.register({ callback: 'ManiaPlanet.EndMatch', event: 'match.end', parameters: { rankings: 0, winnerTeam: 1 } }); /** * MAP EVENTS */ manager.register({ callback: 'ManiaPlanet.BeginMap', event: 'map.begin', parse: function parse(raw) { return raw[0]; }, flow: function flow(app, params) { // Update Infos and map list. return app.serverFacade.client.updateInfos().then(function () { return app.gameFacade.maps.begin(params.UId); }).then(function () { return app.pluginFacade.manager.begin(); }); } }); manager.register({ callback: 'ManiaPlanet.EndMap', event: 'map.end', parameters: { map: 0 } }); // TODO: ManiaPlanet.StatusChanged /** * OTHER EVENTS */ manager.register({ callback: 'ManiaPlanet.BillUpdated', event: 'bill.update', parameters: { billId: 0, state: 1, stateName: 2, transactionId: 3 } }); manager.register({ callback: 'ManiaPlanet.TunnelDataReceived', event: 'server.tunneldatareceived', parameters: { playerId: 0, login: 1, data: 2 // base64, needs decoding maybe? } }); manager.register({ callback: 'ManiaPlanet.MapListModified', event: 'map.listchange', parameters: { currentMapIndex: 0, nextMapIndex: 1, isListModified: 2 } }); manager.register({ callback: 'ManiaPlanet.VoteUpdated', event: 'vote.update', parameters: { stateName: 0, // StateName values: NewVote, VoteCancelled, VotePassed or VoteFailed login: 1, cmdName: 2, cmdParam: 3 } }); // custom script callbacks. // TODO: ModeScriptCallback + ModeScriptCallbackArray };