Files
Recompilable-gscs-for-BO2-z…/zm_transit_patch/maps/mp/zm_transit_power.gsc
2020-08-30 17:40:45 -07:00

584 lines
14 KiB
Plaintext

#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_perks;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_stats;
#include maps/mp/_visionset_mgr;
#include maps/mp/zm_transit_utility;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
initializepower()
{
level thread electricswitch();
level thread powerevent();
registerclientfield( "toplayer", "power_rumble", 1, 1, "int" );
if ( !isDefined( level.vsmgr_prio_visionset_zm_transit_power_high_low ) )
{
level.vsmgr_prio_visionset_zm_transit_power_high_low = 20;
}
maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_power_high_low", 1, level.vsmgr_prio_visionset_zm_transit_power_high_low, 7, 1, ::vsmgr_lerp_power_up_down, 0 );
}
precache_models()
{
}
elecswitchbuildable()
{
lever = getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" );
hand = getent( "powerswitch_p6_zm_buildable_pswitch_hand", "targetname" );
hand linkto( lever );
hand hide();
getent( "powerswitch_p6_zm_buildable_pswitch_body", "targetname" ) hide();
lever hide();
wait_for_buildable( "powerswitch" );
}
electricswitch()
{
flag_init( "switches_on" );
level thread wait_for_power();
trig = getent( "powerswitch_buildable_trigger_power", "targetname" );
trig setinvisibletoall();
elecswitchbuildable();
master_switch = getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" );
while ( 1 )
{
trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH" );
trig setvisibletoall();
trig waittill( "trigger", user );
trig setinvisibletoall();
master_switch rotateroll( -90, 0,3 );
master_switch playsound( "zmb_switch_flip" );
master_switch waittill( "rotatedone" );
playfx( level._effect[ "switch_sparks" ], getstruct( "elec_switch_fx", "targetname" ).origin );
master_switch playsound( "zmb_turn_on" );
level.power_event_in_progress = 1;
level thread power_event_rumble_and_quake();
flag_set( "switches_on" );
clientnotify( "pwr" );
level thread avogadro_show_vox( user );
level waittill( "power_event_complete" );
clientnotify( "pwr" );
flag_set( "power_on" );
level.power_event_in_progress = 0;
level thread bus_station_pa_vox();
if ( isDefined( user ) )
{
user maps/mp/zombies/_zm_stats::increment_client_stat( "power_turnedon", 0 );
user maps/mp/zombies/_zm_stats::increment_player_stat( "power_turnedon" );
}
trig sethintstring( &"ZOMBIE_ELECTRIC_SWITCH_OFF" );
trig setvisibletoall();
trig waittill( "trigger", user );
trig setinvisibletoall();
master_switch rotateroll( 90, 0,3 );
master_switch playsound( "zmb_switch_flip" );
master_switch waittill( "rotatedone" );
level.power_event_in_progress = 1;
level thread power_event_rumble_and_quake();
flag_clear( "switches_on" );
level waittill( "power_event_complete" );
clientnotify( "pwo" );
flag_clear( "power_on" );
level.power_event_in_progress = 0;
level.power_cycled = 1;
if ( isDefined( user ) )
{
user maps/mp/zombies/_zm_stats::increment_client_stat( "power_turnedoff", 0 );
user maps/mp/zombies/_zm_stats::increment_player_stat( "power_turnedoff" );
}
}
}
vsmgr_lerp_power_up_down( player, opt_param_1, opt_param_2 )
{
self vsmgr_set_state_active( player, opt_param_1 );
}
power_event_vision_set_post_event()
{
self endon( "end_vision_set_power" );
level endon( "end_game" );
self endon( "disconnect" );
if ( flag( "power_on" ) )
{
return;
}
level waittill( "power_event_complete" );
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, 0 );
}
power_event_vision_set()
{
self endon( "end_vision_set_power" );
level endon( "end_game" );
level endon( "power_event_complete" );
self endon( "disconnect" );
if ( flag( "power_on" ) )
{
return;
}
duration = 2;
startgoal = 1;
endgoal = 0;
self power_event_vision_set_lerp( duration, startgoal, endgoal );
while ( 1 )
{
if ( randomint( 100 ) > 50 )
{
duration = randomintrange( 2, 6 ) / 5;
startgoal = endgoal;
if ( startgoal > 0,6 )
{
endgoal = randomfloatrange( 0, 0,5 );
}
else
{
endgoal = 1;
}
self power_event_vision_set_lerp( duration, startgoal, endgoal );
}
else if ( randomint( 100 ) > 75 )
{
x = 2;
while ( x > 0 )
{
duration = 0,2;
startgoal = endgoal;
if ( startgoal > 0,6 )
{
endgoal = 0;
}
else
{
endgoal = 1;
}
self power_event_vision_set_lerp( duration, startgoal, endgoal );
x--;
}
}
else duration = 0,4;
startgoal = endgoal;
if ( startgoal > 0,6 )
{
endgoal = randomfloatrange( 0, 0,5 );
}
else
{
endgoal = randomfloatrange( 0,5, 1 );
}
self power_event_vision_set_lerp( duration, startgoal, endgoal );
wait 0,05;
}
}
power_event_vision_set_lerp( duration, startgoal, endgoal )
{
self endon( "end_vision_set_power" );
level endon( "end_game" );
level endon( "power_event_complete" );
self endon( "disconnect" );
incs = int( duration / 0,05 );
if ( incs == 0 )
{
incs = 1;
}
incsgoal = ( endgoal - startgoal ) / incs;
currentgoal = startgoal;
i = 0;
while ( i < incs )
{
currentgoal += incsgoal;
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, currentgoal );
wait 0,05;
i++;
}
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_power_high_low", self, endgoal );
}
power_event_rumble_and_quake( power_on )
{
level endon( "end_game" );
while ( isDefined( level.power_event_in_progress ) && level.power_event_in_progress )
{
players = get_players();
_a284 = players;
_k284 = getFirstArrayKey( _a284 );
while ( isDefined( _k284 ) )
{
player = _a284[ _k284 ];
if ( !is_player_valid( player ) )
{
}
else if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) )
{
if ( isDefined( player.power_rumble_active ) && !player.power_rumble_active )
{
player thread power_event_rumble_and_quake_player();
}
}
else
{
if ( isDefined( player.power_rumble_active ) && player.power_rumble_active )
{
player setclientfieldtoplayer( "power_rumble", 0 );
player.power_rumble_active = 0;
}
}
_k284 = getNextArrayKey( _a284, _k284 );
}
wait 1;
}
players = get_players();
_a311 = players;
_k311 = getFirstArrayKey( _a311 );
while ( isDefined( _k311 ) )
{
player = _a311[ _k311 ];
player setclientfieldtoplayer( "power_rumble", 0 );
player notify( "end_vision_set_power" );
maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_power_high_low", player );
_k311 = getNextArrayKey( _a311, _k311 );
}
}
power_event_rumble_and_quake_player()
{
self endon( "disconnect" );
self.power_rumble_active = 1;
self setclientfieldtoplayer( "power_rumble", 1 );
self thread power_event_vision_set();
self thread power_event_vision_set_post_event();
while ( !self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) && self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) && isDefined( level.power_event_in_progress ) && level.power_event_in_progress )
{
wait 1;
}
self.power_rumble_active = 0;
self notify( "end_vision_set_power" );
self setclientfieldtoplayer( "power_rumble", 0 );
}
avogadroreleasefromchamberevent()
{
exploder( 500 );
level.zones[ "zone_prr" ].is_spawning_allowed = 0;
level.zones[ "zone_pcr" ].is_spawning_allowed = 0;
level thread killzombiesinpowerstation();
while ( !flag( "power_on" ) )
{
waittime = randomfloatrange( 1,5, 4,5 );
players = get_players();
_a354 = players;
_k354 = getFirstArrayKey( _a354 );
while ( isDefined( _k354 ) )
{
player = _a354[ _k354 ];
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) )
{
player setelectrified( waittime - 1 );
player shellshock( "electrocution", waittime );
wait 0,05;
}
_k354 = getNextArrayKey( _a354, _k354 );
}
waittime += 1,5;
level waittill_notify_or_timeout( "power_on", waittime );
}
players = get_players();
_a372 = players;
_k372 = getFirstArrayKey( _a372 );
while ( isDefined( _k372 ) )
{
player = _a372[ _k372 ];
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) )
{
player setelectrified( 0,25 );
player shellshock( "electrocution", 1,5 );
wait 0,05;
}
_k372 = getNextArrayKey( _a372, _k372 );
}
level.zones[ "zone_prr" ].is_spawning_allowed = 1;
level.zones[ "zone_pcr" ].is_spawning_allowed = 1;
stop_exploder( 500 );
}
killzombiesinpowerstation()
{
level endon( "power_on" );
radiussq = 122500;
while ( 1 )
{
zombies = getaiarray( level.zombie_team );
_a401 = zombies;
_k401 = getFirstArrayKey( _a401 );
while ( isDefined( _k401 ) )
{
zombie = _a401[ _k401 ];
if ( !isDefined( zombie ) )
{
}
else if ( isDefined( zombie.is_avogadro ) && zombie.is_avogadro )
{
}
else
{
if ( distancesquared( ( 11344, 7590, -729 ), zombie.origin ) < radiussq )
{
break;
}
else
{
if ( isDefined( zombie ) || zombie maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) && isDefined( zombie.zone_name ) && zombie.zone_name == "zone_prr" )
{
if ( isDefined( zombie.has_been_damaged_by_player ) && !zombie.has_been_damaged_by_player )
{
level.zombie_total++;
}
zombie dodamage( zombie.health + 100, zombie.origin );
wait randomfloatrange( 0,05, 0,15 );
}
}
}
_k401 = getNextArrayKey( _a401, _k401 );
}
wait 1;
}
}
wait_for_power()
{
while ( 1 )
{
flag_wait( "power_on" );
maps/mp/zombies/_zm_perks::perk_unpause_all_perks();
wait_network_frame();
level setclientfield( "zombie_power_on", 1 );
enable_morse_code();
raisepowerplantgates();
flag_waitopen( "power_on" );
level setclientfield( "zombie_power_on", 0 );
disable_morse_code();
}
}
raisepowerplantgates()
{
gate1 = [];
gate2 = [];
gate1 = getentarray( "security_booth_gate", "targetname" );
gate2 = getentarray( "security_booth_gate_2", "targetname" );
while ( isDefined( gate1 ) )
{
i = 0;
while ( i < gate1.size )
{
gate1[ i ] thread raisegate( -90 );
i++;
}
}
while ( isDefined( gate2 ) )
{
i = 0;
while ( i < gate2.size )
{
gate2[ i ] thread raisegate( 90 );
i++;
}
}
level.the_bus notify( "OnPowerOn" );
}
raisegate( degrees )
{
self rotatepitch( degrees, 4 );
}
powerevent()
{
reactor_core_mover = getent( "core_mover", "targetname" );
reactor_core_audio = spawn( "script_origin", reactor_core_mover.origin );
if ( !isDefined( reactor_core_mover ) )
{
return;
}
thread blockstairs();
thread linkentitiestocoremover( reactor_core_mover );
while ( 1 )
{
flag_wait( "switches_on" );
thread dropreactordoors();
thread raisereactordoors();
power_event_time = 30;
reactor_core_mover playsound( "zmb_power_rise_start" );
reactor_core_mover playloopsound( "zmb_power_rise_loop", 0,75 );
reactor_core_mover thread coremove( power_event_time );
if ( isDefined( level.avogadro ) && isDefined( level.avogadro.state ) && level.avogadro.state == "chamber" )
{
level thread avogadroreleasefromchamberevent();
}
wait power_event_time;
reactor_core_mover stoploopsound( 0,5 );
reactor_core_audio playloopsound( "zmb_power_on_loop", 2 );
reactor_core_mover playsound( "zmb_power_rise_stop" );
level notify( "power_event_complete" );
flag_waitopen( "switches_on" );
thread dropreactordoors();
thread raisereactordoors();
playsoundatposition( "zmb_power_off_quad", ( 0, 0, 0 ) );
reactor_core_mover playsound( "zmb_power_rise_start" );
reactor_core_mover playloopsound( "zmb_power_rise_loop", 0,75 );
reactor_core_mover thread coremove( power_event_time, 1 );
wait power_event_time;
reactor_core_mover stoploopsound( 0,5 );
reactor_core_audio stoploopsound( 0,5 );
reactor_core_mover playsound( "zmb_power_rise_stop" );
level notify( "power_event_complete" );
}
}
corerotate( time )
{
self rotateyaw( 180, time );
}
coremove( time, down )
{
if ( isDefined( down ) && down )
{
self movez( -160, time );
}
else
{
self movez( 160, time );
}
}
blockstairs()
{
stairs_blocker = getent( "reactor_core_stairs_blocker", "targetname" );
if ( !isDefined( stairs_blocker ) )
{
return;
}
stairs_blocker movez( -128, 1 );
}
linkentitiestocoremover( reactor_core_mover )
{
core_entities = getentarray( "core_entity", "script_noteworthy" );
i = 0;
while ( i < core_entities.size )
{
next_ent = core_entities[ i ];
if ( next_ent.classname == "trigger_use_touch" )
{
next_ent enablelinkto();
}
next_ent linkto( reactor_core_mover, "tag_origin" );
i++;
}
}
dropreactordoors()
{
doors = getentarray( "reactor_core_door", "targetname" );
if ( doors.size == 0 )
{
return;
}
i = 0;
while ( i < doors.size )
{
next_door = doors[ i ];
next_door movez( -128, 1 );
next_door disconnectpaths();
i++;
}
}
raisereactordoors()
{
level waittill( "power_event_complete" );
doors = getentarray( "reactor_core_door", "targetname" );
if ( doors.size == 0 )
{
return;
}
i = 0;
while ( i < doors.size )
{
next_door = doors[ i ];
next_door movez( 128, 1 );
next_door connectpaths();
i++;
}
}
avogadro_show_vox( user )
{
wait 1;
if ( isDefined( user ) )
{
user thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "power", "power_on" );
}
wait 8;
players = get_players();
players = array_randomize( players );
_a655 = players;
_k655 = getFirstArrayKey( _a655 );
while ( isDefined( _k655 ) )
{
player = _a655[ _k655 ];
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) )
{
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "power", "power_core" );
break;
}
else
{
_k655 = getNextArrayKey( _a655, _k655 );
}
}
wait 15;
players = get_players();
players = array_randomize( players );
_a668 = players;
_k668 = getFirstArrayKey( _a668 );
while ( isDefined( _k668 ) )
{
player = _a668[ _k668 ];
if ( player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_prr", 1 ) || player maps/mp/zombies/_zm_zonemgr::entity_in_zone( "zone_pcr", 1 ) )
{
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "avogadro_reveal" );
return;
}
else
{
_k668 = getNextArrayKey( _a668, _k668 );
}
}
}
bus_station_pa_vox()
{
level endon( "power_off" );
while ( 1 )
{
level.station_pa_vox = array_randomize( level.station_pa_vox );
_a686 = level.station_pa_vox;
_k686 = getFirstArrayKey( _a686 );
while ( isDefined( _k686 ) )
{
line = _a686[ _k686 ];
playsoundatposition( line, ( -6848, 5056, 56 ) );
wait randomintrange( 12, 15 );
_k686 = getNextArrayKey( _a686, _k686 );
}
wait 1;
}
}