public override void OnPlayerKilled(Kill kKillerVictimDetails)
{
if (!fIsEnabled) return;
String killer = kKillerVictimDetails.Killer.SoldierName;
String victim = kKillerVictimDetails.Victim.SoldierName;
String weapon = kKillerVictimDetails.DamageType;
bool isAdminKill = false;
if (String.IsNullOrEmpty(killer)) {
killer = victim;
isAdminKill = (weapon == "Death");
}
DebugWrite("^9^bGot OnPlayerKilled^n: " + killer + " -> " + victim + " (" + weapon + ")", 8);
if (isAdminKill) DebugWrite("^9OnPlayerKilled: admin kill: ^b" + victim + "^n (" + weapon + ")", 7);
try {
if (fGameState == GameState.Unknown || fGameState == GameState.Warmup) {
bool wasUnknown = (fGameState == GameState.Unknown);
fGameState = (TotalPlayerCount() < 4) ? GameState.Warmup : GameState.Playing;
if (wasUnknown || fGameState == GameState.Playing) DebugWrite("OnPlayerKilled: ^b^3Game state = " + fGameState, 6);
if (wasUnknown && fGameVersion == GameVersion.BF4) UpdateFactions();
fNeedPlayerListUpdate = (fGameState == GameState.Playing);
}
if (!isAdminKill) {
KillUpdate(killer, victim);
if (fPluginState == PluginState.Active && fGameState == GameState.Playing) {
if (!IsModelInSync()) {
if (fTimeOutOfJoint == 0) {
// If a move or reassign takes too long, abort it, checked in OnListPlayers
fTimeOutOfJoint = GetTimeInRoundMinutes();
}
} else {
fTimeOutOfJoint = 0;
if (EnableAdminKillForFastBalance) {
FastBalance("Kill: ");
}
// Ok to call normal balance after FastBalance, they exclude from each other
BalanceAndUnstack(victim);
}
}
}
} catch (Exception e) {
ConsoleException(e);
}
}