etqw-sdk/base/script/maps/refinery.script

1360 lines
47 KiB
Plaintext
Raw Permalink Normal View History

2008-05-29 00:00:00 +00:00
#define OBJECTIVE_REFINERY_CAPTURE_OUTPOST 0
#define OBJECTIVE_REFINERY_HACK_SHIELD 1
#define OBJECTIVE_REFINERY_DESTROY_REFINERY 2
#define OBJECTIVE_REFINERY_DESTROY_REFINERY_B 3
#define REF_GDF_DEPLOY_BASE 0
#define REF_STROGG_DEPLOY_BASE 1
#define REF_OBJECTIVE_GDF_TOWER1 2
#define REF_OBJECTIVE_MCP 3
#define REF_GDF_ATTACK_MCP 4
#define REF_STROGG_DEFEND_MCP 5
#define REF_STROGG_DEPLOY_OBJ1 6
#define REF_OBJECTIVE_GDF_SPAWN1 7
#define REF_GDF_ATTACK_GDF_SPAWN1 8
#define REF_GDF_DEFEND_GDF_SPAWN1 9
#define REF_STROGG_ATTACK_GDF_SPAWN1 10
#define REF_STROGG_DEFEND_GDF_SPAWN1 11
#define REF_OBJECTIVE_GDF_TOWER2 12
#define REF_OBJECTIVE_ASSAULT_RAMP 13
#define REF_OBJECTIVE_SHIELD 14
#define REF_GDF_DEPLOY_OBJ2 15
#define REF_GDF_ATTACK_SHIELD 16
#define REF_STROGG_DEFEND_SHIELD 17
#define REF_STROGG_DEPLOY_OBJ2 18
#define REF_OBJECTIVE_DEVICE_NORTH 19
#define REF_OBJECTIVE_DEVICE_SOUTH 20
#define REF_GDF_DEPLOY_OBJ3 21
#define REF_GDF_ATTACK_DEVICE_NORTH 22
#define REF_STROGG_DEFEND_DEVICE_SOUTH 23
#define REF_GDF_ATTACK_DEVICE_SOUTH 24
#define REF_STROGG_DEFEND_DEVICE_NORTH 25
#define REF_OBJECTIVE_BARRICADE 26
#define REF_STROGG_DEFEND_BARRICADE_ROUTE 27
#define REF_GDF_ATTACK_BARRICADE_ROUTE 28
#define REF_GDF_USE_GUARDTOWER1 29
#define REF_GDF_USE_GUARDTOWER2 30
#define REF_GDF_ATTACK_RAMP_ROUTE 31
#define REF_STROGG_DEFEND_RAMP_ROUTE 32
#define REF_GDF_ATTACK_BARRICADE_ROUTE2 33 // to attack refinery, not shield gen (via barricade)
#define REF_STROGG_DEFEND_BARRICADE_ROUTE2 34
#define REF_STROGG_DEFEND_REFINERY 35
#define REF_GDF_ATTACK_REFINERY 43
#define REF_GDF_USE_GUN1 36
#define REF_GDF_USE_GUN2 37
#define REF_GDF_USE_GUN3 44
#define REF_GDF_USE_GUN4 38
#define REF_GDF_BUILD_GUN1 39
#define REF_GDF_BUILD_GUN2 40
#define REF_GDF_BUILD_GUN3 41
#define REF_GDF_BUILD_GUN4 42
object mapObject_Refinery : mapObject_Default {
void preinit();
void destroy();
void InitObjectives();
void DelayedBotSpawnThread();
void CompleteObjective( float index, entity p );
handle GetObjectiveMessage( float index );
void OnTimeLimitHit();
void OnOutpostCaptured();
void OnShieldHacked();
void OnHackObjective();
void OnRefineryDestroyed();
void OnRefineryDestroyedB();
void OnShieldDeployed( entity obj, entity trigger );
void OnHackComplete( entity obj );
void OnMCPSpawned( entity obj );
void OnMCPDestroyed( entity obj, vector newLocation, vector newAngles );
void OnMCPDelivered( entity obj );
void StartShieldObjective();
void StartFirstObjective();
void OnShieldDestroyedScud( entity trigger );
void OnGuardTower1Built();
void OnGuardTower1Destroyed();
boolean guardTower1Built;
void OnGuardTower2Built();
void OnGuardTower2Destroyed();
boolean guardTower2Built;
boolean bridgeMaterialsConstructed;
boolean barricadeDestroyed;
void OnGun1Built();
void OnGun1Destroyed();
void OnGun2Built();
void OnGun2Destroyed();
void OnGun3Built();
void OnGun3Destroyed();
void OnGun4Built();
void OnGun4Destroyed();
boolean gun2Built;
boolean gun3Built;
void OnStroggBarricadesDestroyed();
void BotBarricadeActions();
void OnBridgeMaterialsConstructed();
void OnBridgeMaterialsDestroyed();
void BotBridgeRouteActions();
void OnConstructionComplete( entity obj );
void OnDestructionComplete( entity obj );
void ClearMCPData();
void EntranceEffectsThread();
void StroggDevice1EffectsThread();
void StroggDevice2EffectsThread();
vector GetGDFBasePosition() { return '4930 -11460 830'; }
entity GetSpectateEntity();
entity endCameraA;
entity endCameraB;
void EndMap();
void CompleteMap();
void OnSpawnCaptured( string actionName );
void OnSpawnLiberated( string actionName );
float mainObjectiveIndex;
//
// Spawn masters
//
entity gdfBaseSpawn;
entity stroggBaseSpawn;
entity gdfTownSpawn;
entity gdfOutpostSpawn;
entity stroggOutpostSpawn;
entity gdfForwardHotelSpawn;
//
// Territories
//
entity gdfBaseTerritory;
entity outpostTerritory;
entity townTerritory;
entity stroggBaseTerritory;
//
// Objectives
//
entity objective1;
entity objective1Arrow1;
entity objective1Arrow2;
entity objective2;
entity objective2Arrow1;
entity objective2Arrow2;
entity objective3A;
entity objective3B;
entity objective3Arrow1;
entity objective3Arrow2;
entity stroggDeviceA;
entity stroggDeviceB;
entity mcpRoute;
entity mcpCaller;
entity shieldCaller;
entity scudTrigger;
entity refineryShield1;
entity refineryShield2;
entity refineryShield3;
entity refineryShield4;
entity refineryShield5;
entity vent;
entity refineryTriggerHurts_1;
entity refineryTriggerHurts_2;
entity refineryTriggerHurts_3;
entity refineryTriggerHurts_4;
entity refineryTriggerHurts_5;
float devicesDestroyed;
entity smokeStack01;
entity smokeStack02;
entity refineryRubble01;
entity main_entrance_detail;
entity entrance_explosion;
entity entrance_smoke1;
entity entrance_smoke2;
entity entrance_smoke3;
entity stroggdevice1_sparks1;
entity stroggdevice1_sparks2;
entity stroggdevice1_sparks3;
entity stroggdevice1_ooze_spurt1;
entity stroggdevice1_ooze_spurt2;
entity stroggdevice1_ooze_drip1;
entity stroggdevice1_ooze_drip2;
entity stroggdevice1_ooze_drip3;
entity stroggdevice1_ooze_drip4;
entity stroggdevice1_ooze_drip5;
entity stroggdevice1_ooze_explosion;
entity stroggdevice2_ooze_spurt1;
entity stroggdevice2_ooze_spurt2;
entity stroggdevice2_ooze_drip1;
entity stroggdevice2_ooze_drip2;
entity stroggdevice2_ooze_drip3;
entity stroggdevice2_ooze_explosion;
entity currentMCP;
entity finalObjectiveProxy;
entity finalObjectiveACreature;
entity finalObjectiveACreatureDestroyed;
entity finalObjectiveAPipes;
entity finalObjectiveAPipesDestroyed;
entity finalObjectiveASurround;
entity finalObjectiveASurroundDestroyed;
entity finalObjectiveB;
entity finalObjectiveBDestroyed;
entity guardTower1Construction;
entity guardTower2Construction;
entity guardTower1Object;
entity guardTower2Object;
entity gun1Construction;
entity gun2Construction;
entity gun3Construction;
entity gun4Construction;
entity bridgeMaterials;
entity stroggBarricades;
entity noplant_barricade;
entity noplant_north_filter;
entity noplant_south_filter;
entity assault_ramp_obstacle;
entity assault_ramp_obstacle_1;
entity assault_ramp_obstacle_2;
entity assault_ramp_obstacle_3;
entity barricade_obstacle;
entity barricade_obstacle_2;
entity barricade_obstacle_3;
entity barricade_obstacle_4;
entity barricade_obstacle_5;
entity barricade_clip;
entity refinery_front_obstacle;
entity refinery_side_obstacle;
entity refinery_rear_obstacle;
cvar debug_script;
}
mapObject_Base Refinery_MapScript() {
return new mapObject_Refinery;
}
void mapObject_Refinery::preinit() {
}
void mapObject_Refinery::destroy() {
}
void mapObject_Refinery::InitObjectives() {
gameRules.setWinningTeam( stroggTeam );
gdfTeam.SetRespawnWait( 15 );
stroggTeam.SetRespawnWait( 20 );
gdfTeam.InitRespawnTimeChange();
stroggTeam.InitRespawnTimeChange();
CreateRespawnTimeThread( gdfTeam );
//
// Set up the spawn points
//
gdfBaseSpawn = worldspawn.getEntityKey( "script_gdf_base_spawn" );
stroggBaseSpawn = worldspawn.getEntityKey( "script_strogg_base_spawn" );
gdfTownSpawn = worldspawn.getEntityKey( "script_gdf_town_spawn" );
gdfOutpostSpawn = worldspawn.getEntityKey( "script_gdf_outpost_spawn" );
stroggOutpostSpawn = worldspawn.getEntityKey( "script_strogg_outpost_spawn" );
gdfForwardHotelSpawn = worldspawn.getEntityKey( "script_hotel_spawn" );
stroggBaseSpawn.setGameTeam ( stroggTeam );
gdfBaseSpawn.setGameTeam ( gdfTeam );
gdfTownSpawn.setGameTeam ( $null_entity );
gdfOutpostSpawn.setGameTeam ( $null_entity );
stroggOutpostSpawn.setGameTeam ( stroggTeam );
gdfForwardHotelSpawn.vSetActive( false );
//
// Set up the territories
//
gdfBaseTerritory = worldspawn.getEntityKey( "script_gdf_base_territory" );
outpostTerritory = worldspawn.getEntityKey( "script_outpost_territory" );
townTerritory = worldspawn.getEntityKey( "script_town_territory" );
stroggBaseTerritory = worldspawn.getEntityKey( "script_strogg_base_territory" );
gdfBaseTerritory.setActive( true );
outpostTerritory.setActive( true );
townTerritory.setActive( false );
stroggBaseTerritory.setActive( false );
//
// Set up the objectives
//
objective1 = worldspawn.getEntityKey( "script_obj1_marker" );
objective1Arrow1 = worldspawn.getEntityKey( "script_obj1_arrow1" );
objective1Arrow2 = worldspawn.getEntityKey( "script_obj1_arrow2" );
objective2 = worldspawn.getEntityKey( "script_obj2_marker" );
objective2Arrow1 = worldspawn.getEntityKey( "script_obj2_arrow1" );
objective2Arrow2 = worldspawn.getEntityKey( "script_obj2_arrow2" );
objective3A = worldspawn.getEntityKey( "script_obj3_marker_a" );
objective3B = worldspawn.getEntityKey( "script_obj3_marker_b" );
objective3Arrow1 = worldspawn.getEntityKey( "script_obj3_arrow1" );
objective3Arrow2 = worldspawn.getEntityKey( "script_obj3_arrow2" );
refineryShield1 = worldspawn.getEntityKey( "script_refinery_shield_1" );
refineryShield2 = worldspawn.getEntityKey( "script_refinery_shield_2" );
refineryShield3 = worldspawn.getEntityKey( "script_refinery_shield_3" );
refineryShield4 = worldspawn.getEntityKey( "script_refinery_shield_4" );
refineryShield5 = worldspawn.getEntityKey( "script_refinery_shield_5" );
vent = worldspawn.getEntityKey( "script_vent" );
refineryTriggerHurts_1 = worldspawn.getEntityKey( "script_refinery_trigger_hurts_1" );
refineryTriggerHurts_2 = worldspawn.getEntityKey( "script_refinery_trigger_hurts_2" );
refineryTriggerHurts_3 = worldspawn.getEntityKey( "script_refinery_trigger_hurts_3" );
refineryTriggerHurts_4 = worldspawn.getEntityKey( "script_refinery_trigger_hurts_4" );
refineryTriggerHurts_5 = worldspawn.getEntityKey( "script_refinery_trigger_hurts_5" );
mcpRoute = worldspawn.getEntityKey( "script_mcp_route" );
mcpCaller = worldspawn.getEntityKey( "script_mcp_caller" );
shieldCaller = worldspawn.getEntityKey( "script_shieldgen_caller" );
smokeStack01 = worldspawn.getEntityKey( "script_smokestack01" );
smokeStack02 = worldspawn.getEntityKey( "script_smokestack02" );
refineryRubble01 = worldspawn.getEntityKey( "script_broken_refinery_stuff01" );
main_entrance_detail = worldspawn.getEntityKey( "script_main_entrance_detail" );
entrance_smoke1 = worldspawn.getEntityKey( "script_entrance_smoke1" );
entrance_smoke2 = worldspawn.getEntityKey( "script_entrance_smoke2" );
entrance_smoke3 = worldspawn.getEntityKey( "script_entrance_smoke3" );
entrance_explosion = worldspawn.getEntityKey( "script_entrance_explosion" );
stroggdevice1_sparks1 = worldspawn.getEntityKey( "script_stroggdevice1_sparks1" );
stroggdevice1_sparks2 = worldspawn.getEntityKey( "script_stroggdevice1_sparks2" );
stroggdevice1_sparks3 = worldspawn.getEntityKey( "script_stroggdevice1_sparks3" );
stroggdevice1_ooze_spurt1 = worldspawn.getEntityKey( "script_stroggdevice1_ooze_spurt1" );
stroggdevice1_ooze_spurt2 = worldspawn.getEntityKey( "script_stroggdevice1_ooze_spurt2" );
stroggdevice1_ooze_drip1 = worldspawn.getEntityKey( "script_stroggdevice1_ooze_drip1" );
stroggdevice1_ooze_drip2 = worldspawn.getEntityKey( "script_stroggdevice1_ooze_drip2" );
stroggdevice1_ooze_drip3 = worldspawn.getEntityKey( "script_stroggdevice1_ooze_drip3" );
stroggdevice1_ooze_drip4 = worldspawn.getEntityKey( "script_stroggdevice1_ooze_drip4" );
stroggdevice1_ooze_drip5 = worldspawn.getEntityKey( "script_stroggdevice1_ooze_drip5" );
stroggdevice1_ooze_explosion = worldspawn.getEntityKey( "script_stroggdevice1_ooze_explosion" );
stroggdevice2_ooze_spurt1 = worldspawn.getEntityKey( "script_stroggdevice2_ooze_spurt1" );
stroggdevice2_ooze_spurt2 = worldspawn.getEntityKey( "script_stroggdevice2_ooze_spurt2" );
stroggdevice2_ooze_drip1 = worldspawn.getEntityKey( "script_stroggdevice2_ooze_drip1" );
stroggdevice2_ooze_drip2 = worldspawn.getEntityKey( "script_stroggdevice2_ooze_drip2" );
stroggdevice2_ooze_drip3 = worldspawn.getEntityKey( "script_stroggdevice2_ooze_drip3" );
stroggdevice2_ooze_explosion = worldspawn.getEntityKey( "script_stroggdevice2_ooze_explosion" );
stroggDeviceA = worldspawn.getEntityKey( "script_north_stroyent" );
stroggDeviceB = worldspawn.getEntityKey( "script_south_stroyent" );
endCameraA = worldspawn.getEntityKey( "script_placement_camera_a" );
endCameraB = worldspawn.getEntityKey( "script_placement_camera_b" );
finalObjectiveProxy = worldspawn.getEntityKey( "script_final_objective_proxy" );
finalObjectiveACreature = worldspawn.getEntityKey( "script_final_objective_a_creature" );
finalObjectiveACreatureDestroyed = worldspawn.getEntityKey( "script_final_objective_a_creature_destroyed" );
finalObjectiveAPipes = worldspawn.getEntityKey( "script_final_objective_a_pipes" );
finalObjectiveAPipesDestroyed = worldspawn.getEntityKey( "script_final_objective_a_pipes_destroyed" );
finalObjectiveASurround = worldspawn.getEntityKey( "script_final_objective_a_surround" );
finalObjectiveASurroundDestroyed = worldspawn.getEntityKey( "script_final_objective_a_surround_destroyed" );
finalObjectiveB = worldspawn.getEntityKey( "script_final_objective_b" );
finalObjectiveBDestroyed = worldspawn.getEntityKey( "script_final_objective_b_destroyed" );
objective1Arrow1.setGameTeam( gdfTeam );
objective1Arrow2.setGameTeam( gdfTeam );
objective2Arrow1.setGameTeam( gdfTeam );
objective2Arrow2.setGameTeam( gdfTeam );
objective3Arrow1.setGameTeam( gdfTeam );
objective3Arrow2.setGameTeam( gdfTeam );
objective1Arrow1.vStartObjective();
objective1Arrow2.vStartObjective();
objective1.vStartObjective();
objective2.vStartObjective();
objective3A.vStartObjective();
objective3B.vStartObjective();
guardTower1Construction = worldspawn.getEntityKey( "script_guard_tower_1" );
guardTower1Object = worldspawn.getEntityKey( "script_guard_tower_1_object" );
guardTower2Construction = worldspawn.getEntityKey( "script_guard_tower_2" );
guardTower2Object = worldspawn.getEntityKey( "script_guard_tower_2_object" );
gun1Construction = worldspawn.getEntityKey( "script_gun_1" );
gun2Construction = worldspawn.getEntityKey( "script_gun_2" );
gun3Construction = worldspawn.getEntityKey( "script_gun_3" );
gun4Construction = worldspawn.getEntityKey( "script_gun_4" );
bridgeMaterials = worldspawn.getEntityKey( "script_bridge_materials" ); // secondary bridge objective
noplant_barricade = worldspawn.getEntityKey( "script_noplant_barricade" );
noplant_north_filter = worldspawn.getEntityKey( "script_noplant_north_filter" );
noplant_south_filter = worldspawn.getEntityKey( "script_noplant_south_filter" );
stroggBarricades = worldspawn.getEntityKey( "script_strogg_barricades" );
assault_ramp_obstacle = worldspawn.getEntityKey( "script_assault_ramp_obstacle" );
assault_ramp_obstacle_1 = worldspawn.getEntityKey( "script_assault_ramp_obstacle_1" );
assault_ramp_obstacle_2 = worldspawn.getEntityKey( "script_assault_ramp_obstacle_2" );
assault_ramp_obstacle_3 = worldspawn.getEntityKey( "script_assault_ramp_obstacle_3" );
barricade_obstacle = worldspawn.getEntityKey( "script_barricade_obstacle" );
barricade_obstacle_2 = worldspawn.getEntityKey( "script_barricade_obstacle_2" );
barricade_obstacle_3 = worldspawn.getEntityKey( "script_barricade_obstacle_3" );
barricade_obstacle_4 = worldspawn.getEntityKey( "script_barricade_obstacle_4" );
barricade_obstacle_5 = worldspawn.getEntityKey( "script_barricade_obstacle_5" );
barricade_clip = worldspawn.getEntityKey( "script_barricade_clip");
refinery_front_obstacle = worldspawn.getEntityKey( "script_refinery_front_obstacle" );
refinery_rear_obstacle = worldspawn.getEntityKey( "script_refinery_rear_obstacle" );
refinery_side_obstacle = worldspawn.getEntityKey( "script_refinery_side_obstacle" );
sys.enableBotReachability( "bot_reachability_barricade_1", 2, true );
sys.enableBotReachability( "bot_reachability_barricade_2", 2, true );
sys.enableBotReachability( "bot_reachability_barricade_3", 2, true );
sys.enableBotReachability( "bot_reachability_barricade_4", 2, true );
refineryRubble01.hide();
finalObjectiveACreatureDestroyed.hide();
finalObjectiveACreatureDestroyed.forceDisableClip();
finalObjectiveAPipesDestroyed.hide();
finalObjectiveAPipesDestroyed.forceDisableClip();
finalObjectiveASurroundDestroyed.hide();
finalObjectiveASurroundDestroyed.forceDisableClip();
finalObjectiveBDestroyed.hide();
finalObjectiveBDestroyed.forceDisableClip();
devicesDestroyed = 0;
barricadeDestroyed = false;
guardTower1Built = false;
guardTower2Built = false;
bridgeMaterialsConstructed = false;
gun2Built = false;
gun3Built = false;
gameRules.setEndGameCamera( endCameraA );
mainObjectiveIndex = OBJECTIVE_REFINERY_CAPTURE_OUTPOST;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
gun4Construction.vCreateMission();
guardTower1Construction.vCreateMission();
gun1Construction.vCreateMission();
mcpCaller.vOnDeploy();
debug_script = sys.getCVar( "bot_debugMapScript", "1" );
CreateDeployTasks();
thread StartFirstObjective();
if ( debug_script.getBoolValue() ) {
sys.print( "*****BOTS SETUP FOR MCP OBJECTIVE*****\n" );
}
objManager.setAttackingTeam( GDF );
objManager.setBotSightDist( 3000.0f );
objManager.activateBotActionGroup( REF_GDF_DEPLOY_BASE );
objManager.activateBotActionGroup( REF_OBJECTIVE_MCP );
objManager.activateBotActionGroup( REF_GDF_ATTACK_MCP );
objManager.activateBotActionGroup( REF_STROGG_DEFEND_MCP );
objManager.activateBotActionGroup( REF_STROGG_DEPLOY_OBJ1 );
objManager.activateBotActionGroup( REF_OBJECTIVE_GDF_TOWER1 );
objManager.activateBotActionGroup( REF_GDF_BUILD_GUN1 );
objManager.activateBotActionGroup( REF_GDF_BUILD_GUN4 );
objManager.setPrimaryTeamAction( GDF, "gdf_deploy_mcp_1" );
objManager.setPrimaryTeamAction( STROGG, "gdf_deploy_mcp_1" );
objManager.setSecondaryTeamAction( STROGG, "strogg_avt_mcp_1" );
objManager.setSecondaryTeamAction( GDF, "gdf_build_tower_1" );
objManager.setBotCriticalClass( GDF, ENGINEER );
objManager.setBotCriticalClass( STROGG, ENGINEER );
objManager.setMapHasMCPGoal( true );
// set rear spawns
objManager.setTeamUseRearSpawn( STROGG, true );
stroggTeam.setTeamRearSpawn( stroggBaseSpawn );
objManager.setTeamUseRearSpawnPercentage( STROGG, 70 );
//objManager.setTeamUseRearSpawn( GDF, true );
//gdfTeam.setTeamRearSpawn( gdfBaseSpawn );
//objManager.setTeamUseRearSpawnPercentage( GDF, 50 );
thread DelayedBotSpawnThread();
objManager.disableAASAreaInLocation( AAS_PLAYER, '9215 1001 328' );
}
void mapObject_Refinery::DelayedBotSpawnThread() {
sys.wait( 10.0f );
objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 2, false, true );
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 1, false, false );
objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 2, false, false );
objManager.setTeamNeededClass( STROGG, FIELDOPS, NOCLASS, 1, false, false );
objManager.setTeamNeededClass( STROGG, ENGINEER, NOCLASS, 2, false, false );
}
void mapObject_Refinery::CompleteObjective( float index, entity p ) {
if ( index == OBJECTIVE_REFINERY_CAPTURE_OUTPOST ) {
OnOutpostCaptured();
} else if ( index == OBJECTIVE_REFINERY_HACK_SHIELD ) {
OnHackObjective();
} else if ( index == OBJECTIVE_REFINERY_DESTROY_REFINERY ) {
OnRefineryDestroyed();
} else if ( index == OBJECTIVE_REFINERY_DESTROY_REFINERY_B ) {
OnRefineryDestroyedB();
}
}
handle mapObject_Refinery::GetObjectiveMessage( float index ) {
if( index == OBJECTIVE_REFINERY_CAPTURE_OUTPOST ) {
return sys.localizeString( "maps/refinery/captured_outpost" );
}
if( index == OBJECTIVE_REFINERY_HACK_SHIELD ) {
return sys.localizeString( "maps/refinery/destroyed_entrance" );
}
if( index == OBJECTIVE_REFINERY_DESTROY_REFINERY ) {
return sys.localizeString( "maps/refinery/destroyed_device_a" );
}
if( index == OBJECTIVE_REFINERY_DESTROY_REFINERY_B ) {
return sys.localizeString( "maps/refinery/destroyed_device_b" );
}
return g_locStr_BadObjective;
}
void mapObject_Refinery::OnConstructionComplete( entity obj ) {
if ( obj == guardTower1Construction ) {
OnGuardTower1Built();
} else if ( obj == guardTower2Construction ) {
OnGuardTower2Built();
} else if ( obj == gun1Construction ) {
OnGun1Built();
} else if ( obj == gun2Construction ) {
OnGun2Built();
} else if ( obj == gun3Construction ) {
OnGun3Built();
} else if ( obj == gun4Construction ) {
OnGun4Built();
} else if ( obj == bridgeMaterials ) {
OnBridgeMaterialsConstructed();
}
}
void mapObject_Refinery::OnDestructionComplete( entity obj ) {
if ( obj == guardTower1Construction ) {
OnGuardTower1Destroyed();
} else if ( obj == guardTower2Construction ) {
OnGuardTower2Destroyed();
} else if ( obj == gun1Construction ) {
OnGun1Destroyed();
} else if ( obj == gun2Construction ) {
OnGun2Destroyed();
} else if ( obj == gun3Construction ) {
OnGun3Destroyed();
} else if ( obj == gun4Construction ) {
OnGun4Destroyed();
} else if ( obj == stroggBarricades ) {
OnStroggBarricadesDestroyed();
} else if ( obj == bridgeMaterials ) {
OnBridgeMaterialsDestroyed();
}
}
void mapObject_Refinery::OnGuardTower1Built() {
guardTower1Built = true;
guardTower1Construction.vCompleteMission();
objManager.deactivateBotActionGroup( REF_OBJECTIVE_GDF_TOWER1 );
if ( mainObjectiveIndex > OBJECTIVE_REFINERY_CAPTURE_OUTPOST ) {
return;
}
guardTower1Object.vCreateMission();
objManager.activateBotActionGroup( REF_GDF_USE_GUARDTOWER1 );
}
void mapObject_Refinery::OnGuardTower1Destroyed() {
guardTower1Built = false;
guardTower1Object.vCompleteMission();
if ( mainObjectiveIndex < OBJECTIVE_REFINERY_HACK_SHIELD ) {
guardTower1Construction.vCreateMission();
objManager.activateBotActionGroup( REF_OBJECTIVE_GDF_TOWER1 );
objManager.deactivateBotActionGroup( REF_GDF_USE_GUARDTOWER1 );
}
}
void mapObject_Refinery::OnGuardTower2Built() {
guardTower2Built = true;
guardTower2Construction.vCompleteMission();
objManager.deactivateBotActionGroup( REF_OBJECTIVE_GDF_TOWER2 );
if ( mainObjectiveIndex != OBJECTIVE_REFINERY_HACK_SHIELD ) {
return;
}
guardTower2Object.vCreateMission();
objManager.activateBotActionGroup( REF_GDF_USE_GUARDTOWER2 );
}
void mapObject_Refinery::OnGuardTower2Destroyed() {
guardTower2Built = false;
guardTower2Object.vCompleteMission();
if ( mainObjectiveIndex < OBJECTIVE_REFINERY_DESTROY_REFINERY ) {
guardTower2Construction.vCreateMission();
objManager.activateBotActionGroup( REF_OBJECTIVE_GDF_TOWER2 );
objManager.deactivateBotActionGroup( REF_GDF_USE_GUARDTOWER2 );
}
}
void mapObject_Refinery::OnGun1Built() {
gun1Construction.vCompleteMission();
objManager.deactivateBotActionGroup( REF_GDF_BUILD_GUN1 );
if ( mainObjectiveIndex < OBJECTIVE_REFINERY_HACK_SHIELD ) {
objManager.activateBotActionGroup( REF_GDF_USE_GUN1 );
}
}
void mapObject_Refinery::OnGun1Destroyed() {
objManager.deactivateBotActionGroup( REF_GDF_USE_GUN1 );
if ( mainObjectiveIndex < OBJECTIVE_REFINERY_HACK_SHIELD ) {
gun1Construction.vCreateMission();
objManager.activateBotActionGroup( REF_GDF_BUILD_GUN1 );
}
}
void mapObject_Refinery::OnGun2Built() {
gun2Built = true;
gun2Construction.vCompleteMission();
objManager.deactivateBotActionGroup( REF_GDF_BUILD_GUN2 );
if ( mainObjectiveIndex == OBJECTIVE_REFINERY_HACK_SHIELD ) {
objManager.activateBotActionGroup( REF_GDF_USE_GUN2 );
}
}
void mapObject_Refinery::OnGun2Destroyed() {
gun2Built = false;
objManager.deactivateBotActionGroup( REF_GDF_USE_GUN2 );
if ( mainObjectiveIndex == OBJECTIVE_REFINERY_HACK_SHIELD ) {
gun2Construction.vCreateMission();
objManager.activateBotActionGroup( REF_GDF_BUILD_GUN2 );
}
}
void mapObject_Refinery::OnGun3Built() {
gun3Built = true;
gun3Construction.vCompleteMission();
objManager.deactivateBotActionGroup( REF_GDF_BUILD_GUN3 );
if ( mainObjectiveIndex == OBJECTIVE_REFINERY_HACK_SHIELD ) {
objManager.activateBotActionGroup( REF_GDF_USE_GUN3 );
}
}
void mapObject_Refinery::OnGun3Destroyed() {
gun3Built = false;
objManager.deactivateBotActionGroup( REF_GDF_USE_GUN3 );
if ( mainObjectiveIndex == OBJECTIVE_REFINERY_HACK_SHIELD ) {
gun2Construction.vCreateMission();
objManager.activateBotActionGroup( REF_GDF_BUILD_GUN3 );
}
}
void mapObject_Refinery::OnGun4Built() {
gun4Construction.vCompleteMission();
objManager.deactivateBotActionGroup( REF_GDF_BUILD_GUN4 );
if ( mainObjectiveIndex < OBJECTIVE_REFINERY_HACK_SHIELD ) {
objManager.activateBotActionGroup( REF_GDF_USE_GUN4 );
}
}
void mapObject_Refinery::OnGun4Destroyed() {
objManager.deactivateBotActionGroup( REF_GDF_USE_GUN4 );
if ( mainObjectiveIndex < OBJECTIVE_REFINERY_HACK_SHIELD ) {
gun4Construction.vCreateMission();
objManager.activateBotActionGroup( REF_GDF_BUILD_GUN4 );
}
}
void mapObject_Refinery::OnStroggBarricadesDestroyed() {
noplant_barricade.remove();
stroggBarricades.vCompleteMission();
barricade_clip.forceDisableClip();
// remove func_aasobstacles at barricade
barricade_obstacle.activate( barricade_obstacle );
barricade_obstacle_2.activate( barricade_obstacle_2 );
barricade_obstacle_3.activate( barricade_obstacle_3 );
barricade_obstacle_4.activate( barricade_obstacle_4 );
barricade_obstacle_5.activate( barricade_obstacle_5 );
// disable node path around barricade when barricade is destroyed
objManager.disableNode("strogg_barricade_1" );
objManager.disableNode("strogg_barricade_2" );
objManager.disableNode("strogg_barricade_3" );
objManager.disableNode("strogg_barricade_4" );
// enable node path through barricade
objManager.enableNode("barricade_1" );
objManager.deactivateBotActionGroup( REF_OBJECTIVE_BARRICADE );
objManager.enableRoute( "bot_route_barricade" );
barricadeDestroyed = true;
BotBarricadeActions();
}
void mapObject_Refinery::BotBarricadeActions() {
if ( mainObjectiveIndex == OBJECTIVE_REFINERY_HACK_SHIELD) {
objManager.activateBotActionGroup( REF_STROGG_DEFEND_BARRICADE_ROUTE );
objManager.activateBotActionGroup( REF_GDF_ATTACK_BARRICADE_ROUTE );
}
if ( mainObjectiveIndex == OBJECTIVE_REFINERY_DESTROY_REFINERY) {
objManager.activateBotActionGroup( REF_STROGG_DEFEND_BARRICADE_ROUTE2 );
objManager.activateBotActionGroup( REF_GDF_ATTACK_BARRICADE_ROUTE2 );
}
if ( mainObjectiveIndex == OBJECTIVE_REFINERY_DESTROY_REFINERY_B) {
objManager.activateBotActionGroup( REF_STROGG_DEFEND_BARRICADE_ROUTE2 );
objManager.activateBotActionGroup( REF_GDF_ATTACK_BARRICADE_ROUTE2 );
}
}
void mapObject_Refinery::OnBridgeMaterialsConstructed() {
bridgeMaterialsConstructed = true;
bridgeMaterials.vCompleteMission();
assault_ramp_obstacle.activate( assault_ramp_obstacle );
assault_ramp_obstacle_1.activate( assault_ramp_obstacle_1 );
assault_ramp_obstacle_2.activate( assault_ramp_obstacle_2 );
assault_ramp_obstacle_3.activate( assault_ramp_obstacle_3 );
objManager.deactivateBotActionGroup( REF_OBJECTIVE_ASSAULT_RAMP );
if ( mainObjectiveIndex != OBJECTIVE_REFINERY_HACK_SHIELD ) {
return;
}
BotBridgeRouteActions();
}
void mapObject_Refinery::BotBridgeRouteActions() {
objManager.disableRoute( "bot_route_start_hack_1" );
objManager.enableRoute( "bot_route_start_hack_2" );
objManager.enableRoute( "bot_route_start_ramp_1" );
objManager.activateBotActionGroup( REF_GDF_ATTACK_RAMP_ROUTE );
objManager.activateBotActionGroup( REF_STROGG_DEFEND_RAMP_ROUTE );
}
void mapObject_Refinery::OnBridgeMaterialsDestroyed() {
if ( mainObjectiveIndex < OBJECTIVE_REFINERY_DESTROY_REFINERY ) {
bridgeMaterials.vCreateMission();
objManager.activateBotActionGroup( REF_OBJECTIVE_ASSAULT_RAMP );
}
}
void mapObject_Refinery::ClearMCPData() {
if ( currentMCP != $null_entity ) {
currentMCP.vFreeMission();
currentMCP = $null_entity;
}
}
void mapObject_Refinery::OnMCPSpawned( entity obj ) {
ClearMCPData();
}
void mapObject_Refinery::OnMCPDestroyed( entity obj, vector newLocation, vector newAngles ) {
if ( currentMCP != obj ) {
return;
}
ClearMCPData();
mcpCaller.vCallDrop( newLocation, newAngles );
}
void mapObject_Refinery::OnMCPDelivered( entity obj ) {
ClearMCPData();
if ( mainObjectiveIndex == OBJECTIVE_REFINERY_CAPTURE_OUTPOST ) {
currentMCP = obj;
currentMCP.vSetGoalMarker( objective1 );
currentMCP.vSetPathTargets( mcpCaller.getWorldOrigin(), objective1.getWorldOrigin() );
currentMCP.setTrackerEntity( mcpRoute );
objManager.SetObjectiveEntity( currentMCP, mainObjectiveIndex );
currentMCP.vCreateMission();
CreateInitialTimedMission( currentMCP );
}
}
void mapObject_Refinery::OnOutpostCaptured() {
mainObjectiveIndex = OBJECTIVE_REFINERY_HACK_SHIELD;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
outpostTerritory.setGameTeam( gdfTeam );
gdfOutpostSpawn.setGameTeam ( gdfTeam );
stroggOutpostSpawn.setGameTeam( $null_entity); // strogg
gdfBaseTerritory.setActive( false );
outpostTerritory.setActive( true );
townTerritory.setActive( true );
objective1Arrow1.vFinishObjective();
objective1Arrow2.vFinishObjective();
objective2Arrow1.vStartObjective();
objective2Arrow2.vStartObjective();
objective1.vFinishObjective();
// forward spawn now active
gdfForwardHotelSpawn.vSetActive( true );
if ( !guardTower2Built ) {
guardTower2Construction.vCreateMission();
} else {
guardTower2Object.vCreateMission();
objManager.activateBotActionGroup( REF_GDF_USE_GUARDTOWER2 );
}
guardTower1Construction.vFreeMission();
if ( !gun2Built ) {
gun2Construction.vCreateMission();
} else {
objManager.activateBotActionGroup( REF_GDF_USE_GUN2 );
}
if ( !gun3Built ) {
gun3Construction.vCreateMission();
} else {
objManager.activateBotActionGroup( REF_GDF_USE_GUN3 );
}
gun1Construction.vFreeMission();
gun4Construction.vFreeMission();
guardTower1Object.vFreeMission();
if ( !barricadeDestroyed ) {
stroggBarricades.vCreateMission();
}
if ( !bridgeMaterialsConstructed ) {
bridgeMaterials.vCreateMission();
}
if ( currentMCP != $null_entity ) {
currentMCP.vCompleteMission();
}
StopTimedMission();
currentMCP = $null_entity;
objManager.SetObjectiveEntity( $null_entity, -1 );
shieldCaller.vOnDeploy();
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( REF_GDF_DEPLOY_BASE );
objManager.deactivateBotActionGroup( REF_OBJECTIVE_MCP );
objManager.deactivateBotActionGroup( REF_GDF_ATTACK_MCP );
objManager.deactivateBotActionGroup( REF_STROGG_DEFEND_MCP );
objManager.deactivateBotActionGroup( REF_STROGG_DEPLOY_OBJ1 );
objManager.deactivateBotActionGroup( REF_OBJECTIVE_GDF_TOWER1 );
objManager.deactivateBotActionGroup( REF_GDF_USE_GUARDTOWER1 );
objManager.activateBotActionGroup( REF_OBJECTIVE_GDF_SPAWN1 );
objManager.activateBotActionGroup( REF_GDF_ATTACK_GDF_SPAWN1 );
objManager.activateBotActionGroup( REF_STROGG_DEFEND_GDF_SPAWN1 );
if ( !guardTower2Built ) {
objManager.activateBotActionGroup( REF_OBJECTIVE_GDF_TOWER2 );
} else {
objManager.activateBotActionGroup( REF_GDF_USE_GUARDTOWER2 );
}
if ( !bridgeMaterialsConstructed ) {
objManager.activateBotActionGroup( REF_OBJECTIVE_ASSAULT_RAMP );
} else {
BotBridgeRouteActions();
}
if ( !barricadeDestroyed ) {
objManager.activateBotActionGroup( REF_OBJECTIVE_BARRICADE );
} else {
BotBarricadeActions();
}
objManager.activateBotActionGroup( REF_OBJECTIVE_SHIELD );
objManager.activateBotActionGroup( REF_GDF_DEPLOY_OBJ2 );
objManager.activateBotActionGroup( REF_GDF_ATTACK_SHIELD );
objManager.activateBotActionGroup( REF_STROGG_DEFEND_SHIELD );
objManager.activateBotActionGroup( REF_STROGG_DEPLOY_OBJ2 );
if ( !gun2Built ) {
objManager.activateBotActionGroup( REF_GDF_BUILD_GUN2 );
}
if ( !gun3Built ) {
objManager.activateBotActionGroup( REF_GDF_BUILD_GUN3 );
}
objManager.deactivateBotActionGroup( REF_GDF_BUILD_GUN1 );
objManager.deactivateBotActionGroup( REF_GDF_USE_GUN1 );
objManager.deactivateBotActionGroup( REF_GDF_BUILD_GUN4 );
objManager.deactivateBotActionGroup( REF_GDF_USE_GUN4 );
objManager.setPrimaryTeamAction( GDF, "gdf_hack_shield_1" );
objManager.setPrimaryTeamAction( STROGG, "gdf_hack_shield_1" );
objManager.setSecondaryTeamAction( GDF, "gdf_forward_spawn_1" );
objManager.setSecondaryTeamAction( STROGG, "gdf_forward_spawn_1" );
objManager.setBotCriticalClass( GDF, COVERTOPS );
objManager.setBotCriticalClass( STROGG, ENGINEER );
objManager.setTeamNeededClass( GDF, COVERTOPS, NOCLASS, 2, false, true );
objManager.setTeamNeededClass( GDF, SOLDIER, NOCLASS, 1, false, false );
objManager.setTeamNeededClass( STROGG, ENGINEER, NOCLASS, 2, false, true );
objManager.setMapHasMCPGoal( false );
objManager.setBotTeamRetreatTime( STROGG, 15 );
objManager.clearTeamBotBoundEntities( GDF );
// set rear spawns
objManager.setTeamUseRearSpawn( STROGG, false );
stroggTeam.setTeamRearSpawn( stroggBaseSpawn );
objManager.setTeamUseRearSpawnPercentage( STROGG, 50 );
objManager.setTeamUseRearSpawn( GDF, true );
gdfTeam.setTeamRearSpawn( gdfBaseSpawn );
objManager.setTeamUseRearSpawnPercentage( GDF, 20 );
}
void mapObject_Refinery::OnShieldDeployed( entity obj, entity trigger ) {
scudTrigger = trigger;
scudTrigger.vStartObjective();
}
void mapObject_Refinery::OnHackComplete( entity obj ) {
if ( obj == scudTrigger ) {
objManager.deactivateBotActionGroup( REF_OBJECTIVE_SHIELD );
OnShieldHacked();
}
}
void mapObject_Refinery::OnShieldHacked() {
objManager.SetObjectiveEntity( $null_entity, -1 );
scudTrigger.vCompleteMission();
StopTimedMission();
}
void mapObject_Refinery::EntranceEffectsThread() {
sys.wait( 0.1f );
entrance_smoke1.vTriggerParticleEffect( 1 );
entrance_smoke2.vTriggerParticleEffect( 1 );
entrance_smoke3.vTriggerParticleEffect( 1 );
entrance_explosion.vTriggerParticleEffect( 1 );
}
void mapObject_Refinery::OnHackObjective() {
mainObjectiveIndex = OBJECTIVE_REFINERY_DESTROY_REFINERY;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
townTerritory.setGameTeam( gdfTeam );
gdfTownSpawn.setGameTeam( gdfTeam );
// stroggTownSpawn.setGameTeam( $null_entity );
outpostTerritory.setActive( false );
townTerritory.setActive( true );
stroggBaseTerritory.setActive( true );
objective2Arrow1.vFinishObjective();
objective2Arrow2.vFinishObjective();
objective2.vFinishObjective();
objective3Arrow1.vStartObjective();
objective3Arrow2.vStartObjective();
// remove doors and disable trigger hurts
refineryShield1.remove();
refineryShield2.remove();
refineryShield3.remove();
refineryShield4.remove();
refineryShield5.remove();
vent.remove();
refineryTriggerHurts_1.remove();
refineryTriggerHurts_2.remove();
refineryTriggerHurts_3.remove();
refineryTriggerHurts_4.remove();
refineryTriggerHurts_5.remove();
refinery_rear_obstacle.activate( refinery_rear_obstacle );
refinery_side_obstacle.activate( refinery_side_obstacle );
refinery_front_obstacle.activate( refinery_front_obstacle );
smokeStack01.remove();
smokeStack02.remove();
refineryRubble01.show();
thread EntranceEffectsThread();
main_entrance_detail.remove();
// hotel spawn point cannot be fought over now
gdfForwardHotelSpawn.vSetActive( false );
gdfForwardHotelSpawn.setGameTeam( gdfTeam );
guardTower2Construction.vFreeMission();
gun2Construction.vFreeMission();
gun3Construction.vFreeMission();
bridgeMaterials.vFreeMission();
guardTower2Object.vFreeMission();
objManager.SetObjectiveEntity( finalObjectiveProxy, mainObjectiveIndex );
CreateInitialTimedMission( finalObjectiveProxy );
stroggDeviceA.vCreateMission();
stroggDeviceB.vCreateMission();
gdfTeam.SetRespawnWait( 20 );
ResetRespawnTimeThread();
if ( debug_script.getBoolValue() ) {
sys.print( "*****BOTS SETUP FOR THE DEVICES OBJECTIVES*****\n" );
}
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.killBotActionGroup( REF_GDF_DEPLOY_OBJ2 );
objManager.killBotActionGroup( REF_OBJECTIVE_GDF_SPAWN1 );
objManager.killBotActionGroup( REF_GDF_ATTACK_GDF_SPAWN1 );
objManager.killBotActionGroup( REF_GDF_DEFEND_GDF_SPAWN1 );
objManager.killBotActionGroup( REF_STROGG_ATTACK_GDF_SPAWN1 );
objManager.killBotActionGroup( REF_STROGG_DEFEND_GDF_SPAWN1 );
objManager.killBotActionGroup( REF_OBJECTIVE_SHIELD );
objManager.killBotActionGroup( REF_GDF_ATTACK_SHIELD );
objManager.killBotActionGroup( REF_STROGG_DEFEND_SHIELD );
objManager.killBotActionGroup( REF_STROGG_DEPLOY_OBJ2 );
objManager.killBotActionGroup( REF_OBJECTIVE_BARRICADE );
objManager.killBotActionGroup( REF_STROGG_DEFEND_BARRICADE_ROUTE );
objManager.killBotActionGroup( REF_GDF_ATTACK_BARRICADE_ROUTE );
objManager.killBotActionGroup( REF_OBJECTIVE_GDF_TOWER2 );
objManager.killBotActionGroup( REF_GDF_USE_GUARDTOWER2 );
objManager.killBotActionGroup( REF_GDF_ATTACK_RAMP_ROUTE );
objManager.killBotActionGroup( REF_STROGG_DEFEND_RAMP_ROUTE );
objManager.killBotActionGroup( REF_OBJECTIVE_ASSAULT_RAMP );
objManager.killBotActionGroup( REF_GDF_BUILD_GUN2 );
objManager.killBotActionGroup( REF_GDF_USE_GUN2 );
objManager.killBotActionGroup( REF_GDF_BUILD_GUN3 );
objManager.killBotActionGroup( REF_GDF_USE_GUN4 );
objManager.activateBotActionGroup( REF_GDF_DEPLOY_OBJ3 );
objManager.activateBotActionGroup( REF_OBJECTIVE_DEVICE_NORTH );
objManager.activateBotActionGroup( REF_GDF_ATTACK_DEVICE_NORTH );
objManager.activateBotActionGroup( REF_STROGG_DEFEND_DEVICE_NORTH );
objManager.activateBotActionGroup( REF_OBJECTIVE_DEVICE_SOUTH );
objManager.activateBotActionGroup( REF_GDF_ATTACK_DEVICE_SOUTH );
objManager.activateBotActionGroup( REF_STROGG_DEFEND_DEVICE_SOUTH );
objManager.activateBotActionGroup( REF_STROGG_DEPLOY_BASE );
objManager.activateBotActionGroup( REF_STROGG_DEFEND_REFINERY );
objManager.setPrimaryTeamAction( GDF, "gdf_destroy_device_1" );
objManager.setPrimaryTeamAction( STROGG, "gdf_destroy_device_1" );
objManager.setBotCriticalClass( GDF, SOLDIER );
objManager.setBotCriticalClass( STROGG, ENGINEER );
objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false );
objManager.setTeamNeededClass( GDF, SOLDIER, NOCLASS, 3, false, true );
objManager.setTeamNeededClass( STROGG, ENGINEER, NOCLASS, 2, false, true );
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, false, false );
objManager.switchTeamWeapons( 0, 1, 5, 2, 1 );
objManager.setBotTeamRetreatTime( STROGG, 10 );
objManager.clearTeamBotBoundEntities( GDF );
objManager.setTeamAttacksDeployables( STROGG, false );
objManager.setTeamAttacksDeployables( GDF, false );
// rear spawns
objManager.setTeamUseRearSpawn( STROGG, false );
stroggTeam.setTeamRearSpawn( stroggBaseSpawn );
objManager.setTeamUseRearSpawnPercentage( STROGG, 50 );
objManager.setTeamUseRearSpawn( GDF, false );
gdfTeam.setTeamRearSpawn( gdfBaseSpawn );
objManager.setTeamUseRearSpawnPercentage( GDF, 50 );
if( barricadeDestroyed ) {
objManager.activateBotActionGroup( REF_STROGG_DEFEND_BARRICADE_ROUTE2 );
}
}
void mapObject_Refinery::CompleteMap() {
objective3Arrow1.vFinishObjective();
objective3Arrow2.vFinishObjective();
StopTimedMission();
gameRules.setWinningTeam( gdfTeam );
thread EndMap();
}
void mapObject_Refinery::EndMap() {
sys.wait( 3.f );
objManager.PlaySound( worldspawn.getKey( "snd_gdfwin_strogg" ), stroggTeam );
objManager.PlaySound( worldspawn.getKey( "snd_gdfwin_gdf" ), gdfTeam );
if ( devicesDestroyed == 0 ) {
gameRules.setEndGameCamera( endCameraA );
}
gameRules.endGame();
}
void mapObject_Refinery::StroggDevice2EffectsThread() {
sys.wait( 0.2f );
stroggdevice1_ooze_explosion.vTriggerParticleEffect( 1 );
sys.wait( 0.2f );
stroggdevice1_sparks1.vTriggerParticleEffect( 1 );
stroggdevice1_sparks2.vTriggerParticleEffect( 1 );
stroggdevice1_ooze_drip1.vTriggerParticleEffect( 1 );
stroggdevice1_ooze_spurt1.vTriggerParticleEffect( 1 );
sys.wait( 0.5f );
stroggdevice1_sparks3.vTriggerParticleEffect( 1 );
stroggdevice1_ooze_drip2.vTriggerParticleEffect( 1 );
stroggdevice1_ooze_drip3.vTriggerParticleEffect( 1 );
stroggdevice1_ooze_spurt2.vTriggerParticleEffect( 1 );
sys.wait( 0.5f );
stroggdevice1_ooze_drip4.vTriggerParticleEffect( 1 );
stroggdevice1_ooze_drip5.vTriggerParticleEffect( 1 );
}
void mapObject_Refinery::OnRefineryDestroyed() {
finalObjectiveACreatureDestroyed.show();
finalObjectiveACreatureDestroyed.forceEnableClip();
finalObjectiveACreature.hide();
finalObjectiveACreature.forceDisableClip();
finalObjectiveAPipesDestroyed.show();
finalObjectiveAPipesDestroyed.forceEnableClip();
finalObjectiveAPipes.hide();
finalObjectiveAPipes.forceDisableClip();
finalObjectiveASurroundDestroyed.show();
finalObjectiveASurroundDestroyed.forceEnableClip();
finalObjectiveASurround.hide();
finalObjectiveASurround.forceDisableClip();
objective3A.vFinishObjective();
objective3A.remove();
devicesDestroyed = devicesDestroyed + 1;
noplant_north_filter.remove();
thread StroggDevice1EffectsThread();
stroggDeviceA.vCompleteMission();
finalObjectiveProxy.vCompleteSubMission( stroggDeviceA );
if ( devicesDestroyed == 2 ) {
gameRules.setEndGameCamera( endCameraA );
CompleteMap();
}
if ( debug_script.getBoolValue() ) {
sys.print( "*****BOTS SETUP FOR NORTH DEVICE DESTROYED*****\n" );
}
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.deactivateBotActionGroup( REF_OBJECTIVE_DEVICE_NORTH );
objManager.deactivateBotActionGroup( REF_GDF_ATTACK_DEVICE_NORTH );
objManager.deactivateBotActionGroup( REF_STROGG_DEFEND_DEVICE_NORTH );
objManager.setPrimaryTeamAction( GDF, "gdf_destroy_device_2" );
objManager.setPrimaryTeamAction( STROGG, "gdf_destroy_device_2" );
}
void mapObject_Refinery::StroggDevice1EffectsThread() {
sys.wait( 0.2f );
stroggdevice2_ooze_explosion.vTriggerParticleEffect( 1 );
sys.wait( 0.2f );
stroggdevice2_ooze_drip1.vTriggerParticleEffect( 1 );
stroggdevice2_ooze_spurt1.vTriggerParticleEffect( 1 );
sys.wait( 0.5f );
stroggdevice2_ooze_drip2.vTriggerParticleEffect( 1 );
stroggdevice2_ooze_drip3.vTriggerParticleEffect( 1 );
stroggdevice2_ooze_spurt2.vTriggerParticleEffect( 1 );
}
void mapObject_Refinery::OnRefineryDestroyedB() {
finalObjectiveBDestroyed.show();
finalObjectiveBDestroyed.forceEnableClip();
finalObjectiveB.hide();
finalObjectiveB.forceDisableClip();
objective3B.vFinishObjective();
objective3B.remove();
devicesDestroyed = devicesDestroyed + 1;
thread StroggDevice2EffectsThread();
noplant_south_filter.remove();
stroggDeviceB.vCompleteMission();
finalObjectiveProxy.vCompleteSubMission( stroggDeviceB );
if ( devicesDestroyed == 2 ) {
gameRules.setEndGameCamera( endCameraB );
CompleteMap();
}
if ( debug_script.getBoolValue() ) {
sys.print( "*****BOTS SETUP FOR SOUTH DEVICE DESTROYED*****\n" );
}
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.deactivateBotActionGroup( REF_OBJECTIVE_DEVICE_SOUTH );
objManager.deactivateBotActionGroup( REF_GDF_ATTACK_DEVICE_SOUTH );
objManager.deactivateBotActionGroup( REF_STROGG_DEFEND_DEVICE_SOUTH );
objManager.setPrimaryTeamAction( GDF, "gdf_destroy_device_1" );
objManager.setPrimaryTeamAction( STROGG, "gdf_destroy_device_1" );
}
void mapObject_Refinery::StartShieldObjective() {
sys.wait( 5.f );
scudTrigger.vSetActive( true );
scudTrigger.vCreateMission();
CreateInitialTimedMission( scudTrigger );
objManager.SetObjectiveEntity( scudTrigger, mainObjectiveIndex );
}
void mapObject_Refinery::OnShieldDestroyedScud( entity trigger ) {
thread StartShieldObjective();
}
void mapObject_Refinery::StartFirstObjective() {
sys.wait( 5.f );
objManager.PlaySound( worldspawn.getKey( "snd_mcp_intro_strogg" ), stroggTeam );
objManager.PlaySound( worldspawn.getKey( "snd_mcp_intro_gdf" ), gdfTeam );
}
void mapObject_Refinery::OnTimeLimitHit() {
FinishTimedMission();
objManager.SetObjectiveEntity( $null_entity, -1 );
if ( devicesDestroyed == 0 ) {
objManager.PlaySound( worldspawn.getKey( "snd_gdflose_strogg" ), stroggTeam );
objManager.PlaySound( worldspawn.getKey( "snd_gdflose_gdf" ), gdfTeam );
} else if ( devicesDestroyed == 1 ) {
objManager.PlaySound( worldspawn.getKey( "snd_gdflosehalf_strogg" ), stroggTeam );
objManager.PlaySound( worldspawn.getKey( "snd_gdflosehalf_gdf" ), gdfTeam );
} else {
// shouldn't happen
}
}
void mapObject_Refinery::OnSpawnCaptured( string actionName ) {
if( actionName == "gdf_forwardspawn_1" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "*****GDF CAPTURED GDF SPAWN 1*****\n" );
}
objManager.deactivateBotActionGroup( REF_GDF_ATTACK_GDF_SPAWN1 );
objManager.activateBotActionGroup( REF_GDF_DEFEND_GDF_SPAWN1 );
objManager.deactivateBotActionGroup( REF_STROGG_DEFEND_GDF_SPAWN1 );
objManager.activateBotActionGroup( REF_STROGG_ATTACK_GDF_SPAWN1 );
}
}
void mapObject_Refinery::OnSpawnLiberated( string actionName ) {
if( actionName == "gdf_forwardspawn_1" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "*****GDF LOST GDF SPAWN 1*****\n" );
}
objManager.deactivateBotActionGroup( REF_GDF_DEFEND_GDF_SPAWN1 );
objManager.activateBotActionGroup( REF_GDF_ATTACK_GDF_SPAWN1 );
objManager.deactivateBotActionGroup( REF_STROGG_ATTACK_GDF_SPAWN1 );
objManager.activateBotActionGroup( REF_STROGG_DEFEND_GDF_SPAWN1 );
}
}
entity mapObject_Refinery::GetSpectateEntity() {
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 ( finalObjectiveProxy != $null_entity ) {
return finalObjectiveProxy.vGetSpectateEntity();
}
return $null_entity;
}