#define OBJECTIVE_CANYON_BUILD_BRIDGE 0
#define OBJECTIVE_CANYON_CAPTURE_OUTPOST 1
#define OBJECTIVE_CANYON_HACK_OBJECTIVE 2
#define OBJECTIVE_CANYON_DESTROY_BIOREACTOR 3
#define CAN_GDF_DEPLOY_BASE 0
#define CAN_STROGG_DEPLOY_BASE 1
#define CAN_OBJECTIVE_CONSTRUCT_TOWER1 2
#define CAN_OBJECTIVE_STROGG_SPAWN1 3
#define CAN_GDF_ATTACK_STROGG_SPAWN1 4
#define CAN_GDF_DEFEND_STROGG_SPAWN1 5
#define CAN_STROGG_ATTACK_STROGG_SPAWN1 6
#define CAN_STROGG_DEFEND_STROGG_SPAWN1 7
#define CAN_OBJECTIVE_GDF_SPAWN1 8
#define CAN_GDF_ATTACK_GDF_SPAWN1 9
#define CAN_GDF_DEFEND_GDF_SPAWN1 10
#define CAN_STROGG_ATTACK_GDF_SPAWN1 11
#define CAN_STROGG_DEFEND_GDF_SPAWN1 12
#define CAN_OBJECTIVE_BRIDGE 13
#define CAN_GDF_ATTACK_BRIDGE 14
#define CAN_STROGG_DEFEND_BRIDGE 15
#define CAN_STROGG_DEPLOY_BRIDGE 16
#define CAN_OBJECTIVE_GDF_SPAWN2 17
#define CAN_GDF_DEPLOY_BRIDGE 18
#define CAN_GDF_ATTACK_GDF_SPAWN2 19
#define CAN_GDF_DEFEND_GDF_SPAWN2 20
#define CAN_STROGG_ATTACK_GDF_SPAWN2 21
#define CAN_STROGG_DEFEND_GDF_SPAWN2 22
#define CAN_OBJECTIVE_MCP 23
#define CAN_GDF_ATTACK_MCP 24
#define CAN_STROGG_DEFEND_MCP 25
#define CAN_STROGG_DEPLOY_MCP 26
#define CAN_OBJECTIVE_SHIELD 27
#define CAN_GDF_DEPLOY_MCP 28
#define CAN_GDF_ATTACK_SHIELD 29
#define CAN_STROGG_DEFEND_SHIELD 30
#define CAN_STROGG_DEPLOY_SHIELD 31
#define CAN_OBJECTIVE_GDF_SPAWN3 32
#define CAN_GDF_ATTACK_GDF_SPAWN3 33
#define CAN_GDF_DEFEND_GDF_SPAWN3 34
#define CAN_STROGG_ATTACK_GDF_SPAWN3 35
#define CAN_STROGG_DEFEND_GDF_SPAWN3 36
#define CAN_OBJECTIVE_STROGGIFIER 37
#define CAN_GDF_DEPLOY_SHIELD 38
#define CAN_GDF_ATTACK_STROGGIFIER 39
#define CAN_STROGG_DEFEND_STROGGIFIER 40
#define CAN_SNIPER_SPOTS_01 50
#define CAN_SNIPER_SPOTS_02 51
#define CAN_FIRE_SUPPORT_LEDGES_01 52
#define FIRE_SUPPORT_LEDGES_02 53
#define CAN_STROGG_VEHICLE_GRABS 54
#define CAN_MCP_GDF_DEFENSES 60 // Stuff that should be on at start and turned off when MCP is delivered
// GDF Roam and Camp Nodes for vehicles
object mapObject_Canyon : mapObject_Default {
void destroy();
void InitObjectives();
void RouteThread();
void DelayedBotSpawnThread();
void DelayedRearSpawnThread();
void CompleteObjective( float index, entity p );
handle GetObjectiveMessage( float index );
void OnBridgeBuilt();
void OnOutpostCaptured();
void OnDoorDestroyed();
void OnDeviceDestroyed();
vector GetGDFBasePosition() { return '-9000 -9890 1600'; }
void ClearMCPData();
void OnMCPSpawned( entity obj );
void OnMCPDestroyed( entity obj, vector newLocation, vector newAngles );
void OnMCPDelivered( entity obj );
void PostBridgeBuiltAudio();
void OnTimeLimitHit();
void OnShieldHacked();
void OnHackComplete( entity obj );
void OnShieldDeployed( entity obj, entity trigger );
void StartShieldObjective();
void OnShieldDestroyedScud( entity trigger );
void OnGuardTower1Built();
void OnGuardTower1Destroyed();
void EntranceEffectsThread();
void FinalEffectsThread();
void OnConstructionComplete( entity obj );
void OnDestructionComplete( entity obj );
void StartFirstObjective();
void OnSpawnCaptured( string actionName );
void OnSpawnLiberated( string actionName );
entity GetSpectateEntity();
entity gdfBaseTerritory;
entity bridgeTerritory;
entity outpostTerritory;
entity outsideBunkerTerritory;
entity stroggBaseTerritory;
entity objective1Arrow1;
entity objective1Arrow2;
entity objective2Arrow1;
entity objective2Arrow2;
entity objective3Arrow1;
entity objective3Arrow2;
entity objective4Arrow1;
entity objective4Arrow2;
entity objective1Marker;
entity objective2Marker;
entity objective3Marker;
entity objective4Marker;
entity entrance_smoke;
entity entrance_sparks_1;
entity entrance_sparks_2;
entity entrance_sparks_3;
entity entrance_sparks_4;
entity entrance_sparks_5;
entity final_blowout_1;
entity final_blowout_2;
entity final_blowout_3;
entity final_smoke;
entity gdfBaseSpawn;
entity stroggBaseSpawn;
entity stroggRuinsSpawn;
entity gdfHutSpawn;
entity stroggBunkerSpawn;
entity gdfGlasshouseSpawn;
entity gdfRuinedBuildingSpawn;
entity bridgeConstruction;
entity guardTower1;
entity guardTower1Construction;
entity finalObjective;
entity finalObjective_destroyed;
entity undergroundBaseStroggshield;
entity undergroundBaseStroggshieldTrigger_1;
entity undergroundBaseStroggshieldTrigger_2;
entity mcpCaller;
entity currentMCP;
entity mcpRoute;
entity shieldCaller;
entity scudTrigger;
entity endCameraA;
entity endCameraB;
entity baseDoorBroken; // func_static broken version that appears after the SSM explodes
float mainObjectiveIndex;
// Bot Obstacles
entity bridge_aasobstacle;
entity strogg_bunker_obstacle_1;
entity strogg_bunker_obstacle_2;
entity strogg_bunker_obstacle_3;
cvar debug_script;
}
mapObject_Base Canyon_MapScript() {
return new mapObject_Canyon;
}
void mapObject_Canyon::destroy() {
}
void mapObject_Canyon::InitObjectives() {
gameRules.setWinningTeam( stroggTeam );
gdfTeam.SetRespawnWait( 20 );
stroggTeam.SetRespawnWait( 20 );
gdfTeam.InitRespawnTimeChange();
stroggTeam.InitRespawnTimeChange();
CreateRespawnTimeThread( gdfTeam );
gdfBaseTerritory = sys.getEntity( "gdf_base_deployzone" );
bridgeTerritory = sys.getEntity( "bridge_deployzone" );
outpostTerritory = sys.getEntity( "outpost_deployzone" );
outsideBunkerTerritory = sys.getEntity( "outsidebunker_deployzone" );
stroggBaseTerritory = sys.getEntity( "strogg_base_deployzone" );
objective1Arrow1 = sys.getEntity( "info_objective_1_progress_1" );
objective1Arrow2 = sys.getEntity( "info_objective_1_progress_2" );
objective2Arrow1 = sys.getEntity( "info_objective_2_progress_1" );
objective2Arrow2 = sys.getEntity( "info_objective_2_progress_2" );
objective3Arrow1 = sys.getEntity( "info_objective_3_progress_1" );
objective3Arrow2 = sys.getEntity( "info_objective_3_progress_2" );
objective4Arrow1 = sys.getEntity( "info_objective_4_progress_1" );
objective4Arrow2 = sys.getEntity( "info_objective_4_progress_2" );
objective1Marker = sys.getEntity( "info_objective_1" );
objective2Marker = sys.getEntity( "info_objective_2" );
objective3Marker = sys.getEntity( "info_objective_3" );
objective4Marker = sys.getEntity( "info_objective_4" );
endCameraA = worldspawn.getEntityKey( "script_placement_camera_a" );
endCameraB = worldspawn.getEntityKey( "script_placement_camera_b" );
entrance_smoke = worldspawn.getEntityKey( "script_entrance_smoke" );
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_sparks_5 = worldspawn.getEntityKey( "script_entrance_sparks_5" );
final_blowout_1 = worldspawn.getEntityKey( "script_final_blowout_1" );
final_blowout_2 = worldspawn.getEntityKey( "script_final_blowout_2" );
final_blowout_3 = worldspawn.getEntityKey( "script_final_blowout_3" );
final_smoke = worldspawn.getEntityKey( "script_final_smoke" );
gdfBaseSpawn = worldspawn.getEntityKey( "script_gdf_base_spawn" );
stroggBaseSpawn = worldspawn.getEntityKey( "script_strogg_base_spawn" );
gdfHutSpawn = sys.getEntity( "info_capturable_spawn_hut" );
gdfHutSpawn.vSetActive( false );
stroggBunkerSpawn = sys.getEntity( "info_capturable_spawn_bunker" );
stroggBunkerSpawn.vSetActive( false );
stroggBunkerSpawn.setGameTeam( stroggTeam );
gdfGlasshouseSpawn = sys.getEntity( "info_capturable_spawn_glasshouse" );
gdfGlasshouseSpawn.setGameTeam( $null_entity );
gdfGlasshouseSpawn.vSetActive( true );
gdfRuinedBuildingSpawn = sys.getEntity( "info_capturable_spawn_ruined_building" );
gdfRuinedBuildingSpawn.setGameTeam( $null_entity );
gdfRuinedBuildingSpawn.vSetActive( false );
mcpCaller = worldspawn.getEntityKey( "script_mcp_caller" );
mcpRoute = worldspawn.getEntityKey( "script_mcp_route" );
bridgeConstruction = worldspawn.getEntityKey( "script_bridge_materials" );
finalObjective = worldspawn.getEntityKey( "script_final_objective" );
finalObjective_destroyed = worldspawn.getEntityKey( "script_final_objective_destroyed" );
finalObjective_destroyed.hide();
finalObjective_destroyed.forceDisableClip();
shieldCaller = worldspawn.getEntityKey( "script_shieldgen_caller" );
undergroundBaseStroggshield = worldspawn.getEntityKey( "script_underground_base_stroggshield" );
undergroundBaseStroggshieldTrigger_1 = worldspawn.getEntityKey( "script_underground_base_stroggshield_trigger_1" );
undergroundBaseStroggshieldTrigger_2 = worldspawn.getEntityKey( "script_underground_base_stroggshield_trigger_2" );
guardTower1Construction = worldspawn.getEntityKey( "script_guard_tower_1" );
guardTower1 = worldspawn.getEntityKey( "script_guard_tower_1_object" );
debug_script = sys.getCVar( "bot_debugMapScript", "1" );
CreateDeployTasks();
objective1Arrow1.vStartObjective();
objective1Arrow1.setGameTeam( gdfTeam );
objective1Arrow2.vStartObjective();
objective1Arrow2.setGameTeam( gdfTeam );
objective1Marker.vStartObjective();
objective2Marker.vStartObjective();
objective3Marker.vStartObjective();
objective4Marker.vStartObjective();
gdfBaseTerritory.setActive( true );
bridgeTerritory.setActive( true );
outpostTerritory.setActive( true );
outsideBunkerTerritory.setActive( false );
stroggBaseTerritory.setActive( false );
baseDoorBroken = worldspawn.getEntityKey( "script_basedoorbroken" );
baseDoorBroken.hide();
mainObjectiveIndex = OBJECTIVE_CANYON_BUILD_BRIDGE;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
gameRules.setEndGameCamera( endCameraB );
guardTower1Construction.vCreateMission();
thread StartFirstObjective();
//bridge_bot_clip = worldspawn.getEntityKey( "script_bridge_bot_clip" );
bridge_aasobstacle = worldspawn.getEntityKey( "script_bridge_aasobstacle" );
strogg_bunker_obstacle_1 = worldspawn.getEntityKey( "script_strogg_bunker_obstacle_1" );
strogg_bunker_obstacle_2 = worldspawn.getEntityKey( "script_strogg_bunker_obstacle_2" );
strogg_bunker_obstacle_3 = worldspawn.getEntityKey( "script_strogg_bunker_obstacle_3" );
//bridge_bot_clip.hide();
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOTS SETUP FOR BRIDGE OBJECTIVE **********\n" );
}
objManager.setAttackingTeam( GDF );
objManager.setBotSightDist( 3000.0f );
objManager.setPrimaryTeamAction( GDF, "gdf_construct_bridge_1" );
objManager.setPrimaryTeamAction( STROGG, "gdf_construct_bridge_1" );
objManager.setSecondaryTeamAction( GDF, "gdf_construct_tower_1" );
objManager.setBotCriticalClass( GDF, ENGINEER );
objManager.setBotCriticalClass( STROGG, ENGINEER );
objManager.setTeamUseRearSpawn( STROGG, true );
thread DelayedBotSpawnThread();
gdfTeam.setTeamRearSpawn( gdfBaseSpawn );
objManager.setTeamUseRearSpawnPercentage( GDF, 50 );
objManager.setTeamUseRearSpawn( GDF, true );
stroggTeam.setTeamRearSpawn( stroggBaseSpawn );
objManager.setTeamUseRearSpawnPercentage( STROGG, 20 );
objManager.setTeamUseRearSpawn( STROGG, false );
//
objManager.disableNode ( "node_before_bridge" ); // Xian
objManager.disableNode ( "node_shortcut" ); // Xian
objManager.deactivateBotActionGroup ( FIRE_SUPPORT_LEDGES_02 );
objManager.activateBotActionGroup ( CAN_SNIPER_SPOTS_01 );
objManager.activateBotActionGroup ( CAN_MCP_GDF_DEFENSES );
//
thread DelayedRearSpawnThread();
thread RouteThread();
}
void mapObject_Canyon::RouteThread() {
sys.wait( 0.1f );
objManager.disableRoute( "xian_bot_route_start_3" );
}
void mapObject_Canyon::DelayedBotSpawnThread() {
sys.wait( 10.0f );
objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 2, false, true );
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 1, false, true );
}
void mapObject_Canyon::DelayedRearSpawnThread() {
sys.wait( 30.0f );
objManager.setTeamUseRearSpawn( STROGG, true );
}
void mapObject_Canyon::CompleteObjective( float index, entity p ) {
if ( index == OBJECTIVE_CANYON_BUILD_BRIDGE ) {
OnBridgeBuilt();
} else if ( index == OBJECTIVE_CANYON_CAPTURE_OUTPOST ) {
OnOutpostCaptured();
} else if ( index == OBJECTIVE_CANYON_HACK_OBJECTIVE ) {
OnDoorDestroyed();
} else if ( index == OBJECTIVE_CANYON_DESTROY_BIOREACTOR ) {
OnDeviceDestroyed();
}
}
handle mapObject_Canyon::GetObjectiveMessage( float index ) {
if ( index == OBJECTIVE_CANYON_BUILD_BRIDGE ) {
return sys.localizeString( "maps/canyon/obj_built" );
}
if ( index == OBJECTIVE_CANYON_CAPTURE_OUTPOST ) {
return sys.localizeString( "maps/canyon/obj_captured" );
}
if ( index == OBJECTIVE_CANYON_HACK_OBJECTIVE ) {
return sys.localizeString( "maps/canyon/obj_destroyed_doors" );
}
if ( index == OBJECTIVE_CANYON_DESTROY_BIOREACTOR ) {
return sys.localizeString( "maps/canyon/obj_destroyed_bio" );
}
return g_locStr_BadObjective;
}
void mapObject_Canyon::OnBridgeBuilt() {
mainObjectiveIndex = OBJECTIVE_CANYON_CAPTURE_OUTPOST;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
bridgeTerritory.setGameTeam( gdfTeam );
gdfBaseTerritory.setActive( false );
bridgeTerritory.setActive( true );
outpostTerritory.setActive( true );
gdfGlasshouseSpawn.vSetActive( false );
gdfGlasshouseSpawn.setGameTeam( gdfTeam );
stroggRuinsSpawn = sys.getEntity( "info_capturable_spawn_ruins" );
stroggRuinsSpawn.vSetActive( false );
gdfRuinedBuildingSpawn.vSetActive( true );
objective1Marker.vFinishObjective();
objective1Arrow1.vFinishObjective();
objective1Arrow2.vFinishObjective();
objective2Arrow1.vStartObjective();
objective2Arrow1.setGameTeam( gdfTeam );
objective2Arrow2.vStartObjective();
objective2Arrow2.setGameTeam( gdfTeam );
bridgeConstruction.vCompleteMission();
StopTimedMission();
//
objManager.enableNode ( "node_before_bridge" );
objManager.enableNode ( "node_shortcut" );
//
objManager.SetObjectiveEntity( $null_entity, -1 );
mcpCaller.vOnDeploy();
thread PostBridgeBuiltAudio();
gdfTeam.SetRespawnWait( 15 );
ResetRespawnTimeThread();
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOTS SETUP FOR MCP OBJECTIVE **********\n" );
}
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
//bridge_bot_clip.show();
bridge_aasobstacle.activate( bridge_aasobstacle );
objManager.deactivateBotActionGroup( CAN_GDF_DEPLOY_BASE );
objManager.deactivateBotActionGroup( CAN_OBJECTIVE_STROGG_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_GDF_ATTACK_STROGG_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_GDF_DEFEND_STROGG_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_STROGG_ATTACK_STROGG_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_STROGG_DEFEND_STROGG_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_OBJECTIVE_GDF_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_GDF_ATTACK_GDF_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_GDF_DEFEND_GDF_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_STROGG_ATTACK_GDF_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_STROGG_DEFEND_GDF_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_OBJECTIVE_BRIDGE );
objManager.deactivateBotActionGroup( CAN_GDF_ATTACK_BRIDGE );
objManager.deactivateBotActionGroup( CAN_STROGG_DEFEND_BRIDGE );
objManager.deactivateBotActionGroup( CAN_STROGG_DEPLOY_BRIDGE );
objManager.activateBotActionGroup( CAN_OBJECTIVE_GDF_SPAWN2 );
objManager.activateBotActionGroup( CAN_GDF_DEPLOY_BRIDGE );
objManager.activateBotActionGroup( CAN_GDF_ATTACK_GDF_SPAWN2 );
objManager.activateBotActionGroup( CAN_STROGG_DEFEND_GDF_SPAWN2 );
objManager.activateBotActionGroup( CAN_OBJECTIVE_MCP );
objManager.activateBotActionGroup( CAN_GDF_ATTACK_MCP );
objManager.activateBotActionGroup( CAN_STROGG_DEFEND_MCP );
objManager.activateBotActionGroup( CAN_STROGG_DEPLOY_MCP );
objManager.setPrimaryTeamAction( GDF, "gdf_deploy_mcp_1" );
objManager.setPrimaryTeamAction( STROGG, "gdf_deploy_mcp_1" );
objManager.setBotCriticalClass( GDF, ENGINEER );
objManager.setBotCriticalClass( STROGG, ENGINEER );
objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 2, false, true );
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 1, false, true );
objManager.setMapHasMCPGoal( true );
objManager.killBotActionGroup( CAN_OBJECTIVE_CONSTRUCT_TOWER1 ); // Xian
//gdfTeam.setTeamRearSpawn( gdfGlasshouseSpawn ); // Xian
//
gdfTeam.setTeamRearSpawn( gdfBaseSpawn );
objManager.setTeamUseRearSpawnPercentage( GDF, 100 );
objManager.setTeamUseRearSpawn( GDF, true );
//
}
void mapObject_Canyon::OnOutpostCaptured() {
mainObjectiveIndex = OBJECTIVE_CANYON_HACK_OBJECTIVE;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
outpostTerritory.setGameTeam( gdfTeam );
bridgeTerritory.setActive( false );
outpostTerritory.setActive( true );
outsideBunkerTerritory.setActive( true );
stroggBunkerSpawn.vSetActive( true );
gdfRuinedBuildingSpawn.vSetActive( false );
gdfRuinedBuildingSpawn.setGameTeam( gdfTeam );
objective2Marker.vFinishObjective();
objective2Arrow1.vFinishObjective();
objective2Arrow2.vFinishObjective();
objective3Arrow1.vStartObjective();
objective3Arrow1.setGameTeam( gdfTeam );
objective3Arrow2.vStartObjective();
objective3Arrow2.setGameTeam( gdfTeam );
objManager.SetObjectiveEntity( $null_entity, -1 );
shieldCaller.vOnDeploy();
if ( currentMCP != $null_entity ) {
currentMCP.vCompleteMission();
}
StopTimedMission();
guardTower1.vFreeMission();
guardTower1Construction.vFreeMission();
G_PlayObjectiveCompletedRoll( GDF );
objManager.PlaySound( worldspawn.getKey( "snd_outpost_captured_strogg" ), stroggTeam );
objManager.PlaySound( worldspawn.getKey( "snd_outpost_captured_gdf" ), gdfTeam );
gdfTeam.SetRespawnWait( 20 );
ResetRespawnTimeThread();
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOTS SETUP FOR SHIELD OBJECTIVE **********\n" );
}
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.deactivateBotActionGroup( CAN_GDF_DEPLOY_BRIDGE );
objManager.deactivateBotActionGroup( CAN_OBJECTIVE_GDF_SPAWN2 );
objManager.deactivateBotActionGroup( CAN_GDF_ATTACK_GDF_SPAWN2 );
objManager.deactivateBotActionGroup( CAN_GDF_DEFEND_GDF_SPAWN2 );
objManager.deactivateBotActionGroup( CAN_STROGG_ATTACK_GDF_SPAWN2 );
objManager.deactivateBotActionGroup( CAN_STROGG_DEFEND_GDF_SPAWN2 );
objManager.deactivateBotActionGroup( CAN_OBJECTIVE_MCP );
objManager.deactivateBotActionGroup( CAN_GDF_ATTACK_MCP );
objManager.deactivateBotActionGroup( CAN_STROGG_DEFEND_MCP );
objManager.deactivateBotActionGroup( CAN_STROGG_DEPLOY_MCP );
objManager.activateBotActionGroup( CAN_OBJECTIVE_SHIELD );
objManager.activateBotActionGroup( CAN_GDF_DEPLOY_MCP );
objManager.activateBotActionGroup( CAN_GDF_ATTACK_SHIELD );
objManager.activateBotActionGroup( CAN_STROGG_DEFEND_SHIELD );
objManager.activateBotActionGroup( CAN_STROGG_DEPLOY_SHIELD );
objManager.activateBotActionGroup( CAN_STROGG_VEHICLE_GRABS );
objManager.setPrimaryTeamAction( GDF, "gdf_hack_shield_1" );
objManager.setPrimaryTeamAction( STROGG, "gdf_hack_shield_1" );
objManager.setBotCriticalClass( GDF, COVERTOPS );
objManager.setBotCriticalClass( STROGG, ENGINEER );
objManager.setTeamNeededClass( GDF, COVERTOPS, NOCLASS, 2, false, true );
objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false );
objManager.setTeamNeededClass( GDF, FIELDOPS, NOCLASS, 1, false, false );
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 1, false, false );
objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 2, false, false ); // Xian
objManager.setTeamNeededClass( STROGG, ENGINEER, NOCLASS, 3, false, false ); // Xian
objManager.setMapHasMCPGoal( false );
objManager.setTeamUseRearSpawn( GDF, true );
//
stroggTeam.setTeamRearSpawn( stroggBaseSpawn );
//objManager.setTeamUseRearSpawnPercentage( STROGG, 50 );
objManager.setTeamUseRearSpawnPercentage( STROGG, 75 );
objManager.setTeamUseRearSpawn( STROGG, true );
objManager.enableRoute( "xian_bot_route_start_3" );
objManager.deactivateBotActionGroup ( CAN_SNIPER_SPOTS_01 );
objManager.deactivateBotActionGroup ( CAN_MCP_GDF_DEFENSES );
objManager.activateBotActionGroup ( FIRE_SUPPORT_LEDGES_02 );
//
}
void mapObject_Canyon::EntranceEffectsThread() {
entrance_smoke.vTriggerParticleEffect( 1 );
sys.wait( 0.7f );
entrance_sparks_1.vTriggerParticleEffect( 1 );
sys.wait( 1.4f );
entrance_sparks_2.vTriggerParticleEffect( 1 );
entrance_sparks_5.vTriggerParticleEffect( 1 );
sys.wait( 0.9f );
entrance_sparks_3.vTriggerParticleEffect( 1 );
sys.wait( 0.3f );
entrance_sparks_4.vTriggerParticleEffect( 1 );
}
void mapObject_Canyon::OnDoorDestroyed() {
mainObjectiveIndex = OBJECTIVE_CANYON_DESTROY_BIOREACTOR;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
outsideBunkerTerritory.setGameTeam( gdfTeam );
outpostTerritory.setActive( false );
outsideBunkerTerritory.setActive( true );
stroggBaseTerritory.setActive( true );
baseDoorBroken.show();
undergroundBaseStroggshield.remove();
undergroundBaseStroggshieldTrigger_1.remove();
undergroundBaseStroggshieldTrigger_2.remove();
stroggBunkerSpawn.setGameTeam( $null_entity );
stroggBunkerSpawn.vSetActive( false );
gdfHutSpawn.vSetActive( true );
objective3Marker.vFinishObjective();
objective3Arrow1.vFinishObjective();
objective3Arrow2.vFinishObjective();
objective4Arrow1.vStartObjective();
objective4Arrow1.setGameTeam( gdfTeam );
objective4Arrow2.vStartObjective();
objective4Arrow2.setGameTeam( gdfTeam );
thread EntranceEffectsThread();
objManager.SetObjectiveEntity( finalObjective, mainObjectiveIndex );
finalObjective.vCreateMission();
CreateInitialTimedMission( finalObjective );
gdfTeam.SetRespawnWait( 20 );
ResetRespawnTimeThread();
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOTS SETUP FOR STROGGIFIER OBJECTIVE **********\n" );
}
objManager.deactivateBotActionGroup( CAN_GDF_DEPLOY_MCP );
objManager.deactivateBotActionGroup( CAN_OBJECTIVE_SHIELD );
objManager.deactivateBotActionGroup( CAN_GDF_ATTACK_SHIELD );
objManager.deactivateBotActionGroup( CAN_STROGG_DEFEND_SHIELD );
objManager.deactivateBotActionGroup( CAN_STROGG_DEPLOY_SHIELD );
objManager.deactivateBotActionGroup( CAN_STROGG_VEHICLE_GRABS );
objManager.activateBotActionGroup( CAN_OBJECTIVE_GDF_SPAWN3 );
objManager.activateBotActionGroup( CAN_GDF_ATTACK_GDF_SPAWN3 );
objManager.activateBotActionGroup( CAN_STROGG_DEFEND_GDF_SPAWN3 );
objManager.activateBotActionGroup( CAN_OBJECTIVE_STROGGIFIER );
objManager.activateBotActionGroup( CAN_GDF_DEPLOY_SHIELD );
objManager.activateBotActionGroup( CAN_GDF_ATTACK_STROGGIFIER );
objManager.activateBotActionGroup( CAN_STROGG_DEFEND_STROGGIFIER );
objManager.activateBotActionGroup( CAN_STROGG_DEPLOY_BASE );
objManager.setPrimaryTeamAction( GDF, "gdf_destroy_stroggifier_1" );
objManager.setPrimaryTeamAction( STROGG, "gdf_destroy_stroggifier_1" );
objManager.setBotCriticalClass( GDF, SOLDIER );
objManager.setBotCriticalClass( STROGG, ENGINEER );
objManager.setTeamNeededClass( GDF, SOLDIER, NOCLASS, 3, false, true ); // Xian, changed from 2
objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false );
objManager.setTeamNeededClass( STROGG, ENGINEER, NOCLASS, 2, false, true );
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, false, false );
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.setTeamUseRearSpawn( STROGG, true );
// turn off bot aas obstacles
strogg_bunker_obstacle_1.activate( strogg_bunker_obstacle_1 );
strogg_bunker_obstacle_2.activate( strogg_bunker_obstacle_2 );
strogg_bunker_obstacle_3.activate( strogg_bunker_obstacle_3 );
objManager.setTeamUseRearSpawn( GDF, false );
objManager.deactivateBotActionGroup ( FIRE_SUPPORT_LEDGES_02 ); // Xian
}
void mapObject_Canyon::FinalEffectsThread() {
final_smoke.vTriggerParticleEffect( 1 );
final_blowout_1.vTriggerParticleEffect( 1 );
sys.wait( 0.1f );
final_blowout_2.vTriggerParticleEffect( 1 );
sys.wait( 0.1f );
final_blowout_3.vTriggerParticleEffect( 1 );
}
void mapObject_Canyon::OnDeviceDestroyed() {
finalObjective_destroyed.show();
finalObjective_destroyed.forceEnableClip();
objective4Marker.vFinishObjective();
finalObjective.vCompleteMission();
StopTimedMission();
thread FinalEffectsThread();
gameRules.setEndGameCamera( endCameraA );
gameRules.setWinningTeam( gdfTeam );
gameRules.endGame();
}
void mapObject_Canyon::ClearMCPData() {
if ( currentMCP != $null_entity ) {
currentMCP.vFreeMission();
currentMCP = $null_entity;
}
}
void mapObject_Canyon::OnMCPSpawned( entity obj ) {
ClearMCPData();
}
void mapObject_Canyon::OnMCPDestroyed( entity obj, vector newLocation, vector newAngles ) {
if ( currentMCP != obj ) {
return;
}
ClearMCPData();
mcpCaller.vCallDrop( newLocation, newAngles );
}
void mapObject_Canyon::OnMCPDelivered( entity obj ) {
ClearMCPData();
//
// Do this so they use the tank / flyers
gdfTeam.setTeamRearSpawn( gdfBaseSpawn );
objManager.setTeamUseRearSpawnPercentage( GDF, 50 );
objManager.setTeamUseRearSpawn( GDF, true );
//
if ( mainObjectiveIndex == OBJECTIVE_CANYON_CAPTURE_OUTPOST ) {
currentMCP = obj;
objManager.SetObjectiveEntity( currentMCP, mainObjectiveIndex );
currentMCP.vSetGoalMarker( objective2Marker );
currentMCP.vSetPathTargets( mcpCaller.getWorldOrigin(), objective2Marker.getWorldOrigin() );
currentMCP.setTrackerEntity( mcpRoute );
currentMCP.vCreateMission();
CreateInitialTimedMission( currentMCP );
}
}
void mapObject_Canyon::StartShieldObjective() {
sys.wait( 5.f );
scudTrigger.vSetActive( true );
scudTrigger.vCreateMission();
CreateInitialTimedMission( scudTrigger );
objManager.SetObjectiveEntity( scudTrigger, mainObjectiveIndex );
}
void mapObject_Canyon::OnShieldDestroyedScud( entity trigger ) {
thread StartShieldObjective();
}
void mapObject_Canyon::StartFirstObjective() {
sys.wait( 5.f );
objManager.SetObjectiveEntity( bridgeConstruction, mainObjectiveIndex );
bridgeConstruction.vCreateMission();
CreateInitialTimedMission( bridgeConstruction );
}
void mapObject_Canyon::OnShieldDeployed( entity obj, entity trigger ) {
scudTrigger = trigger;
scudTrigger.vStartObjective();
}
void mapObject_Canyon::OnHackComplete( entity obj ) {
if ( obj == scudTrigger ) {
OnShieldHacked();
}
}
void mapObject_Canyon::OnShieldHacked() {
objManager.SetObjectiveEntity( $null_entity, -1 );
scudTrigger.vCompleteMission();
StopTimedMission();
objManager.deactivateBotActionGroup( CAN_OBJECTIVE_SHIELD );
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.setTeamUseRearSpawn( GDF, true ); // Xian
}
void mapObject_Canyon::PostBridgeBuiltAudio() {
sys.wait( 10.f );
objManager.PlaySound( worldspawn.getKey( "snd_mcp_intro_strogg" ), stroggTeam );
objManager.PlaySound( worldspawn.getKey( "snd_mcp_intro_gdf" ), gdfTeam );
}
void mapObject_Canyon::OnConstructionComplete( entity obj ) {
if ( obj == guardTower1Construction ) {
OnGuardTower1Built();
}
}
void mapObject_Canyon::OnDestructionComplete( entity obj ) {
if ( obj == guardTower1Construction ) {
OnGuardTower1Destroyed();
}
}
void mapObject_Canyon::OnGuardTower1Built() {
guardTower1Construction.vCompleteMission();
objManager.deactivateBotActionGroup( CAN_OBJECTIVE_CONSTRUCT_TOWER1 );
if ( mainObjectiveIndex < OBJECTIVE_CANYON_HACK_OBJECTIVE ) {
guardTower1.vCreateMission();
}
}
void mapObject_Canyon::OnGuardTower1Destroyed() {
guardTower1.vCompleteMission();
//if ( mainObjectiveIndex < OBJECTIVE_CANYON_HACK_OBJECTIVE ) {
if ( mainObjectiveIndex < OBJECTIVE_CANYON_CAPTURE_OUTPOST ) {
guardTower1Construction.vCreateMission();
objManager.activateBotActionGroup( CAN_OBJECTIVE_CONSTRUCT_TOWER1 );
}
}
void mapObject_Canyon::OnSpawnCaptured( string actionName ) {
if( actionName == "strogg_forward_spawn1" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** STROGG CAPTURED STROGG SPAWN 1 **********\n" );
}
objManager.deactivateBotActionGroup( CAN_STROGG_ATTACK_STROGG_SPAWN1 );
objManager.activateBotActionGroup( CAN_STROGG_DEFEND_STROGG_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_GDF_DEFEND_STROGG_SPAWN1 );
objManager.activateBotActionGroup( CAN_GDF_ATTACK_STROGG_SPAWN1 );
}
if( actionName == "gdf_forward_spawn1" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** GDF CAPTURED GDF SPAWN 1 **********\n" );
}
objManager.deactivateBotActionGroup( CAN_GDF_ATTACK_GDF_SPAWN1 );
objManager.activateBotActionGroup( CAN_GDF_DEFEND_GDF_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_STROGG_DEFEND_GDF_SPAWN1 );
objManager.activateBotActionGroup( CAN_STROGG_ATTACK_GDF_SPAWN1 );
}
if( actionName == "gdf_forward_spawn2" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** GDF CAPTURED GDF SPAWN 2 **********\n" );
}
objManager.deactivateBotActionGroup( CAN_GDF_ATTACK_GDF_SPAWN2 );
objManager.activateBotActionGroup( CAN_GDF_DEFEND_GDF_SPAWN2 );
objManager.deactivateBotActionGroup( CAN_STROGG_DEFEND_GDF_SPAWN2 );
objManager.activateBotActionGroup( CAN_STROGG_ATTACK_GDF_SPAWN2 );
}
if( actionName == "gdf_forward_spawn3" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** GDF CAPTURED GDF SPAWN 3 **********\n" );
}
objManager.deactivateBotActionGroup( CAN_GDF_ATTACK_GDF_SPAWN3 );
objManager.activateBotActionGroup( CAN_GDF_DEFEND_GDF_SPAWN3 );
objManager.deactivateBotActionGroup( CAN_STROGG_DEFEND_GDF_SPAWN3 );
objManager.activateBotActionGroup( CAN_STROGG_ATTACK_GDF_SPAWN3 );
}
}
void mapObject_Canyon::OnSpawnLiberated( string actionName ) {
if( actionName == "strogg_forward_spawn1" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** STROGG LOST STROGG SPAWN 1 **********\n" );
}
objManager.deactivateBotActionGroup( CAN_STROGG_DEFEND_STROGG_SPAWN1 );
objManager.activateBotActionGroup( CAN_STROGG_ATTACK_STROGG_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_GDF_ATTACK_STROGG_SPAWN1 );
objManager.activateBotActionGroup( CAN_GDF_DEFEND_STROGG_SPAWN1 );
}
if( actionName == "gdf_forward_spawn1" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** GDF LOST GDF SPAWN 1 **********\n" );
}
objManager.deactivateBotActionGroup( CAN_GDF_DEFEND_GDF_SPAWN1 );
objManager.activateBotActionGroup( CAN_GDF_ATTACK_GDF_SPAWN1 );
objManager.deactivateBotActionGroup( CAN_STROGG_ATTACK_GDF_SPAWN1 );
objManager.activateBotActionGroup( CAN_STROGG_DEFEND_GDF_SPAWN1 );
}
if( actionName == "gdf_forward_spawn2" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** GDF LOST GDF SPAWN 2 **********\n" );
}
objManager.deactivateBotActionGroup( CAN_GDF_DEFEND_GDF_SPAWN2 );
objManager.activateBotActionGroup( CAN_GDF_ATTACK_GDF_SPAWN2 );
objManager.deactivateBotActionGroup( CAN_STROGG_ATTACK_GDF_SPAWN2 );
objManager.activateBotActionGroup( CAN_STROGG_DEFEND_GDF_SPAWN2 );
}
if( actionName == "gdf_forward_spawn3" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** GDF LOST GDF SPAWN 3 **********\n" );
}
objManager.deactivateBotActionGroup( CAN_GDF_DEFEND_GDF_SPAWN3 );
objManager.activateBotActionGroup( CAN_GDF_ATTACK_GDF_SPAWN3 );
objManager.deactivateBotActionGroup( CAN_STROGG_ATTACK_GDF_SPAWN3 );
objManager.activateBotActionGroup( CAN_STROGG_DEFEND_GDF_SPAWN3 );
}
}
void mapObject_Canyon::OnTimeLimitHit() {
FinishTimedMission();
objManager.SetObjectiveEntity( $null_entity, -1 );
objManager.PlaySound( worldspawn.getKey( "snd_gdflose_strogg" ), stroggTeam );
objManager.PlaySound( worldspawn.getKey( "snd_gdflose_gdf" ), gdfTeam );
}
entity mapObject_Canyon::GetSpectateEntity() {
if ( !bridgeConstruction.vIsObjectiveComplete() ) {
return bridgeConstruction.vGetSpectateEntity();
}
entity deployedMCP = G_FindDeployedMCP();
if ( currentMCP == $null_entity && deployedMCP == $null_entity ) {
return $null_entity;
}
if ( currentMCP != $null_entity ) {
if ( !currentMCP.vIsObjectiveComplete() ) {
return currentMCP.vGetSpectateEntity();
}
}
if ( !scudTrigger.vIsObjectiveComplete() ) {
return scudTrigger.vGetSpectateEntity();
}
if ( finalObjective != $null_entity ) {
return finalObjective.vGetSpectateEntity();
}
return $null_entity;
}