1122 lines
28 KiB
Plaintext
1122 lines
28 KiB
Plaintext
#include maps\mp\_utility;
|
|
#include maps\mp\gametypes\_hud_util;
|
|
#include common_scripts\utility;
|
|
#include maps\mp\agents\_agent_utility;
|
|
#include maps\mp\gametypes\_damage;
|
|
#include maps\mp\agents\_scriptedAgents;
|
|
#include maps\mp\_audio;
|
|
#include maps\mp\_dynamic_events;
|
|
|
|
|
|
main()
|
|
{
|
|
maps\mp\mp_recovery_precache::main();
|
|
maps\createart\mp_recovery_art::main();
|
|
maps\mp\mp_recovery_fx::main();
|
|
maps\mp\_load::main();
|
|
maps\mp\mp_recovery_lighting::main();
|
|
maps\mp\mp_recovery_aud::main();
|
|
|
|
maps\mp\_compass::setupMiniMap( "compass_map_mp_recovery" );
|
|
|
|
game["attackers"] = "allies";
|
|
game["defenders"] = "axis";
|
|
|
|
//dynamic event fx
|
|
|
|
level.missilefx = loadfx("vfx/test/hms_fireball_explosion_xlrg");
|
|
|
|
thread dynamic_ents();
|
|
thread handle_teleport();
|
|
thread dynamic_pathing_main();
|
|
|
|
gametype = level.gametype;
|
|
if ( !isdefined ( level.isHorde ) )
|
|
if( !(gametype == "twar" || gametype == "sd" || gametype == "sr" )) //no dynamic event in horde
|
|
level thread DynamicEvent( ::recovery_dynamic_event);
|
|
|
|
level thread onPlayerConnect();
|
|
|
|
//spawns
|
|
thread SpawnSetup();
|
|
level.DynamicEventStatus = "before"; // for recovery killstreak keeping track of event
|
|
level.hp_pause_for_dynamic_event = false;
|
|
|
|
// level.mapCustomKillstreakFunc = ::recoveryCustomKillstreakFunc;
|
|
|
|
// paladin overrides
|
|
level.orbitalSupportOverrideFunc = ::recoveryCustomOSPFunc;
|
|
|
|
// Setting a map-specific OSP light/vision set.
|
|
level.ospvisionset = "mp_recovery_b";
|
|
level.ospLightSet = "mp_recovery_osp";
|
|
|
|
// Setting a map-specific assault drone vision and light set.
|
|
level.droneVisionSet = "mp_recovery_b";
|
|
level.droneLightSet = "mp_recovery";
|
|
}
|
|
|
|
recoveryCustomOSPFunc()
|
|
{
|
|
level.orbitalsupportoverrides.spawnHeight = 9324;
|
|
level.orbitalsupportoverrides.spawnAngleMin = 290;
|
|
level.orbitalsupportoverrides.spawnAngleMax = 370;
|
|
level.orbitalsupportoverrides.topArc = -45;
|
|
thread recoveryEventCustomOSPFunc();
|
|
}
|
|
|
|
recoveryEventCustomOSPFunc()
|
|
{
|
|
level waittill( "Gas_Cloud_Start" );
|
|
level.orbitalsupportoverrides.spawnAngleMin = 120;
|
|
level.orbitalsupportoverrides.spawnAngleMax = 180;
|
|
level.orbitalsupportoverrides.turretPitch = 55;
|
|
level.orbitalsupportoverrides.topArc = -40;
|
|
level.orbitalsupportoverrides.bottomArc = 65;
|
|
}
|
|
|
|
//recoveryCustomKillstreakFunc()
|
|
//{
|
|
// level thread maps\mp\killstreaks\streak_mp_recovery::init();
|
|
//}
|
|
|
|
SpawnSetup()
|
|
{
|
|
level.dynamicHangarSpawns = false;
|
|
level.dynamicSpawns = ::GetListOfGoodSpawnPoints;
|
|
}
|
|
|
|
set_lighting_values()
|
|
{
|
|
if ( IsUsingHDR() )
|
|
{ while (true)
|
|
{
|
|
level waittill("connected", player); // we need to set the dvars for each player as he connects.
|
|
player SetClientDvars(
|
|
"r_tonemap", "1"
|
|
);
|
|
/* player SetClientDvars(
|
|
"r_tonemap", "1",
|
|
"r_tonemapadaptspeed", ".07",
|
|
"r_tonemapkey", "0",
|
|
"r_veil", "1",
|
|
"r_veilstrength", ".087",
|
|
"r_tonemapexposure", "-10"
|
|
);
|
|
|
|
//For setting the max exposure so we can get contrast back into the map without blowing everything out
|
|
setdvar ("r_tonemapmaxexposure", "-10");
|
|
|
|
//Controling how much SSAO there is in the scene
|
|
setdvar ("r_ssaoPower", "3.5");
|
|
setdvar ("r_ssaoBlurRadius", "1.5");
|
|
*/
|
|
}
|
|
}
|
|
}
|
|
|
|
dynamic_ents()
|
|
{
|
|
emergency_state = GetEnt("mp_recovery_signage","targetname");
|
|
wait(.05);
|
|
emergency_state hide_notsolid();
|
|
FlickerLights();
|
|
|
|
rightdoorArray = GetEntArray("hangar_door_right","targetname");
|
|
|
|
leftdoorArray = GetEntArray("hangar_door_left","targetname");
|
|
|
|
missileArray = GetEntArray("chemical_missile","targetname");
|
|
missile2Array = GetEntArray("chemical_missile2","targetname");
|
|
missile3Array = GetEntArray("chemical_missile3","targetname");
|
|
missile4Array = GetEntArray("chemical_missile4","targetname");
|
|
missile5Array = GetEntArray("chemical_missile5","targetname");
|
|
missile6Array = GetEntArray("chemical_missile6","targetname");
|
|
|
|
missile7Array = GetEntArray("chemical_missile7","targetname");
|
|
missile8Array = GetEntArray("chemical_missile8","targetname");
|
|
missile9Array = GetEntArray("chemical_missile9","targetname");
|
|
missile10Array = GetEntArray("chemical_missile10","targetname");
|
|
|
|
GasDeathtrigs_1 = GetEntArray ("deathTrig_1", "targetname");
|
|
GasDeathtrigs_2 = GetEntArray ("deathTrig_2", "targetname");
|
|
GasDeathtrigs_3 = GetEntArray ("deathTrig_3", "targetname");
|
|
|
|
foreach (trig1 in GasDeathtrigs_1)
|
|
{
|
|
trig1 DontInterpolate();
|
|
trig1.origin = trig1.origin + (0, 0, -10000);
|
|
}
|
|
|
|
foreach (trig2 in GasDeathtrigs_2)
|
|
{
|
|
trig2 DontInterpolate();
|
|
trig2.origin = trig2.origin + (0, 0, -10000);
|
|
}
|
|
|
|
foreach (trig3 in GasDeathtrigs_3)
|
|
{
|
|
trig3 DontInterpolate();
|
|
trig3.origin = trig3.origin + (0, 0, -10000);
|
|
}
|
|
|
|
level waittill( "Missile_Wave2_ended" );
|
|
level.dynamicHangarSpawns = true;
|
|
|
|
level.DynamicEventStatus = "after";
|
|
|
|
wait (5);
|
|
|
|
foreach (trig1 in GasDeathtrigs_1)
|
|
{
|
|
trig1 DontInterpolate();
|
|
trig1.origin = trig1.origin + (0, 0, 10000);
|
|
}
|
|
|
|
wait (5);
|
|
|
|
foreach (trig2 in GasDeathtrigs_2)
|
|
{
|
|
trig2 DontInterpolate();
|
|
trig2.origin = trig2.origin + (0, 0, 10000);
|
|
}
|
|
|
|
wait (5);
|
|
|
|
foreach (trig3 in GasDeathtrigs_3)
|
|
{
|
|
trig3 DontInterpolate();
|
|
trig3.origin = trig3.origin + (0, 0, 10000);
|
|
}
|
|
}
|
|
|
|
recovery_dynamic_event()
|
|
{ //swap in state b lighting for alarm lights
|
|
hologram_signs = GetEnt("hologram_signs","targetname");
|
|
hologram_signs hide_notsolid();
|
|
emergency_state = GetEnt("mp_recovery_signage","targetname");
|
|
emergency_state show(); // but stay notsolid
|
|
thread KillLights();
|
|
thread spawnHangarDoors();
|
|
//thread spawnMissileAttack1();
|
|
thread volcanoStartEruption();
|
|
//thread spawnMissileAttack2();
|
|
thread gasCloudStart();
|
|
//thread DynamicDeathTriggers();
|
|
}
|
|
|
|
handle_teleport()
|
|
{
|
|
gametype = level.gametype;
|
|
if( !( gameType == "dom" || gametype == "ctf" || gametype == "hp" || gametype == "ball" ) )
|
|
return;
|
|
|
|
if( gametype == "hp" )
|
|
level waittill( "dynamic_event_starting" );
|
|
else
|
|
level waittill( "hangar_doors_opening" );
|
|
|
|
level.hp_pause_for_dynamic_event = true;
|
|
maps\mp\_teleport::teleport_to_zone( "zone_0", true );
|
|
|
|
level.useStartSpawns = false;
|
|
}
|
|
|
|
dynamic_pathing_main()
|
|
{
|
|
hangar_doors = GetEntArray( "hangar_door_right", "targetname" );
|
|
|
|
level waittill( "hangar_doors_opening" );
|
|
|
|
wait( 3 );
|
|
foreach ( door in hangar_doors )
|
|
{
|
|
if( door.classname == "script_brushmodel" )
|
|
door ConnectPaths();
|
|
}
|
|
escape_nodes = GetNodeArray( "escape_gas_dest_node", "targetname" );
|
|
escape_triggers = GetEntArray( "escape_gas_dest_trigger", "targetname" );
|
|
|
|
foreach( player in level.participants )
|
|
{
|
|
if( IsAI( player ) )
|
|
{
|
|
player maps\mp\bots\_bots_strategy::bot_defend_stop();
|
|
|
|
switch( level.gametype )
|
|
{
|
|
case "war":
|
|
case "conf":
|
|
case "infect":
|
|
case "dm":
|
|
player thread escape_gas( escape_nodes, escape_triggers );
|
|
break;
|
|
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
level waittill( "hangar_doors_closed" );
|
|
|
|
foreach ( door in hangar_doors )
|
|
{
|
|
if( door.classname == "script_brushmodel" )
|
|
door DisconnectPaths();
|
|
}
|
|
}
|
|
|
|
get_escape_gas_dest_node( escape_nodes )
|
|
{
|
|
random_int = randomint( escape_nodes.size );
|
|
selected_node = escape_nodes[random_int];
|
|
|
|
return selected_node;
|
|
}
|
|
|
|
clear_script_goal_on_gas_end()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "disconnect" );
|
|
|
|
level waittill( "hangar_doors_closed" );
|
|
wait(0.05);
|
|
self BotClearScriptGoal();
|
|
}
|
|
|
|
escape_gas( escape_nodes, escape_triggers )
|
|
{
|
|
level endon( "game_ended" );
|
|
level endon( "hangar_doors_closed" );
|
|
self endon( "disconnect" );
|
|
|
|
self thread clear_script_goal_on_gas_end();
|
|
|
|
while(1)
|
|
{
|
|
dest_node = get_escape_gas_dest_node( escape_nodes );
|
|
self BotSetScriptGoal( dest_node.origin, 512, "critical" );
|
|
result = self maps\mp\bots\_bots_util::bot_waittill_goal_or_fail( undefined, "death" );
|
|
if ( result == "goal" )
|
|
{
|
|
self BotClearScriptGoal();
|
|
wait(5.0);
|
|
}
|
|
else
|
|
{
|
|
wait(1.0);
|
|
}
|
|
}
|
|
}
|
|
|
|
spawnHangarDoors()
|
|
{
|
|
//get hangar door script brushes from radiant
|
|
|
|
rightdoorArray = GetEntArray("hangar_door_right","targetname");
|
|
// leftdoorArray = GetEntArray("hangar_door_left","targetname");
|
|
|
|
door_open_time = 12;
|
|
door_close_time = 12;
|
|
|
|
level waittill ("Gas_Cloud_Start");
|
|
|
|
//wait (15);
|
|
|
|
//opens the doors
|
|
|
|
level.DynamicEventStatus = "event_in_progress";
|
|
|
|
foreach (rightdoor in rightdoorArray)
|
|
{
|
|
rightdoorOrigin = GetEnt( rightdoor.target , "targetname");
|
|
rightdoor MoveTo( rightdoorOrigin.origin, door_open_time );
|
|
}
|
|
|
|
// foreach (leftdoor in leftdoorArray)
|
|
// {
|
|
// leftdoorOrigin = GetEnt( leftdoor.target , "targetname");
|
|
// leftdoor MoveTo( leftdoorOrigin.origin, door_open_time );
|
|
// }
|
|
|
|
thread notify_doors_open( door_open_time );
|
|
|
|
//play sfx
|
|
|
|
dooropen_sfx = GetEntArray ("hangar_open_sfx", "targetname");
|
|
|
|
foreach (dooropen in dooropen_sfx)
|
|
{
|
|
snd_play_in_space( "mp_recovery_hangar_door_open", dooropen.origin);
|
|
}
|
|
|
|
|
|
//CLOSE DOORS
|
|
|
|
level waittill( "close_doors" );
|
|
|
|
foreach (rightdoor in rightdoorArray)
|
|
{
|
|
rightdoorOrigin = GetEnt( rightdoor.target , "targetname");
|
|
rightdoorclose = GetEnt( rightdoorOrigin.target , "targetname");
|
|
rightdoor MoveTo (rightdoorclose.origin , door_close_time);
|
|
level thread maps\mp\mp_recovery_fx::sulfur_door_fx();
|
|
|
|
}
|
|
|
|
// foreach (leftdoor in leftdoorArray)
|
|
// {
|
|
// leftdoorOrigin = GetEnt( leftdoor.target , "targetname");
|
|
// leftdoorclose = GetEnt( leftdoorOrigin.target , "targetname");
|
|
// leftdoor MoveTo (leftdoorclose.origin , door_close_time);
|
|
// }
|
|
|
|
thread notify_doors_close( door_close_time );
|
|
|
|
//play sfx
|
|
|
|
dooropen_sfx = GetEntArray ("hangar_open_sfx", "targetname");
|
|
|
|
foreach (dooropen in dooropen_sfx)
|
|
{
|
|
snd_play_in_space( "mp_recovery_hangar_door_close", dooropen.origin);
|
|
}
|
|
}
|
|
|
|
notify_doors_close( wait_time )
|
|
{
|
|
level notify( "hangar_doors_closing" );
|
|
|
|
playSoundAtPos( ( 0,0,0 ),"mp_recovery_doors_closing" ); // DORS CLOSING
|
|
|
|
wait( wait_time );
|
|
|
|
level notify( "hangar_doors_closed" );
|
|
|
|
wait( 2 );
|
|
playSoundAtPos( ( 0,0,0 ), "mp_recovery_doors_sealed" ); // DOORS ARE CLOSED
|
|
}
|
|
|
|
notify_doors_open( wait_time )
|
|
{
|
|
level notify( "hangar_doors_opening" );
|
|
|
|
playSoundAtPos( ( 0,0,0 ), "mp_recovery_doors_opening" );
|
|
|
|
thread side_b_visionset_reset();
|
|
|
|
// HP Dynamic Event stuff
|
|
level.hp_pause_for_dynamic_event = false;
|
|
level notify( "ready_for_next_hp_zone" );
|
|
|
|
wait( wait_time );
|
|
|
|
level notify( "hangar_doors_opened" );
|
|
}
|
|
|
|
/*spawnMissileAttack1()
|
|
{
|
|
missileArray = GetEntArray("chemical_missile","targetname");
|
|
missile2Array = GetEntArray("chemical_missile2","targetname");
|
|
missile3Array = GetEntArray("chemical_missile3","targetname");
|
|
missile4Array = GetEntArray("chemical_missile4","targetname");
|
|
missile5Array = GetEntArray("chemical_missile5","targetname");
|
|
missile6Array = GetEntArray("chemical_missile6","targetname");
|
|
|
|
// level waittill ("dynamic_event");
|
|
|
|
|
|
foreach (missile in missileArray)
|
|
{
|
|
missileOrigin = GetEnt( missile.target , "targetname");
|
|
missile MoveTo (missileOrigin.origin, 2);
|
|
|
|
snd_play_in_space( "mp_recovery_hind_missiles_flyover_01", missileOrigin.origin);
|
|
wait (2);
|
|
snd_play_in_space( "mp_recovery_chopper_missile_hit_2", missileOrigin.origin);
|
|
|
|
missile thread play_event_music();
|
|
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(1);
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(7);
|
|
|
|
IPrintLnBold ("Chemical Attack!");
|
|
|
|
}
|
|
|
|
foreach (missile2 in missile2Array)
|
|
{
|
|
missile2Origin = GetEnt( missile2.target , "targetname");
|
|
missile2 MoveTo (missile2Origin.origin, 3);
|
|
|
|
snd_play_in_space( "mp_recovery_hind_missiles_flyover_02", missile2Origin.origin);
|
|
wait (3);
|
|
snd_play_in_space( "mp_recovery_chopper_missile_hit_4", missile2Origin.origin);
|
|
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(2);
|
|
|
|
}
|
|
|
|
foreach (missile3 in missile3Array)
|
|
{
|
|
missile3Origin = GetEnt( missile3.target , "targetname");
|
|
missile3 MoveTo (missile3Origin.origin, 1);
|
|
|
|
snd_play_in_space( "mp_recovery_hind_missiles_flyover_02", missile3Origin.origin);
|
|
wait (1);
|
|
snd_play_in_space( "mp_recovery_chopper_missile_hit_3", missile3Origin.origin);
|
|
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(3);
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(7);
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(8);
|
|
}
|
|
|
|
foreach (missile4 in missile4Array)
|
|
{
|
|
missile4Origin = GetEnt( missile4.target , "targetname");
|
|
missile4 MoveTo (missile4Origin.origin, 3);
|
|
|
|
snd_play_in_space( "mp_recovery_hind_missiles_flyover_01", missile4Origin.origin);
|
|
wait (3);
|
|
snd_play_in_space( "mp_recovery_chopper_missile_hit_3", missile4Origin.origin);
|
|
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(4);
|
|
|
|
}
|
|
|
|
foreach (missile5 in missile5Array)
|
|
{
|
|
missile5Origin = GetEnt( missile5.target , "targetname");
|
|
missile5 MoveTo (missile5Origin.origin, 2);
|
|
|
|
snd_play_in_space( "mp_recovery_hind_missiles_flyover_01", missile5Origin.origin);
|
|
wait (2);
|
|
snd_play_in_space( "mp_recovery_chopper_missile_hit_5", missile5Origin.origin);
|
|
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(5);
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(7);
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(8);
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(9);
|
|
|
|
}
|
|
|
|
foreach (missile6 in missile6Array)
|
|
{
|
|
missile6Origin = GetEnt( missile6.target , "targetname");
|
|
missile6 MoveTo (missile6Origin.origin, 3);
|
|
|
|
snd_play_in_space( "mp_recovery_hind_missiles_flyover_02", missile6Origin.origin);
|
|
wait (3);
|
|
snd_play_in_space( "mp_recovery_chopper_missile_hit_4", missile6Origin.origin);
|
|
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(6);
|
|
|
|
}
|
|
|
|
wait (5);
|
|
|
|
level notify( "Missile_Wave1_ended" );
|
|
|
|
|
|
}*/
|
|
|
|
volcanoStartEruption()
|
|
{
|
|
thread aud_dyanmic_event();
|
|
|
|
Earthquake( .6, 2, (0,0,0), 5000 );
|
|
//controller rumble
|
|
foreach( Player in level.players )
|
|
{
|
|
player thread play_earthquake_rumble( .75 );
|
|
}
|
|
level.gas_cloud_origin = getEnt("gas_cloud_origin", "targetname");
|
|
//level.gas_cloud_origin thread play_event_music();
|
|
//start volcano fx
|
|
StopClientExploder(200);
|
|
if( isDefined( level.panoramicfx ) )
|
|
level.panoramicfx delete();
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(100);
|
|
//IPrintLnBold ("The volcano is erupting!");
|
|
wait 8;
|
|
//start first boulder barrage
|
|
thread boulderBarrage(15, 2.0, 10, 19);
|
|
wait 5;
|
|
//change vision set
|
|
foreach ( player in level.players )
|
|
player SetClientTriggerVisionSet( "mp_recovery_post", 10.0 );
|
|
//IPrintLnBold ("Get inside the Hangar!");
|
|
level notify( "Gas_Cloud_Start" );
|
|
}
|
|
|
|
|
|
aud_dyanmic_event()
|
|
{
|
|
playSoundAtPos ( ( 2067, -2296 ,186 ), "emt_event_volcano_erupt" );
|
|
|
|
thread aud_handle_alarms();
|
|
|
|
wait( 4 );
|
|
|
|
playSoundAtPos( ( 0,0,0 ), "mp_recovery_volcanic_activity" ); // BIG EARTHQUAKE HIT SOUND
|
|
}
|
|
|
|
aud_handle_alarms()
|
|
{
|
|
level endon( "hangar_doors_closed" );
|
|
while(1)
|
|
{
|
|
playSoundAtPos( ( 0,0,0 ),"mp_recovery_alarms" ); // ALARMS LAST 5 Seconds.
|
|
|
|
wait(4);
|
|
}
|
|
}
|
|
|
|
gasCloudStart()
|
|
{
|
|
level waittill( "Gas_Cloud_Start" );
|
|
wait 5;
|
|
|
|
//start poison gas cloud
|
|
level.gas_cloud_origin = getEnt("gas_cloud_origin", "targetname");
|
|
playfxontag(getfx("pyroclastic_flow_1"), level.gas_cloud_origin, "tag_origin");
|
|
//IPrintLnBold ("Escape the Gas!");
|
|
wait 5;
|
|
|
|
//start second boulder barrage
|
|
thread boulderBarrage(15, 2.0, 20, 29);
|
|
|
|
//start third boulder barrage
|
|
delayThread(15, ::boulderBarrage, 15, 1.5, 30, 39);
|
|
|
|
//move spawn points to safe side of map
|
|
level.dynamicHangarSpawns = true;
|
|
|
|
//gas cloud is moving
|
|
gas_cloud_travel_time = 40;
|
|
door_close_time = 12;
|
|
level.gas_cloud_origin moveto( (level.gas_cloud_origin.origin + (0, 3912, 0) ), gas_cloud_travel_time );
|
|
level.gas_cloud_origin thread killPlayersInCloud(gas_cloud_travel_time + door_close_time, 7.5);
|
|
start_door_close_time = gas_cloud_travel_time - (door_close_time / 2);
|
|
thread setup_poison_gas_death();
|
|
|
|
//close doors
|
|
//noself_delayCall(start_door_close_time - 5, ::IPrintLnBold, "Hurry!");
|
|
wait start_door_close_time;
|
|
level notify("close_doors");
|
|
|
|
//end first part of poison gas cloud
|
|
wait door_close_time;
|
|
stopfxontag(getfx("pyroclastic_flow_1"), level.gas_cloud_origin, "tag_origin");
|
|
|
|
//force kill anyone not in the hangar the cloud didn't get
|
|
//level.gas_cloud_origin thread killPlayersInCloud(1, 10000);
|
|
level.gas_cloud_origin thread instantKillPlayersInCloud();
|
|
|
|
//spawn lingering poison gas fx
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(102);
|
|
|
|
wait 0.05;
|
|
level notify( "gas_cloud_finished" );
|
|
|
|
//kill sulfur dust, dust and steam vfx on starting side of map
|
|
StopClientExploder(40);
|
|
}
|
|
|
|
onPlayerConnect()
|
|
{
|
|
safe_from_gas_trigger = getEnt("safe_from_gas", "targetname");
|
|
while(true)
|
|
{
|
|
level waittill("connected", player);
|
|
player thread swapFogAndFX( safe_from_gas_trigger );
|
|
}
|
|
}
|
|
|
|
swapFogAndFX( safe_from_gas_trigger )
|
|
{
|
|
level endon("gas_cloud_finished");
|
|
self endon("disconnect");
|
|
|
|
//if player moves between gas and non-gas side of the map
|
|
while( true )
|
|
{
|
|
if ( !isDefined( safe_from_gas_trigger ) || !isDefined( self ) )
|
|
{
|
|
break;
|
|
}
|
|
|
|
if ( level.DynamicEventStatus == "event_in_progress" && IsAlive( self ) )
|
|
{
|
|
//move to gas side
|
|
if( !( self isTouching( safe_from_gas_trigger ) ) && isDefined( self.onNoPoisonSide ) )
|
|
{
|
|
//swap vision set
|
|
self SetClientTriggerVisionSet( "mp_recovery_post", 5.0 );
|
|
//swap gas fx
|
|
stopfxontag(getfx("pyroclastic_flow_2"), level.gas_cloud_origin, "tag_origin");
|
|
playfxontag(getfx("pyroclastic_flow_1"), level.gas_cloud_origin, "tag_origin");
|
|
self.onNoPoisonSide = undefined;
|
|
}
|
|
//move to non-gas side
|
|
else if( self isTouching( safe_from_gas_trigger ) && !isDefined( self.onNoPoisonSide ) )
|
|
{
|
|
//swap vision set
|
|
self SetClientTriggerVisionSet( "", 5.0 );
|
|
//swap gas fx
|
|
stopfxontag(getfx("pyroclastic_flow_1"), level.gas_cloud_origin, "tag_origin");
|
|
playfxontag(getfx("pyroclastic_flow_2"), level.gas_cloud_origin, "tag_origin");
|
|
self.onNoPoisonSide = true;
|
|
}
|
|
wait( 0.2 );
|
|
}
|
|
else
|
|
{
|
|
wait( 1.0 );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
FlickerLights()
|
|
{
|
|
FlckLgtEnts = GetScriptableArray( "stairlgt_die_3", "targetname" );
|
|
foreach ( FlckLgtEnt in FlckLgtEnts )
|
|
{
|
|
FlckLgtEnt SetScriptablePartState(0, 1);
|
|
}
|
|
|
|
FlckrLgtaEnts = GetScriptableArray( "die_2", "targetname" );
|
|
foreach ( FlckrLgtaEnt in FlckrLgtaEnts )
|
|
{
|
|
FlckrLgtaEnt SetScriptablePartState(0, 1);
|
|
}
|
|
}
|
|
|
|
KillLights()
|
|
{
|
|
//turn off light fixtures
|
|
KillLgtEnts = GetScriptableArray( "killed_lights", "targetname" );
|
|
foreach ( KillLgtEnt in KillLgtEnts )
|
|
{
|
|
wait(.1);
|
|
KillLgtEnt SetScriptablePartState(0, 1);
|
|
}
|
|
|
|
//turn on danger lighting
|
|
DangerLgtEnts = GetScriptableArray( "danger_red", "targetname" );
|
|
foreach ( DangerLgtEnt in DangerLgtEnts )
|
|
{
|
|
DangerLgtEnt SetScriptablePartState(0, 1);
|
|
}
|
|
|
|
//kill and flicker wall lights in buildings
|
|
FlckrLgtEnts = GetScriptableArray( "die", "targetname" );
|
|
foreach ( FlckrLgtEnt in FlckrLgtEnts )
|
|
{
|
|
FlckrLgtEnt SetScriptablePartState(0, 2);
|
|
wait(.1);
|
|
FlckrLgtEnt SetScriptablePartState(0, 3);
|
|
}
|
|
|
|
FlckrLgtaEnts = GetScriptableArray( "die_2", "targetname" );
|
|
foreach ( FlckrLgtaEnt in FlckrLgtaEnts )
|
|
{
|
|
FlckrLgtaEnt SetScriptablePartState(0, 3);
|
|
}
|
|
|
|
FlckLgtEnts = GetScriptableArray( "stairlgt_die_3", "targetname" );
|
|
foreach ( FlckLgtEnt in FlckLgtEnts )
|
|
{
|
|
FlckLgtEnt SetScriptablePartState(0, 3);
|
|
}
|
|
|
|
//kill rock bldg lights
|
|
StairLgtEnts = GetScriptableArray( "stairlgt_die", "targetname" );
|
|
foreach ( StairLgtEnt in StairLgtEnts )
|
|
{
|
|
wait(.1);
|
|
StairLgtEnt SetScriptablePartState(0, 1);
|
|
wait(.15);
|
|
StairLgtEnt SetScriptablePartState(0, 3);
|
|
}
|
|
|
|
//kill rock bldg lights version 2
|
|
StairLgt2Ents = GetScriptableArray( "stairlgt_die_2", "targetname" );
|
|
foreach ( StairLgt2Ent in StairLgt2Ents )
|
|
{
|
|
StairLgt2Ent SetScriptablePartState(0, 3);
|
|
wait(.2);
|
|
StairLgt2Ent SetScriptablePartState(0, 1);
|
|
}
|
|
|
|
//turn on evacuation lighting
|
|
EvacuateLgtEnts = GetScriptableArray( "evacuate_lights", "targetname" );
|
|
foreach ( EvacuateLgtEnt in EvacuateLgtEnts )
|
|
{
|
|
EvacuateLgtEnt SetScriptablePartState(0, 1);
|
|
}
|
|
|
|
EvacuatePillLgtEnts = GetScriptableArray( "evacuate_pill_lights", "targetname" );
|
|
foreach ( EvacuatePillLgtEnt in EvacuatePillLgtEnts )
|
|
{
|
|
EvacuatePillLgtEnt SetScriptablePartState(0, 1);
|
|
}
|
|
|
|
HoloLgtEnts = GetScriptableArray( "hologram_lgt", "targetname" );
|
|
foreach ( HoloLgtEnt in HoloLgtEnts )
|
|
{
|
|
HoloLgtEnt SetScriptablePartState(0, 2);
|
|
}
|
|
|
|
//turn off lights in cave and hologram light
|
|
CaveLgtEnts = GetScriptableArray( "cave_kill", "targetname" );
|
|
foreach ( CaveLgtEnt in CaveLgtEnts )
|
|
{
|
|
CaveLgtEnt SetScriptablePartState(0, 1);
|
|
wait(.2);
|
|
CaveLgtEnt SetScriptablePartState(0, 2);
|
|
}
|
|
}
|
|
|
|
|
|
boulderBarrage( duration, frequency, exploderMin, exploderMax )
|
|
{
|
|
endTime = getTime() + ( duration * 1000 );
|
|
randInt = 0;
|
|
lastInt = 0;
|
|
|
|
while( getTime() < endTime )
|
|
{
|
|
wait( randomFloatRange( ( frequency / 2 ), frequency ) );
|
|
while( randInt == 0 )
|
|
{
|
|
randInt = randomIntRange( exploderMin, exploderMax );
|
|
if ( randInt == lastInt )
|
|
randInt = 0;
|
|
else
|
|
{
|
|
lastInt = randInt;
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(randInt);
|
|
level thread maps\mp\mp_recovery_fx::setup_boulder_audio(randInt);
|
|
randInt = 0;
|
|
break;
|
|
}
|
|
wait 0.05;
|
|
}
|
|
}
|
|
}
|
|
|
|
killPlayersInCloud( duration, dmgAmount ) // self == gas cloud
|
|
{
|
|
cloud_height_z = 800;
|
|
safe_from_gas_trigger = getEnt("safe_from_gas", "targetname");
|
|
endTime = getTime() + ( duration * 1000 );
|
|
|
|
foreach( player in level.players )
|
|
player.isInGas = false;
|
|
|
|
while( getTime() < endTime )
|
|
{
|
|
foreach( player in level.players )
|
|
{
|
|
//if player's Y pos is less than gas cloud and they aren't in safe zone, kill them
|
|
playerViewOrigin = player getViewOrigin();
|
|
if( ( player.origin[1] < ( self.origin[1] - 500 ) ) && !( player isTouching( safe_from_gas_trigger ) ) )
|
|
{
|
|
player DoDamage(dmgAmount, player.origin);
|
|
//if camera is inside the cloud, set fog effect
|
|
if ( !player isUsingRemote() && ( playerViewOrigin[1] < self.origin[1] ) && ( playerViewOrigin[2] < cloud_height_z ) )
|
|
{
|
|
player SetClientTriggerVisionSet( "poison_gas", 1.5 );
|
|
player shellshock( "mp_lab_gas", 1, true, true, 0);
|
|
//player ShockThink();
|
|
}
|
|
player.isInGas = true;
|
|
}
|
|
else if ( !player isUsingRemote() )
|
|
{
|
|
if( player.isInGas == true )
|
|
{
|
|
if (player isTouching( safe_from_gas_trigger ) )
|
|
player revertVisionSetForPlayer( 1.5 );
|
|
else
|
|
player SetClientTriggerVisionSet( "mp_recovery_post", 1.5 );
|
|
//player revertVisionSetForPlayer( 0.5 );
|
|
|
|
player.isInGas = false;
|
|
}
|
|
}
|
|
}
|
|
|
|
if( level.gametype == "ctf" )
|
|
{
|
|
foreach( flag in level.teamFlags )
|
|
{
|
|
//if flag's Y pos is less than gas cloud and it isn't in safe zone, return it
|
|
if( ( flag.curOrigin[1] < self.origin[1] ) && !( flag.visuals[0] isTouching( safe_from_gas_trigger ) ) )
|
|
flag maps\mp\gametypes\ctf::returnFlag();
|
|
}
|
|
}
|
|
|
|
wait 0.25;
|
|
}
|
|
}
|
|
|
|
instantKillPlayersInCloud()
|
|
{
|
|
safe_from_gas_trigger = getEnt("safe_from_gas", "targetname");
|
|
|
|
foreach( player in level.players )
|
|
{
|
|
if( !( player isTouching( safe_from_gas_trigger ) ) )
|
|
player DoDamage(10000, player.origin);
|
|
}
|
|
}
|
|
|
|
side_b_visionset_reset()
|
|
{
|
|
level endon( "game_ended" );
|
|
level endon( "hangar_doors_closed" );
|
|
|
|
safe_from_gas_trigger = getEnt("safe_from_gas", "targetname");
|
|
while( true )
|
|
{
|
|
safe_from_gas_trigger waittill( "trigger", player );
|
|
if( IsDefined( player ) && isPlayer( player ) && !isDefined( player.safeFromGas ) )
|
|
{
|
|
player revertVisionSetForPlayer( 3.0 );
|
|
player.safeFromGas = true;
|
|
}
|
|
//else
|
|
// player.safeFromGas = undefined;
|
|
}
|
|
}
|
|
|
|
|
|
setup_poison_gas_death()
|
|
{
|
|
foreach( player in level.players )
|
|
player thread onPlayerDeath();
|
|
}
|
|
|
|
onPlayerDeath()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "disconnect" );
|
|
|
|
self waittill( "spawned" );
|
|
|
|
self revertVisionSetForPlayer( 0 );
|
|
}
|
|
|
|
ShockThink()
|
|
{
|
|
if (!isDefined(self.inGas))
|
|
{
|
|
self shellshock( "mp_lab_gas", 1);
|
|
}
|
|
}
|
|
|
|
play_event_music()
|
|
{
|
|
//self PlayLoopSound( "mp_recovery_music" );
|
|
//wait(30);
|
|
//self stopsounds();
|
|
}
|
|
|
|
play_earthquake_rumble( time )
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
|
|
frames = time*20;
|
|
|
|
while( frames >= 0 )
|
|
{
|
|
self PlayRumbleOnEntity( "damage_light" );
|
|
wait( .1 );
|
|
frames = frames - 2;
|
|
}
|
|
}
|
|
|
|
/*spawnMissileAttack2()
|
|
{
|
|
missile7Array = GetEntArray("chemical_missile7","targetname");
|
|
missile8Array = GetEntArray("chemical_missile8","targetname");
|
|
missile9Array = GetEntArray("chemical_missile9","targetname");
|
|
missile10Array = GetEntArray("chemical_missile10","targetname");
|
|
|
|
|
|
level waittill ("Missile_Wave1_ended");
|
|
|
|
IPrintLnBold ("Get inside the Hangar!");
|
|
|
|
|
|
foreach (missile7 in missile7Array)
|
|
{
|
|
missile7Origin = GetEnt( missile7.target , "targetname");
|
|
missile7 MoveTo (missile7Origin.origin, 2);
|
|
|
|
snd_play_in_space( "mp_recovery_hind_missiles_flyover_01", missile7Origin.origin);
|
|
wait (2);
|
|
snd_play_in_space( "mp_recovery_chopper_missile_hit_2", missile7Origin.origin);
|
|
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(1);
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(7);
|
|
|
|
}
|
|
|
|
foreach (missile8 in missile8Array)
|
|
{
|
|
missile8Origin = GetEnt( missile8.target , "targetname");
|
|
missile8 MoveTo (missile8Origin.origin, 3);
|
|
|
|
snd_play_in_space( "mp_recovery_hind_missiles_flyover_02", missile8Origin.origin);
|
|
wait (3);
|
|
snd_play_in_space( "mp_recovery_chopper_missile_hit_4", missile8Origin.origin);
|
|
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(2);
|
|
|
|
}
|
|
|
|
foreach (missile9 in missile9Array)
|
|
{
|
|
missile9Origin = GetEnt( missile9.target , "targetname");
|
|
missile9 MoveTo (missile9Origin.origin, 1);
|
|
|
|
snd_play_in_space( "mp_recovery_hind_missiles_flyover_02", missile9Origin.origin);
|
|
wait (1);
|
|
snd_play_in_space( "mp_recovery_chopper_missile_hit_3", missile9Origin.origin);
|
|
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(3);
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(7);
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(8);
|
|
}
|
|
|
|
foreach (missile10 in missile10Array)
|
|
{
|
|
missile10Origin = GetEnt( missile10.target , "targetname");
|
|
missile10 MoveTo (missile10Origin.origin, 3);
|
|
|
|
snd_play_in_space( "mp_recovery_hind_missiles_flyover_01", missile10Origin.origin);
|
|
wait (3);
|
|
snd_play_in_space( "mp_recovery_chopper_missile_hit_3", missile10Origin.origin);
|
|
|
|
level thread common_scripts\_exploder::activate_clientside_exploder(4);
|
|
|
|
}
|
|
|
|
|
|
IPrintLnBold ("Get inside the Hangar!");
|
|
|
|
wait (5);
|
|
|
|
IPrintLnBold ("Escape the Gas!");
|
|
|
|
wait (5);
|
|
|
|
IPrintLnBold ("Hurry!");
|
|
|
|
level notify( "Missile_Wave2_ended" );
|
|
|
|
}
|
|
|
|
DynamicDeathTriggers()
|
|
{
|
|
|
|
GasDeathtrigs_1 = GetEntArray ("deathTrig_1", "targetname");
|
|
GasDeathtrigs_2 = GetEntArray ("deathTrig_2", "targetname");
|
|
GasDeathtrigs_3 = GetEntArray ("deathTrig_3", "targetname");
|
|
|
|
foreach (trig1 in GasDeathtrigs_1)
|
|
{
|
|
trig1 DontInterpolate();
|
|
trig1.origin = trig1.origin + (0, 0, -10000);
|
|
}
|
|
|
|
foreach (trig2 in GasDeathtrigs_2)
|
|
{
|
|
trig2 DontInterpolate();
|
|
trig2.origin = trig2.origin + (0, 0, -10000);
|
|
}
|
|
|
|
foreach (trig3 in GasDeathtrigs_3)
|
|
{
|
|
trig3 DontInterpolate();
|
|
trig3.origin = trig3.origin + (0, 0, -10000);
|
|
}
|
|
|
|
level waittill( "Missile_Wave2_ended" );
|
|
level.dynamicHangarSpawns = true;
|
|
|
|
wait (5);
|
|
|
|
foreach (trig1 in GasDeathtrigs_1)
|
|
{
|
|
trig1 DontInterpolate();
|
|
trig1.origin = trig1.origin + (0, 0, 10000);
|
|
}
|
|
|
|
wait (5);
|
|
|
|
foreach (trig2 in GasDeathtrigs_2)
|
|
{
|
|
trig2 DontInterpolate();
|
|
trig2.origin = trig2.origin + (0, 0, 10000);
|
|
}
|
|
|
|
wait (5);
|
|
|
|
foreach (trig3 in GasDeathtrigs_3)
|
|
{
|
|
trig3 DontInterpolate();
|
|
trig3.origin = trig3.origin + (0, 0, 10000);
|
|
}
|
|
|
|
|
|
|
|
}*/
|
|
|
|
|
|
//SPAWNS///////////////////
|
|
///
|
|
|
|
GetListOfGoodSpawnPoints(fullListOfSpawnPoints)
|
|
{
|
|
goodpoints = [];
|
|
|
|
// Getting all neutral spawns
|
|
foreach(spawn in fullListOfSpawnPoints)
|
|
{
|
|
if( !IsDefined( spawn.targetname ) || ( spawn.targetname == "" ) )
|
|
{
|
|
goodpoints = add_to_array(goodpoints, spawn);
|
|
}
|
|
else if(spawn GetValidSpawns() == true)
|
|
{
|
|
goodpoints = add_to_array(goodpoints, spawn);
|
|
}
|
|
}
|
|
return goodpoints;
|
|
}
|
|
GetValidSpawns()
|
|
{
|
|
if(level.dynamicHangarSpawns == false)
|
|
{
|
|
if(self.targetname == "first_map_spawns")
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
else if(level.dynamicHangarSpawns == true)
|
|
{
|
|
if(self.targetname == "second_map_spawns")
|
|
{
|
|
return true;
|
|
}
|
|
}
|
|
return false;
|
|
}
|