Save vehicles and magazine on kill log (CC-36)
parent
026a3611a6
commit
07a6822920
|
@ -43,6 +43,9 @@
|
||||||
+ `BLUFOR`
|
+ `BLUFOR`
|
||||||
+ `OPFOR`
|
+ `OPFOR`
|
||||||
+ `NONE`
|
+ `NONE`
|
||||||
|
+ shooterVehicle: `FV-720 Mora` (string, optional) - vehicle in whiock the shooting player sat
|
||||||
|
+ targetVehicle: `Ifrit-GMG` (string, optional) - vehicle in which the target player sat
|
||||||
|
+ magazine: `30 mm APFSDS` (string, optional) - magazine name used to execute the kill
|
||||||
|
|
||||||
#LogRespawn (Log)
|
#LogRespawn (Log)
|
||||||
## Properties
|
## Properties
|
||||||
|
@ -84,3 +87,5 @@
|
||||||
+ `HEAVY`
|
+ `HEAVY`
|
||||||
+ `AIR`
|
+ `AIR`
|
||||||
+ `UNKNOWN`
|
+ `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
|
||||||
|
|
|
@ -24,6 +24,15 @@ const LogKillSchema = new Schema({
|
||||||
type: Boolean,
|
type: Boolean,
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
magazine: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
shooterVehicle: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
targetVehicle: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
fraction: {
|
fraction: {
|
||||||
type: String,
|
type: String,
|
||||||
enum: ['BLUFOR', 'OPFOR', 'NONE'],
|
enum: ['BLUFOR', 'OPFOR', 'NONE'],
|
||||||
|
|
|
@ -33,6 +33,12 @@ const LogVehicleKillSchema = new Schema({
|
||||||
enum: ['LIGHT', 'HEAVY', 'AIR', 'UNKNOWN'],
|
enum: ['LIGHT', 'HEAVY', 'AIR', 'UNKNOWN'],
|
||||||
required: true,
|
required: true,
|
||||||
},
|
},
|
||||||
|
magazine: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
|
shooterVehicle: {
|
||||||
|
type: String,
|
||||||
|
},
|
||||||
}, {
|
}, {
|
||||||
collection: 'logVehicle',
|
collection: 'logVehicle',
|
||||||
});
|
});
|
||||||
|
|
|
@ -17,9 +17,9 @@ const vehicleNameEndRegex = /\s\(\w+:/;
|
||||||
|
|
||||||
const sideRegex = /(side:\s(.*?)\))/;
|
const sideRegex = /(side:\s(.*?)\))/;
|
||||||
|
|
||||||
// const magazineRegex = /(magazine:\s(.*?)\))/;
|
const magazineRegex = /(magazine:\s(.*?)\))/;
|
||||||
|
|
||||||
// const vehicleRegex = /(vehicle:\s(.*?)\))/;
|
const vehicleRegex = /(vehicle:\s(.*?)\))/;
|
||||||
|
|
||||||
const categoryRegex = /(category:\s(.*?)\))/;
|
const categoryRegex = /(category:\s(.*?)\))/;
|
||||||
|
|
||||||
|
@ -51,7 +51,7 @@ const parseWarLog = (lineArray, war) => {
|
||||||
];
|
];
|
||||||
|
|
||||||
const addPlayerIfNotExists = (inputPlayer, steamUUID) => {
|
const addPlayerIfNotExists = (inputPlayer, steamUUID) => {
|
||||||
const player = getPlayerAndFractionFromString(inputPlayer);
|
const player = getPlayerInfoFromString(inputPlayer);
|
||||||
if (player && player.name && player.fraction && !playerArrayContains(stats.players, player)) {
|
if (player && player.name && player.fraction && !playerArrayContains(stats.players, player)) {
|
||||||
player['warId'] = war._id;
|
player['warId'] = war._id;
|
||||||
player['steamUUID'] = steamUUID;
|
player['steamUUID'] = steamUUID;
|
||||||
|
@ -74,7 +74,7 @@ const parseWarLog = (lineArray, war) => {
|
||||||
stats.clean.push(line);
|
stats.clean.push(line);
|
||||||
|
|
||||||
const shooterString = line.substring(line.lastIndexOf(' von: ') + 6, line.search(/$/) - 1);
|
const shooterString = line.substring(line.lastIndexOf(' von: ') + 6, line.search(/$/) - 1);
|
||||||
const shooter = getPlayerAndFractionFromString(shooterString);
|
const shooter = getPlayerInfoFromString(shooterString);
|
||||||
|
|
||||||
if (line.includes('Fahrzeug:')) {
|
if (line.includes('Fahrzeug:')) {
|
||||||
const targetString = line.substring(line.lastIndexOf(' --- Fahrzeug: ') + 15, line.lastIndexOf(' von:'));
|
const targetString = line.substring(line.lastIndexOf(' --- Fahrzeug: ') + 15, line.lastIndexOf(' von:'));
|
||||||
|
@ -93,19 +93,36 @@ const parseWarLog = (lineArray, war) => {
|
||||||
} else {
|
} else {
|
||||||
vehicleKill.shooter = shooter ? shooter.name : null;
|
vehicleKill.shooter = shooter ? shooter.name : null;
|
||||||
}
|
}
|
||||||
|
if (shooter.magazine) {
|
||||||
|
vehicleKill.magazine = shooter.magazine;
|
||||||
|
}
|
||||||
|
if (shooter.vehicle) {
|
||||||
|
vehicleKill.shooterVehicle = shooter.vehicle;
|
||||||
|
}
|
||||||
|
|
||||||
stats.vehicles.push(vehicleKill);
|
stats.vehicles.push(vehicleKill);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
const targetString = line.substring(line.lastIndexOf(' --- Einheit: ') + 14, line.lastIndexOf(' von:'));
|
const targetString = line.substring(line.lastIndexOf(' --- Einheit: ') + 14, line.lastIndexOf(' von:'));
|
||||||
const target = getPlayerAndFractionFromString(targetString);
|
const target = getPlayerInfoFromString(targetString);
|
||||||
stats.kills.push({
|
const kill = {
|
||||||
war: war._id,
|
war: war._id,
|
||||||
time: getFullTimeDate(war.date, line.split(WHITESPACE)[5]),
|
time: getFullTimeDate(war.date, line.split(WHITESPACE)[5]),
|
||||||
shooter: shooter ? shooter.name : null,
|
shooter: shooter ? shooter.name : null,
|
||||||
target: target ? target.name : null,
|
target: target ? target.name : null,
|
||||||
friendlyFire: shooter ? target.fraction === shooter.fraction : false,
|
friendlyFire: shooter ? target.fraction === shooter.fraction : false,
|
||||||
fraction: shooter ? shooter.fraction : 'NONE',
|
fraction: shooter ? shooter.fraction : 'NONE',
|
||||||
});
|
};
|
||||||
|
if (shooter.magazine) {
|
||||||
|
kill.magazine = shooter.magazine;
|
||||||
|
}
|
||||||
|
if (shooter.vehicle) {
|
||||||
|
kill.shooterVehicle = shooter.vehicle;
|
||||||
|
}
|
||||||
|
if (target.vehicle) {
|
||||||
|
kill.targetVehicle = target.vehicle;
|
||||||
|
}
|
||||||
|
stats.kills.push(kill);
|
||||||
}
|
}
|
||||||
} else if (line.includes('(Budget)')) {
|
} else if (line.includes('(Budget)')) {
|
||||||
/**
|
/**
|
||||||
|
@ -173,9 +190,9 @@ const parseWarLog = (lineArray, war) => {
|
||||||
const stabilized = !!line.includes('stabilisiert."');
|
const stabilized = !!line.includes('stabilisiert."');
|
||||||
const medicName = line.substring(line.lastIndexOf('wurde von ') + 10,
|
const medicName = line.substring(line.lastIndexOf('wurde von ') + 10,
|
||||||
line.lastIndexOf(stabilized ? ' stabilisiert' : ' wiederbelebt'));
|
line.lastIndexOf(stabilized ? ' stabilisiert' : ' wiederbelebt'));
|
||||||
const medic = getPlayerAndFractionFromString(medicName);
|
const medic = getPlayerInfoFromString(medicName);
|
||||||
const patientName = line.substring(line.lastIndexOf('--- ') + 4, line.lastIndexOf(' wurde von'));
|
const patientName = line.substring(line.lastIndexOf('--- ') + 4, line.lastIndexOf(' wurde von'));
|
||||||
const patient = getPlayerAndFractionFromString(patientName);
|
const patient = getPlayerInfoFromString(patientName);
|
||||||
|
|
||||||
stats.revive.push({
|
stats.revive.push({
|
||||||
war: war._id,
|
war: war._id,
|
||||||
|
@ -191,9 +208,9 @@ const parseWarLog = (lineArray, war) => {
|
||||||
*/
|
*/
|
||||||
stats.clean.push(line);
|
stats.clean.push(line);
|
||||||
const driverString = line.substring(line.lastIndexOf('wurde von ') + 10, line.lastIndexOf(' eingeflogen'));
|
const driverString = line.substring(line.lastIndexOf('wurde von ') + 10, line.lastIndexOf(' eingeflogen'));
|
||||||
const driver = getPlayerAndFractionFromString(driverString);
|
const driver = getPlayerInfoFromString(driverString);
|
||||||
const passengerString = line.substring(line.lastIndexOf('--- ') + 3, line.lastIndexOf(' wurde von'));
|
const passengerString = line.substring(line.lastIndexOf('--- ') + 3, line.lastIndexOf(' wurde von'));
|
||||||
const passenger = getPlayerAndFractionFromString(passengerString);
|
const passenger = getPlayerInfoFromString(passengerString);
|
||||||
const distance = parseInt(line.substring(line.lastIndexOf('eingeflogen (') + 13, line.lastIndexOf('m)') - 1));
|
const distance = parseInt(line.substring(line.lastIndexOf('eingeflogen (') + 13, line.lastIndexOf('m)') - 1));
|
||||||
|
|
||||||
stats.transport.push({
|
stats.transport.push({
|
||||||
|
@ -285,15 +302,20 @@ const getBudgetEntry = (budg, warId, warDate) => {
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
const getPlayerAndFractionFromString = (inputString) => {
|
const getPlayerInfoFromString = (inputString) => {
|
||||||
|
const resPlayer = {};
|
||||||
const playerNameRegexMatch = playerNameRegex.exec(inputString);
|
const playerNameRegexMatch = playerNameRegex.exec(inputString);
|
||||||
const sideMatch = sideRegex.exec(inputString);
|
const sideMatch = sideRegex.exec(inputString);
|
||||||
|
|
||||||
// SINGLE PLAYER NAME
|
// SINGLE PLAYER NAME
|
||||||
let name;
|
let name;
|
||||||
if (playerNameRegexMatch && playerNameRegexMatch.length >= 2) {
|
if (playerNameRegexMatch && playerNameRegexMatch.length >= 2) {
|
||||||
// NAME
|
|
||||||
name = playerNameRegexMatch[2].trim();
|
name = playerNameRegexMatch[2].trim();
|
||||||
|
// do not return player for 'Error: No unit'
|
||||||
|
if (!name && name === 'Error: No unit') {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
resPlayer.name = name;
|
||||||
}
|
}
|
||||||
// ADDITIONAL PLAYER NAMES
|
// ADDITIONAL PLAYER NAMES
|
||||||
let additionalPlayerMatch;
|
let additionalPlayerMatch;
|
||||||
|
@ -317,34 +339,31 @@ const getPlayerAndFractionFromString = (inputString) => {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// const magazineMatch = magazineRegex.exec(inputString);
|
if (side && side !== 'ENEMY') {
|
||||||
// const vehicleMatch = vehicleRegex.exec(inputString);
|
resPlayer.fraction = side === 'WEST' ? 'BLUFOR' : 'OPFOR';
|
||||||
|
}
|
||||||
|
|
||||||
// if (magazineMatch && magazineMatch.length >= 3) {
|
|
||||||
// MAGAZINE
|
// MAGAZINE
|
||||||
// console.log(magazineMatch[2])
|
const magazineMatch = magazineRegex.exec(inputString);
|
||||||
// }
|
if (magazineMatch && magazineMatch.length >= 3) {
|
||||||
|
let magazine = magazineMatch[2];
|
||||||
|
if (new RegExp('\\(.*$').test(magazine)) {
|
||||||
|
magazine = magazine.concat(')');
|
||||||
|
}
|
||||||
|
resPlayer.magazine = magazine;
|
||||||
|
}
|
||||||
|
|
||||||
// if (vehicleMatch && vehicleMatch.length >= 3 && vehicleMatch[2]) {
|
|
||||||
// let vehicle = vehicleMatch[2];
|
|
||||||
// if (new RegExp("\\(.*$").test(vehicle)) {
|
|
||||||
// vehicle = vehicle.concat(")");
|
|
||||||
// }
|
|
||||||
// VEHICLE
|
// VEHICLE
|
||||||
// console.log(vehicle)
|
const vehicleMatch = vehicleRegex.exec(inputString);
|
||||||
// }
|
if (vehicleMatch && vehicleMatch.length >= 3 && vehicleMatch[2]) {
|
||||||
|
let vehicle = vehicleMatch[2];
|
||||||
let fraction;
|
if (new RegExp('\\(.*$').test(vehicle)) {
|
||||||
if (side) {
|
vehicle = vehicle.concat(')');
|
||||||
fraction = side !== 'ENEMY' ? side === 'WEST' ?
|
}
|
||||||
'BLUFOR' : 'OPFOR' :
|
resPlayer.vehicle = vehicle;
|
||||||
undefined;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// do not return player for 'Error: No unit'
|
return resPlayer;
|
||||||
if (name && name !== 'Error: No unit') {
|
|
||||||
return {name: name, fraction: fraction};
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
const getVehicleAndFractionFromString = (nameClassFractionString) => {
|
const getVehicleAndFractionFromString = (nameClassFractionString) => {
|
||||||
|
|
Loading…
Reference in New Issue