#define OBJECTIVE_AREA22_DESTROY_JAMMER 0 #define OBJECTIVE_AREA22_DESTROY_ENTRANCE 1 #define OBJECTIVE_AREA22_DESTROY_CORE 2 #define A22_STROGG_DEPLOY_BASE 0 // turn on at start #define A22_GDF_DEPLOY_BASE 1 // turn on at start #define A22_OBJECTIVE_STROGG_SPAWN1 2 // turn on at start #define A22_STROGG_ATTACK_STROGG_SPAWN1 3 #define A22_STROGG_DEFEND_STROGG_SPAWN1 4 #define A22_GDF_ATTACK_STROGG_SPAWN1 5 #define A22_GDF_DEFEND_STROGG_SPAWN1 6 // turn on at start #define A22_OBJECTIVE_GDF_SPAWN1 7 // turn on at start #define A22_STROGG_ATTACK_GDF_SPAWN1 8 #define A22_STROGG_DEFEND_GDF_SPAWN1 9 #define A22_GDF_DEFEND_GDF_SPAWN1 10 #define A22_GDF_ATTACK_GDF_SPAWN1 11 #define A22_OBJECTIVE_GENERATOR 12 // turn on at start #define A22_STROGG_ATTACK_GENERATOR 13 // turn on at start #define A22_GDF_DEFEND_GENERATOR 14 // turn on at start #define A22_GDF_DEPLOY_GENERATOR 15 #define A22_OBJECTIVE_STROGG_SPAWN2 16 #define A22_STROGG_DEPLOY_GENERATOR 17 #define A22_STROGG_ATTACK_STROGG_SPAWN2 18 #define A22_STROGG_DEFEND_STROGG_SPAWN2 19 #define A22_GDF_ATTACK_STROGG_SPAWN2 20 // turn on at mining laser obj #define A22_GDF_DEFEND_STROGG_SPAWN2 21 #define A22_OBJECTIVE_LASER 22 #define A22_STROGG_ATTACK_LASER 23 #define A22_GDF_DEFEND_LASER 24 #define A22_GDF_DEPLOY_LASER 25 #define A22_OBJECTIVE_STROGG_SPAWN3 26 #define A22_STROGG_DEPLOY_LASER 27 #define A22_STROGG_ATTACK_STROGG_SPAWN3 28 #define A22_STROGG_DEFEND_STROGG_SPAWN3 29 #define A22_GDF_ATTACK_STROGG_SPAWN3 30 // turn on at slipgate #define A22_GDF_DEFEND_STROGG_SPAWN3 31 #define A22_OBJECTIVE_SLIPGATE 32 #define A22_STROGG_ATTACK_SLIPGATE 33 #define A22_GDF_DEFEND_SLIPGATE 34 #define A22_STROGG_OBJECTIVE_DOOR 35 #define A22_STROGG_REPAIR_LASER 40 #define A22_GDF_LANDMINE_LASER 41 #define A22_MINING_LASER_CONSTRUCTED 43 // bots move toward slipgate bunker after laser is built and before door is destroyed #define A22_GDF_GUN3_NOT_CONSTRUCTED 44 #define A22_GDF_GUN3_CONSTRUCTED 45 /* targetRouteID's 1 == EMP Generator 2 == mining laser 3 == slipgate */ object mapObject_Area22 : mapObject_Default { void destroy(); void InitObjectives(); void CompleteObjective( float index, entity p ); handle GetObjectiveMessage( float index ); void OnTimeLimitHit(); void OnDestroyJammer(); void OnEntranceDestroyed(); void OnCoreDestroyed(); void OnMiningLaserDeployed( entity other ); void OnMiningLaserConstructed( entity other ); void OnConstructionComplete( entity obj ); void OnDestructionComplete( entity obj ); void OnGun1Built(); void OnGun1Destroyed(); void OnGun2Built(); void OnGun2Destroyed(); void OnGun3Built(); void OnGun3Destroyed(); void OnServiceDoorDestroyed(); vector GetGDFBasePosition() { return '11150 -980 1050'; } void ZapporCallThread(); void JammerDestroyThread(); void JammerEffectsThread(); void EntranceEffectsThread(); void StartFirstObjective(); void OnSpawnCaptured( string actionName ); void OnSpawnLiberated( string actionName ); void NeededClassFirstObjective(); entity GetSpectateEntity(); float mainObjectiveIndex; float botObstacles; // ---------------------------- entity gdfBaseTerritory; entity jammerTerritory; entity middleTerritory; entity stroggBaseTerritory; entity gdfBaseSpawn; entity gdfCommsSpawn; entity stroggBaseSpawn; entity stroggWarehouseSpawn; entity stroggJammerSpawn; entity gdfJammerSpawn; entity stroggMiddleSpawn; entity gdfBunkerSpawn; entity stroggBunkerSpawn; entity stroggZapporSpawn; entity main_strogg_base; entity main_gdf_base; entity objective1Marker; entity objective2Marker; entity objective3Marker; entity objective1Arrow1; entity objective1Arrow2; entity objective2Arrow1; entity objective2Arrow2; entity objective2Arrow3; entity objective3Arrow1; entity objective3Arrow2; entity tunnelMainEntrance; entity slipgateCore; entity generator_sparks_1; entity generator_sparks_2; entity generator_sparks_3; entity generator_sparks_4; entity generator_sparks_5; entity generator_blowout_1; entity generator_blowout_2; entity boardroom_glass; entity boardroom_glass_broken; entity generator_windowsmash; entity entrance_sparks_1; entity entrance_sparks_2; entity entrance_sparks_3; entity entrance_sparks_4; entity entrance_smoke; entity entrance_smoke_2; entity entrance_side_explosion; entity zapporCaller; entity jammer; entity jammerEffectsIdle; entity jammerEffectsShutdown; entity generatorDestroyed; entity tunnelMelteddoor; entity serviceDoor; entity gun1Construction; entity gun2Construction; entity gun3Construction; entity noplant_generator; entity noplant_service_door; entity noplant_slipgate_core; entity endCameraA; entity endCameraB; // bot obstacles entity slipgateObstacle1; entity slipgateObstacle2; entity accessdoorObstacle; entity glasswindowObstacle; cvar debug_script; } mapObject_Base Area22_MapScript() { return new mapObject_Area22; } void mapObject_Area22::destroy() { } void mapObject_Area22::InitObjectives() { gameRules.setWinningTeam( gdfTeam ); gdfTeam.SetRespawnWait( 20 ); stroggTeam.SetRespawnWait( 20 ); gdfTeam.InitRespawnTimeChange(); stroggTeam.InitRespawnTimeChange(); CreateRespawnTimeThread( stroggTeam ); // ---------------------------- gdfBaseTerritory = worldspawn.getEntityKey( "script_territory_gdf_base" ); jammerTerritory = worldspawn.getEntityKey( "script_territory_jammer" ); middleTerritory = worldspawn.getEntityKey( "script_territory_middle" ); stroggBaseTerritory = worldspawn.getEntityKey( "script_territory_strogg_base" ); gdfBaseSpawn = worldspawn.getEntityKey( "script_spawnmaster_gdf_base" ); gdfCommsSpawn = worldspawn.getEntityKey( "script_spawnmaster_comms_gdf" ); stroggWarehouseSpawn = worldspawn.getEntityKey( "script_spawnmaster_warehouse_strogg" ); stroggBaseSpawn = worldspawn.getEntityKey( "script_spawnmaster_strogg_base" ); stroggJammerSpawn = worldspawn.getEntityKey( "script_spawnmaster_jammer_strogg" ); gdfJammerSpawn = worldspawn.getEntityKey( "script_spawnmaster_jammer_gdf" ); stroggMiddleSpawn = worldspawn.getEntityKey( "script_spawnmaster_middle_strogg" ); gdfBunkerSpawn = worldspawn.getEntityKey( "script_spawnmaster_bunker_gdf" ); stroggZapporSpawn = worldspawn.getEntityKey( "script_spawnmaster_zappor_strogg" ); stroggBunkerSpawn = worldspawn.getEntityKey( "script_spawnmaster_bunker_strogg" ); main_strogg_base = worldspawn.getEntityKey( "script_spawnmaster_strogg_base" ); main_gdf_base = worldspawn.getEntityKey( "script_spawnmaster_gdf_base" ); objective1Arrow1 = worldspawn.getEntityKey( "script_obj1_arrow1" ); objective1Arrow2 = worldspawn.getEntityKey( "script_obj1_arrow2" ); objective2Arrow1 = worldspawn.getEntityKey( "script_obj2_arrow1" ); objective2Arrow2 = worldspawn.getEntityKey( "script_obj2_arrow2" ); objective3Arrow1 = worldspawn.getEntityKey( "script_obj3_arrow1" ); objective3Arrow2 = worldspawn.getEntityKey( "script_obj3_arrow2" ); objective1Marker = worldspawn.getEntityKey( "script_obj1_marker" ); objective2Marker = worldspawn.getEntityKey( "script_obj2_marker" ); objective3Marker = worldspawn.getEntityKey( "script_obj3_marker" ); generator_sparks_1 = worldspawn.getEntityKey( "script_generator_sparks_1" ); generator_sparks_2 = worldspawn.getEntityKey( "script_generator_sparks_2" ); generator_sparks_3 = worldspawn.getEntityKey( "script_generator_sparks_3" ); generator_sparks_4 = worldspawn.getEntityKey( "script_generator_sparks_4" ); generator_sparks_5 = worldspawn.getEntityKey( "script_generator_sparks_5" ); generator_blowout_1 = worldspawn.getEntityKey( "script_generator_blowout_1" ); generator_blowout_2 = worldspawn.getEntityKey( "script_generator_blowout_2" ); generator_windowsmash = worldspawn.getEntityKey( "script_generator_windowsmash" ); boardroom_glass = worldspawn.getEntityKey( "script_boardroom_glass" ); boardroom_glass_broken = worldspawn.getEntityKey( "script_boardroom_glass_broken" ); entrance_sparks_1 = worldspawn.getEntityKey( "script_entrance_sparks_1" ); entrance_sparks_2 = worldspawn.getEntityKey( "script_entrance_sparks_2" ); entrance_sparks_3 = worldspawn.getEntityKey( "script_entrance_sparks_3" ); entrance_sparks_4 = worldspawn.getEntityKey( "script_entrance_sparks_4" ); entrance_smoke = worldspawn.getEntityKey( "script_entrance_smoke" ); entrance_smoke_2 = worldspawn.getEntityKey( "script_entrance_smoke_2" ); entrance_side_explosion = worldspawn.getEntityKey( "script_entrance_side_explosion" ); tunnelMainEntrance = worldspawn.getEntityKey( "script_tunnel_entrance" ); slipgateCore = worldspawn.getEntityKey( "script_slipgate_core" ); zapporCaller = worldspawn.getEntityKey( "script_zappor_caller" ); tunnelMelteddoor = worldspawn.getEntityKey( "script_tunnel_melted_door" ); jammer = worldspawn.getEntityKey( "script_jammer" ); jammerEffectsIdle = worldspawn.getEntityKey( "script_jammer_effects_idle" ); jammerEffectsShutdown = worldspawn.getEntityKey( "script_jammer_effects_shutdown" ); endCameraA = worldspawn.getEntityKey( "script_placement_camera_a" ); endCameraB = worldspawn.getEntityKey( "script_placement_camera_b" ); generatorDestroyed = worldspawn.getEntityKey( "script_generator_destroyed" ); serviceDoor = worldspawn.getEntityKey( "script_service_door" ); gun1Construction = worldspawn.getEntityKey( "script_gun_1" ); gun2Construction = worldspawn.getEntityKey( "script_gun_2" ); gun3Construction = worldspawn.getEntityKey( "script_gun_3" ); noplant_generator = worldspawn.getEntityKey( "script_noplant_generator" ); noplant_service_door = worldspawn.getEntityKey( "script_noplant_service_door" ); noplant_slipgate_core = worldspawn.getEntityKey( "script_noplant_slipgate_core" ); // bot obstacles slipgateObstacle1 = worldspawn.getEntityKey( "script_slipgate_obstacle1" ); slipgateObstacle2 = worldspawn.getEntityKey( "script_slipgate_obstacle2" ); accessdoorObstacle = worldspawn.getEntityKey( "script_accessdoor_obstacle" ); glasswindowObstacle = worldspawn.getEntityKey( "script_glass_window_obstacle" ); debug_script = sys.getCVar( "bot_debugMapScript", "1" ); CreateDeployTasks(); // ---------------------------- stroggBaseTerritory.setActive( true ); jammerTerritory.setActive( true ); middleTerritory.setActive( false ); gdfBaseTerritory.setActive( false ); gdfCommsSpawn.setGameTeam( gdfTeam ); gdfJammerSpawn.setGameTeam( gdfTeam ); stroggJammerSpawn.setGameTeam( $null_entity ); stroggZapporSpawn.vSetActive( false ); stroggMiddleSpawn.setGameTeam( $null_entity ); stroggBunkerSpawn.vSetActive( false ); gdfBunkerSpawn.setGameTeam( $null_entity ); objective1Arrow1.setGameTeam( stroggTeam ); objective1Arrow2.setGameTeam( stroggTeam ); objective2Arrow1.setGameTeam( stroggTeam ); objective2Arrow2.setGameTeam( stroggTeam ); objective3Arrow1.setGameTeam( stroggTeam ); objective3Arrow2.setGameTeam( stroggTeam ); objective1Arrow1.vStartObjective(); objective1Arrow2.vStartObjective(); objective1Marker.vStartObjective(); objective2Marker.vStartObjective(); objective3Marker.vStartObjective(); tunnelMainEntrance.setTakesDamage( 0 ); slipgateCore.setTakesDamage( 0 ); mainObjectiveIndex = OBJECTIVE_AREA22_DESTROY_JAMMER; objManager.setNextObjective( gdfTeam, mainObjectiveIndex ); objManager.setNextObjective( stroggTeam, mainObjectiveIndex ); gameRules.setEndGameCamera( endCameraB ); gun2Construction.vCreateMission(); generatorDestroyed.hide(); generatorDestroyed.forceDisableClip(); boardroom_glass_broken.hide(); boardroom_glass_broken.forceDisableClip(); tunnelMelteddoor.hide(); thread StartFirstObjective(); if ( debug_script.getBoolValue() ) { sys.print( "********** BOTS SETUP FOR GENERATOR OBJECTIVE **********\n" ); } objManager.setAttackingTeam( STROGG ); objManager.setBotSightDist( 3000.0f ); objManager.setPrimaryTeamAction( STROGG, "strogg_generator_1" ); objManager.setPrimaryTeamAction( GDF, "strogg_generator_1" ); objManager.activateBotActionGroup( A22_STROGG_DEPLOY_BASE ); objManager.activateBotActionGroup( A22_GDF_DEPLOY_BASE ); objManager.activateBotActionGroup( A22_OBJECTIVE_STROGG_SPAWN1 ); objManager.activateBotActionGroup( A22_STROGG_ATTACK_STROGG_SPAWN1 ); objManager.activateBotActionGroup( A22_GDF_DEFEND_STROGG_SPAWN1 ); objManager.activateBotActionGroup( A22_STROGG_ATTACK_GDF_SPAWN1 ); objManager.activateBotActionGroup( A22_GDF_DEFEND_GDF_SPAWN1 ); objManager.activateBotActionGroup( A22_OBJECTIVE_GDF_SPAWN1 ); objManager.activateBotActionGroup( A22_OBJECTIVE_GENERATOR ); objManager.activateBotActionGroup( A22_STROGG_ATTACK_GENERATOR ); objManager.activateBotActionGroup( A22_GDF_DEFEND_GENERATOR ); objManager.setBotCriticalClass( GDF, ENGINEER ); objManager.setBotCriticalClass( STROGG, SOLDIER ); // setup strogg rear spawn objManager.setTeamUseRearSpawn( STROGG, true ); objManager.setTeamUseRearSpawnPercentage( STROGG, 100 ); stroggTeam.setTeamRearSpawn( stroggBaseSpawn ); // setup gdf rear spawn objManager.setTeamUseRearSpawn( GDF, true ); gdfTeam.setTeamRearSpawn( gdfBaseSpawn ); objManager.setTeamUseRearSpawnPercentage( STROGG, 50 ); thread NeededClassFirstObjective(); } void mapObject_Area22::NeededClassFirstObjective() { sys.wait( 10 ); if ( debug_script.getBoolValue() ) { sys.print( "********** SET UP CLASSES NEEDED FOR FIRST OBJECTIVE **********\n" ); } objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false ); objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 3, true, false ); objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, false, false ); objManager.setTeamNeededClass( STROGG, FIELDOPS, NOCLASS, 1, false, false ); objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 3, true, false ); } // ========================================== void mapObject_Area22::CompleteObjective( float index, entity p ) { if ( index == OBJECTIVE_AREA22_DESTROY_JAMMER ) { OnDestroyJammer(); } else if ( index == OBJECTIVE_AREA22_DESTROY_ENTRANCE ) { OnEntranceDestroyed(); } else if ( index == OBJECTIVE_AREA22_DESTROY_CORE ) { OnCoreDestroyed(); } } handle mapObject_Area22::GetObjectiveMessage( float index ) { if ( index == OBJECTIVE_AREA22_DESTROY_JAMMER ) { return sys.localizeString( "maps/area22/obj_destroy_jammer" ); } if ( index == OBJECTIVE_AREA22_DESTROY_ENTRANCE ) { return sys.localizeString( "maps/area22/obj_destroy_ent" ); } if ( index == OBJECTIVE_AREA22_DESTROY_CORE ) { return sys.localizeString( "maps/area22/obj_destroy_core" ); } return g_locStr_BadObjective; } // ========================================== void mapObject_Area22::OnConstructionComplete( entity obj ) { if ( obj == gun1Construction ) { OnGun1Built(); } else if ( obj == gun2Construction ) { OnGun2Built(); } else if ( obj == gun3Construction ) { OnGun3Built(); } } void mapObject_Area22::OnDestructionComplete( entity obj ) { if ( obj == serviceDoor ) { OnServiceDoorDestroyed(); } else if ( obj == gun1Construction ) { OnGun1Destroyed(); } else if ( obj == gun2Construction ) { OnGun2Destroyed(); } else if ( obj == gun3Construction ) { OnGun3Destroyed(); } } void mapObject_Area22::OnGun1Built() { gun1Construction.vCompleteMission(); } void mapObject_Area22::OnGun1Destroyed() { gun1Construction.vCreateMission(); } void mapObject_Area22::OnGun2Built() { gun2Construction.vCompleteMission(); } void mapObject_Area22::OnGun2Destroyed() { if ( mainObjectiveIndex < OBJECTIVE_AREA22_DESTROY_CORE ) { gun2Construction.vCreateMission(); } } void mapObject_Area22::OnGun3Built() { gun3Construction.vCompleteMission(); objManager.deactivateBotActionGroup( A22_GDF_GUN3_NOT_CONSTRUCTED ); objManager.activateBotActionGroup( A22_GDF_GUN3_CONSTRUCTED ); } void mapObject_Area22::OnGun3Destroyed() { gun3Construction.vCreateMission(); objManager.deactivateBotActionGroup( A22_GDF_GUN3_CONSTRUCTED ); objManager.activateBotActionGroup( A22_GDF_GUN3_NOT_CONSTRUCTED ); } void mapObject_Area22::OnServiceDoorDestroyed() { accessdoorObstacle.activate( accessdoorObstacle ); objManager.killBotActionGroup( A22_STROGG_OBJECTIVE_DOOR ); noplant_service_door.remove(); serviceDoor.vCompleteMission(); } void mapObject_Area22::ZapporCallThread() { sys.wait( 15.f ); zapporCaller.vOnDeploy(); } void mapObject_Area22::JammerDestroyThread() { generatorDestroyed.show(); sys.wait( 0.5f ); generatorDestroyed.forceEnableClip(); glasswindowObstacle.activate( glasswindowObstacle ); } void mapObject_Area22::JammerEffectsThread() { // ========================================== // DAVE THE BROKEN WINDOWS NEED TO HAPPEN HERE // CAPS LOCKS MAKES SHOUTY! // ========================================== boardroom_glass.hide(); boardroom_glass.forceDisableClip(); boardroom_glass_broken.show(); boardroom_glass_broken.forceEnableClip(); generator_blowout_1.vTriggerParticleEffect( 1 ); generator_blowout_2.vTriggerParticleEffect( 1 ); generator_windowsmash.vTriggerParticleEffect( 1 ); sys.wait( 0.7f ); generator_sparks_1.vTriggerParticleEffect( 1 ); sys.wait( 1.0f ); generator_sparks_2.vTriggerParticleEffect( 1 ); sys.wait( 1.2f ); generator_sparks_3.vTriggerParticleEffect( 1 ); generator_sparks_4.vTriggerParticleEffect( 1 ); sys.wait( 1.4f ); generator_sparks_5.vTriggerParticleEffect( 1 ); } void mapObject_Area22::OnDestroyJammer() { mainObjectiveIndex = OBJECTIVE_AREA22_DESTROY_ENTRANCE; objManager.setNextObjective( gdfTeam, mainObjectiveIndex ); objManager.setNextObjective( stroggTeam, mainObjectiveIndex ); thread JammerDestroyThread(); jammerEffectsIdle.remove(); jammerEffectsShutdown.vTriggerParticleEffect( 1 ); thread ZapporCallThread(); thread JammerEffectsThread(); jammer.vCompleteMission(); StopTimedMission(); jammerTerritory.setGameTeam( stroggTeam ); stroggJammerSpawn.setGameTeam( stroggTeam ); gdfJammerSpawn.setGameTeam( $null_entity ); gdfCommsSpawn.vSetActive( false ); stroggZapporSpawn.vSetActive( true ); stroggWarehouseSpawn.vSetActive( false ); stroggWarehouseSpawn.setGameTeam( stroggTeam ); stroggBaseTerritory.setActive( false ); jammerTerritory.setActive( true ); middleTerritory.setActive( true ); objective1Arrow1.vFinishObjective(); objective1Arrow2.vFinishObjective(); objective2Arrow1.vStartObjective(); objective2Arrow2.vStartObjective(); objective1Marker.vFinishObjective(); objManager.SetObjectiveEntity( $null_entity, -1 ); noplant_generator.remove(); gun1Construction.vCreateMission(); tunnelMainEntrance.setTakesDamage( 1 ); stroggTeam.SetRespawnWait( 20 ); ResetRespawnTimeThread(); if ( debug_script.getBoolValue() ) { sys.print( "********** BOTS SETUP FOR LASER OBJECTIVE **********\n" ); } objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL ); objManager.killBotActionGroup( A22_STROGG_DEPLOY_BASE ); objManager.killBotActionGroup( A22_GDF_DEPLOY_BASE ); objManager.killBotActionGroup( A22_OBJECTIVE_STROGG_SPAWN1 ); objManager.killBotActionGroup( A22_STROGG_ATTACK_STROGG_SPAWN1 ); objManager.killBotActionGroup( A22_STROGG_DEFEND_STROGG_SPAWN1 ); objManager.killBotActionGroup( A22_GDF_ATTACK_STROGG_SPAWN1 ); objManager.killBotActionGroup( A22_GDF_DEFEND_STROGG_SPAWN1 ); objManager.killBotActionGroup( A22_OBJECTIVE_GDF_SPAWN1 ); objManager.killBotActionGroup( A22_STROGG_ATTACK_GDF_SPAWN1 ); objManager.killBotActionGroup( A22_STROGG_DEFEND_GDF_SPAWN1 ); objManager.killBotActionGroup( A22_GDF_DEFEND_GDF_SPAWN1 ); objManager.killBotActionGroup( A22_GDF_ATTACK_GDF_SPAWN1 ); objManager.killBotActionGroup( A22_OBJECTIVE_GENERATOR ); objManager.killBotActionGroup( A22_STROGG_ATTACK_GENERATOR ); objManager.killBotActionGroup( A22_GDF_DEFEND_GENERATOR ); objManager.activateBotActionGroup( A22_GDF_DEPLOY_GENERATOR ); objManager.activateBotActionGroup( A22_OBJECTIVE_STROGG_SPAWN2 ); objManager.activateBotActionGroup( A22_STROGG_DEPLOY_GENERATOR ); objManager.activateBotActionGroup( A22_STROGG_ATTACK_STROGG_SPAWN2 ); objManager.activateBotActionGroup( A22_GDF_DEFEND_STROGG_SPAWN2 ); objManager.activateBotActionGroup( A22_OBJECTIVE_LASER ); objManager.activateBotActionGroup( A22_STROGG_ATTACK_LASER ); objManager.activateBotActionGroup( A22_GDF_DEFEND_LASER ); objManager.setPrimaryTeamAction( STROGG, "strogg_construct_laser_1" ); objManager.setPrimaryTeamAction( GDF, "strogg_construct_laser_1" ); objManager.setBotCriticalClass( STROGG, ENGINEER ); objManager.setBotCriticalClass( GDF, ENGINEER ); objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, false, false ); objManager.setTeamNeededClass( STROGG, FIELDOPS, NOCLASS, 2, false, false ); objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 1, false, false ); objManager.setTeamNeededClass( STROGG, ENGINEER, NOCLASS, 3, true, false ); objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 2, false, false ); objManager.setBotTeamRetreatTime( GDF, 10 ); objManager.clearTeamBotBoundEntities( STROGG ); // setup strogg rear spawn objManager.setTeamUseRearSpawn( STROGG, true ); objManager.setTeamUseRearSpawnPercentage( STROGG, 100 ); stroggTeam.setTeamRearSpawn( stroggBaseSpawn ); } // ---------------------------- void mapObject_Area22::EntranceEffectsThread() { // DAVE THE LARGE BROKEN DOOR STATE CHANGE NEEDS TO HAPPEN HERE // DAVE ISN'T A LARGE BROKEN DOOR, WHO WROTE THIS entrance_smoke.vTriggerParticleEffect( 1 ); entrance_smoke_2.vTriggerParticleEffect( 1 ); entrance_side_explosion.vTriggerParticleEffect( 1 ); sys.wait( 0.6f ); entrance_sparks_1.vTriggerParticleEffect( 1 ); sys.wait( 1.2f ); entrance_sparks_2.vTriggerParticleEffect( 1 ); sys.wait( 2.5f ); entrance_sparks_3.vTriggerParticleEffect( 1 ); sys.wait( 2.4f ); entrance_sparks_4.vTriggerParticleEffect( 1 ); } void mapObject_Area22::OnEntranceDestroyed() { mainObjectiveIndex = OBJECTIVE_AREA22_DESTROY_CORE; if( botObstacles == 0 ) { slipgateObstacle1.activate( slipgateObstacle1 ); slipgateObstacle2.activate( slipgateObstacle2 ); botObstacles = 1; } objManager.setNextObjective( gdfTeam, mainObjectiveIndex ); objManager.setNextObjective( stroggTeam, mainObjectiveIndex ); middleTerritory.setGameTeam( stroggTeam ); stroggMiddleSpawn.setGameTeam( stroggTeam ); stroggBunkerSpawn.vSetActive( true ); gdfBunkerSpawn.setGameTeam( gdfTeam ); stroggZapporSpawn.vSetActive( false ); stroggZapporSpawn.setGameTeam( stroggTeam ); jammerTerritory.setActive( false ); middleTerritory.setActive( true ); gdfBaseTerritory.setActive( true ); objective3Arrow1.vStartObjective(); objective3Arrow2.vStartObjective(); objective2Marker.vFinishObjective(); slipgateCore.setTakesDamage( 1 ); objManager.SetObjectiveEntity( slipgateCore, mainObjectiveIndex ); slipgateCore.vCreateMission(); CreateInitialTimedMission( slipgateCore ); serviceDoor.vCreateMission(); gun3Construction.vCreateMission(); thread EntranceEffectsThread(); tunnelMelteddoor.show(); FreeWorldTask( fieldopsDeployTask ); FreeWorldTask( medicDeployTask ); stroggTeam.SetRespawnWait( 20 ); ResetRespawnTimeThread(); if ( debug_script.getBoolValue() ) { sys.print( "********** BOTS SETUP FOR SLIPGATE OBJECTIVE **********\n" ); } objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL ); objManager.killBotActionGroup( A22_OBJECTIVE_STROGG_SPAWN2 ); objManager.killBotActionGroup( A22_STROGG_ATTACK_STROGG_SPAWN2 ); objManager.killBotActionGroup( A22_STROGG_DEFEND_STROGG_SPAWN2 ); objManager.killBotActionGroup( A22_GDF_ATTACK_STROGG_SPAWN2 ); objManager.killBotActionGroup( A22_GDF_DEFEND_STROGG_SPAWN2 ); objManager.killBotActionGroup( A22_OBJECTIVE_LASER ); objManager.killBotActionGroup( A22_STROGG_ATTACK_LASER ); objManager.killBotActionGroup( A22_GDF_DEFEND_LASER ); objManager.killBotActionGroup( A22_GDF_DEPLOY_GENERATOR ); objManager.killBotActionGroup( A22_STROGG_DEPLOY_GENERATOR ); objManager.killBotActionGroup( A22_STROGG_REPAIR_LASER ); objManager.killBotActionGroup( A22_GDF_LANDMINE_LASER ); objManager.killBotActionGroup( A22_MINING_LASER_CONSTRUCTED ); objManager.activateBotActionGroup( A22_GDF_DEPLOY_LASER ); objManager.activateBotActionGroup( A22_OBJECTIVE_STROGG_SPAWN3 ); objManager.activateBotActionGroup( A22_STROGG_DEPLOY_LASER ); objManager.activateBotActionGroup( A22_STROGG_ATTACK_STROGG_SPAWN3 ); objManager.activateBotActionGroup( A22_GDF_ATTACK_STROGG_SPAWN3 ); objManager.activateBotActionGroup( A22_GDF_DEFEND_STROGG_SPAWN3 ); objManager.activateBotActionGroup( A22_OBJECTIVE_SLIPGATE ); objManager.activateBotActionGroup( A22_STROGG_ATTACK_SLIPGATE ); objManager.activateBotActionGroup( A22_GDF_DEFEND_SLIPGATE ); objManager.activateBotActionGroup( A22_STROGG_OBJECTIVE_DOOR ); objManager.activateBotActionGroup( A22_GDF_GUN3_NOT_CONSTRUCTED ); // Jer - added MG nest inside bunker objManager.setPrimaryTeamAction( STROGG, "strogg_destroy_slipgate_1" ); objManager.setPrimaryTeamAction( GDF, "strogg_destroy_slipgate_1" ); objManager.setSecondaryTeamAction( STROGG, "strogg_accessdoor_1" ); objManager.setSecondaryTeamAction( GDF, "strogg_accessdoor_1" ); objManager.setTeamUseRearSpawn( GDF, true ); objManager.setTeamUseRearSpawnPercentage( GDF, 50 ); gdfTeam.setTeamRearSpawn( gdfBaseSpawn ); objManager.setTeamUseRearSpawn( STROGG, false ); gdfTeam.setTeamRearSpawn( stroggMiddleSpawn ); objManager.setBotCriticalClass( STROGG, SOLDIER ); objManager.setBotCriticalClass( GDF, ENGINEER ); objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, false, false ); objManager.setTeamNeededClass( STROGG, ENGINEER, NOCLASS, 2, false, false ); objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 2, true, false ); objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 2, false, true ); objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false ); objManager.setBotTeamRetreatTime( GDF, 10 ); objManager.clearTeamBotBoundEntities( STROGG ); objManager.setTeamAttacksDeployables( STROGG, false ); objManager.setTeamAttacksDeployables( GDF, false ); objManager.gameIsOnFinalObjective(); } void mapObject_Area22::OnCoreDestroyed() { objective3Marker.vFinishObjective(); objManager.SetObjectiveEntity( $null_entity, -1 ); slipgateCore.vCompleteMission(); StopTimedMission(); gameRules.setEndGameCamera( endCameraA ); gameRules.setWinningTeam( stroggTeam ); gameRules.endGame(); } void mapObject_Area22::StartFirstObjective() { sys.wait( 5.f ); objManager.SetObjectiveEntity( jammer, mainObjectiveIndex ); jammer.vCreateMission(); CreateInitialTimedMission( jammer ); } void mapObject_Area22::OnMiningLaserDeployed( entity other ) { other.vCreateMission(); CreateInitialTimedMission( other ); objManager.SetObjectiveEntity( other, mainObjectiveIndex ); //turn on mine and repair objectives after laser is on the ground objManager.activateBotActionGroup( A22_STROGG_REPAIR_LASER ); objManager.activateBotActionGroup( A22_GDF_LANDMINE_LASER ); } void mapObject_Area22::OnMiningLaserConstructed( entity other ) { other.vCompleteMission(); StopTimedMission(); gun2Construction.vFreeMission(); objManager.SetObjectiveEntity( $null_entity, -1 ); //disable the bot action when laser is constructed objManager.killBotAction( "strogg_construct_laser_1" ); objManager.killBotAction( "strogg_construct_laser_2" ); //turn on some roams immediately after the laser is built to get bots moving toward slipgate bunker objManager.activateBotActionGroup( A22_MINING_LASER_CONSTRUCTED ); } void mapObject_Area22::OnTimeLimitHit() { FinishTimedMission(); objManager.SetObjectiveEntity( $null_entity, -1 ); objManager.PlaySound( worldspawn.getKey( "snd_strogglose_strogg" ), stroggTeam ); objManager.PlaySound( worldspawn.getKey( "snd_strogglose_gdf" ), gdfTeam ); } void mapObject_Area22::OnSpawnCaptured( string actionName ) { if( actionName == "gdf_forward_spawn1" ) { if ( debug_script.getBoolValue() ) { sys.print( "********** GDF CAPTURED GDF SPAWN 1 **********\n" ); } objManager.deactivateBotActionGroup( A22_GDF_ATTACK_GDF_SPAWN1 ); objManager.activateBotActionGroup( A22_GDF_DEFEND_GDF_SPAWN1 ); objManager.deactivateBotActionGroup( A22_STROGG_DEFEND_GDF_SPAWN1 ); objManager.activateBotActionGroup( A22_STROGG_ATTACK_GDF_SPAWN1 ); } if( actionName == "strogg_forward_spawn1" ) { if ( debug_script.getBoolValue() ) { sys.print( "********** STROGG CAPTURED STROGG SPAWN 1 **********\n" ); } objManager.deactivateBotActionGroup( A22_STROGG_ATTACK_STROGG_SPAWN1 ); objManager.activateBotActionGroup( A22_STROGG_DEFEND_STROGG_SPAWN1 ); objManager.deactivateBotActionGroup( A22_GDF_DEFEND_STROGG_SPAWN1 ); objManager.activateBotActionGroup( A22_GDF_ATTACK_STROGG_SPAWN1 ); //objManager.setTeamUseRearSpawn( STROGG, true ); //stroggTeam.setTeamRearSpawn( main_strogg_base ); } if( actionName == "strogg_forward_spawn2" ) { if ( debug_script.getBoolValue() ) { sys.print( "********** GDF CAPTURED STROGG SPAWN 2 **********\n" ); } objManager.activateBotActionGroup( A22_GDF_ATTACK_STROGG_SPAWN2 ); objManager.deactivateBotActionGroup( A22_GDF_DEFEND_STROGG_SPAWN2 ); objManager.activateBotActionGroup( A22_STROGG_DEFEND_STROGG_SPAWN2 ); objManager.deactivateBotActionGroup( A22_STROGG_ATTACK_STROGG_SPAWN2 ); } if( actionName == "strogg_forward_spawn3" ) { if ( debug_script.getBoolValue() ) { sys.print( "********** GDF CAPTURED STROGG SPAWN 3 **********\n" ); } objManager.activateBotActionGroup( A22_GDF_ATTACK_STROGG_SPAWN3 ); objManager.deactivateBotActionGroup( A22_GDF_DEFEND_STROGG_SPAWN3 ); objManager.activateBotActionGroup( A22_STROGG_DEFEND_STROGG_SPAWN3 ); objManager.deactivateBotActionGroup( A22_STROGG_ATTACK_STROGG_SPAWN3 ); } } void mapObject_Area22::OnSpawnLiberated( string actionName ) { if( actionName == "gdf_forward_spawn1" ) { if ( debug_script.getBoolValue() ) { sys.print( "********** GDF LOST GDF SPAWN 1 **********\n" ); } objManager.deactivateBotActionGroup( A22_GDF_DEFEND_GDF_SPAWN1 ); objManager.activateBotActionGroup( A22_GDF_ATTACK_GDF_SPAWN1 ); objManager.deactivateBotActionGroup( A22_STROGG_ATTACK_GDF_SPAWN1 ); objManager.activateBotActionGroup( A22_STROGG_DEFEND_GDF_SPAWN1 ); } if( actionName == "strogg_forward_spawn1" ) { if ( debug_script.getBoolValue() ) { sys.print( "********** STROGG LOST STROGG SPAWN 1 **********\n" ); } objManager.deactivateBotActionGroup( A22_STROGG_DEFEND_STROGG_SPAWN1 ); objManager.activateBotActionGroup( A22_STROGG_ATTACK_STROGG_SPAWN1 ); objManager.deactivateBotActionGroup( A22_GDF_ATTACK_STROGG_SPAWN1 ); objManager.activateBotActionGroup( A22_GDF_DEFEND_STROGG_SPAWN1 ); //objManager.setTeamUseRearSpawn( STROGG, false ); } if( actionName == "strogg_forward_spawn2" ) { if ( debug_script.getBoolValue() ) { sys.print( "********** STROGG LOST STROGG SPAWN 2 **********\n" ); } objManager.activateBotActionGroup( A22_GDF_DEFEND_STROGG_SPAWN2 ); objManager.deactivateBotActionGroup( A22_GDF_ATTACK_STROGG_SPAWN2 ); objManager.activateBotActionGroup( A22_STROGG_ATTACK_STROGG_SPAWN2 ); objManager.deactivateBotActionGroup( A22_STROGG_DEFEND_STROGG_SPAWN2 ); } if( actionName == "strogg_forward_spawn3" ) { if ( debug_script.getBoolValue() ) { sys.print( "********** STROGG LOST STROGG SPAWN 3 **********\n" ); } objManager.activateBotActionGroup( A22_GDF_DEFEND_STROGG_SPAWN3 ); objManager.deactivateBotActionGroup( A22_GDF_ATTACK_STROGG_SPAWN3 ); objManager.activateBotActionGroup( A22_STROGG_ATTACK_STROGG_SPAWN3 ); objManager.deactivateBotActionGroup( A22_STROGG_DEFEND_STROGG_SPAWN3 ); } } entity mapObject_Area22::GetSpectateEntity() { if ( jammer != $null_entity ) { return jammer.vGetSpectateEntity(); } entity miningLaserMaterials = G_FindMiningLaserMaterials(); if ( miningLaserMaterials == $null_entity ) { return $null_entity; } if ( !miningLaserMaterials.vIsObjectiveComplete() ) { return miningLaserMaterials.vGetSpectateEntity(); } if ( slipgateCore != $null_entity ) { return slipgateCore.vGetSpectateEntity(); } return $null_entity; }