Fulqrum Publishing Home   |   Register   |   Today Posts   |   Members   |   UserCP   |   Calendar   |   Search   |   FAQ

Go Back   Official Fulqrum Publishing forum > Fulqrum Publishing > IL-2 Sturmovik: Cliffs of Dover > FMB, Mission & Campaign builder Discussions

 
 
Thread Tools Display Modes
Prev Previous Post   Next Post Next
  #21  
Old 06-21-2012, 02:42 PM
David198502's Avatar
David198502 David198502 is offline
Approved Member
 
Join Date: Dec 2009
Location: Austria
Posts: 1,536
Default

here is the complete code:

HTML 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
 


Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT. The time now is 09:01 AM.


Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Copyright © 2007 Fulqrum Publishing. All rights reserved.