// Map Script for uje_00
// by NoLine

global Map =
{
	 Debug = 0,
	 Movers =
	 {
		 //retain this so we can ignore it
		 "MOVER_flying",
		 "MOVER_flying_goose",
		 "MOVER_speedy_mover",
		 "MOVER_tap",
	 },

	//Ammo_Cabinet_237 = "AMMO_237",
	//Ammo_Cabinet_448 = "AMMO_448",
	ammocabinet0 = "AMMOCAB_ammocabinet0",
	ammocabinet1 = "AMMOCAB_ammocabinet1",
	ammocabinet2 = "AMMOCAB_ammocabinet2",
	//Health_Cabinet_246 = "HEALTH_246",
	Health_Cabinet_brabo_heal = "HEALTHCAB_brabo_heal",
	Health_Cabinet_healthcabinet2 = "HEALTHCAB_healthcabinet2",
	//Health_Cabinet_healthcabinet_fixed = "HEALTH_CABINET_healthcabinet_fixed",
	flag1 = "CHECKPOINT_flag_1",
	flag3 = "CHECKPOINT_flag_3",
	Build_allied_compost_built = "BUILD_Command_Post",
	Destroy_allied_compost_built = "PLANT_Command_Post",
	Build_axis_compost_built = "BUILD_Command_Post",
	Destroy_axis_compost_built = "PLANT_Command_Post",
	Build_bridge1 = "BUILD_Bridge",
	Build_defense1 = "BUILD_Tank_Barrier_1",
	//Build_healthcabinet = "MAP_CONSTRUCTION_healthcabinet_fixed_construct",
	Build_tank_construct = "BUILD_UJE_tank",
	Build_wall_rubble = "BUILD_wall",
	Destroy_bridge1 = "PLANT_Bridge",
	Destroy_defense1 = "PLANT_Tank_Barrier_1",
	fuelcans_1 = "FLAG_fuelcans_1",
	fuelcans_2 = "FLAG_fuelcans_2",
	fuelcans_3 = "FLAG_fuelcans_3",
	Mount_mg42_113 = "MOUNTMG42_841",
	Mount_mg42_120 = "MOUNTMG42_851",
	Repair_mg42_113 = "REPAIRMG42_841",
	Repair_mg42_120 = "REPAIRMG42_851",
	cappoint = "CAPPOINT_fuelstation",
	Mover_tank = "MOVER_tank",

	tank_repaired = function( trigger )
	{
		Util.ForceRouting( "BUILD_UJE_tank", false );
		Util.MapDebugPrint( "tank_repaired" );
	},

	boozaka = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_tunnel" );
		SetAvailableMapGoals( TEAM.AXIS, false, Map.flag1 );
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_bozaaka_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"DEFEND_tunnel",
			Map.Build_defense1,
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, Map.flag1 );
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			Map.Build_allied_compost_built,
			Map.Build_Destroy_axis_compost_built,
		});

		Util.OnTriggerPosition( Map.Mover_tank, "tankmarker1", 200.0, Map.tank_at_centre_tunnel );

		Util.MapDebugPrint( "^3boozaka" );
	},

	loading_ammo = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"ATTACK_fuel_depot",
			Map.Build_tank_construct,
		});
		SetAvailableMapGoals( TEAM.AXIS, true, Map.flag3 );
		SetAvailableMapGoals( TEAM.AXIS, false, Map.Mover_tank );
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			Map.flag3,
			"DEFEND_fuel_.*",
		});
		//SetAvailableMapGoals( TEAM.ALLIES, true, Map.Build_healthcabinet );

		Util.SetMaxUsers( 2, "CHECKPOINT_flag_3");
		SetGoalPriority( "CHECKPOINT_flag_3", 0.81);

		Util.MapDebugPrint( "^3loading_ammo" );
	},

	need_fuel = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, {
			Map.fuelcans_1,
			Map.fuelcans_2,
			Map.fuelcans_3,
			Map.fuelcans_4,
			Map.Destroy_defense1,
		});
		SetAvailableMapGoals( TEAM.AXIS, false, "ESCORT_tank" );
		SetGoalPriority( Map.Destroy_defense1, 0.79);

		Util.MapDebugPrint( "^3need_fuel" );
	},

	oldskool_axis = function( trigger )
	{

		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam() == TEAM.AXIS ) {
				bot.ChangeSpawnPoint( 4 );
			}
			else {
				bot.ChangeSpawnPoint( 0 );
			}
		}

		Util.MapDebugPrint( "^3oldskool_axis" );
	},

	oldskool_allies = function( trigger )
	{
		foreach ( id and bot in BotTable )
		{
			if ( bot.GetTeam() == TEAM.AXIS || RandInt(1,2) == 1) {
				bot.ChangeSpawnPoint( 0 );
			}
			else {
				bot.ChangeSpawnPoint( 4 );
			}
		}

		Util.MapDebugPrint( "^3oldskool_allies" );
	},

	loaded = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_afterfuel_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_afterfuel_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, {
			Map.Build_axis_compost_built,
			Map.Destroy_allied_compost_built,
			Map.Build_tank_construct,
			Map.Mover_tank,
			Map.Destroy_defense1,
			"ESCORT_tank",
		});
		SetAvailableMapGoals( TEAM.AXIS, false, {
			Map.cappoint,
			Map.fuelcans_1,
			Map.fuelcans_2,
			Map.fuelcans_3,
		});

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

		Util.SetMaxUsers( 1, Map.Destroy_defense1);
		SetGoalPriority( Map.Destroy_defense1, 0.9);

		Util.MapDebugPrint( "^3loaded" );

		if ( !MAP_TALK ) { return; }

		foreach ( id and bot in BotTable )
		{
			r = RandRange(0,10);
			if ( bot.GetTeam() == TEAM.AXIS  )
			{
				if( r < 4 )
				{
					sleep(1.0);
					bot.SayVoice(VOICE.G_CHEER);
				}
			}
		}
	},

	Spinnertal = function( trigger )
	{
		Util.MapDebugPrint( "^3Spinnertal" );
	},

	short_route = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_shortroute_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_shortroute_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_afterfuel_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_afterfuel_.*" );

		Util.OnTriggerPosition( Map.Mover_tank, "tankmarker2", 200.0, Map.tank_leaving_town );

		Util.MapDebugPrint( "^3short_route" );
	},

	long_route = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_longroute_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_afterfuel_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_afterfuel_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_longroute_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, Map.Destroy_defense1 );

		Util.OnTriggerPosition( Map.Mover_tank, "tankmarker2", 200.0, Map.tank_leaving_town );

		Util.MapDebugPrint( "^3long_route" );
	},

	across_bridge = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_accrossbridge_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_accrossbridge_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_bridge_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_bridge_.*" );

		SetAvailableMapGoals( TEAM.AXIS, true, {
			Map.Build_axis_compost_built,
			Map.Destroy_allied_compost_built,
		});

		Util.OnTriggerPosition( Map.Mover_tank, "tankmarker4", 200.0, Map.tank_in_fort );

		Util.ChangeSpawn( TEAM.ALLIES, 0 );
		Util.MapDebugPrint( "^3across_bridge" );
	},

	tank_at_centre_tunnel = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_fuel_depot" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_tunnel" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_tunnel" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_fuel_depot" );

		Util.MapDebugPrint("^3tank_at_centre_tunnel");
	},

	tank_leaving_town = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"ATTACK_longroute_.*",
			"ATTACK_shortroute_.*",
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_longroute_.*" );
		SetAvailableMapGoals( TEAM.ALLIES,  false, "DEFEND_shortroute_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_beforebridge_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_beforebridge_.*" );

		Util.OnTriggerPosition( Map.Mover_tank, "tankmarker3", 200.0, Map.tank_at_bridge );

		Util.MapDebugPrint("^3tank_leaving_town");
	},

	tank_at_bridge = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_bridge_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_bridge_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_beforebridge_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_beforebridge_.*" );

		SetAvailableMapGoals( TEAM.AXIS, true, Map.Build_bridge1 );
		SetAvailableMapGoals( TEAM.AXIS, false, {
			Map.Build_axis_compost_built,
			Map.Destroy_allied_compost_built,
		});

		SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_defense1 );
		SetAvailableMapGoals( TEAM.ALLIES, true, {
			Map.Mount_mg42_113,
			Map.Mount_mg42_120,
		});
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			Map.Build_Destroy_axis_compost_built,
			Map.Build_allied_compost_built,
		});

		Util.MapDebugPrint("^3tank_at_bridge");
	},

	tank_in_fort = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_insidefort_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_insidefort_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_accrossbridge_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"DEFEND_accrossbridge_.*",
			Map.flag3,
		});
		SetGoalPriority( Map.Build_bridge1, 0.81);

		Util.OnTriggerPosition( Map.Mover_tank, "tankmarker5", 200.0, Map.tank_at_end );

		Util.MapDebugPrint("^3tank_in_fort");
	},

	tank_at_end = function()
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_end_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_end_.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_insidefort_.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_insidefort_.*" );

		Util.MapDebugPrint("^3tank_at_end");
	},

};

global OnMapLoad = function()
{
	//there are 2 versions of this map - UJE_00.pk3 and UJE_00_part2.pk3
	OnTrigger( "The Tank has been repaired", Map.tank_repaired );
	OnTrigger( "^5The Tank has been repaired", Map.tank_repaired );
	OnTrigger( "^5The Axis occupied Boozaka Town.", Map.boozaka );
	OnTrigger( "The tank is loading ammo.", Map.loading_ammo );
	OnTrigger( "^5The tank is loading ammo.", Map.loading_ammo );
	OnTrigger( "^5The tank now needs 8 cans of fuel.", Map.need_fuel );
	OnTrigger( "The Axis captured the Old Skool.", Map.oldskool_axis );
	OnTrigger( "The Allies captured the Old Skool.", Map.oldskool_allies );
	OnTrigger( "^5The Axis have delivered all 8 fuelcans.", Map.loaded );
	OnTrigger( "^5The Axis occupied Spinnertal.", Map.Spinnertal );
	OnTrigger( "^5tank taking short route", Map.short_route );
	OnTrigger( "^5tank taking long route", Map.long_route );
	OnTrigger( "uje_axis_tank_is_across_bridge", Map.across_bridge );

	// Axis goals
	SetAvailableMapGoals( TEAM.AXIS, false, {
		"ATTACK_.*",
		"DEFEND_.*",
	});
	SetAvailableMapGoals( TEAM.AXIS, true, {
		Map.Build_tank_construct,
		Map.Mover_tank,
	});
	SetAvailableMapGoals( TEAM.AXIS, false, {
		Map.Build_bridge1,
		Map.Build_axis_compost_built,
		Map.Destroy_allied_compost_built,
		Map.Destroy_defense1,
		Map.fuelcans_1,
		Map.fuelcans_2,
		Map.fuelcans_3,
		Map.flag3,
		Map.Mount_mg42_113,
		Map.Mount_mg42_120,
		Map.Repair_mg42_113,
		Map.Repair_mg42_120,
	});
	//SetAvailableMapGoals( TEAM.AXIS, false, Map.Ammo_Cabinet_237 );       //near 2nd flag
	//SetAvailableMapGoals( TEAM.AXIS, false, Map.Ammo_Cabinet_448 );
	SetAvailableMapGoals( TEAM.AXIS, false, {
		Map.ammocabinet0,
		Map.ammocabinet1,
		Map.ammocabinet2,
	});
	//SetAvailableMapGoals( TEAM.AXIS, false, Map.Health_Cabinet_246 );  //near 2nd flag
	SetAvailableMapGoals( TEAM.AXIS, false, Map.Health_Cabinet_brabo_heal );
	SetAvailableMapGoals( TEAM.AXIS, false, Map.Health_Cabinet_healthcabinet2 ); //near 2nd flag same ??
	//SetAvailableMapGoals( TEAM.AXIS, false, Map.Health_Cabinet_healthcabinet_fixed ); //old skool

	// Allies goals
	SetAvailableMapGoals( TEAM.ALLIES, false, {
		"DEFEND_.*",
		"ATTACK_.*",
		"MOUNT_tank",
	});
	SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_bozaaka_.*" );
	SetAvailableMapGoals( TEAM.ALLIES, false, {
		Map.Build_defense1,
		Map.Build_allied_compost_built,
		Map.Build_Destroy_axis_compost_built,
	});
	//SetAvailableMapGoals( TEAM.ALLIES, false, Map.Build_healthcabinet );
	SetAvailableMapGoals( TEAM.ALLIES, false, {
		Map.Mount_mg42_113,
		Map.Mount_mg42_120,
		Map.flag3,
		Map.Build_wall_rubble,
	});
	//SetAvailableMapGoals( TEAM.ALLIES, false, Map.Ammo_Cabinet_237 );
	//SetAvailableMapGoals( TEAM.ALLIES, false, Map.Ammo_Cabinet_448 );
	SetAvailableMapGoals( TEAM.ALLIES, false, {
		Map.ammocabinet0,
		Map.ammocabinet1,
		Map.ammocabinet2,
	});
	//SetAvailableMapGoals( TEAM.ALLIES, false, Map.Health_Cabinet_246 );
	SetAvailableMapGoals( TEAM.ALLIES, false, {
		Map.Health_Cabinet_brabo_heal,
		Map.Health_Cabinet_healthcabinet2,
	});
	//SetAvailableMapGoals( TEAM.ALLIES, false, Map.Health_Cabinet_healthcabinet_fixed );
	SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_supplies" );

	SetMapGoalProperties( "DEFEND_.*", {MinCampTime=10, MaxCampTime=25});
	Util.ForceRouting( "BUILD_UJE_tank", true );

	OnTriggerRegion(AABB(2532.276,-1594.508,551.125,3407.441,-1355.419,670.111),RegionTrigger.DisableBotPush); //school checkpoint

	MapRoutes =
	{
		BUILD_UJE_tank =
		{
			ROUTE_memorial_spawn =
			{
				ROUTE_memorial_spawn_tunnel = {},
				ROUTE_memorial_spawn_hill = {},
			},

			ROUTE_bozaaka_spawn =
			{
				ROUTE_tunnel =
				{
					Weight = 2,
					ROUTE_fueldepot_split = {},
				},
				ROUTE_alley =
				{
					//ROUTE_alley_split = {},
				},
			},
		},
	};

	MapRoutes.CHECKPOINT_flag_1 = MapRoutes.MAP_CONSTRUCTION_tank_construct;
	Util.Routes(MapRoutes);

	Util.MapDebugPrint( "Omni-bot map script for " + GetMapName() + " executed." );
};

global OnBotJoin = function( bot )
{
	Util.IgnoreTargetGoalTable(bot, Map.Movers);
};
