1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-10 15:17:57 -05:00
Files
BO2-Reimagined/scripts/zm/replaced/zm_transit_sq.gsc

315 lines
10 KiB
Plaintext

#include maps\mp\zm_transit_sq;
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_transit_utility;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\gametypes_zm\_globallogic_score;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_powerups;
#include maps\mp\zombies\_zm_buildables;
#include maps\mp\zombies\_zm_unitrigger;
maxis_sidequest_a()
{
level endon( "power_on" );
level.sq_progress["maxis"]["A_turbine_1"] = undefined;
level.sq_progress["maxis"]["A_turbine_2"] = undefined;
if ( !( isdefined( level.sq_progress["maxis"]["B_complete"] ) && level.sq_progress["maxis"]["B_complete"] ) )
level.sq_progress["maxis"]["A_complete"] = 0;
while ( true )
{
players = get_players();
foreach ( player in players )
{
if ( isdefined( player.buildableturbine ) && player.buildableturbine istouching( level.sq_volume ) )
{
level notify( "maxi_terminal_vox" );
player.buildableturbine thread turbine_watch_cleanup();
if ( !isdefined( level.sq_progress["maxis"]["A_turbine_1"] ) )
{
level.sq_progress["maxis"]["A_turbine_1"] = player.buildableturbine;
level.sq_progress["maxis"]["A_turbine_1"] thread turbine_power_watcher( player );
continue;
}
if ( !isdefined( level.sq_progress["maxis"]["A_turbine_2"] ) )
{
level.sq_progress["maxis"]["A_turbine_2"] = player.buildableturbine;
level.sq_progress["maxis"]["A_turbine_2"] thread turbine_power_watcher( player );
}
}
}
if ( get_how_many_progressed_from( "maxis", "A_turbine_1", "A_turbine_2" ) >= 1 )
{
if ( avogadro_at_tower() )
level thread maxissay( "vox_maxi_turbine_2tower_avo_0", ( 7737, -416, -142 ) );
else
level thread maxissay( "vox_maxi_turbine_2tower_0", ( 7737, -416, -142 ) );
update_sidequest_stats( "sq_transit_maxis_stage_2" );
level thread maxis_sidequest_complete_check( "A_complete" );
}
level waittill_either( "turbine_deployed", "equip_turbine_zm_cleaned_up" );
if ( !level.sq_progress["maxis"]["B_complete"] )
level.sq_progress["maxis"]["A_complete"] = 0;
else
break;
}
}
turbine_power_watcher( player )
{
level endon( "end_avogadro_turbines" );
self endon( "death" );
self.powered = undefined;
turbine_failed_vo = undefined;
while ( isdefined( self ) )
{
wait 0.05;
if ( is_true( player.turbine_power_is_on ) && !is_true( player.turbine_emped ) )
{
self.powered = 1;
}
else if ( is_true( player.turbine_emped ) || !is_true( player.turbine_power_is_on ) )
{
wait 2;
self.powered = 0;
}
}
}
maxis_sidequest_b()
{
level endon( "power_on" );
while ( true )
{
level waittill( "stun_avogadro", avogadro );
if ( ( isdefined( level.sq_progress["maxis"]["A_turbine_1"] ) && is_true( level.sq_progress["maxis"]["A_turbine_1"].powered ) ) || ( isdefined( level.sq_progress["maxis"]["A_turbine_2"] ) && is_true( level.sq_progress["maxis"]["A_turbine_2"].powered ) ) )
{
if ( isdefined( avogadro ) && avogadro istouching( level.sq_volume ) )
{
level notify( "end_avogadro_turbines" );
break;
}
}
}
level notify( "maxis_stage_b" );
level thread maxissay( "vox_maxi_avogadro_emp_0", ( 7737, -416, -142 ) );
update_sidequest_stats( "sq_transit_maxis_stage_3" );
player = get_players();
player[0] setclientfield( "sq_tower_sparks", 1 );
player[0] setclientfield( "screecher_maxis_lights", 1 );
level thread maxis_sidequest_complete_check( "B_complete" );
}
maxis_sidequest_c()
{
flag_wait( "power_on" );
flag_waitopen( "power_on" );
level endon( "power_on" );
level.sq_progress["maxis"]["C_screecher_dark"] = 0;
for(i = 0; i < 8; i++)
{
level.sq_progress["maxis"]["C_screecher_" + i] = undefined;
}
level.sq_progress["maxis"]["C_complete"] = 0;
turbine_1_talked = 0;
turbine_2_talked = 0;
screech_zones = getstructarray( "screecher_escape", "targetname" );
while ( true )
{
players = get_players();
foreach ( player in players )
{
if ( isdefined( player.buildableturbine ) )
{
for ( x = 0; x < screech_zones.size; x++ )
{
zone = screech_zones[x];
if ( distancesquared( player.buildableturbine.origin, zone.origin ) < zone.radius * zone.radius )
{
player.buildableturbine thread turbine_watch_cleanup();
zone_used = 0;
for(i = 0; i < 8; i++)
{
if ( isdefined( level.sq_progress["maxis"]["C_screecher_" + i] ) && zone == level.sq_progress["maxis"]["C_screecher_" + i] )
{
zone_used = 1;
break;
}
}
if ( !zone_used )
{
if ( level.sq_progress["maxis"]["B_complete"] && level.sq_progress["maxis"]["A_complete"] )
{
if ( !turbine_1_talked )
{
turbine_1_talked = 1;
level thread maxissay( "vox_maxi_turbine_1light_0", zone.origin );
}
level thread set_screecher_zone_origin_and_notify( zone.script_noteworthy, "sq_max" );
level.sq_progress["maxis"]["C_screecher_" + level.sq_progress["maxis"]["C_screecher_dark"]] = zone;
level.sq_progress["maxis"]["C_screecher_dark"]++;
if ( level.sq_progress["maxis"]["C_screecher_dark"] >= 8 )
{
if ( !turbine_2_talked )
{
turbine_2_talked = 1;
level thread maxissay( "vox_maxi_turbine_2light_on_0", zone.origin );
}
player = get_players();
player[0] setclientfield( "screecher_maxis_lights", 0 );
level maxis_sidequest_complete_check( "C_complete" );
return;
}
}
}
continue;
}
}
}
}
level waittill_either( "turbine_deployed", "equip_turbine_zm_cleaned_up" );
level.sq_progress["maxis"]["C_complete"] = 0;
}
}
maxis_sidequest_complete()
{
update_sidequest_stats( "sq_transit_maxis_complete" );
level sidequest_complete( "maxis" );
level.sq_progress["maxis"]["FINISHED"] = 1;
level.maxcompleted = 1;
clientnotify( "sq_kfx" );
if ( isdefined( level.richcompleted ) && level.richcompleted )
level clientnotify( "sq_krt" );
wait 1;
clientnotify( "sqm" );
level thread droppowerup( "maxis" );
}
richtofen_sidequest_c()
{
level endon( "power_off" );
level endon( "richtofen_sq_complete" );
screech_zones = getstructarray( "screecher_escape", "targetname" );
level thread screecher_light_hint();
level.sq_richtofen_c_screecher_lights = [];
while ( true )
{
level waittill( "safety_light_power_off", screecher_zone );
if ( !level.sq_progress["rich"]["A_complete"] || !level.sq_progress["rich"]["B_complete"] )
{
level thread richtofensay( "vox_zmba_sidequest_emp_nomag_0" );
continue;
}
if ( isinarray( level.sq_richtofen_c_screecher_lights, screecher_zone.target.script_noteworthy ) )
{
continue;
}
level thread set_screecher_zone_origin_and_notify( screecher_zone.target.script_noteworthy, "sq_rich" );
level.sq_richtofen_c_screecher_lights[level.sq_richtofen_c_screecher_lights.size] = screecher_zone.target.script_noteworthy;
level.sq_progress["rich"]["C_screecher_light"]++;
if ( level.sq_progress["rich"]["C_screecher_light"] >= 8 )
break;
}
level thread richtofensay( "vox_zmba_sidequest_4emp_mag_0" );
level notify( "richtofen_c_complete" );
player = get_players();
player[0] setclientfield( "screecher_sq_lights", 0 );
level thread richtofen_sidequest_complete_check( "C_complete" );
}
richtofen_sidequest_complete()
{
update_sidequest_stats( "sq_transit_rich_complete" );
level thread sidequest_complete( "richtofen" );
level.sq_progress["rich"]["FINISHED"] = 1;
level.richcompleted = 1;
clientnotify( "sq_kfx" );
if ( isdefined( level.maxcompleted ) && level.maxcompleted )
level clientnotify( "sq_kmt" );
wait 1;
clientnotify( "sqr" );
level thread droppowerup( "richtofen" );
}
set_screecher_zone_origin_and_notify( script_noteworthy, notify_str )
{
level set_screecher_zone_origin( script_noteworthy );
wait 1;
clientnotify( notify_str );
}
droppowerup( story )
{
level thread scripts\zm\replaced\_zm_sq::sq_complete_time_hud();
players = get_players();
foreach ( player in players )
{
if ( is_player_valid( player ) )
{
player thread scripts\zm\replaced\_zm_sq::sq_give_player_all_perks();
}
}
center_struct = getstruct( "sq_common_tower_fx", "targetname" );
trace = bullettrace( center_struct.origin, center_struct.origin - vectorscale( ( 0, 0, 1 ), 999999.0 ), 0, undefined );
poweruporigin = trace["position"] + vectorscale( ( 0, 0, 1 ), 25.0 );
mintime = 120;
maxtime = 360;
while ( true )
{
trail = spawn( "script_model", center_struct.origin );
trail setmodel( "tag_origin" );
wait 0.5;
playfxontag( level._effect[story + "_sparks"], trail, "tag_origin" );
trail moveto( poweruporigin, 10 );
trail waittill( "movedone" );
level thread droppoweruptemptation( story, poweruporigin );
wait 1;
trail delete();
wait( randomintrange( mintime, maxtime ) );
}
}