//==========================================================================================
//
//	goldeneye_facility1.gm
//
//	Who  	When		What
//------------------------------------------------------------------------------------------
//	^4Tardis	27 June 2010	Initial Script
//
//==========================================================================================
//    Warning ALLIES Can get Stuck In Spwan !! Including Bots.
//==========================================================================================
global Map =
{
	Debug = 0,

	Allied_Command_Post_Dyno = 0,
	Axis_Command_Post_Dyno = 0,
	Fuel_Depot_Dyno = 0,
	Fuel_Wall_Dyno = 0,
	Plant_Fuel_Depot = "PLANT_Fuel_Depot",

	Allied_Command_Post_Built = function( trigger )
	{
		Util.MapDebugPrint( "Allied_Command_Post_Built" );
	},

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

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

	Allied_Command_Post_Destroyed = function( trigger )
	{
		Map.Command_Post_Dyno = 0;
		Util.MapDebugPrint( "Allied_Command_Post_Destroyed" );
	},

	Axis_Command_Post_Built = function( trigger )
	{
		Util.MapDebugPrint( "Axis_Command_Post_Built" );
	},

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

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

	Axis_Command_Post_Destroyed = function( trigger )
	{
			Map.Command_Post_Dyno = 0;
		Util.MapDebugPrint( "Axis_Command_Post_Destroyed" );
	},


	Fuel_Wall_Built = function( trigger )
	{
		Util.DisableGoal ( "ROUTE_Crouch_Hall" );

		Util.MapDebugPrint( "Fuel_Wall_Built" );
	},

	Fuel_Wall_Planted = function( trigger )
	{
		Map.Fuel_Wall_Dyno += 1;
		Util.MapDebugPrint( "Fuel_Wall_Planted" );
	},

	Fuel_Wall_Defused = function( trigger )
	{
		Map.Fuel_Wall_Dyno -= 1;
		Util.MapDebugPrint( "Fuel_Wall_Defused" );
	},

	Fuel_Wall_Destroyed = function( trigger )
	{
		Map.Fuel_Wall_Dyno = 0;

		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"ATTACK_FLAG.*",
			"DEFEND_FLAG.*",
		});
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"ATTACK_FLAG.*",
			"DEFEND_FLAG.*",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_DEPOT.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"DEFEND_DEPOT.*",
			"BUILD_Fuel_Wall",
		});
		SetGoalPriority( "BUILD_Fuel_Wall", 0.91, TEAM.AXIS, CLASS.ENGINEER, true);


		Util.EnableGoal ( "ROUTE_Crouch_Hall" );

		Util.MapDebugPrint( "Fuel_Wall_Destroyed" );
	},

	Fuel_Depot_Planted = function( trigger )
	{
		Map.Fuel_Depot_Dyno += 1;

		// randomize plant goal position
		rand = RandInt( 1,4 );
		if ( rand == 1 )
			{ Util.SetGoalPosition( -86630,-9012,407, Map.Plant_Fuel_Dump ); }
		else if ( rand == 2 )
			{ Util.SetGoalPosition( -74125,-9315,373, Map.Plant_Fuel_Dump ); }
		else if ( rand == 3 )
			{ Util.SetGoalPosition( -87290,-9712,407, Map.Plant_Fuel_Dump ); }
		else
			{ Util.SetGoalPosition( -90612,-9333,407, Map.Plant_Fuel_Dump ); }


		Util.MapDebugPrint( "Fuel_Depot_Planted" );
	},

	Fuel_Depot_Defused = function( trigger )
	{
		Map.Fuel_Depot_Dyno -= 1;
		Util.MapDebugPrint( "Fuel_Depot_Defused" );
	},

	Fuel_Depot_Destroyed = function( trigger )
	{
		Map.Fuel_Depot_Dyno = 0;

		Util.MapDebugPrint( "Fuel_Depot_Destroyed" );
	},

	forwardspawn1_flag_Axis_Captured = function( trigger )
	{
		Map.forwardspawn1_flag_Axis_Captured = true;
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_FLAG.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_FLAG.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_FLAG.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_FLAG.*" );


		Util.MapDebugPrint( "forwardspawn1_flag_Axis_Captured" );
	},

	forwardspawn1_flag_Allies_Captured = function( trigger )
	{
		Map.forwardspawn1_flag_Allies_Captured = true;
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_FLAG.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_FLAG.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_FLAG.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_FLAG.*" );
		Util.ChangeSpawn(TEAM.ALLIES, 3);


		Util.MapDebugPrint( "forwardspawn1_flag_Allies_Captured" );
	},

	Stuckage =
	{
		Name = "stuck2",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{


			b = Util.IsBot(ent);
			if (b)
			{
				// cs: users can disable map script initiated chats like this with MAP_TALK set to false
				if (MAP_TALK) {
					b.Say( "Arg! I'm stuck in the Loo, stupid mapbug!!!" );
				}
				sleep(1);
				b.ExecCommand("kill");

				// cs: moved this here since the original 'else if' would never be reached.
				if (Map.forwardspawn1_flag_Axis_Captured == true) {
					Util.ChangeSpawn(TEAM.ALLIES, 3);
				}
			}
		},
	},

	Navigation =
	{
		wait =
		{
			navigate = function(_this)
			{
				timeout = 1;
				while ( timeout > 1 ) {
					_this.Goto(_this.Bot.GetPosition());
					sleep(1);
					timeout -= 1;
				}

				Util.MapDebugPrint( "navigation", true );
			},

		},
	},
};

global OnMapLoad = function()
{
	Util.SetGoalPosition( -872.000,-936.000,-248.000, Map.Plant_Fuel_Depot );

// Register callback functions
	OnTrigger( "1Axis have built the Wall!", Map.Fuel_Wall_Built );
	OnTrigger( "Planted at the Fuel Wall!", Map.Fuel_Wall_Planted );
	OnTrigger( "Defused at the Fuel Wall!", Map.Fuel_Wall_Defused );
	OnTrigger( "^3Allies have destroyed the Fuel Wall!", Map.Fuel_Wall_Destroyed );

	OnTrigger( "Planted at the Fuel Depot!", Map.Fuel_Depot_Planted );
	OnTrigger( "Defused at the Fuel Depot!", Map.Fuel_Depot_Defused );
	OnTrigger( "^3Allies have destroyed the Fuel Depot!", Map.Fuel_Depot_Destroyed );

	OnTrigger( "Allied Command Post constructed. Charge speed increased!", Map.Allied_Command_Post_Built );
	OnTrigger( "Planted at the Allied Command Post", Map.Allied_Command_Post_Planted );
	OnTrigger( "Defused at the Allied Command Post", Map.Allied_Command_Post_Defused );
	OnTrigger( "Axis team has destroyed the Allied Command Post!", Map.Allied_Command_Post_Destroyed );

	OnTrigger( "Axis Command Post constructed. Charge speed increased!", Map.Axis_Command_Post_Built );
	OnTrigger( "Planted at the Axis Command Post", Map.Axis_Command_Post_Planted );
	OnTrigger( "Defused at the Axis Command Post", Map.Axis_Command_Post_Defused );
	OnTrigger( "Allied team has destroyed the Axis Command Post!", Map.Axis_Command_Post_Destroyed );

	OnTrigger( "Axis reclaim the Forward Spawn!", Map.forwardspawn1_flag_Axis_Captured );
	OnTrigger( "Allies capture the Forward Spawn!", Map.forwardspawn1_flag_Allies_Captured );
//Util.SetGoalOffset
	Util.SetGoalOffset( 0, 0, -150, "PLANT_Fuel_Depot" );

	Util.DisableGoal( ".*", true ); // all but routes
	Util.DisableGoal ( "ROUTE_Crouch_Hall" );
	Util.AddUseWp("PLANT_Fuel_Wall", "wall");
//kill box
killbox = OnTriggerRegion(AABB(-2779.856,-188.706,-304.485,-2399.275,12.498,-65.866),Map.Stuckage);
//SetGoalPriority
	SetGoalPriority( "DEFEND_DEPOT_8", 0.52, TEAM.AXIS, CLASS.COVERTOPS, true);
	SetGoalPriority( "DEFEND_DEPOT_8", 0.52, TEAM.AXIS, CLASS.SOLDIER, true);
//~SetAvailableMapGoals TEAM.AXIS
	SetAvailableMapGoals( TEAM.AXIS, true, {
		"AMMOCAB_cabinet_supply",
		"HEALTHCAB_cabinet_health",
		"BUILD_.*",
		"PLANT_.*",
		"CHECKPOINT_.*",
		"ATTACK_FLAG.*",
		"DEFEND_DEPOT_8",
	});
//~SetAvailableMapGoals TEAM.ALLIES
	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"AMMOCAB_cabinet_supply",
		"HEALTHCAB_cabinet_health",
		"BUILD_.*",
		"PLANT_.*",
		"CHECKPOINT_.*",
		"ATTACK_FLAG.*",
	});
// Max users per goal
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "GRENADE_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );
// Camp times
	SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=15, MaxCampTime=90} );
	SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=10, MaxCampTime=60} );
	SetMapGoalProperties( "ATTACK_.*", {mincamptime=30, maxcamptime=45});
	SetMapGoalProperties( "DEFEND_.*", {mincamptime=60, maxcamptime=120});
//MapRoutes
	MapRoutes =
	{
		PLANT_Fuel_Depot =
		{
			ROUTE_Allies_SP  =
			{
				ROUTE_Stairs_HandA  =
				{
					ROUTE_FLAG  =
					{
						ROUTE_wall  =
						{
							ROUTE_Crouch_Hall  =
							{
							},
						},
						ROUTE_CP  =
						{
							ROUTE_Fuel_CP  =
							{
							},
						},
					},
				},
				ROUTE_Stairs_Flag  =
				{
					ROUTE_FLAG  =
					{
						ROUTE_wall  =
						{
							ROUTE_Crouch_Hall  =
							{
							},
						},
						ROUTE_CP  =
						{
							ROUTE_Fuel_CP  =
							{
							},
						},
					},
				},
			},
		},
		CHECKPOINT_forwardspawn1_flag =
		{
			ROUTE_AXIS_SP  =
			{
				ROUTE_CP  =
				{
					ROUTE_FLAG  =
					{
					},
				},
				ROUTE_Fuel_CP  =
				{
					ROUTE_Crouch_Hall  =
					{
						ROUTE_wall  =
						{
							ROUTE_FLAG  =
							{
							},
						},
					},
				},
			},
			ROUTE_Allies_SP  =
			{
				ROUTE_Stairs_HandA  =
				{
					ROUTE_FLAG  =
					{
					},
				},
				ROUTE_Stairs_Flag  =
				{
					ROUTE_FLAG  =
					{
					},
				},
			},
		},
		BUILD_Fuel_Wall =
		{
			ROUTE_AXIS_SP  =
			{
				ROUTE_Fuel_CP  =
				{
					ROUTE_CP  =
					{
						ROUTE_wall  =
						{
						},
					},
					ROUTE_Crouch_Hall  =
					{
						ROUTE_wall  =
						{
						},
					},
				},
			},
		},
		PLANT_Fuel_Wall =
		{
			ROUTE_Allies_SP  =
			{
				ROUTE_Stairs_Flag  =
				{
					ROUTE_FLAG  =
					{
						ROUTE_wall  =
						{
						},
					},
					ROUTE_wall  =
					{
					},
				},
				ROUTE_Stairs_HandA  =
				{
					ROUTE_FLAG  =
					{
						ROUTE_wall  =
						{
						},
					},
					ROUTE_wall  =
					{
					},
				},
			},
		},
	};

	MapRoutes.ATTACK_DEPOT = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.ATTACK_DEPOT_1 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.ATTACK_DEPOT_2 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.ATTACK_DEPOT_3 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.ATTACK_DEPOT_4 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.ATTACK_DEPOT_5 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.ATTACK_DEPOT_6 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.ATTACK_DEPOT_7 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.ATTACK_DEPOT_8 = MapRoutes.PLANT_Fuel_Depot;

	MapRoutes.ATTACK_FLAG = MapRoutes.CHECKPOINT_forwardspawn1_flag;
	MapRoutes.ATTACK_FLAG_1 = MapRoutes.CHECKPOINT_forwardspawn1_flag;
	MapRoutes.ATTACK_FLAG_2 = MapRoutes.CHECKPOINT_forwardspawn1_flag;
	MapRoutes.ATTACK_FLAG_3 = MapRoutes.CHECKPOINT_forwardspawn1_flag;
	MapRoutes.ATTACK_FLAG_4 = MapRoutes.CHECKPOINT_forwardspawn1_flag;
	MapRoutes.ATTACK_FLAG_5 = MapRoutes.CHECKPOINT_forwardspawn1_flag;
	MapRoutes.ATTACK_FLAG_6 = MapRoutes.CHECKPOINT_forwardspawn1_flag;

	MapRoutes.DEFEND_DEPOT = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.DEFEND_DEPOT_1 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.DEFEND_DEPOT_2 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.DEFEND_DEPOT_3 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.DEFEND_DEPOT_4 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.DEFEND_DEPOT_5 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.DEFEND_DEPOT_6 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.DEFEND_DEPOT_7 = MapRoutes.PLANT_Fuel_Depot;
	MapRoutes.DEFEND_DEPOT_8 = MapRoutes.PLANT_Fuel_Depot;

	MapRoutes.DEFEND_FLAG = MapRoutes.CHECKPOINT_forwardspawn1_flag;
	MapRoutes.DEFEND_FLAG_1 = MapRoutes.CHECKPOINT_forwardspawn1_flag;
	MapRoutes.DEFEND_FLAG_2 = MapRoutes.CHECKPOINT_forwardspawn1_flag;
	MapRoutes.DEFEND_FLAG_3 = MapRoutes.CHECKPOINT_forwardspawn1_flag;
	MapRoutes.DEFEND_FLAG_4 = MapRoutes.CHECKPOINT_forwardspawn1_flag;

	Util.Routes(MapRoutes);

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

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