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
 | 
					+ respawn: 2 (number, required) - sum of respawns
 | 
				
			||||||
+ flagTouch: 1 (number, required) - sum of flag captures
 | 
					+ flagTouch: 1 (number, required) - sum of flag captures
 | 
				
			||||||
+ revive: 0 (number, required) - sum of revives
 | 
					+ 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)
 | 
					# WarPlayer (BasicPlayer)
 | 
				
			||||||
| 
						 | 
					@ -23,7 +25,6 @@ A player campaign statistics object
 | 
				
			||||||
+ _id: `5ab68d42f547ed304064e5f7` (string, required) - unique id of the army member
 | 
					+ _id: `5ab68d42f547ed304064e5f7` (string, required) - unique id of the army member
 | 
				
			||||||
+ warId: `5abf65ae3fc5fa349ffd5ca3` (string, required) - war in which this player took part
 | 
					+ warId: `5abf65ae3fc5fa349ffd5ca3` (string, required) - war in which this player took part
 | 
				
			||||||
+ steamUUID: 76561192214911200 (number, optional) - unique ID for STEAM platform account
 | 
					+ 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
 | 
					+ performance: `5abf65ae3fc5fa349ffd5cs2` (string, optional) - id of corresponding performance log entry
 | 
				
			||||||
+ timestamp: `2018-02-24T01:01:25.825Z` - the entity creation timestamp
 | 
					+ timestamp: `2018-02-24T01:01:25.825Z` - the entity creation timestamp
 | 
				
			||||||
+ updatedAt: `2018-02-24T01:01:25.825Z` - the version timestamp
 | 
					+ updatedAt: `2018-02-24T01:01:25.825Z` - the version timestamp
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -72,11 +72,6 @@ const PlayerSchema = new Schema({
 | 
				
			||||||
    set: (v) => Math.round(v),
 | 
					    set: (v) => Math.round(v),
 | 
				
			||||||
    required: true,
 | 
					    required: true,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
  sort: {
 | 
					 | 
				
			||||||
    type: Number,
 | 
					 | 
				
			||||||
    get: (v) => Math.round(v),
 | 
					 | 
				
			||||||
    set: (v) => Math.round(v),
 | 
					 | 
				
			||||||
  },
 | 
					 | 
				
			||||||
  steamUUID: {
 | 
					  steamUUID: {
 | 
				
			||||||
    type: Number,
 | 
					    type: Number,
 | 
				
			||||||
    get: (v) => Math.round(v),
 | 
					    get: (v) => Math.round(v),
 | 
				
			||||||
| 
						 | 
					@ -87,7 +82,20 @@ const PlayerSchema = new Schema({
 | 
				
			||||||
    ref: 'LogServerFpsSchema',
 | 
					    ref: 'LogServerFpsSchema',
 | 
				
			||||||
    required: false,
 | 
					    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',
 | 
					  collection: 'player',
 | 
				
			||||||
  timestamps: {createdAt: 'timestamp'},
 | 
					  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]['flagTouch'] = stats.flag.filter((flag) => flag.player === playerName).length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    stats.players[i]['sort'] = stats.players[i]['kill'] + stats.players[i]['revive'] +
 | 
					    let playerTravelDistance = stats.transport.filter((transport) => transport.passenger === playerName)
 | 
				
			||||||
      stats.players[i]['flagTouch']
 | 
					                                    .map((transport) => transport.distance)
 | 
				
			||||||
      - stats.players[i]['friendlyFire'] - stats.players[i]['death'] - stats.players[i]['respawn'];
 | 
					                                    .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;
 | 
					  stats.war.playersBlufor = stats.players.filter((player) => player.fraction === 'BLUFOR').length;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue