Add log parsing for transport data into player object (CC-33)
parent
b351301bea
commit
836da0c6d4
|
@ -14,6 +14,8 @@ Basic player statistic information object
|
|||
+ respawn: 2 (number, required) - sum of respawns
|
||||
+ flagTouch: 1 (number, required) - sum of flag captures
|
||||
+ revive: 0 (number, required) - sum of revives
|
||||
+ travelDistance: 16535 (number, optional) - sum of transport meters as passenger
|
||||
+ driverDistance: 1250 (number, optional) - sum of transport meters as pilot/driver
|
||||
|
||||
|
||||
# WarPlayer (BasicPlayer)
|
||||
|
@ -23,7 +25,6 @@ A player campaign statistics object
|
|||
+ _id: `5ab68d42f547ed304064e5f7` (string, required) - unique id of the army member
|
||||
+ warId: `5abf65ae3fc5fa349ffd5ca3` (string, required) - war in which this player took part
|
||||
+ steamUUID: 76561192214911200 (number, optional) - unique ID for STEAM platform account
|
||||
+ sort: 1 (number, required) - sorting number calculated by (kill + revive + flagTouch - friendlyFire - death - respawn)
|
||||
+ performance: `5abf65ae3fc5fa349ffd5cs2` (string, optional) - id of corresponding performance log entry
|
||||
+ timestamp: `2018-02-24T01:01:25.825Z` - the entity creation timestamp
|
||||
+ updatedAt: `2018-02-24T01:01:25.825Z` - the version timestamp
|
||||
|
|
|
@ -72,11 +72,6 @@ const PlayerSchema = new Schema({
|
|||
set: (v) => Math.round(v),
|
||||
required: true,
|
||||
},
|
||||
sort: {
|
||||
type: Number,
|
||||
get: (v) => Math.round(v),
|
||||
set: (v) => Math.round(v),
|
||||
},
|
||||
steamUUID: {
|
||||
type: Number,
|
||||
get: (v) => Math.round(v),
|
||||
|
@ -87,7 +82,20 @@ const PlayerSchema = new Schema({
|
|||
ref: 'LogServerFpsSchema',
|
||||
required: false,
|
||||
},
|
||||
}, {
|
||||
travelDistance: {
|
||||
type: Number,
|
||||
get: (v) => Math.round(v),
|
||||
set: (v) => Math.round(v),
|
||||
required: false,
|
||||
},
|
||||
driverDistance: {
|
||||
type: Number,
|
||||
get: (v) => Math.round(v),
|
||||
set: (v) => Math.round(v),
|
||||
required: false,
|
||||
},
|
||||
},
|
||||
{
|
||||
collection: 'player',
|
||||
timestamps: {createdAt: 'timestamp'},
|
||||
});
|
||||
|
|
|
@ -354,9 +354,31 @@ const parseWarLog = (lineArray, war) => {
|
|||
|
||||
stats.players[i]['flagTouch'] = stats.flag.filter((flag) => flag.player === playerName).length;
|
||||
|
||||
stats.players[i]['sort'] = stats.players[i]['kill'] + stats.players[i]['revive'] +
|
||||
stats.players[i]['flagTouch']
|
||||
- stats.players[i]['friendlyFire'] - stats.players[i]['death'] - stats.players[i]['respawn'];
|
||||
let playerTravelDistance = stats.transport.filter((transport) => transport.passenger === playerName)
|
||||
.map((transport) => transport.distance)
|
||||
.reduce((total, num) => total + Math.round(num), 0);
|
||||
if (playerTravelDistance > 0) {
|
||||
stats.players[i]['travelDistance'] = playerTravelDistance;
|
||||
}
|
||||
|
||||
let driverDistance = 0;
|
||||
const driverTransports = stats.transport.filter((transport) => transport.driver === playerName);
|
||||
for (let i = 0; i < driverTransports.length; i++) {
|
||||
const curr = driverTransports[i];
|
||||
if (i < driverTransports.length - 1) {
|
||||
const next = driverTransports[i + 1];
|
||||
if ((next.time.getTime() - curr.time.getTime()) < 2 * 60000) { // only track once in 2 min range
|
||||
continue;
|
||||
}
|
||||
driverDistance += curr.distance;
|
||||
} else {
|
||||
driverDistance += curr.distance;
|
||||
}
|
||||
}
|
||||
|
||||
if (driverDistance > 0) {
|
||||
stats.players[i]['driverDistance'] = driverDistance;
|
||||
}
|
||||
}
|
||||
|
||||
stats.war.playersBlufor = stats.players.filter((player) => player.fraction === 'BLUFOR').length;
|
||||
|
|
Loading…
Reference in New Issue