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

Reply
 
Thread Tools Display Modes
  #1  
Old 09-14-2012, 10:41 AM
WhiskeyBravo's Avatar
WhiskeyBravo WhiskeyBravo is offline
Approved Member
 
Join Date: Apr 2010
Posts: 8
Default

Thank you gentlemen for your replies. I have already installed Visual C# 2010 Express after following Kodiaks excellent tutorials at the top of this forum.

I've also started on the C# tutorials mentioned in the post by bolox above - great find.

I have some experience of Pascal programming from almost 30 years ago!! so the concept of programming is not totally alien to me.

All I need now is twice as many hours in a day so I can learn C# AND mission building in the FMB.

Still, keeps me off the streets!

Thanks again,

WB.
Reply With Quote
  #2  
Old 09-14-2012, 11:29 AM
WhiskeyBravo's Avatar
WhiskeyBravo WhiskeyBravo is offline
Approved Member
 
Join Date: Apr 2010
Posts: 8
Default

By way of example, how would I combine the following two scripts:

Code:
using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;

public class Mission : AMission
{
 
public override void OnTickGame()
{

// loads the 1st sub-mission in 10 min and repeates it every 60 min.
    if (Time.tickCounter() % 108000 == 18000) // 108000 = 60 min repeat. 18000 = 10 min delay. 
        // pls. note!!! the 1st figure above must be always larger than 2nd!
  {
      GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/My_mis1/mission1.mis");

      // prints message on screen after mission load
      GamePlay.gpHUDLogCenter("Hello, world! Mission1.mis loaded!");

      // prints message on screen in 10 minutes / 600 seconds
      double initTime = 0.0;
      Timeout(initTime += 600, () =>
      {
          GamePlay.gpHUDLogCenter("10 minutes into the 1st mission! Wow! It works!!!");
      });

      // prints message on screen in 5 minutes  / 300 seconds
      Timeout(initTime += 300, () =>
      {
          GamePlay.gpHUDLogCenter("Wholy s.. it works!!!");
      });

   }

// loads the 2nd sub-mission, etc. the same way
       if (Time.tickCounter() % 108000 == 54000) //  108000 = 60 min repeat, 54000 = 30 min delay. 
    {
        GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/My_mis1/mission2.mis");
        GamePlay.gpHUDLogCenter("Mission2.mis loaded!"); 
      double initTime = 0.0;
      Timeout(initTime += 600, () =>
       {
           GamePlay.gpHUDLogCenter("Mission2 10 min message!");
       });
            
      Timeout(initTime += 300, () =>
         {
             GamePlay.gpHUDLogCenter("Mission2 15 min message!");
         });
    }

// loads the 3rd sub-mission
       if (Time.tickCounter() % 108000 == 90000) // 60 min repeat, 50 min delay 
       {
           GamePlay.gpPostMissionLoad("missions/Multi/Dogfight/My_mis1/mission3.mis");
           GamePlay.gpHUDLogCenter("Mission3.mis loaded!");

           double initTime = 0.0;
           Timeout(initTime += 600, () =>
           {
               GamePlay.gpHUDLogCenter("Mission3 10 min message!");
           });
           Timeout(initTime += 300, () =>
           {
               GamePlay.gpHUDLogCenter("Now it really works! You are a genius! Have fun!");
           });
       }
}


}
with

Code:
using System;
using maddox.game;
using maddox.game.world;
using System.Collections.Generic;

public class Mission : AMission
{
  
    // destroys aircraft abandoned by a player
    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);
		aircraft.hitNamed (part.NamedDamageTypes.Eng0TotalFailure);
		aircraft.hitNamed (part.NamedDamageTypes.Eng1TotalFailure);

        /***Timeout (240, () =>
                {explodeFuelTank (aircraft);}
            );
         * ***/

        Timeout (300, () =>
				{destroyPlane (aircraft);}
			);
	}

//////////////////////////////////////////////////////////////////////////////////////////////////

	public override void OnPlaceLeave (Player player, AiActor actor, int placeIndex) 
    {
		base.OnPlaceLeave (player, actor, placeIndex);
		Timeout (1, () =>
				{damageAiControlledPlane (actor);}
			);
	}

	public override void OnAircraftCrashLanded (int missionNumber, string shortName, AiAircraft aircraft) 
    {
		base.OnAircraftCrashLanded (missionNumber, shortName, aircraft);
		Timeout (300, () =>
            { destroyPlane(aircraft); }
			);
	}
    public override void OnAircraftLanded (int missionNumber, string shortName, AiAircraft aircraft) 
    {
        base.OnAircraftLanded(missionNumber, shortName, aircraft);
        Timeout(300, () =>
            { destroyPlane(aircraft); }
            );
    }


}
Can i just paste the second piece of code (minus the namespace declarations and the first public class declaration) onto the end of the first piece of code?

I think it should work but I'm still a little hazy on class declarations etc at the moment.

Cheers,

WB.
Reply With Quote
  #3  
Old 09-14-2012, 04:16 PM
ATAG_Colander ATAG_Colander is offline
Approved Member
 
Join Date: Jan 2012
Posts: 214
Default

Think of each class as a separate source file.
You can add between the class {}'s any function you want, just as you would on a source code.

So, you can copy the OnTickGame function and paste it inside the other's file "
public class Mission : AMission" and it will work.

Your only worry should be:
a) not have 2 functions with the same name (i.e. 2 OnTickGame's)
b) call the functions that are not called by the game from your code (i.e. isAiControlledPlane )
Reply With Quote
Reply

Thread Tools
Display Modes

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:03 PM.


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