#include maps\mp\zombies\_zm_ai_leaper; #include common_scripts\utility; #include maps\mp\_utility; #include maps\mp\zombies\_zm_utility; #include maps\mp\animscripts\zm_utility; #include maps\mp\zombies\_zm_spawner; #include maps\mp\zombies\_zm_score; #include maps\mp\animscripts\zm_shared; #include maps\mp\zombies\_zm_ai_basic; #include maps\mp\zombies\_zm_zonemgr; #include maps\mp\gametypes_zm\_globallogic_score; #include maps\mp\zombies\_zm_powerups; #include maps\mp\zombies\_zm_audio; #include maps\mp\zm_highrise_elevators; leaper_round_tracker() { level.leaper_round_count = 1; level.next_leaper_round = level.round_number + randomintrange(4, 6); old_spawn_func = level.round_spawn_func; old_wait_func = level.round_wait_func; if (level.next_leaper_round == 5) { level.prev_leaper_round_amount = 4; } else { level.prev_leaper_round_amount = 5; } while (true) { level waittill("between_round_over"); if (level.round_number == level.next_leaper_round) { level.music_round_override = 1; old_spawn_func = level.round_spawn_func; old_wait_func = level.round_wait_func; leaper_round_start(); level.round_spawn_func = ::leaper_round_spawning; level.round_wait_func = ::leaper_round_wait; if (!isdefined(level.prev_leaper_round_amount)) { level.prev_leaper_round_amount = randomintrange(4, 6); level.next_leaper_round = level.round_number + level.prev_leaper_round_amount; } else { if (level.prev_leaper_round_amount == 4) { level.next_leaper_round = level.round_number + 5; } else { level.next_leaper_round = level.round_number + 4; } level.prev_leaper_round_amount = undefined; } } else if (flag("leaper_round")) { leaper_round_stop(); level.round_spawn_func = old_spawn_func; level.round_wait_func = old_wait_func; level.music_round_override = 0; level.leaper_round_count += 1; } } } leaper_round_accuracy_tracking() { players = getplayers(); level.leaper_round_accurate_players = 0; for (i = 0; i < players.size; i++) { players[i].total_shots_start_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat("total_shots"); players[i].total_hits_start_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat("hits"); } level waittill("last_leaper_down"); players = getplayers(); for (i = 0; i < players.size; i++) { total_shots_end_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat("total_shots") - players[i].total_shots_start_leaper_round; total_hits_end_leaper_round = players[i] maps\mp\gametypes_zm\_globallogic_score::getpersstat("hits") - players[i].total_hits_start_leaper_round; if (total_shots_end_leaper_round == total_hits_end_leaper_round) level.leaper_round_accurate_players++; } if (level.leaper_round_accurate_players == players.size) { if (isdefined(level.last_leaper_origin)) { trace = groundtrace(level.last_leaper_origin + vectorscale((0, 0, 1), 10.0), level.last_leaper_origin + vectorscale((0, 0, -1), 150.0), 0, undefined, 1); power_up_origin = trace["position"]; level thread maps\mp\zombies\_zm_powerups::specific_powerup_drop("free_perk", power_up_origin + vectorscale((1, 1, 0), 30.0)); } } } leaper_death() { self endon("leaper_cleanup"); self waittill("death"); self leaper_stop_trail_fx(); self playsound("zmb_vocals_leaper_death"); playfx(level._effect["leaper_death"], self.origin); if (get_current_zombie_count() == 0 && level.zombie_total == 0) { level.last_leaper_origin = self.origin; level notify("last_leaper_down"); } if (isplayer(self.attacker)) { self.deathpoints_already_given = 1; event = "death"; if (issubstr(self.damageweapon, "knife_ballistic_")) event = "ballistic_knife_death"; self.attacker thread do_player_general_vox("general", "leaper_killed", 20, 20); self.attacker maps\mp\zombies\_zm_score::player_add_points(event, self.damagemod, self.damagelocation, 1); } }