global Map =
{
	MapName = "tounine_b2",
	Quiet = true,

	BUILD_Neutral_Command_Post = "BUILD_Neutral_Command_Post",
	BUILD_Tank = "BUILD_Tank",
	BUILD_Tank_Barrier_1 = "BUILD_Tank_Barrier_1",
	CAPPOINT_222 = "CAPPOINT_222",
	MOVER_tank = "MOVER_tank",
	PLANT_Tank_Barrier_1 = "PLANT_Tank_Barrier_1",
	PLANT_Neutral_Command_Post = "PLANT_Neutral_Command_Post",
	FLAG_obj = "FLAG_obj",

	//dyno counters
	bOneDyno = 0,

	//set status' for conditionals
	barrierone = 1,

	//arrive status
	arrive = 0,

	Allied_Command_Post_Built = function()
	{
		//TestMap.Pass();

		//Util.MapDebugPrint( "Neutral_Command_Post_Built" );
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"PLANT_Neutral_Command_.*",
			"BUILD_Neutral_Command_.*",
		});
		Util.ChangeSpawn( TEAM.ALLIES, 4, 2 );

	},

	Allied_Command_Post_Destroyed = function()
	{
		//TestMap.Pass();

		//Util.MapDebugPrint( "Neutral_Command_Post_Built" );
	},

	Axis_Command_Post_Built = function()
	{
		//TestMap.Pass();

		//Util.MapDebugPrint( "Neutral_Command_Post_Built" );

	},

	Axis_Command_Post_Destroyed = function()
	{
		//TestMap.Pass();

		Util.MapDebugPrint( "Neutral_Command_Post_Built" );
	},

	Tank_Built = function()
	{
		//TestMap.Pass();

		//Util.MapDebugPrint( "Tank_Built" );
		SetAvailableMapGoals( TEAM.AXIS, false, "PLANTMINE_Amine_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Tank_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"PLANT_Neutral_Command_.*",
			"ATTACK_tank_.*",
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Tankallies_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_Barr_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"ATTACK_Allbar_.*",
			"BUILD_Tank",
			"MOVER_tank",
			"MOUNT_tank",
		});

	},

	Tank_Barrier_1_Built = function()
	{
		//TestMap.Pass();

		//Util.MapDebugPrint( "Tank_Barrier_1_Built" );

		Map.barrierone = 1;
		if ( Map.arrive > 0)
			{
			 	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tank" );
			}
		else
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Tank" );
			}
	},


	Tank_Barrier_1_Destroyed = function()
	{
		//TestMap.Pass();

		//Util.MapDebugPrint( "Tank_Barrier_1_Destroyed" );

		Map.barrierone = 0;
		Map.bOneDyno = 0;
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"MOVER_tank",
			"BUILD_Tank",
		});

	},

	Tank_Barrier_1_passed = function()
	{
		//TestMap.Pass();
		Map.arrive = 0;

		//Util.MapDebugPrint( "Tank_Barrier_1_passed" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Tank_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Tank_.*" );

	},

	Bunker_destroyed = function()
	{
		//TestMap.Pass();

		//Util.MapDebugPrint( "Bunker_destroyed" );
		SetAvailableMapGoals( TEAM.AXIS, true, "PLANTMINE_Bmine_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tank" );
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"CAPPOINT_222",
			"FLAG_obj",
			"ATTACK_ALLBunker_.*",
		});
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_Bunker_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_Barr_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Allbar_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "MOVER_tank" );
		SetAvailableMapGoals( TEAM.AXIS, true, "MOVER_tank" );
		Util.ChangeSpawn( TEAM.ALLIES, 4, 4 );
	},

	obj_Taken = function()
	{
		//TestMap.Pass();

		//Util.MapDebugPrint( "obj_Taken" );

		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_Barr_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Allbar_.*" );

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

	obj_return = function()
	{
		//TestMap.Pass();

		//Util.MapDebugPrint( "obj_Return" );

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

		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_ALLBunker_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_Bunker_.*" );
	},

	tank_at_barrier1 = function()
	{
		Map.arrive = 1;
		SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Tank_.*" );
		Util.ChangeSpawn( TEAM.ALLIES, 4, 2 );
		SetAvailableMapGoals( TEAM.AXIS, true, "MOUNT_tank" );
		//technically shouldn't need the 'else', but just to be sure
		if ( Map.barrierone > 0 && Map.bOneDyno < 1)
			{
			 	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tank" );
			}
		else
			{
				SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Tank" );
			}

		Util.MapDebugPrint("tank_at_barrier1");
	},

	planted_at_Tank_Barrier_1 = function()
	{
		//got a dyno down, build the tank if needed
		SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Tank" );

		Map.bOneDyno += 1;

		Util.MapDebugPrint("planted_at_Tank_Barrier_1");
	},

	defused_at_Tank_Barrier_1 = function()
	{
		Map.bOneDyno -= 1;

		//focus back on planting dyno
		if ( Map.bOneDyno < 1 )
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Tank" );
		}

		Util.MapDebugPrint("defused_at_Tank_Barrier_1");
	},

	vehicle_at_location = function()
	{
		switch(Map.VehicleLocation)
		{
			case 1: // tank at barrier
			{
				Map.tank_at_barrier1();
			}
		}
	},
};


global OnMapLoad = function()
{
		OnTrigger( "^3Allied Command Post constructed. Charge speed increased!", Map.Allied_Command_Post_Built );
		OnTrigger( "^3Axis team has destroyed the Allied Command Post", Map.Allied_Command_Post_Destroyed );
		OnTrigger( "^3Axis Command Post constructed. Charge speed increased!", Map.Axis_Command_Post_Built );
		OnTrigger( "Allied team has destroyed the Axis Command Post!", Map.Axis_Command_Post_Destroyed );
		OnTrigger( "The tank has been repaired", Map.Tank_Built );
		OnTrigger( "Tank Barrier has been destroyed.", Map.Tank_Barrier_1_Destroyed );
		OnTrigger( "Tank Barrier has been constructed.", Map.Tank_Barrier_1_Built );
		OnTrigger( "^3The Tank has passed Tank Barrier #1", Map.Tank_Barrier_1_passed );
		OnTrigger( "^1Allied team has opened the Bunker!", Map.Bunker_destroyed );
		OnTrigger( "Allies have stolen the Secret Documents!", Map.obj_Taken );
		OnTrigger( "Axis have returned the Secret Documents!", Map.obj_return );
		OnTrigger( "Planted at Tank Barrier.", Map.planted_at_Tank_Barrier_1 );
		OnTrigger( "Defused at Tank Barrier.", Map.defused_at_Tank_Barrier_1 );
		OnTrigger( "tank at location", Map.vehicle_at_location );
		barrier1 = OnTriggerRegion(AABB(-3065.782,-3850.733,268.748,-2697.993,-3426.687,363.125), RegionTrigger.VehicleTrigger);





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


		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"MOVER_tank",
			"BUILD_Tank",
		});
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"BUILD_Neutral_Command_Post",
			"PLANT_Neutral_Command_Post",
		});
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"PLANT_Neutral_Command_.*",
			"BUILD_Neutral_Command_.*",
		});
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_tank_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Tankallies_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "PLANTMINE_Amine_.*" );


		Util.SetMaxUsersInProgress( 1, "BUILD_Neutral_Command_Post" );
		Util.AddInvVehicle("MOVER_tank");
		ETUtil.SetStartIndex("BUILD_Tank", 0);
		SetGoalPriority( "MOUNT_.*", 0.0, 0, CLASS.MEDIC );
		SetGoalPriority( "MOUNT_.*", 0.0, 0, CLASS.ENGINEER );

		SetMapGoalProperties( "ATTACK_.*", {MinCampTime=60, MaxCampTime=120});

		SetGoalPriority( Map.BUILD_Tank, 1.1, TEAM.ALLIES, CLASS.ENGINEER );
		SetGoalPriority( Map.BUILD_Neutral_Command_Post, 0.8 );
		SetGoalPriority( Map.PLANT_Neutral_Command_Post, 0.6, TEAM.ALLIES, CLASS.COVERTOPS );
		SetGoalPriority( Map.PLANT_Neutral_Command_Post, 0.0, TEAM.ALLIES, CLASS.ENGINEER );
		SetGoalPriority( Map.MOVER_tank, 0.9, TEAM.ALLIES );
		SetGoalPriority( Map.PLANT_Tank_Barrier_1, 0.95, TEAM.ALLIES, CLASS.ENGINEER );
		SetGoalPriority( Map.BUILD_Tank_Barrier_1, 0.95, TEAM.AXIS, CLASS.ENGINEER );

		Util.SetGoalOffset( 187, 132, 0, "PLANT_Tank_Barrier_1" );

		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"ROUTE_allyspawn",
			"ROUTE_spawn.*",
			"ROUTE_villagespawn",
			"ROUTE_cp.*",
			"ROUTE_bunker.*",
			"ROUTE_docs.*",
		});

		SetAvailableMapGoals( TEAM.AXIS, true, {
			"ROUTE_Axisspawn",
			"ROUTE_Axspawn_.*",
		});


		//set up some routing

		MapRoutes =
		{
		BUILD_Tank =
		{
			ROUTE_allyspawn =
			{
				ROUTE_spawnmid = {},
				ROUTE_spawnback =
					{	ROUTE_spawnback_1 = {},
						ROUTE_spawnback_2 = {},
					},
				Weight = 2,
				ROUTE_spawnlow = {},
			},
			ROUTE_cpspawn = {},
			ROUTE_villagespawn = {},
		},

		PLANT_Tank_Barrier_1 =
		{
			ROUTE_villagespawn =
			{
				ROUTE_allbarhigh = {},
			},

			ROUTE_cpspawn = {},
		},

		FLAG_obj =
		{
			ROUTE_villagespawn =
				{
					Weight = 2,
					ROUTE_bunkerback = {},
				},
			ROUTE_cpspawn =
			{
				ROUTE_cproute = {},
				ROUTE_cprouteright = {},

			},
		},

		CAPPOINT_222 =
		{
			ROUTE_docspawn =
			{
				ROUTE_bunkerback =
				{
					ROUTE_docsback = {},
				},

			},
		},

		ATTACK_Barr_1 =
		{
			ROUTE_Axisspawn =
			{
				ROUTE_Axspawn_high = {},
				Weight = 2,
				ROUTE_Axspawn_mid = {},
			},

		},

		ATTACK_Bunker_1 =
		{
			ROUTE_Axisspawn =
			{
				ROUTE_Axspawn_low1 = {},
				Weight = 2,
				ROUTE_Axspawn_low2 = {},
			},
		},
		};


		//routecopying

		MapRoutes.ATTACK_Tankallies_1 = MapRoutes.BUILD_Tank;
		MapRoutes.ATTACK_Tankallies_2 = MapRoutes.BUILD_Tank;
		MapRoutes.ATTACK_Tankallies_3 = MapRoutes.BUILD_Tank;
		MapRoutes.ATTACK_Tankallies_4 = MapRoutes.BUILD_Tank;

		MapRoutes.ATTACK_Allbar_1 = MapRoutes.PLANT_Tank_Barrier_1;
		MapRoutes.ATTACK_Allbar_2 = MapRoutes.PLANT_Tank_Barrier_1;
		MapRoutes.ATTACK_Allbar_3 = MapRoutes.PLANT_Tank_Barrier_1;
		MapRoutes.ATTACK_Allbar_4 = MapRoutes.PLANT_Tank_Barrier_1;

		MapRoutes.ATTACK_Barr_2 = MapRoutes.ATTACK_Barr_1;
		MapRoutes.ATTACK_Barr_3 = MapRoutes.ATTACK_Barr_1;
		MapRoutes.ATTACK_Barr_4 = MapRoutes.ATTACK_Barr_1;
		MapRoutes.ATTACK_Barr_5 = MapRoutes.ATTACK_Barr_1;
		MapRoutes.ATTACK_Barr_6 = MapRoutes.ATTACK_Barr_1;
		MapRoutes.ATTACK_Barr_7 = MapRoutes.ATTACK_Barr_1;
		MapRoutes.ATTACK_Barr_8 = MapRoutes.ATTACK_Barr_1;
		MapRoutes.ATTACK_Barr_9 = MapRoutes.ATTACK_Barr_1;

		MapRoutes.ATTACK_Bunker_2 = MapRoutes.ATTACK_Bunker_1;
		MapRoutes.ATTACK_Bunker_3 = MapRoutes.ATTACK_Bunker_1;
		MapRoutes.ATTACK_Bunker_4 = MapRoutes.ATTACK_Bunker_1;
		MapRoutes.ATTACK_Bunker_5 = MapRoutes.ATTACK_Bunker_1;
		MapRoutes.ATTACK_Bunker_6 = MapRoutes.ATTACK_Bunker_1;
		MapRoutes.ATTACK_Bunker_7 = MapRoutes.ATTACK_Bunker_1;

		Util.Routes(MapRoutes);

};

global OnBotJoin = function( bot )
{
	team = bot.GetTeam();
	class = bot.GetClass();

	if ( class == CLASS.SOLDIER )
		{ bot.ChangePrimaryWeapon( WEAPON.PANZERFAUST ); }

	if ( class == CLASS.COVERTOPS )
	{
		if ( team == TEAM.ALLIES )
			{ bot.ChangePrimaryWeapon( WEAPON.GARAND ); }
		else if ( team == TEAM.AXIS )
			{ bot.ChangePrimaryWeapon( WEAPON.STEN ); }
	};
};
