From a09064ea38a5b27bbec9c93f2b72fe312647fc1d Mon Sep 17 00:00:00 2001 From: HardiReady Date: Sun, 4 Mar 2018 10:55:59 +0100 Subject: [PATCH] Use steamUUID in highscore if available --- api/routes/players.js | 53 +++++++++++++++++++++++-------------------- api/tools/util.js | 3 +-- 2 files changed, 30 insertions(+), 26 deletions(-) diff --git a/api/routes/players.js b/api/routes/players.js index a3ee5a5..e6d6527 100644 --- a/api/routes/players.js +++ b/api/routes/players.js @@ -36,30 +36,35 @@ campaignPlayer.route('/ranking/:campaignId') } const rankingItems = []; - new Set(items.map(x => x.name)).forEach(playerName => { - const playerInstances = items.filter(p => p.name === playerName); - const resItem = { - name: playerName, - kill: 0, - vehicle: 0, - death: 0, - friendlyFire: 0, - revive: 0, - respawn: 0, - flagTouch: 0 - }; - for (let i = 0; i < playerInstances.length; i++) { - resItem.kill += playerInstances[i].kill; - resItem.death += playerInstances[i].death; - resItem.friendlyFire += playerInstances[i].friendlyFire; - resItem.vehicle += playerInstances[i].vehicle; - resItem.revive += playerInstances[i].revive; - resItem.respawn += playerInstances[i].respawn; - resItem.flagTouch += playerInstances[i].flagTouch; - } - resItem.fraction = playerInstances[playerInstances.length - 1].fraction; - rankingItems.push(resItem); - }); + + // check only first player to have valid steamUUID - then decide if tracked by name or by ID + const usesUUID = isSteamUUID(items[0].steamUUID); + + new Set(items.map(usesUUID ? x => x.steamUUID : x => x.name)) + .forEach(player => { + const playerInstances = items.filter(usesUUID ? p => p.steamUUID === player : p => p.name === player); + const resItem = { + name: usesUUID ? playerInstances[playerInstances.length - 1].name : player, + kill: 0, + vehicle: 0, + death: 0, + friendlyFire: 0, + revive: 0, + respawn: 0, + flagTouch: 0 + }; + for (let i = 0; i < playerInstances.length; i++) { + resItem.kill += playerInstances[i].kill; + resItem.death += playerInstances[i].death; + resItem.friendlyFire += playerInstances[i].friendlyFire; + resItem.vehicle += playerInstances[i].vehicle; + resItem.revive += playerInstances[i].revive; + resItem.respawn += playerInstances[i].respawn; + resItem.flagTouch += playerInstances[i].flagTouch; + } + resItem.fraction = playerInstances[playerInstances.length - 1].fraction; + rankingItems.push(resItem); + }); function getSortedField(fieldName) { let num = 1; diff --git a/api/tools/util.js b/api/tools/util.js index 7fd901b..d631c27 100644 --- a/api/tools/util.js +++ b/api/tools/util.js @@ -5,7 +5,6 @@ const isSteamUUID = (input) => { return steamUIDPattern.test(input) }; - const sortCollectionBy = (collection, key) => { collection.sort((a, b) => { a = a[key].toLowerCase(); @@ -50,8 +49,8 @@ const decimalToTimeString = (decimal) => { (seconds < 10 ? '0' + seconds : seconds); }; +exports.isSteamUUID = isSteamUUID; exports.sortCollection = sortCollectionBy; exports.playerArrayContains = playerArrayContains; exports.timeStringToDecimal = timeStringToDecimal; exports.decimalToTimeString = decimalToTimeString; -exports.isSteamUUID = isSteamUUID;