1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-10 07:08:06 -05:00
Files
BO2-Reimagined/scripts/zm/replaced/zm_highrise_sq.gsc

218 lines
6.4 KiB
Plaintext

#include maps\mp\zm_highrise_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_highrise_sq_atd;
#include maps\mp\zm_highrise_sq_slb;
#include maps\mp\zm_highrise_sq_ssp;
#include maps\mp\zm_highrise_sq_pts;
#include maps\mp\gametypes_zm\_globallogic_score;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_buildables;
#include maps\mp\zombies\_zm_unitrigger;
#include maps\mp\zombies\_zm_perks;
init()
{
if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
{
sq_easy_cleanup();
return;
}
flag_init( "sq_disabled" );
flag_init( "sq_branch_complete" );
flag_init( "sq_tower_active" );
flag_init( "sq_player_has_sniper" );
flag_init( "sq_player_has_ballistic" );
flag_init( "sq_ric_tower_complete" );
flag_init( "sq_max_tower_complete" );
flag_init( "sq_players_out_of_sync" );
flag_init( "sq_ball_picked_up" );
register_map_navcard( "navcard_held_zm_highrise", "navcard_held_zm_transit" );
ss_buttons = getentarray( "sq_ss_button", "targetname" );
for ( i = 0; i < ss_buttons.size; i++ )
{
ss_buttons[i] usetriggerrequirelookat();
ss_buttons[i] sethintstring( "" );
ss_buttons[i] setcursorhint( "HINT_NOICON" );
}
level thread mahjong_tiles_setup();
flag_init( "sq_nav_built" );
declare_sidequest( "sq", ::init_sidequest, ::sidequest_logic, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete );
maps\mp\zm_highrise_sq_atd::init();
maps\mp\zm_highrise_sq_slb::init();
declare_sidequest( "sq_1", ::init_sidequest_1, ::sidequest_logic_1, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete );
maps\mp\zm_highrise_sq_ssp::init_1();
maps\mp\zm_highrise_sq_pts::init_1();
declare_sidequest( "sq_2", ::init_sidequest_2, ::sidequest_logic_2, ::complete_sidequest, ::generic_stage_start, ::generic_stage_complete );
maps\mp\zm_highrise_sq_ssp::init_2();
maps\mp\zm_highrise_sq_pts::init_2();
level thread init_navcard();
level thread init_navcomputer();
precache_sidequest_assets();
}
sidequest_logic()
{
level thread watch_nav_computer_built();
level thread navcomputer_waitfor_navcard();
flag_wait( "power_on" );
level thread vo_richtofen_power_on();
flag_wait( "sq_nav_built" );
if ( !is_true( level.navcomputer_spawned ) )
update_sidequest_stats( "sq_highrise_started" );
stage_start( "sq", "atd" );
level waittill( "sq_atd_over" );
stage_start( "sq", "slb" );
level waittill( "sq_slb_over" );
if ( !is_true( level.richcompleted ) )
level thread sidequest_start( "sq_1" );
if ( !is_true( level.maxcompleted ) )
level thread sidequest_start( "sq_2" );
flag_wait( "sq_branch_complete" );
tower_punch_watcher();
if ( flag( "sq_ric_tower_complete" ) )
update_sidequest_stats( "sq_highrise_rich_complete" );
else if ( flag( "sq_max_tower_complete" ) )
update_sidequest_stats( "sq_highrise_maxis_complete" );
}
tower_punch_watcher()
{
level thread playtoweraudio();
a_leg_trigs = [];
foreach ( str_wind in level.a_wind_order )
a_leg_trigs[a_leg_trigs.size] = "sq_tower_" + str_wind;
level.n_cur_leg = 0;
level.sq_leg_punches = 0;
foreach ( str_leg in a_leg_trigs )
{
t_leg = getent( str_leg, "script_noteworthy" );
t_leg thread tower_punch_watch_leg( a_leg_trigs );
}
flag_wait( "sq_tower_active" );
if ( flag( "sq_ric_tower_complete" ) )
{
exploder_stop( 1002 );
exploder_stop( 903 );
exploder( 1003 );
}
else
{
exploder_stop( 902 );
exploder_stop( 1003 );
exploder( 903 );
}
wait 1;
level thread tower_in_sync_lightning();
wait 1;
level thread sq_give_all_perks();
}
tower_punch_watch_leg( a_leg_trigs )
{
level.legs_hit = [];
while ( !flag( "sq_tower_active" ) )
{
self waittill( "trigger", who );
if ( !isinarray( level.legs_hit, self.script_noteworthy ) && isplayer( who ) && ( who.current_melee_weapon == "tazer_knuckles_zm" || who.current_melee_weapon == "tazer_knuckles_upgraded_zm" ) )
{
level.legs_hit[level.legs_hit.size] = self.script_noteworthy;
self playsound( "zmb_sq_leg_powerup_" + level.legs_hit.size );
if ( level.legs_hit.size == 4 )
flag_set( "sq_tower_active" );
return;
}
}
}
sq_give_all_perks()
{
vending_triggers = getentarray( "zombie_vending", "targetname" );
perks = [];
for ( i = 0; i < vending_triggers.size; i++ )
{
perk = vending_triggers[i].script_noteworthy;
if ( perk == "specialty_weapupgrade" )
continue;
perks[perks.size] = perk;
}
if ( flag( "sq_ric_tower_complete" ) )
{
v_fireball_start_loc = ( 1946, 608, 3338 );
n_fireball_exploder = 1001;
}
else
{
v_fireball_start_loc = ( 1068, -1362, 3340.5 );
n_fireball_exploder = 901;
}
level thread scripts\zm\replaced\_zm_sq::sq_complete_time_hud();
players = getplayers();
foreach ( player in players )
{
player thread sq_give_player_perks( perks, v_fireball_start_loc, n_fireball_exploder );
level waittill( "sq_fireball_hit_player" );
}
}
sq_give_player_perks( perks, v_fireball_start_loc, n_fireball_exploder )
{
self endon("disconnect");
exploder( n_fireball_exploder );
m_fireball = spawn( "script_model", v_fireball_start_loc );
m_fireball setmodel( "tag_origin" );
playfxontag( level._effect["sidequest_dragon_fireball_max"], m_fireball, "tag_origin" );
do
{
wait_network_frame();
v_to_player = vectornormalize( self gettagorigin( "J_SpineLower" ) - m_fireball.origin );
v_move_spot = m_fireball.origin + v_to_player * 48;
m_fireball.origin = v_move_spot;
}
while ( distancesquared( m_fireball.origin, self gettagorigin( "J_SpineLower" ) ) > 2304 );
m_fireball.origin = self gettagorigin( "J_SpineLower" );
m_fireball linkto( self, "J_SpineLower" );
wait 1.5;
playfx( level._effect["sidequest_flash"], m_fireball.origin );
m_fireball delete();
level notify( "sq_fireball_hit_player" );
if ( is_player_valid( self ) )
{
self thread scripts\zm\replaced\_zm_sq::sq_give_player_all_perks();
}
}