1528 lines
53 KiB
Plaintext
1528 lines
53 KiB
Plaintext
|
|
||
|
#define OBJECTIVE_VOLCANO_HACK 0
|
||
|
#define OBJECTIVE_VOLCANO_DESTROY_TRANSFORMER 1
|
||
|
#define OBJECTIVE_VOLCANO_DESTROY_CORE 2
|
||
|
#define OBJECTIVE_VOLCANO_DAMAGE_CORE_TO80 3
|
||
|
#define OBJECTIVE_VOLCANO_DAMAGE_CORE_TO60 4
|
||
|
#define OBJECTIVE_VOLCANO_DAMAGE_CORE_TO40 5
|
||
|
#define OBJECTIVE_VOLCANO_DAMAGE_CORE_TO20 6
|
||
|
#define OBJECTIVE_VOLCANO_CORE_DESTROYED 7
|
||
|
|
||
|
|
||
|
// Bot Action Groups
|
||
|
|
||
|
#define VOL_STROGG_HACK_CONTROLS 0 // only the specific bot action to carry out the objective
|
||
|
#define VOL_STROGG_DESTROY_BUNKERDOOR 1 //
|
||
|
#define VOL_STROGG_DESTROY_EAST_BUNKER 2 //
|
||
|
#define VOL_STROGG_DESTROY_SEAWALL 3 //
|
||
|
|
||
|
#define VOL_STROGG_BEACH_SUPPORT 4 // Strogg offensive actions on the beach to aid first objective, whether forward spawn is captured or not.
|
||
|
#define VOL_STROGG_HACK_SUPPORT 5 // Strogg offensive actions that are enabled after after any of the 3 breachs (to counter GROUPID 12)
|
||
|
|
||
|
#define VOL_STROGG_CAPTURE_BEACH_SPAWN 6 // only the specific bot action to capture the spawn
|
||
|
#define VOL_STROGG_ATTACK_BEACH_SPAWN 24 //
|
||
|
#define VOL_STROGG_DEFEND_BEACH_SPAWN 25 //
|
||
|
#define VOL_GDF_ATTACK_BEACH_SPAWN 26 //
|
||
|
#define VOL_GDF_DEFEND_BEACH_SPAWN 27 //
|
||
|
|
||
|
#define VOL_GDF_CAPTURE_BUNKER_SPAWN 13 // only the specific bot action to capture the spawn
|
||
|
#define VOL_GDF_ATTACK_BUNKER_SPAWN 28 //
|
||
|
#define VOL_GDF_DEFEND_BUNKER_SPAWN 29 //
|
||
|
#define VOL_STROGG_ATTACK_BUNKER_SPAWN 30 //
|
||
|
#define VOL_STROGG_DEFEND_BUNKER_SPAWN 31 //
|
||
|
|
||
|
#define VOL_STROGG_OBJ1_DEPLOY 7
|
||
|
#define VOL_GDF_OBJ1_DEPLOY 14
|
||
|
#define VOL_GDF_OBJ1AND2_DEPLOY 49
|
||
|
|
||
|
#define VOL_GDF_DEFEND_BEACH 8 // generic defence of the beach for duration of first objective despite any state of secondarys.
|
||
|
#define VOL_GDF_DEFEND_BUNKERDOOR 9 // active until destroyed, then corresponding POSTBREACH becomes active (so bots fall back a bit and defend the opening instead)
|
||
|
#define VOL_GDF_DEFEND_EAST_BUNKER 10 // ""
|
||
|
#define VOL_GDF_DEFEND_SEAWALL 11 // ""
|
||
|
#define VOL_GDF_DEFEND_CONTROLS 12 // becomes active after any of the 3 breachs (reevaluate when bots begin to teleport over the wall)
|
||
|
|
||
|
#define VOL_GDF_DEFEND_BUNKERDOOR_POSTBREACH 32 // defensive actions to cover the route created by the Strogg
|
||
|
#define VOL_GDF_DEFEND_EAST_BUNKER_POSTBREACH 33 // ""
|
||
|
#define VOL_GDF_DEFEND_SEAWALL_POSTBREACH 34 // ""
|
||
|
|
||
|
#define VOL_GDF_DEFEND_SEAWALL_POSTBREACH_OBJ2 36 // Cover seawall entrance for second objective (only if it has been blown up)
|
||
|
|
||
|
#define VOL_GDF_BUILD_GUN1 15
|
||
|
#define VOL_GDF_BUILD_GUN2 16
|
||
|
#define VOL_GDF_BUILD_GUN3 17
|
||
|
#define VOL_GDF_BUILD_GUN4 18 // only used once complex breached
|
||
|
#define VOL_GDF_BUILD_GUN5 19
|
||
|
|
||
|
#define VOL_STROGG_DESTROY_TRANSFORMER 20
|
||
|
#define STROGG_SUPPORT_VOLCANO_TRANSFORMER 21
|
||
|
#define VOL_GDF_DEFEND_TRANSFORMER 22
|
||
|
#define VOL_STROGG_OBJ2_DEPLOY 35
|
||
|
#define VOL_GDF_OBJ2_DEPLOY 23
|
||
|
|
||
|
#define VOL_STROGG_DESTROY_CORE 37
|
||
|
#define VOL_STROGG_ATTACK_CORE 38
|
||
|
#define VOL_GDF_DEFEND_CORE 39
|
||
|
#define VOL_STROGG_OBJ3_DEPLOY 40
|
||
|
#define VOL_GDF_OBJ3_DEPLOY 41
|
||
|
|
||
|
#define VOL_OBJ2_INTERMEDIATE 42 // stuff for bots to do while doors opening. will do main actions after and these turn off
|
||
|
#define VOL_OBJ3_INTERMEDIATE 43 // stuff for bots until facility entrance open. will do main actions after and these turn off
|
||
|
|
||
|
#define VOL_GDF_USE_GUN1 44
|
||
|
#define VOL_GDF_USE_GUN2 45
|
||
|
#define VOL_GDF_USE_GUN3 46
|
||
|
#define VOL_GDF_USE_GUN4 47
|
||
|
#define VOL_GDF_USE_GUN5 48
|
||
|
|
||
|
object mapObject_Volcano : mapObject_Default {
|
||
|
void destroy();
|
||
|
|
||
|
void InitObjectives();
|
||
|
void CompleteObjective( float index, entity p );
|
||
|
handle GetObjectiveMessage( float index );
|
||
|
|
||
|
void StartFirstObjective();
|
||
|
void DelayedBotSpawnThread();
|
||
|
void StartTransformerObjective();
|
||
|
void StartCoreObjective();
|
||
|
|
||
|
void OnHack();
|
||
|
void OnTransformerDestroyed();
|
||
|
|
||
|
void OnConstructionComplete( entity obj );
|
||
|
void OnDestructionComplete( entity obj );
|
||
|
|
||
|
void OnGun1Built();
|
||
|
void OnGun1Destroyed();
|
||
|
void OnGun2Built();
|
||
|
void OnGun2Destroyed();
|
||
|
void OnGun3Built();
|
||
|
void OnGun3Destroyed();
|
||
|
void OnGun4Built();
|
||
|
void OnGun4Destroyed();
|
||
|
void OnGun5Built();
|
||
|
void OnGun5Destroyed();
|
||
|
|
||
|
void OnAnyBreach();
|
||
|
|
||
|
void OnEastBunkerBreachDestroyed();
|
||
|
void OnSeawallBreachDestroyed();
|
||
|
void OnForwardBunkerDoorDestroyed();
|
||
|
void DoorObstacleDelay();
|
||
|
|
||
|
void OnTimeLimitHit();
|
||
|
|
||
|
void OnCoreDamaged1();
|
||
|
void OnCoreDamaged2();
|
||
|
void OnCoreDamaged3();
|
||
|
void OnCoreDamaged4();
|
||
|
void OnCoreDestroyed();
|
||
|
void OnCoreDestroyedEffectsThread();
|
||
|
|
||
|
void FacilityBreached();
|
||
|
void ExplosionCascade();
|
||
|
|
||
|
vector GetGDFBasePosition() { return '390 9000 6130'; }
|
||
|
|
||
|
entity GetSpectateEntity();
|
||
|
|
||
|
// Territories
|
||
|
|
||
|
entity gdfBaseTerritory;
|
||
|
entity facilityTerritory;
|
||
|
entity beachTerritory;
|
||
|
entity stroggBaseTerritory;
|
||
|
|
||
|
|
||
|
// Spawns
|
||
|
entity gdfBaseSpawn;
|
||
|
entity gdfBunkerSpawn;
|
||
|
entity gdfFacilitySpawn;
|
||
|
entity stroggBaseSpawn;
|
||
|
entity stroggBunkerSpawn;
|
||
|
entity stroggBeachSpawn;
|
||
|
|
||
|
entity gdfOutsideSpawn;
|
||
|
|
||
|
// Objectives
|
||
|
entity objective1;
|
||
|
entity objective2;
|
||
|
entity objective3a;
|
||
|
entity objective3b;
|
||
|
entity objective3c;
|
||
|
entity objective3d;
|
||
|
entity objective3e;
|
||
|
|
||
|
entity objective1Arrow1;
|
||
|
entity objective1Arrow2;
|
||
|
entity objective2Arrow1;
|
||
|
entity objective2Arrow2;
|
||
|
entity objective3Arrow1;
|
||
|
|
||
|
float mainObjectiveIndex;
|
||
|
|
||
|
entity core1;
|
||
|
entity core2;
|
||
|
entity core3;
|
||
|
entity core4;
|
||
|
entity core5;
|
||
|
|
||
|
entity transformer;
|
||
|
entity securityControls;
|
||
|
|
||
|
entity seawallBreachBroken;
|
||
|
entity seawallBreach;
|
||
|
entity seawallBreachDetail;
|
||
|
|
||
|
entity eastBunkerBreach;
|
||
|
entity eastBunkerBreachBroken;
|
||
|
|
||
|
entity forwardBunkerDoor;
|
||
|
entity forwardBunkerDoorBroken;
|
||
|
|
||
|
entity fakeDoor;
|
||
|
|
||
|
float breachesDestroyed;
|
||
|
|
||
|
boolean eastBunkerBreachDestroyed;
|
||
|
boolean seawallBreachDestroyed;
|
||
|
boolean forwardBunkerDoorDestroyed;
|
||
|
|
||
|
|
||
|
entity gun1Construction;
|
||
|
entity gun2Construction;
|
||
|
entity gun3Construction;
|
||
|
entity gun4Construction;
|
||
|
entity gun5Construction;
|
||
|
|
||
|
entity noplant_seawall_breach;
|
||
|
entity noplant_east_bunker_breach;
|
||
|
entity noplant_bunker_door;
|
||
|
entity noplant_transformer;
|
||
|
|
||
|
// entity securityDoors;
|
||
|
entity transformer_door_a;
|
||
|
entity transformer_door_b;
|
||
|
entity transformer_door_c;
|
||
|
entity transformer_door_d;
|
||
|
|
||
|
entity entranceWhole;
|
||
|
entity entranceWholeDetail;
|
||
|
entity entranceDestroyed;
|
||
|
|
||
|
entity pipes;
|
||
|
entity pipesAll;
|
||
|
entity pipesDamagedAll;
|
||
|
entity damagedPipes1;
|
||
|
entity damagedPipes2;
|
||
|
entity damagedPipes3;
|
||
|
entity damagedPipes4;
|
||
|
entity undamagedPipes1;
|
||
|
entity undamagedPipes2;
|
||
|
entity undamagedPipes3;
|
||
|
entity undamagedPipes4;
|
||
|
|
||
|
entity cascadeFX1;
|
||
|
entity cascadeFX2;
|
||
|
entity cascadeFX3;
|
||
|
entity cascadeFX4;
|
||
|
entity cascadeFX5;
|
||
|
entity cascadeFX6;
|
||
|
|
||
|
entity transformerInteriorSteam1;
|
||
|
entity transformerInteriorSteam2;
|
||
|
entity transformerInteriorSteam3;
|
||
|
entity transformerInteriorSteam4;
|
||
|
entity transformerInteriorSteam5;
|
||
|
entity transformerInteriorSteam6;
|
||
|
entity transformerInteriorSteam7;
|
||
|
entity transformerInteriorSteam8;
|
||
|
|
||
|
entity transformerGlassSmash1;
|
||
|
entity transformerGlassSmash2;
|
||
|
entity transformerGlassSmash3;
|
||
|
entity transformerGlassSmash4;
|
||
|
entity transformerGlassSmash5;
|
||
|
entity transformerGlassSmash6;
|
||
|
entity transformerGlassSmash7;
|
||
|
|
||
|
entity transformerGlass1;
|
||
|
entity transformerGlass2;
|
||
|
entity transformerGlass3;
|
||
|
entity transformerGlass4;
|
||
|
entity transformerGlass5;
|
||
|
entity transformerGlass6;
|
||
|
|
||
|
entity transformerBroken;
|
||
|
|
||
|
entity transformerInteriorEffects;
|
||
|
entity transformerExteriorEffects;
|
||
|
entity transformerWallEffects;
|
||
|
entity transformerWallEffects2;
|
||
|
|
||
|
entity transformerfacilitySmoke;
|
||
|
entity transformerfacilityRubble;
|
||
|
|
||
|
entity transformerfacilityBigPipes01a;
|
||
|
entity transformerfacilityBigPipes01b;
|
||
|
entity transformerfacilityBigPipes01c;
|
||
|
entity transformerfacilityBigPipes02a;
|
||
|
entity transformerfacilityBigPipes02b;
|
||
|
entity transformerfacilityBigPipes02c;
|
||
|
|
||
|
entity coreExplosion;
|
||
|
entity coreIdleEffect1;
|
||
|
entity coreIdleEffect2;
|
||
|
entity coreIdleEffect3;
|
||
|
entity coreIdleEffect4;
|
||
|
entity coreIdleEffect5;
|
||
|
|
||
|
float flyerDroneTaskDef;
|
||
|
float flyerDroneDefendTaskDef;
|
||
|
|
||
|
task leftVentTask;
|
||
|
task rightVentTask;
|
||
|
task leftVentTaskDefend;
|
||
|
task rightVentTaskDefend;
|
||
|
|
||
|
entity leftVentWaypoint;
|
||
|
entity rightVentWaypoint;
|
||
|
|
||
|
entity endCameraA;
|
||
|
entity endCameraB;
|
||
|
|
||
|
entity facilityTriggerHurt;
|
||
|
|
||
|
// Bot Functions
|
||
|
void OnSpawnCaptured( string actionName );
|
||
|
void OnSpawnLiberated( string actionName );
|
||
|
float bots_doors_destroyed;
|
||
|
|
||
|
// Bot Obstacles
|
||
|
entity westbreach_obstacle;
|
||
|
entity bunkerdoor_obstacle;
|
||
|
entity eastbreach_obstacle;
|
||
|
entity door_obstacle_1;
|
||
|
entity door_obstacle_2;
|
||
|
entity door_obstacle_3;
|
||
|
entity facility_obstacle;
|
||
|
|
||
|
// for debug prints
|
||
|
cvar debug_script;
|
||
|
}
|
||
|
|
||
|
mapObject_Base Volcano_MapScript() {
|
||
|
return new mapObject_Volcano;
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::destroy() {
|
||
|
if ( leftVentTask != $null ) {
|
||
|
leftVentTask.free();
|
||
|
leftVentTask = $null;
|
||
|
}
|
||
|
if ( rightVentTask != $null ) {
|
||
|
rightVentTask.free();
|
||
|
rightVentTask = $null;
|
||
|
}
|
||
|
if ( leftVentTaskDefend != $null ) {
|
||
|
leftVentTaskDefend.free();
|
||
|
leftVentTaskDefend = $null;
|
||
|
}
|
||
|
if ( rightVentTaskDefend != $null ) {
|
||
|
rightVentTaskDefend.free();
|
||
|
rightVentTaskDefend = $null;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::InitObjectives() {
|
||
|
gameRules.setWinningTeam( gdfTeam );
|
||
|
gdfTeam.SetRespawnWait( 20 );
|
||
|
stroggTeam.SetRespawnWait( 20 );
|
||
|
gdfTeam.InitRespawnTimeChange();
|
||
|
stroggTeam.InitRespawnTimeChange();
|
||
|
CreateRespawnTimeThread( stroggTeam );
|
||
|
|
||
|
flyerDroneTaskDef = GetPlayerTask( worldspawn.getKey( "task_flyer_drone" ) );
|
||
|
flyerDroneDefendTaskDef = GetPlayerTask( worldspawn.getKey( "task_flyer_drone_defend" ) );
|
||
|
|
||
|
//
|
||
|
// Territories
|
||
|
//
|
||
|
gdfBaseTerritory = worldspawn.getEntityKey( "script_gdf_base_territory" );
|
||
|
beachTerritory = worldspawn.getEntityKey( "script_beach_territory" );
|
||
|
facilityTerritory = worldspawn.getEntityKey( "script_facility_territory" );
|
||
|
stroggBaseTerritory = worldspawn.getEntityKey( "script_strogg_base_territory" );
|
||
|
|
||
|
gdfBaseTerritory.setActive( false );
|
||
|
facilityTerritory.setActive( false );
|
||
|
beachTerritory.setActive( true );
|
||
|
stroggBaseTerritory.setActive( true );
|
||
|
|
||
|
gdfBaseTerritory.setGameTeam( gdfTeam );
|
||
|
facilityTerritory.setGameTeam( gdfTeam );
|
||
|
beachTerritory.setGameTeam( gdfTeam );
|
||
|
stroggBaseTerritory.setGameTeam( stroggTeam );
|
||
|
|
||
|
//
|
||
|
// Spawns
|
||
|
//
|
||
|
gdfBunkerSpawn = worldspawn.getEntityKey( "script_gdf_bunker_spawn" );
|
||
|
gdfBaseSpawn = worldspawn.getEntityKey( "script_gdf_base_spawn" );
|
||
|
gdfFacilitySpawn = worldspawn.getEntityKey( "script_gdf_facility_spawn" );
|
||
|
stroggBaseSpawn = worldspawn.getEntityKey( "script_strogg_base_spawn" );
|
||
|
stroggBunkerSpawn = worldspawn.getEntityKey( "script_strogg_bunker_spawn" );
|
||
|
stroggBeachSpawn = worldspawn.getEntityKey( "script_strogg_beach_spawn" );
|
||
|
gdfOutsideSpawn = worldspawn.getEntityKey( "script_gdf_outside_spawn" );
|
||
|
|
||
|
gdfOutsideSpawn.vSetActive( true );
|
||
|
gdfOutsideSpawn.setGameTeam( gdfTeam );
|
||
|
|
||
|
gdfBunkerSpawn.setGameTeam( gdfTeam );
|
||
|
gdfBaseSpawn.setGameTeam( gdfTeam );
|
||
|
gdfFacilitySpawn.setGameTeam( $null_entity );
|
||
|
|
||
|
stroggBaseSpawn.setGameTeam( stroggTeam );
|
||
|
stroggBunkerSpawn.setGameTeam( $null_entity );
|
||
|
|
||
|
stroggBeachSpawn.setGameTeam( $null_entity );
|
||
|
stroggBeachSpawn.vSetActive( true );
|
||
|
|
||
|
//
|
||
|
// Objectives
|
||
|
//
|
||
|
objective1 = worldspawn.getEntityKey( "script_obj1_marker" );
|
||
|
objective2 = worldspawn.getEntityKey( "script_obj2_marker" );
|
||
|
objective3a = worldspawn.getEntityKey( "script_obj3a_marker" );
|
||
|
objective3b = worldspawn.getEntityKey( "script_obj3b_marker" );
|
||
|
objective3c = worldspawn.getEntityKey( "script_obj3c_marker" );
|
||
|
objective3d = worldspawn.getEntityKey( "script_obj3d_marker" );
|
||
|
objective3e = worldspawn.getEntityKey( "script_obj3e_marker" );
|
||
|
|
||
|
|
||
|
objective1Arrow1 = worldspawn.getEntityKey( "script_obj1_arrow1" );
|
||
|
objective1Arrow2 = worldspawn.getEntityKey( "script_obj1_arrow2" );
|
||
|
objective2Arrow1 = worldspawn.getEntityKey( "script_obj2_arrow1" );
|
||
|
objective2Arrow2 = worldspawn.getEntityKey( "script_obj2_arrow2" );
|
||
|
objective3Arrow1 = worldspawn.getEntityKey( "script_obj3_arrow1" );
|
||
|
|
||
|
objective1.vStartObjective();
|
||
|
objective1Arrow1.vStartObjective();
|
||
|
objective1Arrow2.vStartObjective();
|
||
|
|
||
|
objective2.vStartObjective();
|
||
|
objective3a.vStartObjective();
|
||
|
|
||
|
core1 = worldspawn.getEntityKey( "script_core1" );
|
||
|
core2 = worldspawn.getEntityKey( "script_core2" );
|
||
|
core3 = worldspawn.getEntityKey( "script_core3" );
|
||
|
core4 = worldspawn.getEntityKey( "script_core4" );
|
||
|
core5 = worldspawn.getEntityKey( "script_core5" );
|
||
|
|
||
|
transformer = worldspawn.getEntityKey( "script_transformer" );
|
||
|
securityControls = worldspawn.getEntityKey( "script_security_controls" );
|
||
|
|
||
|
transformer_door_a = worldspawn.getEntityKey( "script_transformer_door_a" );
|
||
|
transformer_door_b = worldspawn.getEntityKey( "script_transformer_door_b" );
|
||
|
transformer_door_c = worldspawn.getEntityKey( "script_transformer_door_c" );
|
||
|
transformer_door_d = worldspawn.getEntityKey( "script_transformer_door_d" );
|
||
|
|
||
|
seawallBreach = worldspawn.getEntityKey( "script_seawall_breach" );
|
||
|
seawallBreachDetail = worldspawn.getEntityKey( "script_seawall_breach_detail" );
|
||
|
seawallBreachBroken = worldspawn.getEntityKey( "script_seawall_breach_broken" );
|
||
|
|
||
|
eastBunkerBreach = worldspawn.getEntityKey( "script_east_bunker" );
|
||
|
eastBunkerBreachBroken = worldspawn.getEntityKey( "script_east_bunker_broken" );
|
||
|
|
||
|
forwardBunkerDoor = worldspawn.getEntityKey( "script_forward_bunker_door" );
|
||
|
forwardBunkerDoorBroken = worldspawn.getEntityKey( "script_forward_bunker_door_broken" );
|
||
|
|
||
|
gun1Construction = worldspawn.getEntityKey( "script_gun_1" );
|
||
|
gun2Construction = worldspawn.getEntityKey( "script_gun_2" );
|
||
|
gun3Construction = worldspawn.getEntityKey( "script_gun_3" );
|
||
|
gun4Construction = worldspawn.getEntityKey( "script_gun_4" );
|
||
|
gun5Construction = worldspawn.getEntityKey( "script_gun_5" );
|
||
|
|
||
|
noplant_seawall_breach = worldspawn.getEntityKey( "script_noplant_seawall_breach" );
|
||
|
noplant_east_bunker_breach = worldspawn.getEntityKey( "script_noplant_east_bunker_breach" );
|
||
|
noplant_bunker_door = worldspawn.getEntityKey( "script_noplant_bunker_door" );
|
||
|
noplant_transformer = worldspawn.getEntityKey( "script_noplant_transformer" );
|
||
|
|
||
|
core1.setTakesDamage( 0 );
|
||
|
core2.setTakesDamage( 0 );
|
||
|
core3.setTakesDamage( 0 );
|
||
|
core4.setTakesDamage( 0 );
|
||
|
core5.setTakesDamage( 0 );
|
||
|
|
||
|
seawallBreachBroken.hide();
|
||
|
eastBunkerBreachBroken.hide();
|
||
|
forwardBunkerDoorBroken.hide();
|
||
|
|
||
|
core1.hide();
|
||
|
core1.forceDisableClip();
|
||
|
|
||
|
core2.hide();
|
||
|
core2.forceDisableClip();
|
||
|
|
||
|
core3.hide();
|
||
|
core3.forceDisableClip();
|
||
|
|
||
|
core4.hide();
|
||
|
core4.forceDisableClip();
|
||
|
|
||
|
|
||
|
|
||
|
//
|
||
|
// Misc
|
||
|
//
|
||
|
//securityDoors = worldspawn.getEntityKey( "script_security_doors" );
|
||
|
entranceWhole = worldspawn.getEntityKey( "script_entrance_building_whole" );
|
||
|
entranceWholeDetail = worldspawn.getEntityKey( "script_entrance_building_whole_detail" );
|
||
|
entranceDestroyed = worldspawn.getEntityKey( "script_entrance_building_destroyed" );
|
||
|
fakeDoor = worldspawn.getEntityKey( "script_fake_door" );
|
||
|
|
||
|
pipes = worldspawn.getEntityKey( "script_cascade_pipes" );
|
||
|
pipesAll = worldspawn.getEntityKey( "script_cascade_pipes_all" );
|
||
|
pipesDamagedAll = worldspawn.getEntityKey( "script_cascade_damaged_pipes_all" );
|
||
|
damagedPipes1 = worldspawn.getEntityKey( "script_cascade_damaged_pipes_1" );
|
||
|
damagedPipes2 = worldspawn.getEntityKey( "script_cascade_damaged_pipes_2" );
|
||
|
damagedPipes3 = worldspawn.getEntityKey( "script_cascade_damaged_pipes_3" );
|
||
|
damagedPipes4 = worldspawn.getEntityKey( "script_cascade_damaged_pipes_4" );
|
||
|
undamagedPipes1 = worldspawn.getEntityKey( "script_cascade_undamaged_pipes_1" );
|
||
|
undamagedPipes2 = worldspawn.getEntityKey( "script_cascade_undamaged_pipes_2" );
|
||
|
undamagedPipes3 = worldspawn.getEntityKey( "script_cascade_undamaged_pipes_3" );
|
||
|
undamagedPipes4 = worldspawn.getEntityKey( "script_cascade_undamaged_pipes_4" );
|
||
|
|
||
|
cascadeFX1 = worldspawn.getEntityKey( "script_fx_cascade1" );
|
||
|
cascadeFX2 = worldspawn.getEntityKey( "script_fx_cascade2" );
|
||
|
cascadeFX3 = worldspawn.getEntityKey( "script_fx_cascade3" );
|
||
|
cascadeFX4 = worldspawn.getEntityKey( "script_fx_cascade4" );
|
||
|
cascadeFX5 = worldspawn.getEntityKey( "script_fx_cascade5" );
|
||
|
cascadeFX6 = worldspawn.getEntityKey( "script_fx_cascade6" );
|
||
|
|
||
|
transformerInteriorSteam1 = worldspawn.getEntityKey( "script_transformer_interior_steam1" );
|
||
|
transformerInteriorSteam2 = worldspawn.getEntityKey( "script_transformer_interior_steam2" );
|
||
|
transformerInteriorSteam3 = worldspawn.getEntityKey( "script_transformer_interior_steam3" );
|
||
|
transformerInteriorSteam4 = worldspawn.getEntityKey( "script_transformer_interior_steam4" );
|
||
|
transformerInteriorSteam5 = worldspawn.getEntityKey( "script_transformer_interior_steam5" );
|
||
|
transformerInteriorSteam6 = worldspawn.getEntityKey( "script_transformer_interior_steam6" );
|
||
|
transformerInteriorSteam7 = worldspawn.getEntityKey( "script_transformer_interior_steam7" );
|
||
|
transformerInteriorSteam8 = worldspawn.getEntityKey( "script_transformer_interior_steam8" );
|
||
|
|
||
|
transformerGlassSmash1 = worldspawn.getEntityKey( "script_transformer_glass_smash_1" );
|
||
|
transformerGlassSmash2 = worldspawn.getEntityKey( "script_transformer_glass_smash_2" );
|
||
|
transformerGlassSmash3 = worldspawn.getEntityKey( "script_transformer_glass_smash_3" );
|
||
|
transformerGlassSmash4 = worldspawn.getEntityKey( "script_transformer_glass_smash_4" );
|
||
|
transformerGlassSmash5 = worldspawn.getEntityKey( "script_transformer_glass_smash_5" );
|
||
|
transformerGlassSmash6 = worldspawn.getEntityKey( "script_transformer_glass_smash_6" );
|
||
|
transformerGlassSmash7 = worldspawn.getEntityKey( "script_transformer_glass_smash_7" );
|
||
|
|
||
|
transformerInteriorEffects = worldspawn.getEntityKey( "script_transformer_interior_effects" );
|
||
|
|
||
|
transformerExteriorEffects = worldspawn.getEntityKey( "script_transformer_exterior_effects" );
|
||
|
transformerWallEffects = worldspawn.getEntityKey( "script_transformer_wall_effects" );
|
||
|
transformerWallEffects2 = worldspawn.getEntityKey( "script_transformer_wall_effects2" );
|
||
|
|
||
|
transformerfacilitySmoke = worldspawn.getEntityKey( "script_transformer_facility_smoke" );
|
||
|
transformerfacilityRubble = worldspawn.getEntityKey( "script_transformer_facility_rubble" );
|
||
|
|
||
|
transformerfacilityBigPipes01a = worldspawn.getEntityKey( "script_transformer_facility_bigpipes01a" );
|
||
|
transformerfacilityBigPipes01b = worldspawn.getEntityKey( "script_transformer_facility_bigpipes01b" );
|
||
|
transformerfacilityBigPipes01c = worldspawn.getEntityKey( "script_transformer_facility_bigpipes01c" );
|
||
|
transformerfacilityBigPipes02a = worldspawn.getEntityKey( "script_transformer_facility_bigpipes02a" );
|
||
|
transformerfacilityBigPipes02b = worldspawn.getEntityKey( "script_transformer_facility_bigpipes02b" );
|
||
|
transformerfacilityBigPipes02c = worldspawn.getEntityKey( "script_transformer_facility_bigpipes02c" );
|
||
|
|
||
|
coreExplosion = worldspawn.getEntityKey( "script_core_explosion" );
|
||
|
|
||
|
coreIdleEffect1 = worldspawn.getEntityKey( "script_core_effects_idle_1" );
|
||
|
coreIdleEffect2 = worldspawn.getEntityKey( "script_core_effects_idle_2" );
|
||
|
coreIdleEffect3 = worldspawn.getEntityKey( "script_core_effects_idle_3" );
|
||
|
coreIdleEffect4 = worldspawn.getEntityKey( "script_core_effects_idle_4" );
|
||
|
coreIdleEffect5 = worldspawn.getEntityKey( "script_core_effects_idle_5" );
|
||
|
|
||
|
transformerGlass1 = worldspawn.getEntityKey( "script_transformer_glass_1" );
|
||
|
transformerGlass2 = worldspawn.getEntityKey( "script_transformer_glass_2" );
|
||
|
transformerGlass3 = worldspawn.getEntityKey( "script_transformer_glass_3" );
|
||
|
transformerGlass4 = worldspawn.getEntityKey( "script_transformer_glass_4" );
|
||
|
transformerGlass5 = worldspawn.getEntityKey( "script_transformer_glass_5" );
|
||
|
transformerGlass6 = worldspawn.getEntityKey( "script_transformer_glass_6" );
|
||
|
|
||
|
|
||
|
transformerBroken = worldspawn.getEntityKey( "script_transformer_broken" );
|
||
|
|
||
|
leftVentWaypoint = worldspawn.getEntityKey( "script_hint_flyerdrone_1" );
|
||
|
rightVentWaypoint = worldspawn.getEntityKey( "script_hint_flyerdrone_2" );
|
||
|
|
||
|
endCameraA = worldspawn.getEntityKey( "script_placement_camera_a" );
|
||
|
endCameraB = worldspawn.getEntityKey( "script_placement_camera_b" );
|
||
|
|
||
|
facilityTriggerHurt = worldspawn.getEntityKey( "script_facility_trigger_hurt" );
|
||
|
|
||
|
// Bot Obstacles
|
||
|
|
||
|
westbreach_obstacle = worldspawn.getEntityKey( "script_westbreach_obstacle_1" );
|
||
|
bunkerdoor_obstacle = worldspawn.getEntityKey( "script_bunkerdoor_obstacle_1" );
|
||
|
eastbreach_obstacle = worldspawn.getEntityKey( "script_eastbreach_obstacle_1" );
|
||
|
door_obstacle_1 = worldspawn.getEntityKey( "script_door_obstacle_1" );
|
||
|
door_obstacle_2 = worldspawn.getEntityKey( "script_door_obstacle_2" );
|
||
|
door_obstacle_3 = worldspawn.getEntityKey( "script_door_obstacle_3" );
|
||
|
facility_obstacle = worldspawn.getEntityKey( "script_facility_obstacle" );
|
||
|
|
||
|
transformerBroken.hide();
|
||
|
transformerBroken.forceDisableClip();
|
||
|
|
||
|
entranceDestroyed.hide();
|
||
|
entranceDestroyed.forceDisableClip();
|
||
|
|
||
|
pipes.hide();
|
||
|
//pipesAll.hide(); // these are the whole, undamaged pipe structure
|
||
|
pipesDamagedAll.hide();
|
||
|
damagedPipes1.hide();
|
||
|
damagedPipes2.hide();
|
||
|
damagedPipes3.hide();
|
||
|
damagedPipes4.hide();
|
||
|
undamagedPipes1.hide();
|
||
|
undamagedPipes2.hide();
|
||
|
undamagedPipes3.hide();
|
||
|
undamagedPipes4.hide();
|
||
|
|
||
|
mainObjectiveIndex = OBJECTIVE_VOLCANO_HACK;
|
||
|
bots_doors_destroyed = 0;
|
||
|
|
||
|
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
|
||
|
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
|
||
|
|
||
|
gun1Construction.vCreateMission();
|
||
|
gun2Construction.vCreateMission();
|
||
|
gun3Construction.vCreateMission();
|
||
|
gun5Construction.vCreateMission(); // gun4 is the one inside the facility
|
||
|
|
||
|
eastBunkerBreach.vCreateMission();
|
||
|
seawallBreach.vCreateMission();
|
||
|
forwardBunkerDoor.vCreateMission();
|
||
|
|
||
|
forwardBunkerDoorDestroyed = false;
|
||
|
seawallBreachDestroyed = false;
|
||
|
eastBunkerBreachDestroyed = false;
|
||
|
|
||
|
breachesDestroyed = 0;
|
||
|
|
||
|
gameRules.setEndGameCamera( endCameraB );
|
||
|
|
||
|
thread StartFirstObjective();
|
||
|
|
||
|
debug_script = sys.getCVar( "bot_debugMapScript", "1" );
|
||
|
|
||
|
CreateDeployTasks();
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::CompleteObjective( float index, entity p ) {
|
||
|
if ( index == OBJECTIVE_VOLCANO_HACK ) {
|
||
|
OnHack();
|
||
|
} else if ( index == OBJECTIVE_VOLCANO_DESTROY_TRANSFORMER ) {
|
||
|
OnTransformerDestroyed();
|
||
|
} else if ( index == OBJECTIVE_VOLCANO_DAMAGE_CORE_TO80 ) {
|
||
|
OnCoreDamaged1();
|
||
|
} else if ( index == OBJECTIVE_VOLCANO_DAMAGE_CORE_TO60 ) {
|
||
|
OnCoreDamaged2();
|
||
|
} else if ( index == OBJECTIVE_VOLCANO_DAMAGE_CORE_TO40 ) {
|
||
|
OnCoreDamaged3();
|
||
|
} else if ( index == OBJECTIVE_VOLCANO_DAMAGE_CORE_TO20 ) {
|
||
|
OnCoreDamaged4();
|
||
|
} else if ( index == OBJECTIVE_VOLCANO_CORE_DESTROYED ) {
|
||
|
OnCoreDestroyed();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
handle mapObject_Volcano::GetObjectiveMessage( float index ) {
|
||
|
|
||
|
if( index == OBJECTIVE_VOLCANO_HACK ) {
|
||
|
return sys.localizeString( "maps/volcano/controls_hacked" );
|
||
|
}
|
||
|
|
||
|
if( index == OBJECTIVE_VOLCANO_DESTROY_TRANSFORMER ) {
|
||
|
return sys.localizeString( "maps/volcano/destroyed_transformer" );
|
||
|
}
|
||
|
|
||
|
if( index == OBJECTIVE_VOLCANO_DAMAGE_CORE_TO80 ) {
|
||
|
return sys.localizeString( "maps/volcano/damaged_core_to80" );
|
||
|
}
|
||
|
|
||
|
if( index == OBJECTIVE_VOLCANO_DAMAGE_CORE_TO60 ) {
|
||
|
return sys.localizeString( "maps/volcano/damaged_core_to60" );
|
||
|
}
|
||
|
|
||
|
if( index == OBJECTIVE_VOLCANO_DAMAGE_CORE_TO40 ) {
|
||
|
return sys.localizeString( "maps/volcano/damaged_core_to40" );
|
||
|
}
|
||
|
|
||
|
if( index == OBJECTIVE_VOLCANO_DAMAGE_CORE_TO20 ) {
|
||
|
return sys.localizeString( "maps/volcano/damaged_core_to20" );
|
||
|
}
|
||
|
|
||
|
if( index == OBJECTIVE_VOLCANO_CORE_DESTROYED ) {
|
||
|
return sys.localizeString( "maps/volcano/destroyed_core" );
|
||
|
}
|
||
|
|
||
|
return g_locStr_BadObjective;
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnConstructionComplete( entity obj ) {
|
||
|
if ( obj == gun1Construction ) {
|
||
|
OnGun1Built();
|
||
|
} else if ( obj == gun2Construction ) {
|
||
|
OnGun2Built();
|
||
|
} else if ( obj == gun3Construction ) {
|
||
|
OnGun3Built();
|
||
|
} else if ( obj == gun4Construction ) {
|
||
|
OnGun4Built();
|
||
|
} else if ( obj == gun5Construction ) {
|
||
|
OnGun5Built();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnDestructionComplete( entity obj ) {
|
||
|
if ( obj == seawallBreach ) {
|
||
|
OnSeawallBreachDestroyed();
|
||
|
} else if ( obj == eastBunkerBreach ) {
|
||
|
OnEastBunkerBreachDestroyed();
|
||
|
} else if ( obj == forwardBunkerDoor ) {
|
||
|
OnForwardBunkerDoorDestroyed();
|
||
|
} else if ( obj == gun1Construction ) {
|
||
|
OnGun1Destroyed();
|
||
|
} else if ( obj == gun2Construction ) {
|
||
|
OnGun1Destroyed();
|
||
|
} else if ( obj == gun3Construction ) {
|
||
|
OnGun1Destroyed();
|
||
|
} else if ( obj == gun4Construction ) {
|
||
|
OnGun1Destroyed();
|
||
|
} else if ( obj == gun5Construction ) {
|
||
|
OnGun1Destroyed();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnEastBunkerBreachDestroyed() {
|
||
|
bots_doors_destroyed++;
|
||
|
eastBunkerBreachDestroyed = true;
|
||
|
noplant_east_bunker_breach.remove();
|
||
|
eastBunkerBreachBroken.show();
|
||
|
eastBunkerBreach.vCompleteMission();
|
||
|
eastbreach_obstacle.activate( eastbreach_obstacle );
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_DESTROY_EAST_BUNKER );
|
||
|
OnAnyBreach();
|
||
|
if ( mainObjectiveIndex == OBJECTIVE_VOLCANO_DESTROY_TRANSFORMER ) {
|
||
|
objManager.enableRoute( "bot_route_east_bunker_obj2" );
|
||
|
}
|
||
|
if ( mainObjectiveIndex == OBJECTIVE_VOLCANO_HACK ) {
|
||
|
objManager.enableRoute( "bot_route_east_bunker_obj1" );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_EAST_BUNKER_POSTBREACH );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_EAST_BUNKER );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnSeawallBreachDestroyed() {
|
||
|
bots_doors_destroyed++;
|
||
|
seawallBreachDestroyed = true;
|
||
|
westbreach_obstacle.activate( westbreach_obstacle );
|
||
|
noplant_seawall_breach.remove();
|
||
|
seawallBreach.vCompleteMission();
|
||
|
seawallBreachDetail.remove();
|
||
|
seawallBreachBroken.show();
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_DESTROY_SEAWALL );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_SEAWALL );
|
||
|
OnAnyBreach();
|
||
|
if ( mainObjectiveIndex == OBJECTIVE_VOLCANO_DESTROY_TRANSFORMER ) {
|
||
|
objManager.enableRoute( "bot_route_wall_obj2" );
|
||
|
}
|
||
|
if ( mainObjectiveIndex == OBJECTIVE_VOLCANO_HACK ) {
|
||
|
objManager.enableRoute( "bot_route_wall_obj1" );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_SEAWALL_POSTBREACH );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnForwardBunkerDoorDestroyed() {
|
||
|
bots_doors_destroyed++;
|
||
|
forwardBunkerDoorDestroyed = true;
|
||
|
bunkerdoor_obstacle.activate( bunkerdoor_obstacle );
|
||
|
noplant_bunker_door.remove();
|
||
|
forwardBunkerDoorBroken.show();
|
||
|
forwardBunkerDoor.vCompleteMission();
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_DESTROY_BUNKERDOOR );
|
||
|
OnAnyBreach();
|
||
|
if ( mainObjectiveIndex == OBJECTIVE_VOLCANO_DESTROY_TRANSFORMER ) {
|
||
|
objManager.enableRoute( "bot_route_underground_obj2" );
|
||
|
}
|
||
|
if ( mainObjectiveIndex == OBJECTIVE_VOLCANO_HACK ) {
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_BUNKERDOOR_POSTBREACH);
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_BUNKERDOOR );
|
||
|
}
|
||
|
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnAnyBreach() {
|
||
|
breachesDestroyed = breachesDestroyed + 1;
|
||
|
if ( mainObjectiveIndex == OBJECTIVE_VOLCANO_HACK ) {
|
||
|
objManager.setTeamAttacksDeployables( GDF, false );
|
||
|
objManager.setPrimaryTeamAction( STROGG, "strogg_hack_console_1" );
|
||
|
// turn of prevent hack only action
|
||
|
objManager.deactivateBotAction( "strogg_hack_console_2" );
|
||
|
objManager.setPrimaryTeamAction( GDF, "strogg_hack_console_1" );
|
||
|
objManager.setBotCriticalClass( STROGG, COVERTOPS );
|
||
|
objManager.setTeamNeededClass( STROGG, COVERTOPS, NOCLASS, 2, false, true );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_HACK_CONTROLS );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_HACK_SUPPORT );
|
||
|
//objManager.switchTeamWeapons( STROGG, COVERTOPS, 1, 0, 100 );
|
||
|
// Force all CovertOps to switch from RG to Acurized Lacerator
|
||
|
objManager.switchTeamWeapons( STROGG, COVERTOPS, 15, 2, false );
|
||
|
if ( breachesDestroyed == 1 ) {
|
||
|
//objManager.setTeamNeededClass( STROGG, COVERTOPS, NOCLASS, 1, true, false );
|
||
|
} if ( breachesDestroyed == 2 ) {
|
||
|
objManager.setTeamNeededClass( STROGG, COVERTOPS, SOLDIER, 1, false, true );
|
||
|
} if ( breachesDestroyed == 3 ) {
|
||
|
objManager.setTeamNeededClass( STROGG, MEDIC, SOLDIER, 1, true, false );
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnGun1Built() {
|
||
|
gun1Construction.vCompleteMission();
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_BUILD_GUN1 );
|
||
|
|
||
|
if ( mainObjectiveIndex < OBJECTIVE_VOLCANO_DESTROY_CORE ) {
|
||
|
objManager.activateBotActionGroup( VOL_GDF_USE_GUN1 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnGun1Destroyed() {
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_USE_GUN1 );
|
||
|
|
||
|
if ( mainObjectiveIndex < OBJECTIVE_VOLCANO_DESTROY_CORE ) {
|
||
|
gun1Construction.vCreateMission();
|
||
|
objManager.activateBotActionGroup( VOL_GDF_BUILD_GUN1 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnGun2Built() {
|
||
|
gun2Construction.vCompleteMission();
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_BUILD_GUN2 );
|
||
|
|
||
|
if ( mainObjectiveIndex < OBJECTIVE_VOLCANO_DESTROY_CORE ) {
|
||
|
objManager.activateBotActionGroup( VOL_GDF_USE_GUN2 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnGun2Destroyed() {
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_USE_GUN2 );
|
||
|
|
||
|
if ( mainObjectiveIndex < OBJECTIVE_VOLCANO_DESTROY_CORE ) {
|
||
|
gun2Construction.vCreateMission();
|
||
|
objManager.activateBotActionGroup( VOL_GDF_BUILD_GUN2 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnGun3Built() {
|
||
|
gun3Construction.vCompleteMission();
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_BUILD_GUN3 );
|
||
|
|
||
|
if ( mainObjectiveIndex < OBJECTIVE_VOLCANO_DESTROY_CORE ) {
|
||
|
objManager.activateBotActionGroup( VOL_GDF_USE_GUN3 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnGun3Destroyed() {
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_USE_GUN3 );
|
||
|
|
||
|
if ( mainObjectiveIndex < OBJECTIVE_VOLCANO_DESTROY_CORE ) {
|
||
|
gun3Construction.vCreateMission();
|
||
|
objManager.activateBotActionGroup( VOL_GDF_BUILD_GUN3 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnGun4Built() {
|
||
|
gun4Construction.vCompleteMission();
|
||
|
objManager.activateBotActionGroup( VOL_GDF_USE_GUN4 );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_BUILD_GUN4 );
|
||
|
}
|
||
|
|
||
|
// gun inside facility
|
||
|
void mapObject_Volcano::OnGun4Destroyed() {
|
||
|
gun4Construction.vCreateMission();
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_USE_GUN4 );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_BUILD_GUN4 );
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnGun5Built() {
|
||
|
gun5Construction.vCompleteMission();
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_BUILD_GUN5 );
|
||
|
|
||
|
if ( mainObjectiveIndex < OBJECTIVE_VOLCANO_DESTROY_CORE ) {
|
||
|
objManager.activateBotActionGroup( VOL_GDF_USE_GUN5 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnGun5Destroyed() {
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_USE_GUN5 );
|
||
|
|
||
|
if ( mainObjectiveIndex < OBJECTIVE_VOLCANO_DESTROY_CORE ) {
|
||
|
gun5Construction.vCreateMission();
|
||
|
objManager.activateBotActionGroup( VOL_GDF_BUILD_GUN5 );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnHack() {
|
||
|
mainObjectiveIndex = OBJECTIVE_VOLCANO_DESTROY_TRANSFORMER;
|
||
|
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
|
||
|
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
|
||
|
|
||
|
objective1.vFinishObjective();
|
||
|
|
||
|
objective1Arrow1.vFinishObjective();
|
||
|
objective1Arrow2.vFinishObjective();
|
||
|
objective1.vFinishObjective();
|
||
|
|
||
|
objective2Arrow1.vStartObjective();
|
||
|
objective2Arrow2.vStartObjective();
|
||
|
objective2.vStartObjective();
|
||
|
|
||
|
// Bots for Second Objective
|
||
|
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_HACK_CONTROLS );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_CONTROLS );
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_HACK_SUPPORT );
|
||
|
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_BEACH );
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_BEACH_SUPPORT );
|
||
|
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_CAPTURE_BEACH_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_ATTACK_BEACH_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_DEFEND_BEACH_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_ATTACK_BEACH_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_BEACH_SPAWN );
|
||
|
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_OBJ1_DEPLOY );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_OBJ1_DEPLOY );
|
||
|
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_BUNKERDOOR );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_EAST_BUNKER );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_SEAWALL );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_BUNKERDOOR_POSTBREACH );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_EAST_BUNKER_POSTBREACH );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_SEAWALL_POSTBREACH );
|
||
|
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_CAPTURE_BUNKER_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_ATTACK_BUNKER_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_BUNKER_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_ATTACK_BUNKER_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_DEFEND_BUNKER_SPAWN );
|
||
|
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_BUILD_GUN1 );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_BUILD_GUN2 );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_BUILD_GUN3 );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_BUILD_GUN5 );
|
||
|
|
||
|
objManager.activateBotActionGroup( VOL_OBJ2_INTERMEDIATE );
|
||
|
|
||
|
objManager.setBotCriticalClass( GDF, ENGINEER );
|
||
|
objManager.setBotCriticalClass( STROGG, SOLDIER );
|
||
|
objManager.setTeamNeededClass( GDF, ENGINEER, COVERTOPS, 2, false, true );
|
||
|
objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 3, true, true );
|
||
|
objManager.setTeamNeededClass( STROGG, MEDIC, COVERTOPS, 1, false, false );
|
||
|
//objManager.switchTeamWeapons( STROGG, SOLDIER, 0, 2, 50 );
|
||
|
objManager.switchTeamWeapons( STROGG, SOLDIER, 5, 2, false ); // Force switch from RL to SMG
|
||
|
objManager.switchTeamWeapons( STROGG, SOLDIER, 6, 2, true ); // Randomly switch from HMG to SMG
|
||
|
|
||
|
objManager.setTeamAttacksDeployables( GDF, false );
|
||
|
objManager.setTeamAttacksDeployables( STROGG, false );
|
||
|
|
||
|
objManager.disableRoute( "bot_route_east_bunker_obj1" );
|
||
|
objManager.disableRoute( "bot_route_wall_obj1" );
|
||
|
|
||
|
if ( eastBunkerBreachDestroyed ) {
|
||
|
objManager.enableRoute( "bot_route_east_bunker_obj2" );
|
||
|
if ( debug_script.getBoolValue() ) {
|
||
|
sys.print( "enabled east bunker door route for objective 2\n" );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( seawallBreachDestroyed ) {
|
||
|
objManager.enableRoute( "bot_route_wall_obj2" );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_SEAWALL_POSTBREACH_OBJ2 );
|
||
|
if ( debug_script.getBoolValue() ) {
|
||
|
sys.print( "enabled broken wall route for objective 2, and gdf are covering it\n" );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( forwardBunkerDoorDestroyed ) {
|
||
|
objManager.enableRoute( "bot_route_underground_obj2" );
|
||
|
if ( debug_script.getBoolValue() ) {
|
||
|
sys.print( "enabled bunker door route for objective 2\n" );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
beachTerritory.setGameTeam( stroggTeam );
|
||
|
stroggBeachSpawn.vSetActive( false );
|
||
|
stroggBeachSpawn.setGameTeam( stroggTeam );
|
||
|
|
||
|
gdfOutsideSpawn.setGameTeam( $null_entity );
|
||
|
gdfOutsideSpawn.vSetActive( false );
|
||
|
|
||
|
facilityTerritory.setActive( true );
|
||
|
beachTerritory.setActive( true );
|
||
|
stroggBaseTerritory.setActive( false );
|
||
|
|
||
|
//securityDoors.remove();
|
||
|
|
||
|
securityControls.vCompleteMission();
|
||
|
StopTimedMission();
|
||
|
|
||
|
objManager.SetObjectiveEntity( $null_entity, -1 );
|
||
|
|
||
|
thread StartTransformerObjective();
|
||
|
|
||
|
transformer_door_a.open();
|
||
|
transformer_door_b.open();
|
||
|
transformer_door_c.open();
|
||
|
transformer_door_d.open();
|
||
|
|
||
|
// delayed door obstacle remove thread
|
||
|
thread DoorObstacleDelay();
|
||
|
|
||
|
stroggTeam.SetRespawnWait( 20 );
|
||
|
ResetRespawnTimeThread();
|
||
|
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::DoorObstacleDelay() {
|
||
|
sys.wait( 34 );
|
||
|
door_obstacle_1.activate( door_obstacle_1 );
|
||
|
door_obstacle_2.activate( door_obstacle_2 );
|
||
|
door_obstacle_3.activate( door_obstacle_3 );
|
||
|
|
||
|
objManager.deactivateBotActionGroup( VOL_OBJ2_INTERMEDIATE );
|
||
|
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_DESTROY_TRANSFORMER );
|
||
|
objManager.activateBotActionGroup( STROGG_SUPPORT_VOLCANO_TRANSFORMER );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_TRANSFORMER );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_OBJ2_DEPLOY );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_OBJ2_DEPLOY );
|
||
|
|
||
|
objManager.setPrimaryTeamAction( GDF, "strogg_transformer_1" );
|
||
|
objManager.setPrimaryTeamAction( STROGG, "strogg_transformer_1" );
|
||
|
}
|
||
|
|
||
|
|
||
|
void mapObject_Volcano::OnTransformerDestroyed() {
|
||
|
mainObjectiveIndex = OBJECTIVE_VOLCANO_DESTROY_CORE;
|
||
|
objManager.setNextObjective( gdfTeam, mainObjectiveIndex );
|
||
|
objManager.setNextObjective( stroggTeam, mainObjectiveIndex );
|
||
|
|
||
|
facilityTerritory.setGameTeam( stroggTeam );
|
||
|
|
||
|
gdfBaseTerritory.setActive( true );
|
||
|
facilityTerritory.setActive( true );
|
||
|
beachTerritory.setActive( false );
|
||
|
|
||
|
stroggBunkerSpawn.setGameTeam( stroggTeam );
|
||
|
|
||
|
gdfBunkerSpawn.setGameTeam( $null_entity );
|
||
|
gdfFacilitySpawn.setGameTeam( gdfTeam );
|
||
|
|
||
|
objective2.vFinishObjective();
|
||
|
objective2Arrow1.vFinishObjective();
|
||
|
objective2Arrow2.vFinishObjective();
|
||
|
|
||
|
objective3Arrow1.vStartObjective();
|
||
|
|
||
|
objective3a.vStartObjective();
|
||
|
|
||
|
noplant_transformer.remove();
|
||
|
|
||
|
thread ExplosionCascade();
|
||
|
|
||
|
transformer.vCompleteMission();
|
||
|
StopTimedMission();
|
||
|
|
||
|
objManager.SetObjectiveEntity( $null_entity, -1 );
|
||
|
|
||
|
thread StartCoreObjective();
|
||
|
|
||
|
core1.show();
|
||
|
core1.forceEnableClip();
|
||
|
core1.setTakesDamage( 1 );
|
||
|
fakeDoor.remove();
|
||
|
|
||
|
transformerBroken.show();
|
||
|
transformerBroken.forceEnableClip();
|
||
|
|
||
|
pipes.show();
|
||
|
pipesAll.hide();
|
||
|
undamagedPipes1.show();
|
||
|
undamagedPipes2.show();
|
||
|
undamagedPipes3.show();
|
||
|
undamagedPipes4.show();
|
||
|
|
||
|
stroggTeam.SetRespawnWait( 20 );
|
||
|
ResetRespawnTimeThread();
|
||
|
|
||
|
|
||
|
//Remove Beach turret for strogg before they place a new turret for final obj -->Added by Vex
|
||
|
objManager.clearTeamBotBoundEntities ( STROGG );
|
||
|
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_DESTROY_TRANSFORMER );
|
||
|
objManager.deactivateBotActionGroup( STROGG_SUPPORT_VOLCANO_TRANSFORMER );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_TRANSFORMER );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_OBJ1AND2_DEPLOY );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_OBJ2_DEPLOY );
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_OBJ2_DEPLOY );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_SEAWALL_POSTBREACH_OBJ2 );
|
||
|
|
||
|
// Xian: Per mark, deactivate these guns.
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_USE_GUN1 );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_USE_GUN2 );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_USE_GUN3 );
|
||
|
|
||
|
objManager.activateBotActionGroup( VOL_OBJ3_INTERMEDIATE );
|
||
|
|
||
|
//objManager.switchTeamWeapons( STROGG, COVERTOPS, 1, 0, 100 );
|
||
|
//objManager.switchTeamWeapons( GDF, COVERTOPS, 1, 0, 100 );
|
||
|
//objManager.switchTeamWeapons( GDF, SOLDIER, 0, 0, 100 );
|
||
|
objManager.switchTeamWeapons( STROGG, COVERTOPS, 15, 2, false ); // Force switch of Strogg Snipers to Gunners
|
||
|
objManager.switchTeamWeapons( GDF, COVERTOPS, 15, 2, false ); // Ditto for GDF snipers
|
||
|
objManager.switchTeamWeapons( GDF, SOLDIER, 5, 2, true ); // Randomly switch RL to SMG
|
||
|
objManager.switchTeamWeapons( GDF, SOLDIER, 2, 6, true ); // Randomly switch SMG to HMG
|
||
|
|
||
|
objManager.setBotCriticalClass( GDF, ENGINEER );
|
||
|
objManager.setBotCriticalClass( STROGG, COVERTOPS );
|
||
|
|
||
|
objManager.setTeamNeededClass( GDF, MEDIC, NOCLASS, 2, false, false );
|
||
|
objManager.setTeamNeededClass( STROGG, COVERTOPS, SOLDIER, 2, true, true );
|
||
|
objManager.setTeamNeededClass( STROGG, MEDIC, FIELDOPS, 1, false, false );
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::FacilityBreached() {
|
||
|
pipes.hide();
|
||
|
damagedPipes1.hide();
|
||
|
damagedPipes2.hide();
|
||
|
damagedPipes3.hide();
|
||
|
damagedPipes4.hide();
|
||
|
pipesDamagedAll.show();
|
||
|
|
||
|
entranceWhole.hide();
|
||
|
entranceWhole.forceDisableClip();
|
||
|
|
||
|
entranceWholeDetail.hide();
|
||
|
entranceWholeDetail.forceDisableClip();
|
||
|
|
||
|
entranceDestroyed.show();
|
||
|
entranceDestroyed.forceEnableClip();
|
||
|
|
||
|
facility_obstacle.activate( facility_obstacle );
|
||
|
|
||
|
gun4Construction.vCreateMission();
|
||
|
gun1Construction.vFreeMission();
|
||
|
gun2Construction.vFreeMission();
|
||
|
gun3Construction.vFreeMission();
|
||
|
gun5Construction.vFreeMission();
|
||
|
|
||
|
FreeWorldTask( engineerDeployTask );
|
||
|
FreeWorldTask( fieldopsDeployTask );
|
||
|
FreeWorldTask( medicDeployTask );
|
||
|
|
||
|
eastBunkerBreach.vFreeMission();
|
||
|
seawallBreach.vFreeMission();
|
||
|
forwardBunkerDoor.vFreeMission();
|
||
|
|
||
|
leftVentTask = taskManager.allocEntityTask( flyerDroneTaskDef, leftVentWaypoint );
|
||
|
rightVentTask = taskManager.allocEntityTask( flyerDroneTaskDef, rightVentWaypoint );
|
||
|
leftVentTaskDefend = taskManager.allocEntityTask( flyerDroneDefendTaskDef, leftVentWaypoint );
|
||
|
rightVentTaskDefend = taskManager.allocEntityTask( flyerDroneDefendTaskDef, rightVentWaypoint );
|
||
|
|
||
|
objManager.deactivateBotActionGroup( VOL_OBJ3_INTERMEDIATE );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_DESTROY_CORE );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_ATTACK_CORE );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_CORE );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_OBJ3_DEPLOY );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_OBJ3_DEPLOY );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_BUILD_GUN4 );
|
||
|
|
||
|
objManager.setPrimaryTeamAction( STROGG, "infiltrator_camp_vents_1" );
|
||
|
objManager.setPrimaryTeamAction( GDF, "gdf_camp_core_1" );
|
||
|
|
||
|
facilityTriggerHurt.activate( facilityTriggerHurt );
|
||
|
sys.wait( 0.1f);
|
||
|
facilityTriggerHurt.activate( facilityTriggerHurt );
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::ExplosionCascade() {
|
||
|
sys.wait( 0.1f);
|
||
|
transformerInteriorEffects.vTriggerParticleEffect( 1 );
|
||
|
transformerInteriorSteam1.vTriggerParticleEffect( 1 );
|
||
|
transformerInteriorSteam2.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
transformerGlass1.remove();
|
||
|
transformerGlass2.remove();
|
||
|
transformerGlass3.remove();
|
||
|
transformerGlass4.remove();
|
||
|
transformerGlass5.remove();
|
||
|
transformerGlass6.remove();
|
||
|
|
||
|
transformerGlassSmash1.vTriggerParticleEffect( 1 );
|
||
|
transformerGlassSmash2.vTriggerParticleEffect( 1 );
|
||
|
transformerGlassSmash3.vTriggerParticleEffect( 1 );
|
||
|
transformerGlassSmash4.vTriggerParticleEffect( 1 );
|
||
|
transformerGlassSmash5.vTriggerParticleEffect( 1 );
|
||
|
transformerGlassSmash6.vTriggerParticleEffect( 1 );
|
||
|
transformerGlassSmash7.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
sys.wait( 0.3f );
|
||
|
transformerInteriorSteam3.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
sys.wait( 0.3f );
|
||
|
transformerInteriorSteam4.vTriggerParticleEffect( 1 );
|
||
|
transformerInteriorSteam5.vTriggerParticleEffect( 1 );
|
||
|
transformerInteriorSteam6.vTriggerParticleEffect( 1 );
|
||
|
transformerInteriorSteam7.vTriggerParticleEffect( 1 );
|
||
|
transformerInteriorSteam8.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
sys.wait( 0.5f );
|
||
|
transformerInteriorEffects.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
sys.wait( 10.f );
|
||
|
|
||
|
cascadeFX1.vTriggerParticleEffect( 1 );
|
||
|
transformerInteriorEffects.vTriggerParticleEffect( 1 );
|
||
|
transformerExteriorEffects.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
sys.wait( 0.4f );
|
||
|
|
||
|
undamagedPipes1.hide();
|
||
|
damagedPipes1.show();
|
||
|
cascadeFX2.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
sys.wait( 0.4f );
|
||
|
undamagedPipes2.hide();
|
||
|
damagedPipes2.show();
|
||
|
cascadeFX3.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
sys.wait( 0.3f );
|
||
|
undamagedPipes3.hide();
|
||
|
damagedPipes3.show();
|
||
|
cascadeFX4.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
sys.wait( 0.3f );
|
||
|
undamagedPipes4.hide();
|
||
|
damagedPipes4.show();
|
||
|
cascadeFX5.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
sys.wait( 0.2f );
|
||
|
cascadeFX6.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
sys.wait( 0.5f );
|
||
|
transformerWallEffects.vTriggerParticleEffect( 1 );
|
||
|
transformerfacilitySmoke.vTriggerParticleEffect( 1 );
|
||
|
transformerfacilityBigPipes01a.vTriggerParticleEffect( 1 );
|
||
|
transformerfacilityBigPipes01b.vTriggerParticleEffect( 1 );
|
||
|
transformerfacilityBigPipes01c.vTriggerParticleEffect( 1 );
|
||
|
transformerfacilityBigPipes02a.vTriggerParticleEffect( 1 );
|
||
|
transformerfacilityBigPipes02b.vTriggerParticleEffect( 1 );
|
||
|
transformerfacilityBigPipes02c.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
sys.wait( 0.2f );
|
||
|
transformerWallEffects2.vTriggerParticleEffect( 1 );
|
||
|
transformerfacilityRubble.vTriggerParticleEffect( 1 );
|
||
|
|
||
|
FacilityBreached();
|
||
|
|
||
|
}
|
||
|
|
||
|
////// dave: hereon is a hack to simulate the core is gradually damaged
|
||
|
|
||
|
void mapObject_Volcano::OnCoreDamaged1() {
|
||
|
objective3a.vFinishObjective();
|
||
|
objective3b.vStartObjective();
|
||
|
|
||
|
core5.vSetState( 0.2f );
|
||
|
|
||
|
objManager.PlaySound( worldspawn.getKey( "snd_core80_strogg" ), stroggTeam );
|
||
|
objManager.PlaySound( worldspawn.getKey( "snd_core80_gdf" ), gdfTeam );
|
||
|
|
||
|
coreExplosion.vTriggerParticleEffect( 1 );
|
||
|
coreIdleEffect1.remove();
|
||
|
|
||
|
core2.show();
|
||
|
core2.forceEnableClip();
|
||
|
core2.setTakesDamage( 1 );
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnCoreDamaged2() {
|
||
|
objective3b.vFinishObjective();
|
||
|
objective3c.vStartObjective();
|
||
|
|
||
|
core5.vSetState( 0.4f );
|
||
|
|
||
|
objManager.PlaySound( worldspawn.getKey( "snd_core60_strogg" ), stroggTeam );
|
||
|
objManager.PlaySound( worldspawn.getKey( "snd_core60_gdf" ), gdfTeam );
|
||
|
|
||
|
coreExplosion.vTriggerParticleEffect( 2 );
|
||
|
coreIdleEffect2.remove();
|
||
|
|
||
|
core3.show();
|
||
|
core3.forceEnableClip();
|
||
|
core3.setTakesDamage( 1 );
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnCoreDamaged3() {
|
||
|
objective3c.vFinishObjective();
|
||
|
objective3d.vStartObjective();
|
||
|
|
||
|
core5.vSetState( 0.6f );
|
||
|
|
||
|
objManager.PlaySound( worldspawn.getKey( "snd_core40_strogg" ), stroggTeam );
|
||
|
objManager.PlaySound( worldspawn.getKey( "snd_core40_gdf" ), gdfTeam );
|
||
|
|
||
|
coreExplosion.vTriggerParticleEffect( 3 );
|
||
|
coreIdleEffect3.remove();
|
||
|
|
||
|
core4.show();
|
||
|
core4.forceEnableClip();
|
||
|
core4.setTakesDamage( 1 );
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnCoreDamaged4() {
|
||
|
objective3d.vFinishObjective();
|
||
|
objective3e.vStartObjective();
|
||
|
|
||
|
core5.vSetState( 0.8f );
|
||
|
|
||
|
objManager.PlaySound( worldspawn.getKey( "snd_core20_strogg" ), stroggTeam );
|
||
|
objManager.PlaySound( worldspawn.getKey( "snd_core20_gdf" ), gdfTeam );
|
||
|
|
||
|
coreExplosion.vTriggerParticleEffect( 4 );
|
||
|
coreIdleEffect4.remove();
|
||
|
|
||
|
core5.setTakesDamage( 1 );
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnCoreDestroyed() {
|
||
|
objective3e.vFinishObjective();
|
||
|
|
||
|
objective3Arrow1.vFinishObjective();
|
||
|
|
||
|
objManager.SetObjectiveEntity( $null_entity, -1 );
|
||
|
|
||
|
core5.vSetState( 1.f );
|
||
|
|
||
|
objManager.PlaySound( worldspawn.getKey( "snd_stroggwin_strogg" ), stroggTeam );
|
||
|
objManager.PlaySound( worldspawn.getKey( "snd_stroggwin_gdf" ), gdfTeam );
|
||
|
|
||
|
core5.vCompleteMission();
|
||
|
StopTimedMission();
|
||
|
|
||
|
coreExplosion.vTriggerParticleEffect( 5 );
|
||
|
coreIdleEffect5.remove();
|
||
|
|
||
|
gameRules.setEndGameCamera( endCameraA );
|
||
|
|
||
|
gameRules.setWinningTeam( stroggTeam );
|
||
|
gameRules.endGame();
|
||
|
|
||
|
thread OnCoreDestroyedEffectsThread();
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnCoreDestroyedEffectsThread() {
|
||
|
|
||
|
sys.wait( 0.8f );
|
||
|
coreExplosion.vTriggerParticleEffect( 6 );
|
||
|
|
||
|
sys.wait( 1.3f );
|
||
|
coreExplosion.vTriggerParticleEffect( 7 );
|
||
|
|
||
|
sys.wait( 0.3f );
|
||
|
coreExplosion.vTriggerParticleEffect( 8 );
|
||
|
|
||
|
sys.wait( 0.8f );
|
||
|
coreExplosion.vTriggerParticleEffect( 9 );
|
||
|
|
||
|
sys.wait( 0.4f );
|
||
|
coreExplosion.vTriggerParticleEffect( 10 );
|
||
|
|
||
|
sys.wait( 0.2f );
|
||
|
coreExplosion.vTriggerParticleEffect( 11 );
|
||
|
|
||
|
sys.wait( 0.4f );
|
||
|
coreExplosion.vTriggerParticleEffect( 12 );
|
||
|
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnTimeLimitHit() {
|
||
|
FinishTimedMission();
|
||
|
objManager.SetObjectiveEntity( $null_entity, -1 );
|
||
|
|
||
|
objManager.PlaySound( worldspawn.getKey( "snd_strogglose_strogg" ), stroggTeam );
|
||
|
objManager.PlaySound( worldspawn.getKey( "snd_strogglose_gdf" ), gdfTeam );
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::StartFirstObjective() {
|
||
|
|
||
|
// Set up Bots for first objective
|
||
|
objManager.setAttackingTeam( STROGG );
|
||
|
objManager.setPrimaryTeamAction( GDF, "bjames_strogg_bunkerdoor_1" );
|
||
|
objManager.setPrimaryTeamAction( STROGG, "bjames_strogg_bunkerdoor_1" );
|
||
|
|
||
|
objManager.setTeamAttacksDeployables( STROGG, false );
|
||
|
|
||
|
objManager.setBotCriticalClass( GDF, ENGINEER );
|
||
|
objManager.setBotCriticalClass( STROGG, SOLDIER );
|
||
|
|
||
|
objManager.activateBotActionGroup( VOL_GDF_BUILD_GUN1 );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_BUILD_GUN2 );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_BUILD_GUN3 );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_BUILD_GUN5 );
|
||
|
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_BEACH_SPAWN );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_ATTACK_BEACH_SPAWN );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_BUNKER_SPAWN );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_ATTACK_BUNKER_SPAWN );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_BEACH );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_BUNKERDOOR );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_EAST_BUNKER );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_SEAWALL );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_OBJ1_DEPLOY );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_OBJ1AND2_DEPLOY );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_OBJ1_DEPLOY );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_BEACH_SUPPORT );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_CAPTURE_BEACH_SPAWN );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_DESTROY_BUNKERDOOR );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_DESTROY_EAST_BUNKER );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_DESTROY_SEAWALL );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_CONTROLS );
|
||
|
|
||
|
objManager.setPrimaryTeamAction( STROGG, "strogg_hack_console_2" ); // only human prevent hack
|
||
|
|
||
|
objManager.setBotSightDist( 3000.0f );
|
||
|
objManager.SetObjectiveEntity( securityControls, mainObjectiveIndex );
|
||
|
securityControls.vCreateMission();
|
||
|
CreateInitialTimedMission( securityControls );
|
||
|
|
||
|
seawallBreach.vCreateMission();
|
||
|
eastBunkerBreach.vCreateMission();
|
||
|
forwardBunkerDoor.vCreateMission();
|
||
|
thread DelayedBotSpawnThread();
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::DelayedBotSpawnThread() {
|
||
|
sys.wait( 10.0f ); // 10 second wait, 5 + 5 sec in StartFirstObjective thread above
|
||
|
|
||
|
objManager.setTeamNeededClass( GDF, FIELDOPS, NOCLASS, 2, true, true );
|
||
|
objManager.setTeamNeededClass( STROGG, SOLDIER, NOCLASS, 3, true, true );
|
||
|
objManager.setTeamNeededClass( STROGG, COVERTOPS, NOCLASS, 2, true, false );
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::StartTransformerObjective() {
|
||
|
sys.wait( 15.f );
|
||
|
|
||
|
objManager.SetObjectiveEntity( transformer, mainObjectiveIndex );
|
||
|
transformer.vCreateMission();
|
||
|
CreateInitialTimedMission( transformer );
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::StartCoreObjective() {
|
||
|
sys.wait( 5.f );
|
||
|
|
||
|
objManager.SetObjectiveEntity( core5, mainObjectiveIndex );
|
||
|
core5.vCreateMission();
|
||
|
CreateInitialTimedMission( core5 );
|
||
|
}
|
||
|
|
||
|
// MBJ - Bot Forward Spawn Actions
|
||
|
|
||
|
void mapObject_Volcano::OnSpawnCaptured( string actionName ) {
|
||
|
|
||
|
if ( actionName == "gdf_bunker_spawn" ) {
|
||
|
if ( debug_script.getBoolValue() ) {
|
||
|
sys.print( "GDF HAVE CAPTURED BUNKER SPAWN!\n" );
|
||
|
}
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_BUNKER_SPAWN );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_ATTACK_BUNKER_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_DEFEND_BUNKER_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_ATTACK_BUNKER_SPAWN );
|
||
|
}
|
||
|
|
||
|
if ( actionName == "strogg_beach_spawn" ) {
|
||
|
if ( debug_script.getBoolValue() ) {
|
||
|
sys.print( "STROGG HAVE CAPTURED BEACH SPAWN!\n" );
|
||
|
}
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_DEFEND_BEACH_SPAWN );
|
||
|
objManager.activateBotActionGroup( VOL_GDF_ATTACK_BEACH_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_ATTACK_BEACH_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_BEACH_SPAWN );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
void mapObject_Volcano::OnSpawnLiberated( string actionName ) {
|
||
|
|
||
|
if ( actionName == "gdf_bunker_spawn" ) {
|
||
|
if ( debug_script.getBoolValue() ) {
|
||
|
sys.print( "GDF HAVE LOST BUNKER SPAWN!\n" );
|
||
|
}
|
||
|
objManager.activateBotActionGroup( VOL_GDF_ATTACK_BUNKER_SPAWN );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_DEFEND_BUNKER_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_ATTACK_BUNKER_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_DEFEND_BUNKER_SPAWN );
|
||
|
}
|
||
|
|
||
|
if ( actionName == "strogg_beach_spawn" ) {
|
||
|
if ( debug_script.getBoolValue() ) {
|
||
|
sys.print( "STROGG HAVE LOST BEACH SPAWN!\n" );
|
||
|
}
|
||
|
objManager.activateBotActionGroup( VOL_GDF_DEFEND_BEACH_SPAWN );
|
||
|
objManager.activateBotActionGroup( VOL_STROGG_ATTACK_BEACH_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_STROGG_DEFEND_BEACH_SPAWN );
|
||
|
objManager.deactivateBotActionGroup( VOL_GDF_ATTACK_BEACH_SPAWN );
|
||
|
}
|
||
|
}
|
||
|
|
||
|
entity mapObject_Volcano::GetSpectateEntity() {
|
||
|
if ( securityControls != $null_entity ) {
|
||
|
if ( !securityControls.vIsObjectiveComplete() ) {
|
||
|
return securityControls.vGetSpectateEntity();
|
||
|
}
|
||
|
}
|
||
|
|
||
|
if ( transformer != $null_entity ) {
|
||
|
return transformer.vGetSpectateEntity();
|
||
|
}
|
||
|
|
||
|
if ( coreIdleEffect5 != $null_entity ) {
|
||
|
// find the flyer drone nearest the core
|
||
|
entity worldspawn = sys.getEntity( "worldspawn" );
|
||
|
|
||
|
// this is a bit of a hack
|
||
|
float count = worldspawn.entitiesOfCollection( "flyer_hive" );
|
||
|
float i;
|
||
|
|
||
|
flyer_hive closest;
|
||
|
float closestDist;
|
||
|
vector targetOrigin = coreIdleEffect5.getWorldOrigin();
|
||
|
|
||
|
for ( i = 0; i < count; i++ ) {
|
||
|
flyer_hive ent = worldspawn.getBoundsCacheEntity( i );
|
||
|
if ( ent != $null_entity ) {
|
||
|
float distance = sys.vecLength( ent.getWorldOrigin() - targetOrigin );
|
||
|
// magic distance - basically they're getting close to the core
|
||
|
if ( distance < 3000.0f ) {
|
||
|
if ( distance < closestDist || closest == $null_entity ) {
|
||
|
closest = ent;
|
||
|
closestDist = distance;
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
}
|
||
|
if ( closest != $null_entity ) {
|
||
|
return closest.owner;
|
||
|
}
|
||
|
}
|
||
|
|
||
|
return $null_entity;
|
||
|
}
|