/********************************************************
Script and waypoints made by  >WES< P!NNAN & >WES< GRANNY
********************************************************/
global Map =
{
	Debug = false,
	Quiet = true,
	//set Talk to false if you don't want the bots talking ingame:
	Talk = true,

	Ammo_Cabinet_north_ammocabinet = "AMMOCAB_north_ammocabinet",
	Ammo_Cabinet_south_ammocabinet = "AMMOCAB_south_ammocabinet",
	Health_Cabinet_north_healthcabinet = "HEALTHCAB_north_healthcabinet",
	Health_Cabinet_south_healthcabinet = "HEALTHCAB_south_healthcabinet",
	Flag_radarbox1 = "FLAG_radarbox1",
	Flag_secretdocs = "FLAG_secretdocs",
	Cappoint_Dropoff = "CAPPOINT_Dropoff",
	Cappoint_Dropoff_1 = "CAPPOINT_Dropoff_1",
	Build_Big_Gun_MG = "BUILD_Big_Gun_MG",
	Build_Command_Post = "BUILD_Command_Post",
	Build_High_Guardhouse = "BUILD_High_Guardhouse",
	Build_Schutzschild = "BUILD_Schutzschild",
	Plant_Big_Gun = "PLANT_Big_Gun",
	Plant_Big_Gun_MG = "PLANT_Big_Gun_MG",
	Plant_Command_Post = "PLANT_Command_Post",
	Plant_High_Guardhouse = "PLANT_High_Guardhouse",
	Plant_Schutzschild = "PLANT_Schutzschild",
	Mount_520 = "MOUNTMG42_520",
	Mount_536 = "MOUNTMG42_536",
	Mount_538 = "MOUNTMG42_538",
	Mount_565 = "MOUNTMG42_565",
	Mount_586 = "MOUNTMG42_586",
	Mount_Big_Gun_MG = "MOUNTMG42_Big_Gun_MG",
	Mount_High_Guardhouse = "MOUNTMG42_High_Guardhouse",
	Mount_Schutzschild = "MOUNTMG42_Schutzschild",
	Repair_520 = "REPAIRMG42_520",
	Repair_536 = "REPAIRMG42_536",
	Repair_538 = "REPAIRMG42_538",
	Repair_565 = "REPAIRMG42_565",
	Repair_586 = "REPAIRMG42_586",
	Repair_Big_Gun_MG = "REPAIRMG42_Big_Gun_MG",
	Repair_High_Guardhouse = "REPAIRMG42_High_Guardhouse",
	Repair_Schutzschild = "REPAIRMG42_Schutzschild",

	Navigation =
	{
		schutzschildladder_pt =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.FORWARD, 2);
				sleep(2);
			},
		},
		mgtowerladder_pt =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.FORWARD, 2);
				sleep(2);
			},
		},
		mg1towerladder_pt =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.FORWARD, 2);
				sleep(2);
			},
		},
		alliesmgladder_pt =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.FORWARD, 3);
				sleep(3);
			},
		},
		lefttowerladder_pt =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.FORWARD, 2);
				sleep(2);
			},
		},
		righttowerladder_pt =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.FORWARD, 2);
				sleep(2);
			},
		},
		tunnelladder_1_pt =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.FORWARD, 2);
				sleep(2);
			},
		},
		tunnelladder_2_pt =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.FORWARD, 2);
				sleep(2);
			},
		},
		truckladder_pt =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.FORWARD, 2);
				sleep(2);
			},
		},
		gunladder_pt =
		{
			navigate = function(_this)
			{
				_this.Bot.HoldButton(BTN.FORWARD, 2);
				sleep(2);
			},
		},
	},

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

	//CP stuff
	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_Destroyed = function( trigger )
	{
		Util.MapDebugPrint( "Allied_Command_Post_Destroyed" );
	},

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

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

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

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

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

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

	//Obj stuff
	radarbox1_Taken = function( trigger )
	{
		Groups.DisableAllies(Groups.group1);
		Groups.DisableAxis(Groups.group2);
		Groups.EnableAllies(Groups.group3);
		Groups.EnableAxis(Groups.group4);

		Util.MapDebugPrint( "radarbox1_Taken" );
	},

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

	Dropoff_Captured = function( trigger )
	{
		SetAvailableMapGoals(0, false, "MOUNTMG42_565");
		Util.MapDebugPrint( "Dropoff_Captured" );
	},

	Detonator_Charged = function( trigger )
	{
		SetAvailableMapGoals(TEAM.ALLIES, true, "SWITCH_Detonator");
	},

	Detonator_Used = function( trigger )
	{
		SetAvailableMapGoals(TEAM.ALLIES, false, "SWITCH_Detonator");

		Groups.DisableAllies(Groups.group3);
		Groups.DisableAxis(Groups.group4);
		Groups.EnableAllies(Groups.group5);
		Groups.EnableAxis(Groups.group6);

		if ( Map.Talk && MAP_TALK )
		{
			foreach ( id and bot in BotTable )
			{
				if ( bot.GetTeam() == TEAM.ALLIES )
				{
					r = RandRange(0,10);
					if( r < 2 )
					{
						bot.SayVoice(VOICE.PATH_CLEARED);
					}
					else if( r > 8 )
					{
						sleep(1.2);
						bot.ExecCommand("vsay_team FTAttack");
					}
				}
				if ( bot.GetTeam() == TEAM.AXIS )
				{
					r = RandRange(0,10);
					if( r < 2 )
					{
						bot.SayVoice(VOICE.REINFORCE_DEF);
					}
					else if( r > 8 )
					{
						sleep(1.2);
						bot.ExecCommand("vsay_team FTFallBack");
					}
				}
			}
		}
	},

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

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

	Dropoff_1_Captured = function( trigger )
	{
		Groups.DisableAllies(Groups.group5);
		Groups.DisableAxis(Groups.group6);
		Groups.EnableAllies(Groups.group7);
		Groups.EnableAxis(Groups.group8);

		if ( Map.Talk && MAP_TALK )
		{
			foreach ( id and bot in BotTable )
			{
				if ( bot.GetTeam() == TEAM.ALLIES )
				{
					r = RandRange(0,10);
					if( r < 2 )
					{
						bot.SayVoice(VOICE.DESTROY_PRIMARY);
					}
					else if( r > 8 )
					{
						sleep(1.2);
						bot.ExecCommand("vsay_team FTAttack");
					}
				}
				if ( bot.GetTeam() == TEAM.AXIS )
				{
					r = RandRange(0,10);
					if( r < 2 )
					{
						bot.SayVoice(VOICE.DEFEND_OBJECTIVE);
					}
					else if( r > 8 )
					{
						sleep(1.2);
						bot.ExecCommand("vsay_team FTFallBack");
					}
				}
			}
		}

		Util.MapDebugPrint( "Dropoff_1_Captured" );
	},

	Big_Gun_Destroyed = function( trigger )
	{
		ETUtil.WinningChat( TEAM.ALLIES );
		ETUtil.LosingChat( TEAM.AXIS );

		Util.MapDebugPrint( "Big_Gun_Destroyed" );
	},

	Crate_Exploded = function()
	{
		SetAvailableMapGoals( TEAM.ALLIES, true, Map.Flag_radarbox1 );
		Util.MapDebugPrint( "Crate_Exploded" );
	},
};

global OnMapLoad = function()
{
	Util.SetGoalOffset( 0, -20, 0, "MOUNTMG42_Big_Gun_MG" );

	OnTrigger( "The Big Gun MG have been built.", Map.Big_Gun_MG_Built );
	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( "The high Guardtower have been built.", Map.High_Guardhouse_Built );
	OnTrigger( "The Schutzschild have been built.", Map.Schutzschild_Built );
	OnTrigger( "Allies have destroyed the Big Gun!", Map.Big_Gun_Destroyed );
	OnTrigger( "The Big Gun MG have been destroyed!", Map.Big_Gun_MG_Destroyed );
	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( "The high Guardtower have been destroyed!", Map.High_Guardhouse_Destroyed );
	OnTrigger( "The Schutzschild have been destroyed!", Map.Schutzschild_Destroyed );
	OnTrigger( "Allies has taken the Detonator Battery!", Map.radarbox1_Taken );
	OnTrigger( "Axis has secured the Detonator Battery!", Map.radarbox1_Returned );
	OnTrigger( "Allies have armed the Train Dynamite Detonator!", Map.Dropoff_Captured );
	OnTrigger( "Allies has taken the Key-Code Documents!", Map.secretdocs_Taken );
	OnTrigger( "Axis has secured the Key-Code Documents!", Map.secretdocs_Returned );
	OnTrigger( "The Key Code Door is now Unlocked!", Map.Dropoff_1_Captured );
	OnTrigger( "The detonator is now charged!", Map.Detonator_Charged );
	OnTrigger( "dyna_lever_Moving", Map.Detonator_Used );
	OnTrigger( "GRENADE_crate1 Exploded.", Map.Crate_Exploded );


	//set max users for goals
	Util.SetMaxUsers( 2, "BUILD.*" );
	Util.SetMaxUsers( 2, "PLANT.*" );
	Util.SetMaxUsers( 1, "DEFEND_.*" );
	Util.SetMaxUsers( 1, "MOUNTMG42_.*" );
	Util.SetMaxUsersInProgress( 3, "SWITCH_.*" );

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

	SetGoalPriority("SWITCH_Detonator", 1.0);

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

	//enable part 1 goals
	Groups.EnableAllies(Groups.group1);
	Groups.EnableAxis(Groups.group2);

	MapRoutes =
	{
		CAPPOINT_Dropoff =
		{
			ROUTE_bunker_spawn =
			{
				ROUTE_railtrack = {},
				ROUTE_churchpath = {},
			},
		},

		ATTACK_a_code_1 =
		{
			ROUTE_town_spawn =
			{
				ROUTE_side_tunnel = {},
				ROUTE_pond_side = {},
				ROUTE_farmhouse_front = {},
			},
		},

		CAPPOINT_Dropoff_1 =
		{
			ROUTE_docs =
			{
				ROUTE_side_tunnel = {},
				ROUTE_pond_side = {},
				ROUTE_farmhouse_front = {},
			},
		},
	};
	MapRoutes.ATTACK_a_start_1 = MapRoutes.CAPPOINT_Dropoff;
	MapRoutes.ATTACK_a_start_2 = MapRoutes.CAPPOINT_Dropoff;
	MapRoutes.ATTACK_a_start_3 = MapRoutes.CAPPOINT_Dropoff;
	MapRoutes.ATTACK_a_start_4 = MapRoutes.CAPPOINT_Dropoff;
	MapRoutes.ATTACK_a_start_5 = MapRoutes.CAPPOINT_Dropoff;
	MapRoutes.ATTACK_a_start_6 = MapRoutes.CAPPOINT_Dropoff;
	MapRoutes.ATTACK_a_start_7 = MapRoutes.CAPPOINT_Dropoff;
	MapRoutes.ATTACK_a_start_8 = MapRoutes.CAPPOINT_Dropoff;
	MapRoutes.ATTACK_a_code_2 = MapRoutes.ATTACK_a_code_1;
	MapRoutes.ATTACK_a_code_3 = MapRoutes.ATTACK_a_code_1;
	MapRoutes.ATTACK_a_code_4 = MapRoutes.ATTACK_a_code_1;
	MapRoutes.ATTACK_a_code_5 = MapRoutes.ATTACK_a_code_1;
	MapRoutes.ATTACK_a_code_6 = MapRoutes.ATTACK_a_code_1;
	MapRoutes.ATTACK_a_end_1 = MapRoutes.ATTACK_a_code_1;
	MapRoutes.ATTACK_a_end_2 = MapRoutes.ATTACK_a_code_1;
	MapRoutes.ATTACK_a_end_3 = MapRoutes.ATTACK_a_code_1;
	MapRoutes.ATTACK_a_end_4 = MapRoutes.ATTACK_a_code_1;
	MapRoutes.ATTACK_gun_out_1 = MapRoutes.ATTACK_gun_1;
	MapRoutes.ATTACK_gun_out_2 = MapRoutes.ATTACK_gun_1;
	MapRoutes.PLANT_Big_Gun = MapRoutes.ATTACK_gun_1;

	Util.Routes(MapRoutes);
	Util.MapDebugPrint( "Script for 2 Hide loaded successfully" );
};

global OnBotJoin = function( bot )
{

	bot.MaxViewDistance = 2500;
	bot.TargetBreakableDist = 150.0;

	if ( bot.GetTeam() == TEAM.AXIS )
	{
		bot.ChangeSpawnPoint(2) ;
		Util.MapDebugPrint("Axis Bot Spawn 2", true);
	};
};

global Groups =
{
	//Allies part 1
	group1 =
	{
		"GRENADE_crate1",
		Map.Cappoint_Dropoff,
		Map.Build_High_Guardhouse,
		Map.Mount_565,
		Map.Mount_High_Guardhouse,
		Map.Repair_565,
		Map.Repair_High_Guardhouse,
		"ATTACK_a_start_.*",
	},

	//Axis part 1
	group2 =
	{
		Map.Build_Command_Post,
		Map.Mobile_MG42_mg_ax_start,
		Map.Build_Schutzschild,
		Map.Mount_536,
		Map.Mount_538,
		Map.Mount_586,
		Map.Plant_High_Guardhouse,
		Map.Repair_536,
		Map.Repair_538,
		Map.Repair_586,
		"DEFEND_d_start_.*",

	},

	//Allies part 2
	group3 =
	{
		Map.Flag_radarbox1,
		Map.Flag_secretdocs,
		Map.Cappoint_Dropoff,
		Map.Mount_565,
		Map.Plant_Schutzschild,
		Map.Repair_565,
		"ATTACK_a_detonator_.*",

	},

	//Axis part 2
	group4 =
	{
		Map.Build_Schutzschild,
		Map.Mount_Schutzschild,
		Map.Repair_Schutzschild,
		"DEFEND_d_detonator_.*",
	},

	//Allies part 3
	group5 =
	{
		Map.Flag_secretdocs,
		Map.Cappoint_Dropoff_1,
		Map.Plant_Big_Gun_MG,
		Map.Build_Command_Post,
		Map.Plant_Command_Post,
		Map.Mobile_MG42_mg_al_gun_1,
		"ATTACK_a_code_.*",
		"SNIPE_s_al_gun_.*",
	},

	//Axis part 3
	group6 =
	{
		Map.Build_Big_Gun_MG,
		Map.Mount_520,
		Map.Mount_Big_Gun_MG,
		Map.Repair_520,
		Map.Repair_Big_Gun_MG,
		"DEFEND_d_code_.*",
	},

	//Allies part 4
	group7 =
	{
		Map.Flag_secretdocs,
		Map.Cappoint_Dropoff_1,
		Map.Plant_Big_Gun,
		//Map.Plant_Big_Gun_MG,
		Map.Build_Command_Post,
		"ATTACK_a_code_.*",
		"ATTACK_a_end_.*",
	},

	//Axis part 4
	group8 =
	{
		Map.Build_Big_Gun_MG,
		Map.Mount_520,
		Map.Mount_Big_Gun_MG,
		Map.Repair_520,
		Map.Repair_Big_Gun_MG,
		"DEFEND_d_code_.*",
		"DEFEND_d_end_.*",
	},

	EnableAllies = function(group)
	{
		foreach (id and goal in group)
		{
			SetAvailableMapGoals( TEAM.ALLIES, true, goal );
			Util.MapDebugPrint("EnableAllies: enabling " + goal, true);
		}
	},

	EnableAxis = function(group)
	{
		foreach (id and goal in group)
		{
			SetAvailableMapGoals( TEAM.AXIS, true, goal );
			Util.MapDebugPrint("EnableAxis: enabling " + goal, true);
		}
	},

	DisableAllies = function(group)
	{
		foreach (id and goal in group)
		{
			SetAvailableMapGoals( TEAM.ALLIES, false, goal );
			Util.MapDebugPrint("DisableAllies: disabling " + goal, true);
		}
	},

	DisableAxis = function(group)
	{
		foreach (id and goal in group)
		{
			SetAvailableMapGoals( TEAM.AXIS, false, goal );
			Util.MapDebugPrint("DisableAxis: disabling " + goal, true);
		}
	},
};
