Continiuing my thought...
If I remouve this part of my "original" script...
PHP Code:
private bool isAiControlledPlane (AiAircraft aircraft)
{
if (aircraft == null)
{
return false;
}
Player [] players = GamePlay.gpRemotePlayers ();
foreach (Player p in players)
{
if (p != null && (p.Place () is AiAircraft) && (p.Place () as AiAircraft) == aircraft)
{
return false;
}
}
return true;
}
private void destroyPlane (AiAircraft aircraft) {
if (aircraft != null) {
aircraft.Destroy ();
}
}
private void explodeFuelTank (AiAircraft aircraft)
{
if (aircraft != null)
{
aircraft.hitNamed (part.NamedDamageTypes.FuelTank0Exploded);
}
}
private void destroyAiControlledPlane (AiAircraft aircraft) {
if (isAiControlledPlane (aircraft)) {
destroyPlane (aircraft);
}
}
private void damageAiControlledPlane (AiActor actor) {
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);
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 (240, () =>
{explodeFuelTank (aircraft);}
);
* ***/
Timeout (300, () =>
{destroyPlane (aircraft);}
);
}
and replace it with ....
PHP Code:
public class Mission : AMission
{
#region InGameActors
internal class InGameActors
{
internal class Actor
{
internal bool destroyed = false;
internal AiActor actor { get; set; }
internal DateTime CreationTime { get; set; }
internal int MissionNumber { get; set; }
public Actor(AiActor actor, int missionNumber)
{
this.actor = actor;
this.CreationTime = DateTime.Now;
this.MissionNumber = missionNumber;
this.destroyed = false;
}
}
internal List<Actor> ActorsInGame = new List<Actor>();
private bool IsActorDestroyable(AiActor actor)
{
bool ActorDestroyable = true;
//Check if actor is empty (no Player)
if (actor is AiCart)
{
if ((actor as AiCart).ExistCabin(0))
for (int i = 0; i < (actor as AiCart).Places(); i++)
{
if ((actor as AiCart).Player(i) != null)
{
ActorDestroyable = false;
break;
}
}
}
return ActorDestroyable;
}
private void destroyActor(AiActor actor)
{
if (actor != null)
if (actor is AiCart)
(actor as AiCart).Destroy();
}
public void Add(AiActor actor, int missionNumber)
{
if (actor != null && actor is AiCart)
ActorsInGame.Add(new Actor(actor, missionNumber));
}
public void Removeable(AiActor actor)
{
if (ActorsInGame.Exists(item => item.actor == actor))
ActorsInGame[ActorsInGame.FindIndex(item => item.actor == actor)].destroyed = true;
}
public List<AiActor> GetActors()
{
List<AiActor> tmpActors = new List<AiActor>();
ActorsInGame.ForEach(item => { tmpActors.Add(item.actor); });
return tmpActors;
}
public void DestroyActor(AiActor actor)
{
if (ActorsInGame.Exists(item => item.actor == actor))
{
int i = ActorsInGame.FindIndex(item => item.actor == actor);
if (IsActorDestroyable(ActorsInGame[i].actor))
{
destroyActor(ActorsInGame[i].actor);
}
}
ActorsInGame.RemoveAll(item => item.destroyed == true);
}
public void DestroyActors(int missionNumber)
{
if (missionNumber == -1)
{
ActorsInGame.ForEach(item => { if (IsActorDestroyable(item.actor)) destroyActor(item.actor); });
}
else if (ActorsInGame.Exists(item => item.MissionNumber == missionNumber))
ActorsInGame.ForEach(item =>
{
if (item.MissionNumber == missionNumber)
if (IsActorDestroyable(item.actor))
destroyActor(item.actor);
});
ActorsInGame.RemoveAll(item => item.destroyed == true);
}
public void DestroyActors(int missionNumber, int army)
{
if (ActorsInGame.Exists(item => item.MissionNumber == missionNumber && item.actor.Army() == army))
ActorsInGame.ForEach(item =>
{
if (item.MissionNumber == missionNumber && item.actor.Army() == army)
if (IsActorDestroyable(item.actor))
destroyActor(item.actor);
});
ActorsInGame.RemoveAll(item => item.destroyed == true);
}
public void DestroyActors(Point3d Position, double Radius)
{
if (ActorsInGame.Exists(item => item.actor.Pos().distance(ref Position) < Radius))
ActorsInGame.ForEach(item =>
{
if (item.actor.Pos().distance(ref Position) < Radius)
if (IsActorDestroyable(item.actor))
destroyActor(item.actor);
});
ActorsInGame.RemoveAll(item => item.destroyed == true);
}
public void DestroyActors(int missionNumber, Point3d Position, double Radius)
{
if (ActorsInGame.Exists(item => (item.MissionNumber == missionNumber && item.actor.Pos().distance(ref Position) < Radius)))
ActorsInGame.ForEach(item =>
{
if (item.MissionNumber == missionNumber && item.actor.Pos().distance(ref Position) < Radius)
if (IsActorDestroyable(item.actor))
destroyActor(item.actor);
});
ActorsInGame.RemoveAll(item => item.destroyed == true);
}
public void DestroyActors(int missionNumber, params AiGroundActorType[] types)
{
foreach (AiGroundActorType abat in types)
{
if (ActorsInGame.Exists(item => item.MissionNumber == missionNumber && (item.actor as AiGroundActor).Type() == abat))
ActorsInGame.ForEach(item =>
{
if (item.MissionNumber == missionNumber && (item.actor as AiGroundActor).Type() == abat)
if (IsActorDestroyable(item.actor))
destroyActor(item.actor);
});
}
ActorsInGame.RemoveAll(item => item.destroyed == true);
}
public void DestroyActors(TimeSpan DestroyAfterTime)
{
DateTime tmpTime = DateTime.Now.Subtract(DestroyAfterTime);
if (ActorsInGame.Exists(item => item.CreationTime <= tmpTime))
ActorsInGame.ForEach(item =>
{
if (item.CreationTime <= tmpTime)
if (IsActorDestroyable(item.actor))
destroyActor(item.actor);
});
ActorsInGame.RemoveAll(item => item.destroyed == true);
}
public void DestroyActors(params AiGroundActorType[] types)
{
foreach (AiGroundActorType abat in types)
{
if (ActorsInGame.Exists(item => (item.actor is AiGroundActor) && (item.actor as AiGroundActor).Type() == abat))
ActorsInGame.ForEach(item =>
{
if ((item.actor is AiGroundActor) && (item.actor as AiGroundActor).Type() == abat)
if (IsActorDestroyable(item.actor))
destroyActor(item.actor);
});
}
ActorsInGame.RemoveAll(item => item.destroyed == true);
}
}
#endregion
}
everything should work fine right???
__________________

Asus P6T V2 Deluxe, I7 930, 3x2 GB RAM XMS3 Corsair1333 Mhz, Nvidia Leadtek GTX 470, Acer 1260p screen projector, Track IR 4 OS ver5, Saitek Pro Flight Rudder, Saitek X52, Win 7 x64 ultimate