//========================================================================================== // // alcatraz_b4.gm // // Who When What //------------------------------------------------------------------------------------------ // palota 03 August 2010 Initial Script // palota 10 November 2011 fixed Hostage_Killed and Hostage_Revived triggers, removed AMMOCAB_north_grate and AMMOCAB_south_grate, added AMMOCAB_north_ammocabinet and HEALTHCAB_north_healthcabinet, added MG42_south, mg42 facing //========================================================================================== // global Map = { Debug=0, Movers = { "MOVER_hostage", "MOVER_ship" }, phase = 0, hostageDead = false, grateDoor1Opened = false, grateDoor2Opened = false, Navigation = { grate1 = { EvalFunc = function(_this) { return !Map.grateDoor1Opened && _this.Bot.GetTeam()==TEAM.AXIS; }, navigate = function(_this) { _this.AddAimRequest(Priority.High, "position", Vector3(2259.587, -505.125, 843.902)); _this.Goto(Vector3(2260.560, -539.842, 808.125)); sleep(0.5); _this.Bot.PressButton(BTN.USE); } }, grate2 = { EvalFunc = function(_this) { return !Map.grateDoor2Opened && _this.Bot.GetTeam()==TEAM.AXIS; }, navigate = function(_this) { _this.AddAimRequest(Priority.High, "position", Vector3(2211.750, 486.875, 845.041)); _this.Goto(Vector3(2211.321, 445.769, 808.125)); sleep(0.3); _this.Bot.PressButton(BTN.USE); } }, }, Defend_Key1 = function( trigger ) { sleep(10); SetAvailableMapGoals(TEAM.ALLIES, true, "DEFEND_key1.*" ); Util.MapDebugPrint( "Defend_Key1" ); }, Back_Door_Destroyed = function() { if(Map.phase<10) { Map.phase=10; SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_main_door.*" ); SetAvailableMapGoals(TEAM.AXIS, true, { "FLAG_industry_key", "CAPPOINT_key1", "ATTACK_industry.*", "HEALTHCAB_building64", "MOBILEMORTAR_lower", }); SetAvailableMapGoals(TEAM.ALLIES, true, { "AMMOCAB_key2.*", "MOBILEMG42_industry1", "SNIPE_roof1", }); Util.EnableGoal( "AMMOCAB_key1_room" ); Util.EnableGoal( "HEALTHCAB_industry" ); } }, Back_Door_Lower_Destroyed = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, true, "ROUTE_lower_door" ); Map.Back_Door_Destroyed(); Util.MapDebugPrint( "Back_Door_Lower_Destroyed" ); }, Back_Door_upper_Destroyed = function( trigger ) { SetAvailableMapGoals( TEAM.AXIS, true, "ROUTE_upper_back_door" ); Map.Back_Door_Destroyed(); Util.MapDebugPrint( "Back_Door_upper_Destroyed" ); }, industry_key_Taken = function( trigger ) { SetAvailableMapGoals(TEAM.ALLIES, true, "DEFEND_industry.*" ); Util.MapDebugPrint( "industry_key_Taken" ); }, industry_key_Returned = function( trigger ) { Util.MapDebugPrint( "industry_key_Returned" ); }, industry_key_Secured = function( trigger ) { Map.phase=20; SetAvailableMapGoals(TEAM.ALLIES, false, { "DEFEND_key1.*", "MOBILEMORTAR_upper", }); SetAvailableMapGoals(TEAM.AXIS, false, { "FLAG_industry_key", "CAPPOINT_key1", "ATTACK_industry.*", }); SetAvailableMapGoals(TEAM.AXIS, true, { "FLAG_jail_key", "CAPPOINT_key2", "ATTACK_main_door.*", "AMMOCAB_key2.*", }); Util.EnableGoal("AMMOCAB_north_ammocabinet"); Util.EnableGoal("HEALTHCAB_north_healthcabinet"); Util.MapDebugPrint( "industry_key_Secured" ); }, jail_key_Taken = function( trigger ) { SetAvailableMapGoals(TEAM.AXIS, false, "MOBILEMORTAR_lower" ); SetAvailableMapGoals(TEAM.ALLIES, true, { "DEFEND_main_door.*", ".*MG42_south", }); Util.MapDebugPrint( "jail_key_Taken" ); }, jail_key_Returned = function( trigger ) { SetAvailableMapGoals(TEAM.ALLIES, false, { "DEFEND_main_door.*", ".*MG42_south", }); Util.MapDebugPrint( "jail_key_Returned" ); }, jail_key_Secured = function( trigger ) { sleep(3); //wait until the door is opened Map.phase=30; SetAvailableMapGoals(TEAM.ALLIES, false, { "DEFEND_industry.*", "MOBILEMG42_industry.*", "DEFEND_main_door.*", "ATTACK_lower.*", ".*MG42_south", "AIRSTRIKE_mg", }); SetAvailableMapGoals(TEAM.AXIS, false, { "FLAG_jail_key", "CAPPOINT_key2", "ATTACK_main_door.*", "BUILD_Axis_Escort_Boat", }); SetAvailableMapGoals(TEAM.AXIS, true, "PLANT_.*c_Cell" ); //PLANT_DRiRelc_Cell or PLANT_1D0Ri^1R0el1^0c_Cell SetAvailableMapGoals(TEAM.AXIS, true, { "BUILD_Command_Post", "CHECKPOINT_depotflag", "ATTACK_prison.*", }); SetAvailableMapGoals(TEAM.ALLIES, true, { "DEFEND_prison.*", "PLANT_backyard_wall.*", }); Util.DisableGoal("SNIPE.*"); Util.DisableGoal(".*Axis_MG42_Construction"); Util.DisableGoal("MOUNT_boat"); Util.EnableGoal("HEALTHCAB_dining.*"); Util.EnableGoal("AMMOCAB_command_post.*"); Util.EnableGoal("PLANT_Command_Post"); Map.SetHostage(true); foreach (bot in BotTable) { //kill sniper if (bot.GetPosition().z > 1600){ bot.ExecCommand("kill"); } } Util.MapDebugPrint( "jail_key_Secured" ); }, Flag_Allies = function( trigger ) { Util.SetPercentInProgress(90, "CHECKPOINT_depotflag"); Util.MapDebugPrint( "Flag_Allies" ); }, Flag_Axis = function( trigger ) { Util.SetPercentInProgress(30, "CHECKPOINT_depotflag"); Util.DisableGoal( ".*_Allied_MG42_Construction" ); Util.MapDebugPrint( "Flag_Axis" ); }, grate_door1_trigger = function( trigger ) { vel = ToVector(trigger.Action); Map.grateDoor1Opened = (vel.z < 0); }, grate_door2_trigger = function( trigger ) { vel = ToVector(trigger.Action); Map.grateDoor2Opened = (vel.z < 0); }, Cell_Destroyed = function( trigger ) { SetAvailableMapGoals(TEAM.AXIS, true, "BUILD_.*c_lock" ); //BUILD_DRiRelc_lock or BUILD_1D0Ri^1R0el1^0c_lock SetAvailableMapGoals(TEAM.ALLIES, true, "DEFEND_cell.*" ); Util.MapDebugPrint( "Cell_Destroyed" ); }, SetHostage = function(dead) { Map.hostageDead = dead; if(dead){ escort = 99; }else{ escort = 4; } Util.SetMaxUsersInUse(escort, "ESCORT_hostage"); foreach ( bot in BotTable ) { if(!dead && bot.GetTeam()==TEAM.ALLIES){ t=0; }else{ t=999999; } bot.IgnoreTarget(Map.hostageEntity, t); } }, SetSpawn1 = function(bot) { if(bot.GetTeam()==TEAM.AXIS) { if(Map.phase < 40){ bot.ChangeSpawnPoint(0); }else{ //escorting hostage if(Map.phase < 50){ bot.ChangeSpawnPoint(2); //flag }else if(Map.phase < 60){ bot.ChangeSpawnPoint(RandInt(1,2)); }else{ bot.ChangeSpawnPoint(1); //boat } } } //disable artillery if(Map.phase >= 40 && bot.GetClass()==CLASS.FIELDOPS){ bot.GetWeapon(WEAPON.BINOCULARS).PrimaryFire.SetTargetBias(CLASS.SOLDIER, 0); bot.GetWeapon(WEAPON.BINOCULARS).PrimaryFire.SetTargetBias(CLASS.MEDIC, 0); bot.GetWeapon(WEAPON.BINOCULARS).PrimaryFire.SetTargetBias(CLASS.ENGINEER, 0); bot.GetWeapon(WEAPON.BINOCULARS).PrimaryFire.SetTargetBias(CLASS.FIELDOPS, 0); bot.GetWeapon(WEAPON.BINOCULARS).PrimaryFire.SetTargetBias(CLASS.COVERTOPS, 0); } }, SetSpawn = function() { foreach(bot in BotTable) { Map.SetSpawn1(bot); } }, Hostage_Released = function( trigger ) { Map.phase=40; Map.SetSpawn(); SetAvailableMapGoals(TEAM.ALLIES, false, { "DEFEND_cell.*", "DEFEND_prison.*", }); SetAvailableMapGoals(TEAM.AXIS, false, "ATTACK_prison.*" ); SetAvailableMapGoals(TEAM.AXIS, true, "ESCORT_hostage" ); SetAvailableMapGoals(TEAM.ALLIES, true, { "ESCORT_hostage_allies", "PLANTMINE_south_east.*", }); Map.SetHostage(false); Util.OnTriggerPosition("MOVER_hostage", "main_door", 100.0, Map.Hostage_main_door); Util.MapDebugPrint( "Hostage_Released" ); }, Hostage_main_door = function( trigger ) { SetAvailableMapGoals(TEAM.ALLIES, true, "PLANTMINE_industry.*" ); Util.EnableGoal(".*MG42_south" ); Util.OnTriggerPosition("MOVER_hostage", "south_west", 150.0, Map.Hostage_south_west); Util.MapDebugPrint( "Hostage_main_door" ); }, Hostage_south_west = function( trigger ) { Map.phase=50; Map.SetSpawn(); Util.SetMaxUsersInProgress(1, "ESCORT_hostage_allies"); SetAvailableMapGoals(TEAM.ALLIES, false, "PLANTMINE_south_east.*" ); Util.DisableGoal(".*MG42_south" ); Util.OnTriggerPosition("MOVER_hostage", "industry_tower", 200.0, Map.Hostage_industry_tower); Util.MapDebugPrint( "Hostage_south_west" ); }, Hostage_industry_tower = function( trigger ) { SetAvailableMapGoals(TEAM.ALLIES, false, "PLANTMINE_industry.*" ); SetAvailableMapGoals(TEAM.ALLIES, true, "SNIPE_roof1" ); Util.OnTriggerPosition("MOVER_hostage", "industry_front", 300.0, Map.Hostage_industry_front); Util.MapDebugPrint( "Hostage_industry_tower" ); }, Hostage_industry_front = function( trigger ) { Map.phase=60; Map.SetSpawn(); SetAvailableMapGoals(TEAM.ALLIES, false, "SNIPE_roof1" ); SetAvailableMapGoals(TEAM.AXIS, true, { "BUILD_Axis_MG42_Construction", "REPAIRMG42_Axis_MG42_Construction", "BUILD_Axis_Escort_Boat", }); SetAvailableMapGoals(TEAM.ALLIES, true, { "PLANT_Axis_MG42_Construction", "ATTACK_lower.*", "MOBILEMORTAR_industry", }); Util.SetMaxUsersInProgress(50, "ESCORT_hostage_allies"); Util.OnTriggerPosition("MOVER_hostage", "tree", 350.0, Map.Hostage_tree); Util.MapDebugPrint( "Hostage_industry_front" ); }, Hostage_tree = function( trigger ) { SetAvailableMapGoals(TEAM.AXIS, true, { "MOUNTMG42_Axis_MG42_Construction", "MOUNT_boat", }); Util.MapDebugPrint( "Hostage_tree" ); }, Hostage_Killed = function( trigger ) { Map.SetHostage(true); Util.MapDebugPrint( "Hostage_Killed" ); }, Hostage_Revived = function( trigger ) { Map.SetHostage(false); Util.MapDebugPrint( "Hostage_Revived" ); }, }; global OnMapLoad = function() { // Register callback functions OnTrigger( "^1D^0Ri*^1R^0el^1!^0c* ^5has been taken hostage.", Map.Defend_Key1 ); OnTrigger( "axis_capture_depotflag", Map.Flag_Axis ); OnTrigger( "axis_reclaims_depotflag", Map.Flag_Axis ); OnTrigger( "allies_reclaims_depotflag", Map.Flag_Allies ); OnTrigger( "Axis Have Blown Lower Back Door!", Map.Back_Door_Lower_Destroyed ); OnTrigger( "Axis Have Blown Upper Back Door!", Map.Back_Door_upper_Destroyed ); OnTrigger( "Axis have stolen The Industry Key!", Map.industry_key_Taken ); OnTrigger( "Flag returned industry_key!", Map.industry_key_Returned ); OnTrigger( "Axis captured industrykey_holder", Map.industry_key_Secured ); OnTrigger( "Axis have stolen The Jail Main Door Key!", Map.jail_key_Taken ); OnTrigger( "Flag returned jail_key!", Map.jail_key_Returned ); OnTrigger( "Axis captured jailkey_holder", Map.jail_key_Secured ); OnTrigger( "Axis have breached the ^1D^0Ri*^1R^0el^1!^0c* Cell Door!", Map.Cell_Destroyed ); OnTrigger( "^1D^0Ri*^1R^0el^1!^0c*^5 has been released", Map.Hostage_Released ); OnTrigger( "lever1_goto", Map.grate_door1_trigger ); OnTrigger( "lever2_goto", Map.grate_door2_trigger ); //OnTrigger( "Allies have breached the BackYard Wall!", Map.backyard_wall_Destroyed ); OnTrigger( "^1D^0Ri*^1R^0el^1!^0c* ^5has been killed..", Map.Hostage_Killed ); OnTrigger( "^1D^0Ri*^1R^0el^1!^0c* ^5has been revived..", Map.Hostage_Revived ); Util.DisableGoal( ".*", true ); SetAvailableMapGoals( TEAM.AXIS, true, { "ATTACK_main_door.*", "PLANT_.*Back_Door_Lower", "PLANT_.*Back_Door_upper", "BUILD_Axis_MG42_Construction", "MOUNTMG42_Axis_MG42_Construction", "REPAIRMG42_Axis_MG42_Construction", "PLANT_Allied_MG42_Construction", "BUILD_Axis_Escort_Boat", "MOUNT_boat" }); SetAvailableMapGoals( TEAM.ALLIES, true, { "BUILD_Command_Post", "PLANT_Axis_MG42_Construction", "BUILD_Allied_MG42_Construction", "MOUNTMG42_Allied_MG42_Construction", "REPAIRMG42_Allied_MG42_Construction", "CHECKPOINT_depotflag", "HEALTHCAB_building64", "AIRSTRIKE_mg", "MOBILEMORTAR_upper", "ATTACK_lower.*" }); SetAvailableMapGoals( TEAM.AXIS, false, { "ROUTE_lower_door", "ROUTE_upper_back_door", }); SetGoalPriority("PLANT_Allied_MG42_Construction", 0.6, TEAM.AXIS, CLASS.ENGINEER); SetGoalPriority("PLANT_Axis_MG42_Construction", 0.6, TEAM.ALLIES, CLASS.ENGINEER); SetGoalPriority("DEFUSE_backyard_wall.*", 0, TEAM.AXIS, CLASS.ENGINEER, true); SetGoalPriority("DEFEND_cell.*", 0.51); SetGoalPriority("DEFEND_key1.*", 0.47); SetGoalPriority("ATTACK_lower.*", 0.45); SetGoalPriority("BUILD_Axis_Escort_Boat", 0.8); SetGoalPriority("PLANT_.*Back_Door_Lower", 0.91); SetGoalPriority("PLANT_.*c_Cell", 0.85); SetGoalPriority("PLANTMINE_south_east.*", 0.9); SetGoalPriority("SNIPE.*", 0.85); SetGoalPriority("ESCORT.*", 0.65); SetGoalPriority("FLAG.*", 0.69); // Max users per goal Util.SetMaxUsersInProgress(50, "ESCORT_hostage.*"); Util.SetMaxUsersInUse( 2, "ATTACK_.*" ); Util.SetMaxUsersInProgress( 4, "ATTACK_.*" ); Util.SetMaxUsersInProgress( 2, "DEFEND_.*" ); Util.SetMaxUsers( 1, ".*_Command_Post" ); Util.SetMaxUsers( 1, "MOUNTMG42_.*" ); Util.SetMaxUsers( 1, ".*Axis_MG42_Construction" ); Util.SetMaxUsers( 1, "PLANT_backyard_wall.*" ); Util.SetMaxUsers( 1, ".*MG42_south" ); // Camp times SetMapGoalProperties( "DEFEND_.*", {mincamptime=30, maxcamptime=100} ); SetMapGoalProperties( "MOUNTMG42_.*", {MinCampTime=15, MaxCampTime=90} ); SetMapGoalProperties( "MOBILEMG42_.*", {MinCampTime=60, MaxCampTime=300} ); SetMapGoalProperties( "SNIPE_.*", {MinCampTime=900, MaxCampTime=900} ); Util.SetGoalOffset(-30, -30, 0, "REPAIRMG42_Axis_MG42_Construction"); Util.AddUsePoint("REPAIRMG42_Axis_MG42_Construction", Vec3(2290, 2870, 184)); g=GetGoal("PLANT_Allies_Back_Door_upper"); if(g==null){ g=GetGoal("PLANT_8The_4Allies_8Back_Door_upper"); } g.AddUsePoint(Vector3(4801,1271,696)); g.AddUsePoint(Vector3(4875,1272,696)); Map.hostageEntity = GetGoal("MOVER_hostage").GetEntity(); MapRoutes = { FLAG_jail_key = { ROUTE_axis_spawn = { ROUTE_north_trees = { ROUTE_industry_north = {}, ROUTE_industry_back = {}, }, ROUTE_north_outside = { ROUTE_industry_south = {}, ROUTE_industry_back = {}, }, ROUTE_north_water = { ROUTE_industry_north = {}, ROUTE_industry_south = {}, }, }, }, CAPPOINT_key2 = { ROUTE_key2 = { ROUTE_north_outside = {}, ROUTE_industry_back = { Weight=2, ROUTE_south_outside = {} }, ROUTE_north_water = {}, }, }, DEFEND_industry7 = { ROUTE_flag = { ROUTE_south_outside = {} }, }, CHECKPOINT_depotflag = { ROUTE_backyard = { ROUTE_corridor_north = { Weight=2 }, ROUTE_corridor_south = {}, ROUTE_south_outside = { Weight=5 }, }, }, }; routePrison = { ROUTE_flag = { ROUTE_corridor_north = {}, ROUTE_corridor_south = {}, }, ROUTE_axis_spawn = { ROUTE_corridor_north = {}, ROUTE_corridor_south = {}, }, }; if (GetGoal("BUILD_DRiRelc_lock")!=null){ MapRoutes.BUILD_DRiRelc_lock = routePrison; MapRoutes.PLANT_DRiRelc_Cell = routePrison; }else{ MapRoutes["BUILD_1D0Ri^1R0el1^0c_lock"] = routePrison; MapRoutes["PLANT_1D0Ri^1R0el1^0c_Cell"] = routePrison; } MapRoutes.ATTACK_prison1 = routePrison; MapRoutes.ATTACK_prison2 = routePrison; MapRoutes.ATTACK_prison3 = routePrison; MapRoutes.ATTACK_industry1 = MapRoutes.FLAG_jail_key; MapRoutes.ATTACK_industry2 = MapRoutes.ATTACK_industry1; MapRoutes.ATTACK_industry3 = MapRoutes.ATTACK_industry1; MapRoutes.DEFEND_industry2 = MapRoutes.DEFEND_industry7; MapRoutes.DEFEND_industry3 = MapRoutes.DEFEND_industry7; MapRoutes.CAPPOINT_key1 = { ROUTE_key1 = MapRoutes.FLAG_jail_key.ROUTE_axis_spawn }; Util.Routes(MapRoutes); Util.MapDebugPrint( "Omni-bot map script for " + GetMapName() + " executed." ); }; global OnBotJoin = function( bot ) { bot.TargetBreakableDist = 120.0; bot.MaxViewDistance = 4500; Map.SetSpawn1(bot); if (Map.phase>=40 && (Map.hostageDead || bot.GetTeam()==TEAM.AXIS)){ bot.IgnoreTarget(Map.hostageEntity, 999999); } };