View Single Post
  #7  
Old 04-02-2012, 10:41 AM
_79_dev _79_dev is offline
Approved Member
 
Join Date: Sep 2010
Location: Dublin
Posts: 242
Default

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 (
!= 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 0iNumOfEnginesi++) 
        { 
            
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 getset; }
            
internal DateTime CreationTime getset; }
            
internal int MissionNumber getset; }

            public 
Actor(AiActor actorint missionNumber)
            {
                
this.actor actor;
                
this.CreationTime DateTime.Now;
                
this.MissionNumber missionNumber;
                
this.destroyed false;
            }
        }


        
internal List<ActorActorsInGame = 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< (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 actorint missionNumber)
        {
            if (
actor != null && actor is AiCart)
                
ActorsInGame.Add(new Actor(actormissionNumber));
        }


        public 
void Removeable(AiActor actor)
        {
            if (
ActorsInGame.Exists(item => item.actor == actor))
                
ActorsInGame[ActorsInGame.FindIndex(item => item.actor == actor)].destroyed true;
        }


        public List<
AiActorGetActors()
        {
            List<
AiActortmpActors = 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 missionNumberint 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 Positiondouble 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 missionNumberPoint3d Positiondouble 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 missionNumberparams 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
Reply With Quote