//==========================================================================================
//
//	beta_low_mount_ass.gm
//
//	Who              	When		What
//------------------------------------------------------------------------------------------
//	native12		20 March 2012	Initial Script
//	native12		07.05.2012	First release
//	native12		10.05.2012	Coverspots, minor changes in gm & ways
//
//==========================================================================================
//	beta_low_mount_ass.gm		10.05.2012
//	beta_low_mount_ass_goals.gm	10.05.2012
//
//==========================================================================================

global Map =
{
	Radar_Room_Dyno = 0,
	Radio_Equipment_Dyno = 0,
	Radio_Tower_Dyno = 0,
	Sewer_Entrance_Dyno = 0,
	garage_door_switch_Dyno = 0,

	AxisFlag = true,
	GarageDoorOpened = false,
	GarageDoorDestroyed = false,
	RadioTowerDestroyed = false,
	RadioEquipmentDestroyed = false,
	RadarRoomDestroyed = false,
	SewerEntranceDestroyed = false,
	One_Left = false,

	Alliesincomplex = 0,
	AlliedEngsIncomplex = 0,

	Roles =
	{
		AXIS =
		{
			AllBots = true, // each bot is considered for a role
			DEFENDER1 =	//DEFEND_RadioEquipment_1
			{
				numbots = 1,
				crucialClass = CLASS.COVERTOPS,
			},
			DEFENDER2 =	//DEFEND_RadarRoom_1
			{
				numbots = 1,
				crucialClass = CLASS.ENGINEER,
			},
			DEFENDER3 =	//DEFEND_RadioTower_1
			{
				numbots = 1,
				crucialClass = CLASS.ENGINEER,
			},
		},
	},

	Navigation =
	{
		//	/bot waypoint_setproperty paththrough Navigation_PT:bunkerladder
		bunkerladder =
		{
			navigate = function(_this)
			{
				_this.AddAimRequest(Priority.VeryHigh, "facing", Vector3(0.438520,-0.012658,-0.898632));
				_this.Bot.HoldButton( BTN.CROUCH, 1.5 );
				_this.Bot.HoldButton( BTN.WALK, 1.5 );
				_this.Bot.HoldButton( BTN.FORWARD, 1.5 );
				sleep(1.5);
			},
		},
	},

	Sewer_Entrance_Planted = function( trigger )
	{

		Map.Sewer_Entrance_Dyno += 1;

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFUSE_Sewer_Entrance_.*",
			"DEFEND_SewerEntrance",
		});

		if ( !Map.One_Left )
		{
			if ( Map.Alliesincomplex == 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_SewerTunnel_.*" );
			}
		}

		Util.MapDebugPrint("^5Sewer_Entrance_Planted" );
	},

	Sewer_Entrance_Defused = function( trigger )
	{

		Map.Sewer_Entrance_Dyno -= 1;

		Util.MapDebugPrint("^5Sewer_Entrance_Defused" );
	},

	Sewer_Entrance_Destroyed = function( trigger )
	{

		Map.Sewer_Entrance_Dyno = 0;

		Map.SewerEntranceDestroyed = true;

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

		Util.MapDebugPrint("^5Sewer_Entrance_Destroyed" );
	},

	Radio_Tower_Planted = function( trigger )
	{

		Map.Radio_Tower_Dyno += 1;

		if ( Map.garage_door_switch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_garage_door_switch_.*" );
		}

		Util.MapDebugPrint("^5Radio_Tower_Planted" );
	},

	Radio_Tower_Defused = function( trigger )
	{

		Map.Radio_Tower_Dyno -= 1;

		if ( Map.Radio_Tower_Dyno == 0 and Map.Radio_Equipment_Dyno == 0 and Map.Radar_Room_Dyno == 0 )
		{
			if ( Map.garage_door_switch_Dyno > 0 and !Map.GarageDoorDestroyed )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_garage_door_switch_.*" );
			}
		}

		Util.MapDebugPrint("^5Radio_Tower_Defused" );
	},

	Radio_Tower_Destroyed = function( trigger )
	{

		if ( Map.Radio_Tower_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Radio_Tower_.*" );
		}

		Map.Radio_Tower_Dyno = 0;

		Map.RadioTowerDestroyed = true;

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_RadioTower_.*",
			"MOBILEMG42_RadioTower_11",
		});

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

		if ( Map.RadarRoomDestroyed )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, {
				"MOUNTMG42_complex_roof",
				"REPAIRMG42_complex_roof",
			});
		}

		if ( !Map.RadioEquipmentDestroyed and Map.RadarRoomDestroyed )
		{
			Map.One_Left = true;

			SetAvailableMapGoals( TEAM.AXIS, false, {
				"DEFEND_.*",
				".*_RadioTowerRope_.*",
				"MOUNTMG42_.*",
				"REPAIRMG42_.*",
			});

			if ( Map.garage_door_switch_Dyno > 0)
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_garage_door_switch_.*" );
			}

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"DEFEND_RadioEquipment_.*",
				"MOBILEMG42_RadioEquipment_.*",
			});

			if ( Map.AxisFlag )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Flag_Axis_1" );
			}
		}
		if ( Map.RadioEquipmentDestroyed and !Map.RadarRoomDestroyed )
		{
			Map.One_Left = true;

			SetAvailableMapGoals( TEAM.AXIS, false, {
				"DEFEND_.*",
				".*_RadioTowerRope_.*",
				"MOUNTMG42_.*",
				"REPAIRMG42_.*",
			});

			SetGoalPriority( "REPAIRMG42_complex_roof", 0.7, TEAM.AXIS, CLASS.ENGINEER );

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"MOUNTMG42_complex_roof",
				"REPAIRMG42_complex_roof",
			});

			if ( Map.garage_door_switch_Dyno > 0)
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_garage_door_switch_.*" );
			}

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"DEFEND_RadarRoom_.*",
				"MOBILEMG42_RadarRoom_.*",
			});

			if ( Map.AxisFlag )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Flag_Axis_1" );
			}
		}

		if ( Map.RadioEquipmentDestroyed and Map.RadarRoomDestroyed )
		{
			Util.MapDebugPrint( "^5Allies_Win" );

			sleep(1);

			ETUtil.WinningChat( TEAM.ALLIES );
			sleep(1.5);
			ETUtil.LosingChat( TEAM.AXIS );
		}

		Util.MapDebugPrint("^5Radio_Tower_Destroyed" );
	},

	Radio_Equipment_Planted = function( trigger )
	{

		Map.Radio_Equipment_Dyno += 1;

		if ( Map.garage_door_switch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_garage_door_switch_.*" );
		}

		Util.MapDebugPrint("^5Radio_Equipment_Planted" );
	},

	Radio_Equipment_Defused = function( trigger )
	{

		Map.Radio_Equipment_Dyno -= 1;

		if ( Map.Radio_Tower_Dyno == 0 and Map.Radio_Equipment_Dyno == 0 and Map.Radar_Room_Dyno == 0 )
		{
			if ( Map.garage_door_switch_Dyno > 0 and !Map.GarageDoorDestroyed )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_garage_door_switch_.*" );
			}
		}

		Util.MapDebugPrint("^5Radio_Equipment_Defused" );
	},

	Radio_Equipment_Destroyed = function( trigger )
	{

		if ( Map.Radio_Equipment_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Radio_Equipment_.*" );
		}

		Map.Radio_Equipment_Dyno = 0;

		Map.RadioEquipmentDestroyed = true;

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_RadioEquipment_.*",
			"MOBILEMG42_RadioEquipment_11",
		});

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

		if ( !Map.RadioTowerDestroyed and Map.RadarRoomDestroyed )
		{
			Map.One_Left = true;

			SetAvailableMapGoals( TEAM.AXIS, false, {
				"DEFEND_.*",
				".*_RadioTowerRope_.*",
				"MOUNTMG42_.*",
				"REPAIRMG42_.*",
			});

			SetGoalPriority( "REPAIRMG42_complex_roof", 0.7, TEAM.AXIS, CLASS.ENGINEER );

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"MOUNTMG42_complex_roof",
				"REPAIRMG42_complex_roof",
			});

			if ( Map.garage_door_switch_Dyno > 0)
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_garage_door_switch_.*" );
			}

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"DEFEND_RadioTower_.*",
				"MOBILEMG42_RadioTower_.*",
				"ARTILLERY_S_RadioTowerRope_5",
				"CALLARTILLERY_RadioTowerRope_4",
			});

			if ( Map.AxisFlag )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Flag_Axis_1" );
			}
		}
		if ( Map.RadioTowerDestroyed and !Map.RadarRoomDestroyed )
		{
			Map.One_Left = true;

			SetAvailableMapGoals( TEAM.AXIS, false, {
				"DEFEND_.*",
				".*_RadioTowerRope_.*",
				"MOUNTMG42_.*",
				"REPAIRMG42_.*",
			});

			SetGoalPriority( "REPAIRMG42_complex_roof", 0.7, TEAM.AXIS, CLASS.ENGINEER );

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"MOUNTMG42_complex_roof",
				"REPAIRMG42_complex_roof",
			});

			if ( Map.garage_door_switch_Dyno > 0)
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_garage_door_switch_.*" );
			}

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"DEFEND_RadarRoom_.*",
				"MOBILEMG42_RadarRoom_.*",
			});

			if ( Map.AxisFlag )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Flag_Axis_1" );
			}
		}

		if ( Map.RadioTowerDestroyed and Map.RadarRoomDestroyed )
		{
			Util.MapDebugPrint( "^5Allies_Win" );

			sleep(1);

			ETUtil.WinningChat( TEAM.ALLIES );
			sleep(1.5);
			ETUtil.LosingChat( TEAM.AXIS );
		}

		Util.MapDebugPrint("^5Radio_Equipment_Destroyed" );
	},

	Radar_Room_Planted = function( trigger )
	{

		Map.Radar_Room_Dyno += 1;

		if ( Map.garage_door_switch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_garage_door_switch_.*" );
		}

		Util.MapDebugPrint("^5Radar_Room_Planted" );
	},

	Radar_Room_Defused = function( trigger )
	{

		Map.Radar_Room_Dyno -= 1;

		if ( Map.Radio_Tower_Dyno == 0 and Map.Radio_Equipment_Dyno == 0 and Map.Radar_Room_Dyno == 0 )
		{
			if ( Map.garage_door_switch_Dyno > 0 and !Map.GarageDoorDestroyed )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_garage_door_switch_.*" );
			}
		}

		Util.MapDebugPrint("^5Radar_Room_Defused" );
	},

	Radar_Room_Destroyed = function( trigger )
	{

		if ( Map.Radar_Room_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Radar_Room_.*" );
		}

		Map.Radar_Room_Dyno = 0;

		Map.RadarRoomDestroyed = true;

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_RadarRoom_.*",
			"MOBILEMG42_RadarRoom_11",
		});

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

		if ( Map.RadioTowerDestroyed )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, {
				"MOUNTMG42_complex_roof",
				"REPAIRMG42_complex_roof",
			});
		}

		if ( !Map.RadioTowerDestroyed and Map.RadioEquipmentDestroyed )
		{
			Map.One_Left = true;

			SetAvailableMapGoals( TEAM.AXIS, false, {
				"DEFEND_.*",
				".*_RadioTowerRope_.*",
				"MOUNTMG42_.*",
				"REPAIRMG42_.*",
			});

			SetGoalPriority( "REPAIRMG42_complex_roof", 0.7, TEAM.AXIS, CLASS.ENGINEER );

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"MOUNTMG42_complex_roof",
				"REPAIRMG42_complex_roof",
			});

			if ( Map.garage_door_switch_Dyno > 0)
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_garage_door_switch_.*" );
			}

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"DEFEND_RadioTower_.*",
				"MOBILEMG42_RadioTower_.*",
				"ARTILLERY_S_RadioTowerRope_5",
				"CALLARTILLERY_RadioTowerRope_4",
			});

			if ( Map.AxisFlag )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Flag_Axis_1" );
			}
		}
		if ( Map.RadioTowerDestroyed and !Map.RadioEquipmentDestroyed )
		{
			Map.One_Left = true;

			SetAvailableMapGoals( TEAM.AXIS, false, {
				"DEFEND_.*",
				".*_RadioTowerRope_.*",
				"MOUNTMG42_.*",
				"REPAIRMG42_.*",
			});

			if ( Map.garage_door_switch_Dyno > 0)
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_garage_door_switch_.*" );
			}

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"DEFEND_RadioEquipment_.*",
				"MOBILEMG42_RadioEquipment_.*",
			});

			if ( Map.AxisFlag )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Flag_Axis_1" );
			}
		}

		if ( Map.RadioTowerDestroyed and Map.RadioEquipmentDestroyed )
		{
			Util.MapDebugPrint( "^5Allies_Win" );

			sleep(1);

			ETUtil.WinningChat( TEAM.ALLIES );
			sleep(1.5);
			ETUtil.LosingChat( TEAM.AXIS );
		}

		Util.MapDebugPrint("^5Radar_Room_Destroyed" );
	},

	garage_door_switch_Planted = function( trigger )
	{

		Map.garage_door_switch_Dyno += 1;

		if ( Map.One_Left )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_garage_door_switch_.*" );
		}
		else
		{
			if ( Map.Radio_Tower_Dyno == 0 and Map.Radio_Equipment_Dyno == 0 and Map.Radar_Room_Dyno == 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_garage_door_switch_.*" );
			}
			else
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_garage_door_switch_.*" );
			}
		}

		Util.MapDebugPrint("^5garage_door_switch_Planted" );
	},

	garage_door_switch_Defused = function( trigger )
	{

		Map.garage_door_switch_Dyno -= 1;

		Util.MapDebugPrint("^5garage_door_switch_Defused" );
	},

	garage_door_switch_Destroyed = function( trigger )
	{

		if ( Map.garage_door_switch_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_garage_door_switch_.*" );
		}

		Map.garage_door_switch_Dyno = 0;
		Map.GarageDoorDestroyed = true;
		Map.GarageDoorOpened = true;

		Util.DisableGoal( "SWITCH_Garage_door" );
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_GarageSwitch_.*" );

		if ( Map.Alliesincomplex == 0 )
		{
			if ( Map.AxisFlag )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, {
					"DEFEND_Flag_Axis_1",
					"MOBILEMG42_GarageDoor",
					"DEFEND_GarageDoor_.*",
					"CALLARTILLERY_GarageDoor_5",
					"ARTILLERY_S_GarageDoor_6",
				});
			}
		}

		Util.MapDebugPrint("^5garage_door_switch_Destroyed" );
	},

	garage_lever = function( trigger )
	{

		vel = ToVector(trigger.Action);

		if ( !Map.GarageDoorDestroyed )
		{
			if ( vel[ 0 ] == 45.00 )
			{
				Map.GarageDoorOpened = true;

				if( ETUtil.CountTeam( TEAM.AXIS ) < 5 )
				{
					Util.SetMaxUsers( 1, "SWITCH_Garage_door" );
				}
				else
				{
					Util.SetMaxUsers( 2, "SWITCH_Garage_door" );
				}

				SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_GarageSwitch_.*" );

				SetAvailableMapGoals( TEAM.ALLIES, false, {
					"SWITCH_Garage_door",
					"SWITCH_left_gun",
					"SWITCH_right_gun",
				});

				if ( Map.Alliesincomplex == 0 )
				{
					if ( Map.AxisFlag )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, {
							"DEFEND_Flag_Axis_1",
							"MOBILEMG42_GarageDoor",
							"DEFEND_GarageDoor_.*",
							"CALLARTILLERY_GarageDoor_5",
							"ARTILLERY_S_GarageDoor_6",
						});
					}
				}

				Util.MapDebugPrint("^5Garage door is opening");

				if ( !Map.One_Left )
				{
					sleep(5);

					if ( !Map.GarageDoorDestroyed and Map.GarageDoorOpened )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "SWITCH_Garage_door" );
					}
				}
				else
				{
					sleep(5);

					if ( !Map.GarageDoorDestroyed and Map.GarageDoorOpened )
					{
						Util.SetMaxUsers( 1, "SWITCH_Garage_door" );

						SetAvailableMapGoals( TEAM.AXIS, true, "SWITCH_Garage_door" );
					}
				}
			}
		}

		if ( vel[ 0 ] == -45.00 )
		{
			Map.GarageDoorOpened = false;

			if( ETUtil.CountTeam( TEAM.ALLIES ) < 5 )
			{
				Util.SetMaxUsers( 1, "SWITCH_Garage_door" );
			}
			else
			{
				Util.SetMaxUsers( 2, "SWITCH_Garage_door" );
			}

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

			Util.MapDebugPrint("^5Garage door is closing");

			sleep(5);

			if ( !Map.GarageDoorDestroyed )
			{
				Map.GarageDoorOpened = false;

				SetAvailableMapGoals( TEAM.AXIS, false, {
					"MOBILEMG42_GarageDoor",
					"DEFEND_GarageDoor_.*",
					"CALLARTILLERY_GarageDoor_5",
					"ARTILLERY_S_GarageDoor_6",
				});

				SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_Garage_door" );

				if ( Map.AxisFlag )
				{
					SetAvailableMapGoals( TEAM.ALLIES, true, {
						"SWITCH_left_gun",
						"SWITCH_right_gun",
					});
				}
			}
		}
	},

	compound_flag_Axis_Captured = function( trigger )
	{

		Map.AxisFlag = true;

		if( ETUtil.CountTeam( TEAM.ALLIES ) < 5 )
		{
			Util.SetMaxUsers( 1, "CHECKPOINT_.*" );
		}
		else
		{
			Util.SetMaxUsers( 2, "CHECKPOINT_.*" );
		}

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

		if ( !Map.One_Left )
		{
			if ( Map.AlliedEngsIncomplex == 0 )
			{
				if ( Map.Alliesincomplex > 0 )
				{
					SetAvailableMapGoals( TEAM.AXIS, true, {
						"DEFEND_Flag_Axis_1",
						"DEFEND_Flag_Axis_2",
					});

					if ( Map.GarageDoorOpened )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, {
							"DEFEND_GarageDoor_.*",
							"CALLARTILLERY_GarageDoor_5",
							"ARTILLERY_S_GarageDoor_6",
						});
					}
					if ( !Map.GarageDoorDestroyed )
					{
						if ( !Map.GarageDoorOpened )
						{
							SetAvailableMapGoals( TEAM.AXIS, true, {
								"DEFEND_GarageSwitch_1",
								"DEFEND_GarageSwitch_2",
							});
						}
					}
				}
				else
				{
					SetAvailableMapGoals( TEAM.AXIS, false, {
						".*_Flag_Axis_.*",
						".*_RadioEquipment_.*",
						".*_RadarRoom_.*",
						"DEFEND_RadioTower_.*",
					});

					if ( !Map.GarageDoorOpened )
					{
						if ( !Map.SewerEntranceDestroyed )
						{
							SetAvailableMapGoals( TEAM.AXIS, true, {
								"DEFEND_SewerEntrance",
								"DEFEND_CaveLadder_.*",
							});
						}
						else
						{
							SetAvailableMapGoals( TEAM.AXIS, true, {
								"DEFEND_SewerTunnel_.*",
								"DEFEND_CaveLadder_2",
								"DEFEND_CaveLadder_3",
							});
						}
					}
					else
					{
						SetAvailableMapGoals( TEAM.AXIS, true, {
							"MOBILEMG42_GarageDoor",
							"DEFEND_GarageDoor_.*",
							"CALLARTILLERY_GarageDoor_5",
							"ARTILLERY_S_GarageDoor_6",
						});

						if ( Map.SewerEntranceDestroyed )
						{
							SetAvailableMapGoals( TEAM.AXIS, true, {
								"DEFEND_SewerTunnel_1",
								"DEFEND_SewerTunnel_4",
							});
						}

						SetAvailableMapGoals( TEAM.AXIS, true, {
							"MOBILEMG42_GarageDoor",
							"DEFEND_CaveLadder_3",
						});
					}

					SetAvailableMapGoals( TEAM.AXIS, true, {
						"MOBILEMG42_RadioTower_11",
						".*_RadioTowerRope_.*",
						"DEFEND_LeftTower_.*",
						"DEFEND_RightTower_.*",
						"MOUNTMG42_left_tower",
						"MOUNTMG42_right_tower",
						"REPAIRMG42_left_tower",
						"REPAIRMG42_right_tower",
					});
				}
			}
			else
			{
				if ( Map.AxisFlag )
				{
					SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Flag_Axis_1" );

					if ( Map.GarageDoorOpened )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, {
							"DEFEND_GarageDoor_4",
							"CALLARTILLERY_GarageDoor_5",
							"ARTILLERY_S_GarageDoor_6",
						});
					}
					if ( !Map.GarageDoorDestroyed )
					{
						if ( !Map.GarageDoorOpened )
						{
							SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_GarageSwitch_1" );
						}
					}
				}
			}
		}
		else
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Flag_Axis_1" );
		}

		SetAvailableMapGoals( TEAM.ALLIES, true, "CHECKPOINT_compound_flag" );

		Util.MapDebugPrint("^5compound_flag_Axis_Captured" );
	},

	compound_flag_Allies_Captured = function( trigger )
	{

		Map.AxisFlag = false;

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_Flag_Axis_.*",
			".*_GarageDoor_.*",
		});

		if ( !Map.One_Left )
		{
			if( ETUtil.CountTeam( TEAM.AXIS ) < 5 )
			{
				Util.SetMaxUsers( 1, "CHECKPOINT_.*" );
			}
			else
			{
				Util.SetMaxUsers( 2, "CHECKPOINT_.*" );
			}

			if ( Map.GarageDoorOpened )
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "MOBILEMG42_GarageDoor" );
			}

			SetAvailableMapGoals( TEAM.AXIS, true, "CHECKPOINT_compound_flag" );
		}
		else
		{
			Util.SetMaxUsers( 1, "CHECKPOINT_.*" );

			SetAvailableMapGoals( TEAM.AXIS, true, "CHECKPOINT_compound_flag" );
		}

		if ( !Map.GarageDoorOpened )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, {
				"SWITCH_left_gun",
				"SWITCH_right_gun",
			});
		}

		SetAvailableMapGoals( TEAM.ALLIES, false, "CHECKPOINT_compound_flag" );

		Util.MapDebugPrint("^5compound_flag_Allies_Captured" );
	},

	right_gun = function( trigger )
	{

		if ( trigger.Action == "70.80 -70.80 0.00" )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "SWITCH_right_gun" );

			Util.MapDebugPrint("^5right_gun_stopped" );

			sleep(5);

			if ( Map.AxisFlag and !Map.GarageDoorOpened )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_right_gun" );
			}

			Util.MapDebugPrint("^5right_gun_ready" );
		}
	},

	left_gun = function( trigger )
	{

		if ( trigger.Action == "-70.80 -70.80 0.00" )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "SWITCH_left_gun" );

			Util.MapDebugPrint("^5left_gun_stopped" );

			sleep(5);

			if ( Map.AxisFlag and !Map.GarageDoorOpened )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_left_gun" );
			}

			Util.MapDebugPrint("^5left_gun_ready" );
		}
	},

	Thirty_second = function( trigger )
	{
		Util.MapDebugPrint( "^5Thirty_second" );

		sleep(30);

		if ( !Map.RadioTowerDestroyed or !Map.RadioEquipmentDestroyed or !Map.RadarRoomDestroyed )
		{
			Util.MapDebugPrint( "^5Axis_Win" );

			sleep(1);

			ETUtil.WinningChat( TEAM.AXIS );
			sleep(1.5);
			ETUtil.LosingChat( TEAM.ALLIES );
		}
	},

	Allies_in_complex =
	{
		Name = "Allies_in_complex",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if ( GetEntTeam(ent) == TEAM.ALLIES )
			{
				Map.Alliesincomplex += 1;

				Util.MapDebugPrint( "^5Allies entered into complex" );

				if ( GetEntClass(ent) == CLASS.ENGINEER )
				{
					Map.AlliedEngsIncomplex += 1;

					Util.MapDebugPrint( "^5Allied Engineer entered into complex" );
				}

				if ( !Map.One_Left )
				{
					if ( Map.AxisFlag )
					{
						if ( Map.AlliedEngsIncomplex == 0 )
						{
							if ( Map.Alliesincomplex == 1 )	//it will run only once at first entry of allies
							{
								SetAvailableMapGoals( TEAM.AXIS, false, {
									"DEFEND_.*",
									".*_RadioTowerRope_.*",
									"MOUNTMG42_.*",
									"REPAIRMG42_.*",
								});

								if ( !Map.RadarRoomDestroyed )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"MOBILEMG42_RadarRoom_11",
										"DEFEND_RadarRoom_1",
										"DEFEND_RadarRoom_2",
										"DEFEND_RadarRoom_3",
									});
								}
								if ( !Map.RadioEquipmentDestroyed )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"MOBILEMG42_RadioEquipment_11",
										"DEFEND_RadioEquipment_1",
										"DEFEND_RadioEquipment_2",
										"DEFEND_RadioEquipment_3",
									});
								}
								if ( !Map.RadioTowerDestroyed )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"DEFEND_RadioTower_1",
										"DEFEND_RadioTower_2",
										"DEFEND_RadioTower_3",
										"MOBILEMG42_RadioTower_11",
									});
								}

								SetAvailableMapGoals( TEAM.AXIS, true, {
									"DEFEND_Flag_Axis_1",
									"DEFEND_Flag_Axis_2",
								});

								if ( Map.GarageDoorOpened )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"DEFEND_GarageDoor_.*",
										"CALLARTILLERY_GarageDoor_5",
										"ARTILLERY_S_GarageDoor_6",
									});
								}
								if ( !Map.GarageDoorDestroyed )
								{
									if ( !Map.GarageDoorOpened )
									{
										SetAvailableMapGoals( TEAM.AXIS, true, {
											"DEFEND_GarageSwitch_1",
											"DEFEND_GarageSwitch_2",
										});
									}
								}
							}
						}
						else
						{
							if ( Map.AlliedEngsIncomplex == 1 )	//it will run only once at first entry of engineer
							{
								SetAvailableMapGoals( TEAM.AXIS, false, {
									"DEFEND_.*",
									".*_RadioTowerRope_.*",
									"MOUNTMG42_.*",
									"REPAIRMG42_.*",
								});

								if ( !Map.RadarRoomDestroyed )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"MOBILEMG42_RadarRoom_11",
										"DEFEND_RadarRoom_.*",
									});
								}
								if ( !Map.RadioEquipmentDestroyed )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"MOBILEMG42_RadioEquipment_11",
										"DEFEND_RadioEquipment_.*",
									});
								}
								if ( !Map.RadioTowerDestroyed )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"DEFEND_RadioTower_.*",
										"MOBILEMG42_RadioTower_11",
									});
								}

								SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Flag_Axis_1" );

								if ( Map.GarageDoorOpened )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"DEFEND_GarageDoor_4",
										"CALLARTILLERY_GarageDoor_5",
										"ARTILLERY_S_GarageDoor_6",
									});
								}
								if ( !Map.GarageDoorDestroyed )
								{
									if ( !Map.GarageDoorOpened )
									{
										SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_GarageSwitch_1" );
									}
								}
							}
						}
					}
				}
			}
		},
		OnExit = function(ent)
		{
			if ( GetEntTeam(ent) == TEAM.ALLIES )
			{
				Map.Alliesincomplex -= 1;

				Util.MapDebugPrint( "^5Ally left the complex" );

				if ( GetEntClass(ent) == CLASS.ENGINEER )
				{
					Map.AlliedEngsIncomplex -= 1;

					Util.MapDebugPrint( "^5Allied eng left the complex" );

					if ( Map.AlliedEngsIncomplex == 0 )
					{
						Util.MapDebugPrint( "^5Allied engineers aren't in complex" );
					}
				}

				if ( Map.Alliesincomplex == 0 )
				{
					Util.MapDebugPrint( "^5Allies aren't in complex" );
				}

				if ( !Map.One_Left )
				{
					if ( Map.AxisFlag )
					{
						if ( Map.Alliesincomplex > 0 )
						{
							if ( Map.AlliedEngsIncomplex == 0 )
							{
								SetAvailableMapGoals( TEAM.AXIS, false, {
									"DEFEND_.*",
									".*_RadioTowerRope_.*",
									"MOUNTMG42_.*",
									"REPAIRMG42_.*",
									"DEFEND_RadioEquipment_.*",
									"DEFEND_RadarRoom_.*",
									"DEFEND_RadioTower_.*",
								});

								if ( !Map.RadarRoomDestroyed )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"MOBILEMG42_RadarRoom_11",
										"DEFEND_RadarRoom_1",
										"DEFEND_RadarRoom_2",
										"DEFEND_RadarRoom_3",
									});
								}
								if ( !Map.RadioEquipmentDestroyed )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"MOBILEMG42_RadioEquipment_11",
										"DEFEND_RadioEquipment_1",
										"DEFEND_RadioEquipment_2",
										"DEFEND_RadioEquipment_3",
									});
								}
								if ( !Map.RadioTowerDestroyed )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"DEFEND_RadioTower_1",
										"DEFEND_RadioTower_2",
										"DEFEND_RadioTower_3",
										"MOBILEMG42_RadioTower_11",
									});
								}

								SetAvailableMapGoals( TEAM.AXIS, true, {
									"DEFEND_Flag_Axis_1",
									"DEFEND_Flag_Axis_2",
								});

								if ( Map.GarageDoorOpened )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"DEFEND_GarageDoor_.*",
										"CALLARTILLERY_GarageDoor_5",
										"ARTILLERY_S_GarageDoor_6",
									});
								}
								if ( !Map.GarageDoorDestroyed )
								{
									if ( !Map.GarageDoorOpened )
									{
										SetAvailableMapGoals( TEAM.AXIS, true, {
											"DEFEND_GarageSwitch_1",
											"DEFEND_GarageSwitch_2",
										});
									}
								}
							}
						}
						else
						{
							SetAvailableMapGoals( TEAM.AXIS, false, {
								"DEFEND_.*",
								".*_RadioTowerRope_.*",
								"MOUNTMG42_.*",
								"REPAIRMG42_.*",
								".*_RadioEquipment_.*",
								".*_RadarRoom_.*",
								".*_RadioTower_.*",
							});

							if ( !Map.GarageDoorOpened )
							{
								if ( !Map.SewerEntranceDestroyed )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"DEFEND_SewerEntrance",
										"DEFEND_CaveLadder_.*",
									});
								}
								else
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"DEFEND_SewerTunnel_.*",
										"DEFEND_CaveLadder_2",
										"DEFEND_CaveLadder_3",
									});
								}
							}
							else
							{
								SetAvailableMapGoals( TEAM.AXIS, true, {
									"MOBILEMG42_GarageDoor",
									"DEFEND_GarageDoor_.*",
									"CALLARTILLERY_GarageDoor_5",
									"ARTILLERY_S_GarageDoor_6",
								});

								if ( Map.SewerEntranceDestroyed )
								{
									SetAvailableMapGoals( TEAM.AXIS, true, {
										"DEFEND_SewerTunnel_1",
										"DEFEND_SewerTunnel_4",
									});
								}

								SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_CaveLadder_3" );
							}

							SetAvailableMapGoals( TEAM.AXIS, true, {
								"MOBILEMG42_RadioTower_11",
								".*_RadioTowerRope_.*",
								"DEFEND_LeftTower_.*",
								"DEFEND_RightTower_.*",
								"MOUNTMG42_left_tower",
								"MOUNTMG42_right_tower",
								"REPAIRMG42_left_tower",
								"REPAIRMG42_right_tower",
							});
						}
					}
				}
			}
		},
	},
};

global OnMapLoad = function()
{

	// Register callback functions
	OnTrigger( "Planted at the Sewer Entrance.", Map.Sewer_Entrance_Planted );
	OnTrigger( "Planted at Sewer Entrance.", Map.Sewer_Entrance_Planted );	//for nitmod
	OnTrigger( "Defused at the Sewer Entrance.", Map.Sewer_Entrance_Defused );
	OnTrigger( "Defused at Sewer Entrance.", Map.Sewer_Entrance_Defused );	//for nitmod
	OnTrigger( "The Allies has breached the sewer entrance!", Map.Sewer_Entrance_Destroyed );

	OnTrigger( "Planted at the Radio Tower!.", Map.Radio_Tower_Planted );
	OnTrigger( "Planted at Radio Tower!.", Map.Radio_Tower_Planted );	//for nitmod
	OnTrigger( "Defused at the Radio Tower!.", Map.Radio_Tower_Defused );
	OnTrigger( "Defused at Radio Tower!.", Map.Radio_Tower_Defused );	//for nitmod
	OnTrigger( "The Radio Tower has been destroyed!", Map.Radio_Tower_Destroyed );

	OnTrigger( "Planted at the Radar Room.", Map.Radar_Room_Planted );
	OnTrigger( "Planted at Radar Room.", Map.Radar_Room_Planted );	//for nitmod
	OnTrigger( "Defused at the Radar Room.", Map.Radar_Room_Defused );
	OnTrigger( "Defused at Radar Room.", Map.Radar_Room_Defused );	//for nitmod
	OnTrigger( "The Radar room has been destroyed!", Map.Radar_Room_Destroyed );

	OnTrigger( "Planted at the Radio Equipment.", Map.Radio_Equipment_Planted );
	OnTrigger( "Planted at Radio Equipment.", Map.Radio_Equipment_Planted );	//for nitmod
	OnTrigger( "Defused at the Radio Equipment.", Map.Radio_Equipment_Defused );
	OnTrigger( "Defused at Radio Equipment.", Map.Radio_Equipment_Defused );	//for nitmod
	OnTrigger( "The Radio Room has been destroyed!", Map.Radio_Equipment_Destroyed );

	OnTrigger( "Planted at the garage door switch.", Map.garage_door_switch_Planted );
	OnTrigger( "Planted at garage door switch.", Map.garage_door_switch_Planted );	//for nitmod
	OnTrigger( "Defused at the garage door switch.", Map.garage_door_switch_Defused );
	OnTrigger( "Defused at garage door switch.", Map.garage_door_switch_Defused );	//for nitmod
	OnTrigger( "The Allies have sabotaged the door control!", Map.garage_door_switch_Destroyed );

	OnTrigger( "Axis have reclaimed  the forward deployment zone!", Map.compound_flag_Axis_Captured );
	OnTrigger( "Allies captured the forward deployment zone!", Map.compound_flag_Allies_Captured );

	OnTrigger( "garage_lever_start", Map.garage_lever );

	OnTrigger( "gunright_mover_goto", Map.right_gun );
	OnTrigger( "gunleft_mover_goto", Map.left_gun );

	OnTrigger( "thirty second warning.", Map.Thirty_second );

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

	Util.EnableGoal( "HEALTHCAB_t1023" );
	Util.EnableGoal( "HEALTHCAB_t52" );
	Util.EnableGoal( "AMMOCAB_t1024" );
	Util.EnableGoal( "AMMOCAB_t51" );

	SetAvailableMapGoals( TEAM.AXIS, true, {
		"MOUNTMG42_complex_roof",
		"MOUNTMG42_left_tower",
		"MOUNTMG42_right_tower",
		"REPAIRMG42_complex_roof",
		"REPAIRMG42_left_tower",
		"REPAIRMG42_right_tower",
		"DEFEND_SewerEntrance",
		"DEFEND_CaveLadder_.*",
		".*_RadioTowerRope_.*",
		"DEFEND_LeftTower_.*",
		"DEFEND_RightTower_.*",
		"MOBILEMG42_RadioTower_11",
	});

	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"CHECKPOINT_compound_flag",
		"SWITCH_left_gun",
		"SWITCH_right_gun",
		"SWITCH_Garage_door",
		"PLANT_.*",
		"ATTACK_RadioEquipment_.*",
		"ATTACK_RadioTower_.*",
		"ATTACK_RadarRoom_.*",
	});

	Util.LimitToClass("DEFEND_RadioTowerRope_2", TEAM.AXIS, CLASS.FIELDOPS, CLASS.ENGINEER, CLASS.COVERTOPS);
	Util.LimitToClass("DEFEND_RadioTowerRope_3", TEAM.AXIS, CLASS.ENGINEER, CLASS.FIELDOPS, CLASS.MEDIC);

	SetGoalRole( { "DEFEND_RadioEquipment_1" }, ROLE.DEFENDER1 );
	SetGoalRole( { "DEFEND_RadarRoom_1" }, ROLE.DEFENDER2 );
	SetGoalRole( { "DEFEND_RadioTower_1" }, ROLE.DEFENDER3 );

	SetGoalPriority( "MOUNTMG42_complex_roof", 0.45, TEAM.AXIS, 0 );
	SetGoalPriority( "MOUNTMG42_left_tower", 0.506, TEAM.AXIS, 0 );
	SetGoalPriority( "MOUNTMG42_right_tower", 0.506, TEAM.AXIS, 0 );
	SetGoalPriority( "REPAIRMG42_.*", 0.506, TEAM.AXIS, CLASS.ENGINEER );

	SetGoalPriority( "DEFEND_SewerEntrance", 0.52, TEAM.AXIS, 0 );

	SetGoalPriority( "DEFEND_CaveLadder_.*", 0.505, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_CaveLadder_1", 0.51, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_CaveLadder_2", 0.51, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_CaveLadder_3", 0.52, TEAM.AXIS, 0 );

	SetGoalPriority( "DEFEND_GarageDoor_.*", 0.505, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_GarageDoor_3", 0.52, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_GarageDoor_4", 0.52, TEAM.AXIS, 0 );

	SetGoalPriority( "DEFEND_RadioTowerRope_.*", 0.505, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_RadioTowerRope_3", 0.51, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_RadioTowerRope_2", 0.52, TEAM.AXIS, 0 );

	SetGoalPriority( "DEFEND_SewerTunnel_.*", 0.51, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_SewerTunnel_4", 0.52, TEAM.AXIS, 0 );

	SetGoalPriority( "DEFEND_LeftTower_1", 0.5, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_RightTower_1", 0.5, TEAM.AXIS, 0 );

	SetGoalPriority( "DEFEND_Flag_Axis_2", 0.51, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Flag_Axis_1", 0.525, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Flag_Axis_.*", 0.5, TEAM.AXIS, CLASS.ENGINEER );

	SetGoalPriority( "CHECKPOINT_.*", 0.5, TEAM.AXIS, CLASS.ENGINEER );

	SetGoalPriority( "DEFEND_GarageSwitch_2", 0.504, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_GarageSwitch_1", 0.52, TEAM.AXIS, 0 );

	SetGoalPriority( "DEFEND_RadioEquipment_.*", 0.505, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_RadioEquipment_2", 0.51, TEAM.AXIS, 0 );
	//SetGoalPriority( "DEFEND_RadioEquipment_1", 0.53, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_RadioEquipment_1", 0.72, TEAM.AXIS, 0 );	//more then checkpoint

	SetGoalPriority( "DEFEND_RadarRoom_.*", 0.505, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_RadarRoom_2", 0.51, TEAM.AXIS, 0 );
	//SetGoalPriority( "DEFEND_RadarRoom_1", 0.53, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_RadarRoom_1", 0.72, TEAM.AXIS, 0 );	//more then checkpoint
	SetGoalPriority( "DEFEND_RadarRoom_1", 0.72, TEAM.AXIS, CLASS.ENGINEER );	//more then checkpoint

	SetGoalPriority( "DEFEND_RadioTower_.*", 0.505, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_RadioTower_2", 0.51, TEAM.AXIS, 0 );
	//SetGoalPriority( "DEFEND_RadioTower_1", 0.53, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_RadioTower_1", 0.72, TEAM.AXIS, 0 );	//more then checkpoint
	SetGoalPriority( "DEFEND_RadioTower_1", 0.72, TEAM.AXIS, CLASS.ENGINEER );	//more then checkpoint

	SetGoalPriority( "MOBILEMG42_RadarRoom_11", 0.95, TEAM.AXIS, CLASS.SOLDIER );
	SetGoalPriority( "MOBILEMG42_RadioEquipment_11", 0.95, TEAM.AXIS, CLASS.SOLDIER );
	SetGoalPriority( "MOBILEMG42_RadioTower_11", 0.95, TEAM.AXIS, CLASS.SOLDIER );
	SetGoalPriority( "MOBILEMG42_GarageDoor", 1.00, TEAM.AXIS, CLASS.SOLDIER );	//default priority

	SetGoalPriority( "ATTACK_RadioEquipment_1", 0.52, TEAM.ALLIES, 0 );
	SetGoalPriority( "ATTACK_RadioEquipment_2", 0.51, TEAM.ALLIES, 0 );
	SetGoalPriority( "ATTACK_RadioTower_1", 0.52, TEAM.ALLIES, 0 );
	SetGoalPriority( "ATTACK_RadioTower_2", 0.51, TEAM.ALLIES, 0 );
	SetGoalPriority( "ATTACK_RadarRoom_1", 0.52, TEAM.ALLIES, 0 );
	SetGoalPriority( "ATTACK_RadarRoom_2", 0.51, TEAM.ALLIES, 0 );

	Util.AddUseWp( "PLANT_garage_door_switch", "Plant_switch" );

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


	DCM1 = OnTriggerRegion(AABB( -2074.532,2887.097,1854.159,-1811.420,3322.155,2099.173 ), RegionTrigger.DisableCombatMovement);	//trigger - right side of the hill above the entrance to the underwater tunnel (near Radar room)
	NP1 = OnTriggerRegion(AABB( -2074.532,2887.097,1854.159,-1811.420,3322.155,2099.173 ), RegionTrigger.DisableBotPush);
	DCM2 = OnTriggerRegion(AABB( -2264.519,2369.859,737.125,-1745.288,2752.875,947.125 ), RegionTrigger.DisableCombatMovement);	//trigger - stairs in cave
	NP2 = OnTriggerRegion(AABB( -2264.519,2369.859,737.125,-1745.288,2752.875,947.125 ), RegionTrigger.DisableBotPush);
	DCM3 = OnTriggerRegion(AABB( 2397.237,968.041,873.125,3226.469,1814.041,1039.920 ), RegionTrigger.DisableCombatMovement);	//trigger - wooden bridge outside of complex
	NP3 = OnTriggerRegion(AABB( 2397.237,968.041,873.125,3226.469,1814.041,1039.920 ), RegionTrigger.DisableBotPush);
	NP4 = OnTriggerRegion(AABB( -772.061,3096.857,729.125,-527.478,3169.115,826.817 ), RegionTrigger.DisableBotPush);		//trigger - ladder in sewer entrance
	DCM5 = OnTriggerRegion(AABB( -712.875,2471.441,961.125,-558.680,2761.122,1208.764 ), RegionTrigger.DisableCombatMovement);	//trigger - wooden boxes near sewer entrance ladder exit
	NP5 = OnTriggerRegion(AABB( -712.875,2471.441,961.125,-558.680,2761.122,1208.764 ), RegionTrigger.DisableBotPush);
	DCM6 = OnTriggerRegion(AABB( 691.727,1831.537,1719.949,1306.122,2408.523,2007.337 ), RegionTrigger.DisableCombatMovement);	//trigger - left tower - roof
	DCM7 = OnTriggerRegion(AABB( -1557.750,1881.028,1715.423,-527.707,2643.284,2063.006 ), RegionTrigger.DisableCombatMovement);	//trigger - right tower - roof
	DCM8 = OnTriggerRegion(AABB( 1044.595,2463.125,1561.225,1142.511,2602.749,1635.225 ), RegionTrigger.DisableCombatMovement);	//trigger - the top of long ladder in bunker
	NP8 = OnTriggerRegion(AABB( 1044.595,2463.125,1561.225,1142.511,2602.749,1635.225 ), RegionTrigger.DisableBotPush);
	DCM9 = OnTriggerRegion(AABB( -712.874,3031.275,961.125,-565.368,3118.585,1035.125 ), RegionTrigger.DisableCombatMovement);	//trigger - entrance into sewer in bunker
	NP9 = OnTriggerRegion(AABB( -712.874,3031.275,961.125,-565.368,3118.585,1035.125 ), RegionTrigger.DisableBotPush);
	DCM10 = OnTriggerRegion(AABB( 863.125,2010.557,1561.125,975.437,2169.312,1709.290 ), RegionTrigger.DisableCombatMovement);	//trigger - ladder in left tower
	NP10 = OnTriggerRegion(AABB( 863.125,2010.557,1561.125,975.437,2169.312,1709.290 ), RegionTrigger.DisableBotPush);
	DCM11 = OnTriggerRegion(AABB( -1440.609,2048.550,1561.125,-1314.354,2185.060,1702.130 ), RegionTrigger.DisableCombatMovement);	//trigger - ladder in right tower
	NP11 = OnTriggerRegion(AABB( -1440.609,2048.550,1561.125,-1314.354,2185.060,1702.130 ), RegionTrigger.DisableBotPush);
	DCM12 = OnTriggerRegion(AABB( -552.740,2334.604,1869.028,1926.370,2758.756,2122.449 ), RegionTrigger.DisableCombatMovement);	//trigger - hillside above the towers
	DCM13 = OnTriggerRegion(AABB( -137.803,2831.127,961.125,440.875,3200.875,2198.952 ), RegionTrigger.DisableCombatMovement);	//trigger - steel staircase inside the bunker
	NP13 = OnTriggerRegion(AABB( -137.803,2831.127,961.125,440.875,3200.875,2198.952 ), RegionTrigger.DisableBotPush);
	DCM14 = OnTriggerRegion(AABB( -232.111,2960.299,961.125,-143.126,3128.142,1134.645 ), RegionTrigger.DisableCombatMovement);	//trigger - wooden boxes near garage door for goal MOBILEMG42_GarageDoor
	NP14 = OnTriggerRegion(AABB( -232.111,2960.299,961.125,-143.126,3128.142,1134.645 ), RegionTrigger.DisableBotPush);

	BD1 = OnTriggerRegion(AABB(-1625.154,2343.125,934.801,-1343.730,2560.875,1087.125), RegionTrigger.BreakableDistance);	//wooden barrier - exit from cave
	BD2 = OnTriggerRegion(AABB(862.814,2763.584,961.125,993.664,2905.700,1072.125), RegionTrigger.BreakableDistance);	//table in radio equipment room

	AlliesInComplex1 = OnTriggerRegion(AABB(-2054.869,1813.380,1561.125,1798.219,3431.255,3068.794), Map.Allies_in_complex);	//1st floor + outside
	AlliesInComplex2 = OnTriggerRegion(AABB(-1487.585,2271.125,961.125,1256.875,3200.875,1622.218), Map.Allies_in_complex);		//inside without switch room & without sewer
	AlliesInComplex3 = OnTriggerRegion(AABB(-712.875,1823.125,961.125,-415.125,2270.225,1129.853), Map.Allies_in_complex);		//garage switch room

	MapRoutes =
	{
		DEFEND_RadioTowerRope_1 =
		{
			ROUTE_Axis_RightSpawn =
			{
				ROUTE_Left_Tower_Ladder =
				{

				},
				ROUTE_Metal_Stairs =
				{
					Weight = 2,
				},
			},
			ROUTE_Axis_RightSpawn_1 =
			{
				ROUTE_Left_Tower_Ladder =
				{

				},
				ROUTE_Metal_Stairs =
				{
					Weight = 2,
				},
			},
			ROUTE_Axis_LeftSpawn =
			{
				ROUTE_Left_Tower_Ladder =
				{

				},
				ROUTE_Metal_Stairs =
				{
					Weight = 2,
				},
			},
			ROUTE_Axis_LeftSpawn_1 =
			{
				ROUTE_Left_Tower_Ladder =
				{

				},
				ROUTE_Metal_Stairs =
				{
					Weight = 2,
				},
			},
		},
		DEFEND_RadarRoom_1 =
		{
			ROUTE_Axis_RightSpawn =
			{
				ROUTE_Right_Tower_Ladder =
				{

				},
				ROUTE_Metal_Stairs =
				{
					Weight = 2,
				},
				ROUTE_Left_Tower_Ladder =
				{
					Weight = 2,
				},
			},
			ROUTE_Axis_RightSpawn_1 =
			{
				ROUTE_Right_Tower_Ladder =
				{

				},
				ROUTE_Metal_Stairs =
				{
					Weight = 2,
				},
				ROUTE_Left_Tower_Ladder =
				{
					Weight = 2,
				},
			},
			ROUTE_Axis_LeftSpawn =
			{
				ROUTE_Right_Tower_Ladder =
				{

				},
				ROUTE_Metal_Stairs =
				{
					Weight = 2,
				},
				ROUTE_Left_Tower_Ladder =
				{
					Weight = 2,
				},
			},
			ROUTE_Axis_LeftSpawn_1 =
			{
				ROUTE_Right_Tower_Ladder =
				{

				},
				ROUTE_Metal_Stairs =
				{
					Weight = 2,
				},
				ROUTE_Left_Tower_Ladder =
				{
					Weight = 2,
				},
			},
		},
		DEFEND_RadioEquipment_1 =
		{
			ROUTE_Axis_RightSpawn =
			{
				ROUTE_Metal_Stairs_Cabinets =
				{

				},
				ROUTE_Long_Ladder =
				{

				},
			},
			ROUTE_Axis_RightSpawn_1 =
			{
				ROUTE_Metal_Stairs_Cabinets =
				{

				},
				ROUTE_Long_Ladder =
				{

				},
			},
			ROUTE_Axis_LeftSpawn =
			{
				ROUTE_Metal_Stairs_Cabinets =
				{

				},
				ROUTE_Long_Ladder =
				{

				},
			},
			ROUTE_Axis_LeftSpawn_1 =
			{
				ROUTE_Metal_Stairs_Cabinets =
				{

				},
				ROUTE_Long_Ladder =
				{

				},
			},
		},
	};

	//copy some routes
	MapRoutes["DEFEND_RadioTower_.*"] = MapRoutes.DEFEND_RadarRoom_1;
	MapRoutes["DEFEND_RadioTowerRope_.*"] = MapRoutes.DEFEND_RadioTowerRope_1;
	MapRoutes.MOBILEMG42_RadarRoom_11 = MapRoutes.DEFEND_RadioTowerRope_1;
	MapRoutes.MOBILEMG42_RadioTower_11 = MapRoutes.DEFEND_RadioTowerRope_1;
	MapRoutes["DEFEND_RadarRoom_.*"] = MapRoutes.DEFEND_RadarRoom_1;
	MapRoutes["DEFEND_RadioEquipment_.*"] = MapRoutes.DEFEND_RadioEquipment_1;

	Util.Routes(MapRoutes);

	Util.MapDebugPrint( "^3Omni-bot map script by ^1n^2a^4t^8i^3v^5e12 ^3for " + GetMapName() + " executed." );
};

global OnBotJoin = function( bot )
{

	Util.RandomBotSpawn( bot, TEAM.AXIS, 4 );

	foreach ( id and bot in BotTable )
	{
		if ( bot.GetTeam()  == TEAM.AXIS )
		{
			WeaponTable.SetWeaponAvailability( CLASS.SOLDIER, WEAPON.MOBILE_MG42, true );
		}
	}
};
