//==========================================================================================
//
//	weisbaden_final.gm
//
//	Who          	When		What
//------------------------------------------------------------------------------------------
//	^1[UJE]^3Captain	24 May 2015	Initial Script
//
//==========================================================================================
//

global Map =
{
	Main_Generator_Dyno = 0,
	Neutral_Command_Post_Dyno = 0,
	Silo_Controls_Dyno = 0,
    Talk = true,
	start_of_map = true,
	Receiving_Bay_Gate = true,
	Allied_Command_Post_Built = true,

	Allied_Command_Post_Built = function()
	{
		if ( Map.start_of_map )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, {
				"ATTACK_Hall_Gate_.*",
				"SMOKEBOMB_Hall_.*",
			});
			Map.start_of_map = false;
		}

		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"MOUNTMG42_.*",
			"ATTACK_Rail_Yard_.*",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Receiving_Bay_Gate" );
	    SetAvailableMapGoals( TEAM.ALLIES, false, {
	    	"PLANT_Neutral_Command_Post",
	    	"BUILD_Neutral_Command_Post",
	    });

			  if ( Map.Receiving_Bay_Gate == false )
		{
	   SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Neutral_Command_Post" );
		}

	   SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Neutral_Command_Post" );

	   SetAvailableMapGoals( TEAM.ALLIES, false, {
	   	"PLANT_Neutral_Command_Post",
	   	"BUILD_Neutral_Command_Post",
	   });
	   Map.Allied_Command_Post_Built = true;
		Util.MapDebugPrint( "Allied_Command_Post_Built" );

	},

	Allied_Command_Post_Planted = function()
	{
		Map.Allied_Command_Post_Dyno += 1;
		Util.MapDebugPrint( "Allied_Command_Post_Planted" );
	},

	Allied_Command_Post_Defused = function()
	{
		Map.Allied_Command_Post_Dyno -= 1;
		Util.MapDebugPrint( "Allied_Command_Post_Defused" );
	},

	Allied_Command_Post_Destroyed = function()
	{

     if ( Map.Receiving_Bay_Gate == false )
		{
	   SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Neutral_Command_Post" );
		}
	SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Neutral_Command_Post" );

	SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Neutral_Command_Post" );
	SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Neutral_Command_Post" );

		Util.MapDebugPrint( "Allied_Command_Post_Destroyed" );
	},

	Axis_Command_Post_Built = function()
	{
	SetAvailableMapGoals( TEAM.AXIS, false, {
		"PLANT_Neutral_Command_Post",
		"BUILD_Neutral_Command_Post",
	});

	SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Neutral_Command_Post" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Neutral_Command_Post" );

		Util.MapDebugPrint( "Axis_Command_Post_Built" );
	},

	Axis_Command_Post_Planted = function()
	{
		Map.Axis_Command_Post_Dyno += 1;
		Util.MapDebugPrint( "Axis_Command_Post_Planted" );
	},

	Axis_Command_Post_Defused = function()
	{
		Map.Axis_Command_Post_Dyno -= 1;
		Util.MapDebugPrint( "Axis_Command_Post_Defused" );
	},

	Axis_Command_Post_Destroyed = function()
	{

	SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Neutral_Command_Post" );
	SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Neutral_Command_Post" );

	SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Neutral_Command_Post" );
	SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Neutral_Command_Post" );

		Util.MapDebugPrint( "Axis_Command_Post_Destroyed" );

	},

	Receiving_Bay_Gate_Planted = function()
	{
        Map.Receiving_Bay_gate_Dyno += 1;
		Util.MapDebugPrint( "Receiving_Bay_gate_Planted" );
	},

	Receiving_Bay_Gate_Defused = function()
	{
		Map.Receiving_Bay_gate_Dyno -= 1;
		Util.MapDebugPrint( "Receiving_Bay_gate_Defused" );
	},

	Receiving_Bay_Gate_Destroyed = function()
	{
      if ( Map.Allied_Command_Post_Built == true )
		{
	   SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Neutral_Command_Post" );
		}
	 SetAvailableMapGoals( TEAM.AXIS, false, {
	 	"MOBILEMG42_Hall_Gate",
	 	"DEFEND_Hall_Gate_.*",
	 });
	 SetAvailableMapGoals( TEAM.AXIS, true, {
	 	"DEFEND_Main_Generator_.*",
	 	"MOBILEMG42_Main_Generator",
	 });


	 SetAvailableMapGoals( TEAM.ALLIES, false, {
	 	"SMOKEBOMB_Hall_.*",
	 	"ATTACK_Hall_Gate_.*",
	 });
	 SetAvailableMapGoals( TEAM.ALLIES, true, {
	 	"ATTACK_Main_Generator_.*",
	 	"PLANT_Main_Generator",
	 });

		Map.Main_Generator_Dyno -= 1;
		Map.Receiving_Bay_Gate = false;
		Util.MapDebugPrint( "Receiving_Bay_gate_Destroyed" );
	},

   Main_Generator_Planted = function()
	{
		Map.Main_Generator_Dyno += 1;
		Util.MapDebugPrint( "Main_Generator_Planted" );
	},

	Silo_Controls_Planted = function()
	{
		Map.Silo_Controls_Dyno += 1;
		Util.MapDebugPrint( "Silo_Controls_Planted" );
	},

	Main_Generator_Defused = function()
	{
		Map.Main_Generator_Dyno -= 1;
		Util.MapDebugPrint( "Main_Generator_Defused" );
	},

	Silo_Controls_Defused = function()
	{
		Map.Silo_Controls_Dyno -= 1;
		Util.MapDebugPrint( "Silo_Controls_Defused" );
	},

	Main_Generator_Destroyed = function()
	{
	 SetAvailableMapGoals( TEAM.AXIS, false, {
	 	"MOBILEMG42_Main_Generator",
	 	"DEFEND_Main_Generator_.*",
	 });
	 SetAvailableMapGoals( TEAM.AXIS, true, {
	 	"DEFEND_Silo_Controls_.*",
	 	"MOBILEMG_Silo_Controls_.*",
	 });



	 SetAvailableMapGoals( TEAM.ALLIES, false, {
	 	"ATTACK_Main_Generator_.*",
	 	"PLANT_Main_Generator",
	 	"ATTACK_Main_Generator_.*",
	 });
	 SetAvailableMapGoals( TEAM.ALLIES, true, {
	 	"PLANT_Silo_Controls",
	 	"ATTACK_Silo_Controls_.*",
	 });

		Map.Main_Generator_Dyno = 0;

		Util.MapDebugPrint( "Main_Generator_Destroyed" );
	},


	Silo_Controls_Destroyed = function()
	{
		Map.Silo_Controls_Dyno = 0;

		Util.MapDebugPrint( "Silo_Controls_Destroyed" );
	},

};

global OnMapLoad = function()
{
	// Register callback functions
	OnTrigger( "Allied Command Post constructed. Charge speed increased!", Map.Allied_Command_Post_Built );
	OnTrigger( "Axis Command Post constructed. Charge speed increased!", Map.Axis_Command_Post_Built );
	OnTrigger( "Allied team has destroyed the Axis Command Post!", Map.Axis_Command_Post_Destroyed );
	OnTrigger( "Axis team has destroyed the Allied Command Post!", Map.Allied_Command_Post_Destroyed );
	OnTrigger( "Planted at the Receiving Bay Gate.", Map.Receiving_Bay_Gate_Planted );
	OnTrigger( "Defused at the Receiving Bay Gate.", Map.Receiving_Bay_Gate_Defused );
	OnTrigger( "The Allies have breached the receiving bay door!", Map.Receiving_Bay_Gate_Destroyed );
	OnTrigger( "Planted at the Main Generator.", Map.Main_Generator_Planted );
	OnTrigger( "Planted at the Silo Controls.", Map.Silo_Controls_Planted );
	OnTrigger( "Defused at the Main Generator.", Map.Main_Generator_Defused );
	OnTrigger( "Defused at the Silo Controls.", Map.Silo_Controls_Defused );
	OnTrigger( "The Allies have destroyed the Main Generator - security doors and fuel pumps off-line!", Map.Main_Generator_Destroyed );
	OnTrigger( "Auxiliary generators engaged - fuel pumps re-activated!", Map.Main_Generator_Destroyed );
	OnTrigger( "The Allies have destroyed the Silo Controls!", Map.Silo_Controls_Destroyed );

	Util.DisableGoal( ".*", true ); // all but routes
	SetAvailableMapGoals( TEAM.AXIS, true, {
		"DEFEND_Hall_Gate_.*",
		"MOBILEMG42_Hall_Gate",
		"AMMOCAB_.*",
		"HEALTHCAB_.*",
	});
	SetAvailableMapGoals( TEAM.AXIS, false, {
		"ATTACK_.*",
		"BUILD_.*",
		"PLANT_.*",
	});




	SetAvailableMapGoals( TEAM.ALLIES, false, {
		"ATTACK_.*",
		"PLANT_.*",
		"SMOKEBOMB_Hall_.*",
	});
	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"MOUNTMG42_.*",
		"BUILD_.*",
		"ATTACK_Rail_.*",
		"AMMOCAB_.*",
		"HEALTHCAB_.*",
	});

	// Max users per goal
	Util.SetMaxUsers( 1, "ATTACK_.*" );
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );
	Util.SetMaxUsers( 1, "BUILD_.*" );

	// *** PRIORITY ***
	SetGoalPriority( "PLANT_Silo_Controls", 0.91, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Main_Generator", 0.91, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Receiving_Bay_Gate", 0.80, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Command_.*", 0.84, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_Command_.*", 0.84, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_Command_.*", 0.81, TEAM.AXIS, CLASS.ENGINEER );

	// Camp times
	SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=45, MaxCampTime=90} );

	Util.MapDebugPrint( "Omni-bot map script for " + GetMapName() + " executed." );
};

global OnBotJoin = function( bot )
{
	bot.TargetBreakableDist = 100.0;
};

