#include maps\mp\zombies\_zm_blockers; #include common_scripts\utility; #include maps\mp\_utility; #include maps\mp\zombies\_zm_net; #include maps\mp\zombies\_zm_utility; #include maps\mp\zombies\_zm_weapons; #include maps\mp\zombies\_zm_pers_upgrades_functions; #include maps\mp\zombies\_zm_score; #include maps\mp\_demo; #include maps\mp\zombies\_zm_stats; #include maps\mp\zombies\_zm_audio; #include maps\mp\zombies\_zm_zonemgr; #include maps\mp\zombies\_zm_laststand; #include maps\mp\zombies\_zm_spawner; #include maps\mp\zombies\_zm_unitrigger; door_buy() { self waittill( "trigger", who, force ); if ( isdefined( level.custom_door_buy_check ) ) { if ( !who [[ level.custom_door_buy_check ]]( self ) ) return false; } if ( getdvarint( "zombie_unlock_all" ) > 0 || isdefined( force ) && force ) return true; if ( !who usebuttonpressed() ) return false; if ( who in_revive_trigger() ) return false; if ( is_player_valid( who ) ) { players = get_players(); cost = self.zombie_cost; if ( who maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() ) cost = who maps\mp\zombies\_zm_pers_upgrades_functions::pers_upgrade_double_points_cost( cost ); if ( self._door_open == 1 ) self.purchaser = undefined; else if ( who.score >= cost ) { who maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 ); maps\mp\_demo::bookmark( "zm_player_door", gettime(), who ); who maps\mp\zombies\_zm_stats::increment_client_stat( "doors_purchased" ); who maps\mp\zombies\_zm_stats::increment_player_stat( "doors_purchased" ); self.purchaser = who; } else { play_sound_at_pos( "no_purchase", self.origin ); if ( isdefined( level.custom_generic_deny_vo_func ) ) who thread [[ level.custom_generic_deny_vo_func ]]( 1 ); else who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "door_deny" ); return false; } } if ( isdefined( level._door_open_rumble_func ) ) who thread [[ level._door_open_rumble_func ]](); return true; } door_opened( cost, quick_close ) { if ( isdefined( self.door_is_moving ) && self.door_is_moving ) return; play_sound_at_pos( "purchase", self.origin ); self.has_been_opened = 1; all_trigs = getentarray( self.target, "target" ); self.door_is_moving = 1; foreach ( trig in all_trigs ) { trig.door_is_moving = 1; trig trigger_off(); trig.has_been_opened = 1; if ( !isdefined( trig._door_open ) || trig._door_open == 0 ) { trig._door_open = 1; trig notify( "door_opened" ); level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "door_open" ); } else trig._door_open = 0; if ( isdefined( trig.script_flag ) && trig._door_open == 1 ) { tokens = strtok( trig.script_flag, "," ); for ( i = 0; i < tokens.size; i++ ) flag_set( tokens[i] ); } else if ( isdefined( trig.script_flag ) && trig._door_open == 0 ) { tokens = strtok( trig.script_flag, "," ); for ( i = 0; i < tokens.size; i++ ) flag_clear( tokens[i] ); } if ( isdefined( quick_close ) && quick_close ) { trig set_hint_string( trig, "" ); continue; } if ( trig._door_open == 1 && flag( "door_can_close" ) ) { trig set_hint_string( trig, "default_buy_door_close" ); continue; } if ( trig._door_open == 0 ) trig set_hint_string( trig, "default_buy_door", cost ); } level notify( "door_opened" ); if ( isdefined( self.doors ) ) { is_script_model_door = 0; have_moving_clip_for_door = 0; use_blocker_clip_for_pathing = 0; foreach ( door in self.doors ) { if ( is_true( door.ignore_use_blocker_clip_for_pathing_check ) ) continue; if ( door.classname == "script_model" ) { is_script_model_door = 1; continue; } if ( door.classname == "script_brushmodel" && ( !isdefined( door.script_noteworthy ) || door.script_noteworthy != "clip" ) && ( !isdefined( door.script_string ) || door.script_string != "clip" ) ) have_moving_clip_for_door = 1; } use_blocker_clip_for_pathing = is_script_model_door && !have_moving_clip_for_door; for ( i = 0; i < self.doors.size; i++ ) { self.doors[i] thread door_activate( self.doors[i].script_transition_time, self._door_open, quick_close, use_blocker_clip_for_pathing ); } } level.active_zone_names = maps\mp\zombies\_zm_zonemgr::get_active_zone_names(); wait 1; self.door_is_moving = 0; foreach ( trig in all_trigs ) trig.door_is_moving = 0; if ( isdefined( quick_close ) && quick_close ) { for ( i = 0; i < all_trigs.size; i++ ) all_trigs[i] trigger_on(); return; } if ( flag( "door_can_close" ) ) { wait 2.0; for ( i = 0; i < all_trigs.size; i++ ) all_trigs[i] trigger_on(); } } handle_post_board_repair_rewards( cost, zbarrier ) { self maps\mp\zombies\_zm_stats::increment_client_stat( "boards" ); self maps\mp\zombies\_zm_stats::increment_player_stat( "boards" ); if ( isDefined( self.pers[ "boards" ] ) && ( self.pers[ "boards" ] % 10 ) == 0 ) { self thread do_player_general_vox( "general", "reboard", 90 ); } self maps\mp\zombies\_zm_pers_upgrades_functions::pers_boards_updated( zbarrier ); self.rebuild_barrier_reward += cost; self maps\mp\zombies\_zm_score::player_add_points( "rebuild_board", cost ); self play_sound_on_ent( "purchase" ); if ( isDefined( self.board_repair ) ) { self.board_repair += 1; } } player_fails_blocker_repair_trigger_preamble( player, players, trigger, hold_required ) { if ( !isdefined( trigger ) ) return true; if ( !is_player_valid( player ) ) return true; if ( players.size == 1 && isdefined( players[0].intermission ) && players[0].intermission == 1 ) return true; if ( hold_required && !player usebuttonpressed() ) return true; if ( !hold_required && !player use_button_held() ) return true; if ( player in_revive_trigger() ) return true; if ( player issprinting() || player isthrowinggrenade() ) return true; return false; }