Improvements to tribes 1

This commit is contained in:
mmorrison 2018-03-18 01:23:01 -05:00
parent 27779e3bf4
commit 48dd342478

View file

@ -34,16 +34,15 @@ class Unreal2 extends require('./core') {
state.raw.teams = []; state.raw.teams = [];
for(let i = 0; i < state.raw.teamCount; i++) { for(let i = 0; i < state.raw.teamCount; i++) {
const teamName = this.readString(reader); const teamName = this.readString(reader);
const teamValues = this.readString(reader) const teamValues = this.readValues(reader);
.replace(/%t/g, teamName)
.split('\t')
.map((a) => a.trim());
const teamInfo = {}; const teamInfo = {};
for (let i = 0; i < teamValues.length && i < teamFields.length; i++) { for (let i = 0; i < teamValues.length && i < teamFields.length; i++) {
const key = teamFields[i]; let key = teamFields[i];
let value = teamValues[i]; let value = teamValues[i];
if (key === 'score' || key === 'players') value = parseInt(value); if (key === 'ultra_base') key = 'name';
if (value === '%t') value = teamName;
if (['score','players'].includes(key)) value = parseInt(value);
teamInfo[key] = value; teamInfo[key] = value;
} }
state.raw.teams.push(teamInfo); state.raw.teams.push(teamInfo);
@ -54,21 +53,17 @@ class Unreal2 extends require('./core') {
const packetLoss = reader.uint(1); const packetLoss = reader.uint(1);
const teamNum = reader.uint(1); const teamNum = reader.uint(1);
const name = this.readString(reader); const name = this.readString(reader);
const valuesStr = this.readString(reader); const playerValues = this.readValues(reader);
if (!valuesStr) continue;
const playerValues = valuesStr
.replace(/%p/g, ping)
.replace(/%l/g, packetLoss)
.replace(/%t/g, teamNum)
.replace(/%n/g, name)
.split('\t')
.map((a) => a.trim());
const playerInfo = {}; const playerInfo = {};
for (let i = 0; i < playerValues.length && i < playerFields.length; i++) { for (let i = 0; i < playerValues.length && i < playerFields.length; i++) {
const key = playerFields[i]; let key = playerFields[i];
let value = playerValues[i]; let value = playerValues[i];
if (key === 'score' || key === 'ping' || key === 'pl') value = parseInt(value); if (value === '%p') value = ping;
if (value === '%l') value = packetLoss;
if (value === '%t') value = teamNum;
if (value === '%n') value = name;
if (['score','ping','pl','kills','lvl'].includes(key)) value = parseInt(value);
if (key === 'team') { if (key === 'team') {
const teamId = parseInt(value); const teamId = parseInt(value);
if (teamId >= 0 && teamId < state.raw.teams.length && state.raw.teams[teamId].name) { if (teamId >= 0 && teamId < state.raw.teams.length && state.raw.teams[teamId].name) {
@ -87,12 +82,21 @@ class Unreal2 extends require('./core') {
}); });
} }
readFieldList(reader) { readFieldList(reader) {
return ('?'+this.readString(reader)) const str = this.readString(reader);
if (!str) return [];
return ('?'+str)
.split('\t') .split('\t')
.map((a) => a.substr(1).toLowerCase()) .map((a) => a.substr(1).trim().toLowerCase())
.map((a) => a === 'team name' ? 'name' : a) .map((a) => a === 'team name' ? 'name' : a)
.map((a) => a === 'player name' ? 'name' : a); .map((a) => a === 'player name' ? 'name' : a);
} }
readValues(reader) {
const str = this.readString(reader);
if (!str) return [];
return str
.split('\t')
.map((a) => a.trim());
}
readString(reader) { readString(reader) {
const length = reader.uint(1); const length = reader.uint(1);
if(!length) return ''; if(!length) return '';