The full code is below. It works like a champ. Please put it in your missions until TF comes up with a better solution. ATAG should make it mandatory.
Code:
public override void OnPlaceLeave(Player player, AiActor actor, int placeIndex)
{
base.OnPlaceLeave(player, actor, placeIndex);
if (actor != null && actor is AiAircraft)
{
//check limited aircraft
switch ((actor as AiAircraft).InternalTypeName())
{
}
}
Timeout(1, () => { damageAiControlledPlane(actor); } );
}
public override void OnActorDead(int missionNumber, string shortName, AiActor actor, List<DamagerScore> damages)
{
base.OnActorDead(missionNumber, shortName, actor, damages);
if (actor != null && actor is AiGroundActor)
Timeout(300, () => { (actor as AiGroundActor).Destroy(); ; });
}
public override void OnAircraftCrashLanded(int missionNumber, string shortName, AiAircraft aircraft)
{
base.OnAircraftCrashLanded(missionNumber, shortName, aircraft);
// COLANDER
//Timeout(120, () => { destroyPlane(aircraft); } );
}
public override void OnAircraftLanded(int missionNumber, string shortName, AiAircraft aircraft)
{
base.OnAircraftLanded(missionNumber, shortName, aircraft);
// COLANDER
//Timeout(120, () => { destroyPlane(aircraft); } );
}
private bool isAiControlledPlane(AiAircraft aircraft)
{
if (aircraft == null)
return false;
//check if a player is in any of the "places"
for (int i = 0; i < aircraft.Places(); i++)
if (aircraft.Player(i) != null)
return false;
return true;
}
private void destroyPlane(AiAircraft aircraft)
{
if (aircraft != null)
aircraft.Destroy();
}
private void damageAiControlledPlane(AiActor actorMain)
{
foreach (AiActor actor in actorMain.Group().GetItems())
{
if (actor == null || !(actor is AiAircraft))
return;
AiAircraft aircraft = (actor as AiAircraft);
if (!isAiControlledPlane(aircraft))
return;
if (aircraft == null)
return;
aircraft.hitNamed(part.NamedDamageTypes.ControlsElevatorDisabled);
aircraft.hitNamed(part.NamedDamageTypes.ControlsAileronsDisabled);
aircraft.hitNamed(part.NamedDamageTypes.ControlsRudderDisabled);
aircraft.hitNamed(part.NamedDamageTypes.FuelPumpFailure);
aircraft.hitNamed(part.NamedDamageTypes.Eng0TotalFailure);
aircraft.hitNamed(part.NamedDamageTypes.ElecPrimaryFailure);
aircraft.hitNamed(part.NamedDamageTypes.ElecBatteryFailure);
aircraft.hitLimb(part.LimbNames.WingL1, -0.5);
aircraft.hitLimb(part.LimbNames.WingL2, -0.5);
aircraft.hitLimb(part.LimbNames.WingL3, -0.5);
aircraft.hitLimb(part.LimbNames.WingL4, -0.5);
aircraft.hitLimb(part.LimbNames.WingL5, -0.5);
aircraft.hitLimb(part.LimbNames.WingL6, -0.5);
aircraft.hitLimb(part.LimbNames.WingL7, -0.5);
int iNumOfEngines = (aircraft.Group() as AiAirGroup).aircraftEnginesNum();
for (int i = 0; i < iNumOfEngines; i++)
{
aircraft.hitNamed((part.NamedDamageTypes)Enum.Parse(typeof(part.NamedDamageTypes), "Eng" + i.ToString() + "TotalFailure"));
}
Timeout(300, () => { destroyPlane(aircraft); });
}
}
Bookmarks