//==========================================================================================
//
//	document_raid_final.gm
//
//	Who             When			What
//------------------------------------------------------------------------------------------
//	Scabs		Jan 2011		Waypoints
//	MickyP		Jan 2011		Initial Script
//
//==========================================================================================
//

global Map =
{
	TB_Built = false,
	Tank_At_TB = false,
	Bridge_Built = false,

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

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

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

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

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

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

	Back_Wall_Destroyed = function()
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Back_Wall" );
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"CHECKPOINT_forward_flag",
			"PLANT_Back_Gate",
		});

		Util.MapDebugPrint( "Back_Wall_Destroyed" );
	},

	Back_Gate_Destroyed = function()
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Back_Gate" );
		Util.EnableGoal( "ROUTE_Back_Gate" );

		Util.MapDebugPrint( "Back_Gate_Destroyed" );
	},

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

	Tank_Escaping = function()
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Tank.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Hill.*" );

		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Tank_Start.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Barrier.*" );

		Util.MapDebugPrint( "Tank_Escaping" );
	},

	Tank_Barrier_Built = function()
	{
		Map.TB_Built = true;
		Wp.SetWaypointFlag( "Barrier", "closed", true );
		if ( Map.Tank_At_TB == true )

			{
			SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tank" );
			}

		Util.MapDebugPrint( "Tank_Barrier_Built" );
	},

	Tank_Barrier_Destroyed = function()
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Tank" );
		Map.TB_Built = false;
		Wp.SetWaypointFlag( "Barrier", "closed", false );
		Util.MapDebugPrint( "Tank_Barrier_Destroyed" );
	},

	Tank_At_Barrier = function()
	{
		Map.Tank_At_TB = true;
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Hill.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Barrier.*" );
		if (  Map.TB_Built == true )
			{
			SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tank" );
			}

		Util.MapDebugPrint( "Tank_At_Barrier" );
	},

	Tank_Past_Barrier = function()
	{
		Map.Tank_At_TB = false;
		SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Tank_Barrier" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Tank_Barrier" );

		Util.MapDebugPrint( "Tank_Past_Barrier" );
	},

	Tank_past_Gate = function()
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Barrier.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Bridge" );

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_Barrier.*",
			"PLANT_Allied_Command_Post",
		});
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"DEFEND_Bridge.*",
			"PLANT_Bridge",
		});

		Util.MapDebugPrint( "Tank_past_Gate" );
	},

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

	Bridge_Built = function()
	{
		Map.Bridge_Built = true;

		Util.MapDebugPrint( "Bridge_Built" );
	},

	Bridge_Destroyed = function()
	{
		Map.Bridge_Built = false;
		Util.MapDebugPrint( "Bridge_Destroyed" );
	},

	Tank_Over_Bridge_1 = function()
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Bridge" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Axis_Command_Post" );

		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Barrier.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"BUILD_Fence",
			"BUILD_Axis_Command_Post",
			"DEFEND_Gun.*",
		});

		Util.MapDebugPrint( "Tank_Over_Bridge_1" );
	},

	Tank_At_Gun = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Bridge.*" );

		Util.MapDebugPrint( "Tank_At_Gun" );
	},

	Tank_Past_Gun = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Gun.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Corner.*" );

		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Corner.*" );

		Util.MapDebugPrint( "Tank_Past_Gun" );
	},

	Tank_Rear_gun = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Wall.*" );

		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Wall.*" );

		Util.MapDebugPrint( "Tank_Rear_gun" );
	},

	Tank_Near_Power = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Corner.*" );

		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Corner.*" );

		Util.MapDebugPrint( "Tank_Rear_gun" );
	},

	Fence_Built = function()
	{
		Util.DisableGoal( "ROUTE_Fence" );
		Util.MapDebugPrint( "Fence_Built" );
	},

	Fence_Destroyed = function()
	{
		Util.EnableGoal( "ROUTE_Fence" );
		Util.MapDebugPrint( "Fence_Destroyed" );
	},

	document_door_open = function()
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"FLAG_Documents",
			"CAPPOINT_Tank",
			"PLANT_Fence",
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"BUILD_Tank",
			"MOUNT_Tank",
			"ATTACK_Wall.*",
		});

		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Wall.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"DEFEND_Obj.*",
			"DEFEND_Area.*",
		});

		Util.BotChat(TEAM.AXIS, "vsay", VOICE.REINFORCE_DEF, 1);

		Util.MapDebugPrint( "document_door_open" );
	},

	Documents_Taken = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_Obj.*",
			"DEFEND_Area.*",
		});
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Tank_Cappoint.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Tank_Cappoint.*" );

		Util.MapDebugPrint( "Documents_Taken" );
	},

	Documents_Returned = function()
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Tank_Cappoint.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Tank_Cappoint.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"DEFEND_Obj.*",
			"DEFEND_Area.*",
		});
		Util.MapDebugPrint( "Documents_Returned" );
	},

	Documents_Secured = function()
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"BUILD_Tank",
			"MOUNT_Tank",
			"BUILD_Bridge",
		});

		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"PLANT_Fence",
			"FLAG_Documents",
			"CAPPOINT_Tank",
		});

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


		Util.MapDebugPrint( "Documents_Secured" );
	},

	Tank_At_Bridge_2 = function()
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Tank_Cappoint.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Tank_Cappoint.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Bridge.*" );

		Util.MapDebugPrint( "Tank_At_Bridge_2" );
	},

	Tank_Over_Bridge_2 = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Bridge" );

		Util.MapDebugPrint( "Tank_Over_Bridge_2" );
	},

	vehicle_at_location = function()
	{
		switch(Map.VehicleLocation)
		{
			case 1:
			{
				// Tank top of hill
				Map.Tank_Escaping();
			}
			case 2:
			{
				// Tank at barrier
				Map.Tank_At_Barrier();
			}
			case 3:
			{
				// Tank past barrier
				Map.Tank_Past_Barrier();

			}
			case 4:
			{
				// tank at bridge
				Map.Tank_At_Bridge_1();
			}
			case 5:
			{
				//tank over bridge
				Map.Tank_Over_Bridge_1();

			}
			case 6:
			{
				// tank at Gun
				Map.Tank_At_Gun();

			}
			case 7:
			{
				//tank past Gun
				Map.Tank_Past_Gun();
			}
			case 8:
			{
				//tank at 3rd corner
				Map.Tank_Rear_gun();

			}
			case 9:
			{
				////tank at 4th corner
				Map.Tank_Near_Power();

			}
			case 10:
			{
				//tank at bridge
				Map.Tank_At_Bridge_2();

			}
			case 11:
			{
				//tank over bridge
				Map.Tank_Over_Bridge_2();

			}
		}
		Util.MapDebugPrint("vehicle at location " + Map.VehicleLocation, true);
	},
};

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( "The Bridge has been constructed.", Map.Bridge_Built );
	OnTrigger( "The Fence has been constructed.", Map.Fence_Built );
	OnTrigger( "The tank has been repaired!", Map.Tank_Built );
	OnTrigger( "The Tank Barrier has been constructed.", Map.Tank_Barrier_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( "The Allies have destroyed the back gate!", Map.Back_Gate_Destroyed );
	OnTrigger( "The Allies have destroyed the back wall!", Map.Back_Wall_Destroyed );
	OnTrigger( "The Bridge has been destroyed.", Map.Bridge_Destroyed );
	OnTrigger( "The Fence has been destroyed.", Map.Fence_Destroyed );
	OnTrigger( "The Tank Barrier has been destroyed.", Map.Tank_Barrier_Destroyed );
	OnTrigger( "Allies have stolen Documents!", Map.Documents_Taken );
	OnTrigger( "Flag returned Documents!", Map.Documents_Returned );
	OnTrigger( "Allied team has stolen The Gun Documents", Map.Documents_Secured );
	OnTrigger( "Axis have reclaim the Forward Bunker!", Map.forward_flag_Axis_Captured );
	OnTrigger( "Allies have captured the Forward Bunker!", Map.forward_flag_Allies_Captured );
	OnTrigger( "The Door To Document Room Has Opened!", Map.document_door_open );
	OnTrigger( "The tank is past the gate!", Map.Tank_past_Gate );

	OnTrigger( "tank at location", Map.vehicle_at_location );

	Trigger1 = OnTriggerRegion(AABB(-2779.208,1045.598,9.125,-2538.053,1097.765,83.125),		RegionTrigger.VehicleTrigger);
	Trigger2 = OnTriggerRegion(AABB(-1937.408,1205.201,9.125,-1892.468,1400.117,87.922),		RegionTrigger.VehicleTrigger);
	Trigger3 = OnTriggerRegion(AABB(-1849.507,1174.101,9.125,-1797.215,1395.793,83.125),		RegionTrigger.VehicleTrigger);
	Trigger4 = OnTriggerRegion(AABB(-948.146,-328.014,-34.580,-749.332,-267.036,45.526),		RegionTrigger.VehicleTrigger);
	Trigger5 = OnTriggerRegion(AABB(-1115.433,-1313.749,97.125,-1061.420,-1065.551,181.499),	RegionTrigger.VehicleTrigger);
	Trigger6 = OnTriggerRegion(AABB(-1958.542,-1442.700,122.352,-1653.952,-1385.657,198.925),	RegionTrigger.VehicleTrigger);
	Trigger7 = OnTriggerRegion(AABB(-1708.133,-2530.968,238.360,-1669.798,-2243.689,346.047),	RegionTrigger.VehicleTrigger);
	Trigger8  = OnTriggerRegion(AABB(-812.307,-2538.263,244.443,-748.342,-2260.133,346.974),	RegionTrigger.VehicleTrigger);
	Trigger9 = OnTriggerRegion(AABB(-986.253,-595.799,9.591,-736.392,-549.651,84.693),		RegionTrigger.VehicleTrigger);

	Util.DisableGoal( ".*", true ); // all but routes
	Util.EnableGoal( "AMMOCAB_first_ammocabinet" );
	Util.EnableGoal( "HEALTHCAB_first_healthcabinet" );

	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"BUILD_Tank",
		"BUILD_Allied_Command_Post",
		"MOUNT_Tank",
		"PLANT_Back_Wall",
		"PLANT_Tank_Barrier",
		"ATTACK_Tank.*",
	});

	SetAvailableMapGoals( TEAM.AXIS, true, {
		"BUILD_Tank_Barrier",
		"CHECKPOINT_forward_flag",
		"DEFEND_Tank_Start.*",
		"PLANT_Allied_Command_Post",
	});

	Util.DisableGoal( "ROUTE_Back_Gate" );
	Wp.SetWaypointFlag( "Barrier", "closed", false );

	SetGoalPriority( "BUILD_Bridge", 0.91 );
	SetGoalPriority( "BUILD_Fence", 0.91 );
	SetGoalPriority( "PLANT_Axis_Command_Post", 0.8 );

	// Max users per goal
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "GRENADE_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );
	Util.SetMaxUsers( 1, "CHECKPOINT_forward_flag" );
	Util.SetMaxUsers( 2, "PLANT_.*" );

	// Camp times
	SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=15, MaxCampTime=90} );
	SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=10, MaxCampTime=60} );


	
	print( "Omni-bot map script for " + GetMapName() + " executed." );

	MapRoutes =
	{
		BUILD_Tank =
		{
			ROUTE_Allied_Spawn  =
			{
				ROUTE_Allied_Lower_Exit  =
				{
					ROUTE_Barrier  =
					{
					},
				},
				ROUTE_Allied_Upper_Exit  =
				{
					ROUTE_CP_Outside  =
					{
						ROUTE_Hill_Top  =
						{
						},
					},
					ROUTE_Command_Post  =
					{
						ROUTE_Hill_Top  =
						{
						},
					},
				},
			},
			ROUTE_Flag_Spawn  =
			{
				ROUTE_Barrier_Bridge_Exit  =
				{
				},
				ROUTE_Back_Gate  =
				{
				},
				ROUTE_Flag_Stairs  =
				{
					ROUTE_Barrier_Bridge_Exit  =
					{
					},
				},
			},
		},
		DEFEND_Tank_Start_1 =
		{
			ROUTE_Flag_Spawn  =
			{
				ROUTE_Flag_Stairs  =
				{
					ROUTE_Barrier_Bridge_Exit  =
					{
					},
				},
				ROUTE_Drop_Point  =
				{
					ROUTE_Tank_Ramp  =
					{
					},
				},
			},
		},
		PLANT_Tank_Barrier =
		{
			ROUTE_Allied_Spawn  =
			{
				ROUTE_Allied_Upper_Exit  =
				{
				},
				ROUTE_Allied_Lower_Exit  =
				{
				},
			},
		},
		FLAG_Documents =
		{
			ROUTE_Flag_Spawn  =
			{
				ROUTE_Back_Gate  =
				{
					ROUTE_Docs_Main_Entry  =
					{
						ROUTE_Docs_1  =
						{
						},
						ROUTE_Docs_2  =
						{
						},
						ROUTE_Docs_3  =
						{
						},
						ROUTE_Docs_4  =
						{
						},
					},
					ROUTE_Tree_Right  =
					{
						ROUTE_Fence  =
						{
						},
					},
					ROUTE_Tree_Left  =
					{
						ROUTE_Fence  =
						{
						},
					},
				},
				ROUTE_Flag_Stairs  =
				{
					ROUTE_Barrier_Bridge_Exit  =
					{
						ROUTE_Fence  =
						{
						},
						ROUTE_Docs_Main_Entry  =
						{
							ROUTE_Docs_1  =
							{
							},
							ROUTE_Docs_2  =
							{
							},
							ROUTE_Docs_3  =
							{
							},
							ROUTE_Docs_4  =
							{
							},
						},
					},
				},
			},
		},
		DEFEND_Bridge_1 =
		{
			ROUTE_Axis_Spawn  =
			{
				ROUTE_Axis_Low_Exit  =
				{
					ROUTE_Axis_Bridge  =
					{
					},
				},
				ROUTE_Axis_Middle_Exit  =
				{
					ROUTE_Gun_Front  =
					{
					},
				},
			},
		},
		DEFEND_Obj_1 =
		{
			ROUTE_Axis_Spawn  =
			{
				ROUTE_Axis_Upper_Exit  =
				{
				},
				ROUTE_Axis_Low_Exit  =
				{
				},
				ROUTE_Axis_Middle_Exit  =
				{
				},
			},
		},
		DEFEND_Gun_1 =
		{
			ROUTE_Axis_Spawn  =
			{
				ROUTE_Axis_Middle_Exit  =
				{
				},
				ROUTE_Axis_Low_Exit  =
				{
				},
				ROUTE_Axis_Upper_Exit  =
				{
				},
			},
		},
		DEFEND_Tank_Cappoint_1 =
		{
			ROUTE_Axis_Spawn  =
			{
				ROUTE_Axis_Low_Exit  =
				{
					ROUTE_Gun_Front  =
					{
					},
				},
				ROUTE_Axis_Middle_Exit  =
				{
					ROUTE_Gun_Front  =
					{
					},
					ROUTE_Gun_Rear  =
					{
					},
				},
				ROUTE_Axis_Upper_Exit  =
				{
					ROUTE_Gun_Rear  =
					{
					},
				},
			},
			ROUTE_Flag_Spawn  =
			{
				ROUTE_Flag_Stairs  =
				{
					ROUTE_Barrier_Bridge_Exit  =
					{
					},
				},
				ROUTE_Back_Gate  =
				{
					ROUTE_Tree_Left  =
					{
					},
					ROUTE_Tree_Right  =
					{
					},
				},
			},
		},
	};

	MapRoutes.MOUNT_Tank = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Tank_1 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Tank_2 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Tank_3 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Tank_4 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Tank_5 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Hill_1 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Hill_2 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Hill_3 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Hill_4 = MapRoutes.BUILD_Tank;
	MapRoutes.ATTACK_Hill_5 = MapRoutes.BUILD_Tank;

	MapRoutes.ATTACK_Barrier_1 = MapRoutes.PLANT_Tank_Barrier;
	MapRoutes.ATTACK_Barrier_2 = MapRoutes.PLANT_Tank_Barrier;
	MapRoutes.ATTACK_Barrier_3 = MapRoutes.PLANT_Tank_Barrier;
	MapRoutes.ATTACK_Barrier_4 = MapRoutes.PLANT_Tank_Barrier;
	MapRoutes.ATTACK_Barrier_5 = MapRoutes.PLANT_Tank_Barrier;

	MapRoutes.DEFEND_Tank_Start_2 = MapRoutes.DEFEND_Tank_Start_1;
	MapRoutes.DEFEND_Tank_Start_3 = MapRoutes.DEFEND_Tank_Start_1;
	MapRoutes.DEFEND_Tank_Start_4 = MapRoutes.DEFEND_Tank_Start_1;
	MapRoutes.DEFEND_Tank_Start_5 = MapRoutes.DEFEND_Tank_Start_1;
	MapRoutes.DEFEND_Tank_Start_6 = MapRoutes.DEFEND_Tank_Start_1;
	MapRoutes.DEFEND_Tank_Start_7 = MapRoutes.DEFEND_Tank_Start_1;
	MapRoutes.DEFEND_Tank_Start_8 = MapRoutes.DEFEND_Tank_Start_1;

	MapRoutes.DEFEND_Obj_2 = MapRoutes.DEFEND_Obj_1;
	MapRoutes.DEFEND_Obj_3 = MapRoutes.DEFEND_Obj_1;
	MapRoutes.DEFEND_Area_1 = MapRoutes.DEFEND_Obj_1;
	MapRoutes.DEFEND_Area_2 = MapRoutes.DEFEND_Obj_1;
	MapRoutes.DEFEND_Area_3 = MapRoutes.DEFEND_Obj_1;



	Util.Routes(MapRoutes);

};
