//========================================================================================== // // remagen.gm // // Who When What //------------------------------------------------------------------------------------------ // palota 04 December 2011 Initial Script // palota 08 April 2012 roles, more routes and defend goals, MOBILEMG42, WeaponAvailability // //========================================================================================== // global Map = { Debug = 0, doorDestroyed = 0, doorWestDestroyed = false, doorEastDestroyed = false, ropeBuilt = 0, phase = 0, alliedSpawns = {2,6,6,7,7,5,5}, axisSpawns = {6,7,7,5,5,1,1}, Movers = { "MOVER_hakensouth", "MOVER_hakennorth" }, //rope construction materials Roles = { AXIS = { DEFENDER1 = { numbots = 3, }, DEFENDER2 = { numbots = 3, }, DEFENDER3 = { numbots = 2, }, SNIPER = { numbots = 1, crucialClass = CLASS.COVERTOPS, }, }, }, NavL = function(_this, x,y,z, x2,y2) { _this.AddAimRequest(Priority.High, "facing", Vec3(x,y,z)); prev=null; for(i=0; i<30; i+=1) { pos = _this.Bot.GetPosition(); if(Abs(pos.x - x2) > 60 || Abs(pos.y - y2) > 60){ break; } //bots always stuck when climbing down if(i>2 && Abs(prev.z - pos.z) < 20) { _this.Bot.HoldButton(BTN.STRAFE_R, 0.5); } prev = pos; sleep(0.5); } }, Navigation = { l1 = {navigate=function(_this){ //north west tower Map.NavL(_this, 0,0.2,0.8, -227.53, 2661.87); }}, l2 = {navigate=function(_this){ //north east tower Map.NavL(_this, 0,0.2,0.8, 605.38, 2661.84); }}, l3 = {navigate=function(_this){ //south west tower Map.NavL(_this, 0,-0.2,0.8, -226.07, -9829.87); }}, l4 = {navigate=function(_this){ //south east tower Map.NavL(_this, 0,-0.2,0.8, 609.32, -9829.87); }}, }, SetSpawn1 = function(bot) { if (bot.GetTeam()==TEAM.ALLIES) { tbl = Map.alliedSpawns; } else { tbl = Map.axisSpawns; } s=tbl[Map.phase]; if(s==2 && RandInt(0,1)==0){ s=3; } //Allies west,east if(s==1 && (bot.HasRole(ROLE.SNIPER) || bot.HasRole(ROLE.DEFENDER3))){ s=4; } //Axis tunnel if(s==6 && (bot.HasRole(ROLE.SNIPER) || bot.HasRole(ROLE.DEFENDER1) || bot.HasRole(ROLE.DEFENDER2))){ s=7; } //north spawn allows only 4 bots bot.ChangeSpawnPoint(s); }, SetSpawn = function() { yield(); foreach(bot in BotTable) { Map.SetSpawn1(bot); } }, SetNorth = function() { b= Map.phase==0; SetAvailableMapGoals( TEAM.AXIS, b && Map.doorDestroyed==0, ".*MG42_town" ); SetAvailableMapGoals( TEAM.AXIS, b, "PLANT_.*_Enterhaken" ); SetAvailableMapGoals( TEAM.AXIS, b && Map.ropeBuilt>0, "DEFEND_north.*" ); SetAvailableMapGoals( TEAM.AXIS, b, { "MOBILEMG42_north.*", "DEFEND_door.*", }); SetAvailableMapGoals( TEAM.AXIS, b && Map.doorWestDestroyed, "DEFEND_tower_nw.*" ); SetAvailableMapGoals( TEAM.AXIS, b && Map.doorEastDestroyed, "DEFEND_tower_ne.*" ); SetAvailableMapGoals( TEAM.AXIS, b, { "DEFEND_town.*", "SNIPE_north.*", }); SetAvailableMapGoals( TEAM.ALLIES, b && Map.ropeBuilt==0, "ATTACK_rope.*" ); SetAvailableMapGoals( TEAM.ALLIES, b && Map.doorDestroyed==0, "ATTACK_door.*" ); if(Map.phase<2){ SetAvailableMapGoals( TEAM.ALLIES, Map.ropeBuilt+Map.doorDestroyed>0, "CHECKPOINT_north_span" ); SetAvailableMapGoals( TEAM.AXIS, Map.phase==1, "CHECKPOINT_north_span" ); p=100; n=Map.ropeBuilt+Map.doorDestroyed; if(b && n<4){ p= 20*n; } Util.SetPercentInProgress(p, "CHECKPOINT_north_span"); } if(Map.ropeBuilt==0){ p=0.9; } else { p=0.81; } SetGoalPriority("BUILD_.*_Enterhaken", p); }, South_Door_Destroyed = function( trigger ) { Map.doorEastDestroyed = true; Map.doorDestroyed += 1; Map.SetNorth(); Util.MapDebugPrint( "South_Door_Destroyed" ); }, North_Door_Destroyed = function( trigger ) { Map.doorWestDestroyed = true; Map.doorDestroyed += 1; Map.SetNorth(); Util.MapDebugPrint( "North_Door_Destroyed" ); }, South_Enterhaken_Built = function( trigger ) { Map.ropeBuilt += 1; Wp.SetWaypointFlag("rope_east", "closed", false); Map.SetNorth(); Util.MapDebugPrint( "South_Enterhaken_Built" ); }, South_Enterhaken_Destroyed = function( trigger ) { Map.ropeBuilt -= 1; Wp.SetWaypointFlag("rope_east", "closed", true); Map.SetNorth(); Util.MapDebugPrint( "South_Enterhaken_Destroyed" ); }, North_Enterhaken_Built = function( trigger ) { Map.ropeBuilt += 1; Wp.SetWaypointFlag("rope_west", "closed", false); Map.SetNorth(); Util.MapDebugPrint( "North_Enterhaken_Built" ); }, North_Enterhaken_Destroyed = function( trigger ) { Map.ropeBuilt -= 1; Wp.SetWaypointFlag("rope_west", "closed", true); Map.SetNorth(); Util.MapDebugPrint( "North_Enterhaken_Destroyed" ); }, SetNorthFlag = function() { b= Map.phase==1; SetAvailableMapGoals( TEAM.ALLIES, b, { "BUILD_North_Span_TNT", "ATTACK_north.*", "SMOKEBOMB_north", }); Map.SetNorth(); Map.SetSpawn(); }, SetCenterFlag = function() { b= Map.phase==2; SetAvailableMapGoals( TEAM.AXIS, b, "DEFEND_center.*" ); b= Map.phase==3; SetAvailableMapGoals( TEAM.ALLIES, b, { "BUILD_Center_Span_TNT", "ATTACK_center.*", "SMOKEBOMB_center", }); }, SetSouthFlag = function() { b= Map.phase==4; SetAvailableMapGoals( TEAM.AXIS, b, { "DEFEND_south.*", "SNIPE_south.*", }); b= Map.phase==5; SetAvailableMapGoals( TEAM.AXIS, b, "MOBILEMG42_south.*" ); SetAvailableMapGoals( TEAM.ALLIES, b, { "BUILD_South_Span_TNT", "ATTACK_south.*", "SMOKEBOMB_south", }); Map.SetSpawn(); }, North_Span_TNT_Built = function( trigger ) { Map.phase = 2; Util.EnableGoal( "CHECKPOINT_center_span" ); Map.SetCenterFlag(); Map.SetNorthFlag(); WeaponTable.SetWeaponAvailability( CLASS.SOLDIER, WEAPON.FLAMETHROWER, false ); WeaponTable.SetWeaponAvailability( null, WeaponTable.Shotgun, false ); Util.MapDebugPrint( "North_Span_TNT_Built" ); }, Center_Span_TNT_Built = function( trigger ) { Map.phase = 4; Util.EnableGoal( "CHECKPOINT_south_span" ); Map.SetCenterFlag(); Map.SetSouthFlag(); if(Map.doorDestroyed<2){ SetAvailableMapGoals( TEAM.ALLIES, false, "PLANT_.*_Door" ); } SetAvailableMapGoals( TEAM.ALLIES, false, "BUILD_.*_Enterhaken" ); Util.DisableGoal( "HEALTHCAB_healthcabinet_[23]" ); Util.EnableGoal( "HEALTHCAB_healthcabinet" ); Util.EnableGoal( "HEALTHCAB_healthcabinet_1" ); Util.MapDebugPrint( "Center_Span_TNT_Built" ); }, South_Span_TNT_Built = function( trigger ) { Map.phase = 6; Map.SetSouthFlag(); SetAvailableMapGoals( TEAM.AXIS, true, { "DEFEND_hq.*", "DEFEND_tower_s[ew].*", "DEFEND_above.*", "SNIPE_hq.*", "TRIPMINE_south.*", }); SetAvailableMapGoals( TEAM.ALLIES, true, { "ATTACK_hq.*", "DYNAMITE_radio", ".*MG42_construction_track", }); WeaponTable.SetWeaponAvailability( CLASS.SOLDIER, WEAPON.FLAMETHROWER, true ); WeaponTable.SetWeaponAvailability( null, WeaponTable.Shotgun, true ); Util.MapDebugPrint( "South_Span_TNT_Built" ); }, north_span_Axis_Captured = function( trigger ) { Map.phase = 0; Map.SetNorthFlag(); Util.MapDebugPrint( "north_span_Axis_Captured" ); }, north_span_Allies_Captured = function( trigger ) { Map.phase = 1; Map.SetNorthFlag(); Util.MapDebugPrint( "north_span_Allies_Captured" ); }, center_span_Axis_Captured = function( trigger ) { Map.phase = 2; Map.SetCenterFlag(); Map.SetSpawn(); Util.MapDebugPrint( "center_span_Axis_Captured" ); }, center_span_Allies_Captured = function( trigger ) { Map.phase = 3; Map.SetCenterFlag(); Map.SetSpawn(); Util.MapDebugPrint( "center_span_Allies_Captured" ); }, south_span_Axis_Captured = function( trigger ) { Map.phase = 4; Map.SetSouthFlag(); Util.MapDebugPrint( "south_span_Axis_Captured" ); }, south_span_Allies_Captured = function( trigger ) { Map.phase = 5; Map.SetSouthFlag(); Util.MapDebugPrint( "south_span_Allies_Captured" ); }, HQ_Destroyed = function( trigger ) { ETUtil.WinningChat( TEAM.ALLIES ); ETUtil.LosingChat( TEAM.AXIS ); Util.MapDebugPrint( "HQ_Destroyed" ); }, }; global OnMapLoad = function() { OnTrigger( "The South Door has been dynamited!", Map.South_Door_Destroyed ); OnTrigger( "The North Door has been dynamited!", Map.North_Door_Destroyed ); OnTrigger( "The South Enterhaken has been built!", Map.South_Enterhaken_Built ); OnTrigger( "Axis have destroyed the South Enterhaken!", Map.South_Enterhaken_Destroyed ); OnTrigger( "The North Enterhaken has been built!", Map.North_Enterhaken_Built ); OnTrigger( "Axis have destroyed the North Enterhaken!", Map.North_Enterhaken_Destroyed ); OnTrigger( "Axis capture the North Span!", Map.north_span_Axis_Captured ); OnTrigger( "Allies capture the North Span!", Map.north_span_Allies_Captured ); OnTrigger( "Axis capture the Center Span!", Map.center_span_Axis_Captured ); OnTrigger( "Allies capture the Center Span!", Map.center_span_Allies_Captured ); OnTrigger( "Axis capture the South Span!", Map.south_span_Axis_Captured ); OnTrigger( "Allies capture the South Span!", Map.south_span_Allies_Captured ); OnTrigger( "The Allies have defused the North Span TNT", Map.North_Span_TNT_Built ); OnTrigger( "The Allies have defused the Center Span TNT", Map.Center_Span_TNT_Built ); OnTrigger( "The Allies have defused the South Span TNT", Map.South_Span_TNT_Built ); OnTrigger( "The Allies have destroyed the Axis Field HQ", Map.HQ_Destroyed ); OnTriggerRegion(AABB(122.594,-174.135,-30.819,339.305,522.511,136.884),RegionTrigger.DisableBotPush); //under center checkpoint OnTriggerRegion(AABB(79.760,-9231.069,-55.827,244.651,-7089.168,113.512),RegionTrigger.DisableCombatMovement); //south MG42 OnTriggerRegion(AABB(-56.668,-9686.622,805.125,447.454,-6550.206,1109.714),RegionTrigger.DisableCombatMovement); //south snipe Wp.SetWaypointFlag("rope_east", "closed", true); Wp.SetWaypointFlag("rope_west", "closed", true); Util.DisableGoal( ".*", true ); Util.EnableGoal( "HEALTHCAB_healthcabinet_[23]" ); SetAvailableMapGoals( TEAM.ALLIES, true, { "PLANT_.*_Door", "BUILD_.*_Enterhaken", }); Util.SetRoleForTable({ "DEFEND_tower_sw.*", "DEFEND_tower_nw.*", "DEFEND_door_w.*"}, ROLE.DEFENDER1); Util.SetRoleForTable({ "DEFEND_tower_se.*", "DEFEND_tower_ne.*", "DEFEND_door_e.*"}, ROLE.DEFENDER2); Util.SetRoleForTable({ "DEFEND_north.*", "DEFEND_above.*" }, ROLE.DEFENDER3); SetGoalPriority("MOUNTMG42.*", 0.6); SetGoalPriority("REPAIRMG42_construction_track", 0.85); SetGoalPriority("DEFEND_tower.*", 0.52); Util.SetMaxUsers( 1, "BUILD_.*_Enterhaken" ); Util.SetMaxUsers( 1, "DEFEND_.*" ); Util.SetMaxUsers( 1, ".*MG42_.*" ); SetMapGoalProperties( "DEFEND_.*", {mincamptime=10, maxcamptime=40} ); SetMapGoalProperties( "SNIPE_.*", {mincamptime=15, maxcamptime=70} ); SetMapGoalProperties( "MOUNTMG42_construction_track", {MinCampTime=20, MaxCampTime=60} ); SetMapGoalProperties( "MOUNTMG42_town", {MinCampTime=500, MaxCampTime=500} ); SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=30, MaxCampTime=60} ); Util.AddUsePoint("PLANT_North_Enterhaken", Vec3(-309.058, 4612.319, 32.125)); Util.AddUsePoint("PLANT_South_Enterhaken", Vec3(714.118, 4614.569, 40.125)); MapRoutes = { BUILD_South_Enterhaken = { ROUTE_east_spawn = { ROUTE_east2 = {}, ROUTE_east3 = {}, }, ROUTE_west_spawn = { ROUTE_west3 = {}, ROUTE_west4 = {}, ROUTE_west5 = {}, ROUTE_west6 = { ROUTE_west_mg = {}}, }, }, PLANT_South_Door = { ROUTE_east_spawn = { ROUTE_east1 = {}, ROUTE_east2 = {}, }, ROUTE_west_spawn = { ROUTE_west1 = {}, ROUTE_west2 = {}, }, }, CHECKPOINT_north_span = { ROUTE_east_spawn = { ROUTE_east1 = { ROUTE_east_door = {}, }, ROUTE_east2 = { ROUTE_east_door = {}, ROUTE_east_rope = {}, }, ROUTE_east3 = { ROUTE_east_rope = {}, }, }, ROUTE_west_spawn = { ROUTE_west1 = { Weight=2, ROUTE_west_door = {}, }, ROUTE_west2 = { Weight=2, ROUTE_west_door = {}, }, ROUTE_west3 = { ROUTE_west_rope = {}, }, ROUTE_west4 = { ROUTE_west_rope = {}, }, ROUTE_west5 = { ROUTE_west_rope = {}, }, ROUTE_west6 = { ROUTE_west_mg = {}}, }, ROUTE_center_spawn = { ROUTE_north1 = {}, ROUTE_north2 = {}, ROUTE_north3 = {}, ROUTE_north4 = {}, }, }, CHECKPOINT_center_span = { ROUTE_north_spawn = { ROUTE_north1 = {}, ROUTE_north2 = {}, ROUTE_north3 = {}, ROUTE_north4 = {}, }, ROUTE_south_spawn = { ROUTE_center1 = {}, ROUTE_center2 = {}, ROUTE_center3 = {}, ROUTE_center4 = {}, }, }, CHECKPOINT_south_span = { ROUTE_center_spawn = { ROUTE_center1 = {}, ROUTE_center2 = {}, ROUTE_center3 = {}, ROUTE_center4 = {}, }, ROUTE_axis_spawn = { ROUTE_south1 = {}, ROUTE_south2 = {}, ROUTE_south3 = {}, ROUTE_south4 = {}, }, }, DYNAMITE_radio = { ROUTE_south_spawn = { ROUTE_south_tower_east = { Weight=2, ROUTE_hq_north = {}, ROUTE_hq_south = {}, }, ROUTE_south_tower_west = { ROUTE_hq_north = {}, ROUTE_hq_south = {}, }, ROUTE_south_mg = { ROUTE_hq_north = {}, ROUTE_hq_south = {}, }, } }, }; MapRoutes.BUILD_North_Enterhaken = MapRoutes.BUILD_South_Enterhaken; MapRoutes["ATTACK_rope.*"] = MapRoutes.BUILD_South_Enterhaken; MapRoutes.PLANT_North_Door = MapRoutes.PLANT_South_Door; MapRoutes["ATTACK_door.*"] = MapRoutes.PLANT_South_Door; MapRoutes.BUILD_Center_Span_TNT = MapRoutes.CHECKPOINT_center_span; MapRoutes.BUILD_South_Span_TNT = MapRoutes.CHECKPOINT_south_span; MapRoutes["ATTACK_hq.*"] = MapRoutes.DYNAMITE_radio; Util.Routes(MapRoutes); Map.SetNorthFlag(); Util.MapDebugPrint( "Omni-bot map script for " + GetMapName() + " executed." ); }; global OnBotJoin = function( bot ) { bot.MaxViewDistance = 3000; bot.TargetBreakableDist = 90.0; //south towers doors Util.IgnoreTargetGoalTable(bot, Map.Movers); Map.SetSpawn1(bot); };