//==========================================================================================
//
//	crevasse_pe.gm
//
//	Who			When		What
//------------------------------------------------------------------------------------------
//	^1[FL]^7Blind^4man	3 8 10
//
//==========================================================================================
//

global Map =
{
	Build_Anti_Tank_Gun = "BUILD_Anti_Tank_Gun",
	Flag_keycard_flag = "FLAG_keycard_flag",

	keytrigger =
	{
		Name = "keytrigger",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if ( GetEntTeam(ent) == TEAM.ALLIES)
			{

			SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_key.*" );
			SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_cap.*" );
			SetAvailableMapGoals( TEAM.AXIS, false, "CAMP_key.*" );
			SetAvailableMapGoals( TEAM.AXIS, true, "CAMP_cap.*" );

			}
		},
		OnExit = function(ent)
		{
		Util.MapDebugPrint( "key taken" );
		},
	},


	Debug = 0,

	Allied_CP_Dyno = 0,
	Anti_Tank_Gun_Dyno = 0,
	Suicide = 1,
//	DontDispenseAmmo = true,
//	DontDispenseHealth = true,

	Allied_CP_Built = function( trigger )
	{
//		Util.ChangeSpawn(TEAM.ALLIES, 9, 3);
		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam() == TEAM.ALLIES )
			{
				bot.ChangeSpawnPoint( 0 );

				//distance check instead?
				if ( Map.Suicide && bot.GetReinforceTime() < 5 )
				{
					bot.ExecCommand( "kill" );
				}
			}
		}
		Util.MapDebugPrint( "Allied_CP_Built" );
	},

	Anti_Tank_Gun_Built = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_.*" );
		Util.MapDebugPrint( "Anti_Tank_Gun_Built" );
	},

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

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

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

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

	Allied_CP_Destroyed = function( trigger )
	{
		Map.Allied_CP_Dyno = 0;

		Util.MapDebugPrint( "Allied_CP_Destroyed" );
	},

	Anti_Tank_Gun_Destroyed = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "SWITCH_.*" );
		Map.Anti_Tank_Gun_Dyno = 0;

		Util.MapDebugPrint( "Anti_Tank_Gun_Destroyed" );
	},

	documents_Taken = function( trigger )
	{

			SetAvailableMapGoals( TEAM.AXIS, true, "CAMP_trans.*" );
			SetAvailableMapGoals( TEAM.AXIS, false, "CAMP_docs.*" );
			SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_docs.*" );
			SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_trans.*" );
			SetAvailableMapGoals( TEAM.AXIS, false, "PLANTMINE_.*" );

		Util.MapDebugPrint( "documents_Taken" );
	},

	keycard_flag_Taken = function( trigger )
	{
		rnd = RandInt(1,3);
		if ( rnd == 1 )
		{
			Util.SetGoalPosition( -988.4, -1821.674, -987.875, Map.Build_Anti_Tank_Gun );
		}
		else if ( rnd == 2 )
		{
			Util.SetGoalPosition( -831.271, -1813.465, -1005.875, Map.Build_Anti_Tank_Gun);
		}
		else
		{
			Util.SetGoalPosition( -826.432, -1875.653, -1005.875, Map.Build_Anti_Tank_Gun);
		}

		Util.MapDebugPrint( "keycard_flag_Taken" );
	},

	documents_Returned = function( trigger )
	{
			SetAvailableMapGoals( TEAM.AXIS, true, "CAMP_docs.*" );
			SetAvailableMapGoals( TEAM.AXIS, false, "CAMP_trans.*" );
			SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_docs.*" );
			SetAvailableMapGoals( TEAM.AXIS, true, "PLANTMINE_.*" );

		Util.MapDebugPrint( "documents_Returned" );
	},

	keycard_flag_Returned = function( trigger )
	{
			SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_key.*" );
			SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_cap.*" );
			SetAvailableMapGoals( TEAM.AXIS, true, "CAMP_key.*" );
			SetAvailableMapGoals( TEAM.AXIS, false, "CAMP_cap.*" );

		Util.MapDebugPrint( "keycard_flag_Returned" );
	},

	documents_Secured = function( trigger )
	{
		Util.MapDebugPrint( "game over" );
	},

	keycard_flag_Secured = function( trigger )
	{

		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_cap.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"BUILD_Allied_CP",
			"BUILD_Anti_Tank_Gun",
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"ATTACK_key.*",
			"CAPPOINT_139",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_gun.*" );

		SetAvailableMapGoals( TEAM.AXIS, false, "CAMP_key.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"CAMP_gun.*",
			"CAMP_switch.*",
		});
		SetAvailableMapGoals( TEAM.AXIS, false, "CAMP_cap.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"PLANT_Anti_Tank_Gun",
			"PLANTMINE_.*",
		});

		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam() == TEAM.AXIS )
			{
				bot.ChangeSpawnPoint( 0 );

				//distance check instead?
				if ( Map.Suicide && bot.GetReinforceTime() < 7 )
				{
					bot.ExecCommand( "kill" );
				}
			}
		}

		Util.MapDebugPrint( "keycard_flag_Secured" );
	},

	gun_fired = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"SWITCH_.*",
			"ATTACK_gun.*",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"FLAG_documents",
			"CAPPOINT_transmitter",
		});
		SetAvailableMapGoals( TEAM.AXIS, false, "CAMP_gun.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "CAMP_docs.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_docs.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "CAMP_switch.*" );
		Util.DisableGoal( "PLANT_.*", true );
		Util.DisableGoal( "BUILD_.*", true );
		Util.MapDebugPrint( "^qAT gun Fired" );
	},

};

global OnMapLoad = function()
{
	// Register callback functions
	OnTrigger( "Allied Command Post constructed. Charge speed increased!", Map.Allied_CP_Built );
	OnTrigger( "Allies have repaired the Anti-Tank Gun!", Map.Anti_Tank_Gun_Built );
	OnTrigger( "Planted at the MISSING_STRING.", Map.Allied_CP_Planted );
	OnTrigger( "Planted at Anti_Tank Gun.", Map.Anti_Tank_Gun_Planted );
	OnTrigger( "Defused at the MISSING_STRING.", Map.Allied_CP_Defused );
	OnTrigger( "Defused at the MISSING_STRING.", Map.Anti_Tank_Gun_Defused );
	OnTrigger( "MISSING_STRING", Map.Allied_CP_Destroyed );
	OnTrigger( "Axis have disabled the Anti-tank Gun!", Map.Anti_Tank_Gun_Destroyed );
	OnTrigger( "Allies have stolen the Documents!", Map.documents_Taken );
	OnTrigger( "Allies have stolen the Keycard!", Map.keycard_flag_Taken );
	OnTrigger( "Flag returned documents!", Map.documents_Returned );
	OnTrigger( "Flag returned keycard_flag!", Map.keycard_flag_Returned );
	OnTrigger( "MISSING_STRING", Map.documents_Secured );
	OnTrigger( "Allied team has used the Keycard!", Map.keycard_flag_Secured );
	OnTrigger( "The allies have broken into the secure room!", Map.gun_fired );

	SetAvailableMapGoals( TEAM.ALLIES, false, ".*" );
	SetAvailableMapGoals( TEAM.AXIS, false, ".*" );
	Util.EnableGoal( "HEALTHCAB_.*", true );
	Util.EnableGoal( "AMMOCAB_.*", true );
	Util.EnableGoal( "ROUTE_.*", true );
	Util.SetGoalPosition( -998.054, -1829.160, -987.875, "PLANT_Anti_Tank_Gun");

	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"Flag_keycard_flag",
		"CAPPOINT_139",
		"ATTACK_key.*",
	});
	SetAvailableMapGoals( TEAM.AXIS, true, "CAMP_key.*" );
	SetGoalPriority( "ROUTE_15", 1.0 );

	// Max users per goal
	Util.SetMaxUsers( 1, "CAMP_.*" );
	Util.SetMaxUsers( 3, "FLAG_keycard_flag" );
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "GRENADE_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );

	k1 = OnTriggerRegion(AABB(1124.853,2183.944,-152.875,1162.853,2221.944,-78.875),Map.keytrigger);
	// Camp times
//	SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=15, MaxCampTime=90} );
//	SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=10, MaxCampTime=60} );

	MapRoutes =
	{
		FLAG_keycard_flag =
		{
			ROUTE_1  =
			{
				ROUTE_8  =
				{
					ROUTE_589  =
					{
						ROUTE_22  =
						{
							ROUTE_56  =
							{
								ROUTE_346  = {},


							},
						},
					},
					ROUTE_11  =
					{
						ROUTE_15  =
						{
							ROUTE_19  =
							{
								ROUTE_22  =
								{
									ROUTE_113  =
									{
										ROUTE_643  =
										{
											ROUTE_69  =
											{
												ROUTE_71  =
												{
												},
											},
										},
									},
								},
								ROUTE_27  =
								{
									ROUTE_62  =
									{
										ROUTE_60  =
										{
											ROUTE_346  =
											{
											},
										},
									},
									ROUTE_319  =
									{
										ROUTE_33  =
										{
											ROUTE_36  =
											{
												ROUTE_303  =
												{
													ROUTE_321  =
													{
														ROUTE_113  =
														{
														},
													},
												},
											},
										},
									},
								},
							},
						},
					},
				},
			},
		},

		CAPPOINT_transmitter =
		{
			ROUTE_285  =
			{
				ROUTE_451  =
				{
					ROUTE_453  =
					{
						ROUTE_210  =
						{
							ROUTE_207  =
							{
								ROUTE_206  =
								{
									ROUTE_200  =
									{
										ROUTE_180  =
										{
											ROUTE_560  =
											{
												ROUTE_642  =
												{
												},
											},
										},
									},
								},
							},
						},
					},
				},
				ROUTE_570  =
				{
					ROUTE_600  =
					{
						ROUTE_609  =
						{
							ROUTE_235  =
							{
								ROUTE_556  =
								{
									ROUTE_642  =
									{
									},
								},
							},
						},
					},
				},
				ROUTE_276  =
				{
					ROUTE_272  =
					{
						ROUTE_640  =
						{
							ROUTE_269  =
							{
							},
						},
					},
				},
			},
		},

		CAPPOINT_139 =
		{
			ROUTE_330  =
			{
				ROUTE_60  =
				{
					ROUTE_62  =
					{
						ROUTE_308  =
						{
							ROUTE_319  =
							{
								ROUTE_33  =
								{
									ROUTE_303  =
									{
									},
								},
							},
						},
					},
				},
				ROUTE_346  =
				{
					ROUTE_56  =
					{
						ROUTE_113  =
						{
							ROUTE_321  =
							{
								ROUTE_303  =
								{
									ROUTE_133  =
									{
									},
								},
							},
						},
					},
				},
				ROUTE_71  =
				{
					ROUTE_341  =
					{
						ROUTE_107  =
						{
							ROUTE_321  =
							{
								ROUTE_303  =
								{
									ROUTE_133  =
									{
									},
								},
							},
						},
					},
				},
			},
		},

		ATTACK_gun1 =
		{
			ROUTE_cp  =
			{
				ROUTE_cp1  =
				{
					ROUTE_cp8  =
					{
						ROUTE_cp9  =
						{
							ROUTE_cp10  =
							{
								ROUTE_cp13  =
								{
								},
								ROUTE_cp11  =
								{
									ROUTE_cp12  =
									{
									},
								},
							},
						},
					},
					ROUTE_cp2  =
					{
						ROUTE_206  =
						{
							ROUTE_200  =
							{
							},
						},
					},
					ROUTE_cp3  =
					{
						ROUTE_cp4  =
						{
							ROUTE_cp5  =
							{
								ROUTE_cp6  =
								{
									ROUTE_cp7  =
									{
										ROUTE_cp13a  =
										{
											ROUTE_cp13b  =
											{
												ROUTE_cp13c  =
												{
													ROUTE_cp13d  =
													{
													},
												},
											},
										},
									},
								},
							},
						},
					},
				},
			},
		},

	};

	MapRoutes.ATTACK_key1 = MapRoutes.FLAG_keycard_flag;
	MapRoutes.ATTACK_key2 = MapRoutes.FLAG_keycard_flag;
	MapRoutes.ATTACK_key3 = MapRoutes.FLAG_keycard_flag;
	MapRoutes.ATTACK_key4 = MapRoutes.FLAG_keycard_flag;
	MapRoutes.ATTACK_key5 = MapRoutes.FLAG_keycard_flag;
	MapRoutes.ATTACK_trans1 = MapRoutes.CAPPOINT_transmitter;
	MapRoutes.ATTACK_trans2 = MapRoutes.CAPPOINT_transmitter;
	MapRoutes.ATTACK_trans3 = MapRoutes.CAPPOINT_transmitter;
	MapRoutes.ATTACK_trans4 = MapRoutes.CAPPOINT_transmitter;
	MapRoutes.ATTACK_cap1 = MapRoutes.CAPPOINT_139;
	MapRoutes.ATTACK_cap2 = MapRoutes.CAPPOINT_139;
	MapRoutes.ATTACK_cap3 = MapRoutes.CAPPOINT_139;
	MapRoutes.ATTACK_cap4 = MapRoutes.CAPPOINT_139;

	MapRoutes.ATTACK_gun2 = MapRoutes.ATTACK_gun1;
	MapRoutes.ATTACK_gun3 = MapRoutes.ATTACK_gun1;
	MapRoutes.ATTACK_gun4 = MapRoutes.ATTACK_gun1;
	MapRoutes.Build_Anti_Tank_Gun = MapRoutes.ATTACK_gun1;
	Util.Routes(MapRoutes);

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

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