rce.js
Version:
A wrapper for Rust Console Edition (RCE) that allows you to use RCON to create integrations.
84 lines • 3.38 kB
JavaScript
;
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