//==========================================================================================
//  UJE_xmas_factory_b1
//	uje_xmas_factory.gm
//
//	Who          	        When		            What
//---------------------------------------------------------------------------------------------------------
//	^4[UJE]^3Niek	    01 December 2016	      Initial Script
//	^4[UJE]^3Captain	04 December 2016	      attack/defense/door switch/escort-mount tank/improvement
//	^4[UJE]^3Captain	25 December 2016	      Fix Barrier Side Wall/clean/improvement
//
//=========================================================================================================
//

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

    DoorStatus = 0,
	StairDoor = false,

	phase = 1,

	// phase 1, first spawn , get tank and escort it
	// phase 2, second spawn, escort tank
	// phase 3, third spawn, no need to escort tank anymore
	// phase 4, forward spawns..

	//The switches are used in reversed order
     Switches =
	{
	axis_door =
		{
		    Enabled = fase,
			WaypointName = "GateAxis",
			Priority = 0.0,
			Timeout = 10000,
			LimitBots = 1,
			LimitClass = Util.AllClasses,
			AimPosition = Vec3(4152.723, -1600.765, 698.733), 
			Wait = function()
			{
				if ( Map.DoorStatus )
				{
					sleep(2);
					return true;
				}
				return false;
			},

		},
	
		allies_door =
		{
		    Enabled = false,
			WaypointName = "GateAllies",
			Priority = 0.0,
			Timeout = 10000,
            LimitBots = 1, 
			LimitClass = Util.AllClasses,
			AimPosition = Vec3(4152.723, -1600.765, 698.733),
			Wait = function()
			{
				if ( Map.DoorStatus )
				{
					sleep(2);
					return true;
				}
				return false;
			},

		},

	},
	
	axis_radio_built = function( trigger )
	{
		if ( Map.phase < 2 )
		{		
		  SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Axis.*" );
		  SetAvailableMapGoals( TEAM.AXIS, true, "SWITCH_axis_door" );
		  sleep(0);
		  Wp.SetWaypointFlag("door", "closed", false);
		  Wp.SetWaypointFlag("exit", "closed", true);
		}
        
		//If CP Axis rebuilt by bot At the same time map pass phase 2
		//closed waypoint exit false at cp axis after phase 1, because all switch disable for allbots and door closed, bots is blocked at this location.
		if ( Map.phase > 1 )
		{
		  Wp.SetWaypointFlag("exit", "closed", false);
		}
		  SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Axis_Command_Post" );
		
		  Util.MapDebugPrint( "axis_radio_built" );
	},

	axis_radio_Destroyed = function( trigger )
	{
		if ( Map.phase < 2 )
		{
		  SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Axis_Command_Post" );
		}
       	  SetAvailableMapGoals( TEAM.AXIS, false, "SWITCH_axis_door" );
		  SetAvailableMapGoals( TEAM.ALLIES, false, {"PLANT_Axis.*","SWITCH.*"} );
		  sleep(0);
		  Wp.SetWaypointFlag("door", "closed", true);
		  Wp.SetWaypointFlag("exit", "closed", false);
		  Util.MapDebugPrint( "axis_radio_Destroyed" );
	},
	
	ramp_obj_Built = function( trigger )
	{

		  Util.MapDebugPrint( "ramp_obj_Built" );
	},

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

	tank_repaired = function( trigger )
	{
		if ( Map.phase < 4 )
		{
		  SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Santas_tank" );
		  SetAvailableMapGoals( TEAM.AXIS, true, {"MOUNT_Santas_tank","ESCORT_Santas_tank"} );
		
		  SetAvailableMapGoals( TEAM.ALLIES, true, "MOUNT_Santas_tank" );
		}
		
		  Util.MapDebugPrint( "tank_repaired" );
	},

	tank_damaged = function( trigger )
	{
		if ( Map.phase < 4 )
		{
		  SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Santas_tank" );
          SetAvailableMapGoals( TEAM.AXIS, false, {"MOUNT_Santas_tank","ESCORT_Santas_tank"} );
		
		  SetAvailableMapGoals( TEAM.ALLIES, false, "MOUNT_Santas_tank" );
		}

		  Util.MapDebugPrint( "tank_damaged" );
	},
	
	B_Spawn = function( trigger )
	{
		  Map.phase = 2;
		
		  SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Palace_gate_.*" );	
		  SetAvailableMapGoals( TEAM.ALLIES, false, {"DEFEND_Garden_.*","PLANT_Axis.*","SWITCH.*"} );
		
		  Util.MapDebugPrint( "B spawn" );
	},
	
	C_Spawn = function( trigger )
	{
	      Map.phase = 3;
			
	      Util.MapDebugPrint( "C spawn" );
	},
	
	allied_compost_built = function( trigger )
	{
	if ( Map.StairDoor == true )
	{
		  SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Stair_Well_Command.*" );
	}
		  SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Stair.*" );
		
		  SetAvailableMapGoals( TEAM.ALLIES, false, {"BUILD_Stair.*","PLANT_Stair_Well_Command.*"} );
		  
		  Util.MapDebugPrint( "allied_compost_built" );
	},
	
	allied_compost_Destroyed = function( trigger )
	{
    
	if ( Map.StairDoor == true )
	{
		  SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Stair.*" );
		  
		  SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Stair.*" );
		  SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Stair_Well_Command.*" );
	}
	else
	{
		  SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Stair.*" );
		  SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Stair_Well_Command.*" );
		
	}
		
		  Util.MapDebugPrint( "allied_compost_Destroyed" );
	},
	
	axis_compost_built = function( trigger )
	{
		
	if ( Map.StairDoor )
	{
		  SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Stair_Well_Command.*" );
	}
	else
	{
		  SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Stair_Well_Command.*" );	
	}
	      SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Stair.*" );
		  
	      SetAvailableMapGoals( TEAM.ALLIES, false, {"BUILD_Stair.*","PLANT_Stair_Well_Command.*"} );
		  
		  Util.MapDebugPrint( "axis_compost_build" );
	},

	axis_compost_Destroyed = function( trigger )
	{
	if ( Map.StairDoor )
	{
		  SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_Stair.*" );  
	}
	else
	{
		  SetAvailableMapGoals( TEAM.ALLIES, true, "BUILD_Stair.*" );
	}
	      SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Stair.*" );
		  SetAvailableMapGoals( TEAM.AXIS, false, "PLANT_Stair_Well_Command.*" );
		
		  SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Stair_Well_Command.*" );	
		
		  Util.MapDebugPrint( "axis_compost_Destroyed" );
	},
	
	well_grate_Destroyed = function( trigger )
	{
  
		  Util.MapDebugPrint( "well_grate_Destroyed" );
	},
	
	well_door_Destroyed = function( trigger )
	{
          SetAvailableMapGoals( TEAM.AXIS, true, "PLANT_Sewer_Grate" );
  
		  Util.MapDebugPrint( "well_door_Destroyed" );
	},

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

	main_door_Destroyed = function( trigger )
	{

	      SetAvailableMapGoals( TEAM.ALLIES, false, {"DEFEND_Factory_main_.*","DEFEND_Barrier_side_.*"} );
	      SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Barrier_side_.*" );
	      SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Key_.*" );
	  
	      SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_Factory_Main_.*" );
	
	      Util.MapDebugPrint( "main_door_Destroyed" );

	},

	ramp_obj_Destroyed = function( trigger )
	{
	      SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_North.*" );
		  
		  Util.MapDebugPrint( "ramp_obj_Destroyed" );
	},

	tower_wall_Destroyed = function( trigger )
	{
	
	      SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_Axis_Command_Post" );
		
		  Util.MapDebugPrint( "tower_wall_Destroyed" );
	},
	
	steps_obj_Destroyed = function( trigger )
	{
	      SetAvailableMapGoals( TEAM.AXIS, true, "BUILD_South.*" );
		  
		  Util.MapDebugPrint( "steps_obj_Destroyed" );
	},

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

	stair_door_Destroyed = function( trigger )
	{
	      Map.StairDoor = true;
		  SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Stair_well_.*" );
	      SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Barrier_side_.*" );
		 
		  SetAvailableMapGoals( TEAM.AXIS, true, {"ATTACK_Factory_Main_.*","CHECKPOINT.*","PLANT_Stair_Well_Command.*","BUILD_Stair.*","PLANT_Closet.*","BUILD_South.*"} );
		  SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_Stair_Well_.*" );
		 
		  Map.phase = 4;
          Wp.SetWaypointFlag("grate", "closed", false);
		  Util.MapDebugPrint( "stair_door_Destroyed" );

	},
	
	trench_wall_Destroyed = function( trigger )
	{
	
	      SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Barrier_side_.*" );
          SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Key_.*" );
	
	      SetAvailableMapGoals( TEAM.AXIS, true, {"FLAG_gate_key","ATTACK_Key_.*"} );
	      SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_Factory_Main_.*" );
	
		  Util.MapDebugPrint( "trench_wall_Destroyed" );
	},
	
	Palace_gate_Destroyed = function( trigger )
	{
	     SetAvailableMapGoals( TEAM.ALLIES, true, {"BUILD_Stair.*","CHECKPOINT.*","DEFEND_Stair_well_.*","DEFEND_Well_house_.*","PLANTMINE_Key_.*"} );
         SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Palace_gate_.*" );
		 
	     SetAvailableMapGoals( TEAM.AXIS, true, {"PLANT_Sewer_Grate","PLANT_Sewer_House_Side_Entrance","PLANT_Stair_Well_Side_Entrance","ATTACK_Stair_Well_.*"} );
		 SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_Palace_gate_.*" );
	
	     Util.MapDebugPrint( "Palace_gate_Destroyed" );
	},
	
	garage_wall2_Destroyed = function( trigger )
	{
		 Util.MapDebugPrint( "garage_wall2_Destroyed " );
	},
	
 	Allies_Capture_Flag = function( trigger )
 	{
		 SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Well_house_.*" );
		 SetAvailableMapGoals( TEAM.ALLIES, true, "CHECKPOINT.*" );
		 
		 SetAvailableMapGoals( TEAM.AXIS, false, "CHECKPOINT.*" );
		 
 		 Util.MapDebugPrint( "Allies_Capture_Flag" );
 	},

 	Axis_Capture_Flag = function( trigger )
 	{
	     SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Well_house_.*" );
		 SetAvailableMapGoals( TEAM.ALLIES, false, "CHECKPOINT.*" );
		 
         SetAvailableMapGoals( TEAM.AXIS, true, "CHECKPOINT.*" );
		 
 		 Util.MapDebugPrint( "Axis_Capture_Flag" );
 	},
	 Axis_Flag = function( trigger )
 	{
         SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Well_house_.*" );
		 SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Factory_main_.*" );
		 
		 SetAvailableMapGoals( TEAM.AXIS, true, {"PLANT_Factory.*","BUILD_North.*","PLANT_Barrier.*"} );

		 Util.MapDebugPrint( "Axis_Flag" );
 	},
	
	Key_Stolen = function( trigger )
 	{
	  SetAvailableMapGoals( TEAM.ALLIES, false, {"DEFEND_Key_.*","PLANTMINE_Key_.*"} );
	  SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_DeliverKey_.*" );
	  
	  SetAvailableMapGoals( TEAM.AXIS, true, {"CAPPOINT_DeliverKey","ATTACK_Dagger_.*"} );
	  SetAvailableMapGoals( TEAM.AXIS, false, {"FLAG_gate_key","ATTACK_Key_.*"} );
		
		if ( Map.phase < 4 )
		{
			//kill tse allies
			//change spawn
			// half the allies should spawn at the cp
			foreach ( id and bot in BotTable )
			{
				if ( bot.GetTeam() == TEAM.ALLIES )
				{
					bot.ChangeSpawnPoint( 6 ); //last spawn
					bot.ExecCommand("kill");
				}
			}
		}

 		Util.MapDebugPrint( "Key_Stolen" );
 	},
	
	Key_Returned = function( trigger )
 	{
	    SetAvailableMapGoals( TEAM.ALLIES, true, {"DEFEND_Key_.*","PLANTMINE_Key_.*"} );
	    SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_DeliverKey_.*" );
	  
	    SetAvailableMapGoals( TEAM.AXIS, true, {"ATTACK_Key_.*","FLAG_gate_key"} );
	    SetAvailableMapGoals( TEAM.AXIS, false, {"CAPPOINT_DeliverKey","ATTACK_Dagger_.*"} );
	  
 		Util.MapDebugPrint( "Key_Returned" );
 	},

	Key_Captured = function( trigger )
 	{

	    SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_StolenDag_.*" );
	    SetAvailableMapGoals( TEAM.ALLIES, false, {"DEFEND_Key_.*","PLANTMINE_Key_.*"} );

        SetAvailableMapGoals( TEAM.AXIS, true, "FLAG_dagger" );
	    SetAvailableMapGoals( TEAM.AXIS, false, {"ATTACK_Key_.*","CAPPOINT_DeliverKey","FLAG_gate_key"} );
	  
 		Util.MapDebugPrint( "Key_Captured" );
 	},

	// Game lost for allies
	Dagger_Captured = function( trigger )
 	{
        Map.phase = 5;
 		Util.MapDebugPrint( "Dagger_Captured" );
 	},
	
	Dagger_Stolen = function( trigger )
 	{
	    SetAvailableMapGoals( TEAM.ALLIES, true, {"DEFEND_DeliverDagger_.*","DEFEND_DeliverKey_.*"} );
	    SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_StolenDag_.*" );
	 
	    SetAvailableMapGoals( TEAM.AXIS, true, "CAPPOINT_DeliverDagger" );
	  
 		Util.MapDebugPrint( "Dagger_Stolen" );
 	},
	
	Dagger_Returned  = function( trigger )
 	{
	    SetAvailableMapGoals( TEAM.ALLIES, false, {"DEFEND_DeliverDagger_.*","DEFEND_DeliverKey_.*"} );
	    SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_StolenDag_.*" );
	 
	    SetAvailableMapGoals( TEAM.AXIS, true, "FLAG_dagger" );
	    SetAvailableMapGoals( TEAM.AXIS, false, "CAPPOINT_DeliverDagger" );
	 
 		Util.MapDebugPrint( "Dagger_Returned" );
 	},
		
     tank_out_garage = function()
	{
		Util.MapDebugPrint("tank_out_garage");
	},
     tank_exit_garden = function()
	{
		Util.MapDebugPrint("tank_exit_garden");
	},
	    tank_at_end = function()
	{
		Util.MapDebugPrint("tank_at_end");
	},
    vehicle_at_location = function( trigger )
	{
		switch(Map.VehicleLocation)
		{
		case 1: 
			{
		SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_Side_Wall_.*" );
		SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_Garden_.*" );
		
		SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_Side_Wall_.*" );	
		SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_Garden_.*" );
		
        Map.tank_out_garage();
		  
			}
		case 2: 
		{	
		  SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_Garden_.*" );
		  SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_Palace_gate_.*" );
		  Util.DisableGoal("MOUNT_Santas_tank");
          Util.DisableGoal("BUILD_Santas_tank");
	
		 Map.tank_exit_garden();	
			}
		case 3: 
		{	
	         Util.DisableGoal("ESCORT_Santas_tank");
	         Util.DisableGoal("MOVER_tank");
			 Util.DisableGoal("MOUNT_Santas_tank");
             Util.DisableGoal("BUILD_Santas_tank");
	
		  Map.tank_at_end();	
			}
		}
		 Util.MapDebugPrint("vehicle at location " + Map.VehicleLocation, true);
	  },
	
	  Gate = function( trigger )
	  {
		vel = ToVector(trigger.Action);
		if ( vel[0] > 0 )
		{
			Map.DoorStatus = 0;

		if ( Map.phase < 2 )
		{
		    SetAvailableMapGoals( TEAM.AXIS, true, "SWITCH_axis_door" );
			
			SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_axis_door" );
            SetAvailableMapGoals( TEAM.ALLIES, false, "SWITCH_allies_door" );
		}
					
			print("gate closing");
		}
		else if ( vel[0] < 0 )
		{
			Map.DoorStatus = 1;
			
		if ( Map.phase < 2 )
		{
		    SetAvailableMapGoals( TEAM.AXIS, false, "SWITCH_axis_door" );
			
			SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_allies_door" );
			SetAvailableMapGoals( TEAM.ALLIES, false, "SWITCH_axis_door" );
        }
			
			print("gate opening");
		}

	},
};
global OnMapLoad = function()
{
	OnTrigger( "side_door_side_door1_goto", Map.Gate );
	OnTrigger( "*^4Axis Command Post constructed. Charge speed increased!^7", Map.axis_compost_built );
	OnTrigger( "*^4Allied Command Post constructed. Charge speed increased!^7", Map.allied_compost_built );
	OnTrigger( "*^4Axis team has destroyed the Allied Command Post!^7", Map.allied_compost_Destroyed );
	OnTrigger( "*^4Allied team has destroyed the Axis Command Post!^7", Map.axis_compost_Destroyed );
    OnTrigger( "*^4Axis have supplied power to the Side Door!", Map.axis_radio_built );
	OnTrigger( "*^4Allies have disabled the power to the Side Door!", Map.axis_radio_Destroyed );

	OnTrigger( "*^4The Tank has been repaired!^7", Map.tank_repaired );
	OnTrigger( "*^4The Tank has been damaged!^7", Map.tank_damaged );
	OnTrigger( "*^1Axis have captured the Palace Garden Courtyard!^7", Map.B_Spawn );
	OnTrigger( "*^4Axis have captured the Factory Spawn!^7", Map.C_Spawn );
	OnTrigger( "*^4Axis have constructed the South Assault Ramp!^7", Map.steps_obj_Built );
	OnTrigger( "*^4Allies have blown the South Assault Ramp!^7", Map.steps_obj_Destroyed );
	OnTrigger( "*^4Axis have breached a part of the Barrier Side Wall!^7", Map.trench_wall_Destroyed );

	OnTrigger( "*^4Axis have breached the Tower!^7", Map.tower_wall_Destroyed );
	OnTrigger( "*^4Axis have blown the Factory Main Doors!^7", Map.Palace_gate_Destroyed );

	OnTrigger( "*^4Axis have destroyed the Factory Main Entrance and captured Farm!^7", Map.main_door_Destroyed );
	OnTrigger( "*^4The Sewer Grate has been blown!^7", Map.well_grate_Destroyed );
	OnTrigger( "*^4Axis have breached the Tank Side Wall!^7" , Map.garage_wall_Destroyed );
	OnTrigger( "*^4Axis have crashed through the garage wall!", Map.garage_wall2_Destroyed );
	OnTrigger( "*^4Allies have blown the North Assault Ramp!", Map.ramp_obj_Destroyed );
	OnTrigger( "*^4Axis have constructed the North Assault Ramp!", Map.ramp_obj_Built );

	OnTrigger( "*^4Axis have destroyed the Closet Door!^7", Map.weak_closet_Destroyed );
	OnTrigger( "*^4Axis have destroyed the Sewer House Side Entrance!^7", Map.well_door_Destroyed );
    OnTrigger( "*^4Axis have destroyed the Stair Sewer Side Entrance!^7", Map.stair_door_Destroyed );
	
	OnTrigger( "*^4The Old Village is now permanently captured by Axis!^7", Map.Axis_Flag );
 	OnTrigger( "*^4Axis have secured the Old Village and if held for 7 seconds will be Axis permanently!^7", Map.Allies_Capture_Flag );
 	OnTrigger( "*^4Allies have captured the Old Village!^7", Map.Axis_Capture_Flag );

 	OnTrigger( "*^4Axis are attempting to unlock the Dagger's Gate!^7", Map.Key_Stolen );
 	OnTrigger( "*^4Allies have returned the Gate Key!^7", Map.Key_Returned );
	OnTrigger( "*^4The Dagger to assasinate Santa have been breached and are now defens", Map.Key_Captured );

 	OnTrigger( "*^4Axis have stolen the Dagger and are attempting to assasinate Santa!^", Map.Dagger_Stolen );
 	OnTrigger( "*^4Allies have returned the Dagger!^7", Map.Dagger_Returned );
 	OnTrigger( "*^4Santa has been assasinated !!^7", Map.Dagger_Captured );
	
	// *** VEHICLE TRIGGERS ***
	OnTriggerRegion(AABB(3069.305,-2397.244,641.125,3124.573,-2030.882,715.127), RegionTrigger.VehicleTrigger);
	OnTriggerRegion(AABB(538.142,-3394.928,493.222,589.281,-3040.034,573.873), RegionTrigger.VehicleTrigger);
	OnTriggerRegion(AABB(-1924.889,-1776.875,641.125,-1884.330,-1714.988,715.125), RegionTrigger.VehicleTrigger);
	OnTrigger( "tank at location", Map.vehicle_at_location );
	
    // *** CLEAR ALL GOALS FOR BOTH TEAMS ***
    Util.DisableGoal( ".*", true ); // All but routes
	
	//Allies goals activation
	SetAvailableMapGoals( TEAM.ALLIES, true, {
	 ".*CAB.*",
	 ".*CAB.*",
	 "DEFEND_Side_Wall_.*",

	});
	
	//Axis goals activation
	SetAvailableMapGoals( TEAM.AXIS, true, {
	 ".*CAB.*",
	 ".*CAB.*",
     "PLANT_weak_Tower_Wall",
	 "PLANT_damaged_Tank_Side_Wall",
	 "ATTACK_Side_Wall_.*",
	 "MOVER_tank",
	});
	
    //Offset Plant Fix
	Util.SetGoalOffset( 150, 0, 0, "PLANT_damaged_Tank_Side_Wall" );
	Util.SetGoalOffset( -150, 0, 0, "PLANT_Barrier_Side_Wall" );
	
    // Camp times
	SetMapGoalProperties( "ATTACK_.*", {MinCampTime=20, MaxCampTime=45} );
	SetMapGoalProperties( "DEFEND_.*", {MinCampTime=20, MaxCampTime=45} );
	
	//SetMaxUsersInProgress
	Util.SetMaxUsersInProgress( 1, "DEFEND.*" );
	Util.SetMaxUsersInProgress( 1, "ATTACK.*" );
	Util.SetMaxUsersInProgress( 1, "PLANT.*" );
	Util.SetMaxUsersInProgress( 1, "BUILD.*" );
	Util.SetMaxUsersInProgress( 1, "MOUNT.*" );
	Util.SetMaxUsersInProgress( 1, "ESCORT.*" );
	Util.SetMaxUsersInProgress( 1, "SWITCH.*" );
	Util.SetMaxUsersInProgress( 2, "CHECKPOINT.*" );
	Util.SetMaxUsersInProgress( 2, "FLAG_.*" );
	Util.SetMaxUsersInProgress( 3, "CAPPOINT_.*" );
	
	//SetGoalPriority
	SetGoalPriority( "MOUNT_Santas_tank", 0.0, 0, CLASS.MEDIC );
	SetGoalPriority( "PLANT_weak_Tower_Wall", 1.0, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "BUILD_Axis_Command_Post", 1.0, TEAM.AXIS, CLASS.ENGINEER );
	SetGoalPriority( "PLANT_damaged_Tank_Side_Wall", 0.8, TEAM.AXIS, CLASS.ENGINEER );
	
	Wp.SetWaypointFlag("grate", "closed", true);
	Wp.SetWaypointFlag("exit", "closed", false);
	Wp.SetWaypointFlag("door", "closed", true);
	
	//SwitchData
	Util.UpdateSwitchData();
   };
   global OnBotJoin = function( bot )
    {
	bot.TargetBreakableDist = 300.0;
	};
global InitializeRoutes = function()
{
	MapRoutes =
	{
		PLANT_damaged_Tank_Side_Wall =
		{
		},
		PLANT_Sewer_Grate =
		{
		},
		PLANT_Sewer_House_Side_Entrance =
		{
		},
		PLANT_Factory_Main_Entrance =
		{
		},
		BUILD_Santas_tank =
		{
		},
		CHECKPOINT_forward_spawn =
		{
		},
		FLAG_gate_key =
		{
		},
		FLAG_dagger =
		{
		},
		PLANT_weak_Tower_Wall =
		{
		},
		BUILD_Axis_Command_Post =
		{
		},
		PLANT_Axis_Command_Post =
		{
		},
		PLANT_Closet_Door =
		{
		},
		PLANT_Stair_Well_Side_Entrance =
		{
		},
		PLANT_Barrier_Side_Wall =
		{
		},
		BUILD_North_Assault_Ramp =
		{
		},
		PLANT_North_Assault_Ramp =
		{
		},
		BUILD_South_Assault_Ramp =
		{
		},
		PLANT_South_Assault_Ramp =
		{
		},
		BUILD_Stair_Well_Command_Post =
		{
		},
		PLANT_Stair_Well_Command_Post =
		{
		},
	};
	Util.Routes(MapRoutes);
	
	Util.MapDebugPrint( "Omni_bot map script for " + GetMapName() + " executed." );

};