mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-10 10:47:58 -05:00
584 lines
14 KiB
Plaintext
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;
|
|
}
|
|
}
|