diff --git a/server/apib/data_structures/_log.apib b/server/apib/data_structures/_log.apib index 852adc6..abe60a7 100644 --- a/server/apib/data_structures/_log.apib +++ b/server/apib/data_structures/_log.apib @@ -85,6 +85,7 @@ + `LIGHT` + `HEAVY` + `AIR` + + `BOAT` + `UNKNOWN` + shooterVehicle: `FV-720 Mora` (string, optional) - vehicle in whiock the shooting player sat + magazine: `30 mm APFSDS` (string, optional) - magazine name used to execute the kill diff --git a/server/apib/dredd/data/tmp-resource/signature/5ab68d42f547ed304064e5f7.png b/server/apib/dredd/data/tmp-resource/signature/5ab68d42f547ed304064e5f7.png index 02e19f6..10c9cfe 100644 Binary files a/server/apib/dredd/data/tmp-resource/signature/5ab68d42f547ed304064e5f7.png and b/server/apib/dredd/data/tmp-resource/signature/5ab68d42f547ed304064e5f7.png differ diff --git a/server/apib/dredd/data/tmp-resource/signature/big/5ab68d42f547ed304064e5f7.png b/server/apib/dredd/data/tmp-resource/signature/big/5ab68d42f547ed304064e5f7.png index 15c2d5b..abe14f4 100644 Binary files a/server/apib/dredd/data/tmp-resource/signature/big/5ab68d42f547ed304064e5f7.png and b/server/apib/dredd/data/tmp-resource/signature/big/5ab68d42f547ed304064e5f7.png differ diff --git a/server/models/logs/vehicle.js b/server/models/logs/vehicle.js index d796636..251de46 100644 --- a/server/models/logs/vehicle.js +++ b/server/models/logs/vehicle.js @@ -30,7 +30,7 @@ const LogVehicleKillSchema = new Schema({ }, vehicleClass: { type: String, - enum: ['LIGHT', 'HEAVY', 'AIR', 'UNKNOWN'], + enum: ['LIGHT', 'HEAVY', 'AIR', 'BOAT', 'UNKNOWN'], required: true, }, magazine: { diff --git a/server/models/player.js b/server/models/player.js index e65ed0f..fe090c7 100644 --- a/server/models/player.js +++ b/server/models/player.js @@ -42,6 +42,12 @@ const PlayerSchema = new Schema({ set: (v) => Math.round(v), required: true, }, + vehicleBoat: { + type: Number, + get: (v) => Math.round(v), + set: (v) => Math.round(v), + required: true, + }, death: { type: Number, get: (v) => Math.round(v), diff --git a/server/routes/wars.js b/server/routes/wars.js index 0ec1ef9..d71abc4 100644 --- a/server/routes/wars.js +++ b/server/routes/wars.js @@ -172,6 +172,11 @@ wars.route('/:id') return next(err); } + // TODO: temp solution for CC-93 - add boat kills to light vehicle kills until FE available + items.forEach((player) => { + player.vehicleLight = player.vehicleLight + player.vehicleBoat; + }); + const responseObj = item.toObject(); responseObj.players = items; res.locals.items = responseObj; diff --git a/server/tools/log-parse-tool.js b/server/tools/log-parse-tool.js index f7fe1c4..0fd3f10 100644 --- a/server/tools/log-parse-tool.js +++ b/server/tools/log-parse-tool.js @@ -8,6 +8,7 @@ const VehicleClasses = Object.freeze({ LIGHT: 'Leicht', HEAVY: 'Schwer', AIR: 'Flug', + BOAT: 'Boot', UNKNOWN: 'Unbekannt', }); @@ -73,6 +74,8 @@ const parseWarLog = (lineArray, war) => { 'Tempest-Transporter', 'Tempest-Transporter (abgedeckt)', 'Tempest Sanitätsfahrzeug', 'Remote Designator [CSAT]', 'UBF Saif', 'Quad Bike', 'HuntIR', 'Offroad', + // boats + 'RHIB', 'Kampfboot', 'SDV', ]; const addPlayerIfNotExists = (inputPlayer, steamUUID) => { @@ -80,6 +83,10 @@ const parseWarLog = (lineArray, war) => { if (player && player.name && player.fraction && !playerArrayContains(stats.players, player)) { player['warId'] = war._id; player['steamUUID'] = steamUUID; + player['vehicleLight'] = 0; + player['vehicleHeavy'] = 0; + player['vehicleAir'] = 0; + player['vehicleBoat'] = 0; stats.players.push(player); } }; @@ -335,21 +342,27 @@ const parseWarLog = (lineArray, war) => { stats.players[i]['kill'] = stats.kills.filter( (kill) => kill.shooter === playerName && !kill.friendlyFire).length; - // TODO: use vehicle class description from enum - stats.players[i]['vehicleLight'] = stats.vehicles.filter( - (vehicle) => (vehicle.shooter === playerName || - (vehicle.additionalShooter && vehicle.additionalShooter.indexOf(playerName)) > -1) && vehicle.vehicleClass === - 'LIGHT' && VEHICLE_BLACKLIST.indexOf(vehicle.target) < 0).length; - - stats.players[i]['vehicleHeavy'] = stats.vehicles.filter( - (vehicle) => (vehicle.shooter === playerName || - (vehicle.additionalShooter && vehicle.additionalShooter.indexOf(playerName)) > -1) && vehicle.vehicleClass === - 'HEAVY' && VEHICLE_BLACKLIST.indexOf(vehicle.target) < 0).length; - - stats.players[i]['vehicleAir'] = stats.vehicles.filter( - (vehicle) => (vehicle.shooter === playerName || - (vehicle.additionalShooter && vehicle.additionalShooter.indexOf(playerName)) > -1) && vehicle.vehicleClass === - 'AIR' && VEHICLE_BLACKLIST.indexOf(vehicle.target) < 0).length; + stats.vehicles + .filter((vehicle) => VEHICLE_BLACKLIST.indexOf(vehicle.target) < 0) + .forEach((vehicle) => { + if (vehicle.shooter === playerName || + (vehicle.additionalShooter && vehicle.additionalShooter.indexOf(playerName)) > -1) { + switch (vehicle.vehicleClass) { + case 'LIGHT': + stats.players[i].vehicleLight++; + break; + case 'HEAVY': + stats.players[i].vehicleHeavy++; + break; + case 'AIR': + stats.players[i].vehicleAir++; + break; + case 'BOAT': + stats.players[i].vehicleBoat++; + break; + } + } + }); stats.players[i]['friendlyFire'] = stats.kills.filter( (kill) => kill.shooter === playerName && kill.friendlyFire).length;