//===================================================================================================================
//
//	uje_mall.gm 
//
//	Who       	            When		                                What
//---------------------------------------------------------------------------------------------------------------------------
//  ^1[UJE]^3Niek	        10 January 2015	      Initial Script
//  ^1[UJE]^3Captain      06 August 2017        Cleaning script,Add Offset Fix Build/Plant,Add Route,Change Spawn and More..
//  ^1[UJE]^3Captain      19 May 2018           Completely reworked for UJE Mall last Beta ,Add Rôles,Many Routes and More..
// 
//===========================================================================================================================
//

global Map =
{
	Debug = 0, // please set to zero before distributing your script
	
	AxisCP = false,
	AlliedCP = false,
	TankAtB1 = false,
	TankAtB2 = false,
	RadioBuilt = false,
	LibraryDoorDestroyed = false,
	DocTaken = false,
	DocSecured = false,
     	Roles =
	{
		AXIS =
		{
		      AllBots = true, // each bot is considered for a role	
			INFILTRATOR = // Plant CP
			{
				numbots = 1,
				crucialClass = CLASS.COVERTOPS,				
			},
		},	
		ALLIES =
		{
			AllBots = true, // default: every other bot
			INFILTRATOR = // Plant CP
			{
				numbots = 1,
				crucialClass = CLASS.COVERTOPS,
			},
		},
	},
      SetSpawnAxisCP = function(bot)
	{
		if (bot.GetTeam() == TEAM.AXIS) {
			if (Map.AxisCP) {
				bot.ChangeSpawnPoint(4);
			} else {
				bot.ChangeSpawnPoint(7);
		      }
		}
	},
	
     SetSpawnAlliedCP = function(bot)
	{
		if (bot.GetTeam() == TEAM.ALLIES) {
			if (Map.AlliedCP && !Map.LibraryDoorDestroyed) {
			bot.ChangeSpawnPoint(3);
			} else {
			      bot.ChangeSpawnPoint(1);
			}
		}
	},
	
	SetSpawn = function()
	{
		foreach(bot in BotTable)
		{
			Map.SetSpawnAxisCP(bot);
			Map.SetSpawnAlliedCP(bot);
		}
	},
	
	Allied_Command_Post_Built = function( trigger )
	{
	Map.AlliedCP = true;
	Map.SetSpawn();	
	SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Command_Post" );
	SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Command_Post" );
	
	SetAvailableMapGoals( TEAM.ALLIES, false, {"PLANT_Command_Post","BUILD_Command_Post"} );
	
		Util.MapDebugPrint( "Allied_Command_Post_Built" );
	},
	
	Allied_Command_Post_Destroyed = function( trigger )
	{
	Map.AlliedCP = false;
	Map.SetSpawn();
	SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Command_Post" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Command_Post" );
	
	SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Command_Post" );
	SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Command_Post" );
	
		Util.MapDebugPrint( "Allied_Command_Post_Destroyed" );
	},
	
      Axis_Command_Post_Built = function( trigger )
	{
	Map.AxisCP = true;
	Map.SetSpawn();
	SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Command_Post" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Command_Post" );
	
	SetAvailableMapGoals( TEAM.AXIS, false, {"BUILD_Command_Post","PLANT_Command_Post"} );
	
		Util.MapDebugPrint( "Axis_Command_Post_Built" );
	},
	
	Axis_Command_Post_Destroyed = function( trigger )
	{
	Map.AxisCP = false;
	Map.SetSpawn();
	SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Command_Post" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Command_Post" );
	
	SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Command_Post" );
	SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Command_Post" );
	
		Util.MapDebugPrint( "Axis_Command_Post_Destroyed" );
	},
	
	CHECKPOINT_Bunker_Flag_Axis = function( trigger )
	{
	SetAvailableMapGoals( TEAM.AXIS, false, "CHECKPOINT_bunker_flag" );
	if ( !Map.Tank_Past_Barrier_1 )	
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "CHECKPOINT_bunker_flag" );
      }
		Util.MapDebugPrint( "CHECKPOINT_Bunker_Flag_Axis" );
	},
	
	CHECKPOINT_Bunker_Flag_Allied = function( trigger )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "CHECKPOINT_bunker_flag" );

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

		Util.MapDebugPrint( "CHECKPOINT_Bunker_Flag_Allied" );
	},
	
	Tank_Built = function( trigger )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "MOUNT_Tank" );
	SetAvailableMapGoals( TEAM.AXIS, false, "Build_tank" );
	
		Util.MapDebugPrint( "Tank_Built" );
	},

	Tank_Destroyed = function( trigger )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Tank" );	
	SetAvailableMapGoals( TEAM.AXIS, false, "MOUNT_Tank" );
	
	SetAvailableMapGoals( TEAM.ALLIES, false, "MOUNT_Tank" );
	
		Util.MapDebugPrint( "Tank_Destroyed" );
	},

	Tank_Barrier_1_Built = function( trigger )
	{
	if ( Map.TankAtB1 )	
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Tank_barrier_1" );
	}
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tank_barrier_1" );
	
		Util.MapDebugPrint( "Tank_Barrier_1_Built" );
	},
	
	Tank_Barrier_1_Planted = function( trigger )
	{
		Util.MapDebugPrint( "Tank_Barrier_1_Planted" );
	},
	
	Tank_Barrier_1_Destroyed = function( trigger )
	{
      SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Tank_barrier_1" );
	
      SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Tank_barrier_1" );
	
		Util.MapDebugPrint( "Tank_Barrier_1_Destroyed" );
	},
	
	Tank_Past_Barrier_1 = function( trigger )
	{
	Map.TankAtB1 = false;
	SetAvailableMapGoals( TEAM.AXIS, true, {"ATTACK_Market.*","BUILD_Axis_Generator"} );
	SetAvailableMapGoals( TEAM.ALLIES, false, {"BUILD_Tank_Barrier_1","CHECKPOINT_bunker_flag"} );

		Util.MapDebugPrint( "Tank_Past_Barrier_1" );
	},
	
	Tank_Barrier_2_Built = function( trigger )
	{
	if ( Map.TankAtB2 )
	{
      SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Tank_Barrier_2" );
	}
      SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tank_barrier_2" );
	
		Util.MapDebugPrint( "Tank_Barrier_2_Built" );
	},
	
	Tank_Barrier_2_Planted = function( trigger )
	{
		Util.MapDebugPrint( "Tank_Barrier_2_Planted" );
	},
	
	Tank_Barrier_2_Destroyed = function( trigger )
	{
      SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Tank_barrier_2" );
		   
		Util.MapDebugPrint( "Tank_Barrier_2_Destroyed" );
	},

	Tank_Past_Barrier_2 = function( trigger )
	{
	Map.TankAtB2 = false;
      SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tank_Barrier_2" );

		Util.MapDebugPrint( "Tank_Past_Barrier_2" );
	},
	
	Axis_Generator_Build = function( trigger )
	{
	if ( !Map.LibraryDoorDestroyed )
	{
      SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Axis_Generator" );
	}
	SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Axis_Generator" );
	
		Util.DisableGoal( "ROUTE_Hobby_Road" );
		Util.MapDebugPrint( "Axis_Generator_Build" );
	},
	
	Axis_Generator_Planted = function( trigger )
	{
		Util.MapDebugPrint( "Axis_Generator_Planted" );
	},
	
	Axis_Generator_Destroyed = function( trigger )
	{
      SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Axis_Generator" );
	
	SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Axis_Generator" );
	
	      Util.EnableGoal( "ROUTE_Hobby_Road" );
		Util.MapDebugPrint( "Axis_Generator_Destroyed" );
	},
	
	Library_Door_Destroyed = function( trigger )
	{ 
	Map.SetSpawn();
	Map.LibraryDoorDestroyed = true;
	SetAvailableMapGoals( TEAM.AXIS, true, {"PLANT_Safe","ATTACK_Library.*","PLANT_bank_side_door"} );
	SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_Market.*" );

	SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Library.*" );
	SetAvailableMapGoals( TEAM.ALLIES, false, {"DEFEND_Market.*","PLANT_Axis_Generator"} );
 
		Util.MapDebugPrint( "Library_Door_Destroyed" );
	},
	
	Back_Door_Built = function( trigger )
	{ 
	if ( Map.Secret_Documents_Secured )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_bank_side_door" );
      }
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_bank_side_door" );
	
		Util.MapDebugPrint( "Back_Door_Build" );
	},
	
	Back_Door_Destroyed = function( trigger )
	{ 
	if ( Map.Secret_Documents_Secured )
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_bank_side_door" );
      }
	SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_bank_side_door" );;
		Util.MapDebugPrint( "Back_Door_Destroyed" );
	},
	
	Safe_Destroyed = function( trigger )
	{
	SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Safe" );
	SetAvailableMapGoals( TEAM.AXIS, true, {"FLAG_Secret_Documents","BUILD_Field_Radio_1"} );
        
		Util.MapDebugPrint( "Safe_Destroyed" );
	},

	Field_Radio_Built = function( trigger )
	{
	Map.RadioBuilt = true;
	if ( Map.DocTaken )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "CAPPOINT_Radio" );
	SetAvailableMapGoals( TEAM.AXIS, false, "CAPPOINT_Fake" );
	}
      SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Field_Radio_1" );
	
      SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Field_Radio" );
		
		Util.MapDebugPrint( "Field_Radio_Built" );
	},
	
	Field_Radio_Planted = function( trigger )
	{
		Util.MapDebugPrint( "Field_Radio_Planted" );
	},
	
	Field_Radio_Destroyed = function( trigger )
	{
	Map.RadioBuilt = false;
	if ( Map.DocTaken )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "CAPPOINT_Fake" );
	SetAvailableMapGoals( TEAM.AXIS, false, "CAPPOINT_Radio" );
	}
	SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Field_Radio_1" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Field_Radio" );
		
		Util.MapDebugPrint( "Field_Radio_Destroyed" );
	},

	Secret_Documents_Taken = function( trigger )
	{
	Map.DocTaken = true;
	if ( Map.RadioBuilt )
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "CAPPOINT_Radio" );
      }
	else
	{
	SetAvailableMapGoals( TEAM.AXIS, true, "CAPPOINT_Fake" );
	}
	SetAvailableMapGoals( TEAM.AXIS, false, "FLAG_Secret_Documents" ); 
	Util.MapDebugPrint( "Secret_Documents_Taken" );
	sleep(3);
	SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_Cappoint.*" );
	SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_Library.*" );
	
	SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Cappoint.*" );	
	SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Library.*" );
	},

	Secret_Documents_Returned = function( trigger )
	{
	Map.DocTaken = false;
	SetAvailableMapGoals( TEAM.AXIS, true, {"ATTACK_Library.*","FLAG_Secret_Documents"} );
      SetAvailableMapGoals( TEAM.AXIS, false, {"ATTACK_Cappoint.*","CAPPOINT_Radio","CAPPOINT_Fake"} );

	SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Library.*" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Cappoint.*" );
		
		Util.MapDebugPrint( "Secret_Documents_Returned" );
	},

	Secret_Documents_Secured = function( trigger )
	{
	Map.DocSecured = true;
	SetAvailableMapGoals( TEAM.AXIS, false, "CAPPOINT.*" );
	
		Util.MapDebugPrint( "Secret_Documents_Secured" );
	},
	// Tank RegionTrigger
   	Tank_at_second_corner =
      {
 	Name="Tank_at_second_corner",
 	TriggerOnClass = { CLASS.VEHICLE_HVY },
 	OnEnter = function(ent)
      {
            Util.MapDebugPrint(GetEntName(ent) + "_at_second_corner)" );	
 	},
 	OnExit = function(ent)
 	{
	SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_First.*" );
	SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Second.*" );
	
	SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_First.*" );
	SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_Second.*" );	
	
 	      Util.MapDebugPrint(GetEntName(ent) + "_pass_second_corner)" );
 	}, 
   },
      Tank_at_first_barrier =
      {
 	Name="Tank_at_first_barrier",
 	TriggerOnClass = { CLASS.VEHICLE_HVY },
 	OnEnter = function(ent)
 	{
	Map.TankAtB1 = true;
	if ( Map.Tank_Barrier_1_Built )
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "MOUNT_Tank" );
	
	SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Tank_Barrier_1" );
	}
 		Util.MapDebugPrint(GetEntName(ent) + "_at_first_barrier" );
 	},
 	OnExit = function(ent)
 	{
	Map.TankAtB1 = false;
      SetAvailableMapGoals( TEAM.ALLIES, false, "MOUNT_Tank" );
		
 		Util.MapDebugPrint(GetEntName(ent) + "_pass_first_barrier" );
 	},
   }, 
 
   	Tank_entered_market =
      {
 	Name="Tank_entered_market",
 	TriggerOnClass = { CLASS.VEHICLE_HVY },
 	OnEnter = function(ent)
 	{
	SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_Market.*" );
	SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_Second.*" );
	
	SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Market.*" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Second.*" );
	
 	      Util.MapDebugPrint(GetEntName(ent) + "_at_market" );
 	},
 	OnExit = function(ent)
 	{
 		Util.MapDebugPrint(GetEntName(ent) + "_leave_market" );
 	},
   },
      Tank_at_second_barrier =
      {
 	Name="Tank_at_second_barrier",
 	TriggerOnClass = { CLASS.VEHICLE_HVY },
 	OnEnter = function(ent)
 	{
	Map.TankAtB2 = true;
	if ( Map.Tank_Built )
	{
	SetAvailableMapGoals( TEAM.ALLIES, true, "MOUNT_Tank" );
	}
	SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Tank_Barrier_2" );

 		Util.MapDebugPrint(GetEntName(ent) + "_at_second_barrier" );
 	},
 	OnExit = function(ent)
 	{

 		Util.MapDebugPrint(GetEntName(ent) + "_pass_second_barrier" );
 	},
   },
};

global OnMapLoad = function()
{
	// Register callback functions
	OnTrigger( "^5Allied Command Post constructed. Charge speed increased! ^3CP Spawn a", Map.Allied_Command_Post_Built );
	OnTrigger( "^1The Axis team has destroyed the Allied Command Post!", Map.Allied_Command_Post_Destroyed );
	OnTrigger( "^5Axis Command Post constructed. Charge speed increased! ^3CP Spawn act", Map.Axis_Command_Post_Built );
	OnTrigger( "^1The Allied team has destroyed the Axis Command Post!", Map.Axis_Command_Post_Destroyed );
	
	OnTrigger( "^3The Allies captured the rendevous point!", Map.CHECKPOINT_Bunker_Flag_Allied );
	OnTrigger( "^3The Axis captured the rendevous point!", Map.CHECKPOINT_Bunker_Flag_Axis );
	
	OnTrigger( "^5The Tank has been repaired", Map.Tank_Built );
	OnTrigger( "^1The Tank has been damaged", Map.Tank_Destroyed );
	
	OnTrigger( "^5Tank Barrier #1 has been constructed.", Map.Tank_Barrier_1_Built );
	OnTrigger( "Planted at Tank Barrier #1.", Map.Tank_Barrier_1_Planted );
	OnTrigger( "^1Tank Barrier #1 has been destroyed.", Map.Tank_Barrier_1_Destroyed );
	OnTrigger( "^3The Tank is past the first barrier.", Map.Tank_Past_Barrier_1 );
	
	OnTrigger( "^5Tank Barrier #2 has been constructed.", Map.Tank_Barrier_2_Built );
	OnTrigger( "^1Tank Barrier #2 has been destroyed.", Map.Tank_Barrier_2_Destroyed );
	OnTrigger( "Planted at Tank Barrier #2.", Map.Tank_Barrier_2_Planted );
	OnTrigger( "^3The Tank is past the second barrier.", Map.Tank_Past_Barrier_2 );
	
	OnTrigger( "^5Axis have build the Generator!", Map.Axis_Generator_Build );
	OnTrigger( "Planted at Axis Generator.", Map.Axis_Generator_Planted );
	OnTrigger( "^1Allied team has destroyed the Generator!", Map.Axis_Generator_Destroyed );

	OnTrigger( "^1The Axis have destroyed the Library Door!", Map.Library_Door_Destroyed );
	OnTrigger( "^1The Axis have destroyed the Safe!", Map.Safe_Destroyed );
	OnTrigger( "^5The Axis Field Radio has been constructed.", Map.Field_Radio_Built );
	OnTrigger( "Planted at the Field Radio.", Map.Field_Radio_Planted);
	OnTrigger( "^1Allies have destroyed the Axis Field Radio.", Map.Field_Radio_Destroyed );
	OnTrigger( "Axis have stolen The Secret Documents!", Map.Secret_Documents_Taken );
	OnTrigger( "Flag returned Secret Documents!", Map.Secret_Documents_Returned );
	OnTrigger( "^1The Axis delivered the documents!", Map.Secret_Documents_Secured );
	
	OnTrigger( "^5The side entrance barrier has been constructed!", Map.Back_Door_Built );
	OnTrigger( "^1The side entrance barrier has been destroyed!", Map.Back_Door_Destroyed );
	
      //Tank TriggerRegion
      Tank_At_Corner2 = OnTriggerRegion(AABB(-2450.872,-1654.039,-222.874,-2180.837,-1600.812,-140.870), Map.Tank_at_second_corner);
	Tank_At_Barrier_1 = OnTriggerRegion(AABB(-1149.518,-3584.128,-222.875,-1078.824,-3136.052,-148.875), Map.Tank_at_first_barrier);
	Tank_Entered_Market = OnTriggerRegion(AABB(1143.930,-3494.782,-222.874,1247.533,-3249.583,-148.857), Map.Tank_entered_market);
	Tank_At_Barrier_2 = OnTriggerRegion(AABB(1498.899,-1909.271,-214.875,1773.127,-1854.929,-140.875), Map.Tank_at_second_barrier);

	// all but routes
	Util.DisableGoal( ".*", true ); 
	
      //Axis goals activation
	SetAvailableMapGoals( TEAM.AXIS, true, {
		"BUILD_Tank",
		"CHECKPOINT_bunker_flag",
		".*CAB.*",
		"ATTACK_First.*",
	});
      //Allies goals activation
	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"BUILD_Command_Post",
		"BUILD_Tank_Barrier.*",
		"CHECKPOINT_bunker_flag",
		".*CAB.*",
		"DEFEND_First.*",
	});
	
	// Max users per goal
	Util.SetMaxUsers( 1, "DEFEND.*" );
	Util.SetMaxUsers( 1, "ATTACK.*" );
	Util.SetMaxUsers( 1, "CHECKPOINT_bunker_flag" );
	Util.SetMaxUsers( 1, "BUILD_Command_Post" );
	Util.SetMaxUsers( 1, "MOUNT_Tank" );
	Util.SetMaxUsers( 2, "FLAG.*" );
	Util.SetMaxUsers( 1, "BUILD.*" );
	Util.SetMaxUsers( 1, "PLANT.*" );

	// Camp times
	//SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=30, MaxCampTime=90} );
	//SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=60, MaxCampTime=180} );
	SetMapGoalProperties( "ATTACK.*", {MinCampTime=60, MaxCampTime=90} );
	SetMapGoalProperties( "DEFEND.*", {MinCampTime=60, MaxCampTime=90} );
	
	//SetGoalPriority
	SetGoalPriority( "BUILD_Tank_Barrier.*", 0.82, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_bank_side_door", 0.96, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Axis_Generator", 0.82, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Command_Post",   0.96,  TEAM.ALLIES, CLASS.COVERTOPS );
	SetGoalPriority( "BUILD_Field_Radio_1",  0.96, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Command_Post",   0.96,  TEAM.AXIS, CLASS.COVERTOPS );
	SetGoalPriority( "PLANT_Tank_Barrier.*", 0.92, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_bank_side_door", 0.96, TEAM.AXIS, CLASS.ENGINEER );
      SetGoalPriority( "PLANT_Safe", 0.96, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_Tank", 0.92, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "CHECKPOINT_bunker_flag", 0.90 );
     
     //Offset Plant/Build Fix
     Util.SetGoalOffset( 50, 0, 0, "PLANT_Safe" );
     Util.SetGoalOffset( 50, 0, 0, "PLANT_bank_side_door" );
     Util.SetGoalOffset( 150, 50, 0, "PLANT_Field_Radio" );
     Util.SetGoalOffset( 0, -40, 0, "PLANT_Command_Post" );
     Util.MapDebugPrint( "Omni-bot map script for " + GetMapName() + " executed." );
};

global OnBotJoin = function( bot )
{
	// Uncomment for shootable breakables
      bot.TargetBreakableDist = 120.0;
      Map.SetSpawnAxisCP(bot);
      Map.SetSpawnAlliedCP(bot);
	// Only set MaxViewDistance on maps with limited sight (e.g. fog)
	bot.MaxViewDistance = 2400;
};

global InitializeRoutes = function()
{
	MapRoutes =
	{
		CHECKPOINT_bunker_flag = 
		{
			ROUTE_First_Axis_Spawn  = 
			{
				ROUTE_Back_Rendez_Vous  = {Weight = 2},
				ROUTE_Trucking_Road  = {Weight = 3},
				},
		},
		BUILD_Command_Post = 
		{
			ROUTE_First_Allied_Spawn  = 
			{
				ROUTE_Hobby_Road  = 
				{
					ROUTE_Entered_Marker  = 
					{
					},
				},
				ROUTE_Shoes_Store  = 
				{
					ROUTE_Entered_Marker  = 
					{
					},
				},
				ROUTE_Library_Left  = 
				{
					ROUTE_Market_Barrier_2  = 
					{
						ROUTE_Store_Cab_Door  = 
						{
						},
						ROUTE_Entered_Marker  = 
						{
						},
					},
				},
			},
			ROUTE_library_Door  = 
			{
				ROUTE_Hobby_Road  = 
				{
					ROUTE_Entered_Marker  = 
					{
					},
				},
				ROUTE_Shoes_Store  = 
				{
					ROUTE_Entered_Marker  = 
					{
					},
				},
				ROUTE_Library_Left  = 
				{
					ROUTE_Market_Barrier_2  = 
					{
						ROUTE_Entered_Marker  = 
						{
						},
						ROUTE_Store_Cab_Door  = 
						{
						},
					},
				},
			},
			ROUTE_Rendez_Vous  = 
			{
				ROUTE_Corner_Third  = 
				{
				},
				ROUTE_Tunnel_Barrier_1  = 
				{
				},
				ROUTE_Stair_Roof_Tunnel  = 
				{
					ROUTE_Bar_At_Top  = 
					{
						ROUTE_Top_CP  = 
						{
						},
					},
				},
				ROUTE_First_Corner  = 
				{
					ROUTE_Piano_Cab  = 
					{
						ROUTE_Axis_CP_Spawn  = 
						{
							ROUTE_Top_CP  = 
							{
							},
						},
					},
				},
			},
			ROUTE_First_Axis_Spawn  = 
			{
				ROUTE_Trucking_Road  = 
				{
					ROUTE_Music_Store  = 
					{
						ROUTE_Bungers  = 
						{
							ROUTE_Market_Barrier_2  = 
							{
								ROUTE_Entered_Marker  = 
								{
								},
								ROUTE_Store_Cab_Door  = 
								{
								},
							},
						},
					},
					ROUTE_Piano_Cab  = 
					{
						ROUTE_Axis_CP_Spawn  = 
						{
							ROUTE_Top_CP  = 
							{
							},
						},
					},
					ROUTE_Stair_Roof_Tunnel  = 
					{
						ROUTE_Bar_At_Top  = 
						{
							ROUTE_Top_CP  = 
							{
							},
						},
					},
					ROUTE_Tunnel_Barrier_1  = 
					{
					},
				},
			},
		},
		PLANT_Tank_Barrier_1 = 
		{
			ROUTE_Axis_CP_Spawn  = 
			{
				ROUTE_CP_Left  = 
				{
				},
				ROUTE_CP_Right  = 
				{
				},
			},
			ROUTE_First_Axis_Spawn  = 
			{
				ROUTE_Music_Store  = 
				{
					ROUTE_Bungers  = 
					{
						ROUTE_Market_Barrier_2  = 
						{
							ROUTE_Entered_Marker  = 
							{
							},
						},
					},
				},
				ROUTE_Back_Rendez_Vous  = 
				{
					ROUTE_Rendez_Vous  = 
					{
						ROUTE_Corner_Third  = 
						{
							ROUTE_PWN  = 
							{
							},
						},
						ROUTE_Tunnel_Barrier_1  = 
						{
						},
					},
					ROUTE_Stair_Roof_Tunnel  = 
					{
						ROUTE_Bar_At_Top  = 
						{
							ROUTE_Top_CP  = 
							{
							},
						},
					},
				},
			},
			ROUTE_Rendez_Vous  = 
			{
				ROUTE_Stair_Roof_Tunnel  = 
				{
					ROUTE_Bar_At_Top  = 
					{
						ROUTE_Top_CP  = 
						{
						},
					},
				},
				ROUTE_Tunnel_Barrier_1  = 
				{
				},
				ROUTE_Corner_Third  = 
				{
					ROUTE_PWN  = 
					{
					},
				},
			},
		},
		PLANT_Tank_Barrier_2 = 
		{
			ROUTE_Rendez_Vous  = 
			{
				ROUTE_Tunnel_Barrier_1  = 
				{
					ROUTE_Entered_Marker  = 
					{
						ROUTE_Market_Barrier_2  = 
						{
						},
					},
					ROUTE_Store_Cab_Door  = 
					{
						ROUTE_Market_Barrier_2  = 
						{
						},
					},
				},
				ROUTE_First_Corner  = 
				{
					ROUTE_Piano_Cab  = 
					{
						ROUTE_Axis_CP_Spawn  = 
						{
							ROUTE_Restaurant_Top  = 
							{
								ROUTE_Market_Barrier_2  = 
								{
								},
							},
						},
					},
					ROUTE_Music_Store  = 
					{
						ROUTE_Bar_Mall  = 
						{
							ROUTE_Market_Barrier_2  = 
							{
							},
						},
						ROUTE_Bungers  = 
						{
							ROUTE_Market_Barrier_2  = 
							{
							},
						},
					},
				},
			},
			ROUTE_Axis_CP_Spawn  = 
			{
				ROUTE_Restaurant_Top  = 
				{
					ROUTE_Market_Barrier_2  = 
					{
					},
				},
				ROUTE_Bungers  = 
				{
					ROUTE_Market_Barrier_2  = 
					{
					},
				},
				ROUTE_Bar_At_Top  = 
				{
					ROUTE_Top_CP  = 
					{
						ROUTE_Entered_Marker  = 
						{
							ROUTE_Market_Barrier_2  = 
							{
							},
						},
						ROUTE_Store_Cab_Door  = 
						{
							ROUTE_Market_Barrier_2  = 
							{
							},
						},
					},
				},
			},
			ROUTE_First_Axis_Spawn  = 
			{
				ROUTE_Trucking_Road  = 
				{
					ROUTE_Music_Store  = 
					{
						ROUTE_Bar_Mall  = 
						{
						},
						ROUTE_Bungers  = 
						{
							ROUTE_Market_Barrier_2  = 
							{
							},
						},
					},
				},
			},
		},
		BUILD_Tank =
		{
		},
		BUILD_Field_Radio =
		{
		},
		PLANT_Field_Radio =
		{
		},
		BUILD_Command_Post =
		{
		},
		PLANT_Command_Post =
		{
		},
		PLANT_Safe = 
		{
			ROUTE_Axis_CP_Spawn  = 
			{
				ROUTE_Restaurant_Top  = 
				{
					ROUTE_Library_Stair_Left  = 
					{
						ROUTE_Library_Door  = 
						{
						},
					},
				},
				ROUTE_Bar_Mall  = 
				{
					ROUTE_Library_Back  = 
					{
						ROUTE_Bank_Side_Door  = 
						{
							ROUTE_Secret_Doc  = 
							{
							},
						},
						ROUTE_Breached_Wall  = 
						{
						},
					},
					ROUTE_Library_Stair_Left  = 
					{
						ROUTE_Library_Door  = 
						{
						},
					},
				},
			},
			ROUTE_Rendez_Vous  = 
			{
				ROUTE_First_Corner  = 
				{
					ROUTE_Piano_Cab  = 
					{
						ROUTE_Axis_CP_Spawn  = 
						{
							ROUTE_Restaurant_Top  = 
							{
								ROUTE_Library_Stair_Left  = 
								{
									ROUTE_Library_Door  = 
									{
									},
								},
							},
							ROUTE_Bar_Mall  = 
							{
								ROUTE_Library_Stair_Left  = 
								{
									ROUTE_Library_Door  = 
									{
									},
								},
								ROUTE_Library_Back  = 
								{
									ROUTE_Bank_Side_Door  = 
									{
									},
									ROUTE_Breached_Wall  = 
									{
									},
								},
							},
						},
					},
					ROUTE_Music_Store  = 
					{
						ROUTE_Bar_Mall  = 
						{
							ROUTE_Library_Stair_Left  = 
							{
								ROUTE_Library_Door  = 
								{
								},
							},
							ROUTE_Library_Back  = 
							{
								ROUTE_Bank_Side_Door  = 
								{
								},
								ROUTE_Breached_Wall  = 
								{
								},
							},
						},
					},
				},
			},
			ROUTE_First_Axis_Spawn  = 
			{
				ROUTE_Trucking_Road  = 
				{
					ROUTE_Music_Store  = 
					{
						ROUTE_Bar_Mall  = 
						{
							ROUTE_Library_Back  = 
							{
								ROUTE_Bank_Side_Door  = 
								{
								},
								ROUTE_Breached_Wall  = 
								{
								},
							},
							ROUTE_Library_Stair_Left  = 
							{
								ROUTE_Library_Door  = 
								{
								},
							},
						},
						ROUTE_Bungers  = 
						{
							ROUTE_Market_Barrier_2  = 
							{
								ROUTE_Library_Stair_Left  = 
								{
									ROUTE_Library_Door  = 
									{
									},
								},
							},
						},
					},
				},
			},
		},
		FLAG_Secret_Documents = 
		{
			ROUTE_Axis_CP_Spawn  = 
			{
				ROUTE_Restaurant_Top  = 
				{
					ROUTE_Library_Stair_Left  = 
					{
						ROUTE_Library_Door  = 
						{
						},
					},
				},
				ROUTE_Bar_Mall  = 
				{
					ROUTE_Library_Back  = 
					{
						ROUTE_Bank_Side_Door  = 
						{
							ROUTE_Secret_Doc  = 
							{
							},
						},
						ROUTE_Breached_Wall  = 
						{
						},
					},
					ROUTE_Library_Stair_Left  = 
					{
						ROUTE_Library_Door  = 
						{
						},
					},
				},
			},
			ROUTE_Rendez_Vous  = 
			{
				ROUTE_First_Corner  = 
				{
					ROUTE_Piano_Cab  = 
					{
						ROUTE_Axis_CP_Spawn  = 
						{
							ROUTE_Restaurant_Top  = 
							{
								ROUTE_Library_Stair_Left  = 
								{
									ROUTE_Library_Door  = 
									{
									},
								},
							},
							ROUTE_Bar_Mall  = 
							{
								ROUTE_Library_Stair_Left  = 
								{
									ROUTE_Library_Door  = 
									{
									},
								},
								ROUTE_Library_Back  = 
								{
									ROUTE_Bank_Side_Door  = 
									{
									},
									ROUTE_Breached_Wall  = 
									{
									},
								},
							},
						},
					},
					ROUTE_Music_Store  = 
					{
						ROUTE_Bar_Mall  = 
						{
							ROUTE_Library_Stair_Left  = 
							{
								ROUTE_Library_Door  = 
								{
								},
							},
							ROUTE_Library_Back  = 
							{
								ROUTE_Bank_Side_Door  = 
								{
								},
								ROUTE_Breached_Wall  = 
								{
								},
							},
						},
					},
				},
			},
			ROUTE_First_Axis_Spawn  = 
			{
				ROUTE_Trucking_Road  = 
				{
					ROUTE_Music_Store  = 
					{
						ROUTE_Bar_Mall  = 
						{
							ROUTE_Library_Back  = 
							{
								ROUTE_Bank_Side_Door  = 
								{
								},
								ROUTE_Breached_Wall  = 
								{
								},
							},
							ROUTE_Library_Stair_Left  = 
							{
								ROUTE_Library_Door  = 
								{
								},
							},
						},
						ROUTE_Bungers  = 
						{
							ROUTE_Market_Barrier_2  = 
							{
								ROUTE_Library_Stair_Left  = 
								{
									ROUTE_Library_Door  = 
									{
									},
								},
							},
						},
					},
				},
			},
		},
		CAPPOINT_Radio = 
		{
			ROUTE_Secret_Doc  = 
			{
				ROUTE_Bank_Side_Door  = 
				{
					ROUTE_Library_Back  = 
					{
						ROUTE_Bar_Mall  = 
						{
							ROUTE_Bungers  = 
							{
							},
						},
						ROUTE_Music_Store  = 
						{
							ROUTE_Piano_Cab  = 
							{
								ROUTE_Axis_CP_Spawn  = 
								{
									ROUTE_Bungers  = 
									{
									},
									ROUTE_Restaurant_Top  = 
									{
									},
								},
							},
						},
					},
				},
				ROUTE_Breached_Wall  = 
				{
					ROUTE_Library_Back  = 
					{
						ROUTE_Bar_Mall  = 
						{
							ROUTE_Bungers  = 
							{
							},
							ROUTE_Music_Store  = 
							{
								ROUTE_Piano_Cab  = 
								{
									ROUTE_Axis_CP_Spawn  = 
									{
										ROUTE_Restaurant_Top  = 
										{
										},
										ROUTE_Bungers  = 
										{
										},
									},
								},
							},
						},
					},
				},
				ROUTE_Library_Door  = 
				{
					ROUTE_Library_Stair_Left  = 
					{
						ROUTE_Market_Barrier_2  = 
						{
						},
						ROUTE_Bar_Mall  = 
						{
							ROUTE_Bungers  = 
							{
							},
							ROUTE_Music_Store  = 
							{
								ROUTE_Piano_Cab  = 
								{
									ROUTE_Axis_CP_Spawn  = 
									{
										ROUTE_Restaurant_Top  = 
										{
										},
										ROUTE_Bungers  = 
										{
										},
									},
								},
							},
						},
					},
				},
			},
		},
		CAPPOINT_Fake = 
		{
			ROUTE_Secret_Doc  = 
			{
				ROUTE_Bank_Side_Door  = 
				{
					ROUTE_Library_Back  = 
					{
						ROUTE_Bar_Mall  = 
						{
							ROUTE_Music_Store  = 
							{
								ROUTE_Piano_Cab  = 
								{
									ROUTE_Axis_CP_Spawn  = 
									{
									},
								},
							},
						},
					},
				},
				ROUTE_Breached_Wall  = 
				{
					ROUTE_Library_Back  = 
					{
						ROUTE_Bar_Mall  = 
						{
							ROUTE_Music_Store  = 
							{
								ROUTE_Piano_Cab  = 
								{
									ROUTE_Axis_CP_Spawn  = 
									{
									},
								},
							},
						},
					},
				},
				ROUTE_Library_Door  = 
				{
					ROUTE_Library_Stair_Left  = 
					{
						ROUTE_Market_Barrier_2  = 
						{
							ROUTE_Store_Cab_Door  = 
							{
								ROUTE_Top_CP  = 
								{
									ROUTE_Bar_At_Top  = 
									{
										ROUTE_Axis_CP_Spawn  = 
										{
										},
									},
								},
							},
						},
						ROUTE_Entered_Marker  = 
						{
							ROUTE_Top_CP  = 
							{
								ROUTE_Bar_At_Top  = 
								{
									ROUTE_Axis_CP_Spawn  = 
									{
									},
								},
							},
						},
					},
				},
			},
		},
	      };							
		MapRoutes["DEFEND_First.*"] =
		{
		      ROUTE_First_Allied_Spawn  = 
			{Weight = 3,
				ROUTE_Library_Left  = 
				{
					ROUTE_Bar_Mall  = 
					{
						ROUTE_Music_Store  = 
						{
						},
					},
					Weight = 4,
					ROUTE_Market_Barrier_2  = 
					{
						ROUTE_Bungers  = 
						{
							ROUTE_Music_Store  = 
							{
							},
						},
					},
				},
				Weight = 4,
				ROUTE_Hobby_Road  = 
				{
					ROUTE_Entered_Marker  = 
					{
						ROUTE_Top_CP  = 
						{
							ROUTE_Bar_At_Top  = 
							{
								ROUTE_Stair_Roof_Tunnel  = 
								{
								},
								ROUTE_Axis_CP_Spawn  = 
								{
									ROUTE_Piano_Cab  = 
									{
									},
								},
							},
						},
						ROUTE_Tunnel_Barrier_1  = 
						{
						},
						ROUTE_Corner_Third  = 
						{
						},
					},
				},
			},
			ROUTE_Allied_CP_Spawn  = 
			{
				ROUTE_CP_Left  = 
				{
					ROUTE_Top_CP  = 
					{
						ROUTE_Bar_At_Top  = 
						{
							ROUTE_Stair_Roof_Tunnel  = 
							{
							},
						},
						ROUTE_Axis_CP_Spawn  = 
						{
							ROUTE_Piano_Cab  = 
							{
							},
						},
					},
					ROUTE_Tunnel_Barrier_1  = 
					{
					},
					ROUTE_Corner_Third  = 
					{
					},
				},
				ROUTE_CP_Right  = 
				{
					ROUTE_Top_CP  = 
					{
						ROUTE_Bar_At_Top  = 
						{
							ROUTE_Stair_Roof_Tunnel  = 
							{
							},
							ROUTE_Axis_CP_Spawn  = 
							{
								ROUTE_Piano_Cab  = 
								{
								},
							},
						},
					},
					ROUTE_Tunnel_Barrier_1  = 
					{
					},
					ROUTE_Corner_Third  = 
					{
					},
				},
			},
            };		
		MapRoutes["ATTACK_Second.*"] =
		{
			ROUTE_First_Axis_Spawn  = 
			{
				ROUTE_Trucking_Road  = 
				{
					ROUTE_First_Corner  = 
					{
						ROUTE_Tunnel_Barrier_1  = 
						{
						},
						ROUTE_Stair_Roof_Tunnel  = 
						{
						},
						ROUTE_Corner_Third  = 
						{
							ROUTE_PWN  = 
							{
							},
						},
					},
				},
				ROUTE_Back_Rendez_Vous  = 
				{
					ROUTE_Corner_Third  = 
					{
						ROUTE_PWN  = 
						{
						},
					},
					ROUTE_Tunnel_Barrier_1  = 
					{
					},
					ROUTE_Stair_Roof_Tunnel  = 
					{
						ROUTE_Bar_At_Top  = 
						{
							ROUTE_Top_CP  = 
							{
							},
						},
					},
				},
			},
			ROUTE_Rendez_Vous  = 
			{
				ROUTE_Corner_Third  = 
				{
					ROUTE_PWN  = 
					{
					},
				},
				ROUTE_Tunnel_Barrier_1  = 
				{
				},
				ROUTE_Stair_Roof_Tunnel  = 
				{
					ROUTE_Bar_At_Top  = 
					{
						ROUTE_Top_CP  = 
						{
						},
					},
				},
				ROUTE_First_Corner  = 
				{
					ROUTE_Piano_Cab  = 
					{
						ROUTE_Axis_CP_Spawn  = 
						{
							ROUTE_Bar_At_Top  = 
							{
								ROUTE_Top_CP  = 
								{
								},
							},
						},
					},
				},
			},
		};
		MapRoutes["DEFEND_Second.*"] = 
		{
			ROUTE_Allied_CP_Spawn  = 
			{
				ROUTE_CP_Left  = 
				{
				},
				ROUTE_CP_Right  = 
				{
				},
			},
			ROUTE_First_Allied_Spawn  = 
			{
				ROUTE_Hobby_Road  = 
				{
					ROUTE_Entered_Marker  = 
					{
					},
				},
				ROUTE_Shoes_Store  = 
				{
					ROUTE_Entered_Marker  = 
					{
					},
					ROUTE_Store_Cab_Door  = 
					{
					},
				},
			},
	      };
	     	MapRoutes["DEFEND_Library.*"] = 
		{
			ROUTE_First_Allied_Spawn  = 
			{
				ROUTE_Library_Left  = 
				{
					ROUTE_Library_Stair_Left  = 
					{
						ROUTE_Library_Door  = 
						{
						},
					},
				},
				ROUTE_Library_Right  = 
				{
					ROUTE_Breached_Wall  = 
					{
					},
				},
				ROUTE_Allied_Stairs_Cab  = 
				{
					ROUTE_Library_Stair_Front  = 
					{
						ROUTE_Library_Door  = 
						{
						},
					},
					ROUTE_Library_Right  = 
					{
						ROUTE_Library_Door  = 
						{
						},
						ROUTE_Breached_Wall  = 
						{
						},
					},
				},
			},
	      };
	      MapRoutes["DEFEND_Cappoint.*"] = 
		{
			ROUTE_First_Allied_Spawn  = 
			{
				ROUTE_Library_Left  = 
				{
					ROUTE_Market_Barrier_2  = {
					},
					ROUTE_Bar_Mall  = 
					{
						ROUTE_Bungers  = 
						{
						},
					},
				},
				ROUTE_Allied_Stairs_Cab  = 
				{
					ROUTE_Library_Stair_Front  = 
					{
						ROUTE_Market_Barrier_2  = 
						{
						},
						ROUTE_Bar_Mall  = 
						{
							ROUTE_Bungers  = 
							{
							},
						},
					},
				},
			},
	      };
	// copy some routes
	MapRoutes["ATTACK_First.*"] = MapRoutes.CHECKPOINT_bunker_flag;
	MapRoutes["ATTACK_Second.*"] = MapRoutes.PLANT_Tank_Barrier_1;
	MapRoutes["ATTACK_Market.*"] = MapRoutes.PLANT_Tank_Barrier_2;
	MapRoutes["ATTACK_Library.*"] = MapRoutes.PLANT_Safe;
	MapRoutes["ATTACK_Cappoint.*"] = MapRoutes.PLANT_Tank_Barrier_2;
	MapRoutes.FLAG_Secret_Documents = MapRoutes.PLANT_Safe;

	Util.Routes(MapRoutes);
};
