UNPKG

rce.js

Version:

A wrapper for Rust Console Edition (RCE) that allows you to use RCON to create integrations.

84 lines 3.38 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.parseTeamInfo = parseTeamInfo; const regularExpressions_1 = require("./regularExpressions"); /** * Parses the team info response from relationshipmanager.teaminfoall command * @param teamInfoResponse The raw response from the team info command * @param players List of currently connected players to filter out disconnected ones * @returns Object containing team list with player team references set */ function parseTeamInfo(teamInfoResponse, players = []) { const teams = []; if (!teamInfoResponse || regularExpressions_1.RegularExpressions.TeamInfoNoTeams.test(teamInfoResponse)) { return { teams }; } // Create a map of player names to Player objects for quick lookup const playerMap = new Map(); players.forEach((player) => { playerMap.set(player.ign, player); }); // Split the response into lines for processing const lines = teamInfoResponse.split("\n").filter((line) => line.trim()); let currentTeamId = null; let currentTeamMembers = []; let currentTeamLeader = null; for (const line of lines) { // Check if this line is a team header const teamHeaderMatch = line.match(regularExpressions_1.RegularExpressions.TeamInfoTeamHeader); if (teamHeaderMatch) { // Save the previous team if we have one if (currentTeamId !== null && currentTeamLeader !== null) { if (currentTeamMembers.length > 0) { const team = { id: currentTeamId, leader: currentTeamLeader, members: currentTeamMembers, }; // Set team reference on all team members currentTeamMembers.forEach((player) => { player.team = team; }); teams.push(team); } } // Start new team currentTeamId = parseInt(teamHeaderMatch[1]); currentTeamMembers = []; currentTeamLeader = null; continue; } // Check if this line is a player entry const playerMatch = line.match(regularExpressions_1.RegularExpressions.TeamInfoPlayer); if (playerMatch && currentTeamId !== null) { const playerName = playerMatch[1].trim(); const player = playerMap.get(playerName); // Only process connected players if (player) { currentTeamMembers.push(player); // Check if this player is the leader if (line.includes("(LEADER)")) { currentTeamLeader = player; } } } } // Save the last team if (currentTeamId !== null && currentTeamLeader !== null) { if (currentTeamMembers.length > 0) { const team = { id: currentTeamId, leader: currentTeamLeader, members: currentTeamMembers, }; // Set team reference on all team members currentTeamMembers.forEach((player) => { player.team = team; }); teams.push(team); } } return { teams }; } //# sourceMappingURL=teamInfo.js.map