diff --git a/api/tools/log-parse-tool.js b/api/tools/log-parse-tool.js index dd0d225..77d6f2b 100644 --- a/api/tools/log-parse-tool.js +++ b/api/tools/log-parse-tool.js @@ -1,6 +1,6 @@ "use strict"; -const arrayContains = require('../middleware/util').arrayContains; +const arrayContains = require('./util').arrayContains; const parseWarLog = (lineArray, war) => { const clean = []; @@ -11,21 +11,34 @@ const parseWarLog = (lineArray, war) => { const revive = []; const flag = []; const transport = []; - const playerNames = []; - const addPlayerIfNotExists = (playerName) => { - if (playerName !== 'Error: No unit' && !arrayContains(playerNames, playerName)) { - playerNames.push(playerName); - } + const players = []; + const addPlayersIfNotExists = (inputPlayers) => { + inputPlayers.forEach(player => { + if (player && player.name !== 'Error: No unit' && !arrayContains(players, player)) { + player['warId'] = 'asd78zr3h8szfd7'; + players.push(player); + } + }) }; lineArray.forEach(line => { - if (line.includes("Abschuss")) { + if (line.includes("Abschuss") && !line.includes('Fahrzeug')) { clean.push(line); - // const kill = line.split(" "); - // for (let i=0; i< kill.length; i++ ) { - // console.log(i + " +++ " + kill[i]); - // } + const shooterString = line.substring(line.lastIndexOf(" von: ") + 6, line.lastIndexOf(". :OPT LOG END")); + const shooter = getPlayerAndFractionFromString(shooterString); + const targetString = line.substring(line.lastIndexOf(" || ") + 4, line.lastIndexOf(' von:')); + const target = getPlayerAndFractionFromString(targetString); + + kills.push({ + warId: 'asdfaew34tg', + time: getDateTime(line.split(" ")[5]), + shooter: shooter ? shooter.name : null, + target: target ? target.name : null, + friendlyFire: target && shooter ? target.fraction === shooter.fraction : false + }); + + addPlayersIfNotExists([shooter, target]); } if (line.includes("Budget")) { @@ -55,7 +68,6 @@ const parseWarLog = (lineArray, war) => { flagFraction: flagFraction, capture: capture }); - addPlayerIfNotExists(playerName); } if (line.includes("Punkte")) { @@ -74,66 +86,51 @@ const parseWarLog = (lineArray, war) => { clean.push(line); const resp = line.split(" "); const playerName = line.substring(line.lastIndexOf("Spieler:") + 9, line.lastIndexOf("-") - 1); - respawn.push(getRespawnEntry(resp, playerName)); - addPlayerIfNotExists(playerName); } if (line.includes("Revive")) { clean.push(line); - const stabilized = !!line.includes('stabilisiert'); - const medicName = line.substring(line.lastIndexOf("wurde von ") + 10, line.lastIndexOf(stabilized ? ' stabilisiert' : ' wiederbelebt')); - const medicNameArray = medicName.split(" "); - const medicFraction = medicNameArray[medicNameArray.length - 1] === "(WEST)" ? "BLUFOR" : "OPFOR"; - const sanitizedMedicName = medicName.substring(0, medicName.indexOf(medicNameArray[medicNameArray.length - 1]) - 1); - + const medic = getPlayerAndFractionFromString(medicName); const patientName = line.substring(line.lastIndexOf("|| ") + 3, line.lastIndexOf(" wurde von")); - const patientNameArray = patientName.split(" "); - const patientFraction = patientNameArray[patientNameArray.length - 1] === "(WEST)" ? "BLUFOR" : "OPFOR"; - const sanitizedPatientName = patientName.substring(0, patientName.indexOf(patientNameArray[patientNameArray.length - 1]) - 1); + const patient = getPlayerAndFractionFromString(patientName); revive.push({ warId: 'asfddf', time: getDateTime(line.split(" ")[5]), stabilized: stabilized, - medic: sanitizedMedicName, - patient: sanitizedPatientName + medic: medic.name, + patient: patientName }); - addPlayerIfNotExists(sanitizedMedicName); - addPlayerIfNotExists(sanitizedPatientName); + addPlayersIfNotExists([medic, patient]); } if (line.includes("Transport ||")) { clean.push(line); - const driverName = line.substring(line.lastIndexOf("wurde von ") + 10, line.lastIndexOf(" eingeflogen")); - const driverNameArray = driverName.split(" "); - const driverFraction = driverNameArray[driverNameArray.length - 1] === "(WEST)" ? "BLUFOR" : "OPFOR"; - const sanitizedDriverName = driverName.substring(0, driverName.indexOf(driverNameArray[driverNameArray.length - 1]) - 1); - - const passengerName = line.substring(line.lastIndexOf("|| ") + 3, line.lastIndexOf(" wurde von")); - const passengerNameArray = passengerName.split(" "); - const passengerFraction = passengerNameArray[passengerNameArray.length - 1] === "(WEST)" ? "BLUFOR" : "OPFOR"; - const sanitizedPassengerName = passengerName.substring(0, passengerName.indexOf(passengerNameArray[passengerNameArray.length - 1]) - 1); + const driverString = line.substring(line.lastIndexOf("wurde von ") + 10, line.lastIndexOf(" eingeflogen")); + const driver = getPlayerAndFractionFromString(driverString); + const passengerString = line.substring(line.lastIndexOf("|| ") + 3, line.lastIndexOf(" wurde von")); + const passenger = getPlayerAndFractionFromString(passengerString); const distance = parseInt(line.substring(line.lastIndexOf("eingeflogen (") + 13, line.lastIndexOf("m)") - 1)); transport.push({ war: "blablub7z8", time: getDateTime(line.split(" ")[5]), - driver: sanitizedDriverName, - passenger: sanitizedPassengerName, + driver: driver.name, + passenger: passenger.name, distance: distance }); - addPlayerIfNotExists(sanitizedDriverName); - addPlayerIfNotExists(sanitizedPassengerName); + addPlayersIfNotExists([driver, passenger]); } }); - // - // revive.forEach(budg => console.log(budg)); - // console.log(revive.length) + + players.forEach(player => console.log(player)) + console.log(players.length) + }; function getRespawnEntry(respawn, playerName) { @@ -163,6 +160,16 @@ function getBudgetEntry(budg) { } } +function getPlayerAndFractionFromString(nameAndFractionString) { + const nameArray = nameAndFractionString.split(" "); + const fraction = nameArray[nameArray.length - 1] === "(WEST)" ? "BLUFOR" : "OPFOR"; + const name = nameAndFractionString.substring(0, nameAndFractionString.indexOf(nameArray[nameArray.length - 1]) - 1); + // do not return player for "Selbstverschulden" + if (name) { + return {name: name, fraction: fraction}; + } +} + const transformMoneyString = (budgetString) => { if (!budgetString.includes("e+")) { return parseInt(budgetString); diff --git a/api/middleware/util.js b/api/tools/util.js similarity index 73% rename from api/middleware/util.js rename to api/tools/util.js index 233b5b0..8c2d93e 100644 --- a/api/middleware/util.js +++ b/api/tools/util.js @@ -11,11 +11,11 @@ const sortCollectionBy = (collection, key) => { return collection; }; -const arrayContains = (arr, user) => { +const playerArrayContains = (arr, item) => { let i = 0, count = arr.length, matchFound = false; for(; i < count; i++) { - if (arr[i] === user) { + if (arr[i].name === item.name && arr[i].fraction === item.fraction) { matchFound = true; break; } @@ -25,4 +25,4 @@ const arrayContains = (arr, user) => { }; exports.sortCollection = sortCollectionBy; -exports.arrayContains = arrayContains; +exports.arrayContains = playerArrayContains;