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

1032 lines
37 KiB
Plaintext

#define OBJECTIVE_SALVAGE_DESTROY_JAMMER 0
#define OBJECTIVE_SALVAGE_DESTROY_ENTRANCE 1
#define OBJECTIVE_SALVAGE_DESTROY_SALVAGE 2
#define SAL_OBJECTIVE_FORWARDSPAWN_HUT 1 // turn on at start
#define SAL_STROGG_DEFEND_FORWARDSPAWN_HUT 2
#define SAL_GDF_DEFEND_FORWARDSPAWN_HUT 3 // turn on at start
#define SAL_STROGG_ATTACK_FORWARDSPAWN_HUT 34 // turn on at start
#define SAL_GDF_ATTACK_FORWARDSPAWN_HUT 35
#define SAL_STROGG_DEPLOY_OBJ1 4 // turn on at start
#define SAL_OBJECTIVE_GENERATOR 5 // turn on at start
#define SAL_STROGG_ATTACK_GENERATOR 6 // turn on at start
#define SAL_GDF_DEFEND_GENERATOR 7 // turn on at start
#define SAL_GDF_DEPLOY_OBJ1 8 // turn on at start
#define SAL_OBJECTIVE_LASER 9
#define SAL_STROGG_ATTACK_LASER 10
#define SAL_GDF_DEFEND_LASER 11
#define SAL_STROGG_DEPLOY_OBJ2 12
#define SAL_GDF_DEPLOY_OBJ2 13
//#define SAL_OBJECTIVE_HACKBUNKER 14
#define SAL_OBJECTIVE_BUNKERWEST 15
#define SAL_STROGG_ATTACK_BUNKERWEST 16
#define SAL_GDF_DEFEND_BUNKERWEST 17
#define SAL_OBJECTIVE_BUNKEREAST 19
#define SAL_STROGG_ATTACK_BUNKEREAST 20
#define SAL_GDF_DEFEND_BUNKEREAST 21
#define SAL_STROGG_DEPLOY_OBJ3_GDFBASE 27
#define SAL_STROGG_DEPLOY_OBJ3 31
#define SAL_GDF_DEPLOY_OBJ3_CC 32
#define SAL_GDF_BUILD_TOWER 23
#define SAL_GDF_USE_TOWER 33
#define SAL_OBJECTIVE_FORWARDSPAWN_GDFBASE 24
#define SAL_STROGG_DEFEND_FORWARDSPAWN_GDFBASE 25
#define SAL_GDF_DEFEND_FORWARDSPAWN_GDFBASE 26
#define SAL_STROGG_ATTACK_FORWARDSPAWN_GDFBASE 36
#define SAL_GDF_ATTACK_FORWARDSPAWN_GDFBASE 37
#define SAL_OBJECTIVE_SALVAGE 28
#define SAL_STROGG_ATTACK_SALVAGE 29
#define SAL_GDF_DEFEND_SALVAGE 30
#define SAL_GDF_DEFEND_SALVAGE_DEFUSE_ONLY 41
#define SAL_LASER_DEPLOYED 38
// ----------------------------------------------------------------------
object mapObject_Salvage : mapObject_Default {
void destroy();
void InitObjectives();
void CompleteObjective( float index, entity p );
handle GetObjectiveMessage( float index );
void StartFirstObjective();
void OnMiningLaserDeployed( entity other );
void OnMiningLaserConstructed( entity other );
void OnTimeLimitHit();
void OnJammerDestroyed();
void OnEntranceDestroyed();
void OnSalvageDestroyed();
void OnGuardTowerDepotDestroyed();
void OnGuardTowerDepotBuilt();
boolean guardTowerDepotBuilt;
void OnEastPillboxBreachDestroyed();
boolean eastPillboxBreachDestroyed;
void OnWestBunkerBreachDestroyed();
boolean westBunkerBreachDestroyed;
void OnBunkerBreachBotUpdate();
void OnConstructionComplete( entity obj );
void OnDestructionComplete( entity obj );
vector GetGDFBasePosition() { return '-6170 -11080 200'; }
void ZapporCallThread();
void EntranceEffectsThread();
void FinalEffectsThread();
void EntranceObstaclesRemove();
void BunkerWestActionsRemove();
void BunkerEastActionsRemove();
void JammerDestroyThread();
// Bot Functions
void OnSpawnCaptured( string actionName );
void OnSpawnLiberated( string actionName );
void NeededClassFirstObjective();
entity GetSpectateEntity();
// ----------------------------------------------------------------------
float mainObjectiveIndex;
entity stroggBaseTerritory;
entity jammerTerritory;
entity stroggRuinsTerritory;
entity gdfBaseTerritory;
entity stroggBaseSpawn;
entity stroggJammerSpawn;
entity stroggRuinsSpawn;
entity gdfRuinsSpawn;
entity gdfBaseSpawn;
entity gdfCCSpawn;
entity gdfRailNetworkSpawn;
entity stroggForwardSpawnGdfBase;
entity stroggForwardSpawnCompound;
entity objective1Marker;
entity objective2Marker;
entity objective3Marker;
entity objective1Arrow1;
entity objective1Arrow2;
entity objective2Arrow1;
entity objective2Arrow2;
entity objective2Arrow3;
entity objective3Arrow1;
entity objective3Arrow2;
entity fakeDoor1;
entity fakeDoor2;
entity fakeDoor3;
entity railNetworkMainEntrance;
entity entranceDamaged;
entity entranceDefault;
entity jammer;
entity generatorDestroyed;
entity salvage;
entity objective_parts;
entity zapporCaller;
entity eastPillboxBreach;
entity eastPillboxWhole;
entity eastPillboxDamaged;
entity westBunkerBreach;
entity guardTowerDepotConstruction;
entity guardTowerDepot;
entity gdfBaseGatesMain;
entity entrance_sparks_1;
entity entrance_sparks_2;
entity entrance_smoke;
entity entrance_building_1;
entity entrance_building_2;
entity final_sparks_1;
entity final_sparks_2;
entity final_sparks_3;
entity final_sparks_4;
entity jammerEffectsIdle;
entity jammerEffectsShutdown;
entity noplant_jammer;
entity noplant_east_pillbox;
entity noplant_west_bunker;
entity noplant_salvage;
entity endCameraA;
entity endCameraB;
// Bot Stuff
entity bot_bunker_east_1;
entity bot_bunker_east_2;
entity bot_bunker_west_1;
entity bot_bunker_west_2;
entity bot_aasobstacle_hole;
float breachesDestroyed;
entity bot_obstacleRailNetwork_1;
entity bot_obstacleRailNetwork_2;
boolean obstaclesTurnedOff;
cvar debug_script;
}
mapObject_Base Salvage_MapScript() {
return new mapObject_Salvage;
}
void mapObject_Salvage::destroy() {
}
void mapObject_Salvage::InitObjectives() {
gameRules.setWinningTeam( gdfTeam );
gdfTeam.SetRespawnWait( 30 );
stroggTeam.SetRespawnWait( 20 );
gdfTeam.InitRespawnTimeChange();
stroggTeam.InitRespawnTimeChange();
CreateRespawnTimeThread( stroggTeam );
// ----------------------------------------------------------------------
fakeDoor1 = worldspawn.getEntityKey( "script_fakedoor1" );
fakeDoor2 = worldspawn.getEntityKey( "script_fakedoor2" );
fakeDoor3 = worldspawn.getEntityKey( "script_fakedoor3" );
railNetworkMainEntrance = worldspawn.getEntityKey( "script_railnetwork_entrance" );
entranceDamaged = worldspawn.getEntityKey( "script_entrance_damaged" );
entranceDefault = worldspawn.getEntityKey( "script_entrance_default" );
stroggBaseTerritory = worldspawn.getEntityKey( "script_strogg_base_territory" );
jammerTerritory = worldspawn.getEntityKey( "script_jammer_territory" );
stroggRuinsTerritory = worldspawn.getEntityKey( "script_strogg_ruins_territory" );
gdfBaseTerritory = worldspawn.getEntityKey( "script_gdf_base_territory" );
stroggBaseSpawn = worldspawn.getEntityKey( "script_strogg_base_spawn" );
stroggJammerSpawn = worldspawn.getEntityKey( "script_strogg_jammer_spawn" );
gdfRuinsSpawn = worldspawn.getEntityKey( "script_gdf_ruins_spawn" );
stroggRuinsSpawn = worldspawn.getEntityKey( "script_strogg_ruins_spawn" );
gdfBaseSpawn = worldspawn.getEntityKey( "script_gdf_base_spawn" );
gdfCCSpawn = worldspawn.getEntityKey( "script_gdf_cc_spawn" );
gdfRailNetworkSpawn = worldspawn.getEntityKey( "script_gdf_railnetwork_spawn" );
stroggForwardSpawnGdfBase = worldspawn.getEntityKey( "script_strogg_forward_spawn_gdf_base" );
stroggForwardSpawnCompound = worldspawn.getEntityKey( "script_strogg_forward_spawn_compound" );
objective1Arrow1 = worldspawn.getEntityKey( "script_obj1_progress_1" );
objective1Arrow2 = worldspawn.getEntityKey( "script_obj1_progress_2" );
objective2Arrow1 = worldspawn.getEntityKey( "script_obj2_progress_1" );
objective2Arrow2 = worldspawn.getEntityKey( "script_obj2_progress_2" );
objective2Arrow3 = worldspawn.getEntityKey( "script_obj2_progress_3" );
objective3Arrow1 = worldspawn.getEntityKey( "script_obj3_progress_1" );
objective3Arrow2 = worldspawn.getEntityKey( "script_obj3_progress_2" );
objective1Marker = worldspawn.getEntityKey( "script_obj1_marker" );
objective2Marker = worldspawn.getEntityKey( "script_obj2_marker" );
objective3Marker = worldspawn.getEntityKey( "script_obj3_marker" );
endCameraA = worldspawn.getEntityKey( "script_placement_camera_a" );
endCameraB = worldspawn.getEntityKey( "script_placement_camera_b" );
entrance_sparks_1 = worldspawn.getEntityKey( "script_entrance_sparks_1" );
entrance_sparks_2 = worldspawn.getEntityKey( "script_entrance_sparks_2" );
entrance_smoke = worldspawn.getEntityKey( "script_entrance_smoke" );
entrance_building_1 = worldspawn.getEntityKey( "script_entrance_building_1" );
entrance_building_2 = worldspawn.getEntityKey( "script_entrance_building_2" );
final_sparks_1 = worldspawn.getEntityKey( "script_final_sparks_1" );
final_sparks_2 = worldspawn.getEntityKey( "script_final_sparks_2" );
final_sparks_3 = worldspawn.getEntityKey( "script_final_sparks_3" );
final_sparks_4 = worldspawn.getEntityKey( "script_final_sparks_4" );
jammer = worldspawn.getEntityKey( "script_jammer" );
generatorDestroyed = worldspawn.getEntityKey( "script_generator_destroyed" );
salvage = worldspawn.getEntityKey( "script_salvage" );
objective_parts = worldspawn.getEntityKey( "script_objective_parts" );
zapporCaller = worldspawn.getEntityKey( "script_zappor_caller" );
eastPillboxBreach = worldspawn.getEntityKey( "script_east_pillbox_breach" );
eastPillboxWhole = worldspawn.getEntityKey( "script_east_pillbox_whole" );
eastPillboxDamaged = worldspawn.getEntityKey( "script_east_pillbox_damaged" );
westBunkerBreach = worldspawn.getEntityKey( "script_west_bunker_breach" );
jammerEffectsIdle = worldspawn.getEntityKey( "script_jammer_effects_idle" );
jammerEffectsShutdown = worldspawn.getEntityKey( "script_jammer_effects_shutdown" );
guardTowerDepotConstruction = worldspawn.getEntityKey( "script_guard_tower_depot" );
guardTowerDepot = worldspawn.getEntityKey( "script_guard_tower_depot_object" );
gdfBaseGatesMain = worldspawn.getEntityKey( "script_gdf_base_gates_main" );
noplant_jammer = worldspawn.getEntityKey( "script_noplant_jammer" );
noplant_east_pillbox = worldspawn.getEntityKey( "script_noplant_east_pillbox" );
noplant_west_bunker = worldspawn.getEntityKey( "script_noplant_west_bunker" );
noplant_salvage = worldspawn.getEntityKey( "script_noplant_salvage" );
// Bot Stuff
bot_bunker_east_1 = worldspawn.getEntityKey( "script_aasobstacle_bunker_east_1" );
bot_bunker_east_2 = worldspawn.getEntityKey( "script_aasobstacle_bunker_east_2" );
bot_bunker_west_1 = worldspawn.getEntityKey( "script_aasobstacle_bunker_west_1" );
bot_bunker_west_2 = worldspawn.getEntityKey( "script_aasobstacle_bunker_west_2" );
bot_aasobstacle_hole = worldspawn.getEntityKey( "script_aasobstacle_hole" );
bot_obstacleRailNetwork_1 = worldspawn.getEntityKey( "script_bot_obstacle_railnetwork_1" );
bot_obstacleRailNetwork_2 = worldspawn.getEntityKey( "script_bot_obstacle_railnetwork_2" );
obstaclesTurnedOff = false;
debug_script = sys.getCVar( "bot_debugMapScript", "1" );
CreateDeployTasks();
// -----------------------------------------------------
entranceDamaged.hide();
entranceDamaged.forceDisableClip();
generatorDestroyed.hide();
generatorDestroyed.forceDisableClip();
stroggBaseTerritory.setActive( true );
jammerTerritory.setActive( true );
stroggRuinsTerritory.setActive( false );
gdfBaseTerritory.setActive( false );
stroggBaseSpawn.setGameTeam ( stroggTeam );
stroggJammerSpawn.setGameTeam ( $null_entity );
stroggRuinsSpawn.setGameTeam ( $null_entity );
stroggForwardSpawnGdfBase.vSetActive( false );
stroggForwardSpawnCompound.vSetActive( true );
gdfRuinsSpawn.setGameTeam ( gdfTeam );
gdfBaseSpawn.setGameTeam ( gdfTeam );
gdfRailNetworkSpawn.setGameTeam ( $null_entity );
gdfCCSpawn.setGameTeam ( $null_entity );
stroggJammerSpawn.setGameTeam ( $null_entity );
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.vStartObjective();
objective3Marker.vStartObjective();
railNetworkMainEntrance.setTakesDamage( 0 );
salvage.setTakesDamage( 0 );
eastPillboxDamaged.hide();
mainObjectiveIndex = OBJECTIVE_SALVAGE_DESTROY_JAMMER;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
gameRules.setEndGameCamera( endCameraB );
breachesDestroyed = 0;
guardTowerDepotBuilt = false;
eastPillboxBreachDestroyed = false;
westBunkerBreachDestroyed = false;
thread StartFirstObjective();
// ----------------------------------------------------------------------
// BOT OBJECTIVE: PLANT PLASMA CHARGE ON THE JAMMING GENERATOR
// ----------------------------------------------------------------------
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOTS SETUP FOR GENERATOR OBJECTIVE **********\n" );
}
objManager.setAttackingTeam( STROGG );
objManager.setBotSightDist( 3000.0f );
objManager.activateBotActionGroup( SAL_OBJECTIVE_FORWARDSPAWN_HUT );
objManager.activateBotActionGroup( SAL_GDF_DEFEND_FORWARDSPAWN_HUT );
objManager.activateBotActionGroup( SAL_STROGG_ATTACK_FORWARDSPAWN_HUT );
objManager.activateBotActionGroup( SAL_OBJECTIVE_GENERATOR );
objManager.activateBotActionGroup( SAL_STROGG_DEPLOY_OBJ1 );
objManager.activateBotActionGroup( SAL_STROGG_ATTACK_GENERATOR );
objManager.activateBotActionGroup( SAL_GDF_DEFEND_GENERATOR );
objManager.activateBotActionGroup( SAL_GDF_DEPLOY_OBJ1 );
objManager.setPrimaryTeamAction( STROGG, "strogg_destroy_jammer_1" );
objManager.setPrimaryTeamAction( GDF, "strogg_destroy_jammer_1" );
//objManager.setSecondaryTeamAction( GDF, "xxx" );
objManager.setSecondaryTeamAction( STROGG, "strogg_forwardspawn_1" );
objManager.setBotCriticalClass( STROGG, SOLDIER );
objManager.setBotCriticalClass( GDF, ENGINEER );
thread NeededClassFirstObjective();
objManager.setTeamUseRearSpawn( GDF, false );
gdfTeam.setTeamRearSpawn( gdfRuinsSpawn );
objManager.setTeamUseRearSpawn( STROGG, false );
stroggTeam.setTeamRearSpawn( stroggBaseSpawn );
// <xian>
// objManager.disableNode ( "stroggnode" ); // Enable after doors are hacked
}
void mapObject_Salvage::NeededClassFirstObjective() {
sys.wait( 10 );
if ( debug_script.getBoolValue() ) {
sys.print( "********** SET UP CLASSES NEEDED FOR FIRST OBJECTIVE **********\n" );
}
objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 3, true, true );
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, true, false );
objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 3, true, true );
objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, true, false );
objManager.switchTeamWeapons( STROGG, SOLDIER, -1, 5, 0 );
}
// ----------------------------------------------------------------------
void mapObject_Salvage::CompleteObjective( float index, entity p ) {
if ( index == OBJECTIVE_SALVAGE_DESTROY_JAMMER ) {
OnJammerDestroyed();
} else if ( index == OBJECTIVE_SALVAGE_DESTROY_ENTRANCE ) {
OnEntranceDestroyed();
} else if ( index == OBJECTIVE_SALVAGE_DESTROY_SALVAGE ) {
OnSalvageDestroyed();
}
}
handle mapObject_Salvage::GetObjectiveMessage( float index ) {
if ( index == OBJECTIVE_SALVAGE_DESTROY_JAMMER ){
return sys.localizeString( "maps/salvage/destroyed_generator" );
}
if ( index == OBJECTIVE_SALVAGE_DESTROY_ENTRANCE ) {
return sys.localizeString( "maps/salvage/destroyed_entrance" );
}
if ( index == OBJECTIVE_SALVAGE_DESTROY_SALVAGE ) {
return sys.localizeString( "maps/salvage/destroyed_salvage" );
}
return g_locStr_BadObjective;
}
// ----------------------------------------------------------------------
void mapObject_Salvage::JammerDestroyThread() {
generatorDestroyed.show();
sys.wait( 0.5f );
generatorDestroyed.forceEnableClip();
}
void mapObject_Salvage::OnJammerDestroyed() {
mainObjectiveIndex = OBJECTIVE_SALVAGE_DESTROY_ENTRANCE;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
thread JammerDestroyThread();
noplant_jammer.remove();
jammerEffectsIdle.remove();
jammerEffectsShutdown.vTriggerParticleEffect( 1 );
thread ZapporCallThread();
jammerTerritory.setGameTeam( stroggTeam );
stroggBaseTerritory.setActive( false );
jammerTerritory.setActive( true );
stroggRuinsTerritory.setActive( true );
objective1Arrow1.vFinishObjective();
objective1Arrow2.vFinishObjective();
objective2Arrow1.vStartObjective();
objective2Arrow2.vStartObjective();
objective2Arrow3.vStartObjective();
stroggJammerSpawn.setGameTeam ( stroggTeam );
gdfRuinsSpawn.setGameTeam ( $null_entity );
stroggForwardSpawnCompound.vSetActive( false );
stroggForwardSpawnCompound.setGameTeam ( stroggTeam );
objective1Marker.vFinishObjective();
railNetworkMainEntrance.setTakesDamage( 1 );
objManager.SetObjectiveEntity( $null_entity, -1 );
jammer.vCompleteMission();
StopTimedMission();
gdfTeam.SetRespawnWait( 30 );
stroggTeam.SetRespawnWait( 20 );
ResetRespawnTimeThread();
if ( !guardTowerDepotBuilt ) {
guardTowerDepotConstruction.vCreateMission();
}
// ----------------------------------------------------------------------
// BOT OBJECTIVE: CONSTRUCT THE MINING LASER
// ----------------------------------------------------------------------
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOTS SETUP TO FOR 3RD OBJECTIVE, BUT NOT YET TO BUILD LASER **********\n" );
}
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.killBotActionGroup( SAL_OBJECTIVE_FORWARDSPAWN_HUT );
objManager.killBotActionGroup( SAL_STROGG_DEFEND_FORWARDSPAWN_HUT );
objManager.killBotActionGroup( SAL_GDF_DEFEND_FORWARDSPAWN_HUT );
objManager.killBotActionGroup( SAL_GDF_ATTACK_FORWARDSPAWN_HUT );
objManager.killBotActionGroup( SAL_STROGG_ATTACK_FORWARDSPAWN_HUT );
objManager.killBotActionGroup( SAL_STROGG_DEPLOY_OBJ1 );
objManager.killBotActionGroup( SAL_OBJECTIVE_GENERATOR );
objManager.killBotActionGroup( SAL_STROGG_ATTACK_GENERATOR );
objManager.killBotActionGroup( SAL_GDF_DEFEND_GENERATOR );
objManager.killBotActionGroup( SAL_GDF_DEPLOY_OBJ1 );
// SAL_OBJECTIVE_LASER is actived here: mapObject_Salvage::ZapporCallThread
objManager.activateBotActionGroup( SAL_STROGG_ATTACK_LASER );
objManager.activateBotActionGroup( SAL_GDF_DEFEND_LASER );
objManager.activateBotActionGroup( SAL_STROGG_DEPLOY_OBJ2 );
objManager.activateBotActionGroup( SAL_GDF_DEPLOY_OBJ2 );
if ( !guardTowerDepotBuilt ) {
objManager.activateBotActionGroup( SAL_GDF_BUILD_TOWER );
}
objManager.setPrimaryTeamAction( STROGG, "strogg_construct_laser_1" );
objManager.setPrimaryTeamAction( GDF, "strogg_construct_laser_1" );
//objManager.setSecondaryTeamAction( GDF, "xxx" );
//objManager.setSecondaryTeamAction( STROGG, "xxx" );
objManager.setBotCriticalClass( STROGG, ENGINEER );
objManager.setBotCriticalClass( GDF, ENGINEER );
objManager.setTeamNeededClass( STROGG, ENGINEER, NOCLASS, 3, true, true );
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, false, false );
objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 2, false, true );
objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false );
objManager.switchTeamWeapons( GDF, SOLDIER, 5, 2, 1 );
objManager.switchTeamWeapons( STROGG, SOLDIER, -1, 5, 0 );
objManager.setBotTeamRetreatTime( GDF, 5 );
objManager.setTeamUseRearSpawn( GDF, false );
gdfTeam.setTeamRearSpawn( gdfBaseSpawn );
objManager.setTeamUseRearSpawn( STROGG, false );
stroggTeam.setTeamRearSpawn( stroggJammerSpawn );
objManager.clearTeamBotBoundEntities( STROGG );
}
void mapObject_Salvage::ZapporCallThread() {
sys.wait( 15.f );
zapporCaller.vOnDeploy();
}
void mapObject_Salvage::OnMiningLaserDeployed( entity other ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOTS SETUP TO BUILD LASER **********\n" );
}
objManager.activateBotActionGroup( SAL_LASER_DEPLOYED );
// Turn on the objective actions only when the Laser is in place
objManager.activateBotActionGroup( SAL_OBJECTIVE_LASER );
other.vCreateMission();
CreateInitialTimedMission( other );
objManager.SetObjectiveEntity( other, mainObjectiveIndex );
}
void mapObject_Salvage::OnMiningLaserConstructed( entity other ) {
other.vCompleteMission();
StopTimedMission();
objManager.SetObjectiveEntity( $null_entity, -1 );
thread EntranceObstaclesRemove();
// ----------------------------------------------------------------------
// BOT SECONDARY OBJECTIVE: PLANT PLASMA CHARGE ON BUNKERS
// ----------------------------------------------------------------------
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOTS SETUP TO BREACH BUNKERS **********\n" );
}
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.killBotActionGroup( SAL_OBJECTIVE_LASER );
objManager.killBotActionGroup( SAL_LASER_DEPLOYED );
objManager.killBotActionGroup( SAL_STROGG_ATTACK_LASER );
objManager.killBotActionGroup( SAL_GDF_DEFEND_LASER );
objManager.killBotActionGroup( SAL_STROGG_DEPLOY_OBJ2 );
objManager.killBotActionGroup( SAL_GDF_DEPLOY_OBJ2 );
// objManager.activateBotActionGroup( SAL_OBJECTIVE_HACKBUNKER );
if ( !westBunkerBreachDestroyed ) {
objManager.activateBotActionGroup( SAL_OBJECTIVE_BUNKERWEST );
} else {
thread BunkerWestActionsRemove();
}
objManager.activateBotActionGroup( SAL_STROGG_ATTACK_BUNKERWEST );
objManager.activateBotActionGroup( SAL_GDF_DEFEND_BUNKERWEST );
if ( !eastPillboxBreachDestroyed ) {
objManager.activateBotActionGroup( SAL_OBJECTIVE_BUNKEREAST );
} else {
thread BunkerEastActionsRemove();
}
objManager.activateBotActionGroup( SAL_STROGG_ATTACK_BUNKEREAST );
objManager.activateBotActionGroup( SAL_GDF_DEFEND_BUNKEREAST );
objManager.activateBotActionGroup( SAL_STROGG_DEPLOY_OBJ3 );
//objManager.activateBotActionGroup( SAL_GDF_DEPLOY_OBJ3_CC );
objManager.setPrimaryTeamAction( STROGG, "strogg_destroy_bunker_1" );
objManager.setPrimaryTeamAction( GDF, "strogg_destroy_bunker_1" );
//objManager.setSecondaryTeamAction( GDF, "xxx" );
//objManager.setSecondaryTeamAction( STROGG, "xxx" );
objManager.setBotCriticalClass( STROGG, SOLDIER );
objManager.setBotCriticalClass( GDF, ENGINEER );
objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 3, true, true );
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, false, false );
objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 3, true, true );
objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false );
objManager.switchTeamWeapons( 1, 1, 5, 2, 1 );
objManager.setTeamUseRearSpawn( GDF, false );
gdfTeam.setTeamRearSpawn( gdfRailNetworkSpawn );
objManager.setTeamUseRearSpawn( STROGG, false );
stroggTeam.setTeamRearSpawn( stroggRuinsSpawn );
}
void mapObject_Salvage::BunkerWestActionsRemove() {
sys.wait( 30.0f );
objManager.deactivateBotActionGroup( SAL_STROGG_ATTACK_BUNKERWEST );
objManager.deactivateBotActionGroup( SAL_GDF_DEFEND_BUNKERWEST );
}
void mapObject_Salvage::BunkerEastActionsRemove() {
sys.wait( 30.0f );
objManager.deactivateBotActionGroup( SAL_STROGG_ATTACK_BUNKEREAST );
objManager.deactivateBotActionGroup( SAL_GDF_DEFEND_BUNKEREAST );
}
// ----------------------------------------------------------------------
void mapObject_Salvage::EntranceEffectsThread() {
entrance_smoke.vTriggerParticleEffect( 1 );
sys.wait( 0.3f );
entrance_building_1.vTriggerParticleEffect( 1 );
sys.wait( 0.3f );
entrance_building_2.vTriggerParticleEffect( 1 );
sys.wait( 1.9f );
entrance_sparks_1.vTriggerParticleEffect( 1 );
sys.wait( 1.5f );
entrance_sparks_2.vTriggerParticleEffect( 1 );
}
void mapObject_Salvage::EntranceObstaclesRemove() {
sys.wait( 20.0f );
if ( !obstaclesTurnedOff ) {
obstaclesTurnedOff = true;
if ( debug_script.getBoolValue() ) {
sys.print( "********** OBSTACLES ACTIVATED **********\n" );
}
bot_aasobstacle_hole.activate( bot_aasobstacle_hole );
bot_obstacleRailNetwork_1.activate( bot_obstacleRailNetwork_1 );
bot_obstacleRailNetwork_2.activate( bot_obstacleRailNetwork_2 );
}
}
void mapObject_Salvage::OnEntranceDestroyed() {
mainObjectiveIndex = OBJECTIVE_SALVAGE_DESTROY_SALVAGE;
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
stroggRuinsTerritory.setGameTeam( stroggTeam );
jammerTerritory.setActive( false );
stroggRuinsTerritory.setActive( true );
gdfBaseTerritory.setActive( true );
objective2Arrow3.vFinishObjective();
objective3Arrow1.vStartObjective();
objective3Arrow2.vStartObjective();
objective2Marker.vFinishObjective();
salvage.setTakesDamage( 1 );
stroggRuinsSpawn.setGameTeam ( stroggTeam );
gdfRailNetworkSpawn.setGameTeam ( gdfTeam );
gdfCCSpawn.setGameTeam ( gdfTeam );
gdfBaseSpawn.setGameTeam ( $null_entity );
stroggForwardSpawnGdfBase.vSetActive( true );
fakeDoor1.remove();
fakeDoor2.remove();
fakeDoor3.remove();
// Activate the GDF defend actions for the final objective
objManager.activateBotActionGroup( SAL_GDF_DEFEND_SALVAGE_DEFUSE_ONLY );
objManager.activateBotActionGroup( SAL_GDF_DEFEND_SALVAGE );
entranceDefault.remove();
entranceDefault.forceDisableClip();
entranceDamaged.show();
entranceDamaged.forceEnableClip();
objManager.SetObjectiveEntity( salvage, mainObjectiveIndex );
gdfBaseGatesMain.vCreateMission();
salvage.vCreateMission();
if ( !eastPillboxBreachDestroyed ) {
eastPillboxBreach.vCreateMission();
}
if ( !westBunkerBreachDestroyed ) {
westBunkerBreach.vCreateMission();
}
/*if ( !guardTowerDepotBuilt ) {
guardTowerDepotConstruction.vCreateMission(); moving to post objective 1
}*/
if ( breachesDestroyed >= 1 ) {
objManager.activateBotActionGroup( SAL_GDF_DEFEND_FORWARDSPAWN_GDFBASE );
OnBunkerBreachBotUpdate();
}
CreateInitialTimedMission( salvage );
thread EntranceEffectsThread();
gdfTeam.SetRespawnWait( 30 );
stroggTeam.SetRespawnWait( 20 );
ResetRespawnTimeThread();
}
// ----------------------------------------------------------------------
// BOT OBJECTIVE: PLANT PLASMA CHARGE ON THE SALVAGE
// ----------------------------------------------------------------------
void mapObject_Salvage::OnBunkerBreachBotUpdate() {
breachesDestroyed = breachesDestroyed + 1;
if ( mainObjectiveIndex != OBJECTIVE_SALVAGE_DESTROY_SALVAGE ) {
return;
}
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOTS SETUP TO DESTROY FINAL OBJECTIVE **********\n" );
}
objManager.botUpdateForEvent( NOTEAM, NOCLASS, ACTION_STATE_NULL );
objManager.killBotActionGroup( SAL_GDF_BUILD_TOWER );
// SAL_GDF_DEFEND_SALVAGE is activated here: mapObject_Salvage::OnEntranceDestroyed
objManager.activateBotActionGroup( SAL_OBJECTIVE_FORWARDSPAWN_GDFBASE );
//objManager.activateBotActionGroup( SAL_STROGG_DEFEND_FORWARDSPAWN_GDFBASE );
objManager.activateBotActionGroup( SAL_STROGG_DEPLOY_OBJ3_GDFBASE );
objManager.activateBotActionGroup( SAL_OBJECTIVE_SALVAGE );
objManager.activateBotActionGroup( SAL_STROGG_ATTACK_SALVAGE );
objManager.deactivateBotActionGroup( SAL_GDF_DEFEND_SALVAGE_DEFUSE_ONLY ); // deactivate GDF defuse only actions on final objective
objManager.deactivateBotActionGroup( SAL_GDF_USE_TOWER );
objManager.setPrimaryTeamAction( STROGG, "strogg_destroy_salvage_1" );
objManager.setPrimaryTeamAction( GDF, "strogg_destroy_salvage_1" );
//objManager.setSecondaryTeamAction( GDF, "xxx" );
objManager.setSecondaryTeamAction( STROGG, "strogg_forwardspawn_2" );
objManager.setBotCriticalClass( STROGG, SOLDIER );
objManager.setBotCriticalClass( GDF, ENGINEER );
objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 3, false, false );
objManager.setTeamNeededClass( STROGG, MEDIC, NOCLASS, 2, false, false );
objManager.setTeamNeededClass( GDF, ENGINEER, NOCLASS, 3, false, false );
objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false );
objManager.switchTeamWeapons( 1, 1, 2, 5, 0 );
objManager.switchTeamWeapons( 1, 4, 15, 2, 0 );
objManager.switchTeamWeapons( 0, 1, 2, 5, 0 );
objManager.switchTeamWeapons( 0, 1, 15, 2, 0 );
objManager.setBotTeamRetreatTime( GDF, 10 );
objManager.setTeamUseRearSpawn( GDF, true );
gdfTeam.setTeamRearSpawn( gdfCCSpawn );
objManager.setTeamUseRearSpawnPercentage( GDF, 100 );
objManager.setTeamUseRearSpawn( STROGG, false );
stroggTeam.setTeamRearSpawn( stroggRuinsSpawn );
objManager.setTeamAttacksDeployables( STROGG, false );
objManager.setTeamAttacksDeployables( GDF, false );
objManager.clearTeamBotBoundEntities( STROGG );
FreeWorldTask( covertopsDeployTask );
FreeWorldTask( engineerDeployTask );
FreeWorldTask( fieldopsDeployTask );
FreeWorldTask( medicDeployTask );
}
// ----------------------------------------------------------------------
void mapObject_Salvage::FinalEffectsThread() {
sys.wait( 0.1f );
final_sparks_1.vTriggerParticleEffect( 1 );
sys.wait( 0.3f );
final_sparks_4.vTriggerParticleEffect( 1 );
sys.wait( 0.5f );
final_sparks_2.vTriggerParticleEffect( 1 );
sys.wait( 0.2f );
final_sparks_3.vTriggerParticleEffect( 1 );
}
void mapObject_Salvage::OnSalvageDestroyed() {
objective3Marker.vFinishObjective();
salvage.vCompleteMission();
StopTimedMission();
objective_parts.remove();
thread FinalEffectsThread();
gameRules.setEndGameCamera( endCameraA );
gameRules.setWinningTeam( stroggTeam );
gameRules.endGame();
}
void mapObject_Salvage::StartFirstObjective() {
sys.wait( 5.f );
objManager.SetObjectiveEntity( jammer, mainObjectiveIndex );
jammer.vCreateMission();
CreateInitialTimedMission( jammer );
}
void mapObject_Salvage::OnTimeLimitHit() {
FinishTimedMission();
objManager.SetObjectiveEntity( $null_entity, -1 );
objManager.PlaySound( worldspawn.getKey( "snd_strogglose_strogg" ), stroggTeam );
objManager.PlaySound( worldspawn.getKey( "snd_strogglose_gdf" ), gdfTeam );
}
// ----------------------------------------------------------------------
// SECONDARY OBJECTIVES: CONSTRUCTIONS AND DESTRUCTIONS
// ----------------------------------------------------------------------
void mapObject_Salvage::OnConstructionComplete( entity obj ) {
if ( obj == guardTowerDepotConstruction ) {
OnGuardTowerDepotBuilt();
}
}
void mapObject_Salvage::OnDestructionComplete( entity obj ) {
if ( obj == guardTowerDepotConstruction ) {
OnGuardTowerDepotDestroyed();
} else if ( obj == eastPillboxBreach ) {
OnEastPillboxBreachDestroyed();
} else if ( obj == westBunkerBreach ) {
OnWestBunkerBreachDestroyed();
}
}
// ----------------------------------------------------------------------
// SECONDARY OBJECTIVE: GDF GUARD TOWER
// ----------------------------------------------------------------------
void mapObject_Salvage::OnGuardTowerDepotBuilt() {
guardTowerDepotBuilt = true;
guardTowerDepotConstruction.vCompleteMission();
if ( mainObjectiveIndex == OBJECTIVE_SALVAGE_DESTROY_SALVAGE ) {
guardTowerDepot.vCreateMission();
}
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOTS NOLONGER BUILDING THE TOWER **********\n" );
}
if ( breachesDestroyed == 0 && mainObjectiveIndex > OBJECTIVE_SALVAGE_DESTROY_JAMMER ) {
objManager.activateBotActionGroup( SAL_GDF_USE_TOWER );
}
objManager.deactivateBotActionGroup( SAL_GDF_BUILD_TOWER );
}
void mapObject_Salvage::OnGuardTowerDepotDestroyed() {
guardTowerDepotBuilt = false;
if ( mainObjectiveIndex == OBJECTIVE_SALVAGE_DESTROY_SALVAGE ) {
guardTowerDepot.vCompleteMission();
}
if ( mainObjectiveIndex <= OBJECTIVE_SALVAGE_DESTROY_JAMMER ) {
return;
}
guardTowerDepotConstruction.vCreateMission();
guardTowerDepot.vCompleteMission();
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOTS ATTEMPTING TO BUILD THE TOWER **********\n" );
}
objManager.activateBotActionGroup( SAL_GDF_BUILD_TOWER );
objManager.deactivateBotActionGroup( SAL_GDF_USE_TOWER );
}
// ----------------------------------------------------------------------
// SECONDARY OBJECTIVES: PLANT PLASMA CHARGES ON BUNKERS
// ----------------------------------------------------------------------
void mapObject_Salvage::OnEastPillboxBreachDestroyed() {
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOT DESTROYED EAST PILLBOX **********\n" );
}
eastPillboxBreachDestroyed = true;
eastPillboxBreach.vCompleteMission();
eastPillboxWhole.remove();
eastPillboxDamaged.show();
noplant_east_pillbox.remove();
bot_bunker_east_1.activate( bot_bunker_east_1 );
bot_bunker_east_2.activate( bot_bunker_east_2 );
objManager.deactivateBotActionGroup( SAL_OBJECTIVE_BUNKEREAST );
objManager.deactivateBotActionGroup( SAL_STROGG_ATTACK_BUNKEREAST );
objManager.deactivateBotActionGroup( SAL_GDF_DEFEND_BUNKEREAST );
objManager.enableRoute( "bot_route_start_strogg_east_bunker" );
OnBunkerBreachBotUpdate();
}
// --------------------
void mapObject_Salvage::OnWestBunkerBreachDestroyed() {
if ( debug_script.getBoolValue() ) {
sys.print( "********** BOT DESTROYED WEST BUNKER **********\n" );
}
westBunkerBreachDestroyed = true;
westBunkerBreach.vCompleteMission();
noplant_west_bunker.remove();
bot_bunker_west_1.activate( bot_bunker_west_1 );
bot_bunker_west_2.activate( bot_bunker_west_2 );
objManager.deactivateBotActionGroup( SAL_OBJECTIVE_BUNKERWEST );
objManager.deactivateBotActionGroup( SAL_STROGG_ATTACK_BUNKERWEST );
objManager.deactivateBotActionGroup( SAL_GDF_DEFEND_BUNKERWEST );
objManager.enableRoute( "bot_route_start_strogg_west_bunker" );
OnBunkerBreachBotUpdate();
}
// ----------------------------------------------------------------------
// Bot Forward Spawn Actions
// ----------------------------------------------------------------------
void mapObject_Salvage::OnSpawnCaptured( string actionName ) {
// Research Hut Spawn Point
if( actionName == "strogg_forwardspawn_1" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** STROGG CAPTURED STROGG SPAWN 1 **********\n" );
}
objManager.activateBotActionGroup( SAL_STROGG_DEFEND_FORWARDSPAWN_HUT );
objManager.deactivateBotActionGroup( SAL_GDF_DEFEND_FORWARDSPAWN_HUT );
objManager.activateBotActionGroup( SAL_GDF_ATTACK_FORWARDSPAWN_HUT );
objManager.deactivateBotActionGroup( SAL_STROGG_ATTACK_FORWARDSPAWN_HUT );
}
// Depot Yard Spawn Point
if( actionName == "strogg_forwardspawn_2" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** STROGG CAPTURED STROGG SPAWN 2 **********\n" );
}
if( guardTowerDepotBuilt ) {
objManager.deactivateBotActionGroup( SAL_GDF_USE_TOWER );
}
objManager.activateBotActionGroup( SAL_STROGG_DEPLOY_OBJ3_GDFBASE );
// objManager.deactivateBotActionGroup( SAL_OBJECTIVE_HACKBUNKER );
objManager.activateBotActionGroup( SAL_STROGG_DEFEND_FORWARDSPAWN_GDFBASE );
objManager.deactivateBotActionGroup( SAL_GDF_DEFEND_FORWARDSPAWN_GDFBASE );
objManager.activateBotActionGroup( SAL_GDF_ATTACK_FORWARDSPAWN_GDFBASE );
objManager.deactivateBotActionGroup( SAL_STROGG_ATTACK_FORWARDSPAWN_GDFBASE );
gdfBaseGatesMain.vFreeMission();
}
}
// --------------------
void mapObject_Salvage::OnSpawnLiberated( string actionName ) {
// Research Hut Spawn Point
if( actionName == "strogg_forwardspawn_1" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** GDF LIBERATED STROGG SPAWN1 **********\n" );
}
objManager.deactivateBotActionGroup( SAL_STROGG_DEFEND_FORWARDSPAWN_HUT );
objManager.activateBotActionGroup( SAL_GDF_DEFEND_FORWARDSPAWN_HUT );
objManager.deactivateBotActionGroup( SAL_GDF_ATTACK_FORWARDSPAWN_HUT );
objManager.activateBotActionGroup( SAL_STROGG_ATTACK_FORWARDSPAWN_HUT );
}
// Depot Yard Spawn Point
if( actionName == "strogg_forwardspawn_2" ) {
if ( debug_script.getBoolValue() ) {
sys.print( "********** GDF LIBERATED STROGG SPAWN2 **********\n" );
}
if( guardTowerDepotBuilt ) {
//objManager.activateBotActionGroup( SAL_GDF_USE_TOWER );
}
objManager.deactivateBotActionGroup( SAL_STROGG_DEPLOY_OBJ3_GDFBASE );
// objManager.activateBotActionGroup( SAL_OBJECTIVE_HACKBUNKER );
objManager.deactivateBotActionGroup( SAL_STROGG_DEFEND_FORWARDSPAWN_GDFBASE );
objManager.activateBotActionGroup( SAL_GDF_DEFEND_FORWARDSPAWN_GDFBASE );
objManager.deactivateBotActionGroup( SAL_GDF_ATTACK_FORWARDSPAWN_GDFBASE );
objManager.activateBotActionGroup( SAL_STROGG_ATTACK_FORWARDSPAWN_GDFBASE );
gdfBaseGatesMain.vCreateMission();
}
}
entity mapObject_Salvage::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 ( salvage != $null_entity ) {
return salvage.vGetSpectateEntity();
}
return $null_entity;
}