Considering that at least half the B-25s got wiped out en mass every frame, that's a lot of kills to get to counter-act the losses... *I* definitely didn't get that many kills!
Is it counting drones?
Yes and no...drones shot down are counted as kills just like the logs and log summary from AH, however loss of drones is not counted as a death, just like the AH logs...
Unlike the logs however, I do match the actual drones of the bomber pilot to the kill of the Victor for purposes of tracking drones when a formation hot pads and turns in either 1 or 2 drones back to the hanger.
The logs always print the Kill for the Victor but they never print the loss of a drone to a Victim sortie...hence it is necessary to cross reference Victor.Kills and the Sortie they were achieved with the sortie of the bomber pilot with drones.
Kills are: "Shot down a XXXX flown by XXXX... or "Awarded kill as XXXX crashes". In the later case I denote the Kill.Type as KillType.Awarded, vs KillType.Earned which is the default condition as most Kills are Earned Kills.
Deaths are of type Outcome.ShotDown, Outcome.ShotDownProxy and OutCome.ShotDownCaptured...ex
actly like the AH logs. Only 1 death is ever attributed to a pilot flying formations...
Every sortie has an Outcome; here is the declaration of the enumerated type that is stored in Sortie.Outcome.Type (eg: Sortie.Outcome.Type = Outcome.ShotDown)
public enum OutCome {
Landed,
ShotDown,
ShotDownCaptured,
ShotDownProxy,
Crashed,
Ditched,
Bailed,
Captured,
Vanished,
Undefined
}
Here is the code that actually assigns the values first for the Kills, followed by the Deaths, I left out the code for all of the other events that can occur and are either conclusive or interim:
// mid sortie events
case AhEventType.Kill:
//Shot down a Il-2 Type 3 flown by airbull.
data = frameEvent.Data.Substring(frameEvent.Data.IndexOf("down a") + 7);
data = data.Replace(" flown by ", ",");
data = data.Substring(0, data.Length - 1);
victimRideName = data.Substring(0, data.IndexOf(","));
victimName = data.Substring(data.IndexOf(",") + 1);
Ride victimRide = EP.Hanger.CheckOutRide(victimRideName, new Pilot(victimName));
sortie.Kills.Create(frameEvent.TimeStamp, sortie, victimRide.Pilot, victimRide);
sortie.HasEvents = true;
break;
case AhEventType.ProxyKill:
//Awarded kill as cactus crashes.
victimName = frameEvent.Data.Substring(frameEvent.Data.IndexOf("as ") + 3);
victimName = victimName.Substring(0, victimName.IndexOf(" "));
sortie.Kills.Create(frameEvent.TimeStamp, sortie, new Pilot(victimName), KillType.Awarded);
sortie.HasEvents = true;
break;
// Sortie.Outcome events
case AhEventType.ShotDown:
//Was shot down by xxxx.
sortie.Outcome = new SortieOutcome(frameEvent.TimeStamp, OutCome.ShotDown);
victorName = frameEvent.Data.Substring(frameEvent.Data.IndexOf("by ") + 3);
victorName = victorName.Substring(0, victorName.Length - 1);
if (victorName.Contains("unknown")) victorName = "UNKNOWN";
sortie.Victor = new Pilot(victorName);
sortie.HasEvents = true;
break;
case AhEventType.ShotDownCaptured:
//Was shot down by xxxx and captured.
sortie.Outcome = new SortieOutcome(frameEvent.TimeStamp, OutCome.ShotDownCaptured);
victorName = frameEvent.Data.Substring(frameEvent.Data.IndexOf("by ") + 3);
victorName = victorName.Replace(" and captured.", "");
if (victorName.Contains("unknown")) victorName = "UNKNOWN";
sortie.Victor = new Pilot(victorName);
sortie.HasEvents = true;
break;
case AhEventType.ShotDownProxy:
//Was shot down by xxxx (crashed).
sortie.Outcome = new SortieOutcome(frameEvent.TimeStamp, OutCome.ShotDownProxy);
victorName = frameEvent.Data.Substring(frameEvent.Data.IndexOf("by ") + 3);
victorName = victorName.Replace(" (crashed).", "");
if (victorName.Contains("unknown")) victorName = "UNKNOWN";
sortie.Victor = new Pilot(victorName);
sortie.HasEvents = true;
break;
Sample Sortie Log from AH:
WMLute
14:25:14 Departed from Field #42 in a La-7
14:49:03 Shot down a Fw 190F-8 flown by A8Moray.
14:55:26 Shot down a Ju 88A-4 flown by 4440.
14:55:56 Shot down a Ju 88A-4 flown by 4440.
14:57:06 Helps Banzzai shoot down KKEN.
14:57:43 Shot down a Ju 88A-4 flown by Flossy.
14:59:02 Shot down a Ju 88A-4 flown by pope14.
15:05:47 Was shot down by unknown enemy.
15:12:34 Departed from Field #42 in a La-7
15:38:18 Shot down a Ju 88A-4 flown by KKEN.
15:39:03 Shot down a Ju 88A-4 flown by pope14.
15:39:36 Shot down a Ju 88A-4 flown by pope14.
15:39:59 Helps SirNuk3 shoot down HB555.
15:40:20 Shot down a Ju 88A-4 flown by KKEN.
15:48:41 Arrived Safely at Field #42
15:49:01 Departed from Field #42 in a Gun Ship or Field
15:51:09 Arrived Safely at Field #42
15:51:17 Departed from Field #42 in a La-7
15:57:03 Arrived Safely at Field #42
15:58:06 Departed from Field #42 in a La-7
16:11:40 Helps Snefens shoot down Turner.
16:17:05 Shot down a Fw 190A-8 flown by CANUKK.
16:22:40 Shot down a Fw 190D-9 flown by horble.
16:33:17 Shot down a Bf 109K-4 flown by Twizzty.
16:34:16 Shot down a Bf 109K-4 flown by WngViper.
16:34:32 Shot down a Bf 109K-4 flown by Dibs775.
16:34:52 Shot down a Bf 109K-4 flown by HotRod1.
16:40:39 Skillfully ditched.