//========================================================================================== // // Quotidian (Beta 2) - quotidian_b2.gm // // Who When What //------------------------------------------------------------------------------------------ // Mateos December 2016 Improved Axis defence // palota 3rd June 2012 Removed paththrough for breakable // palota 16th October 2011 Fixed PLANT_Road_Barrier // palota 10th August 2010 Initial Script // //========================================================================================== // /* * TODO: * - OnMapLoad: Better defence of Alley Door, Flag and Road Barrier... * Don't let them go through, so no need to defend the whole map on start! * - Land mine on the snow in the way in front of the flag for Axis. * - OnMapLoad Allies: Seriously, Arty/Smokebomb goals at the very end?! * - Disable Defences BUILD goals if the related Truck is already destroyed... PLANT too. * - PLANT positions & Cover spots. * - Add DEFEND spots for both Depot Gates... * - Merge LeaveTug1 and LeaveTug2 (add an extra parameter to indicate which tug). * - Handle the sneaky door way near the South Fuel Truck... And Sewers for the North one... * - Landmines (check current locations)! Perhaps mortar, not sure about arty... * - Handle fixed MG near the CP. * - Add ways inside defences if they're built but an Allied engi is inside planting. * - Waypoint the balcony on the building between the Trucks and the West Gate. * - Add MobileMG42. * - Train ladder behind South Truck: add a consistent way to get down the railway. * - Handle the Axis door at the West Gate (disappears once the Gate is destroyed). * - PLANT_South_Fueltruck reachability issues. * * NB: Sewers & North Depot Gate can be defended all together. */ global Map = { Debug = 0, // Please set to zero before distributing your script Movers = { "MOVER_tug_1", "MOVER_tug_2" }, Tug1Pos = 1, Tug2Pos = 3, cp = 0, flag = 1, southTruckDestroyed = false, isNorthDepotGateDestroyed = false, isSouthDepotGateDestroyed = false, UseTug = function(_this) { _this.AddAimRequest(Priority.High, "facing", _this.Facing); _this.Bot.MoveTowards(_this.Pos); sleep(0.3); _this.Bot.PressButton(BTN.USE); sleep(1); }, LeaveTug1 = function( _this, from, to ) { if ( Map.Tug1Pos == from ) { dowhile ( Map.Tug1Pos == from ) { Map.UseTug( _this ); } _this.ReleaseAimRequest(); } if ( Map.Tug1Pos != to ) { return false; } sleep( 1 ); return true; }, LeaveTug2 = function( _this, from, to ) { if ( Map.Tug2Pos == from ) { dowhile( Map.Tug2Pos == from ) { Map.UseTug( _this ); } _this.ReleaseAimRequest(); } if ( Map.Tug2Pos != to ) { return false; } sleep( 1 ); return true; }, RideMovers = { tug1_north = { movergoal = "MOVER_tug_1", rideposition = Vector3(-16,160,28), startwp = "tug1_north", exitwp = "tug1_center_north_out", board = function(_this) { if (Map.Tug1Pos != 1){ _this.Finished(); } return true; }, leave = function(_this) { return Map.LeaveTug1(_this,1,2); }, }, tug1_center_north = { movergoal = "MOVER_tug_1", rideposition = Vector3(-2,-90,28), startwp = "tug1_center_north", exitwp = "tug1_north_out", board = function(_this) { if (Map.Tug1Pos != 2){ _this.Finished(); } return true; }, leave = function(_this) { return Map.LeaveTug1(_this,2,1); }, }, tug1_center_south = { movergoal = "MOVER_tug_1", rideposition = Vector3(-25,160,28), startwp = "tug1_center_south", exitwp = "tug1_south_out", board = function(_this) { if (Map.Tug1Pos != 2){ _this.Finished(); } return true; }, leave = function(_this) { return Map.LeaveTug1(_this,2,3); }, }, tug1_south = { movergoal = "MOVER_tug_1", rideposition = Vector3(-22,-100,28), startwp = "tug1_south", exitwp = "tug1_center_south_out", board = function(_this) { if (Map.Tug1Pos != 3){ _this.Finished(); } return true; }, leave = function(_this) { return Map.LeaveTug1(_this,3,2); }, }, tug2_north = { movergoal = "MOVER_tug_2", rideposition = Vector3(10,70,28), startwp = "tug2_north", exitwp = "tug2_center_north_out", board = function(_this) { if (Map.Tug2Pos != 1){ _this.Finished(); } return true; }, leave = function(_this) { return Map.LeaveTug2(_this,1,2); }, }, tug2_center_north = { movergoal = "MOVER_tug_2", rideposition = Vector3(2,-120,28), startwp = "tug2_center_north", exitwp = "tug2_north_out", board = function(_this) { if (Map.Tug2Pos != 2){ _this.Finished(); } return true; }, leave = function(_this) { return Map.LeaveTug2(_this,2,1); }, }, tug2_center_south = { movergoal = "MOVER_tug_2", rideposition = Vector3(-27,130,28), startwp = "tug2_center_south", exitwp = "tug2_south_out", board = function(_this) { if (Map.Tug2Pos != 2){ _this.Finished(); } return true; }, leave = function(_this) { return Map.LeaveTug2(_this,2,3); }, }, tug2_south = { movergoal = "MOVER_tug_2", rideposition = Vector3(-25,-125,28), startwp = "tug2_south", exitwp = "tug2_center_south_out", board = function(_this) { if (Map.Tug2Pos != 3){ _this.Finished(); } return true; }, leave = function(_this) { return Map.LeaveTug2(_this,3,2); }, }, }, Tug1_North = { Name = "Tug1_North", TriggerOnEntity = GetGoal("MOVER_tug_1").GetEntity(), OnEnter = function(ent) { Map.Tug1Pos = 1; Util.MapDebugPrint( "Tug1_North", true ); }, OnExit = function(ent) { Map.Tug1Pos = -1; }, }, Tug1_Center = { Name = "Tug1_Center", TriggerOnEntity = GetGoal("MOVER_tug_1").GetEntity(), OnEnter = function(ent) { Map.Tug1Pos = 2; Util.MapDebugPrint( "Tug1_Center", true ); }, OnExit = function(ent) { Map.Tug1Pos = -1; }, }, Tug1_South = { Name = "Tug1_South", TriggerOnEntity = GetGoal("MOVER_tug_1").GetEntity(), OnEnter = function(ent) { Map.Tug1Pos = 3; Util.MapDebugPrint( "Tug1_South", true ); }, OnExit = function(ent) { Map.Tug1Pos = -1; }, }, Tug2_North = { Name = "Tug2_North", TriggerOnEntity = GetGoal("MOVER_tug_2").GetEntity(), OnEnter = function(ent) { Map.Tug2Pos = 1; Util.MapDebugPrint( "Tug2_North", true ); }, OnExit = function(ent) { Map.Tug2Pos = -1; }, }, Tug2_Center = { Name = "Tug2_Center", TriggerOnEntity = GetGoal("MOVER_tug_2").GetEntity(), OnEnter = function(ent) { Map.Tug2Pos = 2; Util.MapDebugPrint( "Tug2_Center", true ); }, OnExit = function(ent) { Map.Tug2Pos = -1; }, }, Tug2_South = { Name = "Tug2_South", TriggerOnEntity = GetGoal("MOVER_tug_2").GetEntity(), OnEnter = function(ent) { Map.Tug2Pos = 3; Util.MapDebugPrint( "Tug2_South", true ); }, OnExit = function(ent) { Map.Tug2Pos = -1; }, }, SetPriorities = function() { alliesAtCommandPost = ( Map.cp == 2 ); alliesAtStation = ( Map.flag == 3 && !alliesAtCommandPost ); start = ( Map.flag < 2 && !alliesAtCommandPost ); SetAvailableMapGoals(TEAM.AXIS, start, "DEFEND_flag.*"); SetAvailableMapGoals(TEAM.AXIS, !start, { "PLANTMINE.*", "BUILD.*", }); SetAvailableMapGoals(TEAM.AXIS, !start && !Map.southTruckDestroyed, "PLANTMINE_south.*"); SetAvailableMapGoals(TEAM.AXIS, !start && !alliesAtCommandPost, "DEFEND_cp.*"); SetAvailableMapGoals(TEAM.AXIS, alliesAtStation, { ".*MG42.*_bank.*", ".*railway.*", }); SetAvailableMapGoals(TEAM.AXIS, alliesAtCommandPost, "SNIPE_tower.*"); SetAvailableMapGoals(TEAM.AXIS, !alliesAtCommandPost, { "BUILD_Alley_Door", "PLANTMINE_AlleyDoor.*", }); SetAvailableMapGoals(TEAM.AXIS, alliesAtStation || alliesAtCommandPost, { "BUILD_Neutral_Command_Post", "PLANT_Neutral_Command_Post", }); SetAvailableMapGoals(TEAM.ALLIES, !alliesAtCommandPost, "PLANT_Alley_Door"); SetAvailableMapGoals(TEAM.ALLIES, !start, "MOBILEMG42.*"); // Train Station flag priority depending on the situation for Axis if ( Map.flag == 2 ) { // Above DEFEND and PLANTMINE SetGoalPriority( "CHECKPOINT_forward_flag", 0.80 ); } else { SetGoalPriority( "CHECKPOINT_forward_flag", 0.70 ); } // Increase Axis defence of the CP if pushed back if ( alliesAtStation || alliesAtCommandPost ) { SetGoalPriority("DEFEND_cp.*", 0.52, TEAM.AXIS); } else { SetGoalPriority("DEFEND_cp.*", 0.50, TEAM.AXIS); } if ( !start && Map.isNorthDepotGateDestroyed ) { SetGoalPriority("DEFEND_n_truck.*", 0.53, TEAM.AXIS); } if ( !start && Map.isSouthDepotGateDestroyed ) { SetGoalPriority("DEFEND_s_truck.*", 0.53, TEAM.AXIS); } }, SetSpawn1 = function( bot ) { // 1-train station, 2-allies, 3-axis, 4-command post if ( bot.GetTeam() == TEAM.ALLIES ) { if ( Map.cp == 2 ) { bot.ChangeSpawnPoint(4); } else if ( Map.flag == 2 ) { bot.ChangeSpawnPoint(1); } else { bot.ChangeSpawnPoint(0); } } }, SetSpawn = function() { Map.SetPriorities(); foreach( bot in BotTable ) { Map.SetSpawn1(bot); } }, forward_flag_Axis_Captured = function( trigger ) { Map.flag = 1; Map.SetSpawn(); Map.SetPriorities(); Util.MapDebugPrint("forward_flag_Axis_Captured"); }, forward_flag_Allies_Captured = function( trigger ) { Map.flag = 2; Map.SetSpawn(); Map.SetPriorities(); Util.MapDebugPrint("forward_flag_Allies_Captured"); }, Command_Post_Axis = function( trigger ) { Map.cp = 1; Map.SetSpawn(); Util.MapDebugPrint("Command_Post_Axis"); }, Command_Post_Allies = function( trigger ) { Map.cp = 2; Map.SetSpawn(); Util.MapDebugPrint("Command_Post_Allies"); }, Command_Post_Destroyed = function( trigger ) { Map.cp = 0; Map.SetSpawn(); Util.MapDebugPrint("Command_Post_Destroyed"); }, Road_Barrier_Destroyed = function( trigger ) { Map.flag = 3; Map.SetPriorities(); Util.SetMaxUsersInProgress(2, "BUILD_Neutral_Command_Post"); Util.EnableGoal("ROUTE_barrier"); Util.MapDebugPrint("Road_Barrier_Destroyed"); }, Alley_Door_Built = function( trigger ) { Util.DisableGoal("ROUTE_alley_door"); Util.MapDebugPrint("Alley_Door_Built"); }, Alley_Door_Destroyed = function( trigger ) { Util.EnableGoal("ROUTE_alley_door"); Util.MapDebugPrint("Alley_Door_Destroyed"); }, Sewer_Grate_Destroyed = function( trigger ) { Util.EnableGoal("ROUTE_sewer"); Util.MapDebugPrint("Sewer_Grate_Destroyed"); }, North_Depot_Gate_Destroyed = function( trigger ) { Map.isNorthDepotGateDestroyed = true; Map.SetPriorities(); Util.EnableGoal("ROUTE_north_depot_gate"); Util.MapDebugPrint("North_Depot_Gate_Destroyed"); }, West_Depot_Gate_Destroyed = function( trigger ) { Map.isSouthDepotGateDestroyed = true; Map.SetPriorities(); Util.EnableGoal("ROUTE_west_depot_gate"); Util.MapDebugPrint("West_Depot_Gate_Destroyed"); }, North_Defences_Built = function( trigger ) { SetAvailableMapGoals(TEAM.ALLIES, false, "PLANT_North_Fueltruck"); // TODO: Check availability Util.MapDebugPrint("North_Defences_Built"); }, North_Defences_Destroyed = function( trigger ) { SetAvailableMapGoals(TEAM.ALLIES, true, "PLANT_North_Fueltruck"); // TODO: Check availability Util.MapDebugPrint("North_Defences_Destroyed"); }, South_Defences_Built = function( trigger ) { SetAvailableMapGoals(TEAM.ALLIES, false, "PLANT_South_Fueltruck"); // TODO: Check availability Util.MapDebugPrint("South_Defences_Built"); }, South_Defences_Destroyed = function( trigger ) { SetGoalPriority("DEFEND_railway.*", 0.5, TEAM.AXIS); SetAvailableMapGoals(TEAM.ALLIES, true, "PLANT_South_Fueltruck"); // TODO: Check availability Util.MapDebugPrint("South_Defences_Destroyed"); }, North_Fueltruck_Destroyed = function( trigger ) { Util.DisableGoal(".*n_truck.*"); Util.DisableGoal(".*_North_Truck_Defences"); Util.MapDebugPrint("North_Fueltruck_Destroyed"); }, South_Fueltruck_Destroyed = function( trigger ) { Map.southTruckDestroyed = true; Map.SetPriorities(); Util.DisableGoal(".*s_truck.*"); Util.DisableGoal(".*South_Truck_Defences"); Util.MapDebugPrint("South_Fueltruck_Destroyed"); }, TwoMinute = function( trigger ) { if ( GetGameTimeLeft() > 0 ) { SetGoalPriority("PLANT_.*_Fueltruck", 0.91); SetGoalPriority("PLANT_Neutral_Command_Post", 0.69); Util.MapDebugPrint( "TwoMinute" ); } }, }; global OnMapLoad = function() { OnTrigger("Axis have reclaimed the Trainstation", Map.forward_flag_Axis_Captured); OnTrigger("Allies have captured the Trainstation!", Map.forward_flag_Allies_Captured); OnTrigger("Axis team has built the Alley Door!", Map.Alley_Door_Built); OnTrigger("Allied team has destroyed the Alley Door!", Map.Alley_Door_Destroyed); OnTrigger("Axis Command Post constructed. Charge speed increased! Spawnpoint gaine"/*d!*/, Map.Command_Post_Axis); OnTrigger("Allied Command Post constructed. Charge speed increased! Spawnpoint gai"/*ned!*/, Map.Command_Post_Allies); OnTrigger("Axis team has destroyed the Allied Command Post! Charge speed restored!"/* Spawnpoint lost!*/, Map.Command_Post_Destroyed); OnTrigger("Allied team has destroyed the Axis Command Post! Charge speed restored!"/* Spawnpoint lost!*/, Map.Command_Post_Destroyed); OnTrigger("Allies have destroyed the Road Barrier!", Map.Road_Barrier_Destroyed); OnTrigger("Allies have breached the Sewer Grate!", Map.Sewer_Grate_Destroyed); OnTrigger("Allies have destroyed the North Depot Gates!", Map.North_Depot_Gate_Destroyed); OnTrigger("Allies have destroyed the West Depot Gates!", Map.West_Depot_Gate_Destroyed); OnTrigger("Axis team has built the North Truck Defences", Map.North_Defences_Built); OnTrigger("Allied team has destroyed the North Truck Defences!", Map.North_Defences_Destroyed); OnTrigger("Axis team has built the South Truck Defences!", Map.South_Defences_Built); OnTrigger("Allied team has destroyed the South Truck Defences!", Map.South_Defences_Destroyed); OnTrigger("Allies have destroyed the North Fueltruck!", Map.North_Fueltruck_Destroyed); OnTrigger("Allies have destroyed the South Fueltruck!", Map.South_Fueltruck_Destroyed); OnTrigger("two minute warning.", Map.TwoMinute); // Train tugs triggers OnTriggerRegion(AABB(-466,4003,-202,-366,4023,-102),Map.Tug1_North); OnTriggerRegion(AABB(-52,-547,-202,52,-527,-102),Map.Tug1_Center); OnTriggerRegion(AABB(5604,-7900,-202,5624,-7800,-102),Map.Tug1_South); OnTriggerRegion(AABB(621,4017,-202,721,4037,-102),Map.Tug2_North); OnTriggerRegion(AABB(204,-533,-202,304,-513,-102),Map.Tug2_Center); OnTriggerRegion(AABB(3534,-7648,-202,3554,-7548,-102),Map.Tug2_South); Util.DisableGoal(".*_Tug_.*"); SetAvailableMapGoals(TEAM.AXIS, false, { "ATTACK.*", "AIRSTRIKE.*", "SMOKE.*", }); SetAvailableMapGoals(TEAM.ALLIES, false, { "DEFEND.*", "SNIPE.*", "PLANTMINE.*", }); Util.DisableGoal(".*MG42.*"); Util.DisableGoal("ROUTE_barrier"); Util.DisableGoal("ROUTE_alley_door"); Util.DisableGoal("ROUTE_sewer"); Util.DisableGoal("ROUTE_north_depot_gate"); Util.DisableGoal("ROUTE_west_depot_gate"); SetGoalPriority("CHECKPOINT_forward_flag", 0.85, TEAM.ALLIES); SetGoalPriority("PLANT_Alley_Door", 0.86, TEAM.ALLIES); SetGoalPriority("PLANT_Road_Barrier", 0.89, TEAM.ALLIES); SetGoalPriority("PLANT_.*Truck_Defences", 0.8, TEAM.ALLIES, CLASS.ENGINEER); SetGoalPriority("BUILD_Alley_Door", 0.85, TEAM.AXIS); SetGoalPriority("DEFEND_flag10", 0.60, TEAM.AXIS); SetGoalPriority("DEFEND_flag[8,9]", 0.60, TEAM.AXIS); SetGoalPriority("DEFEND_flag[1-7]", 0.59, TEAM.AXIS); SetGoalPriority("DEFEND_railway.*", 0.51, TEAM.AXIS); SetGoalPriority("DEFEND_n_truck8", 0.50, TEAM.AXIS); // Goal with weapon restrictions, its priority was raised to 0.7 SetGoalPriority("MOUNT.*", 0.50, TEAM.AXIS, CLASS.COVERTOPS); SetGoalPriority("PLANT_Neutral_Command_Post", 0.79, TEAM.AXIS, CLASS.ENGINEER); Map.SetPriorities(); Util.SetMaxUsersInProgress(1, ".*MG42.*"); Util.SetMaxUsersInProgress(1, ".*_Command_Post"); Util.SetMaxUsersInProgress(1, "BUILD_Alley_Door"); Util.SetMaxUsersInProgress(1, "DEFEND_.*"); SetMapGoalProperties("DEFEND_.*", {mincamptime=70, maxcamptime=300} ); SetMapGoalProperties("MOUNTMG42.*", {mincamptime=50, maxcamptime=300} ); SetMapGoalProperties("SNIPE_.*", {mincamptime=90, maxcamptime=300} ); SetMapGoalProperties("MOBILEMG42_.*", {MinCampTime=60, MaxCampTime=300} ); Util.SetGoalPosition(-1536, 5301, 102, "PLANT_Road_Barrier"); // Entity bounds were ok in quotidian_b1, but are broken in quotidian_b2 Util.MapDebugPrint( "Omni-bot 0.8x map script for Quotidian (Beta 2) by palota" ); }; global OnBotJoin = function( bot ) { bot.MaxViewDistance = 3000; bot.TargetBreakableDist = 100.0; Map.SetSpawn1( bot ); // Cars foreach ( ent in { 393, 398, 400, 401 } ) { bot.IgnoreTarget( ent, 99999 ); } }; global InitializeRoutes = function() { MapRoutes = { CHECKPOINT_forward_flag = { ROUTE_allies_spawn = { ROUTE_allies1 = {}, ROUTE_allies2 = {}, ROUTE_allies3 = {}, ROUTE_allies4 = {}, ROUTE_allies5 = {}, ROUTE_allies6 = {}, }, ROUTE_cp_spawn = { ROUTE_axis_north = { Weight = 2 }, ROUTE_barrier = {}, ROUTE_train_west = {}, ROUTE_train_east = {}, }, }, BUILD_Neutral_Command_Post = { ROUTE_allies_spawn = { ROUTE_train_west = {}, ROUTE_train_east = {}, ROUTE_alley_door = { Weight=4 }, } }, PLANT_North_Fueltruck = { ROUTE_flag_spawn = { ROUTE_train_west = {}, ROUTE_train_east = {}, ROUTE_alley_door = { Weight=2 }, ROUTE_barrier = { Weight=3, ROUTE_mg = { ROUTE_cp_back = {} }, ROUTE_mg2 = {}, }, }, ROUTE_cp_spawn = { ROUTE_sewer = { Weight=2 }, ROUTE_north_depot_gate = {}, ROUTE_west_depot_gate = {}, }, }, PLANT_South_Fueltruck = { ROUTE_cp_spawn = { ROUTE_north_depot_gate = {}, ROUTE_center = { ROUTE_south_ladder = {}, ROUTE_west_depot_gate = {}, }, ROUTE_south_west = { ROUTE_south_ladder = {}, ROUTE_west_depot_gate = {}, }, }, }, }; MapRoutes.PLANT_North_Truck_Defences = MapRoutes.PLANT_North_Fueltruck; MapRoutes.ATTACK_n_truck1 = MapRoutes.PLANT_North_Fueltruck; MapRoutes.ATTACK_n_truck2 = MapRoutes.ATTACK_n_truck1; MapRoutes.MOBILEMG42_n_truck = MapRoutes.ATTACK_n_truck1; MapRoutes.AIRSTRIKE_n_truck = MapRoutes.ATTACK_n_truck1; MapRoutes.PLANT_South_Truck_Defences = MapRoutes.PLANT_South_Fueltruck; MapRoutes.ATTACK_s_truck1 = MapRoutes.PLANT_South_Fueltruck; MapRoutes.ATTACK_s_truck2 = MapRoutes.ATTACK_s_truck1; MapRoutes.MOBILEMG42_s_truck = MapRoutes.ATTACK_s_truck1; MapRoutes.AIRSTRIKE_s_truck = MapRoutes.ATTACK_s_truck1; MapRoutes.PLANT_South_Fueltruck.ROUTE_flag_spawn = MapRoutes.PLANT_North_Fueltruck.ROUTE_flag_spawn; Util.Routes(MapRoutes); };