//==========================================================================================
//
//	ae_wizerness_final.gm
//
//	Who  	When		What
//------------------------------------------------------------------------------------------
//	^4Tardis	31 October 2010	Initial Script
//
//==========================================================================================
//

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

	Allied_Command_Post_Dyno = 0,
	Allied_Control_Center_Dyno = 0,
	Allied_side_entrance_Dyno = 0,
	Axis_Command_Post_Dyno = 0,
	Axis_Control_Center_Dyno = 0,
	Axis_side_entrance_Dyno = 0,

	Navigation =
	{
		midladder =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.FORWARD, 3);
				sleep(3);
			},
		},
	},

	Roles =
	{
		AXIS = // Team
		{
			AllBots = false, // each bot is considered for a role
			DEFENDER = // the DEFENDER role
			{
				spawnpt = 1,			// users of this role will choose spawnpt 1
				numbots = 4,			// maximum of 2 bots
			},
			ATTACKER =
			{
				numbots = 2,
				crucialClass = CLASS.ENGINEER,	// first bot
			},
		},

		ALLIES =
		{
			AllBots = false, // default: every other bot
			DEFENDER =
			{
				spawnpt = 2,
				numbots = 4,
			},
			ATTACKER =
			{
				numbots = 2,
				crucialClass = CLASS.ENGINEER,	// first bot
			},
		},
	},

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

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

	Allied_Command_Post_Planted = function( trigger )
	{
		Map.Allied_Command_Post_Dyno += 1;
		Util.MapDebugPrint( "Allied_Command_Post_Planted" );
	},

	Allied_Control_Center_Planted = function( trigger )
	{
		Map.Allied_Control_Center_Dyno += 1;
		Util.MapDebugPrint( "Allied_Control_Center_Planted" );
	},

	Allied_side_entrance_Planted = function( trigger )
	{
		Map.Allied_side_entrance_Dyno += 1;
		Util.MapDebugPrint( "Allied_side_entrance_Planted" );
	},

	Axis_Command_Post_Planted = function( trigger )
	{
		Map.Axis_Command_Post_Dyno += 1;
		Util.MapDebugPrint( "Axis_Command_Post_Planted" );
	},

	Axis_Control_Center_Planted = function( trigger )
	{
		Map.Axis_Control_Center_Dyno += 1;
		Util.MapDebugPrint( "Axis_Control_Center_Planted" );
	},

	Axis_side_entrance_Planted = function( trigger )
	{
		Map.Axis_side_entrance_Dyno += 1;
		Util.MapDebugPrint( "Axis_side_entrance_Planted" );
	},

	Allied_Command_Post_Defused = function( trigger )
	{
		Map.Allied_Command_Post_Dyno -= 1;
		Util.MapDebugPrint( "Allied_Command_Post_Defused" );
	},

	Allied_Control_Center_Defused = function( trigger )
	{
		Map.Allied_Control_Center_Dyno -= 1;
		Util.MapDebugPrint( "Allied_Control_Center_Defused" );
	},

	Allied_side_entrance_Defused = function( trigger )
	{
		Map.Allied_side_entrance_Dyno -= 1;
		Util.MapDebugPrint( "Allied_side_entrance_Defused" );
	},

	Axis_Command_Post_Defused = function( trigger )
	{
		Map.Axis_Command_Post_Dyno -= 1;
		Util.MapDebugPrint( "Axis_Command_Post_Defused" );
	},

	Axis_Control_Center_Defused = function( trigger )
	{
		Map.Axis_Control_Center_Dyno -= 1;
		Util.MapDebugPrint( "Axis_Control_Center_Defused" );
	},

	Axis_side_entrance_Defused = function( trigger )
	{
		Map.Axis_side_entrance_Dyno -= 1;
		Util.MapDebugPrint( "Axis_side_entrance_Defused" );
	},

	Allied_Command_Post_Destroyed = function( trigger )
	{
		Map.Allied_Command_Post_Dyno = 0;

		Util.MapDebugPrint( "Allied_Command_Post_Destroyed" );
	},

	Allied_Control_Center_Destroyed = function( trigger )
	{
		Map.Allied_Control_Center_Dyno = 0;

		Util.MapDebugPrint( "Allied_Control_Center_Destroyed" );
	},

	Allied_side_entrance_Destroyed = function( trigger )
	{
		Map.Allied_side_entrance_Dyno = 0;

		Util.DisableGoal( "PLANT_Allied_side_entrance", true );
		Util.EnableGoal( "ROUTE_axisside_.*", true );

		Util.MapDebugPrint( "Allied_side_entrance_Destroyed" );
	},

	Axis_Command_Post_Destroyed = function( trigger )
	{
		Map.Axis_Command_Post_Dyno = 0;

		Util.MapDebugPrint( "Axis_Command_Post_Destroyed" );
	},

	Axis_Control_Center_Destroyed = function( trigger )
	{
		Map.Axis_Control_Center_Dyno = 0;

		Util.MapDebugPrint( "Axis_Control_Center_Destroyed" );
	},

	Axis_side_entrance_Destroyed = function( trigger )
	{
		Map.Axis_side_entrance_Dyno = 0;

		Util.DisableGoal( "PLANT_Axis_side_entrance", true );
		Util.EnableGoal( "ROUTE_alliedside_.*", true );

		Util.MapDebugPrint( "Axis_side_entrance_Destroyed" );
	},

	allied_forward_checkpoint_Axis_Captured = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "CHECKPOINT_axis_forward_checkpoint" );
		Util.MapDebugPrint( "allied_forward_checkpoint_Axis_Captured" );
	},

	allied_forward_checkpoint_Allies_Captured = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "CHECKPOINT_allied_forward_checkpoint" );
		Util.MapDebugPrint( "allied_forward_checkpoint_Allies_Captured" );
	},

	axis_forward_checkpoint_Axis_Captured = function( trigger )
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, "CHECKPOINT_axis_forward_checkpoint" );
		Util.MapDebugPrint( "axis_forward_checkpoint_Axis_Captured" );
	},

	axis_forward_checkpoint_Allies_Captured = function( trigger )
	{
		SetAvailableMapGoals( TEAM.AXIS, true, "CHECKPOINT_allied_forward_checkpoint" );
		Util.MapDebugPrint( "axis_forward_checkpoint_Allies_Captured" );
	},
};

global OnMapLoad = function()
{
	// Register callback functions
	OnTrigger( "Allied Command Post constructed. Charge speed increased!G", Map.Allied_Command_Post_Built );
	OnTrigger( "Axis Command Post constructed. Charge speed increased!", Map.Axis_Command_Post_Built );
	OnTrigger( "Planted at the Allied Command Post.", Map.Allied_Command_Post_Planted );
	OnTrigger( "Planted at the Allied Control Center.", Map.Allied_Control_Center_Planted );
	OnTrigger( "Planted at the Allied side entrance.", Map.Allied_side_entrance_Planted );
	OnTrigger( "Planted at the Axis Command Post.", Map.Axis_Command_Post_Planted );
	OnTrigger( "Planted at the Axis Control Center.", Map.Axis_Control_Center_Planted );
	OnTrigger( "Planted at the Axis side entrance.", Map.Axis_side_entrance_Planted );
	OnTrigger( "Defused at the Allied Command Post.", Map.Allied_Command_Post_Defused );
	OnTrigger( "Defused at the Allied Control Center.", Map.Allied_Control_Center_Defused );
	OnTrigger( "Defused at the Allied side entrance.", Map.Allied_side_entrance_Defused );
	OnTrigger( "Defused at the Axis Command Post.", Map.Axis_Command_Post_Defused );
	OnTrigger( "Defused at the Axis Control Center.", Map.Axis_Control_Center_Defused );
	OnTrigger( "Defused at the Axis side entrance.", Map.Axis_side_entrance_Defused );
	OnTrigger( "Axis team has destroyed the Allied Command Post!", Map.Allied_Command_Post_Destroyed );
	OnTrigger( "the Allied Control panel has been destroyed!", Map.Allied_Control_Center_Destroyed );
	OnTrigger( "the Allied Side Door has been destroyed!", Map.Allied_side_entrance_Destroyed );
	OnTrigger( "Allied team has destroyed the Axis Command Post!", Map.Axis_Command_Post_Destroyed );
	OnTrigger( "the Axis Control panel has been destroyed!", Map.Axis_Control_Center_Destroyed );
	OnTrigger( "the Axis Side Door has been destroyed!", Map.Axis_side_entrance_Destroyed );
	OnTrigger( "Allies have captured their forward spawn!", Map.allied_forward_checkpoint_Axis_Captured );
	OnTrigger( "Allies have lost their forward spawn!", Map.allied_forward_checkpoint_Allies_Captured );
	OnTrigger( "Axis have captured their forward spawn!", Map.axis_forward_checkpoint_Axis_Captured );
	OnTrigger( "Axis have lost their forward spawn!", Map.axis_forward_checkpoint_Allies_Captured );

	Util.DisableGoal( ".*", true ); // all but routes
	Util.DisableGoal( "ROUTE_alliedside_.*", true );
	Util.DisableGoal( "ROUTE_axisside_.*", true );
	Util.EnableGoal( "CAMP.*" );
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAMP_rDefend.*" );
	SetAvailableMapGoals( TEAM.AXIS, false, {
		"CAMP_bDefend.*",
		"CAMP_zAttack.*",
	});
	SetAvailableMapGoals( TEAM.ALLIES, false, "CAMP_dAttack.*" );
	Util.EnableGoal( "CHECKPOINT.*" );
	Util.EnableGoal( "PLANT.*" );
	SetGoalPriority( "PLANT_Axis_side_entrance", 0.82, TEAM.ALLIES, CLASS.ENGINEER, true );
	SetGoalPriority( "PLANT_Allied_side_entrance", 0.82, TEAM.AXIS, CLASS.ENGINEER, true );
	SetGoalPriority( "PLANT_Allied_Control_Center", 0.81, TEAM.AXIS, CLASS.ENGINEER, true );
	SetGoalPriority( "PLANT_Axis_Control_Center", 0.81, TEAM.ALLIES, CLASS.ENGINEER, true );
	SetGoalPriority( "CAMP.*", 0.86, 0, 0, true );
	SetGoalPriority( "CAMP.*", 0.80, 0, CLASS.ENGINEER, true );
	Util.AddUseWp("PLANT_Axis_Control_Center", "Ax");
	Util.AddUseWp("PLANT_Axis_Control_Center", "Ax1");
	Util.AddUseWp("PLANT_Axis_Control_Center", "Ax2");
	Util.AddUseWp("PLANT_Axis_Control_Center", "Ax3");
	Util.AddUseWp("PLANT_Axis_Control_Center", "Ax4");
	Util.AddUseWp("PLANT_Axis_Control_Center", "Ax5");
	Util.AddUseWp("PLANT_Allied_Control_Center", "Al");
	Util.AddUseWp("PLANT_Allied_Control_Center", "Al1");
	Util.AddUseWp("PLANT_Allied_Control_Center", "Al2");
	Util.AddUseWp("PLANT_Allied_Control_Center", "Al3");
	Util.AddUseWp("PLANT_Allied_Control_Center", "Al4");
	Util.AddUseWp("PLANT_Allied_Control_Center", "Al5");
	// Max users per goal
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "GRENADE_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );
	Util.SetMaxUsers( 2, "CHECKPOINT.*" );
	Util.SetMaxUsers( 1, "CAMP_.*" );
	// Camp times
	SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=15, MaxCampTime=90} );
	SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=10, MaxCampTime=60} );
	//Map Routes
	MapRoutes =
	{
		PLANT_Axis_side_entrance =
		{
			ROUTE_Allied_Spawn  =
			{
				ROUTE_Allied  =
				{
					ROUTE_main_2  =
					{
						ROUTE_main_3  =
						{
							ROUTE_main_4  =
							{
								ROUTE_main_5  =
								{
									ROUTE_alliedside  =
									{
									},
								},
							},
						},
					},
				},
				ROUTE_AlliedB  =
				{
					ROUTE_main_2  =
					{
						ROUTE_main_3  =
						{
							ROUTE_main_4  =
							{
								ROUTE_main_5  =
								{
									ROUTE_alliedside  =
									{
									},
								},
							},
						},
					},
				},
			},
		},
		PLANT_Allied_side_entrance =
		{
			ROUTE_AxisSpawn  =
			{
				ROUTE_Axis  =
				{
					ROUTE_main_8  =
					{
						ROUTE_main_7  =
						{
							ROUTE_main_6  =
							{
								ROUTE_main_5  =
								{
									ROUTE_axisside  =
									{
									},
								},
							},
						},
					},
				},
				ROUTE_AxisB  =
				{
					ROUTE_main_8  =
					{
						ROUTE_main_7  =
						{
							ROUTE_main_6  =
							{
								ROUTE_main_5  =
								{
									ROUTE_axisside  =
									{
									},
								},
							},
						},
					},
				},
			},
		},
		PLANT_Allied_Control_Center =
		{
			ROUTE_AxisSpawn  =
			{
				ROUTE_Axis  =
				{
					ROUTE_main_8  =
					{
						ROUTE_main_7  =
						{
							ROUTE_main_6  =
							{
								ROUTE_main_5  =
								{
									ROUTE_main_4  =
									{
										ROUTE_main_3  =
										{
											ROUTE_main_2  =
											{
												ROUTE_main_1  =
												{
													ROUTE_main  =
													{
														ROUTE_AlliedControl  =
														{
														},
													},
												},
											},
										},
									},
									ROUTE_axisside  =
									{
										ROUTE_axisside_1  =
										{
											ROUTE_axisside_2  =
											{
												ROUTE_axisside_3  =
												{
													ROUTE_axisside_4  =
													{
														ROUTE_axisside_5  =
														{
															ROUTE_axisside_6  =
															{
																ROUTE_axisside_7  =
																{
																	ROUTE_AlliedControl  =
																	{
																	},
																},
															},
														},
													},
												},
											},
										},
									},
								},
							},
						},
					},
				},
				ROUTE_AxisB  =
				{
					ROUTE_main_8  =
					{
						ROUTE_main_7  =
						{
							ROUTE_main_6  =
							{
								ROUTE_main_5  =
								{
									ROUTE_main_4  =
									{
										ROUTE_main_3  =
										{
											ROUTE_main_2  =
											{
												ROUTE_main_1  =
												{
													ROUTE_main  =
													{
														ROUTE_AlliedControl  =
														{
														},
													},
												},
											},
										},
									},
									ROUTE_axisside  =
									{
										ROUTE_alliedside_1  =
										{
											ROUTE_alliedside_2  =
											{
												ROUTE_alliedside_3  =
												{
													ROUTE_alliedside_4  =
													{
														ROUTE_alliedside_5  =
														{
															ROUTE_alliedside_6  =
															{
																ROUTE_alliedside_7  =
																{
																	ROUTE_AlliedControl  =
																	{
																	},
																},
															},
														},
													},
												},
											},
										},
									},
								},
							},
						},
					},
				},
			},
		},
		PLANT_Axis_Control_Center =
		{
			ROUTE_Allied_Spawn  =
			{
				ROUTE_Allied  =
				{
					ROUTE_main_2  =
					{
						ROUTE_main_3  =
						{
							ROUTE_main_4  =
							{
								ROUTE_main_5  =
								{
									ROUTE_main_6  =
									{
										ROUTE_main_7  =
										{
											ROUTE_main_8  =
											{
												ROUTE_main_9  =
												{
													ROUTE_AxisControl  =
													{
													},
												},
											},
										},
									},
									ROUTE_alliedside  =
									{
										ROUTE_alliedside_1  =
										{
											ROUTE_alliedside_2  =
											{
												ROUTE_alliedside_3  =
												{
													ROUTE_alliedside_4  =
													{
														ROUTE_alliedside_5  =
														{
															ROUTE_alliedside_6  =
															{
																ROUTE_alliedside_7  =
																{
																	ROUTE_AxisControl  =
																	{
																	},
																},
															},
														},
													},
												},
											},
										},
									},
								},
							},
						},
					},
				},
				ROUTE_AlliedB  =
				{
					ROUTE_main_2  =
					{
						ROUTE_main_3  =
						{
							ROUTE_main_4  =
							{
								ROUTE_main_5  =
								{
									ROUTE_main_6  =
									{
										ROUTE_main_7  =
										{
											ROUTE_main_8  =
											{
												ROUTE_main_9  =
												{
													ROUTE_AxisControl  =
													{
													},
												},
											},
										},
									},
									ROUTE_alliedside  =
									{
										ROUTE_alliedside_1  =
										{
											ROUTE_alliedside_2  =
											{
												ROUTE_alliedside_3  =
												{
													ROUTE_alliedside_4  =
													{
														ROUTE_alliedside_5  =
														{
															ROUTE_alliedside_6  =
															{
																ROUTE_alliedside_7  =
																{
																	ROUTE_AxisControl  =
																	{
																	},
																},
															},
														},
													},
												},
											},
										},
									},
								},
							},
						},
					},
				},
			},
		},
	};
	MapRoutes.PLANT_Axis_Control_Center = MapRoutes.CAMP_zAttack;
	MapRoutes.PLANT_Axis_Control_Center = MapRoutes.CAMP_zAttack1;
	MapRoutes.PLANT_Axis_Control_Center = MapRoutes.CAMP_zAttack2;
	MapRoutes.PLANT_Axis_Control_Center = MapRoutes.CAMP_zAttack3;
	MapRoutes.PLANT_Axis_Control_Center = MapRoutes.CAMP_zAttack4;
	MapRoutes.PLANT_Axis_Control_Center = MapRoutes.CAMP_zAttack5;

	MapRoutes.PLANT_Allied_Control_Center = MapRoutes.CAMP_dAttack;
	MapRoutes.PLANT_Allied_Control_Center = MapRoutes.CAMP_dAttack1;
	MapRoutes.PLANT_Allied_Control_Center = MapRoutes.CAMP_dAttack2;
	MapRoutes.PLANT_Allied_Control_Center = MapRoutes.CAMP_dAttack3;
	MapRoutes.PLANT_Allied_Control_Center = MapRoutes.CAMP_dAttack4;
	MapRoutes.PLANT_Allied_Control_Center = MapRoutes.CAMP_dAttack5;
	MapRoutes.PLANT_Allied_Control_Center = MapRoutes.CAMP_dAttack6;

	Util.Routes(MapRoutes);

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

global OnBotJoin = function( bot )
{
	bot.TargetBreakableDist = 90.0;
	Util.ChangeSpawn(TEAM.ALLIES, 2, 1, CLASS.ENGINEER); //One Allied ENGINEER will spawn at location 2
	Util.ChangeSpawn(TEAM.AXIS, 1, 1, CLASS.ENGINEER); //One Axis ENGINEER will spawn at location 1
};
