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_buried_sq_ip.gsc

143 lines
3.8 KiB
Plaintext

#include maps\mp\zm_buried_sq_ip;
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_buried_sq;
#include maps\mp\zombies\_zm_zonemgr;
init()
{
flag_init( "sq_ip_puzzle_complete" );
level.sq_bp_buttons = [];
s_lightboard = getstruct( "zm_sq_lightboard", "targetname" );
s_lightboard sq_bp_spawn_board();
declare_sidequest_stage( "sq", "ip", ::init_stage, ::stage_logic, ::exit_stage );
}
stage_logic()
{
if ( flag( "sq_is_max_tower_built" ) )
{
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
array_thread( a_button_structs, ::sq_bp_spawn_trigger );
m_lightboard = getent( "sq_bp_board", "targetname" );
m_lightboard setclientfield( "buried_sq_bp_set_lightboard", 1 );
while ( !flag( "sq_ip_puzzle_complete" ) )
{
sq_bp_start_puzzle_lights();
sq_bp_delete_green_lights();
wait_network_frame();
wait_network_frame();
wait_network_frame();
wait_network_frame();
wait_network_frame();
}
}
else
{
sq_ml_spawn_levers();
a_levers = getentarray( "sq_ml_lever", "targetname" );
array_thread( a_levers, ::sq_ml_spawn_trigger );
level thread sq_ml_puzzle_logic();
flag_wait( "sq_ip_puzzle_complete" );
}
wait_network_frame();
stage_completed( "sq", level._cur_stage_name );
}
sq_bp_start_puzzle_lights()
{
level endon( "sq_bp_wrong_button" );
level endon( "sq_bp_timeout" );
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
a_tags = [];
foreach ( m_button in a_button_structs )
a_tags[a_tags.size] = m_button.script_string;
a_tags = array_randomize( a_tags );
m_lightboard = getent( "sq_bp_board", "targetname" );
foreach ( str_tag in a_tags )
{
level waittill( "sq_bp_correct_button" );
}
flag_set( "sq_ip_puzzle_complete" );
a_button_structs = getstructarray( "sq_bp_button", "targetname" );
foreach ( s_button in a_button_structs )
{
if ( isdefined( s_button.trig ) )
s_button.trig delete();
}
}
sq_bp_spawn_trigger()
{
level endon( "sq_ip_puzzle_complete" );
self.trig = spawn( "trigger_radius_use", self.origin, 0, 16, 16 );
self.trig setcursorhint( "HINT_NOICON" );
self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" );
self.trig triggerignoreteam();
self.trig usetriggerrequirelookat();
while ( true )
{
self.trig waittill( "trigger" );
self.trig sethintstring( "" );
level thread sq_bp_button_pressed( self.script_string, self.trig );
wait 1;
self.trig sethintstring( &"ZM_BURIED_SQ_BUT_U" );
}
}
sq_bp_button_pressed( str_tag, trig )
{
trig playsound( "zmb_sq_bell_yes" );
if ( is_true( trig.triggered ) )
{
return;
}
trig.triggered = 1;
sq_bp_light_on( str_tag, "green" );
level notify( "sq_bp_correct_button" );
}
sq_ml_puzzle_logic()
{
a_levers = getentarray( "sq_ml_lever", "targetname" );
level.sq_ml_curr_lever = 0;
a_levers = array_randomize( a_levers );
for ( i = 0; i < a_levers.size; i++ )
a_levers[i].n_lever_order = i;
while ( true )
{
level.sq_ml_curr_lever = 0;
sq_ml_puzzle_wait_for_levers();
n_correct = 0;
foreach ( m_lever in a_levers )
{
playfxontag( level._effect["sq_spark"], m_lever, "tag_origin" );
n_correct++;
m_lever playsound( "zmb_sq_maze_correct_spark" );
}
if ( n_correct == a_levers.size )
flag_set( "sq_ip_puzzle_complete" );
level waittill( "zm_buried_maze_changed" );
level notify( "sq_ml_reset_levers" );
wait 1;
}
}