//========================================================================================== // // praetoria_m2.gm // // Who When What //------------------------------------------------------------------------------------------ // palota 13 March 2010 Initial script // crapshoot,d00d 2 July 2010 updated for 0.8 // palota 7 August 2010 command post priority, camping time, spawn radius // palota 21 November 2010 coverspots, tank aim mode, mg42 facing, mortar, mines, grenade, new routes, more snipe and camp goals //========================================================================================== // global Map = { Debug = 0, tankDamaged = false, phase = 0, alliesCloseDepot = false, sideEntranceDestroyed = false, sideWallDestroyed = false, depotDoor = "closed", Mover_Tank = "MOVER_tank1", Movers = { "MOVER_tank1" }, Depot_hatch_Destroyed = function() { Util.EnableGoal("ROUTE_depot_up"); Util.MapDebugPrint("Depot_hatch_Destroyed", true); }, Invert_Gate_Depot = function() { Map.alliesCloseDepot = !Map.alliesCloseDepot; mg = GetGoal("SWITCH_gate_depot"); if (mg.IsAvailable(TEAM.ALLIES)) { Util.LimitToTeam(TEAM.AXIS, "SWITCH_gate_depot"); Util.MapDebugPrint("Axis will close door", true); } else { Util.LimitToTeam(TEAM.ALLIES, "SWITCH_gate_depot"); Util.MapDebugPrint("Allies will close door", true); } }, gate_depot_trigger = function( trigger ) { Util.DisableGoal("SWITCH_gate_depot"); vel = ToVector(trigger.Action); if (vel.z < 0) { Map.depotDoor = "closed"; Util.MapDebugPrint("Door closed", true); } else { Map.depotDoor = "open"; Util.MapDebugPrint("Door opened", true); } if ((vel.z < 0 && !Map.alliesCloseDepot) || (vel.z >= 0 && Map.alliesCloseDepot)) { Util.LimitToTeam(TEAM.ALLIES, "SWITCH_gate_depot"); } else { Util.LimitToTeam(TEAM.AXIS, "SWITCH_gate_depot"); } }, Repair_Activated = function( trigger ) { if (Map.phase < 20) { vel = ToVector(trigger.Action); if ( vel.z <= 0 ) { Util.LimitToTeam(TEAM.AXIS, "SWITCH_repair_activate"); Util.MapDebugPrint( "Repair_Activated", true ); } else { Util.LimitToTeam(TEAM.ALLIES, "SWITCH_repair_activate"); Util.MapDebugPrint( "Repair_Deactivated", true ); } } }, Tank_Bunker = function( trigger ) { Map.Set_Class(CLASS.ENGINEER); SetAvailableMapGoals( TEAM.AXIS, true, "MOBILEMORTAR_axis1" ); SetAvailableMapGoals( TEAM.ALLIES, true, "ARTILLERY_.*" ); ETUtil.SetAimModeForMount("MOUNT_Tank", "velocity"); Util.MapDebugPrint( "Tank_Bunker", true ); }, Gun_Spotted = function( trigger ) { SetAvailableMapGoals( TEAM.ALLIES, false, { Map.Mover_Tank, "ESCORT_tank", }); if (RandInt(0,1)==0){ index = 0; } else { index = 2; } ETUtil.SetStartIndex( "BUILD_Hell_on_Wheels", index); Util.MapDebugPrint( "Gun_Spotted" ); }, Tank_Burning = function( trigger ) { SetAvailableMapGoals( TEAM.ALLIES, true, { Map.Mover_Tank, "ESCORT_tank", }); Util.OnTriggerPosition( Map.Mover_Tank, "before_gate", 180.0, Map.Tank_At_Gate ); Util.MapDebugPrint( "Tank_Burning" ); }, Tank_At_Gate = function( trigger ) { Util.OnTriggerPosition( Map.Mover_Tank, "depot", 190.0, Map.Tank_In_Depot ); SetGoalPriority( "SWITCH_gate_depot", 0.9 ); SetAvailableMapGoals( TEAM.ALLIES, true, "TRIPMINE_repair_l.*" ); SetAvailableMapGoals( TEAM.AXIS, true, "TRIPMINE_repair_x.*" ); Util.MapDebugPrint( "Tank_At_Gate" ); }, Tank_In_Depot = function( trigger ) { Map.phase = 10; Map.Invert_Gate_Depot(); SetAvailableMapGoals( TEAM.ALLIES, false, { Map.Mover_Tank, "ESCORT_tank", }); SetGoalPriority( "SWITCH_gate_depot", 0.51 ); SetAvailableMapGoals( TEAM.ALLIES, true, { "SWITCH_repair_lock", "PLANT_Side_Wall", }); Util.EnableGoal("DEFEND_depot.*"); Util.MapDebugPrint( "Tank_In_Depot" ); }, Repair_Locked = function( trigger ) { SetAvailableMapGoals( TEAM.ALLIES, false, "SWITCH_repair_lock" ); Util.MapDebugPrint( "Repair_Locked" ); }, Repair_Start = function( trigger ) { SetGoalPriority(".*Command_Post", 0.95, TEAM.AXIS); SetAvailableMapGoals( TEAM.ALLIES, true, "SWITCH_repair_activate" ); SetAvailableMapGoals( TEAM.AXIS, false, "MOBILEMORTAR_axis1" ); Util.MapDebugPrint( "Repair_Start" ); }, Set_Class = function(class) { foreach ( bot in BotTable ) { if ( bot.GetTeam() == TEAM.ALLIES && bot.GetClass() == class ){ return; } } if (Server.MinClassCount[TEAM.ALLIES][class] == 0) { Server.MinClassCount[TEAM.ALLIES][class] = 1; } foreach ( bot in BotTable ) { if ( bot.GetTeam() == TEAM.ALLIES) { Util.MapDebugPrint("Change class " + bot.GetClass() + " to " + class, true); bot.ChangeClass(class); return; } } }, Class_Need = function(class) { SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_class_need" ); SetMapGoalProperties( "DEFEND_class_need", {mincamptime=12, maxcamptime=40} ); SetGoalPriority( "DEFEND_class_need", 0.0, TEAM.ALLIES ); Map.Set_Class(class); SetGoalPriority( "DEFEND_class_need", 2.0, TEAM.ALLIES, class, true ); //this hack is necessary in Omnibot 0.8 SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_depot.*" ); if(class==CLASS.COVERTOPS){ SetAvailableMapGoals( TEAM.ALLIES, false, "SNIPE_allied.*" ); } sleep(2); SetAvailableMapGoals( TEAM.ALLIES, true, "DEFEND_depot.*" ); if(class==CLASS.COVERTOPS){ Map.Set_Snipe(); } }, COVERTOPS_Need = function( trigger ) { Map.Class_Need(CLASS.COVERTOPS); Util.MapDebugPrint( "COVERTOPS_Need" ); }, FIELDOPS_Need = function( trigger ) { Map.Class_Need(CLASS.FIELDOPS); Util.MapDebugPrint( "FIELDOPS_Need" ); }, MEDIC_Need = function( trigger ) { Map.Class_Need(CLASS.MEDIC); Util.MapDebugPrint( "MEDIC_Need" ); }, SOLDIER_Need = function( trigger ) { Map.Class_Need(CLASS.SOLDIER); Util.MapDebugPrint( "SOLDIER_Need"); }, ENGINEER_Need = function( trigger ) { Map.Class_Need(CLASS.ENGINEER); Util.MapDebugPrint( "ENGINEER_Need" ); }, Tank_Installed = function( trigger ) { SetAvailableMapGoals( TEAM.ALLIES, false, "DEFEND_class_need" ); Util.LimitToTeam( TEAM.ALLIES, "SWITCH_repair_activate"); Util.MapDebugPrint( "Tank_Installed" ); }, Check_Switch = function() { if(Map.phase==20) { SetAvailableMapGoals( TEAM.ALLIES, !Map.tankDamaged, "SWITCH_repair_lock" ); } }, Tank_Upgraded = function( trigger ) { Map.phase = 20; Map.Invert_Gate_Depot(); if ( Map.depotDoor == "closed" ) { Util.LimitToTeam(TEAM.ALLIES, "SWITCH_gate_depot"); Map.alliesCloseDepot = false; } Util.DisableGoal("SWITCH_repair_activate"); Util.DisableGoal("DEFEND_class_need"); Map.Check_Switch(); Util.MapDebugPrint( "Tank_Upgraded", true ); }, Attack_Gun = function(enable) { SetAvailableMapGoals( TEAM.ALLIES, enable, { "CALLARTILLERY.*", "ATTACK_gun.*", }); }, Tank_Unlocked = function( trigger ) { Map.phase = 25; SetAvailableMapGoals( TEAM.ALLIES, false, "SWITCH_repair_lock" ); SetAvailableMapGoals( TEAM.ALLIES, true, { Map.Mover_Tank, "ESCORT_tank", "MOUNT_Tank", }); SetAvailableMapGoals( TEAM.AXIS, true, "PLANTMINE_east.*" ); SetAvailableMapGoals( TEAM.ALLIES, false, "TRIPMINE_repair_l.*" ); SetAvailableMapGoals( TEAM.AXIS, false, "TRIPMINE_repair_x.*" ); Map.Attack_Gun(true); Util.DisableGoal("DEFEND_depot.*"); Util.OnTriggerPosition( Map.Mover_Tank, "before_gate", 180.0, Map.Tank_At_Gate2 ); SetGoalPriority( "SWITCH_gate_depot", 0.8 ); SetGoalPriority(".*Command_Post", 0.85, TEAM.AXIS); Util.MapDebugPrint( "Tank_Unlocked" ); }, Tank_At_Gate2 = function( trigger ) { Map.phase = 30; Map.Set_Mg(); SetGoalPriority( "SWITCH_gate_depot", 0.1 ); SetAvailableMapGoals( TEAM.AXIS, true, "ESCORT_tank" ); SetAvailableMapGoals( TEAM.ALLIES, true, "MOBILEMORTAR_allied1" ); Util.MapDebugPrint( "Tank_At_Gate2" ); }, Set_Snipe = function() { SetAvailableMapGoals( TEAM.AXIS, !Map.commandPostAllied, "SNIPE_axis_r.*" ); SetAvailableMapGoals( TEAM.AXIS, Map.commandPostAllied, "SNIPE_axis_l.*" ); SetAvailableMapGoals( TEAM.ALLIES, !Map.commandPostAllied, "SNIPE_allied_l.*" ); SetAvailableMapGoals( TEAM.ALLIES, Map.commandPostAllied, "SNIPE_allied_r.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, "SNIPE_allied1" ); }, Set_Mg = function() { b = Map.commandPostAllied || Map.phase>=80; SetAvailableMapGoals( TEAM.AXIS, b, ".*MG42_mg_south" ); SetAvailableMapGoals( TEAM.ALLIES, b, "GRENADE_mg_south" ); b = !Map.commandPostAllied || Map.phase>=30 && Map.phase<50; SetAvailableMapGoals( TEAM.AXIS, b, ".*MG42_mg_north" ); SetAvailableMapGoals( TEAM.ALLIES, b, "GRENADE_mg_north" ); }, Set_Command_Post = function( built ) { Map.commandPostAllied = built; Map.Set_Snipe(); Map.Set_Mg(); }, Allied_Command_Post_Built = function( trigger ) { Map.Set_Command_Post(true); Util.MapDebugPrint( "Allied_Command_Post_Built" ); }, Allied_Command_Post_Destroyed = function( trigger ) { Map.Set_Command_Post(false); Util.MapDebugPrint( "Allied_Command_Post_Destroyed" ); }, Fire_Gun = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, true, "SWITCH_gun"); Util.SetMaxUsersInProgress( 3, "SWITCH_gun"); SetGoalPriority("SWITCH_gun", 1.1); Map.Attack_Gun(true); Util.MapDebugPrint( "Fire_Gun" ); }, Tank_Past_Gun = function( trigger ) { Map.phase = 50; Map.Set_Mg(); SetAvailableMapGoals( TEAM.AXIS, false, { "ESCORT_tank", "SWITCH_gun", }); Map.Attack_Gun(false); SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_yard.*" ); SetAvailableMapGoals( TEAM.ALLIES, false, "MOBILEMORTAR_allied1" ); SetGoalPriority(".*Command_Post", 0.7, TEAM.AXIS); Util.MapDebugPrint( "Tank_Past_Gun" ); }, Gun_Damaged = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, false, "SWITCH_gun"); Util.MapDebugPrint( "Gun_Damaged" ); }, Tank_Damaged = function( trigger ) { Util.SetMaxUsersInProgress( 1, "SWITCH_gun"); SetGoalPriority("SWITCH_gun", 0.69); Map.tankDamaged=true; Util.SetPositionGoal( "BUILD_Hell_on_Wheels", Map.Mover_Tank ); Map.Check_Switch(); Util.MapDebugPrint( "Tank_Damaged" ); }, Tank_Repaired = function( trigger ) { Map.tankDamaged=false; Map.Check_Switch(); ETUtil.SetStartIndex( "BUILD_Hell_on_Wheels", -1); Util.MapDebugPrint( "Tank_Repaired" ); }, Set_Fuel_Goals = function( enable ) { SetAvailableMapGoals( TEAM.AXIS, enable, { "DEFEND_fuel.*", "MOBILEMG42_fuel.*", }); SetAvailableMapGoals( TEAM.AXIS, !enable, ".*CAB_south_.*cabinet" ); SetAvailableMapGoals( TEAM.ALLIES, enable, { "FLAG_fuel_tank", "CAPPOINT.*", }); SetAvailableMapGoals( TEAM.ALLIES, !enable, { Map.Mover_Tank, "ESCORT_tank", }); SetAvailableMapGoals( TEAM.ALLIES, enable && !Map.sideWallDestroyed, "ATTACK_side_wall.*" ); }, Get_Fuel = function( trigger ) { Map.Set_Fuel_Goals(true); SetAvailableMapGoals( TEAM.ALLIES, false, "MOUNT_Tank" ); SetGoalPriority( ".*_Command_Post", 0.99, TEAM.ALLIES ); SetGoalPriority( "PLANT_Side_Wall", 0.85, TEAM.ALLIES ); SetGoalPriority( "BUILD_Hell_on_Wheels", 0.6, TEAM.ALLIES ); Util.ForceRouting( "BUILD_Hell_on_Wheels", true ); Util.MapDebugPrint( "Get_Fuel" ); }, Side_Entrance_Destroyed = function( trigger ) { Map.sideEntranceDestroyed = true; Util.MapDebugPrint( "Side_Entrance_Destroyed" ); }, Side_Wall_Destroyed = function( trigger ) { Map.sideWallDestroyed = true; Util.EnableGoal("ROUTE_side_wall"); SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_side_wall.*" ); Util.MapDebugPrint( "Side_Wall_Destroyed" ); }, Allies_Escape = function( trigger ) { Map.Set_Fuel_Goals(false); SetAvailableMapGoals( TEAM.AXIS, false, "PLANTMINE_east.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, { "MOUNT_Tank", "TRIPMINE_gun", }); SetGoalPriority( "BUILD_Hell_on_Wheels", 0.99, TEAM.ALLIES ); ETUtil.SetAimModeForMount("MOUNT_Tank", "opposite"); Util.OnTriggerPosition( Map.Mover_Tank, "yard3", 300.0, Map.Allies_Escape2 ); Server.MinClassCount[TEAM.AXIS][CLASS.COVERTOPS] += 1; Server.MinClassCount[TEAM.AXIS][CLASS.ENGINEER] -= 1; Util.MapDebugPrint( "Allies_Escape" ); }, Allies_Escape2 = function( trigger ) { Util.ForceRouting( "BUILD_Hell_on_Wheels", false ); Util.OnTriggerPosition( Map.Mover_Tank, "gun", 400.0, Map.Tank_Past_Gun2 ); Util.MapDebugPrint( "Allies_Escape2" ); }, Tank_Past_Gun2 = function( trigger ) { Map.phase = 80; Map.Set_Mg(); SetAvailableMapGoals( TEAM.AXIS, true, "ESCORT_tank" ); if(!Map.sideEntranceDestroyed){ SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Side_Entrance" ); } if(!Map.sideWallDestroyed){ SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_Side_Wall" ); } Util.MapDebugPrint( "Tank_Past_Gun2" ); }, }; global OnMapLoad = function() { OnTrigger( "The Tank has breached the Bunker Tunnel Doors!", Map.Tank_Bunker ); OnTrigger( "^1WARNING: ^3AT Gun spotted! ^1FIRE AT WILL!!!", Map.Gun_Spotted ); OnTrigger( "^3Escort the Tank to the Repair Depot!", Map.Tank_Burning ); OnTrigger( "repair_door_goto", Map.gate_depot_trigger ); OnTrigger( "GRENADE_depot_hatch Exploded.", Map.Depot_hatch_Destroyed ); OnTrigger( "^1Tank Repair Locks Engaged!", Map.Repair_Locked ); OnTrigger( "^3Upgrade the Tank", Map.Repair_Start ); OnTrigger( "hint_arrow_white_goto", Map.Repair_Activated ); OnTrigger( "tank_covops_need", Map.COVERTOPS_Need ); OnTrigger( "^2Jamming Transmitter Installed!", Map.Tank_Installed ); OnTrigger( "tank_sol_need", Map.SOLDIER_Need ); OnTrigger( "^2First Aid Kit Installed!", Map.Tank_Installed ); OnTrigger( "tank_medic_need", Map.MEDIC_Need ); OnTrigger( "^2Ammo Supply Kit Installed!", Map.Tank_Installed ); OnTrigger( "tank_eng_need", Map.ENGINEER_Need ); OnTrigger( "^2Six-Shooter Cannon Installed!", Map.Tank_Installed ); OnTrigger( "tank_fops_need", Map.FIELDOPS_Need ); OnTrigger( "^2Armour Upgrade Installed!", Map.Tank_Installed ); OnTrigger( "^2Tank Upgrade Complete!!!", Map.Tank_Upgraded ); OnTrigger( "The Tank is Returning to Battle!", Map.Tank_Unlocked ); OnTrigger( "Allied Command Post constructed. Forward Spawn Enabled!", Map.Allied_Command_Post_Built ); OnTrigger( "Axis team has destroyed the Allied Command Post!", Map.Allied_Command_Post_Destroyed ); OnTrigger( "^1WARNING: ^3Fire the AT Gun!!", Map.Fire_Gun); OnTrigger( "^1WARNING: ^3Manual Fire Control Damaged!!!", Map.Gun_Damaged); OnTrigger( "The Tank is past the Anti Tank Gun!", Map.Tank_Past_Gun); OnTrigger( "The Tank has been damaged!", Map.Tank_Damaged); OnTrigger( "The Tank has been Repaired!", Map.Tank_Repaired); OnTrigger( "^3Get the Fuel Tanks!", Map.Get_Fuel); OnTrigger( "The Allies have destroyed the Side Entrance!!", Map.Side_Entrance_Destroyed); OnTrigger( "The Allies have destroyed the Side Wall!!", Map.Side_Wall_Destroyed); OnTrigger( "The Allies are escaping with the Fuel!", Map.Allies_Escape); Util.DisableGoal(".*", true); Util.DisableGoal("ROUTE_depot_up"); Util.DisableGoal("ROUTE_side_wall"); Util.EnableGoal("AMMOCAB.*"); Util.EnableGoal("HEALTHCAB.*"); Util.EnableGoal(".*Command_Post"); SetAvailableMapGoals( TEAM.AXIS, true, { "BUILD_Gun_Controls", "DEFEND_depot.*", }); SetAvailableMapGoals( TEAM.ALLIES, true, { "BUILD_Hell_on_Wheels", "ESCORT_tank", "SWITCH_gate_depot", "PLANT_Side_Entrance", "GRENADE_depot_hatch", }); Map.Set_Command_Post(false); SetGoalPriority( "BUILD_Gun_Controls", 0.99, TEAM.AXIS ); SetGoalPriority( "BUILD_Hell_on_Wheels", 0.99, TEAM.ALLIES ); SetGoalPriority( "ESCORT_tank", 0.7, TEAM.ALLIES ); SetGoalPriority( "ESCORT_tank", 0.5, TEAM.AXIS ); SetGoalPriority( "MOUNT_Tank", 0.79, TEAM.ALLIES ); SetGoalPriority( "FLAG_fuel_tank", 0.6, TEAM.ALLIES ); SetGoalPriority( "ATTACK_side_wall.*", 0.61, TEAM.ALLIES ); SetGoalPriority( "SNIPE_allied.*", 0.81, TEAM.ALLIES ); SetGoalPriority( "GRENADE_mg.*", 0.69, TEAM.ALLIES ); Util.SetMaxUsersInProgress( 4, "ESCORT_tank" ); Util.SetMaxUsersInUse( 2, "ESCORT_tank" ); Util.SetMaxUsersInProgress( 2, "PLANT_Command_Post" ); Util.SetMaxUsers( 1, "ATTACK_side_wall.*" ); Util.SetMaxUsers( 1, "GRENADE.*" ); SetMapGoalProperties( "DEFEND_.*", {mincamptime=30, maxcamptime=90} ); SetMapGoalProperties( "SNIPE_.*", {mincamptime=40, maxcamptime=100} ); SetMapGoalProperties( "MOBILEMG42.*", {mincamptime=90, maxcamptime=120} ); MapRoutes = { BUILD_Command_Post = { ROUTE_allies_spawn = { ROUTE_allies_west = { ROUTE_allies_south = {}, }, ROUTE_allies_front = { ROUTE_allies_south = {}, }, ROUTE_depot_gate = {}, }, ROUTE_axis_spawn = { ROUTE_tunnel = {}, ROUTE_depot_gate = {}, }, }, PLANT_Side_Entrance = { ROUTE_allies_spawn = { ROUTE_allies_down = {}, }, }, ATTACK_yard3 = { ROUTE_allies_spawn = { ROUTE_allies_east = {}, }, }, SWITCH_gate_depot = { ROUTE_allies_spawn = { ROUTE_allies_west = { ROUTE_allies_south = { ROUTE_depot3 = {}, ROUTE_depot_up = { Weight=2 }, }, }, ROUTE_allies_front = { ROUTE_allies_south = {}, }, }, ROUTE_axis_spawn = { ROUTE_tunnel = { Weight=2 }, ROUTE_depot_gate = {}, ROUTE_allies_front = { ROUTE_allies_south = {} }, } }, FLAG_fuel_tank = { ROUTE_allies_spawn = { ROUTE_side_wall = {}, ROUTE_yard2 = {}, ROUTE_yard3 = {}, }, ROUTE_cp_spawn = { ROUTE_yard2 = {}, ROUTE_yard3 = {}, ROUTE_yard4 = {}, ROUTE_side_wall = { Weight=4 }, }, }, CAPPOINT_299 = { ROUTE_fuel = { ROUTE_fuel_gate = {}, ROUTE_fuel_up = { ROUTE_axis_up_south = { ROUTE_axis_up_north = {}}}, } }, BUILD_Hell_on_Wheels = { ROUTE_allies_spawn = { ROUTE_allies_down = {}, ROUTE_yard1 = {}, }, ROUTE_cp_spawn = { ROUTE_yard1 = {}, ROUTE_yard2 = {}, ROUTE_side_wall = {}, }, }, }; MapRoutes.PLANT_Command_Post = MapRoutes.BUILD_Command_Post; MapRoutes.DEFEND_class_need = MapRoutes.SWITCH_gate_depot; MapRoutes.SWITCH_repair_activate = MapRoutes.SWITCH_gate_depot; MapRoutes.DEFEND_depot1 = MapRoutes.SWITCH_gate_depot; MapRoutes.DEFEND_depot2 = MapRoutes.DEFEND_depot1; MapRoutes.DEFEND_depot3 = MapRoutes.DEFEND_depot1; MapRoutes.DEFEND_depot4 = MapRoutes.DEFEND_depot1; MapRoutes.DEFEND_depot5 = MapRoutes.DEFEND_depot1; MapRoutes.ATTACK_yard4 = MapRoutes.PLANT_Side_Entrance; Util.Routes(MapRoutes); Util.MapDebugPrint( "Map script for " + GetMapName() + " loaded" ); }; global OnBotJoin = function( bot ) { bot.TargetBreakableDist = 40.0; };