//==========================================================================================
//
//  Quotidian (Beta 2) - quotidian_b2.gm
//
//  Who         When                What
//------------------------------------------------------------------------------------------
//	Mateos		December 2016		Improved Axis defence
//	palota		3rd June 2012		Removed paththrough for breakable
//	palota		16th October 2011	Fixed PLANT_Road_Barrier
//  palota      10th August 2010    Initial Script
//
//==========================================================================================
//

/*
 * TODO:
 *	- 	OnMapLoad: Better defence of Alley Door, Flag and Road Barrier...
 *		Don't let them go through, so no need to defend the whole map on start!
 *	-	Land mine on the snow in the way in front of the flag for Axis.
 *	-	OnMapLoad Allies: Seriously, Arty/Smokebomb goals at the very end?!
 *	-	Disable Defences BUILD goals if the related Truck is already destroyed... PLANT too.
 *	- 	PLANT positions & Cover spots.
 *	- 	Add DEFEND spots for both Depot Gates...
 *	- 	Merge LeaveTug1 and LeaveTug2 (add an extra parameter to indicate which tug).
 *	-	Handle the sneaky door way near the South Fuel Truck... And Sewers for the North one...
 *	-	Landmines (check current locations)! Perhaps mortar, not sure about arty...
 *	-	Handle fixed MG near the CP.
 *	-	Add ways inside defences if they're built but an Allied engi is inside planting.
 *	-	Waypoint the balcony on the building between the Trucks and the West Gate.
 *	-	Add MobileMG42.
 *	-	Train ladder behind South Truck: add a consistent way to get down the railway.
 *	-	Handle the Axis door at the West Gate (disappears once the Gate is destroyed).
 *	-	PLANT_South_Fueltruck reachability issues.
 *
 *	NB:	Sewers & North Depot Gate can be defended all together.
 */

global Map =
{
	Debug = 0, // Please set to zero before distributing your script

    Movers = { "MOVER_tug_1", "MOVER_tug_2" },

	Tug1Pos = 1,
	Tug2Pos = 3,
	cp = 0,
	flag = 1,
	southTruckDestroyed = false,

	isNorthDepotGateDestroyed = false,
	isSouthDepotGateDestroyed = false,

	UseTug = function(_this)
	{
		_this.AddAimRequest(Priority.High, "facing", _this.Facing);
		_this.Bot.MoveTowards(_this.Pos);
		sleep(0.3);
		_this.Bot.PressButton(BTN.USE);
		sleep(1);
	},

	LeaveTug1 = function( _this, from, to )
	{
		if ( Map.Tug1Pos == from )
		{
			dowhile ( Map.Tug1Pos == from )
			{
				Map.UseTug( _this );
			}

			_this.ReleaseAimRequest();
		}

		if ( Map.Tug1Pos != to )
		{
			return false;
		}

		sleep( 1 );

		return true;
	},

	LeaveTug2 = function( _this, from, to )
	{
		if ( Map.Tug2Pos == from )
		{
			dowhile( Map.Tug2Pos == from )
			{
				Map.UseTug( _this );
			}

			_this.ReleaseAimRequest();
		}

		if ( Map.Tug2Pos != to )
		{
			return false;
		}

		sleep( 1 );

		return true;
	},

	RideMovers =
	{
		tug1_north =
		{
			movergoal = "MOVER_tug_1",
			rideposition = Vector3(-16,160,28),
			startwp = "tug1_north",
			exitwp = "tug1_center_north_out",
			board = function(_this)
			{
				if (Map.Tug1Pos != 1){ _this.Finished(); }
				return true;
			},
			leave = function(_this)
			{
				return Map.LeaveTug1(_this,1,2);
			},
		},
		tug1_center_north =
		{
			movergoal = "MOVER_tug_1",
			rideposition = Vector3(-2,-90,28),
			startwp = "tug1_center_north",
			exitwp = "tug1_north_out",
			board = function(_this)
			{
				if (Map.Tug1Pos != 2){ _this.Finished(); }
				return true;
			},
			leave = function(_this)
			{
				return Map.LeaveTug1(_this,2,1);
			},
		},
		tug1_center_south =
		{
			movergoal = "MOVER_tug_1",
			rideposition = Vector3(-25,160,28),
			startwp = "tug1_center_south",
			exitwp = "tug1_south_out",
			board = function(_this)
			{
				if (Map.Tug1Pos != 2){ _this.Finished(); }
				return true;
			},
			leave = function(_this)
			{
				return Map.LeaveTug1(_this,2,3);
			},
		},
		tug1_south =
		{
			movergoal = "MOVER_tug_1",
			rideposition = Vector3(-22,-100,28),
			startwp = "tug1_south",
			exitwp = "tug1_center_south_out",
			board = function(_this)
			{
				if (Map.Tug1Pos != 3){ _this.Finished(); }
				return true;
			},
			leave = function(_this)
			{
				return Map.LeaveTug1(_this,3,2);
			},
		},

		tug2_north =
		{
			movergoal = "MOVER_tug_2",
			rideposition = Vector3(10,70,28),
			startwp = "tug2_north",
			exitwp = "tug2_center_north_out",
			board = function(_this)
			{
				if (Map.Tug2Pos != 1){ _this.Finished(); }
				return true;
			},
			leave = function(_this)
			{
				return Map.LeaveTug2(_this,1,2);
			},
		},
		tug2_center_north =
		{
			movergoal = "MOVER_tug_2",
			rideposition = Vector3(2,-120,28),
			startwp = "tug2_center_north",
			exitwp = "tug2_north_out",
			board = function(_this)
			{
				if (Map.Tug2Pos != 2){ _this.Finished(); }
				return true;
			},
			leave = function(_this)
			{
				return Map.LeaveTug2(_this,2,1);
			},
		},
		tug2_center_south =
		{
			movergoal = "MOVER_tug_2",
			rideposition = Vector3(-27,130,28),
			startwp = "tug2_center_south",
			exitwp = "tug2_south_out",
			board = function(_this)
			{
				if (Map.Tug2Pos != 2){ _this.Finished(); }
				return true;
			},
			leave = function(_this)
			{
				return Map.LeaveTug2(_this,2,3);
			},
		},
		tug2_south =
		{
			movergoal = "MOVER_tug_2",
			rideposition = Vector3(-25,-125,28),
			startwp = "tug2_south",
			exitwp = "tug2_center_south_out",
			board = function(_this)
			{
				if (Map.Tug2Pos != 3){ _this.Finished(); }
				return true;
			},
			leave = function(_this)
			{
				return Map.LeaveTug2(_this,3,2);
			},
		},
	},

	Tug1_North =
	{
		Name = "Tug1_North",
		TriggerOnEntity = GetGoal("MOVER_tug_1").GetEntity(),
		OnEnter = function(ent)
		{
			Map.Tug1Pos = 1;
			Util.MapDebugPrint( "Tug1_North", true );
		},
		OnExit = function(ent) { Map.Tug1Pos = -1; },
	},

	Tug1_Center =
	{
		Name = "Tug1_Center",
		TriggerOnEntity = GetGoal("MOVER_tug_1").GetEntity(),
		OnEnter = function(ent)
		{
			Map.Tug1Pos = 2;
			Util.MapDebugPrint( "Tug1_Center", true );
		},
		OnExit = function(ent) { Map.Tug1Pos = -1; },
	},

	Tug1_South =
	{
		Name = "Tug1_South",
		TriggerOnEntity = GetGoal("MOVER_tug_1").GetEntity(),
		OnEnter = function(ent)
		{
			Map.Tug1Pos = 3;
			Util.MapDebugPrint( "Tug1_South", true );
		},
		OnExit = function(ent) { Map.Tug1Pos = -1; },
	},

	Tug2_North =
	{
		Name = "Tug2_North",
		TriggerOnEntity = GetGoal("MOVER_tug_2").GetEntity(),
		OnEnter = function(ent)
		{
			Map.Tug2Pos = 1;
			Util.MapDebugPrint( "Tug2_North", true );
		},
		OnExit = function(ent) { Map.Tug2Pos = -1; },
	},

	Tug2_Center =
	{
		Name = "Tug2_Center",
		TriggerOnEntity = GetGoal("MOVER_tug_2").GetEntity(),
		OnEnter = function(ent)
		{
			Map.Tug2Pos = 2;
			Util.MapDebugPrint( "Tug2_Center", true );
		},
		OnExit = function(ent) { Map.Tug2Pos = -1; },
	},

	Tug2_South =
	{
		Name = "Tug2_South",
		TriggerOnEntity = GetGoal("MOVER_tug_2").GetEntity(),
		OnEnter = function(ent)
		{
			Map.Tug2Pos = 3;
			Util.MapDebugPrint( "Tug2_South", true );
		},
		OnExit = function(ent) { Map.Tug2Pos = -1; },
	},

	SetPriorities = function()
	{
		alliesAtCommandPost = ( Map.cp == 2 );
		alliesAtStation = ( Map.flag == 3 && !alliesAtCommandPost );
		start = ( Map.flag < 2 && !alliesAtCommandPost );

		SetAvailableMapGoals(TEAM.AXIS, start, "DEFEND_flag.*");
		SetAvailableMapGoals(TEAM.AXIS, !start, {
			"PLANTMINE.*",
			"BUILD.*",
		});
		SetAvailableMapGoals(TEAM.AXIS, !start && !Map.southTruckDestroyed, "PLANTMINE_south.*");
		SetAvailableMapGoals(TEAM.AXIS, !start && !alliesAtCommandPost, "DEFEND_cp.*");
		SetAvailableMapGoals(TEAM.AXIS, alliesAtStation, {
			".*MG42.*_bank.*",
			".*railway.*",
		});
		SetAvailableMapGoals(TEAM.AXIS, alliesAtCommandPost, "SNIPE_tower.*");
		SetAvailableMapGoals(TEAM.AXIS, !alliesAtCommandPost, {
			"BUILD_Alley_Door",
			"PLANTMINE_AlleyDoor.*",
		});
		SetAvailableMapGoals(TEAM.AXIS, alliesAtStation || alliesAtCommandPost, {
			"BUILD_Neutral_Command_Post",
			"PLANT_Neutral_Command_Post",
		});

		SetAvailableMapGoals(TEAM.ALLIES, !alliesAtCommandPost, "PLANT_Alley_Door");
		SetAvailableMapGoals(TEAM.ALLIES, !start, "MOBILEMG42.*");

		// Train Station flag priority depending on the situation for Axis
		if ( Map.flag == 2 )
		{
			// Above DEFEND and PLANTMINE
			SetGoalPriority( "CHECKPOINT_forward_flag", 0.80 );
		}
		else
		{
			SetGoalPriority( "CHECKPOINT_forward_flag", 0.70 );
		}

		// Increase Axis defence of the CP if pushed back
		if ( alliesAtStation || alliesAtCommandPost )
		{
			SetGoalPriority("DEFEND_cp.*", 0.52, TEAM.AXIS);
		}
		else
		{
			SetGoalPriority("DEFEND_cp.*", 0.50, TEAM.AXIS);
		}

		if ( !start && Map.isNorthDepotGateDestroyed )
		{
			SetGoalPriority("DEFEND_n_truck.*", 0.53, TEAM.AXIS);
		}

		if ( !start && Map.isSouthDepotGateDestroyed )
		{
			SetGoalPriority("DEFEND_s_truck.*", 0.53, TEAM.AXIS);
		}
	},

	SetSpawn1 = function( bot )
	{
		// 1-train station, 2-allies, 3-axis, 4-command post
		if ( bot.GetTeam() == TEAM.ALLIES )
		{
			if ( Map.cp == 2 )
			{
				bot.ChangeSpawnPoint(4);
			}
			else if ( Map.flag == 2 )
			{
				bot.ChangeSpawnPoint(1);
			}
			else
			{
				bot.ChangeSpawnPoint(0);
			}
		}
	},

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

	forward_flag_Axis_Captured = function( trigger )
	{
		Map.flag = 1;
		Map.SetSpawn();
		Map.SetPriorities();
		Util.MapDebugPrint("forward_flag_Axis_Captured");
	},

	forward_flag_Allies_Captured = function( trigger )
	{
		Map.flag = 2;
		Map.SetSpawn();
		Map.SetPriorities();
		Util.MapDebugPrint("forward_flag_Allies_Captured");
	},

	Command_Post_Axis = function( trigger )
	{
		Map.cp = 1;
		Map.SetSpawn();
		Util.MapDebugPrint("Command_Post_Axis");
	},

	Command_Post_Allies = function( trigger )
	{
		Map.cp = 2;
		Map.SetSpawn();
		Util.MapDebugPrint("Command_Post_Allies");
	},

	Command_Post_Destroyed = function( trigger )
	{
		Map.cp = 0;
		Map.SetSpawn();
		Util.MapDebugPrint("Command_Post_Destroyed");
	},

	Road_Barrier_Destroyed = function( trigger )
	{
		Map.flag = 3;
		Map.SetPriorities();
		Util.SetMaxUsersInProgress(2, "BUILD_Neutral_Command_Post");
		Util.EnableGoal("ROUTE_barrier");
		Util.MapDebugPrint("Road_Barrier_Destroyed");
	},

	Alley_Door_Built = function( trigger )
	{
		Util.DisableGoal("ROUTE_alley_door");
		Util.MapDebugPrint("Alley_Door_Built");
	},

	Alley_Door_Destroyed = function( trigger )
	{
		Util.EnableGoal("ROUTE_alley_door");
		Util.MapDebugPrint("Alley_Door_Destroyed");
	},

	Sewer_Grate_Destroyed = function( trigger )
	{
		Util.EnableGoal("ROUTE_sewer");
		Util.MapDebugPrint("Sewer_Grate_Destroyed");
	},

	North_Depot_Gate_Destroyed = function( trigger )
	{
		Map.isNorthDepotGateDestroyed = true;

		Map.SetPriorities();
		Util.EnableGoal("ROUTE_north_depot_gate");
		Util.MapDebugPrint("North_Depot_Gate_Destroyed");
	},

	West_Depot_Gate_Destroyed = function( trigger )
	{
		Map.isSouthDepotGateDestroyed = true;

		Map.SetPriorities();
		Util.EnableGoal("ROUTE_west_depot_gate");
		Util.MapDebugPrint("West_Depot_Gate_Destroyed");
	},

	North_Defences_Built = function( trigger )
	{
		SetAvailableMapGoals(TEAM.ALLIES, false, "PLANT_North_Fueltruck");	// TODO: Check availability
		Util.MapDebugPrint("North_Defences_Built");
	},

	North_Defences_Destroyed = function( trigger )
	{
		SetAvailableMapGoals(TEAM.ALLIES, true, "PLANT_North_Fueltruck");	// TODO: Check availability
		Util.MapDebugPrint("North_Defences_Destroyed");
	},

	South_Defences_Built = function( trigger )
	{
		SetAvailableMapGoals(TEAM.ALLIES, false, "PLANT_South_Fueltruck");	// TODO: Check availability
		Util.MapDebugPrint("South_Defences_Built");
	},

	South_Defences_Destroyed = function( trigger )
	{
		SetGoalPriority("DEFEND_railway.*", 0.5, TEAM.AXIS);
		SetAvailableMapGoals(TEAM.ALLIES, true, "PLANT_South_Fueltruck");	// TODO: Check availability
		Util.MapDebugPrint("South_Defences_Destroyed");
	},

	North_Fueltruck_Destroyed = function( trigger )
	{
		Util.DisableGoal(".*n_truck.*");
		Util.DisableGoal(".*_North_Truck_Defences");
		Util.MapDebugPrint("North_Fueltruck_Destroyed");
	},

	South_Fueltruck_Destroyed = function( trigger )
	{
		Map.southTruckDestroyed = true;
		Map.SetPriorities();
		Util.DisableGoal(".*s_truck.*");
		Util.DisableGoal(".*South_Truck_Defences");
		Util.MapDebugPrint("South_Fueltruck_Destroyed");
	},

	TwoMinute = function( trigger )
	{
		if ( GetGameTimeLeft() > 0 )
		{
			SetGoalPriority("PLANT_.*_Fueltruck", 0.91);
			SetGoalPriority("PLANT_Neutral_Command_Post", 0.69);

			Util.MapDebugPrint( "TwoMinute" );
		}
	},
};

global OnMapLoad = function()
{
	OnTrigger("Axis have reclaimed the Trainstation", Map.forward_flag_Axis_Captured);
	OnTrigger("Allies have captured the Trainstation!", Map.forward_flag_Allies_Captured);
	OnTrigger("Axis team has built the Alley Door!", Map.Alley_Door_Built);
	OnTrigger("Allied team has destroyed the Alley Door!", Map.Alley_Door_Destroyed);
	OnTrigger("Axis Command Post constructed. Charge speed increased! Spawnpoint gaine"/*d!*/, Map.Command_Post_Axis);
	OnTrigger("Allied Command Post constructed. Charge speed increased! Spawnpoint gai"/*ned!*/, Map.Command_Post_Allies);
	OnTrigger("Axis team has destroyed the Allied Command Post! Charge speed restored!"/* Spawnpoint lost!*/, Map.Command_Post_Destroyed);
	OnTrigger("Allied team has destroyed the Axis Command Post! Charge speed restored!"/* Spawnpoint lost!*/, Map.Command_Post_Destroyed);
	OnTrigger("Allies have destroyed the Road Barrier!", Map.Road_Barrier_Destroyed);
	OnTrigger("Allies have breached the Sewer Grate!", Map.Sewer_Grate_Destroyed);
	OnTrigger("Allies have destroyed the North Depot Gates!", Map.North_Depot_Gate_Destroyed);
	OnTrigger("Allies have destroyed the West Depot Gates!", Map.West_Depot_Gate_Destroyed);
	OnTrigger("Axis team has built the North Truck Defences", Map.North_Defences_Built);
	OnTrigger("Allied team has destroyed the North Truck Defences!", Map.North_Defences_Destroyed);
	OnTrigger("Axis team has built the South Truck Defences!", Map.South_Defences_Built);
	OnTrigger("Allied team has destroyed the South Truck Defences!", Map.South_Defences_Destroyed);
	OnTrigger("Allies have destroyed the North Fueltruck!", Map.North_Fueltruck_Destroyed);
	OnTrigger("Allies have destroyed the South Fueltruck!", Map.South_Fueltruck_Destroyed);
	OnTrigger("two minute warning.", Map.TwoMinute);

	// Train tugs triggers
	OnTriggerRegion(AABB(-466,4003,-202,-366,4023,-102),Map.Tug1_North);
	OnTriggerRegion(AABB(-52,-547,-202,52,-527,-102),Map.Tug1_Center);
	OnTriggerRegion(AABB(5604,-7900,-202,5624,-7800,-102),Map.Tug1_South);
	OnTriggerRegion(AABB(621,4017,-202,721,4037,-102),Map.Tug2_North);
	OnTriggerRegion(AABB(204,-533,-202,304,-513,-102),Map.Tug2_Center);
	OnTriggerRegion(AABB(3534,-7648,-202,3554,-7548,-102),Map.Tug2_South);

	Util.DisableGoal(".*_Tug_.*");
	SetAvailableMapGoals(TEAM.AXIS, false, {
		"ATTACK.*",
		"AIRSTRIKE.*",
		"SMOKE.*",
	});
	SetAvailableMapGoals(TEAM.ALLIES, false, {
		"DEFEND.*",
		"SNIPE.*",
		"PLANTMINE.*",
	});

	Util.DisableGoal(".*MG42.*");
	Util.DisableGoal("ROUTE_barrier");
	Util.DisableGoal("ROUTE_alley_door");
	Util.DisableGoal("ROUTE_sewer");
	Util.DisableGoal("ROUTE_north_depot_gate");
	Util.DisableGoal("ROUTE_west_depot_gate");

	SetGoalPriority("CHECKPOINT_forward_flag", 0.85, TEAM.ALLIES);
	SetGoalPriority("PLANT_Alley_Door", 0.86, TEAM.ALLIES);
	SetGoalPriority("PLANT_Road_Barrier", 0.89, TEAM.ALLIES);
	SetGoalPriority("PLANT_.*Truck_Defences", 0.8, TEAM.ALLIES, CLASS.ENGINEER);

	SetGoalPriority("BUILD_Alley_Door", 0.85, TEAM.AXIS);
	SetGoalPriority("DEFEND_flag10", 0.60, TEAM.AXIS);
	SetGoalPriority("DEFEND_flag[8,9]", 0.60, TEAM.AXIS);
	SetGoalPriority("DEFEND_flag[1-7]", 0.59, TEAM.AXIS);
	SetGoalPriority("DEFEND_railway.*", 0.51, TEAM.AXIS);
	SetGoalPriority("DEFEND_n_truck8", 0.50, TEAM.AXIS);	// Goal with weapon restrictions, its priority was raised to 0.7
	SetGoalPriority("MOUNT.*", 0.50, TEAM.AXIS, CLASS.COVERTOPS);
	SetGoalPriority("PLANT_Neutral_Command_Post", 0.79, TEAM.AXIS, CLASS.ENGINEER);

	Map.SetPriorities();

	Util.SetMaxUsersInProgress(1, ".*MG42.*");
	Util.SetMaxUsersInProgress(1, ".*_Command_Post");
	Util.SetMaxUsersInProgress(1, "BUILD_Alley_Door");
	Util.SetMaxUsersInProgress(1, "DEFEND_.*");

	SetMapGoalProperties("DEFEND_.*", {mincamptime=70, maxcamptime=300} );
	SetMapGoalProperties("MOUNTMG42.*", {mincamptime=50, maxcamptime=300} );
	SetMapGoalProperties("SNIPE_.*", {mincamptime=90, maxcamptime=300} );
	SetMapGoalProperties("MOBILEMG42_.*", {MinCampTime=60, MaxCampTime=300} );

	Util.SetGoalPosition(-1536, 5301, 102, "PLANT_Road_Barrier"); // Entity bounds were ok in quotidian_b1, but are broken in quotidian_b2

	Util.MapDebugPrint( "Omni-bot 0.8x map script for Quotidian (Beta 2) by palota" );
};

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

	Map.SetSpawn1( bot );

	// Cars
	foreach ( ent in { 393, 398, 400, 401 } )
	{
		bot.IgnoreTarget( ent, 99999 );
	}
};

global InitializeRoutes = function()
{
	MapRoutes =
	{
		CHECKPOINT_forward_flag = {
			ROUTE_allies_spawn = {
				ROUTE_allies1 = {},
				ROUTE_allies2 = {},
				ROUTE_allies3 = {},
				ROUTE_allies4 = {},
				ROUTE_allies5 = {},
				ROUTE_allies6 = {},
			},
			ROUTE_cp_spawn = {
				ROUTE_axis_north = { Weight = 2 },
				ROUTE_barrier = {},
				ROUTE_train_west = {},
				ROUTE_train_east = {},
			},
		},

		BUILD_Neutral_Command_Post = {
			ROUTE_allies_spawn = {
				ROUTE_train_west = {},
				ROUTE_train_east = {},
				ROUTE_alley_door = { Weight=4 },
			}
		},

		PLANT_North_Fueltruck = {
			ROUTE_flag_spawn = {
				ROUTE_train_west = {},
				ROUTE_train_east = {},
				ROUTE_alley_door = { Weight=2 },
				ROUTE_barrier = { Weight=3,
					ROUTE_mg = { ROUTE_cp_back = {} },
					ROUTE_mg2 = {},
				},
			},
			ROUTE_cp_spawn = {
				ROUTE_sewer = { Weight=2 },
				ROUTE_north_depot_gate = {},
				ROUTE_west_depot_gate = {},
			},
		},

		PLANT_South_Fueltruck = {
			ROUTE_cp_spawn = {
				ROUTE_north_depot_gate = {},
				ROUTE_center = {
					ROUTE_south_ladder = {},
					ROUTE_west_depot_gate = {},
				},
				ROUTE_south_west = {
					ROUTE_south_ladder = {},
					ROUTE_west_depot_gate = {},
				},
			},
		},
	};

	MapRoutes.PLANT_North_Truck_Defences = MapRoutes.PLANT_North_Fueltruck;
	MapRoutes.ATTACK_n_truck1 = MapRoutes.PLANT_North_Fueltruck;
	MapRoutes.ATTACK_n_truck2 = MapRoutes.ATTACK_n_truck1;
	MapRoutes.MOBILEMG42_n_truck = MapRoutes.ATTACK_n_truck1;
	MapRoutes.AIRSTRIKE_n_truck = MapRoutes.ATTACK_n_truck1;
	MapRoutes.PLANT_South_Truck_Defences = MapRoutes.PLANT_South_Fueltruck;
	MapRoutes.ATTACK_s_truck1 = MapRoutes.PLANT_South_Fueltruck;
	MapRoutes.ATTACK_s_truck2 = MapRoutes.ATTACK_s_truck1;
	MapRoutes.MOBILEMG42_s_truck = MapRoutes.ATTACK_s_truck1;
	MapRoutes.AIRSTRIKE_s_truck = MapRoutes.ATTACK_s_truck1;
	MapRoutes.PLANT_South_Fueltruck.ROUTE_flag_spawn = MapRoutes.PLANT_North_Fueltruck.ROUTE_flag_spawn;

	Util.Routes(MapRoutes);
};
