//==========================================================================================
//
//	duplex_towers.gm
//
//	Who      	When		What
//------------------------------------------------------------------------------------------
//	Qiki		27 May 2012	Initial Script
//	Native12	23.09.2012	Ready to test
//	Native12	25.10.2012	Finished
//
//	Associated files:	duplex_towers.way	20.09.2012	183 kB (188 019 b)
//				duplex_towers_goals.gm	20.9.2012	54,2 kB (55 578 b)
//==========================================================================================
//	ToDo:	Maybe routes - but not necessary

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

	Centre_Buildings_Dyno = 0,
	Command_Post_Dyno = 0,
	East_Fortifications_Dyno = 0,
	East_Ramp_Dyno = 0,
	East_Tower_Dyno = 0,
	Main_Gate_Dyno = 0,
	North_East_Sniper_Tower_Dyno = 0,
	South_East_Defence_Dyno = 0,
	South_Ramp_Dyno = 0,
	South_West_Sniper_Tower_Dyno = 0,
	Tunnel_Roof_Dyno = 0,
	West_Defence_Dyno = 0,
	West_Ramp_Dyno = 0,
	West_Tower_Dyno = 0,

	door_closed = true,
	EastTowerDestroyed = false,
	WestTowerDestroyed = false,
	Ally_CP = false,
	Axis_Eng_Inside = 0,
	EastRamp_built = false,
	MainGate_built = true,
	SouthRamp_Built = false,
	TunnelRoof_Built = true,
	WestRamp_Built = false,
	RouteEnabled = false,
	Axis_Eng_Inside_ET = 0,
	Axis_Eng_Inside_WT = 0,

	e_a = 0,
	e_b = 0,
	w_a = 0,
	w_b = 0,

	Roles =
	{
		ALLIES =
		{
			AllBots = true, // each bot is considered for a role
			DEFENDER =	//DEFEND south ramp
			{
				spawnpt = 3,
				numbots = 4,
				crucialClass = CLASS.ENGINEER,
			},
			DEFENDER1 =	//DEFEND east ramp
			{
				spawnpt = 3,
				numbots = 4,
				crucialClass = CLASS.COVERTOPS,
			},
			DEFENDER2 =	//DEFEND west ramp
			{
				spawnpt = 4,
				numbots = 4,
				crucialClass = CLASS.COVERTOPS,
			},
			DEFENDER3 =	//DEFEND tunnel roof & main gate
			{
				spawnpt = 4,
				numbots = 4,
				crucialClass = CLASS.ENGINEER,
			},
		},
		AXIS =
		{
			AllBots = true, // each bot is considered for a role
			ATTACKER =
			{
				spawnpt = 1,
				numbots = 4,
				crucialClass = CLASS.ENGINEER,
			},
			ATTACKER1 =
			{
				spawnpt = 1,
				numbots = 4,
				crucialClass = CLASS.COVERTOPS,
			},
			ATTACKER2 =
			{
				spawnpt = 2,
				numbots = 4,
				crucialClass = CLASS.ENGINEER,
			},
			ATTACKER3 =
			{
				spawnpt = 2,
				numbots = 4,
				crucialClass = CLASS.ENGINEER,
			},
		},
	},

	Navigation =
	{
		//	/bot waypoint_setproperty paththrough Navigation_PT:allied_door
		allied_door =
		{
			navigate = function(_this)
			{
				wpTable = {};
				Wp.GetWaypointByName("Allied_door", wpTable);
				if ( _this.Goto(wpTable.position) == EVENT.PATH_SUCCESS )
				{
					if ( !Map.door_closed )
					{
						Util.MapDebugPrint( "^5Door is open => do nothing" );
						_this.AddAimRequest(Priority.High, "facing", wpTable.facing);
						sleep(0.8);
						_this.Bot.HoldButton( BTN.WALK, 1.5 );
						_this.Bot.HoldButton( BTN.FORWARD, 1.5 );
						sleep(1.5);
						_this.Bot.ReleaseButton(BTN.WALK);
						_this.Bot.ReleaseButton(BTN.FORWARD);
						_this.ReleaseAimRequest();
					}
					else
					{
						Util.MapDebugPrint( "^5Door is closed => open it" );
						sleep(1);
						_this.AddAimRequest(Priority.High, "facing", wpTable.facing);
						sleep(0.4);
						Map.door_closed = false;
						_this.Bot.HoldButton( BTN.USE, 0.5 );
						sleep(1);
						_this.Bot.HoldButton( BTN.WALK, 1.5 );
						_this.Bot.HoldButton( BTN.FORWARD, 1.5 );
						sleep(1.2);
						Map.door_closed = true;
						Util.MapDebugPrint( "^5Door is closing => wait" );
						sleep(0.3);
						_this.Bot.ReleaseButton(BTN.WALK);
						_this.Bot.ReleaseButton(BTN.FORWARD);
						_this.ReleaseAimRequest();
					}
				}
			},
		},
	},

	Centre_Buildings_Built = function( trigger )
	{

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

	Centre_Buildings_Planted = function( trigger )
	{

		Map.Centre_Buildings_Dyno += 1;

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

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

	Centre_Buildings_Defused = function( trigger )
	{

		Map.Centre_Buildings_Dyno -= 1;

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

	Centre_Buildings_Destroyed = function( trigger )
	{

		Map.Centre_Buildings_Dyno = 0;

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

	Allied_Command_Post_Built = function( trigger )
	{

		Map.Ally_CP = true;

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

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

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

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

	Axis_Command_Post_Built = function( trigger )
	{

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

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

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

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

	Command_Post_Planted = function( trigger )
	{

		Map.Command_Post_Dyno += 1;

		if ( Map.Ally_CP )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Command_Post_.*" );
		}
		else
		{
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFUSE_Command_Post_.*" );
		}

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

	Command_Post_Defused = function( trigger )
	{

		Map.Command_Post_Dyno -= 1;

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

	Allied_Command_Post_Destroyed = function( trigger )
	{

		Map.Command_Post_Dyno = 0;

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

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

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

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

	Axis_Command_Post_Destroyed = function( trigger )
	{

		Map.Command_Post_Dyno = 0;

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

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

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

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

	East_Fortifications_Built = function( trigger )
	{

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

	East_Fortifications_Planted = function( trigger )
	{

		Map.East_Fortifications_Dyno += 1;

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

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

	East_Fortifications_Defused = function( trigger )
	{

		Map.East_Fortifications_Dyno -= 1;

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

	East_Fortifications_Destroyed = function( trigger )
	{

		Map.East_Fortifications_Dyno = 0;

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

	East_Ramp_Built = function( trigger )
	{

		Map.EastRamp_built = true;

		Map.RouteEnabled = true;
		//enable route

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

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

		if ( Map.Axis_Eng_Inside == 0 )
		{
			if ( !Map.WestTowerDestroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, {
					"DEFEND_Allied_West_tower_1",
					"DEFEND_Allied_West_tower_2",
				});

				SetAvailableMapGoals( TEAM.AXIS, true, {
					"PLANT_West_Tower",
					"ATTACK_Axis_West_tower_1",
					"ATTACK_Axis_West_tower_4",
				});
			}
			if ( !Map.EastTowerDestroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, {
					"DEFEND_Allied_East_tower_1",
					"DEFEND_Allied_East_tower_2",
				});

				SetAvailableMapGoals( TEAM.AXIS, true, {
					"PLANT_East_Tower",
					"ATTACK_Axis_East_tower_1",
					"ATTACK_Axis_East_tower_4",
				});
			}
		}

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

	East_Ramp_Planted = function( trigger )
	{

		Map.East_Ramp_Dyno += 1;

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

	East_Ramp_Defused = function( trigger )
	{

		Map.East_Ramp_Dyno -= 1;

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

	East_Ramp_Destroyed = function( trigger )
	{

		Map.EastRamp_built = false;
		//disable route

		if ( Map.MainGate_built and !Map.SouthRamp_Built and Map.TunnelRoof_Built and !Map.WestRamp_Built )
		{
			Map.RouteEnabled = false;

			if ( Map.Axis_Eng_Inside == 0 )
			{
				if ( !Map.WestTowerDestroyed )
				{
					SetAvailableMapGoals( TEAM.AXIS, false, {
						"PLANT_West_Tower",
						"ATTACK_Axis_West_tower_.*",
					});

					SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_West_tower_.*" );
				}
				if ( !Map.EastTowerDestroyed )
				{
					SetAvailableMapGoals( TEAM.AXIS, false, {
						"PLANT_East_Tower",
						"ATTACK_Axis_East_tower_.*",
					});

					SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_East_tower_.*" );
				}
			}
		}

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

		Map.East_Ramp_Dyno = 0;

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

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

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

	Main_Gate_Built = function( trigger )
	{

		Map.MainGate_built = true;
		//disable route

		if ( !Map.EastRamp_built and !Map.SouthRamp_Built and Map.TunnelRoof_Built and !Map.WestRamp_Built )
		{
			Map.RouteEnabled = false;

			if ( Map.Axis_Eng_Inside == 0 )
			{
				if ( !Map.WestTowerDestroyed )
				{
					SetAvailableMapGoals( TEAM.AXIS, false, {
						"PLANT_West_Tower",
						"ATTACK_Axis_West_tower_.*",
					});

					SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_West_tower_.*" );
				}
				if ( !Map.EastTowerDestroyed )
				{
					SetAvailableMapGoals( TEAM.AXIS, false, {
						"PLANT_East_Tower",
						"ATTACK_Axis_East_tower_.*",
					});

					SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_East_tower_.*" );
				}
			}
		}

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

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

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

	Main_Gate_Planted = function( trigger )
	{

		Map.Main_Gate_Dyno += 1;

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

	Main_Gate_Defused = function( trigger )
	{

		Map.Main_Gate_Dyno -= 1;

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

	Main_Gate_Destroyed = function( trigger )
	{

		Map.MainGate_built = false;

		Map.RouteEnabled = true;
		//enable route

		if ( Map.Main_Gate_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Main_Gate_.*" );
		}

		Map.Main_Gate_Dyno = 0;

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

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

		if ( Map.Axis_Eng_Inside == 0 )
		{
			if ( !Map.WestTowerDestroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, {
					"DEFEND_Allied_West_tower_1",
					"DEFEND_Allied_West_tower_2",
				});

				SetAvailableMapGoals( TEAM.AXIS, true, {
					"PLANT_West_Tower",
					"ATTACK_Axis_West_tower_1",
					"ATTACK_Axis_West_tower_4",
				});
			}
			if ( !Map.EastTowerDestroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, {
					"DEFEND_Allied_East_tower_1",
					"DEFEND_Allied_East_tower_2",
				});

				SetAvailableMapGoals( TEAM.AXIS, true, {
					"PLANT_East_Tower",
					"ATTACK_Axis_East_tower_1",
					"ATTACK_Axis_East_tower_4",
				});
			}
		}

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

	North_East_Sniper_Tower_Built = function( trigger )
	{

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

	North_East_Sniper_Tower_Planted = function( trigger )
	{

		Map.North_East_Sniper_Tower_Dyno += 1;

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

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

	North_East_Sniper_Tower_Defused = function( trigger )
	{

		Map.North_East_Sniper_Tower_Dyno -= 1;

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

	North_East_Sniper_Tower_Destroyed = function( trigger )
	{

		Map.North_East_Sniper_Tower_Dyno = 0;

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

	South_East_Defence_Built = function( trigger )
	{

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

	South_East_Defence_Planted = function( trigger )
	{

		Map.South_East_Defence_Dyno += 1;

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

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

	South_East_Defence_Defused = function( trigger )
	{

		Map.South_East_Defence_Dyno -= 1;

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

	South_East_Defence_Destroyed = function( trigger )
	{

		Map.South_East_Defence_Dyno = 0;

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

	South_Ramp_Built = function( trigger )
	{

		Map.SouthRamp_Built = true;

		Map.RouteEnabled = true;
		//enable route

		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_South_ramp_4" );
		SetGoalPriority( "DEFEND_Allied_South_ramp_4", 0.519, TEAM.ALLIES, 0 );

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

		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"SMOKEBOMB_Allied_SouthRampBuilt",
			"PLANT_South_Ramp",
		});

		if  ( !Map.WestTowerDestroyed )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Allied_WestTower_SouthRampBuilt" );
		}
		else
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Allied_EastTower_SouthRampBuilt" );
		}

		if ( Map.Axis_Eng_Inside == 0 )
		{
			if ( !Map.WestTowerDestroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, {
					"DEFEND_Allied_West_tower_1",
					"DEFEND_Allied_West_tower_2",
				});

				SetAvailableMapGoals( TEAM.AXIS, true, {
					"PLANT_West_Tower",
					"ATTACK_Axis_West_tower_1",
					"ATTACK_Axis_West_tower_4",
				});
			}
			if ( !Map.EastTowerDestroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, {
					"DEFEND_Allied_East_tower_1",
					"DEFEND_Allied_East_tower_2",
				});

				SetAvailableMapGoals( TEAM.AXIS, true, {
					"PLANT_East_Tower",
					"ATTACK_Axis_East_tower_1",
					"ATTACK_Axis_East_tower_4",
				});
			}
		}
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Allied_South_ramp_4" );

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

	South_Ramp_Planted = function( trigger )
	{

		Map.South_Ramp_Dyno += 1;

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

	South_Ramp_Defused = function( trigger )
	{

		Map.South_Ramp_Dyno -= 1;

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

	South_Ramp_Destroyed = function( trigger )
	{

		Map.SouthRamp_Built = false;
		//disable route

		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"SMOKEBOMB_Allied_SouthRampBuilt",
			"DEFEND_Allied_South_ramp_4",
		});
		SetGoalPriority( "DEFEND_Allied_South_ramp_4", 0.5, TEAM.ALLIES, 0 );

		if ( Map.MainGate_built and !Map.EastRamp_built and Map.TunnelRoof_Built and !Map.WestRamp_Built )
		{
			Map.RouteEnabled = false;

			if ( Map.Axis_Eng_Inside == 0 )
			{
				if ( !Map.WestTowerDestroyed )
				{
					SetAvailableMapGoals( TEAM.AXIS, false, {
						"PLANT_West_Tower",
						"ATTACK_Axis_West_tower_.*",
					});

					SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_West_tower_.*" );
				}
				if ( !Map.EastTowerDestroyed )
				{
					SetAvailableMapGoals( TEAM.AXIS, false, {
						"PLANT_East_Tower",
						"ATTACK_Axis_East_tower_.*",
					});

					SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_East_tower_.*" );
				}
			}
		}

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

		Map.South_Ramp_Dyno = 0;

		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"PLANT_South_Ramp",
			"DEFEND_Allied_WestTower_SouthRampBuilt",
			"DEFEND_Allied_EastTower_SouthRampBuilt",
		});

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

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

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

	South_West_Sniper_Tower_Built = function( trigger )
	{

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

	South_West_Sniper_Tower_Planted = function( trigger )
	{

		Map.South_West_Sniper_Tower_Dyno += 1;

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

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

	South_West_Sniper_Tower_Defused = function( trigger )
	{

		Map.South_West_Sniper_Tower_Dyno -= 1;

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

	South_West_Sniper_Tower_Destroyed = function( trigger )
	{

		Map.South_West_Sniper_Tower_Dyno = 0;

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

	Tunnel_Roof_Built = function( trigger )
	{

		Map.TunnelRoof_Built = true;
		//disable route

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

		if ( !Map.EastRamp_built and !Map.SouthRamp_Built and Map.MainGate_built and !Map.WestRamp_Built )
		{
			Map.RouteEnabled = false;

			if ( Map.Axis_Eng_Inside == 0 )
			{
				if ( !Map.WestTowerDestroyed )
				{
					SetAvailableMapGoals( TEAM.AXIS, false, {
						"PLANT_West_Tower",
						"ATTACK_Axis_West_tower_.*",
					});

					SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_West_tower_.*" );
				}
				if ( !Map.EastTowerDestroyed )
				{
					SetAvailableMapGoals( TEAM.AXIS, false, {
						"PLANT_East_Tower",
						"ATTACK_Axis_East_tower_.*",
					});

					SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_East_tower_.*" );
				}
			}
		}

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

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

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

	Tunnel_Roof_Planted = function( trigger )
	{

		Map.Tunnel_Roof_Dyno += 1;

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

	Tunnel_Roof_Defused = function( trigger )
	{

		Map.Tunnel_Roof_Dyno -= 1;

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

	Tunnel_Roof_Destroyed = function( trigger )
	{

		Map.TunnelRoof_Built = false;

		Map.RouteEnabled = true;
		//enable route

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

		if ( Map.Tunnel_Roof_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Tunnel_Roof_.*" );
		}

		Map.Tunnel_Roof_Dyno = 0;

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

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

		if ( Map.Axis_Eng_Inside == 0 )
		{
			if ( !Map.WestTowerDestroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, {
					"DEFEND_Allied_West_tower_1",
					"DEFEND_Allied_West_tower_2",
				});

				SetAvailableMapGoals( TEAM.AXIS, true, {
					"PLANT_West_Tower",
					"ATTACK_Axis_West_tower_1",
					"ATTACK_Axis_West_tower_4",
				});
			}
			if ( !Map.EastTowerDestroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, {
					"DEFEND_Allied_East_tower_1",
					"DEFEND_Allied_East_tower_2",
				});

				SetAvailableMapGoals( TEAM.AXIS, true, {
					"PLANT_East_Tower",
					"ATTACK_Axis_East_tower_1",
					"ATTACK_Axis_East_tower_4",
				});
			}
		}

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

	West_Defence_Built = function( trigger )
	{

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

	West_Defence_Planted = function( trigger )
	{

		Map.West_Defence_Dyno += 1;

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

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

	West_Defence_Defused = function( trigger )
	{

		Map.West_Defence_Dyno -= 1;

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

	West_Defence_Destroyed = function( trigger )
	{

		Map.West_Defence_Dyno = 0;

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

	West_Ramp_Built = function( trigger )
	{

		Map.WestRamp_Built = true;

		Map.RouteEnabled = true;
		//enable route

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

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

		if ( Map.Axis_Eng_Inside == 0 )
		{
			if ( !Map.WestTowerDestroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, {
					"DEFEND_Allied_West_tower_1",
					"DEFEND_Allied_West_tower_2",
				});

				SetAvailableMapGoals( TEAM.AXIS, true, {
					"PLANT_West_Tower",
					"ATTACK_Axis_West_tower_1",
					"ATTACK_Axis_West_tower_4",
				});
			}
			if ( !Map.EastTowerDestroyed )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, {
					"DEFEND_Allied_East_tower_1",
					"DEFEND_Allied_East_tower_2",
				});

				SetAvailableMapGoals( TEAM.AXIS, true, {
					"PLANT_East_Tower",
					"ATTACK_Axis_East_tower_1",
					"ATTACK_Axis_East_tower_4",
				});
			}
		}

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

	West_Ramp_Planted = function( trigger )
	{

		Map.West_Ramp_Dyno += 1;

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

	West_Ramp_Defused = function( trigger )
	{

		Map.West_Ramp_Dyno -= 1;

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

	West_Ramp_Destroyed = function( trigger )
	{

		Map.WestRamp_Built = false;
		//disable route

		if ( Map.MainGate_built and !Map.EastRamp_built and Map.TunnelRoof_Built and !Map.SouthRamp_Built )
		{
			Map.RouteEnabled = false;

			if ( Map.Axis_Eng_Inside == 0 )
			{
				if ( !Map.WestTowerDestroyed )
				{
					SetAvailableMapGoals( TEAM.AXIS, false, {
						"PLANT_West_Tower",
						"ATTACK_Axis_West_tower_.*",
					});

					SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_West_tower_.*" );
				}
				if ( !Map.EastTowerDestroyed )
				{
					SetAvailableMapGoals( TEAM.AXIS, false, {
						"PLANT_East_Tower",
						"ATTACK_Axis_East_tower_.*",
					});

					SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_East_tower_.*" );
				}
			}
		}

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

		Map.West_Ramp_Dyno = 0;

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

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

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

	East_Tower_Planted = function( trigger )
	{

		Map.East_Tower_Dyno += 1;

		Util.MapDebugPrint( "^5East_Tower_Planted" );

		Map.e_a += 1;
		Map.e_b = "DEFUSE_East_Tower_"+Map.e_a;

		if ( Map.East_Tower_Dyno == 1 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_EastTowerPlanted_1" );
			Util.SetPositionGoal( "DEFEND_EastTowerPlanted_1", Map.e_b );
			Util.SetGoalOffset( -30, -30, 0, "DEFEND_EastTowerPlanted_1" );
			yield();
			SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_EastTowerPlanted_1" );
			sleep(27);
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_EastTowerPlanted_1" );
		}
		if ( Map.East_Tower_Dyno == 2 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_EastTowerPlanted_2" );
			Util.SetPositionGoal( "DEFEND_EastTowerPlanted_2", Map.e_b );
			Util.SetGoalOffset( -30, -30, 0, "DEFEND_EastTowerPlanted_2" );
			yield();
			SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_EastTowerPlanted_2" );
			sleep(27);
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_EastTowerPlanted_2" );
		}

		Util.SetRoleForGoals( "DEFUSE_East_Tower_.*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2, ROLE.DEFENDER3 } );

		if ( Map.Main_Gate_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Main_Gate_.*" );
		}

		if ( Map.Tunnel_Roof_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Tunnel_Roof_.*" );
		}
	},

	East_Tower_Defused = function( trigger )
	{

		Map.East_Tower_Dyno -= 1;

		if ( Map.East_Tower_Dyno == 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_EastTowerPlanted_.*" );
		}

		if ( Map.West_Tower_Dyno == 0 and Map.East_Tower_Dyno == 0 )
		{
			if ( Map.Main_Gate_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Main_Gate_.*" );
			}

			if ( Map.Tunnel_Roof_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Tunnel_Roof_.*" );
			}
		}

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

	East_Tower_Destroyed = function( trigger )
	{

		if ( Map.East_Tower_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_East_Tower_.*" );
		}

		Map.East_Tower_Dyno = 0;

		Map.EastTowerDestroyed = true;

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

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

		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"DEFEND_Allied_East_tower_.*",
			"PLANTMINE_East_tower_.*",
			"DEFEND_EastTowerPlanted_.*",
		});

		if ( Map.West_Tower_Dyno == 0 )
		{
			if ( Map.Main_Gate_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Main_Gate_.*" );
			}

			if ( Map.Tunnel_Roof_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Tunnel_Roof_.*" );
			}
		}

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

			sleep(1);

			ETUtil.WinningChat( TEAM.AXIS );
			sleep(1.5);
			ETUtil.LosingChat( TEAM.ALLIES );
		}
		else
		{
			Util.ClearRoleForGoals( "DEFEND_Allied_East_tower_.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
			Util.ClearRoleForGoals( "DEFEND_EastTowerPlanted_.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
			yield();
			Util.SetRoleForGoals( "DEFEND_Allied_West_tower_.*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2, ROLE.DEFENDER3 } );
			Util.SetRoleForGoals( "DEFEND_WestTowerPlanted_.*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2, ROLE.DEFENDER3 } );
		}

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

	West_Tower_Planted = function( trigger )
	{

		Map.West_Tower_Dyno += 1;

		Util.MapDebugPrint( "^5West_Tower_Planted" );

		Map.w_a += 1;
		Map.w_b = "DEFUSE_West_Tower_"+Map.w_a;

		if ( Map.West_Tower_Dyno == 1 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_WestTowerPlanted_1" );
			Util.SetPositionGoal( "DEFEND_WestTowerPlanted_1", Map.w_b );
			Util.SetGoalOffset( -30, -30, 0, "DEFEND_WestTowerPlanted_1" );
			yield();
			SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_WestTowerPlanted_1" );
			sleep(27);
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_WestTowerPlanted_1" );
		}
		if ( Map.West_Tower_Dyno == 2 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_WestTowerPlanted_2" );
			Util.SetPositionGoal( "DEFEND_WestTowerPlanted_2", Map.w_b );
			Util.SetGoalOffset( -30, -30, 0, "DEFEND_WestTowerPlanted_2" );
			yield();
			SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_WestTowerPlanted_2" );
			sleep(27);
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_WestTowerPlanted_2" );
		}

		Util.SetRoleForGoals( "DEFUSE_West_Tower_.*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2, ROLE.DEFENDER3 } );

		if ( Map.Main_Gate_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Main_Gate_.*" );
		}

		if ( Map.Tunnel_Roof_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_Tunnel_Roof_.*" );
		}
	},

	West_Tower_Defused = function( trigger )
	{

		Map.West_Tower_Dyno -= 1;

		if ( Map.West_Tower_Dyno == 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_WestTowerPlanted_.*" );
		}

		if ( Map.West_Tower_Dyno == 0 and Map.East_Tower_Dyno == 0 )
		{
			if ( Map.Main_Gate_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Main_Gate_.*" );
			}

			if ( Map.Tunnel_Roof_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Tunnel_Roof_.*" );
			}
		}

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

	West_Tower_Destroyed = function( trigger )
	{

		if ( Map.West_Tower_Dyno > 0 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "DEFUSE_West_Tower_.*" );
		}

		Map.West_Tower_Dyno = 0;

		Map.WestTowerDestroyed = true;

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

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

		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"DEFEND_Allied_West_tower_.*",
			"PLANTMINE_West_tower_.*",
			"DEFEND_Allied_WestTower_SouthRampBuilt",
			"DEFEND_WestTowerPlanted_.*",
		});

		if ( Map.East_Tower_Dyno == 0 )
		{
			if ( Map.Main_Gate_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Main_Gate_.*" );
			}

			if ( Map.Tunnel_Roof_Dyno > 0 )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFUSE_Tunnel_Roof_.*" );
			}
		}

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

			sleep(1);

			ETUtil.WinningChat( TEAM.AXIS );
			sleep(1.5);
			ETUtil.LosingChat( TEAM.ALLIES );
		}
		else
		{
			Util.ClearRoleForGoals( "DEFEND_Allied_West_tower_.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } );
			Util.ClearRoleForGoals( "DEFEND_WestTowerPlanted_.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } );
			yield();
			Util.SetRoleForGoals( "DEFEND_Allied_East_tower_.*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2, ROLE.DEFENDER3 } );
			Util.SetRoleForGoals( "DEFEND_EastTowerPlanted_.*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2, ROLE.DEFENDER3 } );

			if ( Map.SouthRamp_Built )
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Allied_EastTower_SouthRampBuilt" );
			}
		}

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

	Thirty_second = function( trigger )
	{

		Util.MapDebugPrint( "^5Thirty_second" );

		sleep(30);

		if ( !Map.EastTowerDestroyed or !Map.WestTowerDestroyed )
		{
			Util.MapDebugPrint( "^5Allies_Win" );

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

	Axis_Inside =
 	{
 		Name="Axis_Inside",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.AXIS )
			{
				if ( GetEntClass(ent) == CLASS.ENGINEER )
				{
					Map.Axis_Eng_Inside += 1;

					if ( Map.Axis_Eng_Inside == 1 )
					{
						SetAvailableMapGoals( TEAM.ALLIES, false, {
							"DEFEND_Allied_.*_ramp_2",
							"DEFEND_Allied_.*_ramp_3",
							"DEFEND_Allied_.*_ramp_4",
							"DEFEND_Allied_Tunnel_roof_2",
							"DEFEND_Allied_Main_gate_2",
							"DEFEND_Allied_Main_gate_3",
							"DEFEND_Allied_Main_gate_4",
						});

						if ( !Map.WestTowerDestroyed )
						{
							SetAvailableMapGoals( TEAM.ALLIES, true, {
								"DEFEND_WestTowerPlanted_1",
								"DEFEND_WestTowerPlanted_2",
								"DEFEND_Allied_West_tower_.*",
							});

							SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_Axis_West_tower_.*" );
						}
						if ( !Map.EastTowerDestroyed )
						{
							SetAvailableMapGoals( TEAM.ALLIES, true, {
								"DEFEND_EastTowerPlanted_1",
								"DEFEND_EastTowerPlanted_2",
								"DEFEND_Allied_East_tower_.*",
							});

							SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_Axis_East_tower_.*" );
						}

						Util.BotChat( TEAM.ALLIES, "sayteam", "^1Axis engineers are in our base! Defend the towers!", 2 );

						Util.MapDebugPrint( "^5Axis Engs are in base" );
					}
				}
			}
		},
		OnExit = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.AXIS )
			{
				if ( GetEntClass(ent) == CLASS.ENGINEER )
				{
					Map.Axis_Eng_Inside -= 1;

					if ( Map.Axis_Eng_Inside == 0 )
					{
						if ( Map.RouteEnabled )
						{
							if ( !Map.WestTowerDestroyed )
							{
								SetAvailableMapGoals( TEAM.ALLIES, false, {
									"DEFEND_WestTowerPlanted_1",
									"DEFEND_WestTowerPlanted_2",
									"DEFEND_Allied_West_tower_3",
									"DEFEND_Allied_West_tower_4",
									"DEFEND_Allied_West_tower_5",
									"DEFEND_Allied_West_tower_6",
									"DEFEND_Allied_West_tower_7",
								});

								SetAvailableMapGoals( TEAM.AXIS, false, {
									"ATTACK_Axis_West_tower_2",
									"ATTACK_Axis_West_tower_3",
									"ATTACK_Axis_West_tower_5",
									"ATTACK_Axis_West_tower_6",
									"ATTACK_Axis_West_tower_7",
								});
							}
							if ( !Map.EastTowerDestroyed )
							{
								SetAvailableMapGoals( TEAM.ALLIES, false, {
									"DEFEND_EastTowerPlanted_1",
									"DEFEND_EastTowerPlanted_2",
									"DEFEND_Allied_East_tower_3",
									"DEFEND_Allied_East_tower_4",
									"DEFEND_Allied_East_tower_5",
									"DEFEND_Allied_East_tower_6",
									"DEFEND_Allied_East_tower_7",
								});

								SetAvailableMapGoals( TEAM.AXIS, false, {
									"ATTACK_Axis_East_tower_2",
									"ATTACK_Axis_East_tower_3",
									"ATTACK_Axis_East_tower_5",
									"ATTACK_Axis_East_tower_6",
									"ATTACK_Axis_East_tower_7",
								});
							}

							SetAvailableMapGoals( TEAM.ALLIES, true, {
								"DEFEND_Allied_.*_ramp_.*",
								"DEFEND_Allied_Tunnel_roof_.*",
								"DEFEND_Allied_Main_gate_.*",
							});

							Util.MapDebugPrint( "^5Axis Engs are not in base, route enabled" );
						}
						else
						{
							Util.BotChat( TEAM.ALLIES, "sayteam", "^1Axis engineers are not in our base! Base is safe.", 2 );

							if ( !Map.WestTowerDestroyed )
							{
								SetAvailableMapGoals( TEAM.ALLIES, false, {
									"DEFEND_WestTowerPlanted_1",
									"DEFEND_WestTowerPlanted_2",
								});

								SetAvailableMapGoals( TEAM.AXIS, false, {
									"PLANT_West_Tower",
									"ATTACK_Axis_West_tower_.*",
								});

								SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_West_tower_.*" );
							}
							if ( !Map.EastTowerDestroyed )
							{
								SetAvailableMapGoals( TEAM.ALLIES, false, {
									"DEFEND_EastTowerPlanted_1",
									"DEFEND_EastTowerPlanted_2",
								});

								SetAvailableMapGoals( TEAM.AXIS, false, {
									"PLANT_East_Tower",
									"ATTACK_Axis_East_tower_.*",
								});

								SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Allied_East_tower_.*" );
							}

							SetAvailableMapGoals( TEAM.ALLIES, true, {
								"DEFEND_Allied_.*_ramp_.*",
								"DEFEND_Allied_Tunnel_roof_.*",
								"DEFEND_Allied_Main_gate_.*",
							});

							Util.MapDebugPrint( "^5Axis Engs are not in base, route disabled" );
						}
					}
				}
			}
		},
	},
};

global OnMapLoad = function()
{
	// Register callback functions
	OnTrigger( "^8The Allies have constructed the Centre Buildings! (It takes a dynamit", Map.Centre_Buildings_Built );
	OnTrigger( "Planted at The Centre Buildings.", Map.Centre_Buildings_Planted );
	OnTrigger( "Defused at The Centre Buildings.", Map.Centre_Buildings_Defused );
	OnTrigger( "^8The Axis have destroyed the Centre Buildings! (It can be rebuilt by t", Map.Centre_Buildings_Destroyed );

	OnTrigger( "^8Allied Command Post constructed. Charge speed increased!", Map.Allied_Command_Post_Built );
	OnTrigger( "^8Axis Command Post constructed. Charge speed increased!", Map.Axis_Command_Post_Built );
	OnTrigger( "Planted at the Command Post.", Map.Command_Post_Planted );
	OnTrigger( "Defused at the Command Post.", Map.Command_Post_Defused );
	OnTrigger( "^8Axis team has destroyed the Allied Command Post!", Map.Allied_Command_Post_Destroyed );
	OnTrigger( "^8Allied team has destroyed the Axis Command Post!", Map.Axis_Command_Post_Destroyed );

	OnTrigger( "^8The Axis have constructed the East Fortifications! (A dynamite will d", Map.East_Fortifications_Built );
	OnTrigger( "Planted at the East Fortifications.", Map.East_Fortifications_Planted );
	OnTrigger( "Defused at the East Fortifications.", Map.East_Fortifications_Defused );
	OnTrigger( "^8The Allies have destroyed the East Fortifications! (Axis can rebuild ", Map.East_Fortifications_Destroyed );

	OnTrigger( "^8The Axis have constructed the East Ramp! (A satchel will destroy it.)", Map.East_Ramp_Built );
	OnTrigger( "Planted at the East Ramp.", Map.East_Ramp_Planted );
	OnTrigger( "Defused at the East Ramp.", Map.East_Ramp_Defused );
	OnTrigger( "^8The Allies have destroyed the East Ramp! (Axis can rebuild it.)", Map.East_Ramp_Destroyed );

	OnTrigger( "^8The Allies have constructed the Main Gate! (It takes a satchel to des", Map.Main_Gate_Built );
	OnTrigger( "Planted at Main Gate.", Map.Main_Gate_Planted );
	OnTrigger( "Defused at Main Gate.", Map.Main_Gate_Defused );
	OnTrigger( "^8The Axis have destroyed the Main Gate! (It can be rebuilt by the Alli", Map.Main_Gate_Destroyed );

	OnTrigger( "^8The Axis have constructed the North-East Sniper Tower! (A satchel wil", Map.North_East_Sniper_Tower_Built );
	OnTrigger( "Planted at the North-East Sniper Tower.", Map.North_East_Sniper_Tower_Planted );
	OnTrigger( "Defused at the North-East Sniper Tower.", Map.North_East_Sniper_Tower_Defused );
	OnTrigger( "^8The Allies have destroyed the North-East Sniper Tower! (Axis can rebu", Map.North_East_Sniper_Tower_Destroyed );

	OnTrigger( "^8The Allies have constructed the South East Defence! (It takes a dynam", Map.South_East_Defence_Built );
	OnTrigger( "Planted at the South East Defence.", Map.South_East_Defence_Planted );
	OnTrigger( "Defused at the South East Defence.", Map.South_East_Defence_Defused );
	OnTrigger( "^8The Axis have destroyed the South East Defence! (It can be rebuilt by", Map.South_East_Defence_Destroyed );

	OnTrigger( "^8The Axis have constructed the South Ramp! (It takes a dynamite to des", Map.South_Ramp_Built );
	OnTrigger( "Planted at the South Ramp.", Map.South_Ramp_Planted );
	OnTrigger( "Defused at the South Ramp.", Map.South_Ramp_Defused );
	OnTrigger( "^8The Allies have destroyed the South Ramp! (Axis can rebuild it.)", Map.South_Ramp_Destroyed );

	OnTrigger( "^8The Axis have constructed the South-West Sniper Tower! (A satchel wil", Map.South_West_Sniper_Tower_Built );
	OnTrigger( "Planted at the South-West Sniper Tower.", Map.South_West_Sniper_Tower_Planted );
	OnTrigger( "Defused at the South-West Sniper Tower.", Map.South_West_Sniper_Tower_Defused );
	OnTrigger( "^8The Allies have destroyed the South-East Sniper Tower! (Axis can rebu", Map.South_West_Sniper_Tower_Destroyed );

	OnTrigger( "^8The Allies have fixed the Tunnel Roof! (It takes a satchel to destroy", Map.Tunnel_Roof_Built );
	OnTrigger( "Planted at the Tunnel Roof.", Map.Tunnel_Roof_Planted );
	OnTrigger( "Defused at the Tunnel Roof.", Map.Tunnel_Roof_Defused );
	OnTrigger( "^8The Axis have destroyed the Tunnel Roof! (It can be rebuilt by the Al", Map.Tunnel_Roof_Destroyed );

	OnTrigger( "^8The Allies have constructed the West Defence! (It takes a dynamite to", Map.West_Defence_Built );
	OnTrigger( "Planted at the West Defence.", Map.West_Defence_Planted );
	OnTrigger( "Defused at the West Defence.", Map.West_Defence_Defused );
	OnTrigger( "^8The Axis have destroyed the West Defence! (It can be rebuilt by the A", Map.West_Defence_Destroyed );

	OnTrigger( "^8The Axis have constructed the West Ramp! (A satchel will destroy it.)", Map.West_Ramp_Built );
	OnTrigger( "Planted at the West Ramp.", Map.West_Ramp_Planted );
	OnTrigger( "Defused at the West Ramp.", Map.West_Ramp_Defused );
	OnTrigger( "^8The Allies have destroyed the West Ramp! (Axis can rebuild it.)", Map.West_Ramp_Destroyed );

	OnTrigger( "Planted at the East Tower.", Map.East_Tower_Planted );
	OnTrigger( "Defused at the East Tower.", Map.East_Tower_Defused );
	OnTrigger( "^8The Axis have destroyed the East Tower.", Map.East_Tower_Destroyed );

	OnTrigger( "Planted at the West Tower.", Map.West_Tower_Planted );
	OnTrigger( "Defused at the West Tower.", Map.West_Tower_Defused );
	OnTrigger( "^8The Axis have destroyed the West Tower.", Map.West_Tower_Destroyed );

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

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

	SetAvailableMapGoals( TEAM.ALLIES, true, {
		"PLANTMINE_.*",
		"BUILD_South_East_Defence",
		"BUILD_Centre_Buildings",
		"BUILD_West_Defence",
		"BUILD_Command_Post",
		".*_Allied_.*_ramp_.*",
		".*_Allied_Tunnel_roof_.*",
		".*_Allied_Main_gate_.*",
	});

	SetAvailableMapGoals( TEAM.AXIS, true, {
		"AMMOCAB_cabinet_supply",
		"HEALTHCAB_cabinet_health",
		"BUILD_.*_Tower",
		"BUILD_East_Fortifications",
		"BUILD_Command_Post",
		"PLANT_Main_Gate",
		"PLANT_Tunnel_Roof",
		"BUILD_.*_Ramp",
		"ATTACK_Axis_.*_ramp_.*",
		"ATTACK_Axis_Main_gate_.*",
		"ATTACK_Axis_Tunnel_roof_.*",
	});

	//Priorities
	SetGoalPriority( "PLANT_North_East_Sniper_Tower", 0.4, TEAM.ALLIES, 0 );
	SetGoalPriority( "PLANT_South_West_Sniper_Tower", 0.4, TEAM.ALLIES, 0 );
	SetGoalPriority( "PLANT_Command_Post", 0.45, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_.*_ramp_1", 0.51, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_.*_ramp_2", 0.505, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_Tunnel_roof_1", 0.51, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_Main_gate_1", 0.51, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_Main_gate_2", 0.505, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_Main_gate_4", 0.505, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_West_tower_4", 0.515, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_West_tower_5", 0.515, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_West_tower_6", 0.515, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_West_tower_7", 0.515, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_West_tower_1", 0.517, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_West_tower_2", 0.517, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_West_tower_3", 0.52, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_WestTower_SouthRampBuilt", 0.525, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_EastTower_SouthRampBuilt", 0.525, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_East_tower_4", 0.515, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_East_tower_5", 0.515, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_East_tower_6", 0.515, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_East_tower_7", 0.515, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_East_tower_1", 0.517, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_East_tower_2", 0.517, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_Allied_East_tower_3", 0.52, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_WestTowerPlanted_.*", 0.805, TEAM.ALLIES, 0 );
	SetGoalPriority( "DEFEND_EastTowerPlanted_.*", 0.805, TEAM.ALLIES, 0 );
	SetGoalPriority( "BUILD_Command_Post", 0.6, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_South_East_Defence", 0.75, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_Centre_Buildings", 0.75, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_West_Defence", 0.75, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_East_Ramp", 0.78, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_East_Ramp", 0.82, TEAM.ALLIES, CLASS.COVERTOPS );
	SetGoalPriority( "PLANT_West_Ramp", 0.78, TEAM.ALLIES, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_West_Ramp", 0.82, TEAM.ALLIES, CLASS.COVERTOPS );

	SetGoalPriority( "PLANT_Centre_Buildings", 0.4, TEAM.AXIS, 0 );
	SetGoalPriority( "PLANT_South_East_Defence", 0.4, TEAM.AXIS, 0 );
	SetGoalPriority( "PLANT_West_Defence", 0.4, TEAM.AXIS, 0 );
	SetGoalPriority( "PLANT_Command_Post", 0.45, TEAM.AXIS, 0 );
	SetGoalPriority( "ATTACK_Axis_East_tower_.*", 0.55, TEAM.AXIS, 0 );
	SetGoalPriority( "ATTACK_Axis_West_tower_.*", 0.55, TEAM.AXIS, 0 );
	SetGoalPriority( "BUILD_Command_Post", 0.6, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_.*_Tower", 0.78, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_East_Fortifications", 0.78, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_Command_Post", 0.785, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Main_Gate", 0.8, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_Tunnel_Roof", 0.8, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_West_Tower", 0.9, TEAM.AXIS, CLASS.ENGINEER );	//as well as build ramps - or increase?
	SetGoalPriority( "PLANT_East_Tower", 0.9, TEAM.AXIS, CLASS.ENGINEER );	//as well as build ramps - or increase?

	//Allied roles
	Util.SetRoleForGoals( "PLANTMINE_.*", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2, ROLE.DEFENDER3 } );

	Util.SetRoleForGoals( "DEFEND_Allied_WestTower_SouthRampBuilt", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2 } );
	Util.SetRoleForGoals( "DEFEND_Allied_EastTower_SouthRampBuilt", { ROLE.DEFENDER, ROLE.DEFENDER1, ROLE.DEFENDER2 } );

	Util.SetRoleForGoals( "DEFEND_Allied_East_tower_.*", { ROLE.DEFENDER, ROLE.DEFENDER1 } );
	Util.SetRoleForGoals( "DEFEND_Allied_West_tower_.*", { ROLE.DEFENDER2, ROLE.DEFENDER3 } );

	Util.SetRoleForGoals( ".*_Allied_South_ramp_.*", ROLE.DEFENDER );
	Util.SetRoleForGoals( "BUILD_South_East_Defence", ROLE.DEFENDER );
	Util.SetRoleForGoals( "BUILD_Centre_Buildings", ROLE.DEFENDER );
	Util.SetRoleForGoals( "SMOKEBOMB_Allied_SouthRampBuilt", ROLE.DEFENDER );
	Util.SetRoleForGoals( "PLANT_South_Ramp", ROLE.DEFENDER );
	Util.SetRoleForGoals( "PLANT_East_Ramp", ROLE.DEFENDER );
	Util.SetRoleForGoals( "CALLARTILLERY_Allied_South_ramp_.*", ROLE.DEFENDER );

	Util.SetRoleForGoals( "CALLARTILLERY_Allied_South_ramp_.*", ROLE.DEFENDER1 );
	Util.SetRoleForGoals( "ARTILLERY_S_Allied_South_ramp_.*", ROLE.DEFENDER1 );
	Util.SetRoleForGoals( ".*_Allied_East_ramp_.*", ROLE.DEFENDER1 );
	Util.SetRoleForGoals( "BUILD_South_East_Defence", ROLE.DEFENDER1 );
	Util.SetRoleForGoals( "BUILD_Centre_Buildings", ROLE.DEFENDER1 );
	Util.SetRoleForGoals( "SMOKEBOMB_Allied_SouthRampBuilt", ROLE.DEFENDER1 );
	Util.SetRoleForGoals( "PLANT_South_Ramp", ROLE.DEFENDER1 );
	Util.SetRoleForGoals( "PLANT_East_Ramp", ROLE.DEFENDER1 );

	Util.SetRoleForGoals( "CALLARTILLERY_Allied_South_ramp_.*", ROLE.DEFENDER2 );
	Util.SetRoleForGoals( "ARTILLERY_S_Allied_South_ramp_.*", ROLE.DEFENDER2 );
	Util.SetRoleForGoals( ".*_Allied_West_ramp_.*", ROLE.DEFENDER2 );
	Util.SetRoleForGoals( "BUILD_West_Defence", ROLE.DEFENDER2 );
	Util.SetRoleForGoals( "PLANT_West_Ramp", ROLE.DEFENDER2 );
	Util.SetRoleForGoals( "SMOKEBOMB_Allied_SouthRampBuilt", ROLE.DEFENDER2 );

	Util.SetRoleForGoals( ".*_Allied_Tunnel_roof_.*", ROLE.DEFENDER3 );
	Util.SetRoleForGoals( ".*_Allied_Main_gate_.*", ROLE.DEFENDER3 );
	Util.SetRoleForGoals( "BUILD_West_Defence", ROLE.DEFENDER3 );
	Util.SetRoleForGoals( "PLANT_West_Ramp", ROLE.DEFENDER3 );

	//Axis roles
	Util.SetRoleForGoals( ".*_Axis_East_ramp_.*", ROLE.ATTACKER );
	Util.SetRoleForGoals( "BUILD_East_Ramp", ROLE.ATTACKER );
	Util.SetRoleForGoals( "BUILD_East_Fortifications", ROLE.ATTACKER );
	Util.SetRoleForGoals( "BUILD_North_East_Sniper_Tower", ROLE.ATTACKER );

	Util.SetRoleForGoals( ".*_Axis_Tunnel_roof_.*", ROLE.ATTACKER1 );
	Util.SetRoleForGoals( ".*_Axis_Main_gate_.*", ROLE.ATTACKER1 );
	Util.SetRoleForGoals( "PLANT_Main_Gate", ROLE.ATTACKER1 );
	Util.SetRoleForGoals( "PLANT_Tunnel_Roof", ROLE.ATTACKER1 );

	Util.SetRoleForGoals( ".*_Axis_South_ramp_.*", ROLE.ATTACKER2 );
	Util.SetRoleForGoals( "BUILD_South_Ramp", ROLE.ATTACKER2 );
	Util.SetRoleForGoals( "BUILD_South_West_Sniper_Tower", ROLE.ATTACKER2 );

	Util.SetRoleForGoals( ".*_Axis_West_ramp_.*", ROLE.ATTACKER3 );
	Util.SetRoleForGoals( "BUILD_West_Ramp", ROLE.ATTACKER3 );
	Util.SetRoleForGoals( "BUILD_Command_Post", ROLE.ATTACKER3 );

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

	Util.AddUseWp( "PLANT_East_Ramp", "plant_east_ramp" );
	Util.AddUseWp( "PLANT_South_Ramp", "plant_south_ramp" );
	Util.AddUseWp( "PLANT_West_Ramp", "plant_west_ramp" );
	Util.AddUseWp( "PLANT_Tunnel_Roof", "plant_tunnel_roof" );
	Util.AddUseWp( "PLANT_East_Tower", "plant_EastTower" );
	Util.AddUseWp( "PLANT_West_Tower", "plant_WestTower" );

	Wp.SetWaypointFlag("west_tower_waypoint", "closed", false);
	Wp.SetWaypointFlag("east_tower_waypoint", "closed", false);
	Wp.SetWaypointFlag("plant_tunnel_roof", "closed", false);

	NP1 = OnTriggerRegion(AABB(-1641.427,735.562,1339.237,-1487.125,944.874,1451.125), RegionTrigger.DisableBotPush);	//Allied door
	DCM1 = OnTriggerRegion(AABB(-1641.427,735.562,1339.237,-1487.125,944.874,1451.125), RegionTrigger.DisableCombatMovement);
	NP2 = OnTriggerRegion(AABB(1118.574,-662.139,1013.973,1760.874,-458.569,1476.477), RegionTrigger.DisableBotPush);	//East ramp
	DCM2 = OnTriggerRegion(AABB(1118.574,-662.139,1013.973,1760.874,-458.569,1476.477), RegionTrigger.DisableCombatMovement);
	NP3 = OnTriggerRegion(AABB(-520.834,-1161.788,1294.016,-327.708,-933.840,1503.917), RegionTrigger.DisableBotPush);	//South ramp
	DCM3 = OnTriggerRegion(AABB(-520.834,-1161.788,1294.016,-327.708,-933.840,1503.917), RegionTrigger.DisableCombatMovement);
	NP4 = OnTriggerRegion(AABB(-1861.869,-149.821,910.715,-1283.399,19.662,1343.722), RegionTrigger.DisableBotPush);	//West ramp
	DCM4 = OnTriggerRegion(AABB(-1861.869,-149.821,910.715,-1283.399,19.662,1343.722), RegionTrigger.DisableCombatMovement);
	NP5 = OnTriggerRegion(AABB(-960.875,-443.727,1725.125,-795.496,-165.816,1843.125), RegionTrigger.DisableBotPush);	//Around defend goal: DEFEND_Allied_WestTower_SouthRampBuilt
	DCM5 = OnTriggerRegion(AABB(-960.875,-443.727,1725.125,-795.496,-165.816,1843.125), RegionTrigger.DisableCombatMovement);
	NP6 = OnTriggerRegion(AABB(597.515,-700.680,2081.125,691.772,-604.344,2163.125), RegionTrigger.DisableBotPush);	//Around defend goal: DEFEND_Allied_EastTower_SouthRampBuilt
	DCM6 = OnTriggerRegion(AABB(597.515,-700.680,2081.125,691.772,-604.344,2163.125), RegionTrigger.DisableCombatMovement);

	axisInside_1 = OnTriggerRegion(AABB(-1591.389,-845.478,1305.125,1220.160,-76.257,2472.508), Map.Axis_Inside);
	axisInside_2 = OnTriggerRegion(AABB(-1346.182,-193.484,1145.937,560.875,824.875,1989.219), Map.Axis_Inside);
	axisInside_3 = OnTriggerRegion(AABB(-1456.871,544.523,1125.753,170.529,1093.282,1786.913), Map.Axis_Inside);
	axisInside_4 = OnTriggerRegion(AABB(-1467.044,-938.472,1345.125,1197.364,-682.870,1773.261), Map.Axis_Inside);
	axisInside_5 = OnTriggerRegion(AABB(379.276,-201.316,1365.300,827.386,73.621,1905.029), Map.Axis_Inside);
	axisInside_6 = OnTriggerRegion(AABB(420.715,-15.930,1359.565,690.140,179.229,1888.196), Map.Axis_Inside);
	axisInside_7 = OnTriggerRegion(AABB(-1968.640,959.333,1122.989,59.915,1348.740,1883.840), Map.Axis_Inside);
	axisInside_8 = OnTriggerRegion(AABB(-1464.190,185.145,1268.425,-1275.278,1072.875,1745.389), Map.Axis_Inside);
	axisInside_9 = OnTriggerRegion(AABB(-1968.875,1207.978,1214.326,-1087.125,1456.875,1760.128), Map.Axis_Inside);
	axisInside_10 = OnTriggerRegion(AABB(-324.745,-1099.642,1323.746,1251.875,-872.260,1806.827), Map.Axis_Inside);
	axisInside_11 = OnTriggerRegion(AABB(63.125,-1215.972,1315.339,1256.744,-995.722,1794.492), Map.Axis_Inside);
	axisInside_12 = OnTriggerRegion(AABB(457.180,-1460.602,1270.263,1328.875,-1121.453,1742.851), Map.Axis_Inside);
	axisInside_13 = OnTriggerRegion(AABB(703.126,-1716.987,1204.203,1328.875,-1311.538,1750.512), Map.Axis_Inside);
	axisInside_14 = OnTriggerRegion(AABB(1093.187,-1856.877,1273.114,1584.855,-1359.125,1772.399), Map.Axis_Inside);
	axisInside_15 = OnTriggerRegion(AABB(1200.413,-1996.389,1329.134,1584.875,-1598.418,1820.791), Map.Axis_Inside);
	axisInside_16 = OnTriggerRegion(AABB(1359.125,-2108.630,1303.610,1584.874,-1890.545,1856.854), Map.Axis_Inside);
	axisInside_17 = OnTriggerRegion(AABB(1137.299,-356.990,1305.125,1340.875,-60.811,1789.530), Map.Axis_Inside);
	axisInside_18 = OnTriggerRegion(AABB(51.584,-511.237,465.380,331.991,-201.214,1582.817), Map.Axis_Inside);

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

global OnBotJoin = function( bot )
{
	Server.MinClassCount[TEAM.ALLIES][CLASS.SOLDIER] = 0;
	Server.MinClassCount[TEAM.AXIS][CLASS.SOLDIER] = 0;
};
