#define OBJECTIVE_ARK_DESTROY_JAMMER 0 #define OBJECTIVE_ARK_DESTROY_ENTRANCE 1 #define OBJECTIVE_ARK_DESTROY_RESEARCH 2 // Base deployables #define ARK_STROGG_DEPLOY_BASE 0 #define ARK_GDF_DEPLOY_BASE 1 // First Objective - Destroy Jammer #define ARK_OBJECTIVE_GENERATOR 2 #define ARK_STROGG_ATTACK_GENERATOR 3 #define ARK_STROGG_DEPLOY_OUTSIDE_TOWN 4 #define ARK_GDF_DEFEND_GENERATOR 5 #define ARK_GDF_DEPLOY_TOWN 6 // Second Objective - Construct Mining Laser #define ARK_OBJECTIVE_LASER 7 #define ARK_STROGG_ATTACK_LASER 8 #define ARK_STROGG_DEPLOY_TOWN 9 #define ARK_GDF_DEFEND_LASER 10 #define ARK_GDF_DEPLOY_ISLET 11 // Third Objective - Destroy DNA Scanner #define ARK_OBJECTIVE_SCANNER 12 #define ARK_STROGG_ATTACK_SCANNER 13 #define ARK_STROGG_DEPLOY_ISLET 14 #define ARK_GDF_DEFEND_SCANNER 15 #define ARK_GDF_DEPLOY_BIODOME 16 // Forward Spawn - Science Facility #define ARK_OBJECTIVE_FACILITY_SPAWN 17 #define ARK_STROGG_ATTACK_FACILITY_SPAWN 18 #define ARK_STROGG_DEFEND_FACILITY_SPAWN 19 #define ARK_GDF_ATTACK_FACILITY_SPAWN 20 #define ARK_GDF_DEFEND_FACILITY_SPAWN 21 // Forced Secondary Objectives #define ARK_GDF_PRIORITY_MINE_GENERATOR 22 #define ARK_GDF_PRIORITY_MINE_LASER 23 #define ARK_GDF_PRIORITY_BIODOME_DEPLOY 24 #define ARK_GDF_PRIORITY_ISLET_DEPLOY 25 object mapObject_Ark : mapObject_Default { void destroy(); void InitObjectives(); void CompleteObjective( float index, entity p ); handle GetObjectiveMessage( float index ); void OnMiningLaserDeployed( entity other ); void OnMiningLaserConstructed( entity other ); void StartFirstObjective(); void NeededClassFirstObjective(); void OnTimeLimitHit(); void OnDestroyJammer(); void OnEntranceDestroyed(); void OnResearchDestroyed(); vector GetGDFBasePosition() { return '3020 2850 890'; } void ZapporCallThread(); void JammerDestroyThread(); void EntranceEffectsThread(); void ResearchEffectsThread(); void OnSpawnCaptured( string actionName ); void OnSpawnLiberated( string actionName ); //void RandomBotactionTestThread(); entity GetSpectateEntity(); entity labequipment_destroyed; entity dnaTubeStrogg1; entity dnaTubeStrogg2; entity outpostTerritory; entity stroggBaseTerritory; entity biodomesTerritory; entity estuaryTerritory; entity gdfBaseSpawnMaster; entity stroggBaseSpawnMaster; entity estuarySpawnMaster; entity gdfDomesSpawnMaster; entity stroggDomesSpawn; entity churchSpawnMaster; entity jammerSpawnMaster; entity objective1Marker; entity objective2Marker; entity objective3Marker; entity objective1Arrow1; entity objective1Arrow2; entity objective2Arrow1; entity objective2Arrow2; entity objective2Arrow3; entity objective3Arrow1; entity objective3Arrow2; entity biodomesMainEntrance; entity biodomesSideEntrance; entity labEquipment; entity zapporCaller; entity entrance_smoke; entity tube_water_1; entity tube_water_2; entity tube_water_3; entity tube_water_4; entity tube_water_5; entity tube_water_floor_1; entity tube_water_floor_2; entity tube_water_floor_3; entity tube_water_floor_4; entity tube_water_floor_5; entity tube_glass_1; entity tube_glass_2; entity tube_glass_3; entity tube_glass_4; entity dnaTubelight01; entity dnaTubelight02; entity dnaTubelight03; entity dnaTubelight04; entity jammer; entity jammerEffectsIdle; entity jammerEffectsShutdown; entity generatorDestroyed; entity biodomeDoorMelted; entity biodomeDoorMeltedSide; entity biodomeDoorExplosion; entity noplant_generator; entity noplant_dna_equipment; entity endCameraA; entity endCameraB; //bot stuff void SetupBotsObjectiveOne(); void SetupBotsObjectiveTwo(); void SetupBotsObjectiveThree(); entity botBiodomedoor1; entity botBiodomedoor2; cvar debug_script; } mapObject_Base Ark_MapScript() { return new mapObject_Ark; } void mapObject_Ark::destroy() { } void mapObject_Ark::InitObjectives() { outpostTerritory = worldspawn.getEntityKey( "script_outpost_territory" ); stroggBaseTerritory = worldspawn.getEntityKey( "script_strogg_base_territory" ); biodomesTerritory = worldspawn.getEntityKey( "script_biodomes_territory" ); estuaryTerritory = worldspawn.getEntityKey( "script_estuary_territory" ); gdfBaseSpawnMaster = worldspawn.getEntityKey( "script_gdf_base_spawn" ); stroggBaseSpawnMaster = worldspawn.getEntityKey( "script_strogg_base_spawn" ); estuarySpawnMaster = worldspawn.getEntityKey( "script_estuary_spawn" ); gdfDomesSpawnMaster = worldspawn.getEntityKey( "script_gdf_domes_spawn" ); churchSpawnMaster = worldspawn.getEntityKey( "script_church_spawnmaster") ; jammerSpawnMaster = worldspawn.getEntityKey( "script_jammer_spawnmaster" ); objective1Arrow1 = worldspawn.getEntityKey( "script_obj1_arrow1" ); objective1Arrow2 = worldspawn.getEntityKey( "script_obj1_arrow2" ); objective2Arrow1 = worldspawn.getEntityKey( "script_obj2_arrow1" ); objective2Arrow2 = worldspawn.getEntityKey( "script_obj2_arrow2" ); objective2Arrow3 = worldspawn.getEntityKey( "script_obj2_arrow3" ); 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" ); entrance_smoke = worldspawn.getEntityKey( "script_entrance_smoke" ); tube_water_1 = worldspawn.getEntityKey( "script_tube_water_1" ); tube_water_2 = worldspawn.getEntityKey( "script_tube_water_2" ); tube_water_3 = worldspawn.getEntityKey( "script_tube_water_3" ); tube_water_4 = worldspawn.getEntityKey( "script_tube_water_4" ); tube_water_5 = worldspawn.getEntityKey( "script_tube_water_5" ); tube_water_floor_1 = worldspawn.getEntityKey( "script_tube_water_floor_1" ); tube_water_floor_2 = worldspawn.getEntityKey( "script_tube_water_floor_2" ); tube_water_floor_3 = worldspawn.getEntityKey( "script_tube_water_floor_3" ); tube_water_floor_4 = worldspawn.getEntityKey( "script_tube_water_floor_4" ); tube_water_floor_5 = worldspawn.getEntityKey( "script_tube_water_floor_5" ); tube_glass_1 = worldspawn.getEntityKey( "script_tube_glass_1" ); tube_glass_2 = worldspawn.getEntityKey( "script_tube_glass_2" ); tube_glass_3 = worldspawn.getEntityKey( "script_tube_glass_3" ); tube_glass_4 = worldspawn.getEntityKey( "script_tube_glass_4" ); dnaTubelight01 = worldspawn.getEntityKey( "script_dna_tubelight01" ); dnaTubelight02 = worldspawn.getEntityKey( "script_dna_tubelight02" ); dnaTubelight03 = worldspawn.getEntityKey( "script_dna_tubelight03" ); dnaTubelight04 = worldspawn.getEntityKey( "script_dna_tubelight04" ); endCameraA = worldspawn.getEntityKey( "script_placement_camera_a" ); endCameraB = worldspawn.getEntityKey( "script_placement_camera_b" ); biodomesMainEntrance = worldspawn.getEntityKey( "script_biodome_entrance" ); biodomesSideEntrance = worldspawn.getEntityKey( "script_biodomes_side_entrance_explosion" ); labEquipment = worldspawn.getEntityKey( "script_lab_equipment" ); dnaTubeStrogg1 = worldspawn.getEntityKey( "script_dna_tube_strogg_1" ); dnaTubeStrogg2 = worldspawn.getEntityKey( "script_dna_tube_strogg_2" ); zapporCaller = worldspawn.getEntityKey( "script_zappor_caller" ); jammer = worldspawn.getEntityKey( "script_jammer" ); jammerEffectsIdle = worldspawn.getEntityKey( "script_jammer_effects_idle" ); jammerEffectsShutdown = worldspawn.getEntityKey( "script_jammer_effects_shutdown" ); generatorDestroyed = worldspawn.getEntityKey( "script_generator_destroyed" ); biodomeDoorMelted = worldspawn.getEntityKey( "script_biodome_melted_door" ); biodomeDoorMeltedSide = worldspawn.getEntityKey( "script_biodome_melted_door_side" ); biodomeDoorMelted.hide(); biodomeDoorMeltedSide.hide(); biodomeDoorExplosion = worldspawn.getEntityKey( "script_biodomedoorexplosion" ); noplant_generator = worldspawn.getEntityKey( "script_noplant_generator" ); noplant_dna_equipment = worldspawn.getEntityKey( "script_noplant_dna_equipment" ); //bot stuff botBiodomedoor1 = worldspawn.getEntityKey( "script_bot_biodome_door_1" ); botBiodomedoor2 = worldspawn.getEntityKey( "script_bot_biodome_door_2" ); // end bot stuff labequipment_destroyed = worldspawn.getEntityKey( "script_labequipment_destroyed" ); stroggDomesSpawn = worldspawn.getEntityKey( "script_strogg_domes_spawn" ); debug_script = sys.getCVar( "bot_debugMapScript", "1" ); CreateDeployTasks(); gameRules.setWinningTeam( gdfTeam ); gdfTeam.SetRespawnWait( 20 ); stroggTeam.SetRespawnWait( 20 ); gdfTeam.InitRespawnTimeChange(); stroggTeam.InitRespawnTimeChange(); CreateRespawnTimeThread( stroggTeam ); stroggDomesSpawn.setGameTeam( stroggTeam ); stroggDomesSpawn.vSetActive( false ); stroggBaseTerritory.setActive( true ); outpostTerritory.setActive( true ); biodomesTerritory.setActive( false ); estuaryTerritory.setActive( false ); estuarySpawnMaster.setGameTeam( $null_entity ); gdfDomesSpawnMaster.setGameTeam( $null_entity ); churchSpawnMaster.setGameTeam( gdfTeam ); jammerSpawnMaster.setGameTeam ( $null_entity ); jammerSpawnMaster.vSetActive( false ); objective1Arrow1.setGameTeam( stroggTeam ); objective1Arrow2.setGameTeam( stroggTeam ); objective2Arrow1.setGameTeam( stroggTeam ); objective2Arrow2.setGameTeam( stroggTeam ); objective2Arrow3.setGameTeam( stroggTeam ); objective3Arrow1.setGameTeam( stroggTeam ); objective3Arrow2.setGameTeam( stroggTeam ); objective1Arrow1.vStartObjective(); objective1Arrow2.vStartObjective(); objective1Marker.vStartObjective(); objective2Marker.vFinishObjective(); objective3Marker.vFinishObjective(); biodomesMainEntrance.setTakesDamage( 0 ); labEquipment.setTakesDamage( 0 ); generatorDestroyed.hide(); generatorDestroyed.forceDisableClip(); labequipment_destroyed.hide(); objManager.setNextObjective( gdfTeam, OBJECTIVE_ARK_DESTROY_JAMMER ); objManager.setNextObjective( stroggTeam, OBJECTIVE_ARK_DESTROY_JAMMER ); gameRules.setEndGameCamera( endCameraB ); thread StartFirstObjective(); SetupBotsObjectiveOne(); } // ---------------------------------------------------------------------- // BOT OBJECTIVE: PLANT PLASMA CHARGE ON THE JAMMING GENERATOR // ---------------------------------------------------------------------- void mapObject_Ark::SetupBotsObjectiveOne() { if ( debug_script.getBoolValue() ) { sys.print( "***** BOTS SETUP FOR GENERATOR OBJECTIVE *****\n" ); } objManager.setAttackingTeam( STROGG ); objManager.setBotSightDist( 3000.0f ); objManager.killBotAction( "strogg_camp_75" ); // broken mine action objManager.activateBotActionGroup( ARK_OBJECTIVE_GENERATOR ); objManager.activateBotActionGroup( ARK_STROGG_ATTACK_GENERATOR ); objManager.activateBotActionGroup( ARK_STROGG_DEPLOY_OUTSIDE_TOWN ); objManager.activateBotActionGroup( ARK_GDF_DEFEND_GENERATOR ); objManager.activateBotActionGroup( ARK_GDF_DEPLOY_TOWN ); objManager.activateBotActionGroup( ARK_STROGG_DEPLOY_BASE ); objManager.activateBotActionGroup( ARK_GDF_PRIORITY_MINE_GENERATOR ); objManager.activateBotActionGroup( ARK_GDF_PRIORITY_ISLET_DEPLOY ); objManager.deactivateBotActionGroup ( ARK_GDF_DEFEND_LASER ); // Xian :: Not needed in stage 1 objManager.setPrimaryTeamAction( STROGG, "strogg_destroy_generator_1" ); objManager.setPrimaryTeamAction( GDF, "strogg_destroy_generator_1" ); objManager.setSecondaryTeamAction( GDF, "gdf_generator_mine_priority_1" ); objManager.setSecondaryTeamAction( GDF, "islet_gdf_deploy_1" ); objManager.setBotCriticalClass( STROGG, SOLDIER ); objManager.setBotCriticalClass( GDF, ENGINEER ); thread NeededClassFirstObjective (); //objManager.setTeamUseRearSpawn( GDF, false ); //gdfTeam.setTeamRearSpawn( churchSpawnMaster ); gdfTeam.setTeamRearSpawn ( gdfBaseSpawnMaster ); objManager.setTeamUseRearSpawn( GDF, true ); objManager.setTeamUseRearSpawnPercentage (GDF, 50); objManager.setTeamUseRearSpawn( STROGG, true ); stroggTeam.setTeamRearSpawn( stroggBaseSpawnMaster ); } void mapObject_Ark::NeededClassFirstObjective() { sys.wait (10); if ( debug_script.getBoolValue() ) { sys.print( "***** SET UP CLASSES NEEDED FOR FIRST OBJECTIVE *****\n" ); } objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, false, false ); objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 3, true, true ); objManager.setTeamNeededClass( GDF, SOLDIER, NOCLASS, 1, false, false ); objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false ); objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 3, true, true ); } // ---------------------------------------------------------------------- void mapObject_Ark::CompleteObjective( float index, entity p ) { if ( index == OBJECTIVE_ARK_DESTROY_JAMMER ) { OnDestroyJammer(); } else if ( index == OBJECTIVE_ARK_DESTROY_ENTRANCE ) { OnEntranceDestroyed(); } else if ( index == OBJECTIVE_ARK_DESTROY_RESEARCH ) { OnResearchDestroyed(); } } void mapObject_Ark::OnMiningLaserDeployed( entity other ) { other.vCreateMission(); CreateInitialTimedMission( other ); objManager.SetObjectiveEntity( other, OBJECTIVE_ARK_DESTROY_ENTRANCE ); objManager.activateBotActionGroup( ARK_OBJECTIVE_LASER ); objManager.activateBotActionGroup( ARK_GDF_PRIORITY_MINE_LASER ); } // ---------------------------------------------------------------------- // MINING LASER CONSTRUCTED - DOOR NOT DESTROYED YET // ---------------------------------------------------------------------- void mapObject_Ark::OnMiningLaserConstructed( entity other ) { other.vCompleteMission(); StopTimedMission(); objManager.SetObjectiveEntity( $null_entity, -1 ); objManager.killBotActionGroup( ARK_OBJECTIVE_LASER ); objManager.killBotActionGroup( ARK_STROGG_DEPLOY_TOWN ); objManager.killBotActionGroup( ARK_STROGG_ATTACK_LASER ); objManager.killBotActionGroup( ARK_GDF_DEFEND_LASER ); objManager.killBotActionGroup( ARK_GDF_PRIORITY_MINE_LASER ); objManager.setBotTeamRetreatTime( GDF, 10 ); } handle mapObject_Ark::GetObjectiveMessage( float index ) { if ( index == OBJECTIVE_ARK_DESTROY_JAMMER ) { return sys.localizeString( "maps/ark/obj_destroy_jammer" ); } if ( index == OBJECTIVE_ARK_DESTROY_ENTRANCE ) { return sys.localizeString( "maps/ark/obj_destroy_ent" ); } if ( index == OBJECTIVE_ARK_DESTROY_RESEARCH ) { return sys.localizeString( "maps/ark/obj_destroy_lab" ); } return g_locStr_BadObjective; } void mapObject_Ark::ZapporCallThread() { sys.wait( 15.f ); zapporCaller.vOnDeploy(); } void mapObject_Ark::JammerDestroyThread() { generatorDestroyed.show(); sys.wait( 0.5f ); generatorDestroyed.forceEnableClip(); } void mapObject_Ark::OnDestroyJammer() { objManager.setNextObjective( gdfTeam, OBJECTIVE_ARK_DESTROY_ENTRANCE ); objManager.setNextObjective( stroggTeam, OBJECTIVE_ARK_DESTROY_ENTRANCE ); thread JammerDestroyThread(); jammerEffectsIdle.remove(); jammerEffectsShutdown.vTriggerParticleEffect( 1 ); thread ZapporCallThread(); jammerSpawnMaster.setGameTeam ( stroggTeam ); jammerSpawnMaster.vSetActive( true ); outpostTerritory.setGameTeam( stroggTeam ); churchSpawnMaster.setGameTeam( $null_entity ); churchSpawnMaster.vSetActive( false ); stroggBaseTerritory.setActive( false ); outpostTerritory.setActive( true ); estuaryTerritory.setActive( true ); objective1Arrow1.vFinishObjective(); objective1Arrow2.vFinishObjective(); objective2Arrow1.vStartObjective(); objective2Arrow2.vStartObjective(); objective2Arrow3.vStartObjective(); objective1Marker.vFinishObjective(); objective2Marker.vStartObjective(); biodomesMainEntrance.setTakesDamage( 1 ); objManager.SetObjectiveEntity( $null_entity, -1 ); noplant_generator.remove(); jammer.vCompleteMission(); StopTimedMission(); stroggTeam.SetRespawnWait( 20 ); ResetRespawnTimeThread(); SetupBotsObjectiveTwo(); } // ---------------------------------------------------------------------- // BOT OBJECTIVE: CONSTRUCT THE MINING LASER // ---------------------------------------------------------------------- void mapObject_Ark::SetupBotsObjectiveTwo() { if ( debug_script.getBoolValue() ) { sys.print( "***** BOTS SETUP FOR LASER OBJECTIVE *****\n" ); } objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL ); objManager.killBotActionGroup( ARK_OBJECTIVE_GENERATOR ); objManager.killBotActionGroup( ARK_STROGG_ATTACK_GENERATOR ); objManager.killBotActionGroup( ARK_STROGG_DEPLOY_OUTSIDE_TOWN ); objManager.killBotActionGroup( ARK_STROGG_DEPLOY_BASE ); objManager.killBotActionGroup( ARK_GDF_DEFEND_GENERATOR ); objManager.killBotActionGroup( ARK_GDF_DEPLOY_TOWN ); objManager.killBotActionGroup( ARK_GDF_PRIORITY_MINE_GENERATOR ); //objManager.activateBotActionGroup( ARK_OBJECTIVE_LASER ); objManager.activateBotActionGroup( ARK_STROGG_ATTACK_LASER ); objManager.activateBotActionGroup( ARK_STROGG_DEPLOY_TOWN ); objManager.activateBotActionGroup( ARK_GDF_DEFEND_LASER ); objManager.activateBotActionGroup( ARK_GDF_DEPLOY_ISLET ); //objManager.activateBotActionGroup( ARK_GDF_PRIORITY_MINE_LASER ); objManager.activateBotActionGroup( ARK_GDF_DEPLOY_BASE ); //objManager.activateBotActionGroup( ARK_GDF_PRIORITY_BIODOME_DEPLOY ); objManager.setPrimaryTeamAction( STROGG, "strogg_construct_laser_1" ); objManager.setPrimaryTeamAction( GDF, "strogg_construct_laser_1" ); objManager.setSecondaryTeamAction( GDF, "gdf_priority_mine_laser_1" ); objManager.setSecondaryTeamAction( GDF, "secondary_gdf_deploy_biodome_1" ); objManager.setBotCriticalClass( STROGG, ENGINEER ); objManager.setBotCriticalClass( GDF, ENGINEER ); objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 1, false, false ); objManager.setTeamNeededClass( STROGG, ENGINEER, NOCLASS, 3, true, true ); objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 1, false, false ); objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 2, true, true ); gdfTeam.setTeamRearSpawn( gdfBaseSpawnMaster ); objManager.setTeamUseRearSpawn( GDF, true ); stroggTeam.setTeamRearSpawn( stroggBaseSpawnMaster ); objManager.setTeamUseRearSpawn( STROGG, true ); objManager.clearTeamBotBoundEntities( STROGG ); objManager.setBotTeamRetreatTime( GDF, 10 ); } // ---------------------------------------------------------------------- void mapObject_Ark::EntranceEffectsThread() { sys.wait( 0.5f ); entrance_smoke.vTriggerParticleEffect( 1 ); biodomesSideEntrance.vTriggerParticleEffect( 1 ); } void mapObject_Ark::OnEntranceDestroyed() { objManager.setNextObjective( gdfTeam, OBJECTIVE_ARK_DESTROY_RESEARCH ); objManager.setNextObjective( stroggTeam, OBJECTIVE_ARK_DESTROY_RESEARCH ); estuaryTerritory.setGameTeam( stroggTeam ); estuarySpawnMaster.setGameTeam( stroggTeam ); gdfDomesSpawnMaster.setGameTeam( gdfTeam ); stroggDomesSpawn.vSetActive( true ); outpostTerritory.setActive( false ); biodomesTerritory.setActive( true ); estuaryTerritory.setActive( true ); objective2Arrow3.vFinishObjective(); objective3Arrow1.vStartObjective(); objective3Arrow2.vStartObjective(); objective2Marker.vFinishObjective(); objective3Marker.vStartObjective(); labEquipment.setTakesDamage( 1 ); objManager.SetObjectiveEntity( labEquipment, OBJECTIVE_ARK_DESTROY_RESEARCH ); labEquipment.vCreateMission(); CreateInitialTimedMission( labEquipment ); thread EntranceEffectsThread(); biodomeDoorMelted.show(); biodomeDoorMeltedSide.show(); biodomeDoorExplosion.vTriggerParticleEffect( 1 ); botBiodomedoor1.activate(botBiodomedoor1); botBiodomedoor2.activate(botBiodomedoor2); objManager.enableNode( "BioDomeDoorNode" ); stroggTeam.SetRespawnWait( 20 ); ResetRespawnTimeThread(); SetupBotsObjectiveThree(); FreeWorldTask( medicDeployTask ); FreeWorldTask( fieldopsDeployTask ); FreeWorldTask( engineerDeployTask ); } // ---------------------------------------------------------------------- // BOT OBJECTIVE: PLANT PLASMA CHARGE ON THE RESEARCH MATERIALS // ---------------------------------------------------------------------- void mapObject_Ark::SetupBotsObjectiveThree() { if ( debug_script.getBoolValue() ) { sys.print( "***** BOTS SETUP FOR RESEARCH MATERIALS OBJECTIVE *****\n" ); } objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL ); //objManager.killBotActionGroup( ARK_STROGG_ATTACK_LASER ); //objManager.killBotActionGroup( ARK_GDF_DEFEND_LASER ); objManager.killBotActionGroup( ARK_GDF_DEPLOY_ISLET ); //objManager.killBotActionGroup( ARK_GDF_PRIORITY_MINE_LASER ); objManager.killBotActionGroup( ARK_GDF_PRIORITY_ISLET_DEPLOY ); objManager.activateBotActionGroup( ARK_OBJECTIVE_FACILITY_SPAWN ); //Strogg forward spawn gubbins objManager.activateBotActionGroup( ARK_STROGG_ATTACK_FACILITY_SPAWN ); objManager.activateBotActionGroup( ARK_GDF_DEFEND_FACILITY_SPAWN ); objManager.activateBotActionGroup( ARK_GDF_DEPLOY_BIODOME ); objManager.activateBotActionGroup( ARK_OBJECTIVE_SCANNER ); objManager.activateBotActionGroup( ARK_STROGG_ATTACK_SCANNER ); objManager.activateBotActionGroup( ARK_STROGG_DEPLOY_ISLET ); objManager.activateBotActionGroup( ARK_GDF_DEFEND_SCANNER ); objManager.setBotCriticalClass( STROGG, SOLDIER ); objManager.setBotCriticalClass( GDF, ENGINEER ); objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, false, false ); objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 3, true, true ); objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false ); objManager.setTeamNeededClass( GDF, SOLDIER, NOCLASS, 1, false, false ); objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 3, true, true ); objManager.setPrimaryTeamAction( STROGG, "strogg_destroy_scanner_1" ); objManager.setPrimaryTeamAction( GDF, "strogg_destroy_scanner_1" ); //objManager.setSecondaryTeamAction( GDF, "xxx" ); objManager.setSecondaryTeamAction( STROGG, "strogg_forwardspawn_1" ); objManager.setTeamUseRearSpawn( GDF, false ); gdfTeam.setTeamRearSpawn( gdfBaseSpawnMaster ); objManager.setTeamUseRearSpawn( STROGG, false ); stroggTeam.setTeamRearSpawn( jammerSpawnMaster ); objManager.teamSuicideIfNotNearAction( "strogg_destroy_scanner_1", 4096.0f, GDF ); objManager.setTeamAttacksDeployables( GDF, false ); objManager.setTeamAttacksDeployables( STROGG, false ); } // ---------------------------------------------------------------------- void mapObject_Ark::ResearchEffectsThread() { tube_water_1.vTriggerParticleEffect( 1 ); tube_glass_3.vTriggerParticleEffect( 1 ); sys.wait( 0.2f ); tube_water_4.vTriggerParticleEffect( 1 ); tube_glass_1.vTriggerParticleEffect( 1 ); sys.wait( 0.2f ); tube_water_3.vTriggerParticleEffect( 1 ); sys.wait( 0.1f ); tube_water_2.vTriggerParticleEffect( 1 ); tube_glass_2.vTriggerParticleEffect( 1 ); sys.wait( 0.2f ); tube_water_5.vTriggerParticleEffect( 1 ); tube_glass_4.vTriggerParticleEffect( 1 ); sys.wait( 0.5f ); tube_water_floor_1.vTriggerParticleEffect( 1 ); sys.wait( 0.5f ); tube_water_floor_4.vTriggerParticleEffect( 1 ); sys.wait( 0.5f ); tube_water_floor_3.vTriggerParticleEffect( 1 ); sys.wait( 0.5f ); tube_water_floor_2.vTriggerParticleEffect( 1 ); sys.wait( 0.5f ); tube_water_floor_5.vTriggerParticleEffect( 1 ); } void mapObject_Ark::OnResearchDestroyed() { objective3Marker.vFinishObjective(); gameRules.setEndGameCamera( endCameraA ); gameRules.setWinningTeam( stroggTeam ); gameRules.endGame(); objManager.SetObjectiveEntity( $null_entity, -1 ); thread ResearchEffectsThread(); labequipment_destroyed.show(); dnaTubelight01.remove(); dnaTubelight02.remove(); dnaTubelight03.remove(); dnaTubelight04.remove(); dnaTubeStrogg1.vStartObjective(); dnaTubeStrogg2.vStartObjective(); labEquipment.vCompleteMission(); StopTimedMission(); } void mapObject_Ark::StartFirstObjective() { sys.wait( 5.f ); objManager.SetObjectiveEntity( jammer, OBJECTIVE_ARK_DESTROY_JAMMER ); jammer.vCreateMission(); CreateInitialTimedMission( jammer ); } void mapObject_Ark::OnTimeLimitHit() { FinishTimedMission(); objManager.SetObjectiveEntity( $null_entity, -1 ); objManager.PlaySound( worldspawn.getKey( "snd_strogglose_strogg" ), stroggTeam ); objManager.PlaySound( worldspawn.getKey( "snd_strogglose_gdf" ), gdfTeam ); } // ---------------------------------------------------------------------- // Bot Forward Spawn Actions // ---------------------------------------------------------------------- void mapObject_Ark::OnSpawnCaptured( string actionName ) { if( actionName == "strogg_forwardspawn_1" ) { if ( debug_script.getBoolValue() ) { sys.print( "***** STROGG CAPTURED FACILITY SPAWN *****\n" ); } objManager.deactivateBotActionGroup( ARK_STROGG_ATTACK_FACILITY_SPAWN ); objManager.deactivateBotActionGroup( ARK_GDF_DEFEND_FACILITY_SPAWN ); objManager.deactivateBotActionGroup( ARK_GDF_DEPLOY_BIODOME ); objManager.activateBotActionGroup( ARK_GDF_ATTACK_FACILITY_SPAWN ); objManager.activateBotActionGroup( ARK_STROGG_DEFEND_FACILITY_SPAWN ); } } void mapObject_Ark::OnSpawnLiberated( string actionName ) { if( actionName == "strogg_forwardspawn_1" ) { if ( debug_script.getBoolValue() ) { sys.print( "***** STROGG LOST FACILITY SPAWN *****\n" ); } objManager.deactivateBotActionGroup( ARK_GDF_ATTACK_FACILITY_SPAWN ); objManager.deactivateBotActionGroup( ARK_STROGG_DEFEND_FACILITY_SPAWN ); objManager.activateBotActionGroup( ARK_STROGG_ATTACK_FACILITY_SPAWN ); objManager.activateBotActionGroup( ARK_GDF_DEFEND_FACILITY_SPAWN ); objManager.activateBotActionGroup( ARK_GDF_DEPLOY_BIODOME ); } } entity mapObject_Ark::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 ( labEquipment != $null_entity ) { return labEquipment.vGetSpectateEntity(); } return $null_entity; } object strogg_test_subject { boolean activated; void preinit() { playCycle( ANIMCHANNEL_ALL, getKey( "anim" ) ); } void syncFields() { syncBroadcast( "activated" ); syncCallback( "activated", "OnActivated" ); } void OnActivated() { playAnim( ANIMCHANNEL_ALL, getKey( "slump_anim" ) ); } void vStartObjective() { activated = true; OnActivated(); } }