//==========================================================================================
//
//	the_moskeeb1.gm
//
//	Who	When		What
//------------------------------------------------------------------------------------------
// palota	13 May 2010	Initial script
// palota	27 November 2010	axis role to defend side door and bar spawn, ForceRouting to build tank or boat, GRENADE_depot_mg,
//       	BUILD_Boat has jump stance, escort is disabled at tank barriers, MOUNT_tank aim vector, boat barrier2 has 2 plant positions,
//       	tank barrier 1 has use point, new route to mg42_bank, coverspots, changed spawns
//==========================================================================================
//
global Map =
{
	Debug = 0,
	Movers = { "MOVER_tank", "MOVER_truck" }, //truck is boat

	phase = 0,
	barrier1Destroyed = true,
	barrier2Destroyed = true,
	boatBarrier1Destroyed = true,
	boatBarrier2Destroyed = false,
	sideDoorDestroyed = false,
	barCaptured = false,

	Roles =
	{
		AXIS =
		{
			DEFENDER2 =
			{
				numbots = 3,
			},
		},
	},

	SetSpawn1 = function(bot)
	{
		if(bot.GetTeam()==TEAM.ALLIES){
			if(Map.phase < 10 && RandInt(0,2)==0)
			{
				bot.ChangeSpawnPoint(2); //helicopter
			}
			else if(Map.barCaptured &&
				( Map.phase < 10
				|| Map.phase >= 18 && Map.phase < 40
				|| Map.phase >= 15 && RandInt(0,1)==0))
			{
				bot.ChangeSpawnPoint(5); //bar
			}else{
				bot.ChangeSpawnPoint(1); //church at tank depot
			}
		}else{ //AXIS
			if(Map.phase < 10)
			{
				bot.ChangeSpawnPoint(1); //depot bunker
			}
			else
			{
				if(Map.phase < 16){ p=13; } //tank at barrier 1
				else if(Map.phase < 20){ p=5; } //tank near port
				else if(Map.phase < 40){ p=2; } //tank pass barrier 2
				else{ p=9; } //escort boat
				if(RandInt(0,p)<=1){
					bot.ChangeSpawnPoint(3); //axis spawn
				}else{
					bot.ChangeSpawnPoint(4); //port
				}
			}
		}
	},

	SetSpawn = function()
	{
		foreach(bot in BotTable)
		{
			Map.SetSpawn1(bot);
		}
	},

	Bar_Captured = function(trigger)
	{
		Map.barCaptured = true;
		SetAvailableMapGoals(TEAM.AXIS, false, {
			"DEFEND_bar.*",
			"DEFEND_beach.*",
		});
		SetAvailableMapGoals(TEAM.AXIS, true, "CHECKPOINT_rien_du_tout");
		if (!Map.sideDoorDestroyed){
			SetAvailableMapGoals(TEAM.AXIS, true, "DEFEND_side_door.*");
			SetAvailableMapGoals(TEAM.ALLIES, true, "PLANT_Side_Door__bunker");
		}
		Map.SetSpawn();
		Util.MapDebugPrint("Bar_Captured");
	},

	Bar_Reclaimed = function(trigger)
	{
		Map.barCaptured = false;
		SetAvailableMapGoals(TEAM.AXIS, true, "DEFEND_bar.*");
		if (!Map.sideDoorDestroyed && Map.phase<15){
			SetAvailableMapGoals(TEAM.ALLIES, false, "PLANT_Side_Door__bunker");
		}
		SetAvailableMapGoals(TEAM.AXIS, false, "CHECKPOINT_rien_du_tout");
		Map.SetSpawn();
		Util.MapDebugPrint("Bar_Reclaimed");
	},

	Port_Captured = function(trigger)
	{
		SetAvailableMapGoals(TEAM.ALLIES, true, "CHECKPOINT_rien_du_tout_1");
		Util.MapDebugPrint("Port_Captured");
	},

	Port_Reclaimed = function(trigger)
	{
		SetAvailableMapGoals(TEAM.ALLIES, false, "CHECKPOINT_rien_du_tout_1");
		Util.MapDebugPrint("Port_Reclaimed");
	},

	Tank_Barrier1_Constructed = function(trigger)
	{
		Map.barrier1Destroyed = false;
		Util.MapDebugPrint("Tank_Barrier1_Constructed");
	},

	Tank_Barrier1_Destroyed = function(trigger)
	{
		Map.barrier1Destroyed = true;
		if (Map.phase==13){
			SetAvailableMapGoals(TEAM.ALLIES, true, "ESCORT_tank");
		}
		Util.MapDebugPrint("Tank_Barrier1_Destroyed");
	},

	Tank_Barrier2_Constructed = function(trigger)
	{
		Map.barrier2Destroyed = false;
		Util.MapDebugPrint("Tank_Barrier2_Constructed");
	},

	Tank_Barrier2_Destroyed = function(trigger)
	{
		Map.barrier2Destroyed = true;
		if (Map.phase==20){
			SetAvailableMapGoals(TEAM.ALLIES, true, "ESCORT_tank");
		}
		Util.MapDebugPrint("Tank_Barrier2_Destroyed");
	},

	Tank_Depot_Door_Destroyed = function(trigger)
	{
		SetAvailableMapGoals(TEAM.ALLIES, true, {
			"ESCORT_tank",
			"BUILD_Tank",
		});
		Util.ForceRouting("BUILD_Tank", true);
		Util.MapDebugPrint("Tank_Depot_Door_Destroyed");
	},

	Side_Door__bunker_Destroyed = function(trigger)
	{
		Map.sideDoorDestroyed = true;
		Util.EnableGoal("ROUTE_side_door");
		SetAvailableMapGoals(TEAM.AXIS, false, "DEFEND_side_door.*");
		SetAvailableMapGoals(TEAM.ALLIES, false, "DEFEND_a_side_door.*");
		SetGoalPriority("REPAIRMG42_mg42_bank", 0.9);
		Util.MapDebugPrint("Side_Door__bunker_Destroyed");
	},

	Tank_Stolen = function(trigger)
	{
		Map.phase = 10;
		Map.SetSpawn();
		Util.SetMaxUsersInProgress(2, "CHECKPOINT_rien_du_tout_1");
		SetAvailableMapGoals(TEAM.AXIS, false, "DEFEND_depot.*");
		SetAvailableMapGoals(TEAM.ALLIES, false, {
			"ATTACK_depot.*",
			"SNIPE_depot1",
			".*MG42_mg42_bank",
			"GRENADE_depot_mg",
		});
		SetAvailableMapGoals(TEAM.AXIS, true, {
			"ATTACK_tank1",
			"BUILD_Tank_Barrier_2",
		});
		SetAvailableMapGoals(TEAM.ALLIES, true, {
			".*Command_Post",
			"ATTACK_tank6",
			"PLANT_Tank_Barrier_1",
			"BUILD_Allied_MG42_Construction",
			".*MG42_alliedconstruct1_track",
			".*MG42_mg42_bank_1",
			"MOUNT_tank",
		});
		SetGoalPriority("CHECKPOINT_rien_du_tout_1", 0.71);
		Util.ForceRouting("BUILD_Tank", false);
		Util.OnTriggerPosition("MOVER_tank", "tank_turn1", 200.0, Map.Tank_Turn1);
		Util.MapDebugPrint("Tank_Stolen");
	},

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

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

	Tank_Turn1 = function(trigger)
	{
		SetAvailableMapGoals(TEAM.AXIS, true, {
			"ATTACK_tank2",
			"SNIPE_crane",
		});
		SetAvailableMapGoals(TEAM.ALLIES, true, "ATTACK_barrier1_.*");
		Util.OnTriggerPosition("MOVER_tank", "tank_barrier1", 200.0, Map.Tank_Barrier1);
		Util.MapDebugPrint("Tank_Turn1");
	},

	Tank_Barrier1 = function(trigger)
	{
		Map.phase = 13;
		if(!Map.barrier1Destroyed){
			SetAvailableMapGoals(TEAM.ALLIES, false, "ESCORT_tank");
		}
		SetGoalPriority("PLANT_Tank_Barrier_1", 0.95, TEAM.ALLIES);
		ETUtil.SetAimModeForMount("MOUNT_tank", Vector3(8665, 1668, 10));
		Util.OnTriggerPosition("MOVER_tank", "tank_turn2", 200.0, Map.Tank_Turn2);
		Util.MapDebugPrint("Tank_Barrier1");
	},

	Tank_Turn2 = function(trigger)
	{
		Map.phase = 15;
		Map.SetSpawn();
		if (!Map.sideDoorDestroyed){
			SetAvailableMapGoals(TEAM.ALLIES, true, "DEFEND_a_side_door.*");
		}
		SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_tank1");
		SetAvailableMapGoals(TEAM.ALLIES, false, ".*MG42_mg42_bank_1");
		SetAvailableMapGoals(TEAM.AXIS, true, "PLANT_Right_bridge");
		SetAvailableMapGoals(TEAM.ALLIES, true, {
			"ATTACK_barrier2_.*",
			"PLANT_Tank_Barrier_2",
		});
		Util.OnTriggerPosition("MOVER_tank", "tank_turn3", 200.0, Map.Tank_Turn3);
		Util.MapDebugPrint("Tank_Turn2");
	},

	Tank_Turn3 = function(trigger)
	{
		Map.phase = 16;
		Map.SetSpawn();
		SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_tank2");
		SetAvailableMapGoals(TEAM.ALLIES, false, {
			"ATTACK_barrier1_.*",
			"ATTACK_tank6",
		});
		SetAvailableMapGoals(TEAM.AXIS, true, "ATTACK_tank3");
		SetAvailableMapGoals(TEAM.ALLIES, true, "ATTACK_tank7");
		SetGoalPriority("BUILD_Tank", 0.91, TEAM.ALLIES);
		SetGoalPriority("PLANT_Side_Door__bunker", 0.95, TEAM.ALLIES);
		ETUtil.SetAimModeForMount("MOUNT_tank", Vector3(8132, 5127, -87));
		Util.OnTriggerPosition("MOVER_tank", "tank_turn4", 200.0, Map.Tank_Turn4);
		Util.MapDebugPrint("Tank_Turn3");
	},

	Tank_Turn4 = function(trigger)
	{
		Map.phase = 18;
		Map.SetSpawn();
		SetAvailableMapGoals(TEAM.AXIS, true, "ATTACK_tank4");
		Util.OnTriggerPosition("MOVER_tank", "tank_barrier2", 240.0, Map.Tank_Barrier2);
		Util.MapDebugPrint("Tank_Turn4");
	},

	Tank_Barrier2 = function(trigger)
	{
		Map.phase = 20;
		Map.SetSpawn();
		if(!Map.barrier2Destroyed){
			SetAvailableMapGoals(TEAM.ALLIES, false, "ESCORT_tank");
		}
		SetGoalPriority("PLANT_Tank_Barrier_2", 0.95, TEAM.ALLIES);
		SetAvailableMapGoals(TEAM.AXIS, true, "ATTACK_tank5");
		Util.OnTriggerPosition("MOVER_tank", "tank_turn5", 250.0, Map.Tank_Turn5);
		Util.MapDebugPrint("Tank_Barrier2");
	},

	Tank_Turn5 = function(trigger)
	{
		Map.phase = 21;
		SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_tank3");
		SetAvailableMapGoals(TEAM.ALLIES, false, "ATTACK_barrier2_.*");
		SetAvailableMapGoals(TEAM.ALLIES, true, "BUILD_Right_bridge");
		SetGoalPriority("PLANT_Tank_Barrier_2", 0.92, TEAM.ALLIES);
		Util.MapDebugPrint("Tank_Turn5");
	},

	Right_bridge_Built = function(trigger)
	{
		Wp.SetWaypointFlag("bridge", "closed", false);
		//Util.EnableGoal("ROUTE_bridge");
		Util.MapDebugPrint("Right_bridge_Built");
	},

	Right_bridge_Destroyed = function(trigger)
	{
		Wp.SetWaypointFlag("bridge", "closed", true);
		//Util.DisableGoal("ROUTE_bridge");
		Util.MapDebugPrint("Right_bridge_Destroyed");
	},

	Mosque_Accessible = function(trigger)
	{
		Map.phase = 30;
		Map.SetSpawn();
		SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_tank.*");
		SetAvailableMapGoals(TEAM.ALLIES, false, "ATTACK_tank7");
		SetAvailableMapGoals(TEAM.AXIS, true, {
			"DEFEND_mosque.*",
			"DEFEND_boat.*",
			"BUILD_Boat_Barrier_.*",
		});
		SetAvailableMapGoals(TEAM.ALLIES, true, {
			"FLAG_Gold_Bars",
			"CAPPOINT_boat",
		});
		SetAvailableMapGoals(TEAM.ALLIES, false, "ESCORT_tank");
		SetGoalPriority("BUILD_Tank", 0.8, TEAM.ALLIES);
		SetGoalPriority("CHECKPOINT_rien_du_tout_1", 0.73);
		SetGoalPriority("CHECKPOINT_rien_du_tout", 0.75, TEAM.ALLIES);
		SetGoalPriority("MOUNTMG42_alliedconstruct1_track", 0.6, TEAM.ALLIES);
		ETUtil.SetAimModeForMount("MOUNT_tank", Vector3(9787, 4396, -87));
		Util.MapDebugPrint("Mosque_Accessible");
	},

	SetBoat = function()
	{
		SetAvailableMapGoals(TEAM.ALLIES, Map.phase>=40 && Map.boatBarrier1Destroyed
			&& (Map.phase<50 || Map.boatBarrier2Destroyed), "ESCORT_boat");
	},

	SetBoatBarrier2 = function()
	{
		goal = GetGoal("PLANT_Boat_Barrier_2");
		goal.SetPosition(Util.WpNameInfo("boat_barrier2_" + RandInt(1,2)).position);
		goal.DynamicPosition = false;
	},

	Escort_Boat = function(trigger)
	{
		Map.phase = 40;
		Map.SetSpawn();
		Map.SetBoat();
		Map.SetBoatBarrier2();
		Util.SetMaxUsersInProgress(1, "CHECKPOINT_rien_du_tout");
		Util.SetMaxUsersInProgress(5, "CHECKPOINT_rien_du_tout_1");
		Util.ForceRouting("BUILD_Boat", true);
		SetAvailableMapGoals(TEAM.AXIS, false, {
			"DEFEND_mosque.*",
			"PLANT_Right_bridge",
		});
		SetAvailableMapGoals(TEAM.ALLIES, false, {
			"BUILD_Right_bridge",
			"FLAG_Gold_Bars",
			"CAPPOINT_boat",
			"BUILD_Tank",
			"MOUNT_tank",
		});
		SetAvailableMapGoals(TEAM.AXIS, true, {
			"DEFEND_port.*",
			"SNIPE_port.*",
		});
		SetAvailableMapGoals(TEAM.ALLIES, true, {
			"BUILD_Boat",
			"ATTACK_port.*",
			"PLANT_Boat_Barrier_1",
			"PLANT_Boat_Barrier_2",
		});
		Util.OnTriggerPosition("MOVER_truck", "boat_barrier1", 200.0, Map.Boat_Past_Barrier1);
		Util.MapDebugPrint("Escort_Boat");
	},

	Boat_Barrier1_Constructed = function(trigger)
	{
		Map.boatBarrier1Destroyed = false;
		Map.SetBoat();
		Util.MapDebugPrint("Boat_Barrier1_Constructed");
	},

	Boat_Barrier1_Destroyed = function(trigger)
	{
		Map.boatBarrier1Destroyed = true;
		Map.SetBoat();
		Util.MapDebugPrint("Boat_Barrier1_Destroyed");
	},

	Boat_Past_Barrier1 = function(trigger)
	{
		SetAvailableMapGoals(TEAM.AXIS, false, "BUILD_Boat_Barrier_1");
		Util.ForceRouting("BUILD_Boat", false);
		SetGoalPriority("MOUNTMG42_alliedconstruct1_track", 0.7, TEAM.ALLIES);
		Util.OnTriggerPosition("MOVER_truck", "boat_barrier2", 200.0, Map.Boat_Barrier2);
		Util.MapDebugPrint("Boat_Past_Barrier1");
	},

	Boat_Barrier2 = function(trigger)
	{
		Map.phase = 50;
		SetGoalPriority("PLANT_Boat_Barrier_2", 0.95, TEAM.ALLIES);
		Util.MapDebugPrint("Boat_Barrier2");
	},

	Boat_Barrier2_Constructed = function(trigger)
	{
		Map.boatBarrier2Destroyed = false;
		Map.SetBoat();
		Util.MapDebugPrint("Boat_Barrier2_Constructed");
	},

	Boat_Barrier2_Destroyed = function(trigger)
	{
		Map.boatBarrier2Destroyed = true;
		Map.SetBoat();
		Util.MapDebugPrint("Boat_Barrier2_Destroyed");
	},

	Boat_Barrier2_Planted = function(trigger)
	{
		Map.SetBoatBarrier2();
		Util.MapDebugPrint("Boat_Barrier2_Planted", true);
	},

	Boat_Damaged = function(trigger)
	{
		Util.SetMaxUsersInProgress(1, "ESCORT_boat");
		Util.MapDebugPrint("Boat_Damaged", true);
	},

	Boat_Repaired = function(trigger)
	{
		Util.SetMaxUsersInProgress(4, "ESCORT_boat");
		Util.MapDebugPrint("Boat_Repaired", true);
	},
};

global OnMapLoad = function()
{
	OnTrigger("allies_capture_rien_du_tout", Map.Bar_Captured);
	OnTrigger("axis_neutralized_rien_du_tout", Map.Bar_Reclaimed);
	OnTrigger("axis_capture_rien_du_tout", Map.Port_Captured);
	OnTrigger("allies_neutralized_rien_du_tout", Map.Port_Reclaimed);
	OnTrigger("Allies have blown the tanks bunker door!", Map.Tank_Depot_Door_Destroyed);
	OnTrigger("Allied team has stolen the Tank!", Map.Tank_Stolen);
	OnTrigger("The Tank has been damaged!", Map.Tank_Damaged);
	OnTrigger("The Tank has been repaired!", Map.Tank_Repaired);
	OnTrigger("Allies have blown the Side bunker door!", Map.Side_Door__bunker_Destroyed);
	OnTrigger("Tank Barrier #1 has been constructed.", Map.Tank_Barrier1_Constructed);
	OnTrigger("Tank Barrier #1 has been destroyed.", Map.Tank_Barrier1_Destroyed);
	OnTrigger("Tank Barrier #2 has been constructed.", Map.Tank_Barrier2_Constructed);
	OnTrigger("Tank Barrier #2 has been destroyed.", Map.Tank_Barrier2_Destroyed);
	OnTrigger("Right Bridge moskee has been constructed.", Map.Right_bridge_Built);
	OnTrigger("Right Bridge moskee has been destroyed.", Map.Right_bridge_Destroyed);
	OnTrigger("Allied team has destroyed the Moskee Doors Whit the Tank!", Map.Mosque_Accessible);
	OnTrigger("Allied team is escaping with the Gold Crates and the Boat and try to re", Map.Escort_Boat);
	OnTrigger("The Boat has been damaged!", Map.Boat_Damaged);
	OnTrigger("The Boat has been repaired!", Map.Boat_Repaired);
	OnTrigger("Truck Barrier #1 has been constructed.", Map.Boat_Barrier1_Constructed);
	OnTrigger("Boat Barrier #1 has been constructed.", Map.Boat_Barrier1_Constructed);
	OnTrigger("Boat Barrier #1 has been destroyed.", Map.Boat_Barrier1_Destroyed);
	OnTrigger("Boat Barrier #2 has been constructed.", Map.Boat_Barrier2_Constructed);
	OnTrigger("Boat Barrier #2 has been destroyed.", Map.Boat_Barrier2_Destroyed);
	OnTrigger("Planted at Boat Barrier #2.", Map.Boat_Barrier2_Planted);

	Util.DisableGoal(".*", true);
	Util.DisableGoal("ROUTE_side_door");
	Util.EnableGoal("AMMO.*");
	Util.EnableGoal("HEALTH.*");
	//SetAvailableMapGoals(TEAM.ALLIES, false, ".*lighthouse.*"); // cs: no goals match this regex

	SetAvailableMapGoals(TEAM.AXIS, true, {
		".*Command_Post",
		"PLANT_Allied_MG42_Construction",
		"BUILD_Tank_Barrier_1",
		".*MG42_mg42_bank_1",
	});
	SetAvailableMapGoals(TEAM.AXIS, true, "CHECKPOINT_rien_du_tout_1"); //port roof
	SetAvailableMapGoals(TEAM.AXIS, true, {
		"DEFEND_beach.*",
		"DEFEND_depot.*",
		"DEFEND_bar.*",
	});

	SetAvailableMapGoals(TEAM.ALLIES, true, {
		"ATTACK_depot.*",
		"SNIPE_depot1",
		"PLANT_Tank_Depot_Door",
		".*MG42_mg42_bank",
	});
	SetAvailableMapGoals(TEAM.ALLIES, true, "CHECKPOINT_rien_du_tout"); //bar
	SetAvailableMapGoals(TEAM.ALLIES, true, "GRENADE_depot_mg");

	SetGoalPriority("DEFEND_beach.*", 0.51, TEAM.AXIS);
	SetGoalPriority("BUILD_Tank_Barrier_1", 0.95, TEAM.AXIS);
	SetGoalPriority("BUILD_Tank_Barrier_2", 0.92, TEAM.AXIS);
	SetGoalPriority("BUILD_Boat_Barrier_1", 0.95, TEAM.AXIS);
	SetGoalPriority("BUILD_Boat_Barrier_2", 0.92, TEAM.AXIS);
	SetGoalPriority("SNIPE_crane", 0.81, TEAM.AXIS);
	SetGoalPriority("SNIPE_port.*", 0.81, TEAM.AXIS);
	SetGoalPriority("PLANT_Allied_MG42_Construction", 0.8, TEAM.AXIS, CLASS.COVERTOPS);

	SetGoalPriority("PLANT_Boat_Barrier_1", 0.95, TEAM.ALLIES);
	SetGoalPriority("PLANT_Command_Post", 0.76, TEAM.ALLIES);
	SetGoalPriority("REPAIRMG42_alliedconstruct1_track", 0.9, TEAM.ALLIES);
	SetGoalPriority("MOUNTMG42_alliedconstruct1_track", 0.75, TEAM.ALLIES);
	SetGoalPriority("MOUNT_tank", 0.74, TEAM.ALLIES);
	SetGoalPriority("ESCORT_tank", 0.69, TEAM.ALLIES);
	SetGoalPriority("GRENADE_depot_mg", 0.69, TEAM.ALLIES);
	SetGoalPriority("DEFEND_a_side_door.*", 0.51, TEAM.ALLIES);
	SetGoalPriority("FLAG_Gold_Bars", 0.73, TEAM.ALLIES);

	SetGoalPriority("CHECKPOINT_rien_du_tout_1", 0.51);

	Util.SetRoleForGoals("DEFEND_bar.*", ROLE.DEFENDER2);
	Util.SetRoleForGoals("DEFEND_side_door.*", ROLE.DEFENDER2);

	foreach (goal in { ".*MG42.*", "SNIPE.*", ".*_Command_Post",
		"PLANT_Side_Door__bunker" }){
		Util.SetMaxUsersInProgress(1, goal);
	}
	Util.SetMaxUsersInProgress(4, "ATTACK_tank.*");
	Util.SetMaxUsersInProgress(3, ".*MG42_alliedconstruct1_track");
	Util.SetMaxUsersInProgress(2, "MOUNTMG42_mg42_bank");
	Util.SetMaxUsersInProgress(2, "CHECKPOINT_rien_du_tout");
	Util.SetMaxUsersInProgress(1, "CHECKPOINT_rien_du_tout_1");

	SetMapGoalProperties("DEFEND_.*", {mincamptime=50, maxcamptime=150} );
	SetMapGoalProperties("MOUNTMG42.*", {mincamptime=70, maxcamptime=300} );
	SetMapGoalProperties("MOUNTMG42_alliedconstruct1_track", {mincamptime=999, maxcamptime=999} );
	SetMapGoalProperties("SNIPE_.*", {mincamptime=60, maxcamptime=250} );

	Util.AddUsePoint("PLANT_Tank_Barrier_1", Vector3(6169.978, 86.920, 104.125));
	Wp.SetWaypointFlag("bridge", "closed", true);

	MapRoutes =
	{
		ATTACK_depot1 = {
			ROUTE_helicopter_spawn = {
				ROUTE_beach_left = { ROUTE_town_east_north = {}},
				ROUTE_beach_right = { Weight = 3,
					ROUTE_town_west_south = {
						ROUTE_town_south = {},
						ROUTE_town_yard = {},
					},
				},
			},
			ROUTE_bar_spawn = {
				ROUTE_side_door = {},
				ROUTE_town_east_north = { Weight = 3 },
			}
		},
		DEFEND_depot4 = {
			ROUTE_bunker_spawn = {
				ROUTE_bunker_down = {  Weight = 3 },
				ROUTE_bunker_up = {},
			}
		},
		MOUNTMG42_mg42_bank = {
			ROUTE_helicopter_spawn = {
				ROUTE_town_west_south= {},
			}
		},
		CHECKPOINT_rien_du_tout = {
			ROUTE_bunker_spawn = {
				ROUTE_side_door_axis = {},
				ROUTE_town_east_north = {},
			},
		},
		BUILD_Right_bridge = {
			ROUTE_bar_spawn = {
				ROUTE_side2 = {},
				ROUTE_side3 = {},
			}
		},
		FLAG_Gold_Bars = {
			ROUTE_bar_spawn = {
				ROUTE_side_door = { Weight = 9,
					ROUTE_side1 = {},
					ROUTE_side2 = {},
					//ROUTE_side3 = {},
					ROUTE_side4 = {},
					ROUTE_sewer = {},
				},
				ROUTE_town_east_north = {},
			}
		},
		CAPPOINT_boat = {
			ROUTE_gold = {
				ROUTE_port_entrance = {},
				ROUTE_port_west = { Weight = 3 },
			}
		},
		PLANT_Boat_Barrier_1 = {
			ROUTE_bar_spawn = {
				ROUTE_port_entrance = {},
				ROUTE_port_west = { Weight = 2 },
			},
		},
		DEFEND_mosque1 = {
			ROUTE_axis_spawn = {
				ROUTE_axis_north = { Weight = 2 },
				ROUTE_axis_south = { Weight = 4 },
				ROUTE_tunnel = {},
			}
		},
		BUILD_Boat = {
			ROUTE_bar_spawn = {
				ROUTE_port_entrance = {},
				ROUTE_port_west = { Weight = 3 },
			}
		},
	};
	MapRoutes.PLANT_Tank_Depot_Door = MapRoutes.ATTACK_depot1;
	MapRoutes.BUILD_Tank = MapRoutes.PLANT_Tank_Depot_Door;
	MapRoutes.ATTACK_depot2 = MapRoutes.ATTACK_depot1;
	MapRoutes.ATTACK_depot3 = MapRoutes.ATTACK_depot1;
	MapRoutes.ATTACK_depot4 = MapRoutes.ATTACK_depot1;
	MapRoutes.DEFEND_depot5 = MapRoutes.DEFEND_depot4;
	MapRoutes.DEFEND_depot6 = MapRoutes.DEFEND_depot4;
	MapRoutes.DEFEND_depot7 = MapRoutes.DEFEND_depot4;
	MapRoutes.DEFEND_depot8 = MapRoutes.DEFEND_depot4;
	MapRoutes.MOUNTMG42_mg42_bank_1 = MapRoutes.DEFEND_depot4;
	MapRoutes.REPAIRMG42_mg42_bank_1 = MapRoutes.DEFEND_depot4;
	MapRoutes.GRENADE_depot_mg = MapRoutes.ATTACK_depot1;
	MapRoutes.REPAIRMG42_mg42_bank = MapRoutes.MOUNTMG42_mg42_bank;
	MapRoutes.DEFEND_mosque2 = MapRoutes.DEFEND_mosque1;
	MapRoutes.DEFEND_mosque3 = MapRoutes.DEFEND_mosque1;
	MapRoutes.DEFEND_mosque4 = MapRoutes.DEFEND_mosque1;
	MapRoutes.PLANT_Right_bridge = MapRoutes.DEFEND_mosque1;
	MapRoutes.CHECKPOINT_rien_du_tout_1 = MapRoutes.BUILD_Boat;
	Util.Routes(MapRoutes);

	Util.FixMoverPos("truck", Vec3(9777.500, 281.120, -108.567), Vec3(9775.000, 332.000, -124.000));

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

global OnBotJoin = function( bot )
{
	bot.TargetBreakableDist = 200.0;
	bot.MaxViewDistance = 3600;
	Map.SetSpawn1(bot);

	foreach (ent in {731, 732, 735, 736}){ //bar speakers
		bot.IgnoreTarget(ent, 9999);
	}
};
