//==========================================================================================
//
//	fliegerhorst_2.gm
//
//	Who  	When		What
//------------------------------------------------------------------------------------------
//	^4Tardis	08 June 2010	Initial Script
//
//==========================================================================================
// Have Set Build / Plant Command_Post to 0.00, NO Priority as ENGINEER has a lot to do ~ line 636 - 639
// REPAIRMG42 is not Enabled due to map bug will not Repair !

global Map =
{
	Debug = 0,

	Breakable_Fence_Dyno = 0,
	Allied_Command_Post_Dyno = 0,
	Axis_Command_Post_Dyno = 0,
	Gastank_Dropoff_Dyno = 0,
	Tank_Barrier_1_Dyno = 0,
	Tank_Barrier_2_Dyno = 0,
	Truck_Door_Dyno = 0,
	town_barbed_wires_Dyno = 0,
	town_mg_Dyno = 0,
	barrier_1_built = false,
	barrier_2_built = false,
	tank_at_barrier_2 = false,
	tank_at_Position = false,
	tank_at_barrier_1 = false,
	Truck_Door = 0,
	Build_wire = true, 	// Set to false if you DON'T want the bots to build the barbed wire fence at the start of the map

	Navigation =
	{
		wait =
		{
			navigate = function(_this)
			{
				Util.MapDebugPrint( "navigation", true );
				timeout = 4;
				while ( timeout > 1 ) {
					_this.Goto(_this.Bot.GetPosition());
					sleep(1);
					timeout -= 1;
				}
			},

		},
	},
	Tank_Built = function( trigger )
	{
		if(Map.tank_at_barrier_2 == true ){
			SetAvailableMapGoals( TEAM.AXIS, true, {
				"AIRSTRIKE_tank_0",
				"AIRSTRIKE_tank_1",
			});
			Util.MapDebugPrint( "ARTI AT barrier_2 when tank is Active" );
			return;
		}

		if (Map.tank_at_Position == true){
			SetAvailableMapGoals( TEAM.AXIS, true, {
				"CALLARTILLERY_tank",
				"ARTILLERY_S_tank.*",
			});
			Util.MapDebugPrint( "ARTI AT Position when tank is Active" );
			return;
		}

		if (Map.tank_at_barrier_1 == true){
			SetAvailableMapGoals( TEAM.AXIS, true, {
				"AIRSTRIKE_tank_2",
				"AIRSTRIKE_tank_3",
			});
			Util.MapDebugPrint( "ARTI AT barrier_1 when tank is Active" );
			return;
		}

		Util.MapDebugPrint( "Tank_Built" );
	},

	Tank_Destroyed = function( trigger )
	{
		if(Map.tank_at_barrier_2 == true ){
			SetAvailableMapGoals( TEAM.AXIS, false, {
				"AIRSTRIKE_tank_0",
				"AIRSTRIKE_tank_1",
			});
			Util.MapDebugPrint( "NO ARTI AT barrier_2 when tank is Dead" );
			return;
		}

		if (Map.tank_at_Position == true){
			SetAvailableMapGoals( TEAM.AXIS, false, {
				"CALLARTILLERY_tank",
				"ARTILLERY_S_tank.*",
			});
			Util.MapDebugPrint( "NO ARTI AT Position when tank is Dead" );
			return;
		}

		if (Map.tank_at_barrier_1 == true){
			SetAvailableMapGoals( TEAM.AXIS, false, {
				"AIRSTRIKE_tank_2",
				"AIRSTRIKE_tank_3",
			});
			Util.MapDebugPrint( "NO ARTI AT barrier_1 when tank is Dead" );
			return;
		}

		Util.MapDebugPrint( "Tank_Destroyed" );
	},

	Truck_Door_Built = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_truck_.*" );
		Util.DisableGoal( "MOUNTMG42_town" );

		Util.MapDebugPrint( "Truck_Door_Built" );
	},

	Truck_Door_Planted = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_truck_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_truck" );
		if ( Map.town_mg_Built == true ) {
			Util.EnableGoal( "MOUNTMG42_town" );
		}
		Map.Truck_Door_Dyno += 1;
		Util.MapDebugPrint( "Truck_Door_Planted" );
	},

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

	Truck_Door_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_truck_.*" );
		Util.DisableGoal( "MOUNTMG42_town" );
		Map.Truck_Door_Dyno = 0;
		Util.MapDebugPrint( "Truck_Door_Destroyed" );
	},

	town_barbed_wires_Built = function( trigger )
	{
		Wp.SetWaypointFlag("barbed_box_1","closed",false);
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_truck" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ROUTE_RT_Town" );
		Util.MapDebugPrint( "town_barbed_wires_Built" );
	},

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

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

	town_barbed_wires_Destroyed = function( trigger )
	{
		Map.town_barbed_wires_Dyno = 0;
		SetAvailableMapGoals( TEAM.AXIS, true, "ROUTE_RT_Town" );
		Wp.SetWaypointFlag("barbed_box_1","closed",true);
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_truck" );
		Util.MapDebugPrint( "town_barbed_wires_Destroyed" );
	},

	town_mg_Built = function( trigger )
	{
		Map.town_mg_Built == true;

		Util.MapDebugPrint( "town_mg_Built" );
	},

	town_mg_Planted = function( trigger )
	{
		Map.town_mg_Dyno += 1;
		Util.DisableGoal( "MOUNTMG42_town" );
		Util.MapDebugPrint( "town_mg_Planted" );
	},

	town_mg_Defused = function( trigger )
	{
		Map.town_mg_Dyno -= 1;
		Util.EnableGoal( "MOUNTMG42_town" );
		Util.MapDebugPrint( "town_mg_Defused" );
	},

	town_mg_Destroyed = function( trigger )
	{
		Map.town_mg_Dyno = 0;
		Util.DisableGoal( "MOUNTMG42_town" );
		Map.town_mg_Built == false;
		Util.MapDebugPrint( "town_mg_Destroyed" );
	},

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

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

	Breakable_Fence_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"ROUTE_RT_Fence",
			"ROUTE_RT_Fence_A",
		});
		Map.Breakable_Fence_Dyno = 0;
		Util.MapDebugPrint( "Breakable_Fence_Destroyed" );
	},

	Gastank_Dropoff_Built = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "CAPPOINT_gastanks" );
		SetAvailableMapGoals( TEAM.AXIS, false, "CAPPOINT_FAKE_.*" );

		Util.MapDebugPrint( "Gastank_Dropoff_Built" );
	},

	Gastank_Dropoff_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "CAPPOINT_FAKE_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "CAPPOINT_gastanks" );

		Map.Gastank_Dropoff_Dyno = 0;
		Util.MapDebugPrint( "Gastank_Dropoff_Destroyed" );
	},

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

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

	gastanks_Taken = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_truck_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Gastank_.*" );
		SetGoalPriority( "BUILD_Gastank_Dropoff", 1.1, TEAM.AXIS, 0, true );
		Util.MapDebugPrint( "gastanks_Taken" );
	},

	gastanks_Returned = function( trigger )
	{
		if ( Map.Truck_door == 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_truck_.*" );
		}
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Gastank_.*" );
		SetGoalPriority( "BUILD_Gastank_Dropoff", 0.91, TEAM.AXIS, 0, true );
		Util.MapDebugPrint( "gastanks_Returned" );
	},

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

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

	Tank_Barrier_1_Built = function( trigger )
	{
		Map.barrier_1_built = true;
		Util.MapDebugPrint( "Tank_Barrier_1_Built" );
	},

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

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

	Tank_Barrier_1_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "MOUNTMG42_truck" );
		Util.EnableGoal( "MOUNT_tank" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_tank" );
		Map.barrier_1_built = false;
		Map.Tank_Barrier_1_Dyno = 0;
		Util.MapDebugPrint( "Tank_Barrier_1_Destroyed" );
	},

	Tank_Barrier_2_Built = function( trigger )
	{
		Map.barrier_2_built = true;
		Util.MapDebugPrint( "Tank_Barrier_2_Built" );
	},

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

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

	Tank_Barrier_2_Destroyed = function( trigger )
	{
		Util.EnableGoal( "MOUNT_tank" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_tank" );
		Map.barrier_2_built = false;
		Map.Tank_Barrier_2_Dyno = 0;
		Util.MapDebugPrint( "Tank_Barrier_2_Destroyed" );
	},

	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" );
	},
//tank barriers
	tank_at_barrier_1 =
	{
 		TriggerOnEntity = GetGoal("MOVER_tank").GetEntity(),
 		OnEnter = function(ent)
		{
			Map.tank_at_barrier_1 = true;
			if ( Map.barrier_1_built == true ) {
				SetAvailableMapGoals( TEAM.AXIS, false, {
					"BUILD_tank",
					"MOUNT_tank",
				});
				SetAvailableMapGoals( TEAM.ALLIES, false, {
					"BUILD_tank",
					"MOUNT_tank",
				});
				SetAvailableMapGoals( TEAM.AXIS, true, {
					"AIRSTRIKE_tank_2",
					"AIRSTRIKE_tank_3",
					"MOUNTMG42_Compound",
					"MOUNTMG42_transmitter",
					"MOUNTMG42_pound_A",
					"MOUNTMG42_pound_B",
				});
			}
			else if ( Map.barrier_1_built == false ) {
				SetAvailableMapGoals( TEAM.AXIS, true, {
					"AIRSTRIKE_tank_2",
					"AIRSTRIKE_tank_3",
					"MOUNTMG42_Compound",
					"MOUNTMG42_transmitter",
					"MOUNTMG42_pound_A",
					"MOUNTMG42_pound_B",
				});
			}
			Util.MapDebugPrint( "Tank_At_Barrier_1" );
		},
		OnExit = function(ent)
		{
			SetAvailableMapGoals( TEAM.AXIS, false, {
				"AIRSTRIKE_tank_2",
				"AIRSTRIKE_tank_3",
				"MOUNTMG42_Compound",
				"MOUNTMG42_transmitter",
				"MOUNTMG42_pound_A",
				"MOUNTMG42_pound_B",
			});
		},
	},

	tank_at_barrier_2 =
	{
 		TriggerOnEntity = GetGoal("MOVER_tank").GetEntity(),
 		OnEnter = function(ent)
		{
			Map.tank_at_barrier_2 = true;
			if ( Map.barrier_2_built == true ) {
				SetAvailableMapGoals( TEAM.AXIS, false, {
					"BUILD_tank",
					"MOUNT_tank",
				});
				SetAvailableMapGoals( TEAM.ALLIES, false, {
					"BUILD_tank",
					"MOUNT_tank",
				});
				SetAvailableMapGoals( TEAM.AXIS, true, {
					"AIRSTRIKE_tank_0",
					"AIRSTRIKE_tank_1",
				});
			}
			else if ( Map.barrier_2_built == false ) {
				SetAvailableMapGoals( TEAM.AXIS, true, {
					"AIRSTRIKE_tank_0",
					"AIRSTRIKE_tank_1",
				});
			}
			Util.MapDebugPrint( "Tank_At_Barrier_2" );
		},
		OnExit = function(ent)
		{
			SetAvailableMapGoals( TEAM.AXIS, false, {
				"AIRSTRIKE_tank_0",
				"AIRSTRIKE_tank_1",
				"MOUNTMG42_truck",
			});
		},
	},

//tank at corner between barriers
	tank_at_Position =
	{
 		TriggerOnEntity = GetGoal("MOVER_tank").GetEntity(),
 		OnEnter = function(ent)
		{
			SetAvailableMapGoals( TEAM.AXIS, true, {
				"CALLARTILLERY_tank",
				"ARTILLERY_S_tank.*",
				"MOUNTMG42_truck",
			});
			Util.MapDebugPrint( "Tank_Enter_Position" );
		},
		OnExit = function(ent)
		{
			SetAvailableMapGoals( TEAM.AXIS, false, {
				"CALLARTILLERY_tank",
				"ARTILLERY_S_tank.*",
			});
			Util.MapDebugPrint( "Tank_Exit_Position" );
		},
	},
};

global OnMapLoad = function()
{
// Register callback functions
	OnTrigger( "The Gastank Dropoff has been constructed.", Map.Gastank_Dropoff_Built );
	OnTrigger( "The Tank has been repaired!", Map.Tank_Built );
	OnTrigger( "The Tank has been damaged!", Map.Tank_Destroyed );
	OnTrigger( "Tank Barrier #1 has been constructed.", Map.Tank_Barrier_1_Built );
	OnTrigger( "Tank Barrier #2 has been constructed.", Map.Tank_Barrier_2_Built );
	OnTrigger( "Truck Door has been constructed", Map.Truck_Door_Built );
	OnTrigger( "Barbed Wire in Town has been constructed.", Map.town_barbed_wires_Built );
	OnTrigger( "Allied team has built the town mg!", Map.town_mg_Built );
	OnTrigger( "Planted at the Fence!", Map.Breakable_Fence_Planted );
	OnTrigger( "Planted at the Gastank Dropoff.", Map.Gastank_Dropoff_Planted );
	OnTrigger( "Planted at the Tank Barrier #1.", Map.Tank_Barrier_1_Planted );
	OnTrigger( "Planted at the Tank Barrier #2.", Map.Tank_Barrier_2_Planted );
	OnTrigger( "Planted at the Truck Door.", Map.Truck_Door_Planted );
	OnTrigger( "Planted at the Barbed Wire in Town.", Map.town_barbed_wires_Planted );
	OnTrigger( "Planted at the Allied Command Post", Map.Allied_Command_Post_Planted );
	OnTrigger( "Planted at the Axis Command Post", Map.Axis_Command_Post_Planted );
	OnTrigger( "Planted at the town mg!", Map.town_mg_Planted );
	OnTrigger( "Defused at the Fence!", Map.Breakable_Fence_Defused );
	OnTrigger( "Defused at the Gastank Dropoff.", Map.Gastank_Dropoff_Defused );
	OnTrigger( "Defused at the Tank Barrier #1.", Map.Tank_Barrier_1_Defused );
	OnTrigger( "Defused at the Tank Barrier #2.", Map.Tank_Barrier_2_Defused );
	OnTrigger( "Defused at the Truck Door.", Map.Truck_Door_Defused );
	OnTrigger( "Defused at the Barbed Wire in Town.", Map.town_barbed_wires_Defused );
	OnTrigger( "Defused at the town mg!", Map.town_mg_Defused );
	OnTrigger( "Defused at the Allied Command Post", Map.Allied_Command_Post_Defused );
	OnTrigger( "Defused at the Axis Command Post", Map.Axis_Command_Post_Defused );
	OnTrigger( "Allied team has breached the Fence!", Map.Breakable_Fence_Destroyed );
	OnTrigger( "The Gastank Dropoff have been destroyed!", Map.Gastank_Dropoff_Destroyed );
	OnTrigger( "Tank Barrier #1 has been destroyed.", Map.Tank_Barrier_1_Destroyed );
	OnTrigger( "Tank Barrier #2 has been destroyed.", Map.Tank_Barrier_2_Destroyed );
	OnTrigger( "Truck Doors have been destroyed!", Map.Truck_Door_Destroyed );
	OnTrigger( "Barbed Wire in Town have been destroyed!", Map.town_barbed_wires_Destroyed );
	OnTrigger( "Axis team has destroyed the town mg!", Map.town_mg_Destroyed );
	OnTrigger( "Axis takes the gastanks", Map.gastanks_Taken );
	OnTrigger( "Allies return the gastanks", Map.gastanks_Returned );
	OnTrigger( "Axis have loaded the Gastanks on to the plane", Map.gastanks_Secured );
	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( "Axis team has destroyed the Allied Command Post!", Map.Allied_Command_Post_Destroyed );
	OnTrigger( "Allied team has destroyed the Axis Command Post!", Map.Axis_Command_Post_Destroyed );
	OnTrigger( "Axis have loaded the Gastanks on to the plane", Map.gastanks_Captured );
//tank trigger box
	tank1 = OnTriggerRegion(AABB(-1642.135,-677.007,801.125,-1522.254,-95.504,965.405),Map.tank_at_barrier_1);
	tank2 = OnTriggerRegion(AABB(-636.578,-696.888,801.125,-470.755,-453.126,899.787),Map.tank_at_barrier_2);
	tank3 = OnTriggerRegion(AABB(-1734.639,-1583.631,801.125,-1118.611,-1065.385,875.125),Map.tank_at_Position);
//Util.SetGoalOffset
	Util.SetGoalOffset( 0, -20, -80, "PLANT_Truck_Door" );
//DisableGoal
	Util.DisableGoal( ".*", true ); // all but routes
//Priority's
	SetGoalPriority( "BUILD_Truck_Door", 0.92, TEAM.ALLIES, CLASS.ENGINEER, true );
	SetGoalPriority( "BUILD_Gastank_Dropoff", 0.92, TEAM.AXIS, CLASS.ENGINEER, true );
	SetGoalPriority( "BUILD_Tank_Barrier_1", 0.91, TEAM.AXIS, CLASS.ENGINEER, true );
	SetGoalPriority( "BUILD_Tank", 0.91, TEAM.ALLIES, CLASS.ENGINEER, true );
	SetGoalPriority( "CAPPOINT_FAKE_.*", 0.90, TEAM.AXIS, 0, true );
	SetGoalPriority( "MOUNTMG42_.*", 0.0, 0, CLASS.MEDIC, true  );
	SetGoalPriority( "MOUNTMG42_.*", 0.0, 0, CLASS.ENGINEER, true  );
	SetGoalPriority( "BUILD_Command_Post", 0.00, TEAM.ALLIES, CLASS.ENGINEER, true );
	SetGoalPriority( "BUILD_Command_Post", 0.00, TEAM.AXIS, CLASS.ENGINEER, true );
	SetGoalPriority( "PLANT_Command_Post", 0.00, TEAM.ALLIES, CLASS.ENGINEER, true );
	SetGoalPriority( "PLANT_Command_Post", 0.00, TEAM.AXIS, CLASS.ENGINEER, true );
	Util.AddUseWp("PLANT_town_barbed_wires", "wire_1");
	Util.AddUseWp("PLANT_town_barbed_wires", "wire_2");
	Util.AddUseWp("PLANT_Gastank_Dropoff", "Gastank_Dropoff_Plant");
	Util.AddUseWp("PLANT_Gastank_Dropoff", "Gastank_Dropoff_Plant_1");
	Util.AddUseWp("PLANT_Gastank_Dropoff", "Gastank_Dropoff_Plant_2");
	Util.AddUseWp("PLANT_Breakable_Fence", "fence_A");
	Util.AddUseWp("PLANT_Breakable_Fence", "fence_B");
	Util.AddUseWp("PLANT_Tank_Barrier_2", "Barrier2");
	Util.AddUseWp("PLANT_Tank_Barrier_2", "Barrier2_A");
	Util.AddUseWp("PLANT_Tank_Barrier_1", "Barrier1");
	Util.AddUseWp("PLANT_Tank_Barrier_1", "Barrier1_A");
	Util.AddUseWp("PLANT_town_mg", "townMG");
//~SetAvailableMapGoals TEAM.AXIS
	SetAvailableMapGoals( TEAM.AXIS, true, {
		"AMMOCAB_.*",
		"HEALTHCAB_.*",
		"BUILD_.*",
		"PLANT_.*",
		"CAPPOINT_FAKE_.*",
		"FLAG_.*",
		"ATTACK_.*",
		"MOUNT_tank",
	});
//~SetAvailableMapGoals TEAM.ALLIES
	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"AMMOCAB_.*",
		"HEALTHCAB_.*",
		"BUILD_.*",
		"PLANT_.*",
		"MOUNT_tank",
	});
//~SetAvailableMapGoals Both TEAMS
	Util.DisableGoal( {
		"ROUTE_RT_Fence",
		"ROUTE_RT_Fence_A",
	});
//Option bots to build the barbed wire fence at the start of the map
	if ( Map.Build_wire == true )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_town_barbed_wires" );
	}
	else
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_town_barbed_wires" );
	}

// Max users per goal
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "GRENADE_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );
	Util.SetMaxUsers( 1, "CAPPOINT_.*" );
	Util.SetMaxUsers( 1, "FLAG_.*" );
	Util.SetMaxUsers( 1, "BUILD_.*" );
// Camp times
	SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=15, MaxCampTime=90} );
	SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=10, MaxCampTime=60} );
//MapRoutes
	MapRoutes =
	{
		BUILD_Gastank_Dropoff =
		{
			ROUTE_RT_AXIS_SP  =
			{
				ROUTE_RT_River  =
				{
					ROUTE_RT_gastank_side  =
					{
					},
					ROUTE_RT_Truck_A  =
					{
						ROUTE_RT_gastank_side  =
						{
						},
					},
				},
				ROUTE_RT_gastank_Hut  =
				{
					ROUTE_RT_Truck_A  =
					{
					},
				},
				ROUTE_RT_Fence_A  =
				{
					ROUTE_RT_Fence  =
					{
						ROUTE_RT_Truck_A  =
						{
							ROUTE_RT_gastank_side  =
							{
							},
						},
					},
				},
			},
			ROUTE_RT_AXIS_SP_Hut  =
			{
				ROUTE_RT_Hut_B  =
				{
					ROUTE_RT_gastank_Hut  =
					{
					},
				},
				ROUTE_RT_Hut_A  =
				{
					ROUTE_RT_Plane_Hut_side  =
					{
						ROUTE_RT_Hanger  =
						{
							ROUTE_RT_gastank_Hut  =
							{
							},
						},
					},
				},
				ROUTE_RT_gastank_Hut  =
				{
				},
			},
		},
		FLAG_gastanks =
		{
			ROUTE_RT_AXIS_SP  =
			{
				ROUTE_RT_River  =
				{
					ROUTE_RT_Town_A  =
					{
					},
				},
				ROUTE_RT_Hanger  =
				{
					ROUTE_RT_Hotel  =
					{
						ROUTE_RT_Town  =
						{
							ROUTE_RT_Town_A  =
							{
							},
							ROUTE_RT_Town_B  =
							{
							},
						},
					},
				},
				ROUTE_RT_gastank_Hut  =
				{
					ROUTE_RT_gastank_side  =
					{
						ROUTE_RT_Town_A  =
						{
						},
					},
				},
				ROUTE_RT_Plane_Hut  =
				{
					ROUTE_RT_Plane_Hut_side  =
					{
						ROUTE_RT_Hut_A  =
						{
							ROUTE_RT_Hotel  =
							{
								ROUTE_RT_Town  =
								{
									ROUTE_RT_Town_A  =
									{
									},
									ROUTE_RT_Town_B  =
									{
									},
								},
							},
						},
						ROUTE_RT_Hotel  =
						{
							ROUTE_RT_Town  =
							{
								ROUTE_RT_Town_A  =
								{
								},
								ROUTE_RT_Town_B  =
								{
								},
							},
						},
					},
				},
			},
			ROUTE_RT_AXIS_SP_Hut  =
			{
				ROUTE_RT_Hut_A  =
				{
					ROUTE_RT_Hotel  =
					{
						ROUTE_RT_Town  =
						{
							ROUTE_RT_Town_A  =
							{
							},
							ROUTE_RT_Town_B  =
							{
							},
						},
					},
					ROUTE_RT_gastank_side  =
					{
						ROUTE_RT_Hotel  =
						{
							ROUTE_RT_Town  =
							{
								ROUTE_RT_Town_A  =
								{
								},
								ROUTE_RT_Town_B  =
								{
								},
							},
						},
					},
					ROUTE_RT_Hanger  =
					{
						ROUTE_RT_Hotel  =
						{
							ROUTE_RT_Town  =
							{
								ROUTE_RT_Town_A  =
								{
									ROUTE_RT_Town_B  =
									{
									},
								},
							},
						},
					},
				},
				ROUTE_RT_Hut_B  =
				{
					ROUTE_RT_Plane_Hut_side  =
					{
						ROUTE_RT_Hotel  =
						{
							ROUTE_RT_Town  =
							{
								ROUTE_RT_Town_A  =
								{
								},
								ROUTE_RT_Town_B  =
								{
								},
							},
						},
					},
					ROUTE_RT_Hanger  =
					{
						ROUTE_RT_Hotel  =
						{
							ROUTE_RT_Town  =
							{
								ROUTE_RT_Town_A  =
								{
								},
								ROUTE_RT_Town_B  =
								{
								},
							},
						},
					},
				},
			},
		},
		PLANT_Gastank_Dropoff =
		{
			ROUTE_RT_ALLIES_SP  =
			{
				ROUTE_RT_River  =
				{
					ROUTE_RT_gastank_Hut  =
					{
					},
				},
				ROUTE_RT_Fence  =
				{
					ROUTE_RT_Fence_A  =
					{
						ROUTE_RT_gastank_Hut  =
						{
						},
					},
				},
			},
			ROUTE_RT_ALLIES_SP_ARCH  =
			{
			},
			ROUTE_RT_ALLIES_SP_Riv  =
			{
				ROUTE_RT_River  =
				{
					ROUTE_RT_gastank_Hut  =
					{
					},
				},
				ROUTE_RT_Fence  =
				{
					ROUTE_RT_Fence_A  =
					{
						ROUTE_RT_gastank_Hut  =
						{
						},
					},
				},
			},
			ROUTE_RT_ALLIES_SP_ST  =
			{
			},
		},
		BUILD_Truck_Door =
		{
			ROUTE_RT_ALLIES_SP  =
			{
				ROUTE_RT_Town_A  =
				{
				},
			},
			ROUTE_RT_ALLIES_SP_ARCH  =
			{
				ROUTE_RT_Town  =
				{
					ROUTE_RT_Town_A  =
					{
					},
					ROUTE_RT_Town_B  =
					{
					},
				},
				ROUTE_RT_Town_A  =
				{
				},
			},
			ROUTE_RT_ALLIES_SP_Riv  =
			{
				ROUTE_RT_Town_A  =
				{
				},
			},
			ROUTE_RT_ALLIES_SP_ST  =
			{
				ROUTE_RT_Town_B  =
				{
				},
			},
		},
		BUILD_Tank =
		{
			ROUTE_RT_ALLIES_SP  =
			{
				ROUTE_RT_Town_A  =
				{
					ROUTE_RT_Town =
					{
						ROUTE_RT_Hut_A  =
						{
						},
						ROUTE_RT_Plane_Hut_side  =
						{
							ROUTE_RT_Plane_Hut  =
							{
							},
						},
						ROUTE_RT_Hanger  =
						{
						},
						ROUTE_RT_gastank_side  =
						{
							ROUTE_RT_gastank_Hut  =
							{
							},
							ROUTE_RT_Plane_Mid  =
							{
							},
						},
					},
				},
				ROUTE_RT_Fence  =
				{
					ROUTE_RT_Fence_A  =
					{
					},
				},
				ROUTE_RT_River  =
				{
				},
			},
			ROUTE_RT_ALLIES_SP_Riv  =
			{
				ROUTE_RT_Town_A  =
				{
					ROUTE_RT_Hotel  =
					{
						ROUTE_RT_Hut_A  =
						{
						},
						ROUTE_RT_Plane_Hut_side  =
						{
							ROUTE_RT_Plane_Hut  =
							{
							},
							ROUTE_RT_Plane_Mid  =
							{
							},
						},
						ROUTE_RT_Hanger  =
						{
						},
						ROUTE_RT_gastank_side  =
						{
							ROUTE_RT_gastank_Hut  =
							{
							},
							ROUTE_RT_Plane_Mid  =
							{
							},
						},
					},
				},
				ROUTE_RT_Fence  =
				{
					ROUTE_RT_Fence_A  =
					{
					},
				},
				ROUTE_RT_River  =
				{
				},
			},
			ROUTE_RT_ALLIES_SP_ARCH  =
			{
				ROUTE_RT_Town  =
				{
					ROUTE_RT_Hotel  =
					{
						ROUTE_RT_Hanger  =
						{
						},
						ROUTE_RT_Hut_A  =
						{
						},
						ROUTE_RT_gastank_side  =
						{
							ROUTE_RT_gastank_Hut  =
							{
							},
						},
						ROUTE_RT_Plane_Hut_side  =
						{
							ROUTE_RT_Plane_Hut  =
							{
							},
							ROUTE_RT_Plane_Mid  =
							{
							},
						},
					},
				},
			},
			ROUTE_RT_ALLIES_SP_ST  =
			{
				ROUTE_RT_Town  =
				{
					ROUTE_RT_Hotel  =
					{
						ROUTE_RT_Hanger  =
						{
						},
						ROUTE_RT_Hut_A  =
						{
						},
						ROUTE_RT_gastank_side  =
						{
							ROUTE_RT_gastank_Hut  =
							{
							},
						},
						ROUTE_RT_Plane_Hut_side  =
						{
							ROUTE_RT_Plane_Hut  =
							{
							},
							ROUTE_RT_Plane_Mid  =
							{
							},
						},
					},
				},
			},
		},
	};
	MapRoutes.ATTACK_truck = MapRoutes.FLAG_GAS_Tank;
	MapRoutes.ATTACK_truck_0 = MapRoutes.FLAG_GAS_Tank;
	MapRoutes.ATTACK_truck_1 = MapRoutes.FLAG_GAS_Tank;
	MapRoutes.ATTACK_truck_2 = MapRoutes.FLAG_GAS_Tank;
	MapRoutes.ATTACK_truck_3 = MapRoutes.FLAG_GAS_Tank;
	MapRoutes.ATTACK_truck_4 = MapRoutes.FLAG_GAS_Tank;

	MapRoutes.DEFFEND_truck_0 = MapRoutes.Truck_Door_Destroyed;
	MapRoutes.DEFFEND_truck_1 = MapRoutes.Truck_Door_Destroyed;
	MapRoutes.DEFFEND_truck_2 = MapRoutes.Truck_Door_Destroyed;
	MapRoutes.DEFFEND_truck_3 = MapRoutes.Truck_Door_Destroyed;
	MapRoutes.DEFFEND_truck_4 = MapRoutes.Truck_Door_Destroyed;

	MapRoutes.DEFFEND_Gastank_0 = MapRoutes.gastanks_Taken;
	MapRoutes.DEFFEND_Gastank_1 = MapRoutes.gastanks_Taken;
	MapRoutes.DEFFEND_Gastank_2 = MapRoutes.gastanks_Taken;
	MapRoutes.DEFFEND_Gastank_3 = MapRoutes.gastanks_Taken;
	MapRoutes.DEFFEND_Gastank_4 = MapRoutes.gastanks_Taken;


	Util.Routes(MapRoutes);

	Util.MapDebugPrint( "Omni_bot map script for " + GetMapName() + " executed." );
};

global OnBotJoin = function( bot )
{
	bot.MaxViewDistance = 2200; //rain and fog
};
