global Map =
{
	GoldIsStolen = false,
	Barrier1IsBuilt = false,
	Barrier2IsBuilt = false,
	GateIsIntact = true,
	Command = false, 	//CP not owned by allies
	Key = false,		//Keycard not captured
	Spawnback = false, 	//Axis didnt spawn back yet
	//SelfkillonLow
	Suicide = true,
	Pushing = true,
	
	MainPlant = 0,
	
	// delay dispense ammo a bit so they will use arty goals right away
	DispenseAmmoTime = 12,
	
	
	Roles =
	{
		// split the defense into east and west teams. anything past 8 bots will use
		// more aggressive roaming positions
		AXIS =
		{
			AllBots = true,
			DEFENDER2 = // Flag Heavy
			{
				crucialClass = CLASS.MEDIC, // Revivetrain
				numbots = 4,
			},
			DEFENDER1 = // Main weak
			{
				crucialClass = CLASS.ENGINEER, // for defuses
				numbots = 3,
				MinBotsForRole = 4,
			},
		},
		// split for more attackpower
		ALLIES =
		{
			ATTACKER2 = // Plant Engi
			{
				crucialClass = CLASS.ENGINEER, // for plants
				numbots = 3,
				MinBotsForRole = 4,
			},
			ATTACKER1 = // Flag medic
			{	
				crucialClass = CLASS.MEDIC, // Revivetrain
				numbots = 4,
			},
		},
	},

	OnFlagTake = function( trigger )
	{
		if ( Map.GoldIsStolen)
		{
			return;
		}
		SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_AFlag.*");
		SetAvailableMapGoals(TEAM.ALLIES, false, "ATTACK_Flag.*");
		SetAvailableMapGoals(TEAM.ALLIES, true, "ATTACK_BFlag.*");
		SetAvailableMapGoals(TEAM.ALLIES, false, "MOBILEMORTAR_AlSpawn");
		SetAvailableMapGoals(TEAM.AXIS, true, "ATTACK_Flag.*");
		
		
		SetAvailableMapGoals(TEAM.AXIS, false, "ARTILLERY_S_AxFirst_.*");
		SetAvailableMapGoals(TEAM.AXIS, false, "GRENADE_AxFirst_.*");
		SetAvailableMapGoals(TEAM.AXIS, false, "CALLARTILLERY_AxFirst_.*");
		SetAvailableMapGoals(TEAM.AXIS, false, "AIRSTRIKE_AxFirst_.*");
		
		
		SetAvailableMapGoals(TEAM.ALLIES, false, "AIRSTRIKE_AllFirst_.*");
		SetAvailableMapGoals(TEAM.ALLIES, false, "GRENADE_AllFirst_.*");
		Util.MapDebugPrint("OnFlagTake");
	},

	OnFlagRet = function( trigger )
	{
		if ( Map.GoldIsStolen)
		{
			return;
		}
		SetAvailableMapGoals(TEAM.AXIS, true, "ATTACK_AFlag.*");
		SetAvailableMapGoals(TEAM.ALLIES, true, "ATTACK_Flag.*");
		SetAvailableMapGoals(TEAM.ALLIES, false, "ATTACK_BFlag.*");
		SetAvailableMapGoals(TEAM.ALLIES, true, "MOBILEMORTAR_AlSpawn");
		SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_Flag.*");
		
		SetAvailableMapGoals(TEAM.AXIS, true, "ARTILLERY_S_AxFirst_.*");
		SetAvailableMapGoals(TEAM.AXIS, true, "GRENADE_AxFirst_.*");
		SetAvailableMapGoals(TEAM.AXIS, true, "CALLARTILLERY_AxFirst_.*");
		SetAvailableMapGoals(TEAM.AXIS, true, "AIRSTRIKE_AxFirst_.*");
		
		
		SetAvailableMapGoals(TEAM.ALLIES, true, "AIRSTRIKE_AllFirst_.*");
		SetAvailableMapGoals(TEAM.ALLIES, true, "GRENADE_AllFirst_.*");

		Util.MapDebugPrint("OnFlagRet");
	},

	OnFlagSec = function( trigger )
	{
		sleep(2);
		SetAvailableMapGoals(TEAM.ALLIES, false, "CHECKPOINT_flag1_flag");
		SetAvailableMapGoals(TEAM.AXIS, false, "CHECKPOINT_flag1_flag");
		Util.SetMaxUsers( 2, "BUILD_Neutral_Command_Post" );
		
						if ( Map.GoldIsStolen)
						{
						SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
						return;
						}
					
						SetAvailableMapGoals(TEAM.ALLIES, false, ".*_Flag.*");
						SetAvailableMapGoals(TEAM.ALLIES, false, ".*_DYNOCOVER.*");
						SetAvailableMapGoals(TEAM.ALLIES, false, "ATTACK_BFlag.*");
						SetAvailableMapGoals(TEAM.ALLIES, false, "MOBILEMORTAR_AlSpawn");

						
						SetAvailableMapGoals(TEAM.ALLIES, true, ".*_CPA.*");
						SetAvailableMapGoals(TEAM.ALLIES, true, "BUILD_Neutral_Command_Post");
						SetAvailableMapGoals(TEAM.ALLIES, true, "CAPPOINT_236");
						SetAvailableMapGoals(TEAM.ALLIES, true, "FLAG_keycard_flag");
						SetAvailableMapGoals(TEAM.ALLIES, true, "PLANT_Neutral_Command_Post");
						SetAvailableMapGoals(TEAM.ALLIES, true, "ROUTE_maindoor_left");
						
						
				
						
						SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_AFlag.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_Flag.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_Axfirst_.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "PLANTMINE_Amine.*");
						
						SetAvailableMapGoals(TEAM.AXIS, true, ".*_CPB.*");
						SetAvailableMapGoals(TEAM.AXIS, true, ".*_CPC_.*");
						SetAvailableMapGoals(TEAM.AXIS, true, "BUILD_Neutral_Command_Post");
						SetAvailableMapGoals(TEAM.AXIS, true, "PLANT_Neutral_Command_Post");
						
						SetAvailableMapGoals(TEAM.AXIS, true, "ARTILLERY_S_AxCP_1");
				
						SetGoalPriority( "PLANT_Neutral_Command_Post", 0.91, TEAM.AXIS, CLASS.COVERTOPS );
						SetGoalPriority( "PLANT_Neutral_Command_Post", 0.91, TEAM.ALLIES, CLASS.COVERTOPS );
						
						SetAvailableMapGoals(TEAM.AXIS, false, ".*_AxFirst_.*");
						SetAvailableMapGoals( TEAM.ALLIES, true, "ROUTE_flag.*" );
									
						
						SetAvailableMapGoals(TEAM.ALLIES, false, "AIRSTRIKE_AllFirst_.*");
						SetAvailableMapGoals(TEAM.ALLIES, false, "GRENADE_AllFirst_.*");
						
						//Roles
						//CP Stage
						//Axis
						Util.SetRoleForGoals("DEFEND_CPB.*", ROLE.DEFENDER1);
						Util.SetRoleForGoals("ATTACK_CPC_.*", ROLE.DEFENDER2);
						
						//Allied First Stage
						Util.SetRoleForGoals("ATTACK_CPA_.*", ROLE.ATTACKER1);
						Util.SetRoleForGoals("ATTACK_CPA2_.*", ROLE.ATTACKER2);
						
					
						SetAvailableMapGoals(TEAM.AXIS, false, "DEFUSE_Main_Gate.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "DEFUSE_Side_Door.*");
		
						// allied covert ops in disguise can sneak through team doors to destroy these goals
						Util.ClearRoleForGoals( "PLANT_Neutral_Command_Post", ROLE.INFILTRATOR );
						Util.ClearRoleForGoals( "FLAG_keycard_flag", ROLE.INFILTRATOR );
						Util.ClearRoleForGoals( "CAPPOINT_236", ROLE.INFILTRATOR );
						
						Map.GateIsIntact = false;
						Map.Suicide = false;	
						Util.MapDebugPrint("OnFlagSec");
	},

	OnSide = function( trigger )
	{
		if ( Map.GoldIsStolen)
		{
		SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
		return;
		}
		SetAvailableMapGoals(TEAM.ALLIES, true, "BUILD_Neutral_Command_Post");
		SetAvailableMapGoals(TEAM.ALLIES, true, "PLANT_Neutral_Command_Post");
		SetAvailableMapGoals(TEAM.ALLIES, true, "FLAG_keycard_flag");
		SetAvailableMapGoals(TEAM.ALLIES, true, "CAPPOINT_236");
		SetAvailableMapGoals(TEAM.ALLIES, true, "ROUTE_sidedoor_right");
		SetAvailableMapGoals(TEAM.ALLIES, true, "ROUTE_sidedoor_left");
		SetAvailableMapGoals(TEAM.ALLIES, true, "ROUTE_sidedoor");
		
		// allied covert ops in disguise can sneak through team doors to destroy these goals
		Util.ClearRoleForGoals( "PLANT_Neutral_Command_Post", ROLE.INFILTRATOR );
		Util.ClearRoleForGoals( "FLAG_keycard_flag", ROLE.INFILTRATOR );
		Util.ClearRoleForGoals( "CAPPOINT_236", ROLE.INFILTRATOR );
		
		SetAvailableMapGoals(TEAM.AXIS, true, "PLANT_Neutral_Command_Post");
		SetGoalPriority( "PLANT_Neutral_Command_Post", 0.91, TEAM.AXIS, CLASS.COVERTOPS );
		SetGoalPriority( "PLANT_Neutral_Command_Post", 0.91, TEAM.ALLIES, CLASS.COVERTOPS );
		SetGoalPriority( "FLAG_keycard_flag", 0.0, TEAM.ALLIES, CLASS.COVERTOPS );
		

		Util.MapDebugPrint("OnSide");
	},

	OnAllCP = function( trigger )
	{
		Map.Command = true;  //Allies own CP
		
		//disables CommandPost-Attack etc
		SetAvailableMapGoals(TEAM.AXIS, false, "PLANT_Neutral_Command_Post");
		SetAvailableMapGoals(TEAM.AXIS, false, "BUILD_Neutral_Command_Post");
		SetAvailableMapGoals(TEAM.ALLIES, false, ".*_CPA_.*");
		SetAvailableMapGoals(TEAM.AXIS, false, ".*_CPB.*");
		SetAvailableMapGoals(TEAM.AXIS, false, "CALLARTILLERY_AxCP_1");
		SetAvailableMapGoals(TEAM.AXIS, false, "ARTILLERY_S_AxCP_1");
		SetGoalPriority( "BUILD_Truck", 0.8 );

		if(!Map.Spawnback)
		{	
			Util.ChangeSpawn(TEAM.AXIS, 4);
			SetAvailableMapGoals(TEAM.ALLIES, false, "ATTACK_Flag.*");
			SetAvailableMapGoals(TEAM.ALLIES, false, ".*_DYNOCOVER.*");
			SetAvailableMapGoals(TEAM.ALLIES, false, "ATTACK_BFlag.*");
			SetAvailableMapGoals(TEAM.ALLIES, false, "MOBILEMORTAR_AlSpawn");
			SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_AFlag.*");
			SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_Flag.*");
			SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_Axfirst_.*");
			SetAvailableMapGoals(TEAM.AXIS, false, "PLANTMINE_Amine.*");
		}
		
		if (Map.Key) //Keycard captured
		{
			if ( Map.GoldIsStolen)
				{
				SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
				SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Truck_Barrier_1" );
				return;
				}
			SetAvailableMapGoals(TEAM.ALLIES, true, "BUILD_Truck");
			
			SetAvailableMapGoals( TEAM.ALLIES, true, ".*_TruckA.*" );
			
			
			SetAvailableMapGoals(TEAM.ALLIES, false, ".*_CPA2_.*");
			SetAvailableMapGoals(TEAM.ALLIES, false, ".*_KeyA.*");
			
			SetAvailableMapGoals(TEAM.AXIS, false, "MOBILEMG42_Keyd1");
			SetAvailableMapGoals(TEAM.AXIS, true, "BUILD_Truck_Barrier_1");
			SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_TruckD.*" );
			SetAvailableMapGoals( TEAM.AXIS, true, "CALLARTILLERY_TruckDEF_1" );
			SetAvailableMapGoals( TEAM.AXIS, true, "ARTILLERY_S_TruckDEF_1" );
			SetAvailableMapGoals( TEAM.AXIS, true, "MOBILEMG42_TruckDEF_.*" );
			SetAvailableMapGoals( TEAM.AXIS, true, "GRENADE_TruckDEF_.*" );
			SetAvailableMapGoals(TEAM.AXIS, false, ".*_CPC_.*");
			
			Server.MinClassCount[TEAM.ALLIES][CLASS.COVERTOPS] = 0;
			Server.MinClassCount[TEAM.ALLIES][CLASS.ENGINEER] += 1;
			Server.MinClassCount[TEAM.ALLIES][CLASS.FIELDOPS] -= 1;
			Server.MinClassCount[TEAM.ALLIES][CLASS.MEDIC] += 1;
			
			
		} 		
		else if (!Map.Key) //Keycard required
		{	
			//enables Keycard-Attack
			SetAvailableMapGoals(TEAM.ALLIES, true, "ATTACK_CPA2_.*");
			SetAvailableMapGoals(TEAM.ALLIES, true, ".*_KeyA.*");
			
			SetAvailableMapGoals(TEAM.AXIS, true, "ATTACK_Keyd.*");
			SetAvailableMapGoals(TEAM.AXIS, true, "MOBILEMG42_Keyd1");
			SetAvailableMapGoals( TEAM.AXIS, true, "CALLARTILLERY_keyd_1" );
			SetAvailableMapGoals( TEAM.AXIS, true, "ARTILLERY_S_keyd_1" );
			
			SetGoalPriority( "BUILD_Truck_Barrier_1", 0.9 );
			SetGoalPriority( "FLAG_keycard_flag", 0.8 );
		}
		
		Util.SetMaxUsers( 3, "FLAG_.*" );
		Util.MapDebugPrint("OnAllCP");
		
	},

	OnKeyStolen = function( trigger )
	{
		SetAvailableMapGoals(TEAM.AXIS, true, "ATTACK_cappoint.*");
		SetAvailableMapGoals(TEAM.ALLIES, true, "ATTACK_cappoint.*");
		Util.MapDebugPrint("OnKeyStolen");
		
		Map.Suicide = false;
	},

	OnKeyReturned = function( trigger )
	{
		SetAvailableMapGoals(TEAM.ALLIES, false, "ATTACK_cappoint.*");
		SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_cappoint.*");
		Util.MapDebugPrint("OnKeyReturned");
	},

	OnKeySec = function( trigger )
	{
		Map.Key = true;  //Keycard captured
		
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_cappoint.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, ".*_KeyA.*" );
		SetAvailableMapGoals(TEAM.ALLIES, false, "ATTACK_CPA2_.*");
		
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_cappoint.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_Keyd.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "CALLARTILLERY_keyd_1" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ARTILLERY_S_keyd_1" );
		SetAvailableMapGoals(TEAM.AXIS, false, ".*_CPC_.*");
		SetAvailableMapGoals(TEAM.AXIS, true, "DEFEND_AxBackBarr_.*");
		SetAvailableMapGoals(TEAM.ALLIES, false, "FLAG_keycard_flag");
		SetGoalPriority( "BUILD_Truck_Barrier_1", 0.9 );
		
		SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Truck" );
		
		if(!Map.Spawnback)
		{	
			Util.ChangeSpawn(TEAM.AXIS, 4);
			SetAvailableMapGoals(TEAM.ALLIES, false, "ATTACK_Flag.*");
			SetAvailableMapGoals(TEAM.ALLIES, false, ".*_DYNOCOVER.*");
			SetAvailableMapGoals(TEAM.ALLIES, false, "ATTACK_BFlag.*");
			SetAvailableMapGoals(TEAM.ALLIES, false, "MOBILEMORTAR_AlSpawn");
			SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_AFlag.*");
			SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_Flag.*");
			SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_Axfirst_.*");
			SetAvailableMapGoals(TEAM.AXIS, false, "PLANTMINE_Amine.*");
		}
		
		if ( Map.GoldIsStolen)
			{
			SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
			SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Truck_Barrier_1" );
			}
		
		
		
		if(Map.Command) //CP owned by allies
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, ".*_TruckA.*" );
			SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_TruckA.*" );
			SetAvailableMapGoals(TEAM.ALLIES, false, "MOBILEMG42_CPA_.*");
			
			
			SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_TruckD.*" );
			SetAvailableMapGoals(TEAM.AXIS, false, "MOBILEMG42_CPB_.*");
			SetAvailableMapGoals(TEAM.AXIS, false, "MOBILEMG42_CPC_.*");
			SetAvailableMapGoals(TEAM.AXIS, false, "MOBILEMG42_Keyd1");
			SetAvailableMapGoals(TEAM.AXIS, true, "BUILD_Truck_Barrier_1");
			SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Neutral_Command_Post" );
			SetAvailableMapGoals(TEAM.AXIS, false, ".*_CPC_.*");
			
			SetAvailableMapGoals( TEAM.AXIS, true, "CALLARTILLERY_TruckDEF_1" );
			SetAvailableMapGoals( TEAM.AXIS, true, "ARTILLERY_S_TruckDEF_1" );
			SetAvailableMapGoals( TEAM.AXIS, true, "MOBILEMG42_TruckDEF_.*" );
			SetAvailableMapGoals( TEAM.AXIS, true, "GRENADE_TruckDEF_.*" );
			
			Server.MinClassCount[TEAM.ALLIES][CLASS.COVERTOPS] = 0;
			Server.MinClassCount[TEAM.ALLIES][CLASS.ENGINEER] += 1;
			Server.MinClassCount[TEAM.ALLIES][CLASS.FIELDOPS] -= 1;
			Server.MinClassCount[TEAM.ALLIES][CLASS.MEDIC] += 1;
			SetGoalPriority( "BUILD_Truck", 0.8 );
			SetGoalPriority( "BUILD_Truck_Barrier_1", 0.9 );
			SetAvailableMapGoals(TEAM.AXIS, false, "BUILD_Wooden_Barrier");
			
		}
		else if (!Map.Command) //CP not owned by allies
		{
			SetGoalPriority( "BUILD_Truck", 0.3);
			SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Truck_Barrier_1" );
		
		}

		
		SetGoalPriority( "PLANT_Neutral_Command_Post", 0.6, TEAM.ALLIES, CLASS.COVERTOPS );

		Util.MapDebugPrint("OnKeySec");
		
		Map.Suicide = true;
	},

	OnTruckrep = function( trigger )
	{	
		Map.GoldIsStolen = true;
		SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
		Util.MapDebugPrint("OnTruckrep");
		SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Truck_Barrier_1" );
		Server.MinClassCount[TEAM.AXIS][CLASS.COVERTOPS] = 0;
		Server.MinClassCount[TEAM.AXIS][CLASS.ENGINEER] += 1;
		SetAvailableMapGoals(TEAM.AXIS, false, "BUILD_Wooden_Barrier");
		
		
		
	},

	OnTruckStolen = function( trigger )
	{
		Map.GoldIsStolen = true;
		
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, ".*_TruckA.*" );
		
		SetAvailableMapGoals( TEAM.ALLIES, true, ".*_AllBarr_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, ".*_AxBarr_.*" );
		
		SetAvailableMapGoals( TEAM.AXIS, false, ".*_TruckDEF_1" );
		SetAvailableMapGoals( TEAM.AXIS, false, "MOBILEMG42_TruckDEF_.*" );
		
		
		Util.MapDebugPrint("OnTruckStolen");
		
		
	},

	TruckAtFirstBarrier =
	{
		TriggerOnEntity = GetGoal("MOVER_truck").GetEntity(),
		OnEnter = function(ent)
		{
			if ( Map.Barrier1IsBuilt )
			{
				SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_truck" );
			}
			SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_.*" );
			SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_.*" );
			
			SetAvailableMapGoals( TEAM.ALLIES, true, ".*_AllBarr_.*" );
			SetAvailableMapGoals( TEAM.AXIS, true, ".*_AxBarr_.*" );
			SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_AxBackBarr_.*" );
			
			// print(GetEntName(ent), "entered");
			
		},
		OnExit = function(ent)
		{
			// print(GetEntName(ent), "exited");
		},
	},

	FirstBarConst = function( trigger )
	{
		Map.Barrier1IsBuilt = true;
		Util.MapDebugPrint("FirstBarConst");
	},

	FirstBarDest = function( trigger )
	{
		Map.Barrier1IsBuilt = false;
		SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
		
		Util.MapDebugPrint("FirstBarDest");
	},

	PlantFirstBar = function( trigger )
	{
		if ( RandInt(1,2) > 1 )
		{
			Util.SetGoalPosition( 1795, 695, 88, "PLANT_Truck_Barrier_1" );
		}
		else
		{
			Util.SetGoalPosition( 1577, 521, 86, "PLANT_Truck_Barrier_1" );
		}
		Util.MapDebugPrint("PlantFirstBar");
	},

	OnFirstBar = function( trigger )
	{

		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_CPA2.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Truck_Barrier_1" );
		
		SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Truck_Barrier_2" );
		
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_Keyd.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_CPC.*" );
		
		
		SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Truck_Barrier_2" );
		SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Truck_Barrier_1" );
		DeleteTriggerRegion("AxBarr");
		SetAvailableMapGoals( TEAM.ALLIES, false, "GRENADE_AllBarr_.*" );
		Util.MapDebugPrint("OnFirstBar");
		
	},
	
	TruckAtGate =
	{
		TriggerOnEntity = GetGoal("MOVER_truck").GetEntity(),
		OnEnter = function(ent)
		{
			if ( Map.GateIsIntact )
			{
				SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_truck" );
			}
			// print(GetEntName(ent), "entered");
			SetAvailableMapGoals( TEAM.AXIS, true, "AIRSTRIKE_SecBa.*" );
			
		},
		OnExit = function(ent)
		{
			// print(GetEntName(ent), "exited");
		},
		
		
	},

	TruckDefense_2 =
	{
		TriggerOnEntity = GetGoal("MOVER_truck").GetEntity(),
		OnEnter = function(ent)
		{
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "GRENADE_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Truck_Barrier_1" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_SecBa.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "CAMP_SecBa.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Truck_Barrier_2" );
		
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "CALLARTILLERY_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, ".*_AxBarr_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "GRENADE_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_SecBa.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Truck_Barrier_2" );
		SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Truck_Barrier_1" );
		DeleteTriggerRegion("AxBarr");
		Util.ChangeSpawn( TEAM.ALLIES, 3 );	//Old Flag
		Map.Suicide = false;
		},
		OnExit = function(ent)
		{
			// print(GetEntName(ent), "exited");
		},
		
		
	},

	TruckAtSecondBarrier =
	{
		TriggerOnEntity = GetGoal("MOVER_truck").GetEntity(),
		OnEnter = function(ent)
		{	
			if(Map.Barrier2IsBuilt)
			{
				SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_truck" );
			}
			
			
			
			// print(GetEntName(ent), "entered");
			
		},
		OnExit = function(ent)
		{
			// print(GetEntName(ent), "exited");
		},
	},

	PlantSecBar = function( trigger )
	{
		if ( RandInt(1,2) > 1 )
		{
			Util.SetGoalPosition( -1380, 468, 70, "PLANT_Truck_Barrier_2" );
		}
		else
		{
			Util.SetGoalPosition( -1103, 447, 70, "PLANT_Truck_Barrier_2" );
		}
		Util.MapDebugPrint("PlantSecBar");
	},

	SecBarConst = function( trigger )
	{
		Map.Barrier2IsBuilt = true;
		Util.MapDebugPrint("SecBarConst");
	},

	SecBarDest = function( trigger )
	{
		Map.Barrier2IsBuilt = false;
		if ( Map.GoldIsStolen )
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
		}
		Util.MapDebugPrint("SecBarDest");
	},

	OnSecBar = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Truck_Barrier_2" );
		
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Truck_Barrier_2" );
		
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_LastEx_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_LastEx_.*" );

		Util.MapDebugPrint("OnSecBar");
	},
	
	MainPlanted = function( trigger )
	{
		Map.Suicide = false;
		Map.MainPlant += 1;
		Util.SetRoleForGoals("ATTACK_DYNOCOVER.*", ROLE.ATTACKER2,ROLE.ATTACKER1);
		if (Map.Puhing)
		{
		Util.ClearRoleForGoals("ATTACK_Flag.*", ROLE.ATTACKER1);
		}
		SetAvailableMapGoals(TEAM.ALLIES, false, "PLANT_Main_Gate");
		
		if (Map.Spawnback)
		{
		SetAvailableMapGoals(TEAM.AXIS, false, "DEFUSE_Main_Gate.*");
		
		}
	},
	
	MainDefused = function( trigger )
	{	
		Map.Suicide = true;
		Util.ClearRoleForGoals("ATTACK_DYNOCOVER.*", ROLE.ATTACKER1);
		Util.SetRoleForGoals("ATTACK_Flag.*", ROLE.ATTACKER1);
		Map.MainPlant -= 1;
		SetAvailableMapGoals(TEAM.ALLIES, true, "PLANT_Main_Gate");
	},
	
	SidePlanted = function( trigger )
	{
		if (Map.Spawnback)
		{
		SetAvailableMapGoals(TEAM.AXIS, false, "DEFUSE_Side_Door.*");
		}
	},
	
	SideDefused = function( trigger )
	{	
		return;
	},
	
	OnAxCP = function (trigger)
	{
		SetGoalPriority( "BUILD_Truck_Barrier_1", 0.8 );
	},
	
	Axis_Fallback =
	{
		Name = "Axis_Fallback",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			Util.SetMaxUsers( 2, "BUILD_Neutral_Command_Post" );
			if( GetEntTeam(ent) == TEAM.AXIS )
				{	
					SetAvailableMapGoals( TEAM.ALLIES, true, "ROUTE_flag.*" );
					SetAvailableMapGoals(TEAM.ALLIES, false, "CHECKPOINT_flag1_flag");
					SetAvailableMapGoals(TEAM.AXIS, false, "CHECKPOINT_flag1_flag");
					SetAvailableMapGoals(TEAM.ALLIES, false, "ATTACK_Flag.*");
					SetAvailableMapGoals(TEAM.AXIS, true, "BUILD_Truck_Barrier_1");
						if ( Map.GoldIsStolen)
						{
						SetAvailableMapGoals( TEAM.ALLIES, true, "ESCORT_truck" );
						return;
						}
						
						if(Map.Command) // CP owned by allies
						{
							SetAvailableMapGoals(TEAM.ALLIES, true, "ATTACK_CPA2_.*");
							SetAvailableMapGoals(TEAM.ALLIES, true, "CAPPOINT_236");
							SetAvailableMapGoals(TEAM.ALLIES, true, "FLAG_keycard_flag");
							SetAvailableMapGoals(TEAM.AXIS, true, "MOBILEMG42_CPC_.*");
						}
						else if (!Map.Command) // CP not owned by allies
						{
							SetAvailableMapGoals(TEAM.ALLIES, true, ".*_CPA.*");
							
							SetAvailableMapGoals(TEAM.ALLIES, true, "BUILD_Neutral_Command_Post");
							SetAvailableMapGoals(TEAM.ALLIES, true, "PLANT_Neutral_Command_Post");
							SetAvailableMapGoals(TEAM.AXIS, true, "BUILD_Neutral_Command_Post");
							SetAvailableMapGoals(TEAM.AXIS, true, ".*_CPB.*");		
							SetAvailableMapGoals(TEAM.AXIS, true, ".*_CPC.*");	
							
							
							SetAvailableMapGoals(TEAM.AXIS, true, "ARTILLERY_S_AxCP_1");
							SetAvailableMapGoals(TEAM.AXIS, true, "BUILD_Truck_Barrier_1");
							
						}
						
						if (Map.Key) //Keycard captured
						{
							SetAvailableMapGoals(TEAM.ALLIES, true, "BUILD_Truck");
							
							SetAvailableMapGoals(TEAM.AXIS, false, "MOBILEMG42_Keyd1");
							SetAvailableMapGoals(TEAM.AXIS, false, "PLANT_Neutral_Command_Post");
							SetAvailableMapGoals(TEAM.AXIS, true, "BUILD_Truck_Barrier_1");
							SetAvailableMapGoals( TEAM.AXIS, false, "CALLARTILLERY_keyd_1" );
							SetAvailableMapGoals(TEAM.AXIS, false, "MOBILEMG42_CPB_.*");
							SetAvailableMapGoals(TEAM.AXIS, false, ".*_CPB_.*");
							SetAvailableMapGoals(TEAM.AXIS, false, "MOBILEMG42_CPC_.*");
						} 		
						else if (!Map.Key) //Keycard required
						{	
							SetAvailableMapGoals(TEAM.AXIS, true, "MOBILEMG42_CPB_.*");
							SetAvailableMapGoals(TEAM.AXIS, true, "MOBILEMG42_CPC_.*");
						
							SetAvailableMapGoals(TEAM.AXIS, true, "ARTILLERY_S_AxCP_1");
							if(Map.Command)
							{
							SetAvailableMapGoals(TEAM.ALLIES, true, "ATTACK_CPA2_.*");
							SetAvailableMapGoals(TEAM.AXIS, true, "ATTACK_Keyd.*");
							SetAvailableMapGoals(TEAM.AXIS, true, "MOBILEMG42_Keyd1");
							SetAvailableMapGoals( TEAM.AXIS, true, "CALLARTILLERY_keyd_1" );
							SetAvailableMapGoals( TEAM.AXIS, true, "ARTILLERY_S_keyd_1" );
							SetAvailableMapGoals(TEAM.AXIS, true, ".*_CPC.*");
							SetAvailableMapGoals(TEAM.AXIS, false, ".*_CPB.*");								
							SetGoalPriority( "FLAG_keycard_flag", 0.8 );
							
							}
						}
												
						SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_AFlag.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_Flag.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_Axfirst_.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "PLANTMINE_Amine.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "ARTILLERY_S_AxFirst_.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "GRENADE_AxFirst_.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "CALLARTILLERY_AxFirst_.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "AIRSTRIKE_AxFirst_.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "MOBILEMG42_AxFirst_.*");
						
						
						SetGoalPriority( "PLANT_Neutral_Command_Post", 0.91, TEAM.AXIS, CLASS.COVERTOPS );
						SetGoalPriority( "PLANT_Neutral_Command_Post", 0.91, TEAM.ALLIES, CLASS.COVERTOPS );
						
						SetAvailableMapGoals(TEAM.ALLIES, false, "AIRSTRIKE_AllFirst_.*");
						SetAvailableMapGoals(TEAM.ALLIES, false, "GRENADE_AllFirst_.*");
						
						//Roles
						//CP Stage
						//Axis
						Util.SetRoleForGoals("DEFEND_CPB.*", ROLE.DEFENDER1);
						Util.SetRoleForGoals("ATTACK_CPC_.*", ROLE.DEFENDER2);
						
						//Allied First Stage
						Util.SetRoleForGoals("ATTACK_CPA_.*", ROLE.ATTACKER1);
						Util.SetRoleForGoals("ATTACK_CPA2_.*", ROLE.ATTACKER2);
						
						Util.ClearRoleForGoals("CALLARTILLERY_CPA_.*", ROLE.ATTACKER1);
						Util.ClearRoleForGoals("MOBILEMG42_CPA_.*", ROLE.ATTACKER1);
						Util.ClearRoleForGoals("MOBILEMG42_CPC_.*", ROLE.DEFENDER1);
						
					
						SetAvailableMapGoals(TEAM.AXIS, false, "DEFUSE_Main_Gate_.*");
						SetAvailableMapGoals(TEAM.AXIS, false, "DEFUSE_Side_Door.*");
						
						DeleteTriggerRegion("Axis_Fallback");
						
						Map.Spawnback = true;
						
						if ( RandInt(1,2) > 1 )
						{
							SetAvailableMapGoals(TEAM.AXIS, true, "BUILD_Wooden_Barrier");
							SetAvailableMapGoals(TEAM.ALLIES, false, "ROUTE_axis_spawn_right");
						}
						else
						{
							SetAvailableMapGoals(TEAM.AXIS, false, "BUILD_Wooden_Barrier");
						}
				}

		},
	},
	
	
	
	AXCP_ARTY =
	{
		Name = "AXCP_ARTY",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
				{
					SetAvailableMapGoals(TEAM.AXIS, true, "CALLARTILLERY_AxCP_.*");
				}
				DeleteTriggerRegion("AXCP_ARTY");
		},
		
	},
	
	AxBarr =
	{
		Name = "AxBarr",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
				{
				if (!Map.GoldIsStolen)
					{
						return;
					}
					SetAvailableMapGoals( TEAM.ALLIES, false, "GRENADE_AllBarr_.*" );
				}
				
		},
		OnExit = function(ent)
		{
			if( GetEntTeam(ent) == TEAM.ALLIES )
			{
			if (!Map.GoldIsStolen)
				{
					return;
				}
				SetAvailableMapGoals( TEAM.ALLIES, true, "GRENADE_AllBarr_.*" );
				}
				
		},
	},
	
	axispressure = function()
	{
	while(1)
	{
		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam() == TEAM.AXIS )
			{
				if ( Map.Suicide && bot.GetReinforceTime() < 2 && bot.GetHealthPercent() < 0.8)
				{
					bot.ExecCommand( "kill" );
				} 
			}
		}
		sleep(1);
	}
	},
	
	mortarwatch = function()
	{
	while(1)
	{
		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam() == TEAM.ALLIES && bot.GetClass () == CLASS.SOLDIER && bot.GetCurrentWeapon() == WEAPON.MORTAR_SET)
			{
				ammoTable ={};
				bot.GetCurrentAmmo(ammoTable, 0, WEAPON.MORTAR_SET);
				if(ammoTable.CurrentAmmo <=3 )
				{
  				while ( bot.GetReinforceTime() > 2 )
  				{sleep(1);}
  				//print("Ready to kill");
  				bot.ExecCommand("kill");
				}
			}
		}
		sleep(1);
	}	
	},
	
	
};

global OnMapLoad = function()
{
	/*** TRIGGERS ***/
	OnTrigger("The Allies have captured the forward bunker!", Map.OnFlagTake);
	OnTrigger("The Axis have reclaimed the forward bunker!", Map.OnFlagRet);
	OnTrigger("The main gate has been destroyed!", Map.OnFlagSec);
	OnTrigger("The side door has been destroyed!", Map.OnSide);
	OnTrigger("Allied Command Post constructed. Charge speed increased!", Map.OnAllCP);
	OnTrigger("Allies have stolen the Keycard!", Map.OnKeyStolen);
	OnTrigger("Flag returned keycard_flag!", Map.OnKeyReturned);
	// OnTrigger("The Allies have captured the keycard. The generator has been started!", Map.OnKeyCap);
	OnTrigger("Allied team has gained access to the truck!", Map.OnKeySec);
	OnTrigger("The Truck has been repaired!", Map.OnTruckrep);
	OnTrigger("Planted at Truck Barrier #1.", Map.PlantFirstBar);
	OnTrigger("goldrush_axis_truck_barrier1", Map.OnFirstBar);
	OnTrigger("Truck Barrier #1 has been constructed.", Map.FirstBarConst);
	OnTrigger("Truck Barrier #1 has been destroyed.", Map.FirstBarDest);
	OnTrigger("Truck Barrier #2 has been constructed.", Map.SecBarConst);
	OnTrigger("Truck Barrier #2 has been destroyed.", Map.SecBarDest);
	OnTrigger("Planted at Truck Barrier #2.", Map.PlantSecBar);
	OnTrigger("goldrush_axis_truck_barrier2", Map.OnSecBar);
	OnTrigger("goldrush_axis_truck_stolen", Map.OnTruckStolen);
	OnTrigger("Planted at the Main Gate.", Map.MainPlanted);
	OnTrigger("Defused at the Main Gate.", Map.MainDefused);
	OnTrigger("Planted at the Side Door.", Map.SidePlanted);
	OnTrigger("Defused at the Side Door.", Map.SideDefused);
	OnTrigger("Axis Command Post constructed. Charge speed increased!", Map.OnAxCP);
	
	
	tb1 = OnTriggerRegion(AABB(1750.633,209.556,57.125,1980.277,712.726,140.522), Map.TruckAtFirstBarrier );
	tb2 = OnTriggerRegion( Vector3(-730,1850,90), 100, Map.TruckAtSecondBarrier );
	tgate = OnTriggerRegion( Vector3(-1250,940,90), 100, Map.TruckAtGate );
	axisspawn = OnTriggerRegion(AABB(204.028,-1232.875,57.164,1090.189,-342.665,175.093), Map.Axis_Fallback);
	AxBarr = OnTriggerRegion(AABB(1752.164,18.204,57.125,2273.279,706.208,140.665), Map.AxBarr);
	
	AXCP_ARTY = OnTriggerRegion(AABB(-614.986,1644.152,57.125,-133.350,2212.625,142.168), Map.AXCP_ARTY);
	TruckDefense_2 = OnTriggerRegion(AABB(990.718,1044.926,57.982,1166.630,1517.659,155.125), Map.TruckDefense_2);
	

	SetGoalPriority( "ATTACK_cappoint.*", 0.6, TEAM.AXIS );
	SetGoalPriority( "PLANTMINE.*", 0.7 );
	SetGoalPriority( "PLANT_Main_Gate", 0.85 );

	SetMapGoalProperties( "ATTACK_.*", {MinCampTime=5, MaxCampTime=20} );
	SetMapGoalProperties( "DEFEND_.*", {MinCampTime=15, MaxCampTime=30} );
	
	//Axisselfkill on low
	thread(Map.axispressure);

	/*** MAX USERS ***/
	Util.SetMaxUsers( 1, "FLAG_.*" );
	Util.SetMaxUsers( 4, "CHECKPOINT.*" );
	Util.SetMaxUsers( 1, "PLANT_.*" );
	Util.SetMaxUsers( 1, "ATTACK_.*" );
	Util.SetMaxUsers( 1, "SNIPE_.*" );
	Util.SetMaxUsers( 1, "MOBILEMG42_.*" );
	Util.SetMaxUsers( 1, "MOBILEMORTAR_.*" );
	Util.SetMaxUsers( 1, "GRENADE_.*" );
	Util.SetMaxUsers( 1, "BUILD_Neutral_Command_Post" );
	
	

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

	SetAvailableMapGoals(TEAM.ALLIES, true, "PLANT_Main_Gate");
	SetAvailableMapGoals(TEAM.ALLIES, true, "PLANT_Side_Door");
	SetAvailableMapGoals(TEAM.ALLIES, true, "CHECKPOINT_flag1_flag");
	SetAvailableMapGoals(TEAM.ALLIES, true, "ATTACK_Flag.*");
	SetAvailableMapGoals(TEAM.ALLIES, true, "AIRSTRIKE_AllFirst_.*");
	SetAvailableMapGoals(TEAM.ALLIES, true, "GRENADE_AllFirst_.*");
	SetAvailableMapGoals(TEAM.ALLIES, true, ".*_DYNOCOVER.*");
	SetAvailableMapGoals(TEAM.ALLIES, true, "MOBILEMORTAR_AlSpawn");
	
	SetGoalPriority( "PLANT_Side_Door", 0.0, CLASS.ENGINEER );
	SetGoalPriority( "ATTACK_.*", 0.3, CLASS.ENGINEER );
	SetGoalPriority( "AIRSTRIKE_AllFirst_2", 0.85 );
	SetGoalPriority( ".*_DYNOCOVER.*", 0.55 );
	SetGoalPriority( "FLAG_keycard_flag", 0.3 );
	SetGoalPriority( "FLAG_keycard_flag", 0.9, CLASS.COVERTOPS	 );
	SetGoalPriority( "DEFEND_.*", 0.8 );
	SetGoalPriority( "BUILD_Truck_Barrier_1", 0.3 );
	SetGoalPriority( "PLANT_Main_Gate", 0.9 );
	SetGoalPriority( "BUILD_Wooden_Barrier", 0.3 );
	
	Util.SetGoalOffset(-96, 111, 0, "PLANT_Main_Gate" );
	Util.SetGoalOffset(33, -66, 0, "BUILD_Truck_Barrier_1" );
	Util.SetGoalOffset(-101, 73, 0, "ESCORT_truck" );
	Util.SetGoalPosition( 1979, -942, 88, "BUILD_Truck" );
	Util.SetGoalPosition( -1427, 309, 94, "BUILD_Truck_Barrier_2" );
	Util.SetGoalPosition( 1384, -65, 88, "BUILD_Wooden_Barrier" );

	//Axis Flag Defense First Stage
	SetAvailableMapGoals(TEAM.AXIS, true, "ATTACK_AFlag.*");
	SetAvailableMapGoals(TEAM.AXIS, true, "PLANTMINE_Amine.*");
	SetAvailableMapGoals(TEAM.AXIS, true, "CHECKPOINT_flag1_flag");
	SetAvailableMapGoals(TEAM.AXIS, true, "ARTILLERY_S_AxFirst_.*");
	SetAvailableMapGoals(TEAM.AXIS, true, "GRENADE_AxFirst_.*");
	SetAvailableMapGoals(TEAM.AXIS, true, "CALLARTILLERY_AxFirst_.*");
	SetAvailableMapGoals(TEAM.AXIS, true, "AIRSTRIKE_AxFirst_.*");
	SetAvailableMapGoals(TEAM.AXIS, true, "ATTACK_Axfirst_.*");
	SetAvailableMapGoals(TEAM.AXIS, true, "MOBILEMG42_AxFirst_.*");
	SetAvailableMapGoals(TEAM.AXIS, true, "BUILD_Neutral_Command_Post");
	
	
	// Shared goals
	Util.EnableGoal( "CHECKPOINT_flag1_flag" );
	
	CPDefense_nocombat = OnTriggerRegion(AABB(1658.992,981.006,249.125,2174.994,1613.374,323.125), RegionTrigger.DisableCombatMovement);
	
	//Behaviour
	Util.ExcludeClass( "GRENADE_.*", TEAM.ALLIES, CLASS.ENGINEER );
	Util.ExcludeClass( "GRENADE_.*", TEAM.ALLIES, CLASS.FIELDOPS );
	Util.ExcludeClass( "FLAG_keycard_flag", TEAM.ALLIES, CLASS.ENGINEER );
	Util.ExcludeClass( "DEFEND_.*", TEAM.AXIS, CLASS.ENGINEER );
	
	
	
	
	//Roles
	
	// covert ops in disguise can reach these goals at any time
	SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Neutral_Command_Post" );
	SetAvailableMapGoals( TEAM.ALLIES, true, "FLAG_keycard_flag" );
	SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_236" );
	
	//AxisFirst Stage
	Util.SetRoleForGoals("ATTACK_AFlag.*", ROLE.DEFENDER1);
	Util.SetRoleForGoals("ATTACK_Axfirst_.*", ROLE.DEFENDER2);
	
	//Allied First Stage
	Util.SetRoleForGoals("ATTACK_Flag.*", ROLE.ATTACKER1);
	Util.SetRoleForGoals("ATTACK_DYNOCOVER.*", ROLE.ATTACKER2);
	Util.SetRoleForGoals("AIRSTRIKE_AllFirst_2", ROLE.ATTACKER1);
	Util.SetRoleForGoals("AIRSTRIKE_AllFirst_1", ROLE.ATTACKER2);
	

	
	//Allied 
	Util.SetRoleForGoals("ATTACK_Flag.*", ROLE.ATTACKER1);
	Util.SetRoleForGoals("ATTACK_DYNOCOVER.*", ROLE.ATTACKER2);
	Util.SetRoleForGoals("AIRSTRIKE_AllFirst_2", ROLE.ATTACKER1);
	Util.SetRoleForGoals("AIRSTRIKE_AllFirst_1", ROLE.ATTACKER2);
	
	if ( RandInt(1,2) > 1 )
	{
		Util.SetGoalPosition( 1795, 695, 88, "PLANT_Truck_Barrier_1" );
		Util.SetGoalPosition( -1380, 468, 70, "PLANT_Truck_Barrier_2" );
	}
	else
	{
		Util.SetGoalPosition( 1577, 521, 86, "PLANT_Truck_Barrier_1" );
		Util.SetGoalPosition( -1103, 447, 70, "PLANT_Truck_Barrier_2" );
	}
	
	// allied covert ops in disguise can sneak through team doors to destroy these goals
	Util.SetRoleForGoals( "PLANT_Neutral_Command_Post", ROLE.INFILTRATOR );
	Util.SetRoleForGoals( "FLAG_keycard_flag", ROLE.INFILTRATOR );
	Util.SetRoleForGoals( "CAPPOINT_236", ROLE.INFILTRATOR );
	
	WeaponTable.SetWeaponTeamAvailability( TEAM.ALLIES, CLASS.ENGINEER, WEAPON.GARAND, false );
	



	MapRoutes =
	{
		PLANT_Main_Gate = 
		{
			ROUTE_allied_spawn  = 
			{
				ROUTE_spawn_east  = 
				{
					ROUTE_flag_east  = 
					{
					Weight = 2,
					},
					ROUTE_flag_west2  = 
					{
					ROUTE_Halfeast = {},
					},
				},
				
			},
		},
		
		CHECKPOINT_flag1_flag = 
		{
			ROUTE_allied_spawn  = 
			{
				ROUTE_house = 
				{				
					ROUTE_Center ={},
				},
				ROUTE_flag_west1 =
				{
					Weight = 2,
					ROUTE_Center ={},
				},
			},
		},
		
		BUILD_Neutral_Command_Post =
		{	
			ROUTE_flag =
				{
					ROUTE_maindoor_left = 
					{	
						ROUTE_broken_house =
						{	
							Weight = 6,
							ROUTE_generator = 
							{	
								ROUTE_cp_right = {Weight = 6,},
							},
							ROUTE_cp_right = {Weight = 6,},
							
						},
						ROUTE_generator = 
							{									
								ROUTE_cp_right = {Weight = 6,},
							},
					},
					ROUTE_sidedoor =
					{
						ROUTE_sidedoor_left = 
						{	
							ROUTE_balcony_left ={}
						},
					},
				},
		},
		
		FLAG_keycard_flag =
		{
			ROUTE_flag =
			{
				ROUTE_sidedoor =
				{
					ROUTE_sidedoor_right = {Weight = 2,}
				},
				ROUTE_maindoor_left = {},
			},
			ROUTE_cp =
			{
				ROUTE_cp_front = {},
				ROUTE_cp_right = {},
				ROUTE_balcony = {},
				ROUTE_stairs = {}
			}
		},
		
		
		
		DEFEND_CPB1 = 
		{
			ROUTE_axis_spawn =
			{	
				ROUTE_axis_spawn_left = 
				{	
					ROUTE_axis_lower_house = 
					{	
						ROUTE_cp_front = {},
					},
				},
				ROUTE_axis_spawn_right = 
				{
					Weight = 3,
					ROUTE_axis_lower_house = 
					{	
						Weight = 3,
						ROUTE_cp_front = {},
					},
					ROUTE_stairs = 
					{
						Weight = 3,
						ROUTE_balcony = {},
					},
				},
			}
		},
		
		
		BUILD_Truck =
		{
			ROUTE_cp =
			{
				ROUTE_balcony = 
				{
				Weight = 2,
				ROUTE_stairs = 
				{
					ROUTE_Truck_back = 
					{
					Weight = 6,
					ROUTE_truck_back_2 = {},
					},
					ROUTE_Truck_Main = {},
					ROUTE_axis_spawn_right = {},
				},
				},
				ROUTE_cp_front = 
				{
					ROUTE_axis_lower_house =
					{
						ROUTE_axis_spawn_right = {},
						ROUTE_axis_spawn_left = {Weight = 3,},
					},
					ROUTE_axis_spawn_left = {Weight = 2,},
				},
			},
		},
		
		DEFEND_TruckA_1 =
		{	
			ROUTE_cp =
			{
				ROUTE_cp_front = 
				{
					ROUTE_axis_lower_house =
					{
						ROUTE_axis_spawn_right = {},
						ROUTE_axis_spawn_left = {Weight = 6,},
					},
					ROUTE_axis_spawn_left = {Weight = 2,},
				},
			},
		},
		
		CALLARTILLERY_CPA_1 = 
		{
			ROUTE_flag =
			{	
				Weight = 2,
				ROUTE_sidedoor =
				{	
					Weight = 2,
					ROUTE_sidedoor_right = {Weight = 2,}
				},
				
			},
		},
		
	};

	
	MapRoutes.ATTACK_FlagA = MapRoutes.CHECKPOINT_flag1_flag;
	MapRoutes.ATTACK_FlagA1 = MapRoutes.CHECKPOINT_flag1_flag;
	MapRoutes.PLANT_Side_Door = MapRoutes.PLANT_Main_Gate;
	MapRoutes.ATTACK_CPA_1 = MapRoutes.BUILD_Neutral_Command_Post;
	MapRoutes.ATTACK_CPA_2 = MapRoutes.BUILD_Neutral_Command_Post;
	MapRoutes.PLANT_Neutral_Command_Post = MapRoutes.BUILD_Neutral_Command_Post;
	MapRoutes.ATTACK_CPA2_1 = MapRoutes.FLAG_keycard_flag;
	MapRoutes.ATTACK_CPA2_2 = MapRoutes.FLAG_keycard_flag;
	MapRoutes.ATTACK_CPA2_3 = MapRoutes.FLAG_keycard_flag;
	
	MapRoutes.ATTACK_TruckA1 = MapRoutes.BUILD_Truck;
	MapRoutes.ATTACK_TruckA2 = MapRoutes.BUILD_Truck;
	MapRoutes.ATTACK_TruckA3 = MapRoutes.BUILD_Truck;
	MapRoutes.ATTACK_TruckA6 = MapRoutes.BUILD_Truck;
	MapRoutes.ATTACK_TruckA7 = MapRoutes.BUILD_Truck;
	MapRoutes.MOBILEMG42_TruckA_2 = MapRoutes.BUILD_Truck;
	MapRoutes.DEFEND_TruckA_2 = MapRoutes.DEFEND_TruckA_1;
	MapRoutes.MOBILEMG42_TruckA_1 = MapRoutes.DEFEND_TruckA_1;
	
	MapRoutes.DEFEND_CPB5 = MapRoutes.DEFEND_CPB1;
	MapRoutes.DEFEND_CPB2 = MapRoutes.DEFEND_CPB1;
	MapRoutes.DEFEND_CPB3 = MapRoutes.DEFEND_CPB1;
	MapRoutes.DEFEND_CPB4 = MapRoutes.DEFEND_CPB1;
	MapRoutes.DEFEND_CPB6 = MapRoutes.DEFEND_CPB1;
	MapRoutes.BUILD_Neutral_Command_Post = MapRoutes.DEFEND_CPB1;
	
	
	
	Util.Routes(MapRoutes);
	SetAvailableMapGoals( TEAM.AXIS, true, "ROUTE_.*" );
	SetAvailableMapGoals( TEAM.ALLIES, true, "ROUTE_.*" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "ROUTE_Centerway" );
	
	Util.MapDebugPrint("OnMapLoad");
};

global OnBotJoin = function( _bot )
{
	thread(Map.mortarwatch);
	WeaponTable.SetWeaponTeamAvailability( TEAM.ALLIES, CLASS.ENGINEER, WEAPON.GARAND, false );
};