#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; } }