1
0
mirror of https://github.com/JezuzLizard/BO2-Reimagined.git synced 2025-06-07 13:49:33 -05:00
BO2-Reimagined/scripts/zm/_zm_reimagined.gsc
2023-12-12 23:35:06 -08:00

4251 lines
103 KiB
Plaintext

#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include scripts\zm\replaced\utility;
#include scripts\zm\replaced\zm_melee;
#include scripts\zm\replaced\zm_utility;
#include scripts\zm\replaced\zm_shared;
#include scripts\zm\replaced\_damagefeedback;
#include scripts\zm\replaced\_hud_message;
#include scripts\zm\replaced\_zm_gametype;
#include scripts\zm\replaced\_zm;
#include scripts\zm\replaced\_zm_audio;
#include scripts\zm\replaced\_zm_audio_announcer;
#include scripts\zm\replaced\_zm_stats;
#include scripts\zm\replaced\_zm_playerhealth;
#include scripts\zm\replaced\_zm_utility;
#include scripts\zm\replaced\_zm_score;
#include scripts\zm\replaced\_zm_laststand;
#include scripts\zm\replaced\_zm_blockers;
#include scripts\zm\replaced\_zm_weapons;
#include scripts\zm\replaced\_zm_magicbox;
#include scripts\zm\replaced\_zm_perks;
#include scripts\zm\replaced\_zm_buildables;
#include scripts\zm\replaced\_zm_power;
#include scripts\zm\replaced\_zm_powerups;
#include scripts\zm\replaced\_zm_pers_upgrades;
#include scripts\zm\replaced\_zm_pers_upgrades_system;
#include scripts\zm\replaced\_zm_traps;
#include scripts\zm\replaced\_zm_equipment;
#include scripts\zm\replaced\_zm_clone;
#include scripts\zm\replaced\_zm_spawner;
#include scripts\zm\replaced\_zm_ai_basic;
#include scripts\zm\replaced\_zm_ai_dogs;
#include scripts\zm\replaced\_zm_melee_weapon;
#include scripts\zm\replaced\_zm_weap_ballistic_knife;
#include scripts\zm\replaced\_zm_weap_claymore;
#include scripts\zm\replaced\_zm_weap_cymbal_monkey;
main()
{
setDvar( "scr_disablePlutoniumFixes", 1 );
replaceFunc(common_scripts\utility::struct_class_init, scripts\zm\replaced\utility::struct_class_init);
replaceFunc(maps\mp\animscripts\zm_melee::meleecombat, scripts\zm\replaced\zm_melee::meleecombat);
replaceFunc(maps\mp\animscripts\zm_utility::wait_network_frame, scripts\zm\replaced\_zm_utility::wait_network_frame);
replaceFunc(maps\mp\animscripts\traverse\zm_shared::dotraverse, scripts\zm\replaced\zm_shared::dotraverse);
replaceFunc(maps\mp\gametypes_zm\_damagefeedback::onplayerconnect, scripts\zm\replaced\_damagefeedback::onplayerconnect);
replaceFunc(maps\mp\gametypes_zm\_hud_message::onplayerconnect, scripts\zm\replaced\_hud_message::onplayerconnect);
replaceFunc(maps\mp\gametypes_zm\_zm_gametype::hide_gump_loading_for_hotjoiners, scripts\zm\replaced\_zm_gametype::hide_gump_loading_for_hotjoiners);
replaceFunc(maps\mp\zombies\_zm::round_start, scripts\zm\replaced\_zm::round_start);
replaceFunc(maps\mp\zombies\_zm::ai_calculate_health, scripts\zm\replaced\_zm::ai_calculate_health);
replaceFunc(maps\mp\zombies\_zm::onallplayersready, scripts\zm\replaced\_zm::onallplayersready);
replaceFunc(maps\mp\zombies\_zm::last_stand_pistol_rank_init, scripts\zm\replaced\_zm::last_stand_pistol_rank_init);
replaceFunc(maps\mp\zombies\_zm::last_stand_best_pistol, scripts\zm\replaced\_zm::last_stand_best_pistol);
replaceFunc(maps\mp\zombies\_zm::can_track_ammo, scripts\zm\replaced\_zm::can_track_ammo);
replaceFunc(maps\mp\zombies\_zm::take_additionalprimaryweapon, scripts\zm\replaced\_zm::take_additionalprimaryweapon);
replaceFunc(maps\mp\zombies\_zm::check_for_valid_spawn_near_team, scripts\zm\replaced\_zm::check_for_valid_spawn_near_team);
replaceFunc(maps\mp\zombies\_zm::get_valid_spawn_location, scripts\zm\replaced\_zm::get_valid_spawn_location);
replaceFunc(maps\mp\zombies\_zm::actor_damage_override, scripts\zm\replaced\_zm::actor_damage_override);
replaceFunc(maps\mp\zombies\_zm::player_spawn_protection, scripts\zm\replaced\_zm::player_spawn_protection);
replaceFunc(maps\mp\zombies\_zm::wait_and_revive, scripts\zm\replaced\_zm::wait_and_revive);
replaceFunc(maps\mp\zombies\_zm::player_revive_monitor, scripts\zm\replaced\_zm::player_revive_monitor);
replaceFunc(maps\mp\zombies\_zm::player_out_of_playable_area_monitor, scripts\zm\replaced\_zm::player_out_of_playable_area_monitor);
replaceFunc(maps\mp\zombies\_zm::end_game, scripts\zm\replaced\_zm::end_game);
replaceFunc(maps\mp\zombies\_zm::check_quickrevive_for_hotjoin, scripts\zm\replaced\_zm::check_quickrevive_for_hotjoin);
replaceFunc(maps\mp\zombies\_zm_audio::create_and_play_dialog, scripts\zm\replaced\_zm_audio::create_and_play_dialog);
replaceFunc(maps\mp\zombies\_zm_audio_announcer::playleaderdialogonplayer, scripts\zm\replaced\_zm_audio_announcer::playleaderdialogonplayer);
replaceFunc(maps\mp\zombies\_zm_stats::set_global_stat, scripts\zm\replaced\_zm_stats::set_global_stat);
replaceFunc(maps\mp\zombies\_zm_playerhealth::playerhealthregen, scripts\zm\replaced\_zm_playerhealth::playerhealthregen);
replaceFunc(maps\mp\zombies\_zm_utility::init_player_offhand_weapons, scripts\zm\replaced\_zm_utility::init_player_offhand_weapons);
replaceFunc(maps\mp\zombies\_zm_utility::is_headshot, scripts\zm\replaced\_zm_utility::is_headshot);
replaceFunc(maps\mp\zombies\_zm_utility::shock_onpain, scripts\zm\replaced\_zm_utility::shock_onpain);
replaceFunc(maps\mp\zombies\_zm_utility::create_zombie_point_of_interest_attractor_positions, scripts\zm\replaced\_zm_utility::create_zombie_point_of_interest_attractor_positions);
replaceFunc(maps\mp\zombies\_zm_utility::get_current_zone, scripts\zm\replaced\_zm_utility::get_current_zone);
replaceFunc(maps\mp\zombies\_zm_utility::is_temporary_zombie_weapon, scripts\zm\replaced\_zm_utility::is_temporary_zombie_weapon);
replaceFunc(maps\mp\zombies\_zm_utility::wait_network_frame, scripts\zm\replaced\_zm_utility::wait_network_frame);
replaceFunc(maps\mp\zombies\_zm_utility::track_players_intersection_tracker, scripts\zm\replaced\_zm_utility::track_players_intersection_tracker);
replaceFunc(maps\mp\zombies\_zm_score::add_to_player_score, scripts\zm\replaced\_zm_score::add_to_player_score);
replaceFunc(maps\mp\zombies\_zm_score::minus_to_player_score, scripts\zm\replaced\_zm_score::minus_to_player_score);
replaceFunc(maps\mp\zombies\_zm_score::player_add_points_kill_bonus, scripts\zm\replaced\_zm_score::player_add_points_kill_bonus);
replaceFunc(maps\mp\zombies\_zm_laststand::revive_do_revive, scripts\zm\replaced\_zm_laststand::revive_do_revive);
replaceFunc(maps\mp\zombies\_zm_laststand::revive_give_back_weapons, scripts\zm\replaced\_zm_laststand::revive_give_back_weapons);
replaceFunc(maps\mp\zombies\_zm_laststand::revive_hud_think, scripts\zm\replaced\_zm_laststand::revive_hud_think);
replaceFunc(maps\mp\zombies\_zm_laststand::auto_revive, scripts\zm\replaced\_zm_laststand::auto_revive);
replaceFunc(maps\mp\zombies\_zm_laststand::revive_hud_create, scripts\zm\replaced\_zm_laststand::revive_hud_create);
replaceFunc(maps\mp\zombies\_zm_blockers::door_buy, scripts\zm\replaced\_zm_blockers::door_buy);
replaceFunc(maps\mp\zombies\_zm_blockers::door_opened, scripts\zm\replaced\_zm_blockers::door_opened);
replaceFunc(maps\mp\zombies\_zm_blockers::player_fails_blocker_repair_trigger_preamble, scripts\zm\replaced\_zm_blockers::player_fails_blocker_repair_trigger_preamble);
replaceFunc(maps\mp\zombies\_zm_weapons::init_weapon_upgrade, scripts\zm\replaced\_zm_weapons::init_weapon_upgrade);
replaceFunc(maps\mp\zombies\_zm_weapons::add_dynamic_wallbuy, scripts\zm\replaced\_zm_weapons::add_dynamic_wallbuy);
replaceFunc(maps\mp\zombies\_zm_weapons::weapon_give, scripts\zm\replaced\_zm_weapons::weapon_give);
replaceFunc(maps\mp\zombies\_zm_weapons::ammo_give, scripts\zm\replaced\_zm_weapons::ammo_give);
replaceFunc(maps\mp\zombies\_zm_weapons::get_upgraded_ammo_cost, scripts\zm\replaced\_zm_weapons::get_upgraded_ammo_cost);
replaceFunc(maps\mp\zombies\_zm_weapons::makegrenadedudanddestroy, scripts\zm\replaced\_zm_weapons::makegrenadedudanddestroy);
replaceFunc(maps\mp\zombies\_zm_weapons::createballisticknifewatcher_zm, scripts\zm\replaced\_zm_weapons::createballisticknifewatcher_zm);
replaceFunc(maps\mp\zombies\_zm_weapons::weapon_spawn_think, scripts\zm\replaced\_zm_weapons::weapon_spawn_think);
replaceFunc(maps\mp\zombies\_zm_weapons::weapon_set_first_time_hint, scripts\zm\replaced\_zm_weapons::weapon_set_first_time_hint);
replaceFunc(maps\mp\zombies\_zm_magicbox::treasure_chest_init, scripts\zm\replaced\_zm_magicbox::treasure_chest_init);
replaceFunc(maps\mp\zombies\_zm_magicbox::init_starting_chest_location, scripts\zm\replaced\_zm_magicbox::init_starting_chest_location);
replaceFunc(maps\mp\zombies\_zm_magicbox::decide_hide_show_hint, scripts\zm\replaced\_zm_magicbox::decide_hide_show_hint);
replaceFunc(maps\mp\zombies\_zm_magicbox::trigger_visible_to_player, scripts\zm\replaced\_zm_magicbox::trigger_visible_to_player);
replaceFunc(maps\mp\zombies\_zm_magicbox::can_buy_weapon, scripts\zm\replaced\_zm_magicbox::can_buy_weapon);
replaceFunc(maps\mp\zombies\_zm_perks::init, scripts\zm\replaced\_zm_perks::init);
replaceFunc(maps\mp\zombies\_zm_perks::vending_trigger_think, scripts\zm\replaced\_zm_perks::vending_trigger_think);
replaceFunc(maps\mp\zombies\_zm_perks::perk_give_bottle_end, scripts\zm\replaced\_zm_perks::perk_give_bottle_end);
replaceFunc(maps\mp\zombies\_zm_perks::vending_weapon_upgrade, scripts\zm\replaced\_zm_perks::vending_weapon_upgrade);
replaceFunc(maps\mp\zombies\_zm_perks::give_perk, scripts\zm\replaced\_zm_perks::give_perk);
replaceFunc(maps\mp\zombies\_zm_perks::perk_think, scripts\zm\replaced\_zm_perks::perk_think);
replaceFunc(maps\mp\zombies\_zm_perks::perk_set_max_health_if_jugg, scripts\zm\replaced\_zm_perks::perk_set_max_health_if_jugg);
replaceFunc(maps\mp\zombies\_zm_perks::initialize_custom_perk_arrays, scripts\zm\replaced\_zm_perks::initialize_custom_perk_arrays);
replaceFunc(maps\mp\zombies\_zm_perks::turn_tombstone_on, scripts\zm\replaced\_zm_perks::turn_tombstone_on);
replaceFunc(maps\mp\zombies\_zm_perks::wait_for_player_to_take, scripts\zm\replaced\_zm_perks::wait_for_player_to_take);
replaceFunc(maps\mp\zombies\_zm_perks::check_player_has_perk, scripts\zm\replaced\_zm_perks::check_player_has_perk);
replaceFunc(maps\mp\zombies\_zm_perks::set_perk_clientfield, scripts\zm\replaced\_zm_perks::set_perk_clientfield);
replaceFunc(maps\mp\zombies\_zm_perks::perk_pause, scripts\zm\replaced\_zm_perks::perk_pause);
replaceFunc(maps\mp\zombies\_zm_perks::perk_unpause, scripts\zm\replaced\_zm_perks::perk_unpause);
replaceFunc(maps\mp\zombies\_zm_buildables::player_progress_bar_update, scripts\zm\replaced\_zm_buildables::player_progress_bar_update);
replaceFunc(maps\mp\zombies\_zm_power::standard_powered_items, scripts\zm\replaced\_zm_power::standard_powered_items);
replaceFunc(maps\mp\zombies\_zm_powerups::powerup_drop, scripts\zm\replaced\_zm_powerups::powerup_drop);
replaceFunc(maps\mp\zombies\_zm_powerups::get_next_powerup, scripts\zm\replaced\_zm_powerups::get_next_powerup);
replaceFunc(maps\mp\zombies\_zm_powerups::powerup_grab, scripts\zm\replaced\_zm_powerups::powerup_grab);
replaceFunc(maps\mp\zombies\_zm_powerups::full_ammo_powerup, scripts\zm\replaced\_zm_powerups::full_ammo_powerup);
replaceFunc(maps\mp\zombies\_zm_powerups::nuke_powerup, scripts\zm\replaced\_zm_powerups::nuke_powerup);
replaceFunc(maps\mp\zombies\_zm_powerups::insta_kill_powerup, scripts\zm\replaced\_zm_powerups::insta_kill_powerup);
replaceFunc(maps\mp\zombies\_zm_powerups::double_points_powerup, scripts\zm\replaced\_zm_powerups::double_points_powerup);
replaceFunc(maps\mp\zombies\_zm_pers_upgrades::is_pers_system_disabled, scripts\zm\replaced\_zm_pers_upgrades::is_pers_system_disabled);
replaceFunc(maps\mp\zombies\_zm_pers_upgrades_system::check_pers_upgrade, scripts\zm\replaced\_zm_pers_upgrades_system::check_pers_upgrade);
replaceFunc(maps\mp\zombies\_zm_traps::player_elec_damage, scripts\zm\replaced\_zm_traps::player_elec_damage);
replaceFunc(maps\mp\zombies\_zm_equipment::show_equipment_hint, scripts\zm\replaced\_zm_equipment::show_equipment_hint);
replaceFunc(maps\mp\zombies\_zm_equipment::placed_equipment_think, scripts\zm\replaced\_zm_equipment::placed_equipment_think);
replaceFunc(maps\mp\zombies\_zm_clone::spawn_player_clone, scripts\zm\replaced\_zm_clone::spawn_player_clone);
replaceFunc(maps\mp\zombies\_zm_spawner::zombie_gib_on_damage, scripts\zm\replaced\_zm_spawner::zombie_gib_on_damage);
replaceFunc(maps\mp\zombies\_zm_spawner::head_should_gib, scripts\zm\replaced\_zm_spawner::head_should_gib);
replaceFunc(maps\mp\zombies\_zm_spawner::zombie_can_drop_powerups, scripts\zm\replaced\_zm_spawner::zombie_can_drop_powerups);
replaceFunc(maps\mp\zombies\_zm_spawner::zombie_complete_emerging_into_playable_area, scripts\zm\replaced\_zm_spawner::zombie_complete_emerging_into_playable_area);
replaceFunc(maps\mp\zombies\_zm_ai_basic::inert_wakeup, scripts\zm\replaced\_zm_ai_basic::inert_wakeup);
replaceFunc(maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds, scripts\zm\replaced\_zm_ai_dogs::enable_dog_rounds);
replaceFunc(maps\mp\zombies\_zm_melee_weapon::change_melee_weapon, scripts\zm\replaced\_zm_melee_weapon::change_melee_weapon);
replaceFunc(maps\mp\zombies\_zm_melee_weapon::give_melee_weapon, scripts\zm\replaced\_zm_melee_weapon::give_melee_weapon);
replaceFunc(maps\mp\zombies\_zm_weap_ballistic_knife::watch_use_trigger, scripts\zm\replaced\_zm_weap_ballistic_knife::watch_use_trigger);
replaceFunc(maps\mp\zombies\_zm_weap_claymore::claymore_detonation, scripts\zm\replaced\_zm_weap_claymore::claymore_detonation);
replaceFunc(maps\mp\zombies\_zm_weap_claymore::claymore_setup, scripts\zm\replaced\_zm_weap_claymore::claymore_setup);
replaceFunc(maps\mp\zombies\_zm_weap_cymbal_monkey::player_handle_cymbal_monkey, scripts\zm\replaced\_zm_weap_cymbal_monkey::player_handle_cymbal_monkey);
}
init()
{
precacheStatusIcon( "menu_mp_killstreak_select" );
precacheStatusIcon( "menu_mp_contract_expired" );
precacheStatusIcon( "waypoint_revive" );
if ( is_true( level.zombiemode_using_chugabud_perk ) )
{
precacheStatusIcon( "specialty_chugabud_zombies" );
}
if ( is_true( level.zombiemode_using_afterlife ) )
{
precacheStatusIcon( "waypoint_revive_afterlife" );
}
level.using_solo_revive = 0;
level.claymores_max_per_player = 20;
level.navcards = undefined; // removes navcards on HUD
level.player_too_many_players_check = 0;
level.player_too_many_weapons_monitor_func = scripts\zm\replaced\_zm::player_too_many_weapons_monitor;
level.pregame_minplayers = getDvarInt("party_minplayers");
level.player_starting_health = 150;
setscoreboardcolumns_gametype();
set_lethal_grenade_init();
set_dvars();
wallbuy_location_changes();
level thread initial_print();
level thread on_player_connect();
level thread post_all_players_spawned();
level thread enemy_counter_hud();
level thread timer_hud();
level thread swap_staminup_perk();
level thread remove_status_icons_on_intermission();
}
initial_print()
{
flag_wait("initial_players_connected");
iprintln("Reimagined Loaded");
}
on_player_connect()
{
while(true)
{
level waittill("connecting", player);
player thread on_player_spawned();
player thread on_player_spectate();
player thread on_player_downed();
player thread on_player_revived();
player thread on_player_fake_revive();
player thread grenade_fire_watcher();
player thread weapon_inspect_watcher();
}
}
on_player_spawned()
{
level endon( "game_ended" );
self endon( "disconnect" );
self.initial_spawn = true;
for(;;)
{
self waittill( "spawned_player" );
if (self.initial_spawn)
{
self.initial_spawn = false;
self.solo_lives_given = 0;
self.stored_weapon_data = undefined;
self.screecher_seen_hint = 1;
self thread health_bar_hud();
self thread shield_bar_hud();
self thread bleedout_bar_hud();
self thread zone_hud();
self thread veryhurt_blood_fx();
self thread ignoreme_after_revived();
self thread fall_velocity_check();
self thread melee_weapon_switch_watcher();
self thread give_additional_perks();
self thread weapon_locker_give_ammo_after_rounds();
self thread war_machine_explode_on_impact();
self thread jetgun_heatval_changes();
self thread additionalprimaryweapon_indicator();
self thread additionalprimaryweapon_stowed_weapon_refill();
self thread electric_cherry_unlimited();
}
self.statusicon = "";
self set_client_dvars();
self set_perks();
}
}
on_player_spectate()
{
level endon("end_game");
self endon( "disconnect" );
while(1)
{
self waittill( "spawned_spectator" );
self.statusicon = "hud_status_dead";
}
}
on_player_downed()
{
level endon( "game_ended" );
self endon( "disconnect" );
while(1)
{
self waittill( "entering_last_stand" );
if(is_gametype_active("zcleansed"))
{
continue;
}
self.statusicon = "waypoint_revive";
self.health = self.maxhealth;
}
}
on_player_revived()
{
level endon("end_game");
self endon( "disconnect" );
while(1)
{
self waittill( "player_revived", reviver );
if ( isDefined( self.e_chugabud_corpse ) )
{
self.statusicon = "specialty_chugabud_zombies";
}
else
{
self.statusicon = "";
}
}
}
on_player_fake_revive()
{
level endon("end_game");
self endon( "disconnect" );
while(1)
{
self waittill( "fake_revive" );
if ( is_true( level.zombiemode_using_chugabud_perk ) )
{
self.statusicon = "specialty_chugabud_zombies";
}
else if ( is_true( level.zombiemode_using_afterlife ) )
{
self.statusicon = "waypoint_revive_afterlife";
}
}
}
post_all_players_spawned()
{
flag_wait( "start_zombie_round_logic" );
wait 0.05;
level.near_miss = 2; // makes screecher not run away first time on solo
level.ta_vaultfee = 0;
level.ta_tellerfee = 0;
level.weapon_locker_online = 0;
level.dont_link_common_wallbuys = 1;
level.magicbox_timeout = 9;
level.packapunch_timeout = 12;
level.perk_purchase_limit = 9;
level._random_zombie_perk_cost = 2500;
level.flopper_network_optimized = 0;
level.equipment_etrap_needs_power = 0;
level.equipment_turret_needs_power = 0;
level.equipment_subwoofer_needs_power = 0;
level.limited_weapons["ray_gun_zm"] = 8;
level.limited_weapons["raygun_mark2_zm"] = 1;
if (isDefined(level.zombie_weapons["slipgun_zm"]))
{
level.zombie_weapons["slipgun_zm"].upgrade_name = "slipgun_upgraded_zm";
level.zombie_weapons_upgraded["slipgun_upgraded_zm"] = "slipgun_zm";
}
level.zombie_vars["riotshield_hit_points"] = 1500;
level.zombie_vars["emp_stun_range"] = 420;
level.zombie_vars["emp_perk_off_time"] = 60;
level.zombie_vars["slipgun_reslip_rate"] = 0;
level.zombie_vars["zombie_perk_divetonuke_min_damage"] = 1000;
level.zombie_vars["zombie_perk_divetonuke_max_damage"] = 5000;
level.explode_overheated_jetgun = 0;
level.unbuild_overheated_jetgun = 0;
level.take_overheated_jetgun = 1;
level.dont_allow_meat_interaction = 1;
level.players_can_damage_riotshields = 1;
level.speed_change_round = undefined;
level.playersuicideallowed = undefined;
level.disable_free_perks_before_power = undefined;
level.custom_random_perk_weights = undefined;
level.global_damage_func = scripts\zm\replaced\_zm_spawner::zombie_damage;
level.callbackplayerdamage = scripts\zm\replaced\_zm::callback_playerdamage;
level.overrideplayerdamage = scripts\zm\replaced\_zm::player_damage_override;
level.playerlaststand_func = scripts\zm\replaced\_zm::player_laststand;
level.callbackplayerlaststand = scripts\zm\replaced\_zm::callback_playerlaststand;
level._zombies_round_spawn_failsafe = scripts\zm\replaced\_zm::round_spawn_failsafe;
level.etrap_damage = maps\mp\zombies\_zm::ai_zombie_health( 255 );
level.slipgun_damage = maps\mp\zombies\_zm::ai_zombie_health( 255 );
level.should_respawn_func = ::should_respawn;
level.tombstone_spawn_func = ::tombstone_spawn;
level.tombstone_laststand_func = ::tombstone_save;
level.zombie_last_stand = ::last_stand_pistol_swap;
level.zombie_last_stand_ammo_return = ::last_stand_restore_pistol_ammo;
disable_carpenter();
disable_bank_teller();
zone_changes();
jetgun_remove_forced_weapon_switch();
level thread wallbuy_cost_changes();
level thread buildbuildables();
level thread buildcraftables();
}
set_dvars()
{
setDvar( "player_backSpeedScale", 1 );
// can't set to exactly 90 or else looking completely up or down will cause the player to move in the opposite direction
setDvar( "player_view_pitch_up", 89.9999 );
setDvar( "player_view_pitch_down", 89.9999 );
setDvar( "dtp_post_move_pause", 0 );
setDvar( "dtp_startup_delay", 100 );
setDvar( "dtp_exhaustion_window", 100 );
setDvar( "player_meleeRange", 64 );
setDvar( "player_breath_gasp_lerp", 0 );
setDvar( "g_friendlyfireDist", 0 );
setDvar( "perk_weapRateEnhanced", 0 );
setDvar( "riotshield_melee_damage_scale", 1 );
setDvar( "riotshield_bullet_damage_scale", 1 );
setDvar( "riotshield_explosive_damage_scale", 1 );
setDvar( "riotshield_projectile_damage_scale", 1 );
setDvar( "riotshield_deployed_health", 1500 );
setDvar( "sv_patch_zm_weapons", 0 );
setDvar( "sv_fix_zm_weapons", 1 );
setDvar( "sv_voice", 2 );
setDvar( "sv_voiceQuality", 9 );
setDvar( "sv_cheats", 0 );
if ( getDvar("hud_timer") == "" )
{
setDvar( "hud_timer", 1 );
}
if ( getDvar("hud_enemy_counter") == "" )
{
setDvar( "hud_enemy_counter", 1 );
}
if ( getDvar("hud_health_bar") == "" )
{
setDvar( "hud_health_bar", 1 );
}
if ( getDvar("hud_zone_name") == "" )
{
setDvar( "hud_zone_name", 1 );
}
if ( getDvar("disable_character_dialog") == "" )
{
setDvar( "disable_character_dialog", 0 );
}
}
set_client_dvars()
{
self setClientDvar( "player_lastStandBleedoutTime", getDvarInt( "player_lastStandBleedoutTime" ) );
self setClientDvar( "dtp_post_move_pause", getDvarInt( "dtp_post_move_pause" ) );
self setClientDvar( "dtp_startup_delay", getDvarInt( "dtp_startup_delay" ) );
self setClientDvar( "dtp_exhaustion_window", getDvarInt( "dtp_exhaustion_window" ) );
self setClientDvar( "aim_automelee_enabled", 0 );
self setClientDvar( "cg_drawBreathHint", 0 );
self setClientDvar( "g_friendlyfireDist", 0 );
self setClientDvar( "cg_friendlyNameFadeIn", 0 );
self setClientDvar( "cg_friendlyNameFadeOut", 250 );
self setClientDvar( "cg_enemyNameFadeIn", 0 );
self setClientDvar( "cg_enemyNameFadeOut", 250 );
self setClientDvar( "waypointOffscreenPointerDistance", 30);
self setClientDvar( "waypointOffscreenPadTop", 32);
self setClientDvar( "waypointOffscreenPadBottom", 32);
self setClientDvar( "waypointPlayerOffsetStand", 30);
self setClientDvar( "waypointPlayerOffsetCrouch", 30);
self setClientDvar( "r_fog", 0 );
self setClientDvar( "r_dof_enable", 0 );
self setClientDvar( "r_lodBiasRigid", -1000 );
self setClientDvar( "r_lodBiasSkinned", -1000 );
self setClientDvar( "cg_ufo_scaler", 1 );
}
set_perks()
{
if(!(getDvar("g_gametype") == "zgrief" && getDvarIntDefault("ui_gametype_pro", 0)))
{
self setperk( "specialty_unlimitedsprint" );
}
self setperk( "specialty_fastmantle" );
self setperk( "specialty_fastladderclimb" );
}
health_bar_hud()
{
self endon("disconnect");
flag_wait( "hud_visible" );
if ( !getDvarInt("hud_health_bar") )
{
return;
}
x = 5;
y = -104;
if (level.script == "zm_buried")
{
y -= 25;
}
else if (level.script == "zm_tomb")
{
y -= 60;
}
hud = self createbar((1, 1, 1), level.primaryprogressbarwidth - 10, level.primaryprogressbarheight);
hud.alignx = "left";
hud.bar.alignx = "left";
hud.barframe.alignx = "left";
hud.aligny = "middle";
hud.bar.aligny = "middle";
hud.barframe.aligny = "middle";
hud.horzalign = "user_left";
hud.bar.horzalign = "user_left";
hud.barframe.horzalign = "user_left";
hud.vertalign = "user_bottom";
hud.bar.vertalign = "user_bottom";
hud.barframe.vertalign = "user_bottom";
hud.x += x;
hud.bar.x += x + ((hud.width + 4) / 2);
hud.barframe.x += x;
hud.y += y;
hud.bar.y += y;
hud.barframe.y += y;
hud.hidewheninmenu = 1;
hud.bar.hidewheninmenu = 1;
hud.barframe.hidewheninmenu = 1;
hud.foreground = 1;
hud.bar.foreground = 1;
hud.barframe.foreground = 1;
hud.sort = 1;
hud.bar.sort = 2;
hud.barframe.sort = 3;
hud.barframe destroy();
hud_text = createfontstring("objective", 1.2);
hud_text.alignx = "left";
hud_text.aligny = "middle";
hud_text.horzalign = "user_left";
hud_text.vertalign = "user_bottom";
hud_text.x += x + hud.width + 7;
hud_text.y += y;
hud_text.hidewheninmenu = 1;
hud_text.foreground = 1;
hud endon("death");
hud thread destroy_on_intermission();
hud_text thread destroy_on_intermission();
while (1)
{
if (is_true(self.afterlife))
{
hud hideelem();
hud_text hideelem();
while (is_true(self.afterlife))
{
wait 0.05;
}
hud showelem();
hud_text showelem();
}
hud updatebar(self.health / self.maxhealth);
hud_text setvalue(self.health);
wait 0.05;
}
}
shield_bar_hud()
{
self endon("disconnect");
flag_wait( "hud_visible" );
if ( !getDvarInt("hud_health_bar") )
{
return;
}
x = 5;
y = -104;
if (level.script == "zm_buried")
{
y -= 25;
}
else if (level.script == "zm_tomb")
{
y -= 60;
}
hud = self createbar((0.5, 0.5, 0.5), level.primaryprogressbarwidth - 10, int(level.primaryprogressbarheight / 2));
hud.alignx = "left";
hud.bar.alignx = "left";
hud.barframe.alignx = "left";
hud.aligny = "middle";
hud.bar.aligny = "middle";
hud.barframe.aligny = "middle";
hud.horzalign = "user_left";
hud.bar.horzalign = "user_left";
hud.barframe.horzalign = "user_left";
hud.vertalign = "user_bottom";
hud.bar.vertalign = "user_bottom";
hud.barframe.vertalign = "user_bottom";
hud.x += x;
hud.bar.x += x + ((hud.width + 4) / 2);
hud.barframe.x += x;
hud.y += y - 2;
hud.bar.y += y - 2;
hud.barframe.y += y - 2;
hud.hidewheninmenu = 1;
hud.bar.hidewheninmenu = 1;
hud.barframe.hidewheninmenu = 1;
hud.foreground = 1;
hud.bar.foreground = 1;
hud.barframe.foreground = 1;
hud.sort = 2;
hud.bar.sort = 3;
hud.barframe.sort = 4;
hud.alpha = 0;
hud.barframe destroy();
hud_text = createfontstring("objective", 1.2);
hud_text.alignx = "left";
hud_text.aligny = "middle";
hud_text.horzalign = "user_left";
hud_text.vertalign = "user_bottom";
hud_text.label = &"| ";
hud_text.x += x + hud.width + 11;
hud_text.y += y;
hud_text.hidewheninmenu = 1;
hud_text.foreground = 1;
hud_text_x = hud_text.x;
hud endon("death");
hud thread destroy_on_intermission();
hud_text thread destroy_on_intermission();
while (1)
{
if (!is_true(self.hasriotshield) || (isDefined(self.shielddamagetaken) && self.shielddamagetaken >= level.zombie_vars["riotshield_hit_points"]) || is_true(self.afterlife))
{
hud.bar.alpha = 0;
hud_text hideelem();
while (!is_true(self.hasriotshield) || (isDefined(self.shielddamagetaken) && self.shielddamagetaken >= level.zombie_vars["riotshield_hit_points"]) || is_true(self.afterlife))
{
wait 0.05;
}
hud.bar.alpha = 1;
hud_text showelem();
}
health = level.zombie_vars["riotshield_hit_points"] - self.shielddamagetaken;
if (health < 0)
{
health = 0;
}
health_ratio = health / level.zombie_vars["riotshield_hit_points"];
offset_x = 0;
health_str = "" + self.health;
for(i = 0; i < health_str.size; i++)
{
if (health_str[i] == "1")
{
offset_x += 4;
}
else
{
offset_x += 5;
}
}
hud_text.x = hud_text_x + offset_x;
hud updatebar(health_ratio);
hud_text setvalue(int(health_ratio * 100));
wait 0.05;
}
}
enemy_counter_hud()
{
if ( getDvar( "g_gametype" ) == "zgrief" )
{
return;
}
hud = newHudElem();
hud.alignx = "left";
hud.aligny = "top";
hud.horzalign = "user_left";
hud.vertalign = "user_top";
hud.x += 5;
hud.y += 2;
hud.fontscale = 1.4;
hud.alpha = 0;
hud.color = ( 1, 1, 1 );
hud.hidewheninmenu = 1;
hud.foreground = 1;
hud.label = &"Enemies Remaining: ";
hud endon("death");
hud thread destroy_on_intermission();
flag_wait( "hud_visible" );
if ( !getDvarInt("hud_enemy_counter") )
{
return;
}
hud.alpha = 1;
while (1)
{
enemies = get_round_enemy_array().size + level.zombie_total;
if (level flag_exists("spawn_ghosts") && flag("spawn_ghosts"))
{
enemies = get_current_ghost_count();
}
else if (level flag_exists("sq_tpo_special_round_active") && flag("sq_tpo_special_round_active"))
{
enemies = 0;
}
if (enemies == 0)
{
hud setText("");
}
else
{
hud setValue(enemies);
}
wait 0.05;
}
}
get_current_ghost_count()
{
ghost_count = 0;
ais = getaiarray( level.zombie_team );
foreach ( ai in ais )
{
if ( isdefined( ai.is_ghost ) && ai.is_ghost )
ghost_count++;
}
return ghost_count;
}
timer_hud()
{
level thread round_timer_hud();
hud = newHudElem();
hud.alignx = "right";
hud.aligny = "top";
hud.horzalign = "user_right";
hud.vertalign = "user_top";
hud.x -= 5;
hud.y += 12;
hud.fontscale = 1.4;
hud.alpha = 0;
hud.color = ( 1, 1, 1 );
hud.hidewheninmenu = 1;
hud.foreground = 1;
hud.label = &"Total: ";
hud endon("death");
hud thread destroy_on_intermission();
hud thread set_time_frozen_on_end_game();
flag_wait( "hud_visible" );
if ( !getDvarInt("hud_timer") )
{
return;
}
hud.alpha = 1;
if ( !flag( "initial_blackscreen_passed" ) )
{
hud set_time_frozen(0, "initial_blackscreen_passed");
}
if ( getDvar( "g_gametype" ) == "zgrief" )
{
hud set_time_frozen(0);
}
hud setTimerUp(0);
hud.start_time = getTime();
level.timer_hud_start_time = hud.start_time;
}
round_timer_hud()
{
if(isDefined(level.scr_zm_ui_gametype_obj) && level.scr_zm_ui_gametype_obj != "zsnr")
{
return;
}
hud = newHudElem();
hud.alignx = "right";
hud.aligny = "top";
hud.horzalign = "user_right";
hud.vertalign = "user_top";
hud.x -= 5;
hud.y += 27;
hud.fontscale = 1.4;
hud.alpha = 0;
hud.color = ( 1, 1, 1 );
hud.hidewheninmenu = 1;
hud.foreground = 1;
hud.label = &"Round: ";
hud endon("death");
hud thread destroy_on_intermission();
hud thread set_time_frozen_on_end_game();
flag_wait( "hud_visible" );
if ( !getDvarInt("hud_timer") )
{
return;
}
hud.alpha = 1;
if ( !flag( "initial_blackscreen_passed" ) )
{
hud set_time_frozen(0, "initial_blackscreen_passed");
}
if ( getDvar( "g_gametype" ) == "zgrief" )
{
hud set_time_frozen(0);
}
while (1)
{
hud setTimerUp(0);
hud.start_time = getTime();
if ( getDvar( "g_gametype" ) == "zgrief" )
{
level waittill( "restart_round" );
}
else
{
level waittill( "end_of_round" );
}
level thread round_total_timer_hud();
time = int((getTime() - hud.start_time) / 1000);
hud set_time_frozen(time);
}
}
round_total_timer_hud()
{
if ( getDvar( "g_gametype" ) == "zgrief" )
{
return;
}
hud = newHudElem();
hud.alignx = "right";
hud.aligny = "top";
hud.horzalign = "user_right";
hud.vertalign = "user_top";
hud.x -= 5;
hud.y += 42;
hud.fontscale = 1.4;
hud.alpha = 0;
hud.color = ( 1, 1, 1 );
hud.hidewheninmenu = 1;
hud.foreground = 1;
hud.label = &"Round Total: ";
hud endon("death");
hud thread destroy_on_intermission();
fade_time = 0.5;
hud fadeOverTime(fade_time);
hud.alpha = 1;
time = int((getTime() - level.timer_hud_start_time) / 1000);
hud set_time_frozen(time);
hud fadeOverTime(fade_time);
hud.alpha = 0;
wait fade_time;
hud destroy();
}
set_time_frozen(time, endon_notify)
{
if ( isDefined( endon_notify ) )
{
level endon( endon_notify );
}
else if ( getDvar( "g_gametype" ) == "zgrief" )
{
level endon( "restart_round_start" );
}
else
{
level endon( "start_of_round" );
}
self endon( "death" );
if(time != 0)
{
time -= 0.5; // need to set it below the number or it shows the next number
}
while (1)
{
if(time == 0)
{
self setTimerUp(time);
}
else
{
self setTimer(time);
}
wait 0.5;
}
}
set_time_frozen_on_end_game()
{
level endon("intermission");
level waittill_any("end_game", "freeze_timers");
time = int((getTime() - self.start_time) / 1000);
self set_time_frozen(time, "forever");
}
zone_hud()
{
self endon("disconnect");
x = 5;
y = -119;
if (level.script == "zm_buried")
{
y -= 25;
}
else if (level.script == "zm_tomb")
{
y -= 60;
}
hud = newClientHudElem(self);
hud.alignx = "left";
hud.aligny = "middle";
hud.horzalign = "user_left";
hud.vertalign = "user_bottom";
hud.x += x;
hud.y += y;
hud.fontscale = 1.4;
hud.alpha = 0;
hud.color = ( 1, 1, 1 );
hud.hidewheninmenu = 1;
hud.foreground = 1;
hud endon("death");
hud thread destroy_on_intermission();
flag_wait( "hud_visible" );
if ( !getDvarInt("hud_zone_name") )
{
return;
}
vars = [];
vars["zone"] = self get_current_zone();
vars["prev_zone_name"] = get_zone_display_name(vars["zone"]);
hud settext(vars["prev_zone_name"]);
hud.alpha = 1;
while (1)
{
vars["zone"] = self get_current_zone();
vars["zone_name"] = get_zone_display_name(vars["zone"]);
if(vars["prev_zone_name"] != vars["zone_name"])
{
vars["prev_zone_name"] = vars["zone_name"];
hud fadeovertime(0.25);
hud.alpha = 0;
wait 0.25;
hud settext(vars["zone_name"]);
hud fadeovertime(0.25);
hud.alpha = 1;
wait 0.25;
continue;
}
wait 0.05;
}
}
get_zone_display_name(zone)
{
if (!isDefined(zone))
{
return "";
}
name = zone;
if (level.script == "zm_transit" || level.script == "zm_transit_dr")
{
if (zone == "zone_pri")
{
name = "Bus Depot";
}
else if (zone == "zone_pri2")
{
name = "Bus Depot Hallway";
}
else if (zone == "zone_station_ext")
{
name = "Outside Bus Depot";
}
else if (zone == "zone_trans_2b")
{
name = "Fog After Bus Depot";
}
else if (zone == "zone_trans_2")
{
name = "Tunnel Entrance";
}
else if (zone == "zone_amb_tunnel")
{
name = "Tunnel";
}
else if (zone == "zone_trans_3")
{
name = "Tunnel Exit";
}
else if (zone == "zone_roadside_west")
{
name = "Outside Diner";
}
else if (zone == "zone_gas")
{
name = "Gas Station";
}
else if (zone == "zone_roadside_east")
{
name = "Outside Garage";
}
else if (zone == "zone_trans_diner")
{
name = "Fog Outside Diner";
}
else if (zone == "zone_trans_diner2")
{
name = "Fog Outside Garage";
}
else if (zone == "zone_gar")
{
name = "Garage";
}
else if (zone == "zone_din")
{
name = "Diner";
}
else if (zone == "zone_diner_roof")
{
name = "Diner Roof";
}
else if (zone == "zone_trans_4")
{
name = "Fog After Diner";
}
else if (zone == "zone_amb_forest")
{
name = "Forest";
}
else if (zone == "zone_trans_10")
{
name = "Outside Church";
}
else if (zone == "zone_town_church")
{
name = "Outside Church To Town";
}
else if (zone == "zone_trans_5")
{
name = "Fog Before Farm";
}
else if (zone == "zone_far")
{
name = "Outside Farm";
}
else if (zone == "zone_far_ext")
{
name = "Farm";
}
else if (zone == "zone_brn")
{
name = "Barn";
}
else if (zone == "zone_farm_house")
{
name = "Farmhouse";
}
else if (zone == "zone_trans_6")
{
name = "Fog After Farm";
}
else if (zone == "zone_amb_cornfield")
{
name = "Cornfield";
}
else if (zone == "zone_cornfield_prototype")
{
name = "Prototype";
}
else if (zone == "zone_trans_7")
{
name = "Upper Fog Before Power Station";
}
else if (zone == "zone_trans_pow_ext1")
{
name = "Fog Before Power Station";
}
else if (zone == "zone_pow")
{
name = "Outside Power Station";
}
else if (zone == "zone_prr")
{
name = "Power Station";
}
else if (zone == "zone_pcr")
{
name = "Power Station Control Room";
}
else if (zone == "zone_pow_warehouse")
{
name = "Warehouse";
}
else if (zone == "zone_trans_8")
{
name = "Fog After Power Station";
}
else if (zone == "zone_amb_power2town")
{
name = "Cabin";
}
else if (zone == "zone_trans_9")
{
name = "Fog Before Town";
}
else if (zone == "zone_town_north")
{
name = "North Town";
}
else if (zone == "zone_tow")
{
name = "Center Town";
}
else if (zone == "zone_town_east")
{
name = "East Town";
}
else if (zone == "zone_town_west")
{
name = "West Town";
}
else if (zone == "zone_town_south")
{
name = "South Town";
}
else if (zone == "zone_bar")
{
name = "Bar";
}
else if (zone == "zone_town_barber")
{
name = "Bookstore";
}
else if (zone == "zone_ban")
{
name = "Bank";
}
else if (zone == "zone_ban_vault")
{
name = "Bank Vault";
}
else if (zone == "zone_tbu")
{
name = "Below Bank";
}
else if (zone == "zone_trans_11")
{
name = "Fog After Town";
}
else if (zone == "zone_amb_bridge")
{
name = "Bridge";
}
else if (zone == "zone_trans_1")
{
name = "Fog Before Bus Depot";
}
}
else if (level.script == "zm_nuked")
{
if (zone == "culdesac_yellow_zone")
{
name = "Yellow House Cul-de-sac";
}
else if (zone == "culdesac_green_zone")
{
name = "Green House Cul-de-sac";
}
else if (zone == "truck_zone")
{
name = "Truck";
}
else if (zone == "openhouse1_f1_zone")
{
name = "Green House Downstairs";
}
else if (zone == "openhouse1_f2_zone")
{
name = "Green House Upstairs";
}
else if (zone == "openhouse1_backyard_zone")
{
name = "Green House Backyard";
}
else if (zone == "openhouse2_f1_zone")
{
name = "Yellow House Downstairs";
}
else if (zone == "openhouse2_f2_zone")
{
name = "Yellow House Upstairs";
}
else if (zone == "openhouse2_backyard_zone")
{
name = "Yellow House Backyard";
}
else if (zone == "ammo_door_zone")
{
name = "Yellow House Backyard Door";
}
}
else if (level.script == "zm_highrise")
{
if (zone == "zone_green_start")
{
name = "Green Highrise Level 3b";
}
else if (zone == "zone_green_escape_pod")
{
name = "Escape Pod";
}
else if (zone == "zone_green_escape_pod_ground")
{
name = "Escape Pod Shaft";
}
else if (zone == "zone_green_level1")
{
name = "Green Highrise Level 3a";
}
else if (zone == "zone_green_level2a")
{
name = "Green Highrise Level 2a";
}
else if (zone == "zone_green_level2b")
{
name = "Green Highrise Level 2b";
}
else if (zone == "zone_green_level3a")
{
name = "Green Highrise Restaurant";
}
else if (zone == "zone_green_level3b")
{
name = "Green Highrise Level 1a";
}
else if (zone == "zone_green_level3c")
{
name = "Green Highrise Level 1b";
}
else if (zone == "zone_green_level3d")
{
name = "Green Highrise Behind Restaurant";
}
else if (zone == "zone_orange_level1")
{
name = "Upper Orange Highrise Level 2";
}
else if (zone == "zone_orange_level2")
{
name = "Upper Orange Highrise Level 1";
}
else if (zone == "zone_orange_elevator_shaft_top")
{
name = "Elevator Shaft Level 3";
}
else if (zone == "zone_orange_elevator_shaft_middle_1")
{
name = "Elevator Shaft Level 2";
}
else if (zone == "zone_orange_elevator_shaft_middle_2")
{
name = "Elevator Shaft Level 1";
}
else if (zone == "zone_orange_elevator_shaft_bottom")
{
name = "Elevator Shaft Bottom";
}
else if (zone == "zone_orange_level3a")
{
name = "Lower Orange Highrise Level 1a";
}
else if (zone == "zone_orange_level3b")
{
name = "Lower Orange Highrise Level 1b";
}
else if (zone == "zone_blue_level5")
{
name = "Lower Blue Highrise Level 1";
}
else if (zone == "zone_blue_level4a")
{
name = "Lower Blue Highrise Level 2a";
}
else if (zone == "zone_blue_level4b")
{
name = "Lower Blue Highrise Level 2b";
}
else if (zone == "zone_blue_level4c")
{
name = "Lower Blue Highrise Level 2c";
}
else if (zone == "zone_blue_level2a")
{
name = "Upper Blue Highrise Level 1a";
}
else if (zone == "zone_blue_level2b")
{
name = "Upper Blue Highrise Level 1b";
}
else if (zone == "zone_blue_level2c")
{
name = "Upper Blue Highrise Level 1c";
}
else if (zone == "zone_blue_level2d")
{
name = "Upper Blue Highrise Level 1d";
}
else if (zone == "zone_blue_level1a")
{
name = "Upper Blue Highrise Level 2a";
}
else if (zone == "zone_blue_level1b")
{
name = "Upper Blue Highrise Level 2b";
}
else if (zone == "zone_blue_level1c")
{
name = "Upper Blue Highrise Level 2c";
}
}
else if (level.script == "zm_prison")
{
if (zone == "zone_start")
{
name = "D-Block";
}
else if (zone == "zone_library")
{
name = "Library";
}
else if (zone == "zone_cellblock_west")
{
name = "Cell Block 2nd Floor & C-D Street";
}
else if (zone == "zone_cellblock_west_gondola")
{
name = "Cell Block 3rd Floor";
}
else if (zone == "zone_cellblock_west_gondola_dock")
{
name = "Upper Gondola Platform";
}
else if (zone == "zone_cellblock_west_barber")
{
name = "Michigan Avenue";
}
else if (zone == "zone_cellblock_east")
{
name = "Times Square";
}
else if (zone == "zone_cafeteria")
{
name = "Cafeteria";
}
else if (zone == "zone_cafeteria_end")
{
name = "Cafeteria End";
}
else if (zone == "zone_infirmary")
{
name = "Infirmary 1";
}
else if (zone == "zone_infirmary_roof")
{
name = "Infirmary 2";
}
else if (zone == "zone_roof_infirmary")
{
name = "Roof 1";
}
else if (zone == "zone_roof")
{
name = "Roof 2";
}
else if (zone == "zone_cellblock_west_warden")
{
name = "Sally Port";
}
else if (zone == "zone_warden_office")
{
name = "Warden's Office";
}
else if (zone == "cellblock_shower")
{
name = "Showers";
}
else if (zone == "zone_citadel_shower")
{
name = "Citadel To Showers";
}
else if (zone == "zone_citadel")
{
name = "Citadel";
}
else if (zone == "zone_citadel_warden")
{
name = "Citadel To Warden's Office";
}
else if (zone == "zone_citadel_stairs")
{
name = "Citadel Tunnels";
}
else if (zone == "zone_citadel_basement")
{
name = "Citadel Basement";
}
else if (zone == "zone_citadel_basement_building")
{
name = "China Alley";
}
else if (zone == "zone_studio")
{
name = "Building 64";
}
else if (zone == "zone_dock")
{
name = "Docks";
}
else if (zone == "zone_dock_puzzle")
{
name = "Docks Gates";
}
else if (zone == "zone_dock_gondola")
{
name = "Docks Bridge";
}
else if (zone == "zone_golden_gate_bridge")
{
name = "Golden Gate Bridge";
}
else if (zone == "zone_gondola_ride")
{
name = "Gondola";
}
}
else if (level.script == "zm_buried")
{
if (zone == "zone_start")
{
name = "Processing";
}
else if (zone == "zone_start_lower")
{
name = "Lower Processing";
}
else if (zone == "zone_tunnels_center")
{
name = "Center Tunnels";
}
else if (zone == "zone_tunnels_north")
{
name = "North Tunnels 2";
}
else if (zone == "zone_tunnels_north2")
{
name = "North Tunnels 1";
}
else if (zone == "zone_tunnels_south")
{
name = "South Tunnels 3";
}
else if (zone == "zone_tunnels_south2")
{
name = "South Tunnels 2";
}
else if (zone == "zone_tunnels_south3")
{
name = "South Tunnels 1";
}
else if (zone == "zone_street_lightwest")
{
name = "Outside General Store & Bank";
}
else if (zone == "zone_street_lightwest_alley")
{
name = "Outside General Store & Bank Alley";
}
else if (zone == "zone_morgue_upstairs")
{
name = "Morgue";
}
else if (zone == "zone_underground_jail")
{
name = "Jail Downstairs";
}
else if (zone == "zone_underground_jail2")
{
name = "Jail Upstairs";
}
else if (zone == "zone_general_store")
{
name = "General Store";
}
else if (zone == "zone_stables")
{
name = "Stables";
}
else if (zone == "zone_street_darkwest")
{
name = "Outside Gunsmith";
}
else if (zone == "zone_street_darkwest_nook")
{
name = "Outside Gunsmith Nook";
}
else if (zone == "zone_gun_store")
{
name = "Gunsmith";
}
else if (zone == "zone_bank")
{
name = "Bank";
}
else if (zone == "zone_tunnel_gun2stables")
{
name = "Stables & Gunsmith Tunnel 2";
}
else if (zone == "zone_tunnel_gun2stables2")
{
name = "Stables & Gunsmith Tunnel 1";
}
else if (zone == "zone_street_darkeast")
{
name = "Outside Saloon & Toy Store";
}
else if (zone == "zone_street_darkeast_nook")
{
name = "Outside Saloon & Toy Store Nook";
}
else if (zone == "zone_underground_bar")
{
name = "Saloon";
}
else if (zone == "zone_tunnel_gun2saloon")
{
name = "Saloon Tunnel";
}
else if (zone == "zone_toy_store")
{
name = "Toy Store Downstairs";
}
else if (zone == "zone_toy_store_floor2")
{
name = "Toy Store Upstairs";
}
else if (zone == "zone_toy_store_tunnel")
{
name = "Toy Store Tunnel";
}
else if (zone == "zone_candy_store")
{
name = "Candy Store Downstairs";
}
else if (zone == "zone_candy_store_floor2")
{
name = "Candy Store Upstairs";
}
else if (zone == "zone_street_lighteast")
{
name = "Outside Courthouse & Candy Store";
}
else if (zone == "zone_underground_courthouse")
{
name = "Courthouse Downstairs";
}
else if (zone == "zone_underground_courthouse2")
{
name = "Courthouse Upstairs";
}
else if (zone == "zone_street_fountain")
{
name = "Fountain";
}
else if (zone == "zone_church_graveyard")
{
name = "Graveyard";
}
else if (zone == "zone_church_main")
{
name = "Church Downstairs";
}
else if (zone == "zone_church_upstairs")
{
name = "Church Upstairs";
}
else if (zone == "zone_mansion_lawn")
{
name = "Mansion Lawn";
}
else if (zone == "zone_mansion")
{
name = "Mansion";
}
else if (zone == "zone_mansion_backyard")
{
name = "Mansion Backyard";
}
else if (zone == "zone_maze")
{
name = "Maze";
}
else if (zone == "zone_maze_staircase")
{
name = "Maze Staircase";
}
}
else if (level.script == "zm_tomb")
{
if (isDefined(self.teleporting) && self.teleporting)
{
return "";
}
if (zone == "zone_start")
{
name = "Lower Laboratory";
}
else if (zone == "zone_start_a")
{
name = "Upper Laboratory";
}
else if (zone == "zone_start_b")
{
name = "Generator 1";
}
else if (zone == "zone_bunker_1a")
{
name = "Generator 3 Bunker 1";
}
else if (zone == "zone_fire_stairs")
{
name = "Fire Tunnel";
}
else if (zone == "zone_bunker_1")
{
name = "Generator 3 Bunker 2";
}
else if (zone == "zone_bunker_3a")
{
name = "Generator 3";
}
else if (zone == "zone_bunker_3b")
{
name = "Generator 3 Bunker 3";
}
else if (zone == "zone_bunker_2a")
{
name = "Generator 2 Bunker 1";
}
else if (zone == "zone_bunker_2")
{
name = "Generator 2 Bunker 2";
}
else if (zone == "zone_bunker_4a")
{
name = "Generator 2";
}
else if (zone == "zone_bunker_4b")
{
name = "Generator 2 Bunker 3";
}
else if (zone == "zone_bunker_4c")
{
name = "Tank Station";
}
else if (zone == "zone_bunker_4d")
{
name = "Above Tank Station";
}
else if (zone == "zone_bunker_tank_c")
{
name = "Generator 2 Tank Route 1";
}
else if (zone == "zone_bunker_tank_c1")
{
name = "Generator 2 Tank Route 2";
}
else if (zone == "zone_bunker_4e")
{
name = "Generator 2 Tank Route 3";
}
else if (zone == "zone_bunker_tank_d")
{
name = "Generator 2 Tank Route 4";
}
else if (zone == "zone_bunker_tank_d1")
{
name = "Generator 2 Tank Route 5";
}
else if (zone == "zone_bunker_4f")
{
name = "zone_bunker_4f";
}
else if (zone == "zone_bunker_5a")
{
name = "Workshop Downstairs";
}
else if (zone == "zone_bunker_5b")
{
name = "Workshop Upstairs";
}
else if (zone == "zone_nml_2a")
{
name = "No Man's Land Walkway";
}
else if (zone == "zone_nml_2")
{
name = "No Man's Land Entrance";
}
else if (zone == "zone_bunker_tank_e")
{
name = "Generator 5 Tank Route 1";
}
else if (zone == "zone_bunker_tank_e1")
{
name = "Generator 5 Tank Route 2";
}
else if (zone == "zone_bunker_tank_e2")
{
name = "zone_bunker_tank_e2";
}
else if (zone == "zone_bunker_tank_f")
{
name = "Generator 5 Tank Route 3";
}
else if (zone == "zone_nml_1")
{
name = "Generator 5 Tank Route 4";
}
else if (zone == "zone_nml_4")
{
name = "Generator 5 Tank Route 5";
}
else if (zone == "zone_nml_0")
{
name = "Generator 5 Left Footstep";
}
else if (zone == "zone_nml_5")
{
name = "Generator 5 Right Footstep Walkway";
}
else if (zone == "zone_nml_farm")
{
name = "Generator 5";
}
else if (zone == "zone_nml_celllar")
{
name = "Generator 5 Cellar";
}
else if (zone == "zone_bolt_stairs")
{
name = "Lightning Tunnel";
}
else if (zone == "zone_nml_3")
{
name = "No Man's Land 1st Right Footstep";
}
else if (zone == "zone_nml_2b")
{
name = "No Man's Land Stairs";
}
else if (zone == "zone_nml_6")
{
name = "No Man's Land Left Footstep";
}
else if (zone == "zone_nml_8")
{
name = "No Man's Land 2nd Right Footstep";
}
else if (zone == "zone_nml_10a")
{
name = "Generator 4 Tank Route 1";
}
else if (zone == "zone_nml_10")
{
name = "Generator 4 Tank Route 2";
}
else if (zone == "zone_nml_7")
{
name = "Generator 4 Tank Route 3";
}
else if (zone == "zone_bunker_tank_a")
{
name = "Generator 4 Tank Route 4";
}
else if (zone == "zone_bunker_tank_a1")
{
name = "Generator 4 Tank Route 5";
}
else if (zone == "zone_bunker_tank_a2")
{
name = "zone_bunker_tank_a2";
}
else if (zone == "zone_bunker_tank_b")
{
name = "Generator 4 Tank Route 6";
}
else if (zone == "zone_nml_9")
{
name = "Generator 4 Left Footstep";
}
else if (zone == "zone_air_stairs")
{
name = "Wind Tunnel";
}
else if (zone == "zone_nml_11")
{
name = "Generator 4";
}
else if (zone == "zone_nml_12")
{
name = "Generator 4 Right Footstep";
}
else if (zone == "zone_nml_16")
{
name = "Excavation Site Front Path";
}
else if (zone == "zone_nml_17")
{
name = "Excavation Site Back Path";
}
else if (zone == "zone_nml_18")
{
name = "Excavation Site Level 3";
}
else if (zone == "zone_nml_19")
{
name = "Excavation Site Level 2";
}
else if (zone == "ug_bottom_zone")
{
name = "Excavation Site Level 1";
}
else if (zone == "zone_nml_13")
{
name = "Generator 5 To Generator 6 Path";
}
else if (zone == "zone_nml_14")
{
name = "Generator 4 To Generator 6 Path";
}
else if (zone == "zone_nml_15")
{
name = "Generator 6 Entrance";
}
else if (zone == "zone_village_0")
{
name = "Generator 6 Left Footstep";
}
else if (zone == "zone_village_5")
{
name = "Generator 6 Tank Route 1";
}
else if (zone == "zone_village_5a")
{
name = "Generator 6 Tank Route 2";
}
else if (zone == "zone_village_5b")
{
name = "Generator 6 Tank Route 3";
}
else if (zone == "zone_village_1")
{
name = "Generator 6 Tank Route 4";
}
else if (zone == "zone_village_4b")
{
name = "Generator 6 Tank Route 5";
}
else if (zone == "zone_village_4a")
{
name = "Generator 6 Tank Route 6";
}
else if (zone == "zone_village_4")
{
name = "Generator 6 Tank Route 7";
}
else if (zone == "zone_village_2")
{
name = "Church";
}
else if (zone == "zone_village_3")
{
name = "Generator 6 Right Footstep";
}
else if (zone == "zone_village_3a")
{
name = "Generator 6";
}
else if (zone == "zone_ice_stairs")
{
name = "Ice Tunnel";
}
else if (zone == "zone_bunker_6")
{
name = "Above Generator 3 Bunker";
}
else if (zone == "zone_nml_20")
{
name = "Above No Man's Land";
}
else if (zone == "zone_village_6")
{
name = "Behind Church";
}
else if (zone == "zone_chamber_0")
{
name = "The Crazy Place Lightning Chamber";
}
else if (zone == "zone_chamber_1")
{
name = "The Crazy Place Lightning & Ice";
}
else if (zone == "zone_chamber_2")
{
name = "The Crazy Place Ice Chamber";
}
else if (zone == "zone_chamber_3")
{
name = "The Crazy Place Fire & Lightning";
}
else if (zone == "zone_chamber_4")
{
name = "The Crazy Place Center";
}
else if (zone == "zone_chamber_5")
{
name = "The Crazy Place Ice & Wind";
}
else if (zone == "zone_chamber_6")
{
name = "The Crazy Place Fire Chamber";
}
else if (zone == "zone_chamber_7")
{
name = "The Crazy Place Wind & Fire";
}
else if (zone == "zone_chamber_8")
{
name = "The Crazy Place Wind Chamber";
}
else if (zone == "zone_robot_head")
{
name = "Robot's Head";
}
}
return name;
}
bleedout_bar_hud()
{
self endon("disconnect");
flag_wait( "hud_visible" );
while (1)
{
self waittill("entering_last_stand");
if(is_gametype_active("zcleansed"))
{
continue;
}
// don't show for last player downed
if(!self maps\mp\zombies\_zm_laststand::player_is_in_laststand())
{
continue;
}
if(flag("solo_game"))
{
continue;
}
hud = self createbar((1, 0, 0), level.secondaryprogressbarwidth * 2, level.secondaryprogressbarheight);
hud setpoint("CENTER", undefined, level.secondaryprogressbarx, -1 * level.secondaryprogressbary);
hud.hidewheninmenu = 1;
hud.bar.hidewheninmenu = 1;
hud.barframe.hidewheninmenu = 1;
hud.sort = 1;
hud.bar.sort = 2;
hud.barframe.sort = 3;
hud.barframe destroy();
hud thread destroy_on_intermission();
self thread bleedout_bar_hud_updatebar(hud);
self waittill_any("player_revived", "bled_out", "player_suicide");
hud.bar destroy();
hud destroy();
}
}
// scaleovertime doesn't work past 30 seconds so here is a workaround
bleedout_bar_hud_updatebar(hud)
{
self endon("player_revived");
self endon("bled_out");
self endon("player_suicide");
vars = [];
vars["bleedout_time"] = getDvarInt("player_lastStandBleedoutTime");
vars["interval_time"] = 30;
vars["interval_frac"] = vars["interval_time"] / vars["bleedout_time"];
vars["num_intervals"] = int(vars["bleedout_time"] / vars["interval_time"]) + 1;
hud updatebar(1);
for(i = 0; i < vars["num_intervals"]; i++)
{
vars["time"] = vars["bleedout_time"];
if(vars["time"] > vars["interval_time"])
{
vars["time"] = vars["interval_time"];
}
vars["frac"] = 0.99 - ((i + 1) * vars["interval_frac"]);
barwidth = int((hud.width * vars["frac"]) + 0.5);
if(barwidth < 1)
{
barwidth = 1;
}
hud.bar scaleovertime(vars["time"], barwidth, hud.height);
wait vars["time"];
vars["bleedout_time"] -= vars["time"];
}
}
last_stand_pistol_swap()
{
if ( self has_powerup_weapon() )
{
self.lastactiveweapon = "none";
}
if ( !self hasweapon( self.laststandpistol ) )
{
if ( !is_weapon_upgraded( self.laststandpistol ) )
{
self giveweapon( self.laststandpistol );
}
else
{
self giveweapon( self.laststandpistol, 0, self get_pack_a_punch_weapon_options( self.laststandpistol ) );
}
}
amt = 0;
ammoclip = weaponclipsize( self.laststandpistol );
doubleclip = ammoclip * 2;
dual_wield_wep = weapondualwieldweaponname( self.laststandpistol );
if ( dual_wield_wep != "none" )
{
ammoclip += weaponclipsize( dual_wield_wep );
doubleclip = ammoclip;
}
if ( is_true( self._special_solo_pistol_swap ) || self.laststandpistol == level.default_solo_laststandpistol && !self.hadpistol )
{
self._special_solo_pistol_swap = 0;
self.hadpistol = 0;
amt = ammoclip;
}
else if ( flag( "solo_game" ) && self.laststandpistol == level.default_solo_laststandpistol )
{
amt = ammoclip;
}
else if ( self.laststandpistol == level.default_laststandpistol )
{
amt = ammoclip + doubleclip;
}
else if ( self.laststandpistol == "ray_gun_zm" || self.laststandpistol == "ray_gun_upgraded_zm" || self.laststandpistol == "raygun_mark2_zm" || self.laststandpistol == "raygun_mark2_upgraded_zm" || self.laststandpistol == level.default_solo_laststandpistol )
{
amt = ammoclip;
if ( self.hadpistol && amt > self.stored_weapon_info[self.laststandpistol].total_amt )
{
amt = self.stored_weapon_info[self.laststandpistol].total_amt;
}
self.stored_weapon_info[self.laststandpistol].given_amt = amt;
}
else
{
amt = ammoclip + doubleclip;
if ( self.hadpistol && amt > self.stored_weapon_info[self.laststandpistol].total_amt )
{
amt = self.stored_weapon_info[self.laststandpistol].total_amt;
}
self.stored_weapon_info[self.laststandpistol].given_amt = amt;
}
clip_amt = weaponclipsize( self.laststandpistol );
if ( clip_amt > amt )
{
clip_amt = amt;
}
self setweaponammoclip( self.laststandpistol, clip_amt );
amt -= clip_amt;
if ( dual_wield_wep != "none" )
{
left_clip_amt = weaponclipsize( dual_wield_wep );
if ( left_clip_amt > amt )
{
left_clip_amt = amt;
}
self set_weapon_ammo_clip_left( self.laststandpistol, left_clip_amt );
amt -= left_clip_amt;
}
stock_amt = doubleclip;
if ( stock_amt > amt )
{
stock_amt = amt;
}
self setweaponammostock( self.laststandpistol, stock_amt );
self switchtoweapon( self.laststandpistol );
}
last_stand_restore_pistol_ammo(only_store_info = false)
{
self.weapon_taken_by_losing_specialty_additionalprimaryweapon = undefined;
if ( !isDefined( self.stored_weapon_info ) )
{
return;
}
weapon_inventory = self getweaponslist( 1 );
weapon_to_restore = getarraykeys( self.stored_weapon_info );
i = 0;
while ( i < weapon_inventory.size )
{
weapon = weapon_inventory[ i ];
if(weapon != self.laststandpistol)
{
i++;
continue;
}
for ( j = 0; j < weapon_to_restore.size; j++ )
{
check_weapon = weapon_to_restore[ j ];
if ( weapon == check_weapon )
{
if (self.stored_weapon_info[ weapon ].given_amt == 0)
{
self setweaponammoclip( weapon, self.stored_weapon_info[ weapon ].clip_amt );
if ( "none" != dual_wield_name )
self set_weapon_ammo_clip_left( weapon, self.stored_weapon_info[ weapon ].left_clip_amt );
self setweaponammostock( weapon, self.stored_weapon_info[ weapon ].stock_amt );
break;
}
dual_wield_name = weapondualwieldweaponname( weapon );
last_clip = self getweaponammoclip( weapon );
last_left_clip = 0;
if( "none" != dual_wield_name )
{
last_left_clip = self getweaponammoclip( dual_wield_name );
}
last_stock = self getweaponammostock( weapon );
last_total = last_clip + last_left_clip + last_stock;
self.stored_weapon_info[ weapon ].used_amt = self.stored_weapon_info[ weapon ].given_amt - last_total;
if (only_store_info)
{
break;
}
used_amt = self.stored_weapon_info[ weapon ].used_amt;
if (used_amt >= self.stored_weapon_info[ weapon ].stock_amt)
{
used_amt -= self.stored_weapon_info[ weapon ].stock_amt;
self.stored_weapon_info[ weapon ].stock_amt = 0;
if( "none" != dual_wield_name )
{
if (used_amt >= self.stored_weapon_info[ weapon ].left_clip_amt)
{
used_amt -= self.stored_weapon_info[ weapon ].left_clip_amt;
self.stored_weapon_info[ weapon ].left_clip_amt = 0;
if (used_amt >= self.stored_weapon_info[ weapon ].clip_amt)
{
used_amt -= self.stored_weapon_info[ weapon ].clip_amt;
self.stored_weapon_info[ weapon ].clip_amt = 0;
}
else
{
self.stored_weapon_info[ weapon ].clip_amt -= used_amt;
}
}
else
{
self.stored_weapon_info[ weapon ].left_clip_amt -= used_amt;
}
}
else
{
if (used_amt >= self.stored_weapon_info[ weapon ].clip_amt)
{
used_amt -= self.stored_weapon_info[ weapon ].clip_amt;
self.stored_weapon_info[ weapon ].clip_amt = 0;
}
else
{
self.stored_weapon_info[ weapon ].clip_amt -= used_amt;
}
}
}
else
{
self.stored_weapon_info[ weapon ].stock_amt -= used_amt;
}
self setweaponammoclip( weapon, self.stored_weapon_info[ weapon ].clip_amt );
if ( "none" != dual_wield_name )
self set_weapon_ammo_clip_left( weapon, self.stored_weapon_info[ weapon ].left_clip_amt );
self setweaponammostock( weapon, self.stored_weapon_info[ weapon ].stock_amt );
break;
}
}
i++;
}
}
// setweaponammoclip on dual wield left weapons only works when the weapon is given
set_weapon_ammo_clip_left( weapon, amount )
{
dual_wield_weapon = weaponDualWieldWeaponName(weapon);
alt_weapon = weaponAltWeaponName(weapon);
clip_ammo = self getweaponammoclip(weapon);
stock_ammo = self getweaponammostock(weapon);
alt_clip_ammo = self getweaponammoclip(alt_weapon);
alt_stock_ammo = self getweaponammostock(alt_weapon);
self takeweapon(weapon);
self giveweapon(weapon, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options(weapon));
self setweaponammoclip(weapon, clip_ammo);
self setweaponammostock(weapon, stock_ammo);
self setweaponammoclip(alt_weapon, alt_clip_ammo);
self setweaponammostock(alt_weapon, alt_stock_ammo);
self setweaponammoclip(dual_wield_weapon, amount);
self seteverhadweaponall(1);
}
setscoreboardcolumns_gametype()
{
if(getDvar("g_gametype") == "zgrief")
{
if (level.scr_zm_ui_gametype_obj == "zcontainment" || level.scr_zm_ui_gametype_obj == "zmeat")
{
setscoreboardcolumns("score", "captures", "killsconfirmed", "downs", "revives");
}
else if (level.scr_zm_ui_gametype_obj == "zgrief" || level.scr_zm_ui_gametype_obj == "zsnr")
{
setscoreboardcolumns("score", "killsdenied", "killsconfirmed", "downs", "revives");
}
else
{
setscoreboardcolumns("score", "kills", "killsconfirmed", "downs", "revives");
}
}
else
{
setscoreboardcolumns("score", "kills", "headshots", "downs", "revives");
}
}
set_lethal_grenade_init()
{
if (level.script != "zm_transit" && level.script != "zm_nuked" && level.script != "zm_highrise" && level.script != "zm_tomb")
{
return;
}
level.zombie_lethal_grenade_player_init = "sticky_grenade_zm";
}
swap_staminup_perk()
{
vending_triggers = getentarray("zombie_vending", "targetname");
foreach (trigger in vending_triggers)
{
if (trigger.script_noteworthy == "specialty_longersprint")
{
trigger.script_noteworthy = "specialty_movefaster";
}
}
if (isDefined(level._random_perk_machine_perk_list))
{
for (i = 0; i < level._random_perk_machine_perk_list.size; i++)
{
if (level._random_perk_machine_perk_list[i] == "specialty_longersprint")
{
level._random_perk_machine_perk_list[i] = "specialty_movefaster";
}
}
}
}
veryhurt_blood_fx()
{
self endon( "disconnect" );
while(1)
{
health_ratio = self.health / self.maxhealth;
if(health_ratio <= 0.2)
{
playFXOnTag(level._effect["zombie_guts_explosion"], self, "J_SpineLower");
wait 1;
continue;
}
wait 0.05;
}
}
ignoreme_after_revived()
{
self endon("disconnect");
while(1)
{
self waittill("player_revived", reviver);
self thread player_revive_protection();
}
}
player_revive_protection()
{
self endon("disconnect");
self endon("player_downed");
self endon("meat_grabbed");
self endon("meat_stink_player_start");
self thread player_revive_protection_timeout();
self.revive_protection = 1;
for(i = 0; i < 20; i++)
{
self.ignoreme = 1;
wait 0.05;
}
if (!isDefined(level.meat_player))
{
self.ignoreme = 0;
}
self.revive_protection = 0;
self notify("player_revive_protection_end");
}
player_revive_protection_timeout()
{
self endon("disconnect");
self endon("player_revive_protection_end");
self waittill_any("player_downed", "meat_grabbed", "meat_stink_player_start");
self.revive_protection = 0;
}
fall_velocity_check()
{
self endon("disconnect");
vars = [];
while (1)
{
vars["was_on_ground"] = 1;
self.fall_velocity = 0;
while (!self isOnGround())
{
vars["was_on_ground"] = 0;
vel = self getVelocity();
self.fall_velocity = vel[2];
wait 0.05;
}
if (!vars["was_on_ground"])
{
// fall damage does not register when player's max health is less than 100 and has PHD Flopper
if(self.maxhealth < 100 && self hasPerk("specialty_flakjacket"))
{
if(is_true(self.divetoprone) && self.fall_velocity <= -300)
{
if(isDefined(level.zombiemode_divetonuke_perk_func))
{
[[level.zombiemode_divetonuke_perk_func]](self, self.origin);
}
}
}
continue;
}
wait 0.05;
}
}
melee_weapon_switch_watcher()
{
self endon("disconnect");
vars = [];
vars["prev_wep"] = undefined;
while(1)
{
if (is_true(self.use_staff_melee))
{
wait 0.05;
continue;
}
vars["melee_wep"] = self get_player_melee_weapon();
vars["curr_wep"] = self getCurrentWeapon();
if(vars["curr_wep"] != "none" && !is_offhand_weapon(vars["curr_wep"]))
{
vars["prev_wep"] = vars["curr_wep"];
}
if(self actionSlotTwoButtonPressed() && !self hasWeapon("time_bomb_zm") && !self hasWeapon("time_bomb_detonator_zm") && !self hasWeapon("equip_dieseldrone_zm") && !self hasWeapon("item_meat_zm"))
{
if(vars["curr_wep"] != vars["melee_wep"])
{
self switchToWeapon(vars["melee_wep"]);
}
else
{
self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon(vars["prev_wep"]);
}
}
wait 0.05;
}
}
disable_bank_teller()
{
level notify( "stop_bank_teller" );
bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
if(IsDefined(bank_teller_dmg_trig))
{
bank_teller_transfer_trig = getent( bank_teller_dmg_trig.target, "targetname" );
bank_teller_dmg_trig delete();
bank_teller_transfer_trig delete();
}
}
disable_carpenter()
{
arrayremovevalue(level.zombie_powerup_array, "carpenter");
}
change_weapon_ammo(weapon)
{
max_ammo = 0;
if (isSubStr(weapon, "m1911"))
{
if (is_weapon_upgraded(weapon))
{
if (level.scr_zm_ui_gametype == "zgrief")
{
max_ammo = 24;
}
else
{
max_ammo = 48;
}
}
}
else if (isSubStr(weapon, "an94"))
{
if (is_weapon_upgraded(weapon))
{
max_ammo = 450;
}
}
else if (isSubStr(weapon, "mp44"))
{
if (is_weapon_upgraded(weapon))
{
max_ammo = 300;
}
}
else if (isSubStr(weapon, "slipgun"))
{
max_ammo = 20;
}
if (max_ammo == 0)
{
return;
}
if (self getWeaponAmmoStock(weapon) > max_ammo)
{
self setWeaponAmmoStock(weapon, max_ammo);
}
}
wallbuy_location_changes()
{
if(!is_classic())
{
if(level.scr_zm_map_start_location == "farm")
{
if(level.scr_zm_ui_gametype == "zstandard")
{
level thread remove_wallbuy("tazer_knuckles_zm");
}
level thread remove_wallbuy("rottweil72_zm");
add_wallbuy("870mcs_zm", "zclassic");
add_wallbuy("claymore_zm");
}
if(level.scr_zm_map_start_location == "street")
{
if(level.scr_zm_ui_gametype == "zgrief")
{
add_wallbuy("beretta93r_zm");
add_wallbuy("m16_zm");
add_wallbuy("claymore_zm");
add_wallbuy("bowie_knife_zm");
}
}
}
}
remove_wallbuy( name )
{
flag_wait( "start_zombie_round_logic" );
wait 0.05;
for(i = 0; i < level._unitriggers.trigger_stubs.size; i++)
{
if(IsDefined(level._unitriggers.trigger_stubs[i].zombie_weapon_upgrade) && level._unitriggers.trigger_stubs[i].zombie_weapon_upgrade == name)
{
maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( level._unitriggers.trigger_stubs[i] );
}
}
}
add_wallbuy( name, script_noteworthy )
{
struct = undefined;
spawnable_weapon_spawns = getstructarray( "weapon_upgrade", "targetname" );
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "bowie_upgrade", "targetname" ), 1, 0 );
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "sickle_upgrade", "targetname" ), 1, 0 );
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "tazer_upgrade", "targetname" ), 1, 0 );
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "buildable_wallbuy", "targetname" ), 1, 0 );
spawnable_weapon_spawns = arraycombine( spawnable_weapon_spawns, getstructarray( "claymore_purchase", "targetname" ), 1, 0 );
for(i = 0; i < spawnable_weapon_spawns.size; i++)
{
if(IsDefined(spawnable_weapon_spawns[i].zombie_weapon_upgrade) && spawnable_weapon_spawns[i].zombie_weapon_upgrade == name)
{
if(isDefined(script_noteworthy) && isDefined(spawnable_weapon_spawns[i].script_noteworthy) && !isSubStr(spawnable_weapon_spawns[i].script_noteworthy, script_noteworthy))
{
continue;
}
struct = spawnable_weapon_spawns[i];
break;
}
}
if(!IsDefined(struct))
{
return;
}
scripts\zm\replaced\utility::wallbuy( name, struct.target, struct.targetname, struct.origin, struct.angles );
}
wallbuy_cost_changes()
{
flag_wait( "initial_blackscreen_passed" );
if (isDefined(level.zombie_weapons["beretta93r_zm"]))
{
cost = 900;
level.zombie_weapons["beretta93r_zm"].cost = cost;
level.zombie_weapons["beretta93r_zm"].ammo_cost = int(cost / 2);
}
if (isDefined(level.zombie_weapons["870mcs_zm"]))
{
cost = 1200;
level.zombie_weapons["870mcs_zm"].cost = cost;
level.zombie_weapons["870mcs_zm"].ammo_cost = int(cost / 2);
}
if (isDefined(level.zombie_weapons["an94_zm"]))
{
cost = 1500;
level.zombie_weapons["an94_zm"].cost = cost;
level.zombie_weapons["an94_zm"].ammo_cost = int(cost / 2);
}
if (isDefined(level.zombie_weapons["thompson_zm"]))
{
level.zombie_weapons["thompson_zm"].ammo_cost = 750;
}
}
grenade_fire_watcher()
{
level endon("end_game");
self endon("disconnect");
while(1)
{
self waittill("grenade_fire", grenade, weapname);
if (is_lethal_grenade(weapname) || is_tactical_grenade(weapname))
{
self thread temp_disable_offhand_weapons();
}
if (weapname == "willy_pete_zm" && !isDefined(self.smoke_grenade_cluster))
{
grenade thread smoke_grenade_cluster(self);
}
}
}
temp_disable_offhand_weapons()
{
self endon( "disconnect" );
self endon( "entering_last_stand" );
self disableOffhandWeapons();
while(self isThrowingGrenade())
{
wait 0.05;
}
if (!is_true(self.is_drinking))
{
self enableOffhandWeapons();
}
}
smoke_grenade_cluster(owner)
{
self waittill("explode", pos);
playsoundatposition( "zmb_land_meat", pos );
owner.smoke_grenade_cluster = true;
owner magicgrenadetype( "willy_pete_zm", pos, (0, 0, 0), 0 );
owner magicgrenadetype( "willy_pete_zm", pos, (0, 0, 0), 0 );
wait 0.05;
owner.smoke_grenade_cluster = undefined;
}
weapon_inspect_watcher()
{
level endon( "end_game" );
self endon( "disconnect" );
vars = [];
while(1)
{
wait 0.05;
if(self isSwitchingWeapons())
{
continue;
}
vars["curr_wep"] = self getCurrentWeapon();
vars["is_primary"] = 0;
foreach(wep in self getWeaponsListPrimaries())
{
if(wep == vars["curr_wep"])
{
vars["is_primary"] = 1;
break;
}
}
if(!vars["is_primary"])
{
continue;
}
if(self actionSlotThreeButtonPressed() && self getWeaponAmmoClip(vars["curr_wep"]) != 0)
{
self initialWeaponRaise(vars["curr_wep"]);
}
}
}
buildbuildables()
{
// need a wait or else some buildables dont build
wait 1;
if(is_classic())
{
if(level.scr_zm_map_start_location == "transit")
{
level.buildables_available = array("turbine", "riotshield_zm", "turret", "electric_trap", "jetgun_zm");
buildbuildable( "turbine" );
buildbuildable( "electric_trap" );
buildbuildable( "turret" );
buildbuildable( "riotshield_zm" );
buildbuildable( "jetgun_zm" );
buildbuildable( "powerswitch", 1 );
buildbuildable( "pap", 1 );
buildbuildable( "sq_common", 1 );
// power switch is not showing up from forced build
show_powerswitch();
}
else if(level.scr_zm_map_start_location == "rooftop")
{
level.buildables_available = array("springpad_zm", "slipgun_zm");
buildbuildable( "slipgun_zm" );
buildbuildable( "springpad_zm" );
buildbuildable( "sq_common", 1 );
}
else if(level.scr_zm_map_start_location == "processing")
{
flag_wait( "initial_blackscreen_passed" ); // wait for buildables to randomize
wait 1;
level.buildables_available = array("subwoofer_zm", "springpad_zm", "headchopper_zm");
removebuildable( "keys_zm" );
removebuildable( "booze" );
removebuildable( "candy" );
removebuildable( "sloth" );
buildbuildable( "turbine" );
buildbuildable( "subwoofer_zm" );
buildbuildable( "springpad_zm" );
buildbuildable( "headchopper_zm" );
buildbuildable( "sq_common", 1 );
buildbuildable( "buried_sq_bt_m_tower", 0, 1, ::onuseplantobject_mtower );
buildbuildable( "buried_sq_bt_r_tower", 0, 1, ::onuseplantobject_rtower );
}
}
else
{
if(level.scr_zm_map_start_location == "street")
{
flag_wait( "initial_blackscreen_passed" ); // wait for buildables to be built
wait 1;
updatebuildables();
removebuildable( "turbine", "buried" );
removebuildable( "headchopper_zm", "buried" ); // TODO - remove line when headchopper anims work on Borough
}
}
}
buildbuildable( buildable, craft = 0, solo_pool = 0, onuse )
{
player = get_players()[0];
foreach (stub in level.buildable_stubs)
{
if ( !isDefined( buildable ) || stub.equipname == buildable )
{
if ( isDefined( buildable ) || stub.persistent != 3 )
{
stub.cost = stub get_equipment_cost();
stub.trigger_func = scripts\zm\replaced\_zm_buildables_pooled::pooled_buildable_place_think;
if (isDefined(onuse))
{
stub.buildablestruct.onuseplantobject = onuse;
}
if (craft)
{
stub maps\mp\zombies\_zm_buildables::buildablestub_finish_build( player );
stub maps\mp\zombies\_zm_buildables::buildablestub_remove();
if (isdefined(stub.model))
{
stub.model notsolid();
stub.model show();
}
}
else
{
if (level.script == "zm_buried")
{
if (solo_pool)
{
stub.solo_pool = 1;
scripts\zm\replaced\_zm_buildables_pooled::add_buildable_to_pool(stub, stub.equipname);
}
}
else
{
scripts\zm\replaced\_zm_buildables_pooled::add_buildable_to_pool(stub, level.script);
}
level.zombie_buildables[stub.equipname].hint = "Hold ^3[{+activate}]^7 to craft " + stub get_equipment_display_name();
}
foreach (piece in stub.buildablezone.pieces)
{
piece maps\mp\zombies\_zm_buildables::piece_unspawn();
}
return;
}
}
}
}
get_equipment_display_name()
{
if (self.equipname == "turbine")
{
return "Turbine";
}
else if (self.equipname == "turret")
{
return "Turret";
}
else if (self.equipname == "electric_trap")
{
return "Electric Trap";
}
else if (self.equipname == "riotshield_zm" || self.equipname == "alcatraz_shield_zm" || self.equipname == "tomb_shield_zm")
{
return "Zombie Shield";
}
else if (self.equipname == "jetgun_zm")
{
return "Jet Gun";
}
else if (self.equipname == "slipgun_zm")
{
return "Sliquifier";
}
else if (self.equipname == "subwoofer_zm")
{
return "Subsurface Resonator";
}
else if (self.equipname == "springpad_zm")
{
return "Trample Steam";
}
else if (self.equipname == "headchopper_zm")
{
return "Head Chopper";
}
else if (self.equipname == "buried_sq_bt_r_tower")
{
return "Guillotine";
}
else if (self.equipname == "buried_sq_bt_m_tower")
{
return "Noose";
}
return "";
}
get_equipment_cost()
{
if (self.equipname == "turbine")
{
return 500;
}
else if (self.equipname == "jetgun_zm")
{
return 10000;
}
else if (self.equipname == "slipgun_zm")
{
return 10000;
}
else if (self.equipname == "packasplat")
{
return 2500;
}
return 1000;
}
// adds updated hintstring and functionality
updatebuildables()
{
foreach (stub in level._unitriggers.trigger_stubs)
{
if(IsDefined(stub.equipname))
{
stub.cost = stub get_equipment_cost();
stub.trigger_func = scripts\zm\replaced\_zm_buildables_pooled::pooled_buildable_place_think;
stub.prompt_and_visibility_func = scripts\zm\replaced\_zm_buildables_pooled::pooledbuildabletrigger_update_prompt;
}
}
}
removebuildable( buildable, poolname )
{
if (isDefined(poolname))
{
foreach (stub in level.buildablepools[poolname].stubs)
{
if(IsDefined(stub.equipname) && stub.equipname == buildable)
{
stub.model hide();
maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub );
return;
}
}
}
else
{
foreach (stub in level.buildable_stubs)
{
if ( !isDefined( buildable ) || stub.equipname == buildable )
{
if ( isDefined( buildable ) || stub.persistent != 3 )
{
stub maps\mp\zombies\_zm_buildables::buildablestub_remove();
foreach (piece in stub.buildablezone.pieces)
{
piece maps\mp\zombies\_zm_buildables::piece_unspawn();
}
maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub );
return;
}
}
}
}
}
onuseplantobject_mtower( player )
{
level setclientfield( "sq_gl_b_vt", 1 );
level setclientfield( "sq_gl_b_bb", 1 );
level setclientfield( "sq_gl_b_a", 1 );
level setclientfield( "sq_gl_b_ws", 1 );
level notify( "mtower_object_planted" );
self maps\mp\zombies\_zm_buildables::buildablestub_finish_build( player );
player playsound( "zmb_buildable_complete" );
level thread unregister_tower_unitriggers();
}
onuseplantobject_rtower( player )
{
m_tower = getent( "sq_guillotine", "targetname" );
m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_crystal", "j_crystal_01" );
m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_satellite_dish", "j_satellite" );
m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_antenna", "j_antenna" );
m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_wire_spool", "j_spool" );
level notify( "rtower_object_planted" );
self maps\mp\zombies\_zm_buildables::buildablestub_finish_build( player );
player playsound( "zmb_buildable_complete" );
level thread unregister_tower_unitriggers();
}
sq_tower_spawn_attachment( str_model, str_tag )
{
m_part = spawn( "script_model", self gettagorigin( str_tag ) );
m_part.angles = self gettagangles( str_tag );
m_part setmodel( str_model );
}
unregister_tower_unitriggers()
{
foreach (stub in level.buildable_stubs)
{
if (isDefined(stub.equipname))
{
if (stub.equipname == "buried_sq_bt_m_tower" || stub.equipname == "buried_sq_bt_r_tower")
{
maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( stub );
}
}
}
}
// MOTD\Origins style buildables
buildcraftables()
{
// need a wait or else some buildables dont build
wait 1;
if(is_classic())
{
if(level.scr_zm_map_start_location == "prison")
{
buildcraftable( "alcatraz_shield_zm" );
buildcraftable( "packasplat" );
}
else if(level.scr_zm_map_start_location == "tomb")
{
buildcraftable( "tomb_shield_zm" );
buildcraftable( "equip_dieseldrone_zm" );
takecraftableparts( "gramophone" );
}
}
}
takecraftableparts( buildable )
{
player = get_players()[ 0 ];
foreach (stub in level.zombie_include_craftables)
{
if ( stub.name == buildable )
{
foreach (piece in stub.a_piecestubs)
{
piecespawn = piece.piecespawn;
if ( isDefined( piecespawn ) )
{
player player_take_piece( piecespawn );
}
}
return;
}
}
}
buildcraftable( buildable )
{
player = get_players()[ 0 ];
foreach (stub in level.a_uts_craftables)
{
if ( stub.craftablestub.name == buildable )
{
foreach (piece in stub.craftablespawn.a_piecespawns)
{
piecespawn = get_craftable_piece( stub.craftablestub.name, piece.piecename );
if ( isDefined( piecespawn ) )
{
player player_take_piece( piecespawn );
}
}
return;
}
}
}
get_craftable_piece( str_craftable, str_piece )
{
foreach (uts_craftable in level.a_uts_craftables)
{
if ( uts_craftable.craftablestub.name == str_craftable )
{
foreach (piecespawn in uts_craftable.craftablespawn.a_piecespawns)
{
if ( piecespawn.piecename == str_piece )
{
return piecespawn;
}
}
}
}
return undefined;
}
player_take_piece( piecespawn )
{
piecestub = piecespawn.piecestub;
damage = piecespawn.damage;
if ( isDefined( piecestub.onpickup ) )
{
piecespawn [[ piecestub.onpickup ]]( self );
}
if ( isDefined( piecestub.is_shared ) && piecestub.is_shared )
{
if ( isDefined( piecestub.client_field_id ) )
{
level setclientfield( piecestub.client_field_id, 1 );
}
}
else
{
if ( isDefined( piecestub.client_field_state ) )
{
self setclientfieldtoplayer( "craftable", piecestub.client_field_state );
}
}
piecespawn piece_unspawn();
piecespawn notify( "pickup" );
if ( isDefined( piecestub.is_shared ) && piecestub.is_shared )
{
piecespawn.in_shared_inventory = 1;
}
self adddstat( "buildables", piecespawn.craftablename, "pieces_pickedup", 1 );
}
piece_unspawn()
{
if ( isDefined( self.model ) )
{
self.model delete();
}
self.model = undefined;
if ( isDefined( self.unitrigger ) )
{
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.unitrigger );
}
self.unitrigger = undefined;
}
remove_buildable_pieces( buildable_name )
{
foreach (buildable in level.zombie_include_buildables)
{
if(IsDefined(buildable.name) && buildable.name == buildable_name)
{
pieces = buildable.buildablepieces;
for(i = 0; i < pieces.size; i++)
{
pieces[i] maps\mp\zombies\_zm_buildables::piece_unspawn();
}
return;
}
}
}
war_machine_explode_on_impact()
{
self endon("disconnect");
while(1)
{
self waittill("grenade_launcher_fire", grenade, weapname);
if(weapname == "m32_zm")
{
grenade thread grenade_explode_on_impact();
}
}
}
grenade_explode_on_impact()
{
self endon("death");
self waittill("grenade_bounce", pos);
self.origin = pos; // need this or position is slightly off
self resetmissiledetonationtime(0);
}
jetgun_heatval_changes()
{
self endon("disconnect");
if(!maps\mp\zombies\_zm_weapons::is_weapon_included("jetgun_zm"))
{
return;
}
vars = [];
vars["prev_heatval"] = 0;
vars["cooldown_amount"] = 0.1;
vars["melee_overheat_amount"] = 0.475;
while(1)
{
if(!IsDefined(self.jetgun_heatval))
{
vars["prev_heatval"] = 0;
wait 0.05;
continue;
}
vars["curr_heatval"] = self.jetgun_heatval;
vars["diff_heatval"] = vars["curr_heatval"] - vars["prev_heatval"];
if(self getCurrentWeapon() != "jetgun_zm")
{
self.jetgun_heatval -= vars["cooldown_amount"];
}
else if(self getCurrentWeapon() == "jetgun_zm" && self attackButtonPressed() && self isMeleeing())
{
self.jetgun_heatval += vars["melee_overheat_amount"];
}
else if(self getCurrentWeapon() == "jetgun_zm" && self attackButtonPressed())
{
self.jetgun_heatval -= abs(vars["diff_heatval"]) / 2;
}
else if(vars["diff_heatval"] < 0)
{
self.jetgun_heatval -= abs(vars["diff_heatval"]);
}
if(self.jetgun_heatval < 0)
{
self.jetgun_heatval = 0;
}
else if(self.jetgun_heatval > 99.9)
{
self.jetgun_heatval = 99.9;
}
if(self.jetgun_heatval != vars["curr_heatval"])
{
self setweaponoverheating(self.jetgun_overheating, self.jetgun_heatval);
}
vars["prev_heatval"] = self.jetgun_heatval;
wait 0.05;
}
}
jetgun_remove_forced_weapon_switch()
{
foreach (buildable in level.zombie_include_buildables)
{
if(IsDefined(buildable.name) && buildable.name == "jetgun_zm")
{
buildable.onbuyweapon = undefined;
return;
}
}
}
give_additional_perks()
{
self endon( "disconnect" );
for ( ;; )
{
self waittill_any("perk_acquired", "perk_lost");
if (self HasPerk("specialty_fastreload"))
{
self SetPerk("specialty_fastads");
self SetPerk("specialty_fastweaponswitch");
self Setperk( "specialty_fasttoss" );
}
else
{
self UnsetPerk("specialty_fastads");
self UnsetPerk("specialty_fastweaponswitch");
self Unsetperk( "specialty_fasttoss" );
}
if (self HasPerk("specialty_deadshot"))
{
self SetPerk("specialty_stalker");
self Setperk( "specialty_sprintrecovery" );
}
else
{
self UnsetPerk("specialty_stalker");
self Unsetperk( "specialty_sprintrecovery" );
}
}
}
weapon_locker_give_ammo_after_rounds()
{
self endon("disconnect");
while(1)
{
level waittill("end_of_round");
if(isDefined(self.stored_weapon_data))
{
if(self.stored_weapon_data["name"] != "none")
{
self.stored_weapon_data["clip"] = weaponClipSize(self.stored_weapon_data["name"]);
self.stored_weapon_data["stock"] = weaponMaxAmmo(self.stored_weapon_data["name"]);
}
if(self.stored_weapon_data["dw_name"] != "none")
{
self.stored_weapon_data["lh_clip"] = weaponClipSize(self.stored_weapon_data["dw_name"]);
}
if(self.stored_weapon_data["alt_name"] != "none")
{
self.stored_weapon_data["alt_clip"] = weaponClipSize(self.stored_weapon_data["alt_name"]);
self.stored_weapon_data["alt_stock"] = weaponMaxAmmo(self.stored_weapon_data["alt_name"]);
}
}
}
}
tombstone_spawn()
{
vars = [];
vars["powerup"] = spawn( "script_model", self.origin + vectorScale( ( 0, 0, 1 ), 40 ) );
vars["powerup"].angles = self.angles;
vars["powerup"] setmodel( "tag_origin" );
vars["icon"] = spawn( "script_model", self.origin + vectorScale( ( 0, 0, 1 ), 40 ) );
vars["icon"].angles = self.angles;
vars["icon"] setmodel( "ch_tombstone1" );
vars["icon"] linkto( vars["powerup"] );
vars["powerup"].icon = vars["icon"];
vars["powerup"].script_noteworthy = "player_tombstone_model";
vars["powerup"].player = self;
self thread maps\mp\zombies\_zm_tombstone::tombstone_clear();
vars["powerup"] thread tombstone_wobble();
vars["powerup"] thread tombstone_emp();
result = self waittill_any_return( "player_revived", "spawned_player", "disconnect" );
if (result == "disconnect")
{
vars["powerup"] tombstone_delete();
return;
}
vars["powerup"] thread tombstone_waypoint();
vars["powerup"] thread tombstone_timeout();
vars["powerup"] thread tombstone_grab();
}
tombstone_wobble()
{
self endon( "tombstone_grabbed" );
self endon( "tombstone_timedout" );
if ( isDefined( self ) )
{
playfxontag( level._effect[ "powerup_on_solo" ], self, "tag_origin" );
self playsound( "zmb_tombstone_spawn" );
self playloopsound( "zmb_tombstone_looper" );
}
while ( isDefined( self ) )
{
self rotateyaw( 360, 3 );
wait 2.9;
}
}
tombstone_emp()
{
self endon( "tombstone_timedout" );
self endon( "tombstone_grabbed" );
if ( !should_watch_for_emp() )
{
return;
}
while ( 1 )
{
level waittill( "emp_detonate", origin, radius );
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
{
playfx( level._effect[ "powerup_off" ], self.origin );
self thread tombstone_delete();
}
}
}
tombstone_waypoint()
{
hud = newClientHudElem(self.player);
hud.x = self.origin[0];
hud.y = self.origin[1];
hud.z = self.origin[2] + 40;
hud.alpha = 1;
hud.color = (0.5, 0.5, 0.5);
hud.hidewheninmenu = 1;
hud.fadewhentargeted = 1;
hud setShader("specialty_tombstone_zombies", 8, 8);
hud setWaypoint(1);
self waittill_any("tombstone_grabbed", "tombstone_timedout");
hud destroy();
}
tombstone_timeout()
{
self endon( "tombstone_grabbed" );
self thread maps\mp\zombies\_zm_tombstone::playtombstonetimeraudio();
self.player waittill("player_downed");
self tombstone_delete();
}
tombstone_grab()
{
self endon( "tombstone_timedout" );
while ( isDefined( self ) )
{
players = get_players();
i = 0;
while ( i < players.size )
{
if ( players[ i ].is_zombie )
{
i++;
continue;
}
else
{
if ( isDefined( self.player ) && players[ i ] == self.player )
{
dist = distance( players[ i ].origin, self.origin );
if ( dist < 64 )
{
playfx( level._effect[ "powerup_grabbed_solo" ], self.origin );
playfx( level._effect[ "powerup_grabbed_wave_solo" ], self.origin );
players[ i ] tombstone_give();
wait 0.1;
playsoundatposition( "zmb_tombstone_grab", self.origin );
self stoploopsound();
self.icon unlink();
self.icon delete();
self delete();
self notify( "tombstone_grabbed" );
players[ i ] clientnotify( "dc0" );
players[ i ] notify( "dance_on_my_grave" );
}
}
}
i++;
}
wait_network_frame();
}
}
tombstone_delete()
{
self notify( "tombstone_timedout" );
self.icon unlink();
self.icon delete();
self delete();
}
tombstone_save()
{
self.tombstone_savedweapon_weapons = self getweaponslist();
self.tombstone_savedweapon_weaponsammo_clip = [];
self.tombstone_savedweapon_weaponsammo_clip_dualwield = [];
self.tombstone_savedweapon_weaponsammo_stock = [];
self.tombstone_savedweapon_weaponsammo_clip_alt = [];
self.tombstone_savedweapon_weaponsammo_stock_alt = [];
self.tombstone_savedweapon_currentweapon = self getcurrentweapon();
self.tombstone_savedweapon_melee = self get_player_melee_weapon();
self.tombstone_savedweapon_grenades = self get_player_lethal_grenade();
self.tombstone_savedweapon_tactical = self get_player_tactical_grenade();
self.tombstone_savedweapon_mine = self get_player_placeable_mine();
self.tombstone_savedweapon_equipment = self get_player_equipment();
self.tombstone_hasriotshield = undefined;
self.tombstone_perks = tombstone_save_perks(self);
// can't switch to alt weapon
if(is_alt_weapon(self.tombstone_savedweapon_currentweapon))
{
self.tombstone_savedweapon_currentweapon = maps\mp\zombies\_zm_weapons::get_nonalternate_weapon(self.tombstone_savedweapon_currentweapon);
}
for ( i = 0; i < self.tombstone_savedweapon_weapons.size; i++ )
{
self.tombstone_savedweapon_weaponsammo_clip[ i ] = self getweaponammoclip( self.tombstone_savedweapon_weapons[ i ] );
self.tombstone_savedweapon_weaponsammo_clip_dualwield[ i ] = self getweaponammoclip(weaponDualWieldWeaponName( self.tombstone_savedweapon_weapons[ i ] ) );
self.tombstone_savedweapon_weaponsammo_stock[ i ] = self getweaponammostock( self.tombstone_savedweapon_weapons[ i ] );
self.tombstone_savedweapon_weaponsammo_clip_alt[i] = self getweaponammoclip(weaponAltWeaponName(self.tombstone_savedweapon_weapons[i]));
self.tombstone_savedweapon_weaponsammo_stock_alt[i] = self getweaponammostock(weaponAltWeaponName(self.tombstone_savedweapon_weapons[i]));
wep = self.tombstone_savedweapon_weapons[i];
dualwield_wep = weaponDualWieldWeaponName(wep);
alt_wep = weaponAltWeaponName(wep);
clip_missing = weaponClipSize(wep) - self.tombstone_savedweapon_weaponsammo_clip[i];
if (clip_missing > self.tombstone_savedweapon_weaponsammo_stock[i])
{
clip_missing = self.tombstone_savedweapon_weaponsammo_stock[i];
}
self.tombstone_savedweapon_weaponsammo_clip[i] += clip_missing;
self.tombstone_savedweapon_weaponsammo_stock[i] -= clip_missing;
if (dualwield_wep != "none")
{
clip_dualwield_missing = weaponClipSize(dualwield_wep) - self.tombstone_savedweapon_weaponsammo_clip_dualwield[i];
if (clip_dualwield_missing > self.tombstone_savedweapon_weaponsammo_stock[i])
{
clip_dualwield_missing = self.tombstone_savedweapon_weaponsammo_stock[i];
}
self.tombstone_savedweapon_weaponsammo_clip_dualwield[i] += clip_dualwield_missing;
self.tombstone_savedweapon_weaponsammo_stock[i] -= clip_dualwield_missing;
}
if (alt_wep != "none")
{
clip_alt_missing = weaponClipSize(alt_wep) - self.tombstone_savedweapon_weaponsammo_clip_alt[i];
if (clip_alt_missing > self.tombstone_savedweapon_weaponsammo_stock_alt[i])
{
clip_alt_missing = self.tombstone_savedweapon_weaponsammo_stock_alt[i];
}
self.tombstone_savedweapon_weaponsammo_clip_alt[i] += clip_alt_missing;
self.tombstone_savedweapon_weaponsammo_stock_alt[i] -= clip_alt_missing;
}
}
if ( isDefined( self.tombstone_savedweapon_grenades ) )
{
self.tombstone_savedweapon_grenades_clip = self getweaponammoclip( self.tombstone_savedweapon_grenades );
}
if ( isDefined( self.tombstone_savedweapon_tactical ) )
{
self.tombstone_savedweapon_tactical_clip = self getweaponammoclip( self.tombstone_savedweapon_tactical );
}
if ( isDefined( self.tombstone_savedweapon_mine ) )
{
self.tombstone_savedweapon_mine_clip = self getweaponammoclip( self.tombstone_savedweapon_mine );
}
if ( isDefined( self.hasriotshield ) && self.hasriotshield )
{
self.tombstone_hasriotshield = 1;
}
}
tombstone_save_perks( ent )
{
perk_array = [];
if ( ent hasperk( "specialty_armorvest" ) )
{
perk_array[ perk_array.size ] = "specialty_armorvest";
}
if ( ent hasperk( "specialty_deadshot" ) )
{
perk_array[ perk_array.size ] = "specialty_deadshot";
}
if ( ent hasperk( "specialty_fastreload" ) )
{
perk_array[ perk_array.size ] = "specialty_fastreload";
}
if ( ent hasperk( "specialty_flakjacket" ) )
{
perk_array[ perk_array.size ] = "specialty_flakjacket";
}
if ( ent hasperk( "specialty_movefaster" ) )
{
perk_array[ perk_array.size ] = "specialty_movefaster";
}
if ( ent hasperk( "specialty_quickrevive" ) )
{
perk_array[ perk_array.size ] = "specialty_quickrevive";
}
if ( ent hasperk( "specialty_rof" ) )
{
perk_array[ perk_array.size ] = "specialty_rof";
}
return perk_array;
}
tombstone_give()
{
if ( !isDefined( self.tombstone_savedweapon_weapons ) )
{
return;
}
primary_weapons = self getWeaponsListPrimaries();
foreach(weapon in primary_weapons)
{
self takeWeapon(weapon);
}
self takeWeapon(self get_player_melee_weapon());
self takeWeapon(self get_player_lethal_grenade());
self takeWeapon(self get_player_tactical_grenade());
self takeWeapon(self get_player_placeable_mine());
primary_weapons_returned = 0;
i = 0;
while ( i < self.tombstone_savedweapon_weapons.size )
{
if ( isdefined( self.tombstone_savedweapon_grenades ) && self.tombstone_savedweapon_weapons[ i ] == self.tombstone_savedweapon_grenades || ( isdefined( self.tombstone_savedweapon_tactical ) && self.tombstone_savedweapon_weapons[ i ] == self.tombstone_savedweapon_tactical ) )
{
i++;
continue;
}
if ( isweaponprimary( self.tombstone_savedweapon_weapons[ i ] ) )
{
if ( primary_weapons_returned >= 2 )
{
i++;
continue;
}
primary_weapons_returned++;
}
if ( "item_meat_zm" == self.tombstone_savedweapon_weapons[ i ] )
{
i++;
continue;
}
self giveweapon( self.tombstone_savedweapon_weapons[ i ], 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( self.tombstone_savedweapon_weapons[ i ] ) );
if ( isdefined( self.tombstone_savedweapon_weaponsammo_clip[ i ] ) )
{
self setweaponammoclip( self.tombstone_savedweapon_weapons[ i ], self.tombstone_savedweapon_weaponsammo_clip[ i ] );
}
if ( isdefined( self.tombstone_savedweapon_weaponsammo_clip_dualwield[ i ] ) )
{
self setweaponammoclip( weaponDualWieldWeaponName( self.tombstone_savedweapon_weapons[ i ] ), self.tombstone_savedweapon_weaponsammo_clip_dualwield[ i ] );
}
if ( isdefined( self.tombstone_savedweapon_weaponsammo_stock[ i ] ) )
{
self setweaponammostock( self.tombstone_savedweapon_weapons[ i ], self.tombstone_savedweapon_weaponsammo_stock[ i ] );
}
if ( isdefined( self.tombstone_savedweapon_weaponsammo_clip_alt[ i ] ) )
{
self setweaponammoclip( weaponAltWeaponName( self.tombstone_savedweapon_weapons[ i ] ), self.tombstone_savedweapon_weaponsammo_clip_alt[ i ] );
}
if ( isdefined( self.tombstone_savedweapon_weaponsammo_stock_alt[ i ] ) )
{
self setweaponammostock( weaponAltWeaponName( self.tombstone_savedweapon_weapons[ i ] ), self.tombstone_savedweapon_weaponsammo_stock_alt[ i ] );
}
i++;
}
if ( isDefined( self.tombstone_savedweapon_melee ) )
{
self set_player_melee_weapon( self.tombstone_savedweapon_melee );
}
if ( isDefined( self.tombstone_savedweapon_grenades ) )
{
self giveweapon( self.tombstone_savedweapon_grenades );
self set_player_lethal_grenade( self.tombstone_savedweapon_grenades );
if ( isDefined( self.tombstone_savedweapon_grenades_clip ) )
{
self setweaponammoclip( self.tombstone_savedweapon_grenades, self.tombstone_savedweapon_grenades_clip );
}
}
if ( isDefined( self.tombstone_savedweapon_tactical ) )
{
self giveweapon( self.tombstone_savedweapon_tactical );
self set_player_tactical_grenade( self.tombstone_savedweapon_tactical );
if ( isDefined( self.tombstone_savedweapon_tactical_clip ) )
{
self setweaponammoclip( self.tombstone_savedweapon_tactical, self.tombstone_savedweapon_tactical_clip );
}
}
if ( isDefined( self.tombstone_savedweapon_mine ) )
{
self giveweapon( self.tombstone_savedweapon_mine );
self set_player_placeable_mine( self.tombstone_savedweapon_mine );
self setactionslot( 4, "weapon", self.tombstone_savedweapon_mine );
self setweaponammoclip( self.tombstone_savedweapon_mine, self.tombstone_savedweapon_mine_clip );
}
if ( isDefined( self.current_equipment ) )
{
self maps\mp\zombies\_zm_equipment::equipment_take( self.current_equipment );
}
if ( isDefined( self.tombstone_savedweapon_equipment ) )
{
self.do_not_display_equipment_pickup_hint = 1;
self maps\mp\zombies\_zm_equipment::equipment_give( self.tombstone_savedweapon_equipment );
self.do_not_display_equipment_pickup_hint = undefined;
}
if ( isDefined( self.tombstone_hasriotshield ) && self.tombstone_hasriotshield )
{
if ( isDefined( self.player_shield_reset_health ) )
{
self [[ self.player_shield_reset_health ]]();
}
}
current_wep = self getCurrentWeapon();
if(!isSubStr(current_wep, "perk_bottle") && !isSubStr(current_wep, "knuckle_crack") && !isSubStr(current_wep, "flourish") && !isSubStr(current_wep, "item_meat"))
{
switched = 0;
primaries = self getweaponslistprimaries();
foreach ( weapon in primaries )
{
if ( isDefined( self.tombstone_savedweapon_currentweapon ) && self.tombstone_savedweapon_currentweapon == weapon )
{
switched = 1;
self switchtoweapon( weapon );
}
}
if(!switched)
{
if ( primaries.size > 0 )
{
self switchtoweapon( primaries[ 0 ] );
}
}
}
if ( isDefined( self.tombstone_perks ) && self.tombstone_perks.size > 0 )
{
i = 0;
while ( i < self.tombstone_perks.size )
{
if ( self hasperk( self.tombstone_perks[ i ] ) )
{
i++;
continue;
}
self maps\mp\zombies\_zm_perks::give_perk( self.tombstone_perks[ i ] );
i++;
}
}
}
additionalprimaryweapon_indicator()
{
self endon("disconnect");
if(!is_true(level.zombiemode_using_additionalprimaryweapon_perk))
{
return;
}
hud = newClientHudElem(self);
hud.alignx = "right";
hud.aligny = "bottom";
hud.horzalign = "user_right";
hud.vertalign = "user_bottom";
if (level.script == "zm_highrise")
{
hud.x -= 60;
hud.y -= 55;
}
else
{
hud.x -= 60;
hud.y -= 80;
}
hud.alpha = 0;
hud.color = ( 1, 1, 1 );
hud.hidewheninmenu = 1;
hud setShader("specialty_additionalprimaryweapon_zombies", 24, 24);
hud thread destroy_on_intermission();
while (1)
{
self waittill_any("weapon_change", "specialty_additionalprimaryweapon_stop", "player_downed", "spawned_player");
if (!is_player_valid(self) || !self hasPerk("specialty_additionalprimaryweapon"))
{
hud fadeOverTime(0.5);
hud.alpha = 0;
continue;
}
primary_weapons_that_can_be_taken = [];
primaryweapons = self getweaponslistprimaries();
for ( i = 0; i < primaryweapons.size; i++ )
{
if ( maps\mp\zombies\_zm_weapons::is_weapon_included( primaryweapons[i] ) || maps\mp\zombies\_zm_weapons::is_weapon_upgraded( primaryweapons[i] ) )
{
primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size] = primaryweapons[i];
}
}
pwtcbt = primary_weapons_that_can_be_taken.size;
if ( pwtcbt < 3 )
{
hud fadeOverTime(0.5);
hud.alpha = 0;
continue;
}
weapon = primary_weapons_that_can_be_taken[pwtcbt - 1];
if ( self getCurrentWeapon() != weapon )
{
hud fadeOverTime(0.5);
hud.alpha = 0;
continue;
}
self thread additionalprimaryweapon_indicator_show_and_hide(hud);
}
}
additionalprimaryweapon_indicator_show_and_hide(hud)
{
self endon("disconnect");
self endon("player_downed");
self endon("spawned_player");
self endon("weapon_change");
self endon("specialty_additionalprimaryweapon_stop");
hud fadeOverTime(0.5);
hud.alpha = 1;
wait 1.5;
hud fadeOverTime(0.5);
hud.alpha = 0;
}
additionalprimaryweapon_stowed_weapon_refill()
{
self endon("disconnect");
vars = [];
while (1)
{
vars["string"] = self waittill_any_return("weapon_change", "weapon_change_complete", "specialty_additionalprimaryweapon_stop", "spawned_player");
if(self hasPerk("specialty_additionalprimaryweapon"))
{
vars["curr_wep"] = self getCurrentWeapon();
if(vars["curr_wep"] == "none")
{
continue;
}
primaries = self getWeaponsListPrimaries();
foreach(primary in primaries)
{
if(primary != maps\mp\zombies\_zm_weapons::get_nonalternate_weapon(vars["curr_wep"]))
{
if(vars["string"] != "weapon_change")
{
self thread refill_after_time(primary);
}
}
else
{
self notify(primary + "_reload_stop");
}
}
}
}
}
refill_after_time(primary)
{
self endon(primary + "_reload_stop");
self endon("specialty_additionalprimaryweapon_stop");
self endon("spawned_player");
vars = [];
vars["reload_time"] = weaponReloadTime(primary);
vars["reload_amount"] = undefined;
if(primary == "m32_zm" || primary == "python_zm" || maps\mp\zombies\_zm_weapons::get_base_weapon_name(primary, 1) == "judge_zm" || maps\mp\zombies\_zm_weapons::get_base_weapon_name(primary, 1) == "870mcs_zm" || maps\mp\zombies\_zm_weapons::get_base_weapon_name(primary, 1) == "ksg_zm")
{
vars["reload_amount"] = 1;
if(maps\mp\zombies\_zm_weapons::get_base_weapon_name(primary, 1) == "ksg_zm" && maps\mp\zombies\_zm_weapons::is_weapon_upgraded(primary))
{
vars["reload_amount"] = 2;
}
}
if(!isDefined(vars["reload_amount"]) && vars["reload_time"] < 1)
{
vars["reload_time"] = 1;
}
if(self hasPerk("specialty_fastreload"))
{
vars["reload_time"] *= getDvarFloat("perk_weapReloadMultiplier");
}
wait vars["reload_time"];
vars["ammo_clip"] = self getWeaponAmmoClip(primary);
vars["ammo_stock"] = self getWeaponAmmoStock(primary);
vars["missing_clip"] = weaponClipSize(primary) - vars["ammo_clip"];
if(vars["missing_clip"] > vars["ammo_stock"])
{
vars["missing_clip"] = vars["ammo_stock"];
}
if(isDefined(vars["reload_amount"]) && vars["missing_clip"] > vars["reload_amount"])
{
vars["missing_clip"] = vars["reload_amount"];
}
self setWeaponAmmoClip(primary, vars["ammo_clip"] + vars["missing_clip"]);
self setWeaponAmmoStock(primary, vars["ammo_stock"] - vars["missing_clip"]);
vars["dw_primary"] = weaponDualWieldWeaponName(primary);
if(vars["dw_primary"] != "none")
{
vars["ammo_clip"] = self getWeaponAmmoClip(vars["dw_primary"]);
vars["ammo_stock"] = self getWeaponAmmoStock(vars["dw_primary"]);
vars["missing_clip"] = weaponClipSize(vars["dw_primary"]) - vars["ammo_clip"];
if(vars["missing_clip"] > vars["ammo_stock"])
{
vars["missing_clip"] = vars["ammo_stock"];
}
self setWeaponAmmoClip(vars["dw_primary"], vars["ammo_clip"] + vars["missing_clip"]);
self setWeaponAmmoStock(vars["dw_primary"], vars["ammo_stock"] - vars["missing_clip"]);
}
vars["alt_primary"] = weaponAltWeaponName(primary);
if(vars["alt_primary"] != "none")
{
vars["ammo_clip"] = self getWeaponAmmoClip(vars["alt_primary"]);
vars["ammo_stock"] = self getWeaponAmmoStock(vars["alt_primary"]);
vars["missing_clip"]= weaponClipSize(vars["alt_primary"]) - vars["ammo_clip"];
if(vars["missing_clip"]> vars["ammo_stock"])
{
vars["missing_clip"]= vars["ammo_stock"];
}
self setWeaponAmmoClip(vars["alt_primary"], vars["ammo_clip"] + vars["missing_clip"]);
self setWeaponAmmoStock(vars["alt_primary"], vars["ammo_stock"] - vars["missing_clip"]);
}
if(isDefined(vars["reload_amount"]) && self getWeaponAmmoStock(primary) > 0 && self getWeaponAmmoClip(primary) < weaponClipSize(primary))
{
self refill_after_time(primary);
}
}
electric_cherry_unlimited()
{
self endon( "disconnect" );
for ( ;; )
{
self.consecutive_electric_cherry_attacks = 0;
wait 0.5;
}
}
show_powerswitch()
{
getent( "powerswitch_p6_zm_buildable_pswitch_hand", "targetname" ) show();
getent( "powerswitch_p6_zm_buildable_pswitch_body", "targetname" ) show();
getent( "powerswitch_p6_zm_buildable_pswitch_lever", "targetname" ) show();
}
zone_changes()
{
if(level.script == "zm_transit")
{
if(level.scr_zm_map_start_location == "farm")
{
// Barn to Farm
flag_set("OnFarm_enter");
}
}
else if(level.script == "zm_highrise")
{
// Green Highrise to Lower Blue Highrise
level.zones[ "zone_green_level3b" ].adjacent_zones[ "zone_blue_level1c" ] structdelete();
level.zones[ "zone_green_level3b" ].adjacent_zones[ "zone_blue_level1c" ] = undefined;
// Lower Orange Highrise debris
level.zones[ "zone_orange_level3a" ].adjacent_zones[ "zone_orange_level3b" ].is_connected = 0;
level.zones[ "zone_orange_level3b" ].adjacent_zones[ "zone_orange_level3a" ].is_connected = 0;
}
}
should_respawn()
{
if (is_true(level.intermission))
{
return 0;
}
if (!flag("initial_blackscreen_passed"))
{
return 1;
}
if (isDefined(level.is_respawn_gamemode_func) && [[level.is_respawn_gamemode_func]]())
{
return 1;
}
return 0;
}
remove_status_icons_on_intermission()
{
level waittill("intermission");
players = get_players();
foreach(player in players)
{
player.statusicon = "";
}
}
destroy_on_end_game()
{
self endon("death");
level waittill("end_game");
if(isDefined(self.bar))
{
self.bar destroy();
}
if(isDefined(self.barframe))
{
self.barframe destroy();
}
self destroy();
}
destroy_on_intermission()
{
self endon("death");
level waittill("intermission");
if(isDefined(self.bar))
{
self.bar destroy();
}
if(isDefined(self.barframe))
{
self.barframe destroy();
}
self destroy();
}