| 295 | } |
| 296 | |
| 297 | void AIStats::OnVehicleDestroyed(EntityAI* killed, EntityAI* killer) |
| 298 | { |
| 299 | if (!killed) |
| 300 | { |
| 301 | return; |
| 302 | } |
| 303 | |
| 304 | Person* killedSoldier = dyn_cast<Person>(killed); |
| 305 | Person* killerPerson = GetPlayerPerson(killer); |
| 306 | |
| 307 | if (killed && killer) |
| 308 | { |
| 309 | _mission.RecordReportKill(killed, killer); |
| 310 | } |
| 311 | |
| 312 | // MP statistics |
| 313 | bool isEnemy; |
| 314 | if (killer == killed) |
| 315 | { |
| 316 | isEnemy = false; |
| 317 | } |
| 318 | else if (killed->CommanderUnit() && killed->CommanderUnit()->GetPerson()->GetExperience() < ExperienceRenegadeLimit) |
| 319 | { |
| 320 | isEnemy = true; |
| 321 | } |
| 322 | else |
| 323 | { |
| 324 | if (killer) |
| 325 | { |
| 326 | AICenter* center = GWorld->GetCenter(killer->Vehicle::GetTargetSide()); |
| 327 | isEnemy = center && center->IsEnemy(killed->Vehicle::GetTargetSide()); |
| 328 | } |
| 329 | else |
| 330 | { |
| 331 | isEnemy = true; |
| 332 | } |
| 333 | } |
| 334 | |
| 335 | const MissionHeader* header = GetNetworkManager().GetMissionHeader(); |
| 336 | if (header && header->aiKills) |
| 337 | { |
| 338 | if (killer) |
| 339 | { |
| 340 | if (killerPerson && killerPerson->Brain() && killerPerson->Brain()->IsPlayable()) |
| 341 | { |
| 342 | RString playerName = killerPerson->GetInfo()._name; |
| 343 | TargetSide playerSide = TSideUnknown; |
| 344 | AIGroup* grp = killerPerson->Brain()->GetGroup(); |
| 345 | if (grp) |
| 346 | { |
| 347 | AICenter* center = grp->GetCenter(); |
| 348 | if (center) |
| 349 | { |
| 350 | playerSide = center->GetSide(); |
| 351 | } |
| 352 | } |
| 353 | _mission.AddMPKill(playerName, playerSide, killed->GetType(), |
| 354 | killedSoldier && killedSoldier->IsNetworkPlayer(), isEnemy); |
no test coverage detected