/****************************************************
Pathing updated and script by **PCZ** >M@t3o$<
Correspondant WAY file size : 26,6 Ko (27 320 octets)
Last Update : 10 November 2009
Updated 2 20 10--Blindman
02 23 10 -more ally camp spots at start
moved some stuff around, new camp goals and a mg42
****************************************************/
//	^4Tardis	01 December 2010	fixed team chat
global Map =
{
	Ammo_Cabinet_t63 = "AMMOCAB_t63",
	Ammo_Cabinet_t65 = "AMMOCAB_t65",
	Health_Cabinet_healaxis = "HEALTHCAB_healaxis",
	Health_Cabinet_t64 = "HEALTHCAB_t64",
	Checkpoint_towerflag = "CHECKPOINT_towerflag",
	Flag_docs = "FLAG_docs",
	Cappoint_Transmitter = "CAPPOINT_Transmitter",
	Build_Command_Post = "BUILD_Command_Post",
	Build_Vault_Door = "BUILD_Vault_Door",
	Build_construction_mg = "BUILD_construction_mg",
	Plant_Castle_Main_Door = "PLANT_Castle_Main_Door",
	Plant_Command_Post = "PLANT_Command_Post",
	Plant_Main_Wall = "PLANT_Main_Wall",
	Plant_Side_Wall = "PLANT_Side_Wall",
	Plant_Vault_Door = "PLANT_Vault_Door",
	Plant_construction_mg = "PLANT_construction_mg",
	Mount_HouseMG42 = "MOUNTMG42_HouseMG42",
	Mount_SpawnMG42 = "MOUNTMG42_SpawnMG42",
	Mount_construction_mg = "MOUNTMG42_construction_mg",
	Repair_HouseMG42 = "REPAIRMG42_HouseMG42",
	Repair_SpawnMG42 = "REPAIRMG42_SpawnMG42",
	Repair_construction_mg = "REPAIRMG42_construction_mg",

	disablecm =
	{
		Name = "disablecm",
		TriggerOnClass = CLASS.ANYPLAYER,
		OnEnter = function(ent)
		{
			b = Util.IsBot(ent);
			if (b)
			{
				b.DisableBotPush(true);
				b.DisableCombatMovement = true;


				Util.MapDebugPrint( "" );
			}
		},
		OnExit = function(ent)
		{
			b = Util.IsBot(ent);
			if (b)
			{
				b.DisableBotPush(false);
				b.DisableCombatMovement = false;

			}
		},
	},

	Allied_Command_Post_Built = function()
	{
		Util.MapDebugPrint( "Allied_Command_Post_Built" );
	},

	Axis_Command_Post_Built = function()
	{
		Util.MapDebugPrint( "Axis_Command_Post_Built" );
	},

	Vault_Door_Built = function()
	{
		Util.MapDebugPrint( "Vault_Door_Built" );
	},

	construction_mg_Built = function()
	{
		Util.MapDebugPrint( "construction_mg_Built" );
	},

	Castle_Main_Door_Destroyed = function()
	{


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

		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Allied.*" );

		Util.MapDebugPrint( "Castle_Main_Door_Destroyed" );
	},

	Allied_Command_Post_Destroyed = function()
	{
		Util.MapDebugPrint( "Allied_Command_Post_Destroyed" );
	},

	Axis_Command_Post_Destroyed = function()
	{
		Util.MapDebugPrint( "Axis_Command_Post_Destroyed" );
	},

	Main_Wall_Destroyed = function()
	{

		SetAvailableMapGoals( TEAM.AXIS, true, {
			"DEFEND_Bravo.*",
			Map.Build_Command_Post,
			Map.Plant_Command_Post,
		});
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Alpha.*" );

		SetAvailableMapGoals( TEAM.ALLIES, true, {
			"ATTACK_Allies.*",
			Map.Build_Command_Post,
			Map.Plant_Command_Post,
			Map.Plant_Vault_Door,
			Map.Build_construction_mg,
			Map.Mount_construction_mg,
			"CAPPOINT_Transmitter",
		});
		SetAvailableMapGoals( TEAM.AXIS, true, {
			"MOUNTMG42_CastleMG42",
			"REPAIRMG42_CastleMG42",
		});
		Util.DisableGroup( "1", TEAM.ALLIES);
		Util.EnableGroup( "2", TEAM.ALLIES);

		Util.MapDebugPrint( "Main_Wall_Destroyed" );
	},

	Side_Wall_Destroyed = function()
	{


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

		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Allied.*" );

		Util.MapDebugPrint( "Side_Wall_Destroyed" );
	},

	Vault_Door_Destroyed = function()
	{



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

		Util.MapDebugPrint( "Vault_Door_Destroyed" );
	},

	construction_mg_Destroyed = function()
	{
		Util.MapDebugPrint( "construction_mg_Destroyed" );
	},

	Docs_Taken = function()
	{

		SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_Alpha.*" );
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"DEFEND_Bravo.*",
			"DEFEND_Charlie.*",
		});

		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Delta.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, {
			"ATTACK_Allied.*",
			Map.Mount_construction_mg,
		});
		SetAvailableMapGoals( TEAM.AXIS, false, {
			"MOUNTMG42_CastleMG42",
			"REPAIRMG42_CastleMG42",
		});

		Util.MapDebugPrint( "Docs_Taken" );
	},

	Docs_Returned = function()
	{

		SetAvailableMapGoals( TEAM.AXIS, true, {
			"DEFEND_Bravo.*",
			"DEFEND_Charlie.*",
		});
		SetAvailableMapGoals( TEAM.AXIS, false, "DEFEND_Alpha.*" );


		SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_Allied.*" );
		SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_Delta.*" );
		SetAvailableMapGoals( TEAM.ALLIES, true, Map.Mount_construction_mg );
		SetAvailableMapGoals( TEAM.AXIS, true, "MOUNTMG42_CastleMG42" );

		Util.MapDebugPrint( "Docs_Returned" );
	},

	Docs_Captured = function()
	{

		ETUtil.WinningChat( TEAM.ALLIES );
		ETUtil.LosingChat( TEAM.AXIS );

		Util.MapDebugPrint( "Docs_Captured" );
	},

	towerflag_Axis_Captured = function()
	{

		SetAvailableMapGoals( TEAM.ALLIES, true, Map.Checkpoint_towerflag );
		Util.EnableGroup( "1", TEAM.ALLIES);
		Util.DisableGroup( "2", TEAM.ALLIES);


		Util.MapDebugPrint( "towerflag_Axis_Captured" );
	},

	towerflag_Allies_Captured = function()
	{

		SetAvailableMapGoals( TEAM.AXIS, true, Map.Checkpoint_towerflag );

		Util.DisableGroup( "1", TEAM.ALLIES);
		Util.EnableGroup( "2", TEAM.ALLIES);

		Util.MapDebugPrint( "towerflag_Allies_Captured" );
	},

};

global OnMapLoad = function()
{
	// *** TRIGGERS ***
	OnTrigger( "Allied Command Post constructed. Charge speed increased!", Map.Allied_Command_Post_Built );
	OnTrigger( "Axis Command Post constructed. Charge speed increased!", Map.Axis_Command_Post_Built );
	OnTrigger( "Axis team has destroyed the Allied Command Post!", Map.Allied_Command_Post_Destroyed );
	OnTrigger( "Allied team has destroyed the Axis Command Post!", Map.Axis_Command_Post_Destroyed );
	OnTrigger( "Axis team has ^3constructed ^7the ^3Safe Door^7!", Map.Vault_Door_Built );
	OnTrigger( "Allied team has ^3built ^7the ^3mg42^7!", Map.construction_mg_Built );
	OnTrigger( "The allied team has ^3destroyed ^7the ^3Main Entrance^7!!", Map.Castle_Main_Door_Destroyed );
	OnTrigger( "Allies have ^3breached ^7the ^3Main Wall^7!", Map.Main_Wall_Destroyed );
	OnTrigger( "Allies have ^3breached ^7the ^3Side Wall^7!", Map.Side_Wall_Destroyed );
	OnTrigger( "Allied team has ^3destroyed ^7the ^3Safe Door^7!", Map.Vault_Door_Destroyed );
	OnTrigger( "Axis team has ^3destroyed ^7the ^3mg42^7!", Map.construction_mg_Destroyed );
	OnTrigger( "Allies have stolen the Secert Documents!", Map.Docs_Taken );
	OnTrigger( "Flag returned docs!", Map.Docs_Returned );
	OnTrigger( "Allied team has ^1transmitted ^7the ^1Documents!", Map.Docs_Captured );
	OnTrigger( "Axis ^3reclaim ^7the ^3Tower Spawn^7!", Map.towerflag_Axis_Captured );
	OnTrigger( "Allies ^3capture ^7the ^3Tower Spawn^7!", Map.towerflag_Allies_Captured );

	dead = OnTriggerRegion(AABB(-457.6,830.975,34.534,336.317,1380.261,274.371), Map.disablecm);


	// *** CLEAR ALL GOALS FOR BOTH TEAMS ***
	Util.DisableGoal(".*", true); // all but routes
	SetGoalGroup( "MOBILEMG42_.*", "1");
	SetGoalGroup( "CAMP_start.*", "1");
	SetGoalGroup( "HEALTHCAB_t64", "1");
	SetGoalGroup( "AMMOCAB_t65", "1");
	SetGoalGroup( "PLANT_Castle_Main_Door", "2");
	SetGoalGroup( "PLANT_Side_Wall", "2");
	SetGoalGroup( "AMMOCAB_t63", "2");
	SetGoalGroup( "HEALTHCAB_healaxis", "2");



	// *** AXIS GOALS ***
	SetAvailableMapGoals( TEAM.AXIS, true, {
		"DEFEND_Alpha.*",
		"AMMOCAB_t63",
		"HEALTHCAB_healaxis",
		"BUILD_Vault_Door",
	});
//~	SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Vault_Door_1" );
//~	SetAvailableMapGoals( TEAM.AXIS, true, "MOUNTMG42_CastleMG42" );

	// *** ALLIED GOALS ***
	SetAvailableMapGoals( TEAM.ALLIES, true, {
		Map.Plant_Main_Wall,
		Map.Checkpoint_towerflag,
	});

	Util.EnableGroup( "1", TEAM.ALLIES);


	// *** PRIORITIES ***
/*
//~	SetGoalPriority( "ATTACK_.*", 0.4 );
//~	SetGoalPriority( "DEFEND_.*", 0.4 );
	SetGoalPriority( "CAMP_.*", 0.7 );
	SetGoalPriority( "ATTACK_Allied.*", 0.5 );
	SetGoalPriority( "ATTACK_Delta.*", 0.5 );
	SetGoalPriority( "DEFEND_Charlie.*", 0.5 );
	SetGoalPriority( Map.Build_construction_mg, 0.7 );
	SetGoalPriority( Map.Checkpoint_towerflag, 0.7 );
	SetGoalPriority( Map.Plant_Command_Post, 0.7 );
	SetGoalPriority( Map.Plant_Main_Wall, 0.8 );
	SetGoalPriority( Map.Plant_Side_Wall, 0.9 );
	SetGoalPriority( Map.Plant_Castle_Main_Door, 0.9 );
	SetGoalPriority( Map.Build_Command_Post, 0.95 );
	SetGoalPriority( Map.Plant_Vault_Door, 1.0 );
*/
	SetGoalPriority( Map.Plant_Command_Post, 0.0, 0, CLASS.ENGINEER );

	SetMapGoalProperties( "MOUNTMG42_CastleMG42", {MinCampTime=60, MaxCampTime=120});

	// *** GOALS PROPERTIES ***
	Util.SetMaxUsers( 1, "PLANT_.*" );
	Util.SetMaxUsers( 2, "PLANT_Main_Wall" );
	Util.SetMaxUsers( 1, "CAMP_.*" );
	Util.SetMaxUsers( 1, "BUILD_.*" );
	Util.SetMaxUsers( 2, "BUILD_Vault_Door" );

	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );
	Util.SetMaxUsers( 3, "CHECKPOINT_.*" );


	// *** MOVING FEW PLANT GOALS ***
	Util.SetGoalPosition( -1358, 1642, 28.234, "PLANT_Side_Wall" );
	Util.SetGoalPosition( -748.4, 1260, 24.125, "PLANT_Castle_Main_Door" );
	Util.SetGoalPosition( 617, 162, 311.35, "PLANT_Main_Wall" );
	Util.SetGoalPosition( -1337.684, 1337.453, 216.125, "BUILD_Vault_Door" );

	// *** ROUTES ***
	MapRoutes =
	{
		CHECKPOINT_towerflag =
		{
			ROUTE_AlliedSpawn1 =
			{
				ROUTE_Flag1 =
				{
					ROUTE_Flag2 =
					{
						ROUTE_Flag3 =
						{
							ROUTE_Flag3_1 = { ROUTE_Flag3_3 = {}, },
							ROUTE_Flag3_2 = { ROUTE_Flag3_3 = {}, },
						},
					},
				},
			},

			ROUTE_AlliedSpawn2 =
			{
				ROUTE_Flag1 =
				{
					ROUTE_Flag2 =
					{
						ROUTE_Flag3 =
						{
							ROUTE_Flag3_1 = { ROUTE_Flag3_3 = {}, },
							ROUTE_Flag3_2 = { ROUTE_Flag3_3 = {}, },
						}
					},
				},
			},
		},

		CAPPOINT_Transmitter =
		{
			ROUTE_Docs =
			{
				ROUTE_Escape1 =
				{
					ROUTE_Escape2 =
					{
						ROUTE_Escape3 =
						{
							ROUTE_Escape4 =
							{
								ROUTE_Escape5 = {},
							}
						},
					},
				},
			},
		},
	};

	Util.Routes(MapRoutes);


	Util.MapDebugPrint( "Omni-bot map script for Raw Castle Final by **PCZ** >M@t3o$<." );
};

global OnBotJoin = function( bot )
{
	bot.TargetBreakableDist = 100.0;
};
