View Single Post
  #22  
Old 06-21-2012, 03:29 PM
FG28_Kodiak FG28_Kodiak is offline
Approved Member
 
Join Date: Dec 2009
Location: Swabia->Bavaria->Germany
Posts: 884
Default

Ok some bracket mismatch, corrected version:
Code:
using System;
using System.Collections;
using System.Collections.Generic;
using maddox.GP;
using maddox.game;
using maddox.game.world;

using part;


public class Mission : AMission
{
    private bool battleEnded = false;
   
    class BirthPlacePlanes
    {
        public string BirthPlace { get; set; }
        public int NumberOfPlanes { get; set; }
        

        public BirthPlacePlanes(string birthPlaceName, int maxNumber)
        {
            BirthPlace = birthPlaceName;
            NumberOfPlanes = maxNumber;
        }
    }


    List<BirthPlacePlanes> AvailablePlanes = new List<BirthPlacePlanes>
                                                  {
                                                      new BirthPlacePlanes("RAF-5k", 10),
                                                      new BirthPlacePlanes("RAF-3k", 10),
                                                      new BirthPlacePlanes("RAF-500m", 10),
                                                      new BirthPlacePlanes("JG26-5k", 1),
                                                      new BirthPlacePlanes("JG26-3k", 1),
                                                      new BirthPlacePlanes("JG26-500m", 5)
                                                  };

    
    public bool IsActorDown(AiActor actor)
    {
        AiAircraft aircraft = actor as AiAircraft;
        if (aircraft != null && (aircraft.getParameter(ParameterTypes.Z_AltitudeAGL, -1) <= 2.0
                                            && aircraft.getParameter(ParameterTypes.Z_VelocityTAS, -1) <= 1.0))
            return true;
        
            return false;
    }


    public int CountPlayerUsedPlanes(int army)
    {
        int count = 0;

        foreach (Player pl in AllPlayers())
        {
            if (pl.Place() != null && pl.Army() == army && pl.PlacePrimary() == 0)
                count++;
        }

        return count;
    }


    public int CountAvailablePlanes(int army)
    {
        int count = 0;

        foreach (BirthPlacePlanes bpp in AvailablePlanes)
        {
            AiBirthPlace birthPlace = GetBirthPlaceByName(bpp.BirthPlace);

            if (birthPlace != null)
                if (birthPlace.Army() == army)
                    count += bpp.NumberOfPlanes;
        }

        return count;
    }


    public AiBirthPlace GetBirthPlaceByName(string birthPlaceName)
    {
        foreach (AiBirthPlace bp in GamePlay.gpBirthPlaces())
        {
            if (bp.Name() == birthPlaceName)
                return bp;
        }

        return null;
    }


    public AiBirthPlace GetBirthplace(AiActor actor)
    {
        AiBirthPlace nearestBirthplace = null;
        AiBirthPlace[] birthPlaces = GamePlay.gpBirthPlaces();

        Point3d pos = actor.Pos();

        if (birthPlaces != null)
        {
            foreach (AiBirthPlace airport in birthPlaces)
            {
                if (nearestBirthplace != null)
                {
                    if (nearestBirthplace.Pos().distance(ref pos) > airport.Pos().distance(ref pos))
                        nearestBirthplace = airport;
                }
                else nearestBirthplace = airport;
            }
        }
        return nearestBirthplace;
    }


    public override void OnBattleStarted()
    {
        base.OnBattleStarted();

        MissionNumberListener = -1;
    }


    public override void OnPlaceEnter(Player player, AiActor actor, int placeIndex)
    {
        base.OnPlaceEnter(player, actor, placeIndex);

        AiBirthPlace birthPlace = GetBirthplace(actor);


        AiCart cart = actor as AiCart;

        if (cart != null)
            AvailablePlanes.ForEach(place =>
                                        {
                                            if (place.BirthPlace == birthPlace.Name())
                                            {

                                                place.NumberOfPlanes--;

                                                int numberOfAllAvailablePlanes = CountAvailablePlanes(actor.Army());

                                                if (numberOfAllAvailablePlanes == 5)
                                                {
                                                    if (actor.Army() == 1)
                                                        GamePlay.gpHUDLogCenter(null, "Attention Reds only {0} Planes are left", new object[] {numberOfAllAvailablePlanes});
                                                    if (actor.Army() == 2)
                                                        GamePlay.gpHUDLogCenter(null, "Attention Blues only {0} Planes are left", new object[] {numberOfAllAvailablePlanes});
                                                }

                                                if (place.NumberOfPlanes == 3)
                                                {
                                                    Timeout(5, () =>{
                                                                        GamePlay.gpHUDLogCenter(null, "Attention only {0} Planes are left on {1}", new object[] { place.NumberOfPlanes, place.BirthPlace});
                                                                    });
                                                }
                                                if (place.NumberOfPlanes == 0)
                                                {
                                                    GamePlay.gpHUDLogCenter(null, "Attention {0} is no longer available", new object[] {place.BirthPlace});
                                                    birthPlace.destroy();
                                                }
                                            }
                                        });
    }




    public List<Player> AllPlayers()
    {
        List<Player> allPlayers = new List<Player>();

        if(GamePlay.gpPlayer() != null)
            allPlayers.Add(GamePlay.gpPlayer());
        if(GamePlay.gpRemotePlayers() != null)
            allPlayers.AddRange(GamePlay.gpRemotePlayers());

        return allPlayers;
    }


    public override void OnTickGame()
    {
        base.OnTickGame();

        if (Time.tickCounter() % 300 == 0)
        {
            // check if Player is grounded

            AllPlayers().ForEach(item =>
                                     {
                                         if (item.Place() != null)
                                             if (IsActorDown(item.Place()))
                                             {
                                                 AiCart cart = item.Place() as AiCart;
                                                 if (cart != null) cart.Destroy();
                                             }
                                     });
                                     
                                     

            //TestMessages remove if no longer needed 
            GamePlay.gpLogServer(null, "Army: RED, Available: {0}, In Use: {1}", new object[] { CountAvailablePlanes(1), CountPlayerUsedPlanes(1) });
            GamePlay.gpLogServer(null, "Army: BLUE, Available: {0}, In Use: {1}", new object[] { CountAvailablePlanes(2), CountPlayerUsedPlanes(2) });
        }
    }


    public override void OnActorDestroyed(int missionNumber, string shortName, AiActor actor)
    {
        base.OnActorDestroyed(missionNumber, shortName, actor);

        AiCart cart = actor as AiCart;
        
        if (cart != null)
        {
            if (actor.Army() == 1 && CountAvailablePlanes(1) == 0 && CountPlayerUsedPlanes(1) == 0 && !battleEnded)
            {
                battleEnded = true;
                GamePlay.gpHUDLogCenter(null, "JG26 kicked your butts");
            }
            else if (actor.Army() == 2 && CountAvailablePlanes(2) == 0 && CountPlayerUsedPlanes(2) == 0 && !battleEnded)
            {
                battleEnded = true;
                GamePlay.gpHUDLogCenter(null, "Micky Mouse Team won");
            }
        }
    }
}
Reply With Quote