//==========================================================================================
//
//	ammodepot.gm
//
//	Who      	When			What
//------------------------------------------------------------------------------------------
//	Qiki		29 December 2012	Initial Script
//	Native12	02.03.2013		Ready to test
//	Native12	10.03.2013		Added goals and more improvements....
//	Bugs and suggestions: PM on http://www.omni-bot.com/forum/index.php
//
//	Associated files:	ammodepot.way		119 kB (122 550 b)
//				ammodepot_goals.gm	72,7 kB (74 511 b)
//
//==========================================================================================
//

global Map =
{
	Allied_MG42_Dyno = 0,
	Ammo_Shipment_Dyno = 0,
	Anttena_Base_Dyno = 0,
	Bunker_entrance_Dyno = 0,
	Command_Post_Dyno = 0,
	Depot_gates_Dyno = 0,
	East_Anti_Tank_Door_Dyno = 0,
	Sand_Barricade_Dyno = 0,
	West_Anti_Tank_Door_Dyno = 0,
	AmmoShipment_Destroyed = false,
	AnttenaBase_Destroyed = false,
	East_AntiTankDoor_Destroyed = false,
	West_AntiTankDoor_Destroyed = false,
	Allies_Near_Sand_Barrier = 0,
	Allies_BackSide_Sand_Barrier = 0,
	Allies_Entered_Into_Depot = 0,
	Axis_CP = false,
	Allied_CP = false,
	AlliedMG42_Built = false,
	SandBarricade_Door_closed = true,
	SandBarricade_Door_opened = false,
	SandBarricade_Door_closing = false,
	Depot_Door_closed = true,
	Depot_Door_opened = false,
	Depot_Door_closing = false,
	Allies_OnTheTopOf_Hill = 0,
	AlliedEng_Entered_Into_Depot = 0,
	AxisEng_OnTheTopOf_Hill = 0,

	BunkerEntrance_Built = false,
	AmmoShipment_Planted = false,
	AnttenaBase_Planted = false,
	DepotGates_Planted = false,
	DepotGates_Built = false,
	Grille1Exploded = false,
	Grille2Exploded = false,
	Grille3Exploded = false,
	Grille4Exploded = false,

	Roles =
	{
		AXIS =
		{
			AllBots = true,
			DEFENDER =
			{
				numbots = 8,
			},
		},
	},

	Navigation =
	{
		//  	/bot waypoint_setproperty paththrough Navigation_PT:ladder
		ladder =
		{
			navigate = function(_this)
			{
				wpTable = {};
				Wp.GetWaypointByName("Ladder", wpTable);
				if ( _this.Goto(wpTable.position) == EVENT.PATH_SUCCESS )
				{
					_this.AddAimRequest(Priority.VeryHigh, "facing", wpTable.facing);
					yield();
					_this.Bot.HoldButton(BTN.BACKWARD, 3);
					sleep(3);
					_this.ReleaseAimRequest();
				}
			},
		},

		//  	/bot waypoint_setproperty paththrough Navigation_PT:rs
		rs =
		{
			navigate = function(_this)
			{
				wpTable = {};
				Wp.GetWaypointByName("RS", wpTable);
				if ( _this.Goto(wpTable.position) == EVENT.PATH_SUCCESS )
				{
					_this.AddAimRequest(Priority.VeryHigh, "facing", wpTable.facing);
					sleep(0.5);
					_this.Bot.HoldButton(BTN.FORWARD, 2.3);
					_this.Bot.HoldButton(BTN.CROUCH, 2.3);
					sleep(2.3);
					_this.AddAimRequest(Priority.VeryHigh, "facing", Vector3(0.552366, 0.746423, -0.371139));
					_this.Bot.HoldButton(BTN.FORWARD, 0.35);
					sleep(0.35);
					_this.ReleaseAimRequest();
				}
			},
		},

		//  	/bot waypoint_setproperty paththrough Navigation_PT:ls
		ls =
		{
			navigate = function(_this)
			{
				wpTable = {};
				Wp.GetWaypointByName("LS", wpTable);
				if ( _this.Goto(wpTable.position) == EVENT.PATH_SUCCESS )
				{
					_this.AddAimRequest(Priority.VeryHigh, "facing", wpTable.facing);
					sleep(0.5);
					_this.Bot.HoldButton(BTN.FORWARD, 2);
					_this.Bot.HoldButton(BTN.CROUCH, 2);
					sleep(2);
					_this.AddAimRequest(Priority.VeryHigh, "facing", Vector3(0.008662, -0.982070, -0.188315));
					_this.Bot.HoldButton(BTN.FORWARD, 0.2);
					sleep(0.2);
					_this.ReleaseAimRequest();
				}
			},
		},

		//  	/bot waypoint_setproperty paththrough Navigation_PT:axis_door
		axis_door =
		{
			navigate = function(_this)
			{
				wpTable = {};
				Wp.GetWaypointByName("open_SandBar_door", wpTable);
				if ( _this.Goto(wpTable.position) == EVENT.PATH_SUCCESS )
				{
					if ( Map.SandBarricade_Door_opened )
					{
						//print("^8navigate SandBarr_door - door is open");
						_this.AddAimRequest(Priority.High, "facing", Vector3(-0.973820,-0.219856,-0.057780));
						_this.Bot.HoldButton(BTN.SPRINT, 1);
						_this.Bot.HoldButton(BTN.FORWARD, 1);
						sleep(1);
						_this.ReleaseAimRequest();
					}
					else if ( Map.SandBarricade_Door_closing )
					{
						//print("^8navigate SandBarr_door - door is closing");
						while( Map.SandBarricade_Door_closing )
						{
							yield();
						}
						sleep(0.2);

						//print("^8navigate SandBarr_door - door ready to open");

						while( Map.SandBarricade_Door_closed )
						{
							_this.AddAimRequest(Priority.High, "position", Vector3(579.107300, -3909.125000, 360.125000));
							_this.AddAimRequest(Priority.High, "facing", Vector3(-0.999342, 0.028368, -0.022624));
							sleep(0.2);
							_this.Bot.PressButton(BTN.USE);
							sleep(0.1);
						}
						yield();
						_this.ReleaseAimRequest();
						_this.AddAimRequest(Priority.High, "facing", Vector3(-0.973820,-0.219856,-0.057780));
						_this.Bot.HoldButton(BTN.SPRINT, 1);
						_this.Bot.HoldButton(BTN.FORWARD, 1);
						sleep(1);
						_this.ReleaseAimRequest();
					}
					else	//( Map.SandBarricade_Door_closed )
					{
						//print("^8navigate SandBarr_door - door is closed");
						_this.AddAimRequest(Priority.High, "position", Vector3(579.107300, -3909.125000, 360.125000));
						_this.AddAimRequest(Priority.High, "facing", Vector3(-0.999342, 0.028368, -0.022624));

						while( Map.SandBarricade_Door_closed )
						{
							_this.AddAimRequest(Priority.High, "position", Vector3(579.107300, -3909.125000, 360.125000));
							_this.AddAimRequest(Priority.High, "facing", Vector3(-0.999342, 0.028368, -0.022624));
							sleep(0.2);
							_this.Bot.PressButton(BTN.USE);
							sleep(0.1);
						}
						yield();
						_this.ReleaseAimRequest();
						_this.AddAimRequest(Priority.High, "facing", Vector3(-0.973820,-0.219856,-0.057780));
						_this.Bot.HoldButton(BTN.SPRINT, 1);
						_this.Bot.HoldButton(BTN.FORWARD, 1);
						sleep(1);
						_this.ReleaseAimRequest();
					}
				}
			},
		},
		//  	/bot waypoint_setproperty paththrough Navigation_PT:axis_door_1
		axis_door_1 =
		{
			navigate = function(_this)
			{
				wpTable = {};
				Wp.GetWaypointByName("open_Depot_door", wpTable);
				if ( _this.Goto(wpTable.position) == EVENT.PATH_SUCCESS )
				{
					if ( Map.Depot_Door_opened )
					{
						//print("^8navigate Depot_door - door is open");
						_this.AddAimRequest(Priority.High, "facing", Vector3(-0.996921, -0.075652, 0.020611));
						_this.Bot.HoldButton(BTN.SPRINT, 1);
						_this.Bot.HoldButton(BTN.FORWARD, 1);
						sleep(1);
						_this.ReleaseAimRequest();
					}
					else if ( Map.Depot_Door_closing )
					{
						//print("^8navigate Depot_door - door is closing");
						while( Map.Depot_Door_closing )
						{
							yield();
						}
						sleep(0.2);

						//print("^8navigate Depot_door - door ready to open");

						while( Map.Depot_Door_closed )
						{
							_this.AddAimRequest(Priority.High, "position", Vector3(2022.752930, -3538.125977, 316.125000));
							_this.AddAimRequest(Priority.High, "facing", Vector3(-0.996921, -0.075652, 0.020611));
							sleep(0.2);
							_this.Bot.PressButton(BTN.USE);
							sleep(0.1);
						}
						yield();
						_this.ReleaseAimRequest();
						_this.AddAimRequest(Priority.High, "facing", Vector3(-0.996921, -0.075652, 0.020611));
						_this.Bot.HoldButton(BTN.SPRINT, 1);
						_this.Bot.HoldButton(BTN.FORWARD, 1);
						sleep(1);
						_this.ReleaseAimRequest();
					}
					else	//( Map.Depot_Door_closed )
					{
						//print("^8navigate Depot_door - door is closed");
						_this.AddAimRequest(Priority.High, "position", Vector3(2022.752930, -3538.125977, 316.125000));
						_this.AddAimRequest(Priority.High, "facing", Vector3(-0.996921, -0.075652, 0.020611));

						while( Map.Depot_Door_closed )
						{
							_this.AddAimRequest(Priority.High, "position", Vector3(2022.752930, -3538.125977, 316.125000));
							_this.AddAimRequest(Priority.High, "facing", Vector3(-0.996921, -0.075652, 0.020611));
							sleep(0.2);
							_this.Bot.PressButton(BTN.USE);
							sleep(0.1);
						}
						yield();
						_this.ReleaseAimRequest();
						_this.AddAimRequest(Priority.High, "facing", Vector3(-0.996921, -0.075652, 0.020611));
						_this.Bot.HoldButton(BTN.SPRINT, 1);
						_this.Bot.HoldButton(BTN.FORWARD, 1);
						sleep(1);
						_this.ReleaseAimRequest();
					}
				}
			},
		},
		//  	/bot waypoint_setproperty paththrough Navigation_PT:hill
		hill =
		{
			navigate = function(_this)
			{
				wpTable = {};
				Wp.GetWaypointByName("HILL", wpTable);
				if ( _this.Goto(wpTable.position) == EVENT.PATH_SUCCESS )
				{
					_this.AddAimRequest(Priority.VeryHigh, "facing", wpTable.facing);
					yield();
					_this.Bot.HoldButton(BTN.SPRINT, 1);
					_this.Bot.HoldButton(BTN.STRAFE_L, 1);
					_this.Bot.HoldButton(BTN.FORWARD, 1);
					sleep(1);
					_this.ReleaseAimRequest();
				}
			},
		},

	},

	East_Anti_Tank_Door_Planted = function( trigger )
	{

		Map.East_Anti_Tank_Door_Dyno += 1;

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

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

	East_Anti_Tank_Door_Defused = function( trigger )
	{

		Map.East_Anti_Tank_Door_Dyno -= 1;

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

	East_Anti_Tank_Door_Destroyed = function( trigger )
	{

		Map.East_Anti_Tank_Door_Dyno = 0;
		Map.East_AntiTankDoor_Destroyed = true;

		Wp.SetWaypointFlag( "Jump_to_gates", "closed", true );

		Util.EnableGoal( "ROUTE_EastDoor" );

		Util.MapDebugPrint( "^5East_Anti_Tank_Door_Destroyed" );

		if ( !Map.West_AntiTankDoor_Destroyed )
		{
			if ( ETUtil.CountClass( TEAM.AXIS, CLASS.SOLDIER ) > 1 )
			{
				WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.PANZERFAUST, true );
			}

			SetAvailableMapGoals( TEAM.AXIS, false, {
				"BUILD_Command_Post",
				"MOBILEMORTAR_Axis_Start_03",
			});

			GetGoal("MOBILEMORTAR_Axis_Start_03").MortarAim =
			{ Vec3(-0.952, 0.204, 0.228), Vec3(-0.890, -0.276, 0.363), Vec3(-0.923, -0.088, 0.363), Vec3(-0.883, -0.372, 0.287), Vec3(-0.889, -0.377, 0.259), Vec3(-0.937, 0.216, 0.275), Vec3(-0.925, 0.265, 0.283), Vec3(-0.928, 0.194, 0.318), Vec3(-0.939, 0.089, 0.331) };

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

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"DEFEND_Axis_SandBarrier_05",
				"DEFEND_Axis_SandBarrier_06",
				"SMOKEBOMB_Axis_SandBarrier_07",
				"AIRSTRIKE_Axis_SandBarrier_08",
			});
			sleep(1);
			SetAvailableMapGoals( TEAM.AXIS, true, "MOBILEMORTAR_Axis_Start_03" );

			sleep(1);

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

			SetAvailableMapGoals( TEAM.ALLIES, true, {
				"PLANT_FrontSide_SandBarricade",
				"AMMOCAB_south_ammocabinet_1",
				"HEALTHCAB_south_healthcabinet_1",
				"BUILD_Allied_MG42",
				"ATTACK_Allies_SandBarrier_.*",
			});

			if ( !Map.Allied_CP and !Map.Axis_CP )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Command_Post" );
			}
			else if ( Map.Axis_CP )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Command_Post" );
			}
		}
		else
		{
			if ( !Map.Sand_BarricadeDestroyed )
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "MOBILEMORTAR_Axis_Start_03" );
				GetGoal("MOBILEMORTAR_Axis_Start_03").MortarAim =
				{ Vec3(-0.890, -0.276, 0.363), Vec3(-0.923, -0.088, 0.363), Vec3(-0.883, -0.372, 0.287), Vec3(-0.889, -0.377, 0.259), Vec3(-0.937, 0.216, 0.275), Vec3(-0.925, 0.265, 0.283), Vec3(-0.928, 0.194, 0.318), Vec3(-0.939, 0.089, 0.331) };
				sleep(1);
				SetAvailableMapGoals( TEAM.AXIS, true, "MOBILEMORTAR_Axis_Start_03" );
			}
		}
	},

	West_Anti_Tank_Door_Planted = function( trigger )
	{

		Map.West_Anti_Tank_Door_Dyno += 1;

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

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

	West_Anti_Tank_Door_Defused = function( trigger )
	{

		Map.West_Anti_Tank_Door_Dyno -= 1;

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

	West_Anti_Tank_Door_Destroyed = function( trigger )
	{

		Map.West_Anti_Tank_Door_Dyno = 0;
		Map.West_AntiTankDoor_Destroyed = true;

		Wp.SetWaypointFlag( "Jump_to_gates", "closed", true );

		Util.EnableGoal( "ROUTE_WestDoor" );

		Util.MapDebugPrint( "^5West_Anti_Tank_Door_Destroyed" );

		if ( !Map.East_AntiTankDoor_Destroyed )
		{
			if ( ETUtil.CountClass( TEAM.AXIS, CLASS.SOLDIER ) > 1 )
			{
				WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.PANZERFAUST, true );
			}

			SetAvailableMapGoals( TEAM.AXIS, false, {
				"BUILD_Command_Post",
				"MOBILEMORTAR_Axis_Start_03",
			});

			GetGoal("MOBILEMORTAR_Axis_Start_03").MortarAim =
			{ Vec3(-0.914, -0.343, 0.215), Vec3(-0.890, -0.276, 0.363), Vec3(-0.923, -0.088, 0.363), Vec3(-0.883, -0.372, 0.287), Vec3(-0.889, -0.377, 0.259), Vec3(-0.937, 0.216, 0.275), Vec3(-0.925, 0.265, 0.283), Vec3(-0.928, 0.194, 0.318), Vec3(-0.939, 0.089, 0.331) };

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

			SetAvailableMapGoals( TEAM.AXIS, true, {
				"DEFEND_Axis_SandBarrier_05",
				"DEFEND_Axis_SandBarrier_06",
				"SMOKEBOMB_Axis_SandBarrier_07",
				"AIRSTRIKE_Axis_SandBarrier_08",
			});
			sleep(1);
			SetAvailableMapGoals( TEAM.AXIS, true, "MOBILEMORTAR_Axis_Start_03" );

			sleep(1);

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

			SetAvailableMapGoals( TEAM.ALLIES, true, {
				"PLANT_FrontSide_SandBarricade",
				"AMMOCAB_south_ammocabinet_1",
				"HEALTHCAB_south_healthcabinet_1",
				"BUILD_Allied_MG42",
				"ATTACK_Allies_SandBarrier_.*",
			});

			if ( !Map.Allied_CP and !Map.Axis_CP )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Command_Post" );
			}
			else if ( Map.Axis_CP )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Command_Post" );
			}
		}
		else
		{
			if ( !Map.Sand_BarricadeDestroyed )
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "MOBILEMORTAR_Axis_Start_03" );
				GetGoal("MOBILEMORTAR_Axis_Start_03").MortarAim =
				{ Vec3(-0.890, -0.276, 0.363), Vec3(-0.923, -0.088, 0.363), Vec3(-0.883, -0.372, 0.287), Vec3(-0.889, -0.377, 0.259), Vec3(-0.937, 0.216, 0.275), Vec3(-0.925, 0.265, 0.283), Vec3(-0.928, 0.194, 0.318), Vec3(-0.939, 0.089, 0.331) };
				sleep(1);
				SetAvailableMapGoals( TEAM.AXIS, true, "MOBILEMORTAR_Axis_Start_03" );
			}
		}
	},

	Grille_1_Exploded = function( trigger )
	{

		Util.MapDebugPrint( "^5Grille_1_Exploded" );

		Map.Grille1Exploded = true;

		if ( Map.Grille1Exploded and Map.Grille2Exploded and Map.Grille3Exploded and Map.Grille4Exploded )
		{
			Util.EnableGoal( "ROUTE_Grille.*" );
			Util.EnableGoal( "ROUTE_SeaSpawn.*" );

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

			if ( !Map.Sand_BarricadeDestroyed and Map.DepotGates_Built )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Depot_gates" );
			}
		}

		sleep(1.5);

		if ( !Map.Grille2Exploded )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "GRENADE_Grille_2" );
		}
	},

	Grille_2_Exploded = function( trigger )
	{

		Util.MapDebugPrint( "^5Grille_2_Exploded" );

		Map.Grille2Exploded = true;

		if ( Map.Grille1Exploded and Map.Grille2Exploded and Map.Grille3Exploded and Map.Grille4Exploded )
		{
			Util.EnableGoal( "ROUTE_Grille.*" );
			Util.EnableGoal( "ROUTE_SeaSpawn.*" );

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

			if ( !Map.Sand_BarricadeDestroyed and Map.DepotGates_Built )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Depot_gates" );
			}
		}

		sleep(1.5);

		if ( !Map.Grille3Exploded )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "GRENADE_Grille_3" );
		}
	},

	Grille_3_Exploded = function( trigger )
	{

		Util.MapDebugPrint( "^5Grille_3_Exploded" );

		Map.Grille3Exploded = true;

		if ( Map.Grille1Exploded and Map.Grille2Exploded and Map.Grille3Exploded and Map.Grille4Exploded )
		{
			Util.EnableGoal( "ROUTE_Grille.*" );
			Util.EnableGoal( "ROUTE_SeaSpawn.*" );

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

			if ( !Map.Sand_BarricadeDestroyed and Map.DepotGates_Built )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Depot_gates" );
			}
		}

		sleep(1.5);

		if ( !Map.Grille4Exploded )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "GRENADE_Grille_4" );
		}
	},

	Grille_4_Exploded = function( trigger )
	{

		Map.Grille4Exploded = true;

		if ( Map.Grille1Exploded and Map.Grille2Exploded and Map.Grille3Exploded and Map.Grille4Exploded )
		{
			Util.EnableGoal( "ROUTE_Grille.*" );
			Util.EnableGoal( "ROUTE_SeaSpawn.*" );

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

			if ( !Map.Sand_BarricadeDestroyed and Map.DepotGates_Built )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Depot_gates" );
			}
		}

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

	Axis_CP_Built = function( trigger )
	{

		Map.Axis_CP = true;

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

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

		if ( Map.East_AntiTankDoor_Destroyed or Map.West_AntiTankDoor_Destroyed )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Command_Post" );
		}
		else
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Command_Post" );
		}

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

	Allied_CP_Built = function( trigger )
	{

		Map.Allied_CP = true;

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

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

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

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

	Command_Post_Planted = function( trigger )
	{

		Map.Command_Post_Dyno += 1;

		Util.DisableGoal( "DEFUSE_Command_Post_.*" );

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

	Command_Post_Defused = function( trigger )
	{

		Map.Command_Post_Dyno -= 1;

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

	Axis_CP_Destroyed = function( trigger )
	{

		if ( !Map.East_AntiTankDoor_Destroyed and !Map.West_AntiTankDoor_Destroyed and !Map.Sand_BarricadeDestroyed )
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Command_Post" );
		}

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

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

	Allied_CP_Destroyed = function( trigger )
	{

		if ( !Map.East_AntiTankDoor_Destroyed and !Map.West_AntiTankDoor_Destroyed and !Map.Sand_BarricadeDestroyed )
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Command_Post" );
		}

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

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

	Allied_MG42_Built = function( trigger )
	{

		Map.AlliedMG42_Built = true;

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

		if ( !Map.Sand_BarricadeDestroyed )
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Allied_MG42" );

			SetAvailableMapGoals( TEAM.ALLIES, true, {
				"MOUNTMG42_Allied_MG42",
				"REPAIRMG42_Allied_MG42",
			});
		}

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

	Allied_MG42_Planted = function( trigger )
	{

		Map.Allied_MG42_Dyno += 1;

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

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

	Allied_MG42_Defused = function( trigger )
	{

		Map.Allied_MG42_Dyno -= 1;

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

	Allied_MG42_Destroyed = function( trigger )
	{

		Map.Allied_MG42_Dyno = 0;
		Map.AlliedMG42_Built = false;

		if ( !Map.Sand_BarricadeDestroyed )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Allied_MG42" );
		}

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

	Sand_Barricade_Planted = function( trigger )
	{

		Map.Sand_Barricade_Dyno += 1;

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

	Sand_Barricade_Defused = function( trigger )
	{

		Map.Sand_Barricade_Dyno -= 1;

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

	Sand_Barricade_Destroyed = function( trigger )
	{

		DeleteTriggerRegion( "Allies_BackSide_SandBarrier" );
		DeleteTriggerRegion( "Allies_Near_SandBarrier" );

		Map.Sand_BarricadeDestroyed = true;

		Map.Allies_Near_Sand_Barrier = 0;
		Map.Allies_BackSide_Sand_Barrier = 0;

		WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MORTAR, false );
		WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MOBILE_MG42, true );

		if ( !Map.AlliedMG42_Built )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Allied_MG42" );
		}


		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"PLANT_BackSide_SandBarricade",
			"PLANT_FrontSide_SandBarricade",
		});

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

		Map.Sand_Barricade_Dyno = 0;

		Util.EnableGoal( "ROUTE_Allied_CP_Spawn1" );
		Util.EnableGoal( "ROUTE_Allied_CP_Spawn" );
		Util.EnableGoal( "ROUTE_SandBarrier" );
		Util.EnableGoal( "ROUTE_Hill1" );
		Util.EnableGoal( "ROUTE_Along_The_Wall" );
		Util.EnableGoal( "ROUTE_Hill2" );
		Util.EnableGoal( "ROUTE_Down" );

		SetGoalPriority( "PLANT_Depot_gates", 0.81, TEAM.ALLIES, CLASS.ENGINEER );

		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_Axis_BackSide_SandBarrier_.*",
			"DEFEND_Axis_Above_SandBarrier_.*",
			".*_Axis_SandBarrier_.*",
			".*_Axis_Start_.*",
			"MOUNTMG42_Left_Spawn",
			"REPAIRMG42_Left_Spawn",
			"MOUNTMG42_Right_Spawn",
			"REPAIRMG42_Right_Spawn",
			"BUILD_Command_Post",
		});

		if ( Map.AlliedMG42_Built )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Allied_MG42" );

			SetAvailableMapGoals( TEAM.ALLIES, false, {
				"MOUNTMG42_Allied_MG42",
				"REPAIRMG42_Allied_MG42",
			});
		}

		RegionTrigger.Create(AABB(915.666,-3410.825,321.125,1282.479,-2979.127,483.266), "DisableCombatMovement", "Under_Sand_Barricade" );

		ETUtil.SuicideSpawn( TEAM.AXIS, 0, -1, CLASS.SOLDIER );	//for changing weapon

		SetAvailableMapGoals( TEAM.AXIS, true, {
			".*_Axis_Depot_.*",
			"DEFEND_Axis_DepotGates_.*",
			"MOUNTMG42_Ammo_Shipment",
			"REPAIRMG42_Ammo_Shipment",
			"MOUNTMG42_Depot",
			"REPAIRMG42_Depot",
			"MOUNTMG42_Depot_gates",
			"REPAIRMG42_Depot_gates",
		});

		SetGoalRole("PLANT_Command_Post", ROLE.INFILTRATOR);

		Util.MapDebugPrint( "^5Sand_Barricade_Destroyed" );

		sleep(2);

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

		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"ATTACK_Allies_Depot_.*",
			"GRENADE_DepotMG42",
		});

		if ( Map.BunkerEntrance_Built )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Bunker_entrance" );
		}

		if ( Map.DepotGates_Built )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, {
				"PLANT_Depot_gates",
				".*_Allies_DepotGates_.*",
			});
		}
		else
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, {
				"PLANT_Ammo_Shipment",
				"MOUNTMG42_Ammo_Shipment",
			});

			if ( !Map.AnttenaBase_Destroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Anttena_Base" );
			}
		}
	},

	Door_moving = function( trigger )
	{
		if (GetEntPosition(trigger.Entity).x < 1000)
		{
			if ( trigger.Action == "opened" )
			{
				Map.SandBarricade_Door_closed = false;
				Map.SandBarricade_Door_opened = true;
				Util.MapDebugPrint( "^5SandBarricade_Door_opened" );

				sleep(1.5);
				Map.SandBarricade_Door_opened = false;
				Map.SandBarricade_Door_closing = true;

				Util.MapDebugPrint( "^5SandBarricade_Door_closing" );
			}
			else if ( trigger.Action == "closed" )
			{
				Map.SandBarricade_Door_closing = false;
				Map.SandBarricade_Door_closed = true;

				Util.MapDebugPrint( "^5SandBarricade_Door_closed" );
			}
		}
		else
		{
			if ( trigger.Action == "opened" )
			{
				Map.Depot_Door_closed = false;
				Map.Depot_Door_opened = true;
				Util.MapDebugPrint( "^5Depot_Door_opened" );

				sleep(1.5);
				Map.Depot_Door_opened = false;
				Map.Depot_Door_closing = true;

				Util.MapDebugPrint( "^5Depot_Door_closing" );
			}
			else if ( trigger.Action == "closed" )
			{
				Map.Depot_Door_closing = false;
				Map.Depot_Door_closed = true;

				Util.MapDebugPrint( "^5Depot_Door_closed" );
			}
		}

	},

	Depot_gates_Built = function( trigger )
	{

		Map.DepotGates_Built = true;

		Util.DisableGoal( "ROUTE_DepotGates" );

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

		if ( Map.Sand_BarricadeDestroyed )
		{
			Util.EnableGoal( "ROUTE_Hill2" );

			if ( !Map.BunkerEntrance_Built )
			{
				Util.EnableGoal( "ROUTE_InsideLadder" );
			}

			if ( Map.AlliedEng_Entered_Into_Depot == 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, false, {
					"PLANT_Ammo_Shipment",
					"PLANT_Anttena_Base",
				});
			}

			if ( Map.Allies_Entered_Into_Depot == 0 )
			{
				ClearGoalRole({ "PLANT_Ammo_Shipment", "MOUNTMG42_Ammo_Shipment", "PLANT_Anttena_Base", ".*_Allies_Depot_.*" }, ROLE.ATTACKER);

				SetGoalPriority( "DEFEND_Axis_DepotGates_.*", 0.53, TEAM.AXIS, 0 );
				SetGoalPriority( "DEFEND_Axis_DepotGates_01", 0.54, TEAM.AXIS, 0 );
				SetGoalPriority( "MOUNTMG42_Depot", 0.69, TEAM.AXIS, 0 );

				SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Axis_DepotGates_.*" );

				SetAvailableMapGoals( TEAM.ALLIES, false, "MOUNTMG42_Ammo_Shipment" );
			}
			else
			{
				SetGoalRole({ "PLANT_Ammo_Shipment", "MOUNTMG42_Ammo_Shipment", "PLANT_Anttena_Base", ".*_Allies_Depot_.*" }, ROLE.ATTACKER);
			}

			SetAvailableMapGoals( TEAM.ALLIES, true, {
				"PLANT_Depot_gates",
				".*_Allies_DepotGates_.*",
			});
		}

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

	Depot_gates_Planted = function( trigger )
	{

		Map.Depot_gates_Dyno += 1;

		Map.DepotGates_Planted = true;

		if ( Map.AmmoShipment_Planted )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Depot_gates_.*" );
		}
		else
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Depot_gates_.*" );
		}

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

	Depot_gates_Defused = function( trigger )
	{

		Map.Depot_gates_Dyno -= 1;

		if ( Map.Depot_gates_Dyno == 0 )
		{
			Map.DepotGates_Planted = false;
		}

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

	Depot_gates_Destroyed = function( trigger )
	{

		Map.DepotGates_Built = false;

		Map.DepotGates_Planted = false;

		Util.EnableGoal( "ROUTE_DepotGates" );
		Util.DisableGoal( "ROUTE_Hill2" );

		if ( !Map.BunkerEntrance_Built )
		{
			Util.DisableGoal( "ROUTE_InsideLadder" );
		}

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

		Map.Depot_gates_Dyno = 0;

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

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

		ClearGoalRole({ "PLANT_Ammo_Shipment", "MOUNTMG42_Ammo_Shipment", "PLANT_Anttena_Base", ".*_Allies_Depot_.*" }, ROLE.ATTACKER);

		Util.MapDebugPrint( "^5Depot_gates_Destroyed" );

		sleep(2);

		if ( Map.Sand_BarricadeDestroyed )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, ".*_Allies_DepotGates_.*" );

			SetAvailableMapGoals( TEAM.ALLIES, true, {
				"PLANT_Ammo_Shipment",
				"MOUNTMG42_Ammo_Shipment",
			});

			if ( !Map.AnttenaBase_Destroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Anttena_Base" );
			}

			sleep(2);

			SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Axis_DepotGates_.*" );
			yield();
			SetAvailableMapGoals( TEAM.AXIS, true, {
				"DEFEND_Axis_DepotGates_02",
				"DEFEND_Axis_DepotGates_03",
			});

		}
	},

	Bunker_entrance_Built = function( trigger )
	{

		Map.BunkerEntrance_Built = true;

		Util.DisableGoal( "ROUTE_InsideLadder" );

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

		if ( Map.Sand_BarricadeDestroyed )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Bunker_entrance" );

			if ( Map.AxisEng_OnTheTopOf_Hill == 0 )
			{
				SetAvailableMapGoals( TEAM.AXIS, false, "PLANTMINE_Axis_HillTop_.*" );
			}
		}
		else
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "PLANTMINE_Axis_HillTop_.*" );
		}

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

	Bunker_entrance_Planted = function( trigger )
	{

		Map.Bunker_entrance_Dyno += 1;

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

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

	Bunker_entrance_Defused = function( trigger )
	{

		Map.Bunker_entrance_Dyno -= 1;

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

	Bunker_entrance_Destroyed = function( trigger )
	{

		Map.Bunker_entrance_Dyno = 0;

		Map.BunkerEntrance_Built = false;

		if ( Map.Sand_BarricadeDestroyed )
		{
			if ( Map.DepotGates_Built )
			{
				Util.EnableGoal( "ROUTE_InsideLadder" );
			}
		}

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

		SetAvailableMapGoals( TEAM.AXIS, true, {
			"PLANTMINE_Axis_HillTop_.*",
			"BUILD_Bunker_entrance",
		});

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

	Anttena_Base_Planted = function( trigger )
	{

		Map.Anttena_Base_Dyno += 1;

		Map.AnttenaBase_Planted = true;

		Util.SetMaxUsers( 1, "DEFUSE_Anttena_Base_.*" );	//not important goal

		if ( Map.AmmoShipment_Planted )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Anttena_Base_.*" );
		}
		else
		{
			SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Anttena_Base_.*" );
		}

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

	Anttena_Base_Defused = function( trigger )
	{

		Map.Anttena_Base_Dyno -= 1;

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

	Anttena_Base_Destroyed = function( trigger )
	{

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

		Map.Anttena_Base_Dyno = 0;
		Map.AnttenaBase_Destroyed = true;

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

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

	Ammo_Shipment_Planted = function( trigger )
	{

		Map.Ammo_Shipment_Dyno += 1;

		Map.AmmoShipment_Planted = true;

		if ( Map.DepotGates_Planted )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Depot_gates_.*" );
		}

		if ( Map.AnttenaBase_Planted )
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Anttena_Base_.*" );
		}

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

	Ammo_Shipment_Defused = function( trigger )
	{

		Map.Ammo_Shipment_Dyno -= 1;

		if ( Map.Ammo_Shipment_Dyno == 0 )
		{
			Map.AmmoShipment_Planted = false;

			if ( Map.DepotGates_Planted )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Depot_gates_.*" );
			}

			if ( Map.AnttenaBase_Planted )
			{
				SetAvailableMapGoals( TEAM.AXIS, true, "DEFUSE_Anttena_Base_.*" );
			}
		}

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

	Ammo_Shipment_Destroyed = function( trigger )
	{

		Map.Ammo_Shipment_Dyno = 0;

		Map.AmmoShipment_Destroyed = true;
		Map.AmmoShipment_Planted = false;

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

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

	Thirty_second = function( trigger )
	{

		Util.MapDebugPrint( "^5Thirty_second" );

		sleep(30);

		if ( !Map.AmmoShipment_Destroyed )
		{
			Util.MapDebugPrint( "^5Axis_Win" );

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

	Allies_Near_SandBarrier =
	{
		Name = "Allies_Near_SandBarrier",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				if ( !Map.Sand_BarricadeDestroyed )
				{
					Map.Allies_Near_Sand_Barrier += 1;

					if ( Map.Allies_Near_Sand_Barrier == 1 )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Axis_SandBarrier_.*" );
						SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Axis_Above_SandBarrier_.*" );
						yield();
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Axis_Above_SandBarrier_.*" );
					}
				}
			}
		},
		OnExit = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				if ( !Map.Sand_BarricadeDestroyed )
				{
					Map.Allies_Near_Sand_Barrier -= 1;

					if ( Map.Allies_Near_Sand_Barrier == 0 )
					{
						SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Axis_SandBarrier_.*" );
						yield();
						SetAvailableMapGoals( TEAM.AXIS, true, {
							"DEFEND_Axis_SandBarrier_05",
							"DEFEND_Axis_SandBarrier_06",
						});
					}
				}
			}
		},
	},

	Allies_BackSide_SandBarrier =
	{
		Name = "Allies_BackSide_SandBarrier",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				if ( !Map.Sand_BarricadeDestroyed )
				{
					Map.Allies_BackSide_Sand_Barrier += 1;

					if ( Map.Allies_BackSide_Sand_Barrier == 1 )
					{
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Axis_BackSide_SandBarrier_.*" );
						SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Axis_Above_SandBarrier_.*" );
						yield();
						SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Axis_Above_SandBarrier_.*" );

						Util.BotChat( TEAM.AXIS, "sayteam", "^1Allies are behind a sandbarrier! Defend back side of sandbarrier!", 2 );

						Util.MapDebugPrint( "^5Allies are behind a sandbarrier" );
					}
				}
			}
		},
		OnExit = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				if ( !Map.Sand_BarricadeDestroyed )
				{
					Map.Allies_BackSide_Sand_Barrier -= 1;

					if ( Map.Allies_BackSide_Sand_Barrier == 0 )
					{
						SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Axis_BackSide_SandBarrier_.*" );

						Util.BotChat( TEAM.AXIS, "sayteam", "^2Back side of sandbarrier is safe!", 2 );

						Util.MapDebugPrint( "^5Back side of sandbarrier is safe" );
					}
				}
			}
		},
	},

	Allies_Entered_IntoDepot =
	{
		Name = "Allies_Entered_IntoDepot",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				bot = Util.IsBot(ent);
				if ( bot )
				{
					bot.SetRoles( ROLE.ATTACKER );
				}

				Map.Allies_Entered_Into_Depot += 1;

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

				if ( Map.Allies_Entered_Into_Depot == 1 )
				{
					Util.BotChat( TEAM.AXIS, "sayteam", "^1Allies entered into depot! Defend the ammo shipment!", 2 );

					if ( Map.DepotGates_Built )
					{
						SetGoalRole({ "PLANT_Ammo_Shipment", "MOUNTMG42_Ammo_Shipment", "PLANT_Anttena_Base", ".*_Allies_Depot_.*" }, ROLE.ATTACKER);
					}

					SetGoalPriority( "MOUNTMG42_Depot", 0.50, TEAM.AXIS, 0 );
					SetGoalPriority( "DEFEND_Axis_DepotGates_.*", 0.51, TEAM.AXIS, 0 );

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

				if ( !Map.Sand_BarricadeDestroyed )
				{
					SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Axis_Depot_.*" );
				}
			}
		},
		OnExit = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				bot = Util.IsBot(ent);
				if ( bot )
				{
					bot.ClearRoles( ROLE.ATTACKER );
				}

				Map.Allies_Entered_Into_Depot -= 1;

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

					if ( Map.AlliedEng_Entered_Into_Depot == 0 )
					{
						if ( Map.DepotGates_Built )
						{
							SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Ammo_Shipment" );

							if ( !Map.AnttenaBase_Destroyed )
							{
								SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Anttena_Base" );
							}
						}
					}
				}

				if ( Map.Allies_Entered_Into_Depot == 0 )
				{
					Util.BotChat( TEAM.AXIS, "sayteam", "^2Depot is safe!", 2 );

					SetGoalPriority( "DEFEND_Axis_DepotGates_.*", 0.53, TEAM.AXIS, 0 );
					SetGoalPriority( "DEFEND_Axis_DepotGates_01", 0.54, TEAM.AXIS, 0 );

					if ( Map.DepotGates_Built )
					{
						ClearGoalRole({ "PLANT_Ammo_Shipment", "MOUNTMG42_Ammo_Shipment", "PLANT_Anttena_Base", ".*_Allies_Depot_.*" }, ROLE.ATTACKER);

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

						SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Axis_DepotGates_.*" );

						SetGoalPriority( "MOUNTMG42_Depot", 0.69, TEAM.AXIS, 0 );
					}

					if ( !Map.Sand_BarricadeDestroyed )
					{
						SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Axis_Depot_.*" );
					}

					Util.MapDebugPrint( "^5Depot is safe" );
				}
				else
				{
					if ( Map.DepotGates_Built )
					{
						SetGoalRole({ "PLANT_Ammo_Shipment", "MOUNTMG42_Ammo_Shipment", "PLANT_Anttena_Base", ".*_Allies_Depot_.*" }, ROLE.ATTACKER);
					}
				}
			}
		},
	},

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

				if ( Map.Allies_OnTheTopOf_Hill == 1 )
				{
					Util.BotChat( TEAM.AXIS, "sayteam", "^1Allies are on the top of hill above depot!", 2 );

					SetAvailableMapGoals( TEAM.AXIS, true, {
						".*_Axis_BunkerEntrance_.*",
						"CALLARTILLERY_Axis_HillTop_01",
						"ARTILLERY_S_Axis_HillTop_02",
					});

					Util.MapDebugPrint( "^5Allies are on the top of hill" );
				}
			}
		},
		OnExit = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
				Map.Allies_OnTheTopOf_Hill -= 1;

				if ( Map.Allies_OnTheTopOf_Hill == 0 )
				{
					Util.BotChat( TEAM.AXIS, "sayteam", "^2The top of hill is safe!", 2 );

					SetAvailableMapGoals( TEAM.AXIS, false, {
						".*_Axis_BunkerEntrance_.*",
						"CALLARTILLERY_Axis_HillTop_01",
						"ARTILLERY_S_Axis_HillTop_02",
					});

					Util.MapDebugPrint( "^5The top of hill is safe" );
				}
			}
		},
	},

	Axis_OnThe_TopOf_Hill =
	{
		Name = "Axis_OnThe_TopOf_Hill",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.AXIS )
			{
				if( GetEntClass(ent) == CLASS.ENGINEER )
				{
					if ( Map.AxisEng_OnTheTopOf_Hill == 0 )
					{
						Util.MapDebugPrint( "^5Axis eng on the top of hill" );
					}

					Map.AxisEng_OnTheTopOf_Hill += 1;
				}
			}
		},
		OnExit = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.AXIS )
			{
				if( GetEntClass(ent) == CLASS.ENGINEER )
				{
					Map.AxisEng_OnTheTopOf_Hill -= 1;

					if ( Map.AxisEng_OnTheTopOf_Hill == 0 )
					{
						Util.MapDebugPrint( "^5Axis eng left the top of hill" );
					}
				}

				if ( Map.AxisEng_OnTheTopOf_Hill == 0 and Map.BunkerEntrance_Built and Map.Sand_BarricadeDestroyed )
				{
					SetAvailableMapGoals( TEAM.AXIS, false, "PLANTMINE_Axis_HillTop_.*" );

					Util.MapDebugPrint( "^5Axis engs are not on the top of hill => plantmine forbidden" );
				}
			}
		},
	},
};

global OnMapLoad = function()
{

	OnTrigger( "Planted at East Anti-Tank Door.", Map.East_Anti_Tank_Door_Planted );
	OnTrigger( "Defused at East Anti-Tank Door.", Map.East_Anti_Tank_Door_Defused );
	OnTrigger( "Allies have breached the East Anti-Tank Door!!", Map.East_Anti_Tank_Door_Destroyed );

	OnTrigger( "Planted at West Anti-Tank Door.", Map.West_Anti_Tank_Door_Planted );
	OnTrigger( "Defused at the West Anti-Tank Door.", Map.West_Anti_Tank_Door_Defused );
	OnTrigger( "Allies have breached the West Anti-Tank Door!!", Map.West_Anti_Tank_Door_Destroyed );

	OnTrigger( "GRENADE_Grille_1 Exploded.", Map.Grille_1_Exploded );
	OnTrigger( "GRENADE_Grille_2 Exploded.", Map.Grille_2_Exploded );
	OnTrigger( "GRENADE_Grille_3 Exploded.", Map.Grille_3_Exploded );
	OnTrigger( "GRENADE_Grille_4 Exploded.", Map.Grille_4_Exploded );

	OnTrigger( "Axis Command Post constructed. Charge speed increased!", Map.Axis_CP_Built );
	OnTrigger( "Allied Command Post constructed. Charge speed increased!", Map.Allied_CP_Built );
	OnTrigger( "Planted at the Command Post.", Map.Command_Post_Planted );
	OnTrigger( "Planted at Command Post.", Map.Command_Post_Planted );	//for Nitmod
	OnTrigger( "Defused at the Command Post.", Map.Command_Post_Defused );
	OnTrigger( "Defused at Command Post.", Map.Command_Post_Defused );	//for Nitmod
	OnTrigger( "Axis team has destroyed the Allied Command Post!", Map.Allied_CP_Destroyed );
	OnTrigger( "Allied team has destroyed the Axis Command Post!", Map.Axis_CP_Destroyed );

	OnTrigger( "Allied team has built the MG42 Construction!", Map.Allied_MG42_Built );
	OnTrigger( "Planted at The Allied MG42.", Map.Allied_MG42_Planted );
	OnTrigger( "Defused at The Allied MG42.", Map.Allied_MG42_Defused );
	OnTrigger( "Axis team has destroyed the Allied MG42!", Map.Allied_MG42_Destroyed );

	OnTrigger( "Planted at Sand Barricade.", Map.Sand_Barricade_Planted );
	OnTrigger( "Defused at Sand Barricade.", Map.Sand_Barricade_Defused );
	OnTrigger( "Allied enginers have busted thought the Sand barricade!!", Map.Sand_Barricade_Destroyed );

	OnTrigger( "t378_Moving", Map.Door_moving );

	OnTrigger( "The Depot gates have been constructed.", Map.Depot_gates_Built );
	OnTrigger( "Planted at Depot gates.", Map.Depot_gates_Planted );
	OnTrigger( "Defused at Depot gates.", Map.Depot_gates_Defused );
	OnTrigger( "Allies have destroyed the Axis Depot gates.", Map.Depot_gates_Destroyed );

	OnTrigger( "The barbed wire hatch has been constructed.", Map.Bunker_entrance_Built );
	OnTrigger( "Planted at Bunker entrance.", Map.Bunker_entrance_Planted );
	OnTrigger( "Defused at Bunker entrance.", Map.Bunker_entrance_Defused );
	OnTrigger( "Allies have blow barbed wire hatch.", Map.Bunker_entrance_Destroyed );

	OnTrigger( "Planted at Anttena Base.", Map.Anttena_Base_Planted );
	OnTrigger( "Defused at Anttena Base.", Map.Anttena_Base_Defused );
	OnTrigger( "Allies blew-up the Radio Installation", Map.Anttena_Base_Destroyed );

	OnTrigger( "Planted at Ammo Shipment.", Map.Ammo_Shipment_Planted );
	OnTrigger( "Defused at Ammo Shipment.", Map.Ammo_Shipment_Defused );
	OnTrigger( "Allies have destroyed the ammo shipment!!", Map.Ammo_Shipment_Destroyed );

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

	Util.LimitToClass("PLANT_Command_Post", 0, CLASS.COVERTOPS);
	Util.LimitToClass("PLANT_Allied_MG42", TEAM.AXIS, CLASS.COVERTOPS);

	Util.LimitToClass("PLANT_Bunker_entrance", TEAM.ALLIES, CLASS.COVERTOPS);

	Wp.SetWaypointFlag( "Jump_to_gates", "closed", false );

	SetAvailableMapGoals( TEAM.AXIS, true, {
		"AMMOCAB_.*",
		"HEALTHCAB_.*",
		"BUILD_Command_Post",
		"BUILD_Depot_gates",
		"BUILD_Bunker_entrance",
		"PLANTMINE_Axis_HillTop_.*",
		"DEFEND_Axis_Above_SandBarrier_.*",
		".*_Axis_Start_.*",
		"MOUNTMG42_Left_Spawn",
		"REPAIRMG42_Left_Spawn",
		"MOUNTMG42_Right_Spawn",
		"REPAIRMG42_Right_Spawn",
	});

	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"GRENADE_Grille_1",
		"PLANT_East_Anti_Tank_Door",
		"PLANT_West_Anti_Tank_Door",
		".*_Allies_Start_.*",
	});

	GetGoal("MOBILEMORTAR_Axis_Start_03").MortarAim =
	{ Vec3(-0.914, -0.343, 0.215), Vec3(-0.952, 0.204, 0.228) };

	Util.SetMaxUsers( 1, "ATTACK_.*" );
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "GRENADE_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );
	Util.SetMaxUsers( 1, "PLANT_East_Anti_Tank_Door" );
	Util.SetMaxUsers( 1, "PLANT_West_Anti_Tank_Door" );
	Util.SetMaxUsers( 1, "PLANT_Command_Post" );
	Util.SetMaxUsers( 2, "BUILD_Depot_gates" );
	Util.SetMaxUsers( 1, "BUILD_Command_Post" );
	Util.SetMaxUsers( 1, "BUILD_Bunker_entrance" );

	SetGoalRole( "MOUNTMG42_Ammo_Shipment", ROLE.DEFENDER );

	Util.AddUseWp( "PLANT_BackSide_SandBarricade", "PlantSandBarricade2" );

	Util.SetGoalPosition(1842.151245, -2981.619385, 318.200531, "PLANT_Depot_gates");

	Util.DisableGoal( "ROUTE_.*" );

	SetGoalPriority( "BUILD_Command_Post", 0.78, 0, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_Bunker_entrance", 0.78, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "REPAIRMG42_Depot_gates", 0.77, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Command_Post", 0.79, TEAM.AXIS, CLASS.COVERTOPS );
	SetGoalPriority( "PLANT_Allied_MG42", 0.79, TEAM.AXIS, CLASS.COVERTOPS );
	SetGoalPriority( "DEFEND_Axis_Above_SandBarrier_01", 0.51, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_Above_SandBarrier_02", 0.51, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_Above_SandBarrier_03", 0.51, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_Above_SandBarrier_04", 0.51, TEAM.AXIS, 0 );
	SetGoalPriority( "MOUNTMG42_Left_Spawn", 0.52, TEAM.AXIS, 0 );
	SetGoalPriority( "MOUNTMG42_Right_Spawn", 0.52, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_SandBarrier_05", 0.53, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_SandBarrier_06", 0.53, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_BackSide_SandBarrier_01", 0.52, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_BackSide_SandBarrier_03", 0.54, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_BackSide_SandBarrier_02", 0.55, TEAM.AXIS, 0 );
	SetGoalPriority( "MOUNTMG42_Depot_gates", 0.51, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_Depot_.*", 0.52, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_Depot_11", 0.53, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_DepotGates_.*", 0.53, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_DepotGates_01", 0.54, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_BunkerEntrance_02", 0.51, TEAM.AXIS, 0 );
	SetGoalPriority( "DEFEND_Axis_BunkerEntrance_01", 0.52, TEAM.AXIS, 0 );

	SetGoalPriority( "PLANT_East_Anti_Tank_Door", 0.82, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_West_Anti_Tank_Door", 0.82, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Ammo_Shipment", 0.82, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Anttena_Base", 0.8, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Depot_gates", 0.79, TEAM.ALLIES, CLASS.ENGINEER );	//at start higher priority for covertops
	SetGoalPriority( "ATTACK_Allies_SandBarrier_06", 0.51, TEAM.ALLIES, 0 );
	SetGoalPriority( "ATTACK_Allies_SandBarrier_07", 0.51, TEAM.ALLIES, 0 );
	SetGoalPriority( "ATTACK_Allies_SandBarrier_04", 0.52, TEAM.ALLIES, 0 );
	SetGoalPriority( "ATTACK_Allies_SandBarrier_05", 0.52, TEAM.ALLIES, 0 );
	SetGoalPriority( "SMOKEBOMB_Allies_DepotGates_10", 0.81, TEAM.ALLIES, CLASS.COVERTOPS );

	if ( ETUtil.CountClass( TEAM.AXIS, CLASS.SOLDIER ) < 2 )
	{
		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam()  == TEAM.AXIS )
			{
				if ( bot.HasWeapon(WEAPON.FLAMETHROWER) or bot.HasWeapon(WEAPON.MOBILE_MG42) or bot.HasWeapon(WEAPON.PANZERFAUST) )
				{
					bot.ExecCommand("kill");

					Util.MapDebugPrint( "^5I have wrong weapon" );
				}
			}
		}
	}
	else
	{
		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam()  == TEAM.AXIS )
			{
				if ( bot.HasWeapon(WEAPON.FLAMETHROWER) or bot.HasWeapon(WEAPON.MOBILE_MG42) )
				{
					bot.ExecCommand("kill");

					Util.MapDebugPrint( "^5I have wrong weapon" );
				}
			}
		}
	}

	RegionTrigger.Create(AABB(907.813,-3364.875,575.125,1054.875,-3043.129,696.684), "DisableCombatMovement", "Above_Sand_Barricade" );
	RegionTrigger.Create(AABB(907.813,-3364.875,575.125,1054.875,-3043.129,696.684), "DisableBotPush", "Above_Sand_Barricade" );
	RegionTrigger.Create(AABB(1176.684,-3057.484,575.125,1258.096,-2979.126,694.474), "DisableCombatMovement", "BackSide_Sand_Barricade" );
	RegionTrigger.Create(AABB(1176.684,-3057.484,575.125,1258.096,-2979.126,694.474), "DisableBotPush", "BackSide_Sand_Barricade" );
	RegionTrigger.Create(AABB(516.694,-3860.872,577.125,651.835,-2547.125,694.935), "DisableCombatMovement", "Above_Sand_Barricade_Outside" );
	RegionTrigger.Create(AABB(516.694,-3860.872,577.125,651.835,-2547.125,694.935), "DisableBotPush", "Above_Sand_Barricade_Outside" );
	RegionTrigger.Create(AABB(542.334,-3928.126,337.125,624.888,-3890.125,411.125), "DisableBotPush", "SandBarrier_door" );
	RegionTrigger.Create(AABB(2229.167,-2782.162,266.125,2342.404,-2672.575,380.699), "DisableBotPush", "Around_mortar" );
	RegionTrigger.Create(AABB(2747.125,-5439.856,377.125,2851.271,-5344.125,490.085), "DisableBotPush", "Around_defend_depot_07" );
	RegionTrigger.Create(AABB(3157.125,-5450.138,377.125,3240.121,-5323.463,497.289), "DisableBotPush", "Around_defend_depot_08" );
	RegionTrigger.Create(AABB(3417.273,-3844.244,329.125,3504.737,-3734.543,456.490), "DisableBotPush", "Around_defend_depotgates_01" );
	RegionTrigger.Create(AABB(3391.711,-2662.022,329.125,3498.402,-2568.126,439.747), "DisableBotPush", "Around_defend_depotgates_02" );
	RegionTrigger.Create(AABB(2799.289,-2751.751,266.125,2941.531,-2664.297,384.474), "DisableBotPush", "Around_defend_depotgates_03" );
	RegionTrigger.Create(AABB(3389.874,-3174.875,329.125,3569.286,-3106.061,447.520), "DisableBotPush", "Around_defend_depotgates_04" );
	RegionTrigger.Create(AABB(3455.985,-3430.875,329.125,3609.443,-3363.529,436.014), "DisableBotPush", "Around_defend_depotgates_05" );
	RegionTrigger.Create(AABB(2018.126,-2868.825,266.125,2126.326,-2733.049,387.560), "DisableBotPush", "Ladder_near_DepotGates" );
	RegionTrigger.Create(AABB(999.966,-2916.875,321.125,1182.875,-2822.621,395.125), "DisableBotPush", "Right_Spawn_Ladder" );
	RegionTrigger.Create(AABB(1017.154,-3578.221,321.326,1182.875,-3491.125,395.326), "DisableBotPush", "Left_Spawn_Ladder" );
	RegionTrigger.Create(AABB(1867.918,-3130.440,513.125,2019.105,-2893.215,627.125), "DisableCombatMovement", "Above_Depot_Gates" );
	RegionTrigger.Create(AABB(1131.831,-3419.942,380.596,1244.671,-3341.131,672.672), "DisableBotPush", "Ladder_BackSide_SandBarrier" );
	RegionTrigger.Create(AABB(1131.831,-3419.942,380.596,1244.671,-3341.131,672.672), "DisableCombatMovement", "Ladder_BackSide_SandBarrier" );
	RegionTrigger.Create(AABB(424.832,-3614.477,252.355,606.875,-2869.541,440.571), "DisableBotPush", "Jump_to_SandBarrier" );
	RegionTrigger.Create(AABB(424.832,-3614.477,252.355,606.875,-2869.541,440.571), "DisableCombatMovement", "Jump_to_SandBarrier" );
	RegionTrigger.Create(AABB(1876.262,-2984.988,553.125,2290.871,-2304.514,662.520), "DisableCombatMovement", "Around_Mobilemg42_at_DepotGates" );
	RegionTrigger.Create(AABB(2743.384,-2086.560,769.125,3098.875,-1011.004,1417.711), "DisableCombatMovement", "Route_from_HillTop" );
	RegionTrigger.Create(AABB(920.125,-2528.681,386.258,1044.663,-2365.814,567.104), "DisableCombatMovement", "Ladder" );
	RegionTrigger.Create(AABB(1813.010,-3638.361,266.262,2143.437,-3491.970,377.928), "DisableCombatMovement", "DepotGatesDoor" );
	RegionTrigger.Create(AABB(322.699,-4027.015,289.046,814.613,-3828.271,442.304), "DisableCombatMovement", "SandBarricadeDoor" );
	RegionTrigger.Create(AABB(2216.210,-1786.395,681.125,2966.874,-1424.084,883.915), "KillTrigger", "KillTrigger_Antena" );

	AlliesNearSandBarrier = OnTriggerRegion(AABB(167.586,-3529.472,259.360,1054.873,-2826.554,561.125), Map.Allies_Near_SandBarrier);
	AlliesBackSideSandBarrier = OnTriggerRegion(AABB(1078.127,-3736.980,143.307,2163.754,-791.833,701.896), Map.Allies_BackSide_SandBarrier);
	AlliesEnteredIntoDepot = OnTriggerRegion(AABB(2187.886,-5670.875,266.140,3892.026,-990.126,1106.875), Map.Allies_Entered_IntoDepot);
	AlliesOnTheTopOfHill = OnTriggerRegion(AABB(-1243.541,-2073.807,899.648,3098.873,-417.125,1546.022), Map.Allies_OnThe_TopOf_Hill);
	AxisOnTheTopOfHill = OnTriggerRegion(AABB(1445.925,-958.875,1077.079,3098.875,-671.012,1556.928), Map.Axis_OnThe_TopOf_Hill);
	AxisOnTheTopOfHill = OnTriggerRegion(AABB(1444.730,-1222.281,1281.125,3098.875,-957.282,1582.782), Map.Axis_OnThe_TopOf_Hill);

	ClearGoalRole(".*", ROLE.ATTACKER);

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

global InitializeRoutes = function()
{
	MapRoutes =
	{
		PLANT_BackSide_SandBarricade =
		{
			ROUTE_SeaSpawn1 =
			{
				ROUTE_Grille1 =
				{
					ROUTE_Grille2 =
					{
						ROUTE_Grille3 =
						{
							ROUTE_Grille4 =
							{

							},
						},
					},
				},
			},
			ROUTE_SeaSpawn2 =
			{
				ROUTE_Grille1 =
				{
					ROUTE_Grille2 =
					{
						ROUTE_Grille3 =
						{
							ROUTE_Grille4 =
							{

							},
						},
					},
				},
			},
		},
		GRENADE_DepotMG42 =
		{
			ROUTE_SeaSpawn1 =
			{
				ROUTE_Grille1 =
				{
					ROUTE_Grille2 =
					{
						ROUTE_Grille3 =
						{
							ROUTE_Grille4 =
							{

							},
						},
					},
				},
			},
			ROUTE_SeaSpawn2 =
			{
				ROUTE_Grille1 =
				{
					ROUTE_Grille2 =
					{
						ROUTE_Grille3 =
						{
							ROUTE_Grille4 =
							{

							},
						},
					},
				},
			},
			ROUTE_Allied_CP_Spawn =
			{
				ROUTE_WestDoor =
				{
					Weight = 3,
					ROUTE_Grille2 =
					{
						ROUTE_Grille3 =
						{

						},
					},
				},
				ROUTE_SandBarrier =
				{

				},
			},
			ROUTE_Allied_CP_Spawn1 =
			{
				ROUTE_WestDoor =
				{
					Weight = 3,
					ROUTE_Grille2 =
					{
						ROUTE_Grille3 =
						{

						},
					},
				},
				ROUTE_SandBarrier =
				{

				},
			},
		},
		PLANT_FrontSide_SandBarricade =
		{
			ROUTE_SeaSpawn1 =
			{
				ROUTE_EastDoor =
				{

				},
				ROUTE_WestDoor =
				{

				},
			},
			ROUTE_SeaSpawn2 =
			{
				ROUTE_EastDoor =
				{

				},
				ROUTE_WestDoor =
				{

				},
			},
		},
		PLANT_Bunker_entrance =
		{
			ROUTE_Allied_CP_Spawn =
			{
				ROUTE_WestDoor =
				{
					Weight = 2,
					ROUTE_Grille2 =
					{
						ROUTE_Grille3 =
						{
							ROUTE_Hill1 =
							{

							},
						},
					},
				},
				ROUTE_SandBarrier =
				{
					ROUTE_Hill1 =
					{

					},
				},
			},
			ROUTE_Allied_CP_Spawn1 =
			{
				ROUTE_WestDoor =
				{
					Weight = 2,
					ROUTE_Grille2 =
					{
						ROUTE_Grille3 =
						{
							ROUTE_Hill1 =
							{

							},
						},
					},
				},
				ROUTE_SandBarrier =
				{
					ROUTE_Hill1 =
					{

					},
				},
			},
		},
		PLANT_Depot_gates =
		{
			ROUTE_Allied_CP_Spawn =
			{
				ROUTE_WestDoor =
				{
					ROUTE_Grille2 =
					{
						ROUTE_Grille3 =
						{
							ROUTE_Along_The_Wall =
							{

							},
						},
					},
				},
				ROUTE_SandBarrier =
				{

				},
			},
			ROUTE_Allied_CP_Spawn1 =
			{
				ROUTE_WestDoor =
				{
					ROUTE_Grille2 =
					{
						ROUTE_Grille3 =
						{
							ROUTE_Along_The_Wall =
							{

							},
						},
					},
				},
				ROUTE_SandBarrier =
				{

				},
			},
		},
	};

	MapRoutes["ATTACK_Allies_Depot_.*"] =
	{
		ROUTE_Allied_CP_Spawn =
		{
			ROUTE_WestDoor =
			{
				ROUTE_Grille2 =
				{
					ROUTE_Grille3 =
					{
						ROUTE_Hill2 =
						{
							ROUTE_Down =
							{
								Weight = 2,
							},
						},
						ROUTE_Hill2 =
						{
							ROUTE_InsideLadder =
							{

							},
						},
					},
				},
			},
			ROUTE_SandBarrier =
			{
				Weight = 2,
				ROUTE_Hill2 =
				{
					Weight = 2,
					ROUTE_Down =
					{

					},
				},
				ROUTE_Hill2 =
				{
					ROUTE_InsideLadder =
					{

					},
				},
				ROUTE_DepotGates =
				{
					Weight = 3,
				},
			},
		},
		ROUTE_Allied_CP_Spawn1 =
		{
			ROUTE_WestDoor =
			{
				ROUTE_Grille2 =
				{
					ROUTE_Grille3 =
					{
						ROUTE_Hill2 =
						{
							ROUTE_Down =
							{
								Weight = 2,
							},
						},
						ROUTE_Hill2 =
						{
							ROUTE_InsideLadder =
							{

							},
						},
					},
				},
			},
			ROUTE_SandBarrier =
			{
				Weight = 2,
				ROUTE_Hill2 =
				{
					Weight = 2,
					ROUTE_Down =
					{

					},
				},
				ROUTE_Hill2 =
				{
					ROUTE_InsideLadder =
					{

					},
				},
				ROUTE_DepotGates =
				{
					Weight = 3,
				},
			},
		},
	};

	Util.Routes(MapRoutes);
};

global OnBotJoin = function( bot )
{
	bot.TargetBreakableDist = 90.0;

	Util.ChangeSpawn( TEAM.AXIS, 0 );

	WeaponTable.SetWeaponAvailability ( CLASS.SOLDIER, WEAPON.FLAMETHROWER, false );

	WeaponTable.SetWeaponTeamAvailability ( TEAM.ALLIES, CLASS.SOLDIER, WEAPON.MOBILE_MG42, false );
	WeaponTable.SetWeaponTeamAvailability ( TEAM.ALLIES, CLASS.SOLDIER, WEAPON.MORTAR, false );

	if ( ETUtil.CountClass( TEAM.AXIS, CLASS.SOLDIER ) < 2 )
	{
		if ( !Map.Sand_BarricadeDestroyed )
		{
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MOBILE_MG42, false );
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.PANZERFAUST, false );
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MORTAR, true );

			if ( bot.HasWeapon(WEAPON.FLAMETHROWER) or bot.HasWeapon(WEAPON.MOBILE_MG42) or bot.HasWeapon(WEAPON.PANZERFAUST) )
			{
				bot.ExecCommand("kill");
				Util.MapDebugPrint( "^5I have wrong weapon" );
			}
		}
		else
		{
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MORTAR, false );
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.PANZERFAUST, false );
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MOBILE_MG42, true );

			if ( bot.HasWeapon(WEAPON.FLAMETHROWER) or bot.HasWeapon(WEAPON.MORTAR) or bot.HasWeapon(WEAPON.PANZERFAUST) )
			{
				bot.ExecCommand("kill");
				Util.MapDebugPrint( "^5I have wrong weapon" );
			}
		}
	}
	else
	{
		if ( !Map.East_AntiTankDoor_Destroyed and !Map.West_AntiTankDoor_Destroyed )
		{
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MOBILE_MG42, false );
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MORTAR, true );
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.PANZERFAUST, true );

			if ( bot.HasWeapon(WEAPON.FLAMETHROWER) or bot.HasWeapon(WEAPON.MOBILE_MG42) )
			{
				bot.ExecCommand("kill");
				Util.MapDebugPrint( "^5I have wrong weapon" );
			}
		}
		if ( ( Map.East_AntiTankDoor_Destroyed or Map.West_AntiTankDoor_Destroyed ) and !Map.Sand_BarricadeDestroyed )
		{
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MOBILE_MG42, false );
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.PANZERFAUST, true );
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MORTAR, true );

			if ( bot.HasWeapon(WEAPON.FLAMETHROWER) or bot.HasWeapon(WEAPON.MOBILE_MG42) )
			{
				bot.ExecCommand("kill");
				Util.MapDebugPrint( "^5I have wrong weapon" );
			}
		}
		if ( Map.Sand_BarricadeDestroyed )
		{
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MORTAR, false );
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.MOBILE_MG42, true );
			WeaponTable.SetWeaponTeamAvailability ( TEAM.AXIS, CLASS.SOLDIER, WEAPON.PANZERFAUST, true );

			if ( bot.HasWeapon(WEAPON.FLAMETHROWER) or bot.HasWeapon(WEAPON.MORTAR) )
			{
				bot.ExecCommand("kill");
				Util.MapDebugPrint( "^5I have wrong weapon" );
			}
		}
	}
};
