//========================================================================================== // // saberpeak_final.gm // // Who When What //------------------------------------------------------------------------------------------ // palota 22 September 2010 Initial Script // palota 22 October 2010 MOUNT_ship aim mode, BUILD_allies_assault_boat StartIndex and paththrough //========================================================================================== // global Map = { Debug=0, Movers = { "MOVER_ship" }, sideWallDestroyed = false, sidePathAccessible = false, commandPostAllied = false, mainEntranceDestroyed = false, shipDamaged = false, Submarine_Dyno = 0, Navigation = { ladder_north ={ navigate = function(_this) { _this.AddAimRequest(Priority.High, "facing", Vector3(0,-1,0.5)); sleep(0.5); _this.Bot.HoldButton(BTN.BACKWARD, 3); sleep(3); } }, ladder_south ={ navigate = function(_this) { _this.AddAimRequest(Priority.High, "facing", Vector3(0,1,0.5)); sleep(0.5); _this.Bot.HoldButton(BTN.BACKWARD, 3); sleep(3); } }, }, SetSpawn1 = function(bot) { if (Map.sidePathAccessible) { bot.MaxViewDistance = 5200; }else{ bot.MaxViewDistance = 6600; } if (bot.GetTeam()==TEAM.AXIS) { if (Map.mainEntranceDestroyed && RandInt(0,1)>0) { bot.ChangeSpawnPoint(3); }else{ bot.ChangeSpawnPoint(0); } } }, SetSpawn = function() { foreach(bot in BotTable) { Map.SetSpawn1(bot); } }, Spawn_Changed = function(trigger) { b = Map.commandPostAllied || Map.sidePathAccessible || Map.sideWallDestroyed; SetAvailableMapGoals( TEAM.AXIS, b, ".*MG42_tower.*" ); SetAvailableMapGoals( TEAM.ALLIES, b, { ".*MG42_bunker_north", "GRENADE_tower_mg.*", }); b=!b; SetAvailableMapGoals( TEAM.AXIS, b, { ".*MG42_bunker_south", ".*MG42_bunker_center", "SNIPE_bunker.*", "CALLARTILLERY_bunker.*", "ARTILLERY_D_beach.*", "DEFEND_beach.*", }); SetAvailableMapGoals( TEAM.ALLIES, b, { "SNIPE_allied.*", "MOBILEMORTAR_allied", }); }, Boat_Damaged = function(trigger) { Map.shipDamaged = true; Util.MapDebugPrint("Boat_Damaged"); }, Boat_Repaired = function(trigger) { Map.shipDamaged = false; Util.MapDebugPrint("Boat_Repaired"); }, Get_Ammo = function(trigger) { SetAvailableMapGoals( TEAM.ALLIES, false, "ESCORT_ship" ); SetAvailableMapGoals( TEAM.ALLIES, true, "CAPPOINT_Ammo_Dropoff_2" ); ETUtil.SetStartIndex("BUILD_allies_assault_boat", 0); Util.MapDebugPrint("Get_Ammo"); }, Ammo_Loaded = function(trigger) { SetAvailableMapGoals( TEAM.AXIS, false, { "DEFEND_ammo.*", "MOBILEMG42_ammo.*", "MOBILEMORTAR_beach", }); SetAvailableMapGoals( TEAM.AXIS, true, "DEFEND_sidewall.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, { "ESCORT_ship", "PLANT_Side_Wall", "ATTACK_entrance.*", "ATTACK_sidewall.*", }); ETUtil.SetAimModeForMount("MOUNT_ship", Vector3(-3480, -330, 930)); ETUtil.SetStartIndex("BUILD_allies_assault_boat", 3); ETUtil.SetExcludeIndexes("BUILD_allies_assault_boat", {0,1}); Util.MapDebugPrint("Ammo_Loaded"); }, Side_Path = function(trigger) { Map.sidePathAccessible = true; Map.Spawn_Changed(); SetAvailableMapGoals( TEAM.AXIS, true, { "ARTILLERY_D_sidepath", "CALLARTILLERY_entrance", }); if(!Map.sideWallDestroyed){ Util.SetMaxUsersInProgress( 1, "BUILD_allies_assault_boat" ); } Util.SetMaxUsersInProgress( 1, "PLANT_Neutral_Command_Post" ); Util.EnableGoal("ROUTE_sidepath"); ETUtil.SetAimModeForMount("MOUNT_ship", Vector3(130, 3056, 800)); ETUtil.SetStartIndex("BUILD_allies_assault_boat", 2); Util.MapDebugPrint("Side_Path"); }, Submarine_Accessible = function() { SetAvailableMapGoals( TEAM.AXIS, false, "BUILD_Neutral_Command_Post" ); SetAvailableMapGoals( TEAM.AXIS, true, ".*village.*" ); SetAvailableMapGoals( TEAM.AXIS, false, "MOBILEMG42_allied.*" ); SetAvailableMapGoals( TEAM.AXIS, true, { "DEFEND_submarine.*", "TRIPMINE_submarine.*", }); SetAvailableMapGoals( TEAM.ALLIES, true, "PLANT_Submarine" ); SetAvailableMapGoals( TEAM.AXIS, !Map.sideWallDestroyed || !Map.mainEntranceDestroyed, "DEFEND_sidewall.*" ); }, Side_Wall_Destroyed = function(trigger) { Util.EnableGoal("ROUTE_sidewall"); Map.sideWallDestroyed = true; Map.Spawn_Changed(); Map.Submarine_Accessible(); SetAvailableMapGoals( TEAM.ALLIES, false, "ATTACK_sidewall.*" ); SetAvailableMapGoals( TEAM.ALLIES, true, "MOBILEMG42_allied_village.*" ); Util.SetMaxUsersInProgress( 3, "BUILD_allies_assault_boat" ); Util.MapDebugPrint("Side_Wall_Destroyed"); }, Main_Entrance_Destroyed = function(trigger) { Map.mainEntranceDestroyed = true; Util.EnableGoal("ROUTE_entrance"); Map.Submarine_Accessible(); SetGoalPriority("DEFEND_sidewall.*", 0.5, TEAM.AXIS); SetAvailableMapGoals( TEAM.AXIS, true, "SNIPE_village.*" ); SetAvailableMapGoals( TEAM.ALLIES, false, { "ATTACK_entrance.*", "ESCORT_ship", "BUILD_allies_assault_boat", }); SetAvailableMapGoals( TEAM.ALLIES, true, "ATTACK_submarine.*" ); Util.SetMaxUsersInProgress( 1, "MOUNT_ship" ); Map.SetSpawn(); ETUtil.SetExcludeIndexes("BUILD_allies_assault_boat", null); ETUtil.SetStartIndex("BUILD_allies_assault_boat", 0); Util.SetGoalRange("GRENADE_tower_mg_east", 800); Util.SetGoalRange("GRENADE_tower_mg_west", 700); Util.MapDebugPrint("Main_Entrance_Destroyed"); }, Allied_Command_Post_Built = function(trigger) { Map.commandPostAllied = true; Map.Spawn_Changed(); Util.MapDebugPrint("Allied_Command_Post_Built"); }, Command_Post_Destroyed = function(trigger) { Map.commandPostAllied = false; Map.Spawn_Changed(); Util.MapDebugPrint("Command_Post_Destroyed"); }, Submarine_Planted = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, true, "ATTACK_submarine.*" ); Map.Submarine_Dyno += 1; Util.MapDebugPrint( "Submarine_Planted" ); }, Submarine_Defused = function( trigger ) { Map.Submarine_Dyno -= 1; if ( Map.Submarine_Dyno < 1 ){ SetAvailableMapGoals( TEAM.AXIS, false, "ATTACK_submarine.*" ); } Util.MapDebugPrint( "Submarine_Defused" ); }, Submarine_Destroyed = function( trigger ) { ETUtil.WinningChat( TEAM.ALLIES ); ETUtil.LosingChat( TEAM.AXIS ); Util.MapDebugPrint( "Submarine_Destroyed" ); }, }; global OnMapLoad = function() { OnTrigger( "The boat has been damaged", Map.Boat_Damaged ); OnTrigger( "The boat has been repaired", Map.Boat_Repaired ); OnTrigger( "saberpeak_allies_get_ammo", Map.Get_Ammo ); OnTrigger( "Allies have have loaded the ammo onto the boat", Map.Ammo_Loaded ); OnTrigger( "Allies have breached the side wall", Map.Side_Wall_Destroyed ); OnTrigger( "Allies have destroyed the main entrance", Map.Main_Entrance_Destroyed ); OnTrigger( "Allies have gained access to the side path", Map.Side_Path ); OnTrigger( "Allied Command Post constructed. Charge speed increased!", Map.Allied_Command_Post_Built ); OnTrigger( "Axis team has destroyed the Allied Command Post!", Map.Command_Post_Destroyed ); OnTrigger( "Planted at the Submarine.", Map.Submarine_Planted ); OnTrigger( "Defused at the Submarine.", Map.Submarine_Defused ); OnTrigger( "The Submarine has been destroyed!", Map.Submarine_Destroyed ); Util.DisableGoal(".*", true); Util.DisableGoal("ROUTE_sidewall"); Util.DisableGoal("ROUTE_sidepath"); Util.DisableGoal("ROUTE_entrance"); Util.EnableGoal("AMMO.*"); Util.EnableGoal("HEALTH.*"); Util.EnableGoal("BUILD_Neutral_Command_Post"); Util.EnableGoal("PLANT_Neutral_Command_Post"); SetAvailableMapGoals( TEAM.AXIS, true, { "DEFEND_ammo.*", "PLANTMINE_sidewall.*", "MOBILEMG42_ammo.*", "MOBILEMORTAR_beach", }); SetAvailableMapGoals( TEAM.ALLIES, true, { "BUILD_allies_assault_boat", "ESCORT_ship", "MOUNT_ship", "FLAG_ammo.*", }); SetGoalPriority("ATTACK_submarine.*", 0.97, TEAM.AXIS); SetGoalPriority("PLANTMINE_sidewall.*", 0.78, TEAM.AXIS); SetGoalPriority("PLANTMINE_village.*", 0.79, TEAM.AXIS); SetGoalPriority("DEFEND_sidewall.*", 0.51, TEAM.AXIS); SetGoalPriority("DEFEND_beach.*", 0.52, TEAM.AXIS); SetGoalPriority("DEFEND_ammo.*", 0.53, TEAM.AXIS); SetGoalPriority("MOUNTMG42_tower_east", 0.6, TEAM.AXIS); SetGoalPriority("SNIPE_village.*", 0.82, TEAM.AXIS); SetGoalPriority("FLAG.*", 0.55, TEAM.AXIS, 0, true); SetGoalPriority("FLAG.*", 0.55, TEAM.ALLIES); SetGoalPriority("ESCORT_ship", 0.58, TEAM.ALLIES); SetGoalPriority("SNIPE_allied.*", 0.82, TEAM.ALLIES); SetGoalPriority("GRENADE_tower_mg.*", 0.6, TEAM.ALLIES); SetGoalPriority("PLANT_Neutral_Command_Post", 0.51, 0, CLASS.ENGINEER); SetGoalPriority("REPAIRMG42_.*", 0.88, TEAM.AXIS); Map.Spawn_Changed(); // Max users per goal Util.SetMaxUsersInProgress( 3, "ATTACK_.*" ); Util.SetMaxUsersInProgress( 1, "BUILD_Neutral_Command_Post" ); Util.SetMaxUsers( 2, "ESCORT_ship" ); Util.SetMaxUsers( 1, "GRENADE_.*" ); Util.SetMaxUsers( 1, "DEFEND_.*" ); Util.SetMaxUsers( 1, "MOUNTMG42_.*" ); Util.SetMaxUsers( 1, "REPAIRMG42_.*" ); // Camp times SetMapGoalProperties( "DEFEND_.*", {mincamptime=40, maxcamptime=90} ); SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=200, MaxCampTime=500} ); SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=20, MaxCampTime=200} ); SetMapGoalProperties( "SNIPE_.*", {MinCampTime=60, MaxCampTime=120} ); Util.SetGoalOffset(-30, 30, -20, "MOUNTMG42_bunker_south"); Util.SetGoalOffset(-30, 0, -20, "MOUNTMG42_bunker_center"); Util.SetGoalOffset(-20, -20, -20, "MOUNTMG42_bunker_north"); Util.SetGoalOffset(0, 30, -30, "MOUNTMG42_tower_west"); Util.SetGoalOffset(0, 30, -30, "MOUNTMG42_tower_east"); Util.AddUseWp("PLANT_Side_Wall", "sidewall1"); Util.AddUseWp("PLANT_Submarine", "submarine1"); Util.AddUseWp("PLANT_Submarine", "submarine2"); Util.AddUseWp("PLANT_Submarine", "submarine3"); Util.AddUseWp("PLANT_Submarine", "submarine4"); ETUtil.SetAimModeForMount("MOUNT_ship", "velocity"); ETUtil.SetStartIndex("BUILD_allies_assault_boat", 2); GetGoal("BUILD_allies_assault_boat").PaththroughFunction = function(_this) { bot = _this.Bot; if (bot.GetPosition().z < 500){ ent = GetGoal("MOVER_ship").GetEntity(); k = 1; if (bot.DistanceTo(GetEntityWorldSpace(ent, Vector3(-210,-390,-170))) < bot.DistanceTo(GetEntityWorldSpace(ent, Vector3(210,-390,-170)))) { k = -1; } //climb up the ship ladder v = GetEntFacing(ent); _this.AddAimRequest(Priority.High, "facing", Vector3(-v.y * k, v.x * k, 3)); sleep(0.3); bot.HoldButton(BTN.FORWARD, 4); pos = GetEntityWorldSpace(ent, Vector3(0,-370,-70)); for(i=0; i<=40 && bot.DistanceTo(pos) > 100; i+=1) { sleep(0.1); } bot.ReleaseButton(BTN.FORWARD); } }; Util.SetGoalRange("GRENADE_tower_mg_east", 0); Util.SetGoalRange("GRENADE_tower_mg_west", 0); MapRoutes = { FLAG_ammoBox1 = { ROUTE_allied_spawn = { ROUTE_allied1 = {}, ROUTE_allied2 = {}, } }, PLANT_Side_Wall = { ROUTE_allied_spawn = { ROUTE_ammo = {}, ROUTE_beach = {}, }, ROUTE_bunker_spawn = { ROUTE_sidewall_north = {}, ROUTE_sidewall_south = {}, }, }, PLANT_Submarine = { ROUTE_bunker_spawn = { ROUTE_sidewall = { Weight=2, ROUTE_submarine_north = {}, ROUTE_submarine_bridge = { Weight=2 }, }, ROUTE_entrance = { ROUTE_submarine_north = {}, ROUTE_stairs_east = { ROUTE_submarine_bridge = {} }, }, } }, DEFEND_sidewall1 = { ROUTE_axis_spawn = { ROUTE_axis_door = {}, ROUTE_axis_stairs = { Weight=2 }, } }, MOUNTMG42_tower_east = { ROUTE_axis_spawn = { ROUTE_stairs_east = {}, }, ROUTE_axis_spawn2 = { ROUTE_stairs_east = {}, }, }, MOUNTMG42_tower_west = { ROUTE_axis_spawn = { ROUTE_stairs_west = {}, }, ROUTE_axis_spawn2 = { ROUTE_stairs_west = {}, }, }, }; MapRoutes.FLAG_ammoBox2 = MapRoutes.FLAG_ammoBox1; MapRoutes.FLAG_ammoBox3 = MapRoutes.FLAG_ammoBox1; MapRoutes.ATTACK_sidewall1 = MapRoutes.PLANT_Side_Wall; MapRoutes.ATTACK_sidewall2 = MapRoutes.ATTACK_sidewall1; MapRoutes.ATTACK_sidewall3 = MapRoutes.ATTACK_sidewall1; MapRoutes.ATTACK_sidewall4 = MapRoutes.ATTACK_sidewall1; MapRoutes.DEFEND_sidewall2 = MapRoutes.DEFEND_sidewall1; MapRoutes.DEFEND_sidewall3 = MapRoutes.DEFEND_sidewall1; MapRoutes.DEFEND_sidewall5 = MapRoutes.DEFEND_sidewall1; MapRoutes.ATTACK_submarine1 = MapRoutes.PLANT_Submarine; MapRoutes.ATTACK_submarine2 = MapRoutes.ATTACK_submarine1; MapRoutes.ATTACK_submarine3 = MapRoutes.ATTACK_submarine1; MapRoutes.ATTACK_submarine4 = MapRoutes.ATTACK_submarine1; Util.Routes(MapRoutes); Util.MapDebugPrint( "Omni-bot map script for " + GetMapName() + " executed." ); }; global OnBotJoin = function( bot ) { Map.SetSpawn1(bot); };