Merge branch 'release/v1.7.6' of hardi/opt-cc into master
						commit
						1ac58ea71a
					
				| 
						 | 
					@ -71,6 +71,7 @@
 | 
				
			||||||
#LogVehicle (Log)
 | 
					#LogVehicle (Log)
 | 
				
			||||||
## Properties
 | 
					## Properties
 | 
				
			||||||
+ shooter: `HardiReady` (string, required) - name of player who shot the vehicle
 | 
					+ shooter: `HardiReady` (string, required) - name of player who shot the vehicle
 | 
				
			||||||
 | 
					+ additionalShooter: [`[GNC]Paolo`, `Dominik`] (array[string], required) - additional crew members of shooter vehicle
 | 
				
			||||||
+ target: `T-100` (string, required) - name of the vehicle
 | 
					+ target: `T-100` (string, required) - name of the vehicle
 | 
				
			||||||
+ fraction: `BLUFOR` (enum, required) - fraction of the shooter
 | 
					+ fraction: `BLUFOR` (enum, required) - fraction of the shooter
 | 
				
			||||||
        + Members
 | 
					        + Members
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -16,6 +16,9 @@ const LogVehicleKillSchema = new Schema({
 | 
				
			||||||
  shooter: {
 | 
					  shooter: {
 | 
				
			||||||
    type: String,
 | 
					    type: String,
 | 
				
			||||||
  },
 | 
					  },
 | 
				
			||||||
 | 
					  additionalShooter: {
 | 
				
			||||||
 | 
					    type: [String],
 | 
				
			||||||
 | 
					  },
 | 
				
			||||||
  target: {
 | 
					  target: {
 | 
				
			||||||
    type: String,
 | 
					    type: String,
 | 
				
			||||||
    required: true,
 | 
					    required: true,
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -64,6 +64,7 @@ campaigns.route('/:id')
 | 
				
			||||||
             }
 | 
					             }
 | 
				
			||||||
             WarModel.find({campaign: req.params.id}).remove().exec();
 | 
					             WarModel.find({campaign: req.params.id}).remove().exec();
 | 
				
			||||||
             // TODO: remove all the war logs from fs here!!!
 | 
					             // TODO: remove all the war logs from fs here!!!
 | 
				
			||||||
 | 
					             // TODO: remove all LOG entries from DB!!!
 | 
				
			||||||
             res.locals.processed = true;
 | 
					             res.locals.processed = true;
 | 
				
			||||||
             next();
 | 
					             next();
 | 
				
			||||||
           });
 | 
					           });
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -189,6 +189,7 @@ wars.route('/:id')
 | 
				
			||||||
        // delete linked appearances
 | 
					        // delete linked appearances
 | 
				
			||||||
        PlayerModel.find({warId: item._id}).remove().exec();
 | 
					        PlayerModel.find({warId: item._id}).remove().exec();
 | 
				
			||||||
        LogKillModel.find({war: item._id}).remove().exec();
 | 
					        LogKillModel.find({war: item._id}).remove().exec();
 | 
				
			||||||
 | 
					        LogVehicleKillModel.find({war: item._id}).remove().exec();
 | 
				
			||||||
        LogRespawnModel.find({war: item._id}).remove().exec();
 | 
					        LogRespawnModel.find({war: item._id}).remove().exec();
 | 
				
			||||||
        LogReviveModel.find({war: item._id}).remove().exec();
 | 
					        LogReviveModel.find({war: item._id}).remove().exec();
 | 
				
			||||||
        LogFlagModel.find({war: item._id}).remove().exec();
 | 
					        LogFlagModel.find({war: item._id}).remove().exec();
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -11,7 +11,7 @@ const VehicleClasses = Object.freeze({
 | 
				
			||||||
  UNKNOWN: 'Unbekannt',
 | 
					  UNKNOWN: 'Unbekannt',
 | 
				
			||||||
});
 | 
					});
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const playerNameRegex = /^(.*?)\s\(/;
 | 
					const playerNameRegex = /(^|,\s)(.*?)\s\(/g;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
const vehicleNameEndRegex = /\s\(\w+:/;
 | 
					const vehicleNameEndRegex = /\s\(\w+:/;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -80,14 +80,20 @@ const parseWarLog = (lineArray, war) => {
 | 
				
			||||||
        const targetString = line.substring(line.lastIndexOf(' --- Fahrzeug: ') + 15, line.lastIndexOf(' von:'));
 | 
					        const targetString = line.substring(line.lastIndexOf(' --- Fahrzeug: ') + 15, line.lastIndexOf(' von:'));
 | 
				
			||||||
        const target = getVehicleAndFractionFromString(targetString);
 | 
					        const target = getVehicleAndFractionFromString(targetString);
 | 
				
			||||||
        if (target && shooter && target.fraction !== shooter.fraction) {
 | 
					        if (target && shooter && target.fraction !== shooter.fraction) {
 | 
				
			||||||
          stats.vehicles.push({
 | 
					          const vehicleKill = {
 | 
				
			||||||
            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,
 | 
					 | 
				
			||||||
            target: target ? target.name : null,
 | 
					            target: target ? target.name : null,
 | 
				
			||||||
            fraction: shooter ? shooter.fraction : 'NONE',
 | 
					            fraction: shooter ? shooter.fraction : 'NONE',
 | 
				
			||||||
            vehicleClass: target.vehicleClass,
 | 
					            vehicleClass: target.vehicleClass,
 | 
				
			||||||
          });
 | 
					          };
 | 
				
			||||||
 | 
					          if (shooter && shooter.name instanceof Array) {
 | 
				
			||||||
 | 
					            vehicleKill.shooter = shooter.name[0];
 | 
				
			||||||
 | 
					            vehicleKill.additionalShooter = shooter.name.slice(1, shooter.name.length);
 | 
				
			||||||
 | 
					          } else {
 | 
				
			||||||
 | 
					            vehicleKill.shooter = shooter ? shooter.name : null;
 | 
				
			||||||
 | 
					          }
 | 
				
			||||||
 | 
					          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:'));
 | 
				
			||||||
| 
						 | 
					@ -217,15 +223,18 @@ const parseWarLog = (lineArray, war) => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    // TODO: use vehicle class description from enum
 | 
					    // TODO: use vehicle class description from enum
 | 
				
			||||||
    stats.players[i]['vehicleLight'] = stats.vehicles.filter(
 | 
					    stats.players[i]['vehicleLight'] = stats.vehicles.filter(
 | 
				
			||||||
      (vehicle) => vehicle.shooter === playerName && vehicle.vehicleClass === 'LIGHT' &&
 | 
					      (vehicle) => (vehicle.shooter === playerName || vehicle.additionalShooter.indexOf(playerName) > -1) &&
 | 
				
			||||||
 | 
					        vehicle.vehicleClass === 'LIGHT' &&
 | 
				
			||||||
        VEHICLE_BLACKLIST.indexOf(vehicle.target) < 0).length;
 | 
					        VEHICLE_BLACKLIST.indexOf(vehicle.target) < 0).length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    stats.players[i]['vehicleHeavy'] = stats.vehicles.filter(
 | 
					    stats.players[i]['vehicleHeavy'] = stats.vehicles.filter(
 | 
				
			||||||
      (vehicle) => vehicle.shooter === playerName && vehicle.vehicleClass === 'HEAVY' &&
 | 
					      (vehicle) => (vehicle.shooter === playerName || vehicle.additionalShooter.indexOf(playerName) > -1) &&
 | 
				
			||||||
 | 
					        vehicle.vehicleClass === 'HEAVY' &&
 | 
				
			||||||
        VEHICLE_BLACKLIST.indexOf(vehicle.target) < 0).length;
 | 
					        VEHICLE_BLACKLIST.indexOf(vehicle.target) < 0).length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    stats.players[i]['vehicleAir'] = stats.vehicles.filter(
 | 
					    stats.players[i]['vehicleAir'] = stats.vehicles.filter(
 | 
				
			||||||
      (vehicle) => vehicle.shooter === playerName && vehicle.vehicleClass === 'AIR' &&
 | 
					      (vehicle) => (vehicle.shooter === playerName || vehicle.additionalShooter.indexOf(playerName) > -1) &&
 | 
				
			||||||
 | 
					        vehicle.vehicleClass === 'AIR' &&
 | 
				
			||||||
        VEHICLE_BLACKLIST.indexOf(vehicle.target) < 0).length;
 | 
					        VEHICLE_BLACKLIST.indexOf(vehicle.target) < 0).length;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
    stats.players[i]['friendlyFire'] = stats.kills.filter(
 | 
					    stats.players[i]['friendlyFire'] = stats.kills.filter(
 | 
				
			||||||
| 
						 | 
					@ -279,18 +288,27 @@ const getBudgetEntry = (budg, warId, warDate) => {
 | 
				
			||||||
const getPlayerAndFractionFromString = (inputString) => {
 | 
					const getPlayerAndFractionFromString = (inputString) => {
 | 
				
			||||||
  const playerNameRegexMatch = playerNameRegex.exec(inputString);
 | 
					  const playerNameRegexMatch = playerNameRegex.exec(inputString);
 | 
				
			||||||
  const sideMatch = sideRegex.exec(inputString);
 | 
					  const sideMatch = sideRegex.exec(inputString);
 | 
				
			||||||
  // const magazineMatch = magazineRegex.exec(inputString);
 | 
					 | 
				
			||||||
  // const vehicleMatch = vehicleRegex.exec(inputString);
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // SINGLE PLAYER NAME
 | 
				
			||||||
  let name;
 | 
					  let name;
 | 
				
			||||||
  if (playerNameRegexMatch && playerNameRegexMatch.length >= 2) {
 | 
					  if (playerNameRegexMatch && playerNameRegexMatch.length >= 2) {
 | 
				
			||||||
    // NAME
 | 
					    // NAME
 | 
				
			||||||
    name = playerNameRegexMatch[1];
 | 
					    name = playerNameRegexMatch[2].trim();
 | 
				
			||||||
 | 
					  }
 | 
				
			||||||
 | 
					  // ADDITIONAL PLAYER NAMES
 | 
				
			||||||
 | 
					  let additionalPlayerMatch;
 | 
				
			||||||
 | 
					  while ((additionalPlayerMatch = playerNameRegex.exec(inputString)) !== null) {
 | 
				
			||||||
 | 
					    const addPlayer = additionalPlayerMatch[0].replace(/^,\s/, '').replace(/\s\($/, '').trim();
 | 
				
			||||||
 | 
					    if (name instanceof Array) {
 | 
				
			||||||
 | 
					      name.push(addPlayer);
 | 
				
			||||||
 | 
					    } else {
 | 
				
			||||||
 | 
					      name = [name, addPlayer];
 | 
				
			||||||
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // PLAYER FRACTION
 | 
				
			||||||
  let side;
 | 
					  let side;
 | 
				
			||||||
  if (sideMatch && sideMatch.length >= 3) {
 | 
					  if (sideMatch && sideMatch.length >= 3) {
 | 
				
			||||||
    // SIDE
 | 
					 | 
				
			||||||
    side = sideMatch[2];
 | 
					    side = sideMatch[2];
 | 
				
			||||||
  } else {
 | 
					  } else {
 | 
				
			||||||
    const inputArray = inputString.split(WHITESPACE);
 | 
					    const inputArray = inputString.split(WHITESPACE);
 | 
				
			||||||
| 
						 | 
					@ -299,6 +317,9 @@ const getPlayerAndFractionFromString = (inputString) => {
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					  // const magazineMatch = magazineRegex.exec(inputString);
 | 
				
			||||||
 | 
					  // const vehicleMatch = vehicleRegex.exec(inputString);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // if (magazineMatch && magazineMatch.length >= 3) {
 | 
					  // if (magazineMatch && magazineMatch.length >= 3) {
 | 
				
			||||||
  // MAGAZINE
 | 
					  // MAGAZINE
 | 
				
			||||||
  // console.log(magazineMatch[2])
 | 
					  // console.log(magazineMatch[2])
 | 
				
			||||||
| 
						 | 
					@ -322,7 +343,7 @@ const getPlayerAndFractionFromString = (inputString) => {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
  // do not return player for 'Error: No unit'
 | 
					  // do not return player for 'Error: No unit'
 | 
				
			||||||
  if (name && name !== 'Error: No unit') {
 | 
					  if (name && name !== 'Error: No unit') {
 | 
				
			||||||
    return {name: name.trim(), fraction: fraction};
 | 
					    return {name: name, fraction: fraction};
 | 
				
			||||||
  }
 | 
					  }
 | 
				
			||||||
};
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
										
											Binary file not shown.
										
									
								
							| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
  "name": "opt-cc",
 | 
					  "name": "opt-cc",
 | 
				
			||||||
  "version": "1.7.5",
 | 
					  "version": "1.7.6",
 | 
				
			||||||
  "author": "Florian Hartwich <hardi@noarch.de>",
 | 
					  "author": "Florian Hartwich <hardi@noarch.de>",
 | 
				
			||||||
  "private": true,
 | 
					  "private": true,
 | 
				
			||||||
  "scripts": {
 | 
					  "scripts": {
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in New Issue