mirror of
https://github.com/JezuzLizard/BO2-Reimagined.git
synced 2025-06-10 07:08:06 -05:00
Kills enemies that are in the ground, traversing, or behind barriers Awards points for kills Add back no longer kills when not firing correctly Add back overheating resets the heat value to 0
4520 lines
108 KiB
Plaintext
4520 lines
108 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;
|
|
#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_weapons;
|
|
#include scripts/zm/replaced/_zm_magicbox;
|
|
#include scripts/zm/replaced/_zm_perks;
|
|
#include scripts/zm/replaced/_zm_power;
|
|
#include scripts/zm/replaced/_zm_powerups;
|
|
#include scripts/zm/replaced/_zm_pers_upgrades;
|
|
#include scripts/zm/replaced/_zm_traps;
|
|
#include scripts/zm/replaced/_zm_equipment;
|
|
#include scripts/zm/replaced/_zm_spawner;
|
|
#include scripts/zm/replaced/_zm_ai_basic;
|
|
#include scripts/zm/replaced/_zm_melee_weapon;
|
|
#include scripts/zm/replaced/_zm_weap_ballistic_knife;
|
|
#include scripts/zm/replaced/_zm_weap_claymore;
|
|
|
|
main()
|
|
{
|
|
replaceFunc(common_scripts/utility::struct_class_init, scripts/zm/replaced/utility::struct_class_init);
|
|
replaceFunc(maps/mp/zombies/_zm::check_quickrevive_for_hotjoin, scripts/zm/replaced/_zm::check_quickrevive_for_hotjoin);
|
|
replaceFunc(maps/mp/zombies/_zm::ai_calculate_health, scripts/zm/replaced/_zm::ai_calculate_health);
|
|
replaceFunc(maps/mp/zombies/_zm::last_stand_pistol_rank_init, scripts/zm/replaced/_zm::last_stand_pistol_rank_init);
|
|
replaceFunc(maps/mp/zombies/_zm::actor_damage_override, scripts/zm/replaced/_zm::actor_damage_override);
|
|
replaceFunc(maps/mp/zombies/_zm::wait_and_revive, scripts/zm/replaced/_zm::wait_and_revive);
|
|
replaceFunc(maps/mp/zombies/_zm::end_game, scripts/zm/replaced/_zm::end_game);
|
|
replaceFunc(maps/mp/zombies/_zm_playerhealth::playerhealthregen, scripts/zm/replaced/_zm_playerhealth::playerhealthregen);
|
|
replaceFunc(maps/mp/zombies/_zm_utility::track_players_intersection_tracker, scripts/zm/replaced/_zm_utility::track_players_intersection_tracker);
|
|
replaceFunc(maps/mp/zombies/_zm_utility::is_headshot, scripts/zm/replaced/_zm_utility::is_headshot);
|
|
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_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_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_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_magicbox::treasure_chest_move, scripts/zm/replaced/_zm_magicbox::treasure_chest_move);
|
|
replaceFunc(maps/mp/zombies/_zm_magicbox::treasure_chest_timeout, scripts/zm/replaced/_zm_magicbox::treasure_chest_timeout);
|
|
replaceFunc(maps/mp/zombies/_zm_magicbox::timer_til_despawn, scripts/zm/replaced/_zm_magicbox::timer_til_despawn);
|
|
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_perks::destroy_weapon_in_blackout, scripts/zm/replaced/_zm_perks::destroy_weapon_in_blackout);
|
|
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_power::standard_powered_items, scripts/zm/replaced/_zm_power::standard_powered_items);
|
|
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_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_spawner::head_should_gib, scripts/zm/replaced/_zm_spawner::head_should_gib);
|
|
replaceFunc(maps/mp/zombies/_zm_ai_basic::inert_wakeup, scripts/zm/replaced/_zm_ai_basic::inert_wakeup);
|
|
replaceFunc(maps/mp/zombies/_zm_melee_weapon::change_melee_weapon, scripts/zm/replaced/_zm_melee_weapon::change_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);
|
|
}
|
|
|
|
init()
|
|
{
|
|
level.using_solo_revive = 0;
|
|
level.player_starting_health = 150;
|
|
level.claymores_max_per_player = 20;
|
|
|
|
setscoreboardcolumns_gametype();
|
|
set_lethal_grenade_init();
|
|
set_dvars();
|
|
|
|
level thread onplayerconnect();
|
|
level thread post_all_players_spawned();
|
|
|
|
level thread enemy_counter_hud();
|
|
level thread timer_hud();
|
|
}
|
|
|
|
onplayerconnect()
|
|
{
|
|
while(true)
|
|
{
|
|
level waittill("connecting", player);
|
|
|
|
if(isDefined(level.map_on_player_connect))
|
|
{
|
|
player thread [[level.map_on_player_connect]]();
|
|
}
|
|
|
|
player thread onplayerspawned();
|
|
player thread onplayerdowned();
|
|
}
|
|
}
|
|
|
|
onplayerspawned()
|
|
{
|
|
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 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 buildable_piece_remove_on_last_stand();
|
|
|
|
//self thread disable_sniper_scope_sway(); // Buried does not load the clientfield
|
|
|
|
self thread war_machine_explode_on_impact();
|
|
|
|
self thread jetgun_heatval_changes();
|
|
|
|
self thread additionalprimaryweapon_save_weapons();
|
|
self thread additionalprimaryweapon_restore_weapons();
|
|
self thread additionalprimaryweapon_indicator();
|
|
self thread additionalprimaryweapon_stowed_weapon_refill();
|
|
|
|
self thread whos_who_spawn_changes();
|
|
|
|
self thread electric_cherry_unlimited();
|
|
|
|
self thread vulture_disable_stink_while_standing();
|
|
|
|
//self thread test();
|
|
|
|
//self.score = 1000000;
|
|
//maps/mp/zombies/_zm_perks::give_perk( "specialty_armorvest", 0 );
|
|
//self GiveWeapon("dsr50_zm");
|
|
//self GiveMaxAmmo("dsr50_zm");
|
|
}
|
|
|
|
self thread wait_and_set_max_health();
|
|
|
|
self set_client_dvars();
|
|
self set_perks();
|
|
}
|
|
}
|
|
|
|
onplayerdowned()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "disconnect" );
|
|
|
|
while(1)
|
|
{
|
|
self waittill( "entering_last_stand" );
|
|
|
|
self.health = self.maxhealth;
|
|
}
|
|
}
|
|
|
|
post_all_players_spawned()
|
|
{
|
|
flag_wait( "start_zombie_round_logic" );
|
|
|
|
wait 0.05;
|
|
|
|
maps/mp/zombies/_zm::register_player_damage_callback( ::player_damage_override );
|
|
|
|
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.magicbox_timeout = 9;
|
|
level.packapunch_timeout = 12;
|
|
level.perk_purchase_limit = 9;
|
|
level._random_zombie_perk_cost = 2500;
|
|
level.equipment_etrap_needs_power = 0;
|
|
level.equipment_turret_needs_power = 0;
|
|
level.equipment_subwoofer_needs_power = 0;
|
|
level.limited_weapons["ray_gun_zm"] = undefined;
|
|
level.limited_weapons["raygun_mark2_zm"] = 1;
|
|
level.zombie_vars["emp_stun_range"] = 420;
|
|
level.zombie_vars["slipgun_reslip_rate"] = 0;
|
|
level.zombie_ai_limit_screecher = 1;
|
|
level.explode_overheated_jetgun = 0;
|
|
level.unbuild_overheated_jetgun = 0;
|
|
level.take_overheated_jetgun = 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.etrap_damage = maps/mp/zombies/_zm::ai_zombie_health( 255 );
|
|
level.slipgun_damage = maps/mp/zombies/_zm::ai_zombie_health( 255 );
|
|
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();
|
|
|
|
wallbuy_increase_trigger_radius();
|
|
wallbuy_decrease_upgraded_ammo_cost();
|
|
wallbuy_lethal_grenade_changes();
|
|
wallbuy_claymore_changes();
|
|
wallbuy_location_changes();
|
|
|
|
zone_changes();
|
|
|
|
jetgun_remove_forced_weapon_switch();
|
|
|
|
level thread wallbuy_cost_changes();
|
|
|
|
level thread buildbuildables();
|
|
level thread buildcraftables();
|
|
|
|
level thread wallbuy_dynamic_update();
|
|
|
|
//level.round_number = 115;
|
|
//level.zombie_move_speed = 105;
|
|
//level.zombie_vars[ "zombie_spawn_delay" ] = 0.08;
|
|
//level.zombie_ai_limit = 1;
|
|
|
|
//level.local_doors_stay_open = 1;
|
|
//level.power_local_doors_globally = 1;
|
|
}
|
|
|
|
set_dvars()
|
|
{
|
|
setDvar( "player_backSpeedScale", 1 );
|
|
|
|
setDvar( "dtp_startup_delay", 100 );
|
|
setDvar( "dtp_exhaustion_window", 100 );
|
|
|
|
setDvar( "player_meleeRange", 64 );
|
|
|
|
setDvar( "g_friendlyfireDist", 0 );
|
|
|
|
setDvar( "perk_weapRateEnhanced", 0 );
|
|
|
|
setDvar( "sv_patch_zm_weapons", 0 );
|
|
setDvar( "sv_fix_zm_weapons", 1 );
|
|
}
|
|
|
|
set_client_dvars()
|
|
{
|
|
self setClientDvar( "aim_automelee_enabled", 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_lodBiasRigid", -1000 );
|
|
self setClientDvar( "r_lodBiasSkinned", -1000 );
|
|
|
|
self setClientDvar( "cg_ufo_scaler", 1 );
|
|
}
|
|
|
|
set_perks()
|
|
{
|
|
self setperk( "specialty_unlimitedsprint" );
|
|
self setperk( "specialty_fastmantle" );
|
|
self setperk( "specialty_fastladderclimb" );
|
|
}
|
|
|
|
wait_and_set_max_health()
|
|
{
|
|
wait 0.05;
|
|
|
|
self setMaxHealth(level.player_starting_health);
|
|
}
|
|
|
|
health_bar_hud()
|
|
{
|
|
self endon("disconnect");
|
|
|
|
flag_wait( "initial_blackscreen_passed" );
|
|
|
|
x = 5;
|
|
y = -104;
|
|
if (level.script == "zm_buried")
|
|
{
|
|
y -= 25;
|
|
}
|
|
else if (level.script == "zm_tomb")
|
|
{
|
|
y -= 60;
|
|
}
|
|
|
|
health_bar = self createbar((1, 1, 1), level.primaryprogressbarwidth - 10, level.primaryprogressbarheight);
|
|
health_bar.alignx = "left";
|
|
health_bar.bar.alignx = "left";
|
|
health_bar.barframe.alignx = "left";
|
|
health_bar.aligny = "middle";
|
|
health_bar.bar.aligny = "middle";
|
|
health_bar.barframe.aligny = "middle";
|
|
health_bar.horzalign = "user_left";
|
|
health_bar.bar.horzalign = "user_left";
|
|
health_bar.barframe.horzalign = "user_left";
|
|
health_bar.vertalign = "user_bottom";
|
|
health_bar.bar.vertalign = "user_bottom";
|
|
health_bar.barframe.vertalign = "user_bottom";
|
|
health_bar.x += x;
|
|
health_bar.bar.x += x + ((health_bar.width + 4) / 2);
|
|
health_bar.barframe.x += x;
|
|
health_bar.y += y;
|
|
health_bar.bar.y += y;
|
|
health_bar.barframe.y += y;
|
|
health_bar.hidewheninmenu = 1;
|
|
health_bar.bar.hidewheninmenu = 1;
|
|
health_bar.barframe.hidewheninmenu = 1;
|
|
health_bar.foreground = 1;
|
|
health_bar.bar.foreground = 1;
|
|
health_bar.barframe.foreground = 1;
|
|
|
|
health_bar_text = createfontstring("objective", 1.2);
|
|
health_bar_text.alignx = "left";
|
|
health_bar_text.aligny = "middle";
|
|
health_bar_text.horzalign = "user_left";
|
|
health_bar_text.vertalign = "user_bottom";
|
|
health_bar_text.x += x + health_bar.width + 7;
|
|
health_bar_text.y += y;
|
|
health_bar_text.hidewheninmenu = 1;
|
|
health_bar_text.foreground = 1;
|
|
|
|
health_bar endon("death");
|
|
|
|
health_bar thread destroy_on_intermission();
|
|
health_bar_text thread destroy_on_intermission();
|
|
|
|
while (1)
|
|
{
|
|
if(isDefined(self.e_afterlife_corpse))
|
|
{
|
|
health_bar hideelem();
|
|
health_bar_text hideelem();
|
|
|
|
while(isDefined(self.e_afterlife_corpse))
|
|
{
|
|
wait 0.05;
|
|
}
|
|
|
|
health_bar showelem();
|
|
health_bar_text showelem();
|
|
}
|
|
|
|
health_bar updatebar(self.health / self.maxhealth);
|
|
health_bar_text setvalue(self.health);
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
enemy_counter_hud()
|
|
{
|
|
if ( getDvar( "g_gametype" ) == "zgrief" )
|
|
{
|
|
return;
|
|
}
|
|
|
|
enemy_counter_hud = newHudElem();
|
|
enemy_counter_hud.alignx = "left";
|
|
enemy_counter_hud.aligny = "top";
|
|
enemy_counter_hud.horzalign = "user_left";
|
|
enemy_counter_hud.vertalign = "user_top";
|
|
enemy_counter_hud.x += 5;
|
|
if (level.script == "zm_tomb")
|
|
{
|
|
enemy_counter_hud.y += 49;
|
|
}
|
|
else
|
|
{
|
|
enemy_counter_hud.y += 2;
|
|
}
|
|
enemy_counter_hud.fontscale = 1.4;
|
|
enemy_counter_hud.alpha = 0;
|
|
enemy_counter_hud.color = ( 1, 1, 1 );
|
|
enemy_counter_hud.hidewheninmenu = 1;
|
|
enemy_counter_hud.foreground = 1;
|
|
enemy_counter_hud.label = &"Enemies Remaining: ";
|
|
|
|
enemy_counter_hud endon("death");
|
|
|
|
enemy_counter_hud thread destroy_on_intermission();
|
|
|
|
flag_wait( "initial_blackscreen_passed" );
|
|
|
|
enemy_counter_hud.alpha = 1;
|
|
while (1)
|
|
{
|
|
enemies = get_round_enemy_array().size + level.zombie_total;
|
|
|
|
if (enemies == 0)
|
|
{
|
|
enemy_counter_hud setText("");
|
|
}
|
|
else
|
|
{
|
|
enemy_counter_hud setValue(enemies);
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
timer_hud()
|
|
{
|
|
level thread round_timer_hud();
|
|
|
|
timer_hud = newHudElem();
|
|
timer_hud.alignx = "right";
|
|
timer_hud.aligny = "top";
|
|
timer_hud.horzalign = "user_right";
|
|
timer_hud.vertalign = "user_top";
|
|
timer_hud.x -= 5;
|
|
timer_hud.y += 12;
|
|
timer_hud.fontscale = 1.4;
|
|
timer_hud.alpha = 0;
|
|
timer_hud.color = ( 1, 1, 1 );
|
|
timer_hud.hidewheninmenu = 1;
|
|
timer_hud.foreground = 1;
|
|
timer_hud.label = &"Total: ";
|
|
|
|
timer_hud endon("death");
|
|
|
|
timer_hud thread destroy_on_intermission();
|
|
|
|
level thread set_time_frozen_on_end_game(timer_hud);
|
|
|
|
flag_wait( "initial_blackscreen_passed" );
|
|
|
|
timer_hud.alpha = 1;
|
|
|
|
if ( getDvar( "g_gametype" ) == "zgrief" )
|
|
{
|
|
set_time_frozen(timer_hud, 0);
|
|
}
|
|
|
|
timer_hud setTimerUp(0);
|
|
timer_hud.start_time = int(getTime() / 1000);
|
|
}
|
|
|
|
round_timer_hud()
|
|
{
|
|
round_timer_hud = newHudElem();
|
|
round_timer_hud.alignx = "right";
|
|
round_timer_hud.aligny = "top";
|
|
round_timer_hud.horzalign = "user_right";
|
|
round_timer_hud.vertalign = "user_top";
|
|
round_timer_hud.x -= 5;
|
|
round_timer_hud.y += 27;
|
|
round_timer_hud.fontscale = 1.4;
|
|
round_timer_hud.alpha = 0;
|
|
round_timer_hud.color = ( 1, 1, 1 );
|
|
round_timer_hud.hidewheninmenu = 1;
|
|
round_timer_hud.foreground = 1;
|
|
round_timer_hud.label = &"Round: ";
|
|
|
|
round_timer_hud endon("death");
|
|
|
|
round_timer_hud thread destroy_on_intermission();
|
|
|
|
level thread set_time_frozen_on_end_game(round_timer_hud);
|
|
|
|
flag_wait( "initial_blackscreen_passed" );
|
|
|
|
round_timer_hud.alpha = 1;
|
|
|
|
if ( getDvar( "g_gametype" ) == "zgrief" )
|
|
{
|
|
set_time_frozen(round_timer_hud, 0);
|
|
}
|
|
|
|
while (1)
|
|
{
|
|
round_timer_hud setTimerUp(0);
|
|
round_timer_hud.start_time = int(getTime() / 1000);
|
|
round_timer_hud.end_time = undefined;
|
|
|
|
if ( getDvar( "g_gametype" ) == "zgrief" )
|
|
{
|
|
level waittill( "restart_round" );
|
|
}
|
|
else
|
|
{
|
|
level waittill( "end_of_round" );
|
|
}
|
|
|
|
round_timer_hud.end_time = int(getTime() / 1000);
|
|
time = round_timer_hud.end_time - round_timer_hud.start_time;
|
|
|
|
set_time_frozen(round_timer_hud, time);
|
|
}
|
|
}
|
|
|
|
set_time_frozen_on_end_game(hud)
|
|
{
|
|
level waittill("end_game");
|
|
|
|
if(!isDefined(hud.end_time))
|
|
{
|
|
hud.end_time = int(getTime() / 1000);
|
|
}
|
|
|
|
time = hud.end_time - hud.start_time;
|
|
|
|
set_time_frozen(hud, time);
|
|
}
|
|
|
|
set_time_frozen(hud, time)
|
|
{
|
|
if ( getDvar( "g_gametype" ) == "zgrief" )
|
|
{
|
|
level endon( "restart_round_start" );
|
|
}
|
|
else
|
|
{
|
|
level endon( "start_of_round" );
|
|
}
|
|
|
|
if(time != 0)
|
|
{
|
|
time -= .1; // need to set it below the number or it shows the next number
|
|
}
|
|
|
|
while (1)
|
|
{
|
|
if(time == 0)
|
|
{
|
|
hud setTimerUp(time);
|
|
}
|
|
else
|
|
{
|
|
hud setTimer(time);
|
|
}
|
|
|
|
wait 0.5;
|
|
}
|
|
}
|
|
|
|
zone_hud()
|
|
{
|
|
self endon("disconnect");
|
|
|
|
x = 5;
|
|
y = -119;
|
|
if (level.script == "zm_buried")
|
|
{
|
|
y -= 25;
|
|
}
|
|
else if (level.script == "zm_tomb")
|
|
{
|
|
y -= 60;
|
|
}
|
|
|
|
zone_hud = newClientHudElem(self);
|
|
zone_hud.alignx = "left";
|
|
zone_hud.aligny = "middle";
|
|
zone_hud.horzalign = "user_left";
|
|
zone_hud.vertalign = "user_bottom";
|
|
zone_hud.x += x;
|
|
zone_hud.y += y;
|
|
zone_hud.fontscale = 1.4;
|
|
zone_hud.alpha = 0;
|
|
zone_hud.color = ( 1, 1, 1 );
|
|
zone_hud.hidewheninmenu = 1;
|
|
zone_hud.foreground = 1;
|
|
|
|
zone_hud endon("death");
|
|
|
|
zone_hud thread destroy_on_intermission();
|
|
|
|
flag_wait( "initial_blackscreen_passed" );
|
|
|
|
prev_zone = self get_zone_name();
|
|
zone_hud settext(prev_zone);
|
|
zone_hud.alpha = 1;
|
|
|
|
while (1)
|
|
{
|
|
zone = self get_zone_name();
|
|
|
|
if(prev_zone != zone)
|
|
{
|
|
prev_zone = zone;
|
|
|
|
zone_hud fadeovertime(0.25);
|
|
zone_hud.alpha = 0;
|
|
wait 0.25;
|
|
|
|
zone_hud settext(zone);
|
|
|
|
zone_hud fadeovertime(0.25);
|
|
zone_hud.alpha = 1;
|
|
wait 0.25;
|
|
|
|
continue;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
get_zone_name()
|
|
{
|
|
zone = self get_current_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";
|
|
}
|
|
else if (zone == "zone_cellblock_west_gondola")
|
|
{
|
|
name = "Cell Block 3rd Floor";
|
|
}
|
|
else if (zone == "zone_cellblock_west_gondola_dock")
|
|
{
|
|
name = "Cell Block Gondola";
|
|
}
|
|
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 = "Upper Docks";
|
|
}
|
|
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 = "Courthouse Tunnels 2";
|
|
}
|
|
else if (zone == "zone_tunnels_north2")
|
|
{
|
|
name = "Courthouse Tunnels 1";
|
|
}
|
|
else if (zone == "zone_tunnels_south")
|
|
{
|
|
name = "Saloon Tunnels 3";
|
|
}
|
|
else if (zone == "zone_tunnels_south2")
|
|
{
|
|
name = "Saloon Tunnels 2";
|
|
}
|
|
else if (zone == "zone_tunnels_south3")
|
|
{
|
|
name = "Saloon 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 To Gunsmith Tunnel 2";
|
|
}
|
|
else if (zone == "zone_tunnel_gun2stables2")
|
|
{
|
|
name = "Stables To Gunsmith Tunnel";
|
|
}
|
|
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 To Gunsmith 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( "initial_blackscreen_passed" );
|
|
|
|
if(flag("solo_game"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
bleedout_bar = self createbar((1, 0, 0), level.secondaryprogressbarwidth * 2, level.secondaryprogressbarheight);
|
|
bleedout_bar setpoint(undefined, "CENTER", level.secondaryprogressbarx, -1 * level.secondaryprogressbary);
|
|
bleedout_bar.hidewheninmenu = 1;
|
|
bleedout_bar.bar.hidewheninmenu = 1;
|
|
bleedout_bar.barframe.hidewheninmenu = 1;
|
|
bleedout_bar hideelem();
|
|
|
|
while (1)
|
|
{
|
|
self waittill("entering_last_stand");
|
|
|
|
// don't show for last player downed
|
|
if(!self maps/mp/zombies/_zm_laststand::player_is_in_laststand())
|
|
{
|
|
continue;
|
|
}
|
|
|
|
self thread bleedout_bar_hud_updatebar(bleedout_bar);
|
|
|
|
bleedout_bar showelem();
|
|
|
|
self waittill_any("player_revived", "bled_out", "player_suicide");
|
|
|
|
bleedout_bar hideelem();
|
|
}
|
|
}
|
|
|
|
// scaleovertime doesn't work past 30 seconds so here is a workaround
|
|
bleedout_bar_hud_updatebar(bleedout_bar)
|
|
{
|
|
self endon("player_revived");
|
|
self endon("bled_out");
|
|
self endon("player_suicide");
|
|
|
|
bleedout_time = getDvarInt("player_lastStandBleedoutTime");
|
|
interval_time = 30;
|
|
interval_frac = interval_time / bleedout_time;
|
|
num_intervals = int(bleedout_time / interval_time) + 1;
|
|
|
|
bleedout_bar updatebar(1);
|
|
|
|
for(i = 0; i < num_intervals; i++)
|
|
{
|
|
time = bleedout_time;
|
|
if(time > interval_time)
|
|
{
|
|
time = interval_time;
|
|
}
|
|
|
|
frac = 0.99 - ((i + 1) * interval_frac);
|
|
|
|
barwidth = int((bleedout_bar.width * frac) + 0.5);
|
|
if(barwidth < 1)
|
|
{
|
|
barwidth = 1;
|
|
}
|
|
|
|
bleedout_bar.bar scaleovertime(time, barwidth, bleedout_bar.height);
|
|
|
|
wait time;
|
|
|
|
bleedout_time -= time;
|
|
}
|
|
}
|
|
|
|
last_stand_pistol_swap()
|
|
{
|
|
if ( self has_powerup_weapon() )
|
|
{
|
|
self.lastactiveweapon = "none";
|
|
}
|
|
if ( !self hasweapon( self.laststandpistol ) )
|
|
{
|
|
self giveweapon( self.laststandpistol );
|
|
}
|
|
|
|
ammoclip = weaponclipsize( self.laststandpistol );
|
|
doubleclip = ammoclip * 2;
|
|
if(weapondualwieldweaponname(self.laststandpistol) != "none")
|
|
{
|
|
ammoclip += weaponclipsize(weapondualwieldweaponname(self.laststandpistol));
|
|
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;
|
|
self setweaponammostock( self.laststandpistol, doubleclip );
|
|
}
|
|
else if ( flag( "solo_game" ) && self.laststandpistol == level.default_solo_laststandpistol )
|
|
{
|
|
self setweaponammostock(self.laststandpistol, doubleclip);
|
|
}
|
|
else if ( self.laststandpistol == level.default_laststandpistol )
|
|
{
|
|
self setweaponammostock( self.laststandpistol, doubleclip );
|
|
}
|
|
else if ( self.laststandpistol == "ray_gun_zm" || self.laststandpistol == "ray_gun_upgraded_zm" )
|
|
{
|
|
if ( self.stored_weapon_info[ self.laststandpistol ].total_amt >= ammoclip )
|
|
{
|
|
amt = ammoclip - self.stored_weapon_info[self.laststandpistol].clip_amt;
|
|
self setWeaponAmmoStock(self.laststandpistol, amt);
|
|
self.stored_weapon_info[self.laststandpistol].given_amt = amt;
|
|
}
|
|
else
|
|
{
|
|
amt = self.stored_weapon_info[self.laststandpistol].total_amt - self.stored_weapon_info[self.laststandpistol].clip_amt;
|
|
self setWeaponAmmoStock(self.laststandpistol, amt);
|
|
self.stored_weapon_info[self.laststandpistol].given_amt = amt;
|
|
}
|
|
}
|
|
else if ( self.stored_weapon_info[ self.laststandpistol ].total_amt >= (ammoclip + doubleclip) )
|
|
{
|
|
amt = (ammoclip + doubleclip) - (self.stored_weapon_info[self.laststandpistol].clip_amt + self.stored_weapon_info[self.laststandpistol].left_clip_amt);
|
|
self setweaponammostock( self.laststandpistol, amt );
|
|
self.stored_weapon_info[ self.laststandpistol ].given_amt = amt;
|
|
}
|
|
else
|
|
{
|
|
amt = self.stored_weapon_info[self.laststandpistol].total_amt - (self.stored_weapon_info[self.laststandpistol].clip_amt + self.stored_weapon_info[self.laststandpistol].left_clip_amt);
|
|
self setweaponammostock( self.laststandpistol, amt );
|
|
self.stored_weapon_info[ self.laststandpistol ].given_amt = amt;
|
|
}
|
|
self switchtoweapon( self.laststandpistol );
|
|
}
|
|
|
|
last_stand_restore_pistol_ammo()
|
|
{
|
|
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 )
|
|
{
|
|
dual_wield_name = weapondualwieldweaponname( weapon_to_restore[ j ] );
|
|
if ( weapon != level.default_laststandpistol )
|
|
{
|
|
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;
|
|
used_amt = self.stored_weapon_info[ weapon ].given_amt - last_total;
|
|
if ( used_amt >= self.stored_weapon_info[ weapon ].stock_amt )
|
|
{
|
|
used_amt = used_amt - self.stored_weapon_info[weapon].stock_amt;
|
|
self.stored_weapon_info[ weapon ].stock_amt = 0;
|
|
self.stored_weapon_info[ weapon ].clip_amt = self.stored_weapon_info[ weapon ].clip_amt - used_amt;
|
|
if ( self.stored_weapon_info[ weapon ].clip_amt < 0 )
|
|
{
|
|
self.stored_weapon_info[ weapon ].clip_amt = 0;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
new_stock_amt = self.stored_weapon_info[ weapon ].stock_amt - used_amt;
|
|
if ( new_stock_amt < self.stored_weapon_info[ weapon ].stock_amt )
|
|
{
|
|
self.stored_weapon_info[ weapon ].stock_amt = new_stock_amt;
|
|
}
|
|
}
|
|
}
|
|
self setweaponammostock( weapon_to_restore[ j ], self.stored_weapon_info[weapon_to_restore[ j ] ].stock_amt );
|
|
break;
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|
|
setscoreboardcolumns_gametype()
|
|
{
|
|
if(getDvar("g_gametype") == "zgrief")
|
|
{
|
|
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";
|
|
}
|
|
|
|
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.ignoreme = 1;
|
|
|
|
wait 1;
|
|
|
|
self.ignoreme = 0;
|
|
}
|
|
}
|
|
|
|
fall_velocity_check()
|
|
{
|
|
self endon("disconnect");
|
|
|
|
while (1)
|
|
{
|
|
was_on_ground = 1;
|
|
self.fall_velocity = 0;
|
|
|
|
while (!self isOnGround())
|
|
{
|
|
was_on_ground = 0;
|
|
vel = self getVelocity();
|
|
self.fall_velocity = vel[2];
|
|
wait 0.05;
|
|
}
|
|
|
|
if (!was_on_ground)
|
|
{
|
|
continue;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
melee_weapon_switch_watcher()
|
|
{
|
|
self endon("disconnect");
|
|
|
|
self thread melee_weapon_disable_weapon_trading();
|
|
|
|
prev_wep = undefined;
|
|
while(1)
|
|
{
|
|
melee_wep = self get_player_melee_weapon();
|
|
curr_wep = self getCurrentWeapon();
|
|
|
|
if(curr_wep != "none" && !is_offhand_weapon(curr_wep))
|
|
{
|
|
prev_wep = curr_wep;
|
|
}
|
|
|
|
if(self actionSlotTwoButtonPressed() && !self hasWeapon("time_bomb_zm") && !self hasWeapon("time_bomb_detonator_zm") && !self hasWeapon("equip_dieseldrone_zm"))
|
|
{
|
|
if(curr_wep != melee_wep)
|
|
{
|
|
self switchToWeapon(melee_wep);
|
|
}
|
|
else
|
|
{
|
|
self maps/mp/zombies/_zm_weapons::switch_back_primary_weapon(prev_wep);
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
melee_weapon_disable_weapon_trading()
|
|
{
|
|
self endon("disconnect");
|
|
|
|
while(1)
|
|
{
|
|
melee_wep = self get_player_melee_weapon();
|
|
curr_wep = self getCurrentWeapon();
|
|
|
|
if(curr_wep == melee_wep && self getWeaponsListPrimaries().size >= 1)
|
|
{
|
|
self.is_drinking = 1;
|
|
|
|
while(curr_wep == melee_wep && self getWeaponsListPrimaries().size >= 1)
|
|
{
|
|
melee_wep = self get_player_melee_weapon();
|
|
curr_wep = self getCurrentWeapon();
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
self.is_drinking = 0;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
player_damage_override( einflictor, eattacker, idamage, idflags, smeansofdeath, sweapon, vpoint, vdir, shitloc, psoffsettime )
|
|
{
|
|
if(smeansofdeath == "MOD_FALLING" && !self hasPerk("specialty_flakjacket"))
|
|
{
|
|
// remove fall damage being based off max health
|
|
ratio = self.maxhealth / 100;
|
|
idamage = int(idamage / ratio);
|
|
|
|
// increase fall damage beyond 110
|
|
max_damage = 110;
|
|
if(idamage >= max_damage)
|
|
{
|
|
velocity = abs(self.fall_velocity);
|
|
min_velocity = getDvarInt("bg_fallDamageMinHeight") * 3.25;
|
|
max_velocity = getDvarInt("bg_fallDamageMaxHeight") * 2.5;
|
|
if(self.divetoprone)
|
|
{
|
|
min_velocity = getDvarInt("dtp_fall_damage_min_height") * 4.5;
|
|
max_velocity = getDvarInt("dtp_fall_damage_max_height") * 2.75;
|
|
}
|
|
|
|
idamage = int(((velocity - min_velocity) / (max_velocity - min_velocity)) * max_damage);
|
|
|
|
if(idamage < max_damage)
|
|
{
|
|
idamage = max_damage;
|
|
}
|
|
}
|
|
}
|
|
|
|
// fix turrets damaging players
|
|
if(sweapon == "zombie_bullet_crouch_zm" && smeansofdeath == "MOD_RIFLE_BULLET")
|
|
{
|
|
idamage = 0;
|
|
}
|
|
|
|
return idamage;
|
|
}
|
|
|
|
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()
|
|
{
|
|
arrayremoveindex(level.zombie_include_powerups, "carpenter");
|
|
arrayremoveindex(level.zombie_powerups, "carpenter");
|
|
arrayremovevalue(level.zombie_powerup_array, "carpenter");
|
|
}
|
|
|
|
wallbuy_location_changes()
|
|
{
|
|
if(!is_classic())
|
|
{
|
|
if(level.scr_zm_map_start_location == "farm")
|
|
{
|
|
if(level.scr_zm_ui_gametype == "zstandard")
|
|
{
|
|
remove_wallbuy("tazer_knuckles_zm");
|
|
}
|
|
|
|
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 )
|
|
{
|
|
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 )
|
|
{
|
|
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)
|
|
{
|
|
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;
|
|
}
|
|
}
|
|
|
|
wallbuy_increase_trigger_radius()
|
|
{
|
|
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].script_length = 64;
|
|
}
|
|
}
|
|
}
|
|
|
|
wallbuy_decrease_upgraded_ammo_cost()
|
|
{
|
|
for(i = 0; i < level._unitriggers.trigger_stubs.size; i++)
|
|
{
|
|
if(isDefined(level._unitriggers.trigger_stubs[i].trigger_func) && level._unitriggers.trigger_stubs[i].trigger_func == maps/mp/zombies/_zm_weapons::weapon_spawn_think)
|
|
{
|
|
level._unitriggers.trigger_stubs[i].trigger_func = ::weapon_spawn_think;
|
|
}
|
|
}
|
|
}
|
|
|
|
wallbuy_lethal_grenade_changes()
|
|
{
|
|
for(i = 0; i < level._unitriggers.trigger_stubs.size; i++)
|
|
{
|
|
if(IsDefined(level._unitriggers.trigger_stubs[i].zombie_weapon_upgrade) && is_lethal_grenade(level._unitriggers.trigger_stubs[i].zombie_weapon_upgrade))
|
|
{
|
|
level._unitriggers.trigger_stubs[i].prompt_and_visibility_func = scripts/zm/replaced/_zm_weapons::lethal_grenade_update_prompt;
|
|
}
|
|
}
|
|
}
|
|
|
|
wallbuy_claymore_changes()
|
|
{
|
|
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 == "claymore_zm")
|
|
{
|
|
level._unitriggers.trigger_stubs[i].prompt_and_visibility_func = scripts/zm/replaced/_zm_weap_claymore::claymore_unitrigger_update_prompt;
|
|
level._unitriggers.trigger_stubs[i].trigger_func = scripts/zm/replaced/_zm_weap_claymore::buy_claymores;
|
|
}
|
|
}
|
|
}
|
|
|
|
weapon_spawn_think()
|
|
{
|
|
cost = maps/mp/zombies/_zm_weapons::get_weapon_cost( self.zombie_weapon_upgrade );
|
|
ammo_cost = maps/mp/zombies/_zm_weapons::get_ammo_cost( self.zombie_weapon_upgrade );
|
|
shared_ammo_weapon = undefined;
|
|
second_endon = undefined;
|
|
|
|
is_grenade = 0;
|
|
if(weapontype( self.zombie_weapon_upgrade ) == "grenade")
|
|
{
|
|
is_grenade = 1;
|
|
}
|
|
|
|
if ( isDefined( self.stub ) )
|
|
{
|
|
second_endon = "kill_trigger";
|
|
self.first_time_triggered = self.stub.first_time_triggered;
|
|
}
|
|
|
|
if ( isDefined( self.stub ) && is_true( self.stub.trigger_per_player ) )
|
|
{
|
|
self thread maps/mp/zombies/_zm_magicbox::decide_hide_show_hint( "stop_hint_logic", second_endon, self.parent_player );
|
|
}
|
|
else
|
|
{
|
|
self thread maps/mp/zombies/_zm_magicbox::decide_hide_show_hint( "stop_hint_logic", second_endon );
|
|
}
|
|
|
|
if ( is_grenade )
|
|
{
|
|
self.first_time_triggered = 0;
|
|
hint = maps/mp/zombies/_zm_weapons::get_weapon_hint( self.zombie_weapon_upgrade );
|
|
self sethintstring( hint, cost );
|
|
}
|
|
else if ( !isDefined( self.first_time_triggered ) )
|
|
{
|
|
self.first_time_triggered = 0;
|
|
if ( isDefined( self.stub ) )
|
|
{
|
|
self.stub.first_time_triggered = 0;
|
|
}
|
|
}
|
|
else if ( self.first_time_triggered )
|
|
{
|
|
if ( is_true( level.use_legacy_weapon_prompt_format ) )
|
|
{
|
|
self maps/mp/zombies/_zm_weapons::weapon_set_first_time_hint( cost, maps/mp/zombies/_zm_weapons::get_ammo_cost( self.zombie_weapon_upgrade ) );
|
|
}
|
|
}
|
|
|
|
for ( ;; )
|
|
{
|
|
self waittill( "trigger", player );
|
|
|
|
if ( !is_player_valid( player ) )
|
|
{
|
|
player thread ignore_triggers( 0.5 );
|
|
continue;
|
|
}
|
|
|
|
if ( !player maps/mp/zombies/_zm_magicbox::can_buy_weapon() )
|
|
{
|
|
wait 0.1;
|
|
continue;
|
|
}
|
|
|
|
if ( isDefined( self.stub ) && is_true( self.stub.require_look_from ) )
|
|
{
|
|
toplayer = player get_eye() - self.origin;
|
|
forward = -1 * anglesToRight( self.angles );
|
|
dot = vectordot( toplayer, forward );
|
|
if ( dot < 0 )
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
|
|
if ( player has_powerup_weapon() )
|
|
{
|
|
wait 0.1;
|
|
continue;
|
|
}
|
|
|
|
player_has_weapon = player maps/mp/zombies/_zm_weapons::has_weapon_or_upgrade( self.zombie_weapon_upgrade );
|
|
if ( !player_has_weapon && is_true( level.weapons_using_ammo_sharing ) )
|
|
{
|
|
shared_ammo_weapon = player maps/mp/zombies/_zm_weapons::get_shared_ammo_weapon( self.zombie_weapon_upgrade );
|
|
if ( isDefined( shared_ammo_weapon ) )
|
|
{
|
|
player_has_weapon = 1;
|
|
}
|
|
}
|
|
|
|
if ( is_true( level.pers_upgrade_nube ) )
|
|
{
|
|
player_has_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_should_we_give_raygun( player_has_weapon, player, self.zombie_weapon_upgrade );
|
|
}
|
|
|
|
cost = maps/mp/zombies/_zm_weapons::get_weapon_cost( self.zombie_weapon_upgrade );
|
|
if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() )
|
|
{
|
|
cost = int( cost / 2 );
|
|
}
|
|
|
|
if ( !player_has_weapon )
|
|
{
|
|
if ( player.score >= cost )
|
|
{
|
|
if ( self.first_time_triggered == 0 )
|
|
{
|
|
self maps/mp/zombies/_zm_weapons::show_all_weapon_buys( player, cost, ammo_cost, is_grenade );
|
|
}
|
|
|
|
player maps/mp/zombies/_zm_score::minus_to_player_score( cost, 1 );
|
|
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, self.zombie_weapon_upgrade, self.origin, "weapon" );
|
|
level notify( "weapon_bought", player, self.zombie_weapon_upgrade );
|
|
|
|
if ( self.zombie_weapon_upgrade == "riotshield_zm" )
|
|
{
|
|
player maps/mp/zombies/_zm_equipment::equipment_give( "riotshield_zm" );
|
|
if ( isDefined( player.player_shield_reset_health ) )
|
|
{
|
|
player [[ player.player_shield_reset_health ]]();
|
|
}
|
|
}
|
|
else if ( self.zombie_weapon_upgrade == "jetgun_zm" )
|
|
{
|
|
player maps/mp/zombies/_zm_equipment::equipment_give( "jetgun_zm" );
|
|
}
|
|
else if ( is_lethal_grenade( self.zombie_weapon_upgrade ) )
|
|
{
|
|
player takeweapon( player get_player_lethal_grenade() );
|
|
player set_player_lethal_grenade( self.zombie_weapon_upgrade );
|
|
}
|
|
|
|
str_weapon = self.zombie_weapon_upgrade;
|
|
|
|
if ( is_true( level.pers_upgrade_nube ) )
|
|
{
|
|
str_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_weapon_upgrade_check( player, str_weapon );
|
|
}
|
|
|
|
player maps/mp/zombies/_zm_weapons::weapon_give( str_weapon );
|
|
player maps/mp/zombies/_zm_stats::increment_client_stat( "wallbuy_weapons_purchased" );
|
|
player maps/mp/zombies/_zm_stats::increment_player_stat( "wallbuy_weapons_purchased" );
|
|
}
|
|
else
|
|
{
|
|
play_sound_on_ent( "no_purchase" );
|
|
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
str_weapon = self.zombie_weapon_upgrade;
|
|
|
|
if ( isDefined( shared_ammo_weapon ) )
|
|
{
|
|
str_weapon = shared_ammo_weapon;
|
|
}
|
|
|
|
if ( is_true( level.pers_upgrade_nube ) )
|
|
{
|
|
str_weapon = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_weapon_ammo_check( player, str_weapon );
|
|
}
|
|
|
|
if ( is_true( self.hacked ) )
|
|
{
|
|
if ( !player maps/mp/zombies/_zm_weapons::has_upgrade( str_weapon ) )
|
|
{
|
|
ammo_cost = maps/mp/zombies/_zm_weapons::get_upgraded_ammo_cost( str_weapon );
|
|
}
|
|
else
|
|
{
|
|
ammo_cost = maps/mp/zombies/_zm_weapons::get_ammo_cost( str_weapon );
|
|
}
|
|
}
|
|
else if ( player maps/mp/zombies/_zm_weapons::has_upgrade( str_weapon ) )
|
|
{
|
|
ammo_cost = maps/mp/zombies/_zm_weapons::get_upgraded_ammo_cost( str_weapon );
|
|
}
|
|
else
|
|
{
|
|
ammo_cost = maps/mp/zombies/_zm_weapons::get_ammo_cost( str_weapon );
|
|
}
|
|
|
|
if ( is_true( player.pers_upgrades_awarded[ "nube" ] ) )
|
|
{
|
|
ammo_cost = maps/mp/zombies/_zm_pers_upgrades_functions::pers_nube_override_ammo_cost( player, self.zombie_weapon_upgrade, ammo_cost );
|
|
}
|
|
|
|
if ( player maps/mp/zombies/_zm_pers_upgrades_functions::is_pers_double_points_active() )
|
|
{
|
|
ammo_cost = int( ammo_cost / 2 );
|
|
}
|
|
|
|
if ( str_weapon == "riotshield_zm" )
|
|
{
|
|
play_sound_on_ent( "no_purchase" );
|
|
}
|
|
else if ( player.score >= ammo_cost )
|
|
{
|
|
if ( self.first_time_triggered == 0 )
|
|
{
|
|
self maps/mp/zombies/_zm_weapons::show_all_weapon_buys( player, cost, ammo_cost, is_grenade );
|
|
}
|
|
|
|
if ( player maps/mp/zombies/_zm_weapons::has_upgrade( str_weapon ) )
|
|
{
|
|
player maps/mp/zombies/_zm_stats::increment_client_stat( "upgraded_ammo_purchased" );
|
|
player maps/mp/zombies/_zm_stats::increment_player_stat( "upgraded_ammo_purchased" );
|
|
}
|
|
else
|
|
{
|
|
player maps/mp/zombies/_zm_stats::increment_client_stat( "ammo_purchased" );
|
|
player maps/mp/zombies/_zm_stats::increment_player_stat( "ammo_purchased" );
|
|
}
|
|
|
|
if ( str_weapon == "riotshield_zm" )
|
|
{
|
|
if ( isDefined( player.player_shield_reset_health ) )
|
|
{
|
|
ammo_given = player [[ player.player_shield_reset_health ]]();
|
|
}
|
|
else
|
|
{
|
|
ammo_given = 0;
|
|
}
|
|
}
|
|
else if ( player maps/mp/zombies/_zm_weapons::has_upgrade( str_weapon ) )
|
|
{
|
|
ammo_given = player maps/mp/zombies/_zm_weapons::ammo_give( level.zombie_weapons[ str_weapon ].upgrade_name );
|
|
}
|
|
else
|
|
{
|
|
ammo_given = player maps/mp/zombies/_zm_weapons::ammo_give( str_weapon );
|
|
}
|
|
|
|
if ( ammo_given )
|
|
{
|
|
player maps/mp/zombies/_zm_score::minus_to_player_score( ammo_cost, 1 );
|
|
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, ammo_cost, str_weapon, self.origin, "ammo" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
play_sound_on_ent( "no_purchase" );
|
|
|
|
if ( isDefined( level.custom_generic_deny_vo_func ) )
|
|
{
|
|
player [[ level.custom_generic_deny_vo_func ]]();
|
|
}
|
|
else
|
|
{
|
|
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( isDefined( self.stub ) && isDefined( self.stub.prompt_and_visibility_func ) )
|
|
{
|
|
self [[ self.stub.prompt_and_visibility_func ]]( player );
|
|
}
|
|
}
|
|
}
|
|
|
|
wallbuy_dynamic_update()
|
|
{
|
|
if(!(is_classic() && level.scr_zm_map_start_location == "processing"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
while (!isDefined(level.built_wallbuys))
|
|
{
|
|
wait 0.5;
|
|
}
|
|
|
|
prev_built_wallbuys = 0;
|
|
|
|
while (1)
|
|
{
|
|
if (level.built_wallbuys > prev_built_wallbuys)
|
|
{
|
|
prev_built_wallbuys = level.built_wallbuys;
|
|
wallbuy_increase_trigger_radius();
|
|
wallbuy_decrease_upgraded_ammo_cost();
|
|
}
|
|
|
|
if (level.built_wallbuys == -100)
|
|
{
|
|
wallbuy_increase_trigger_radius();
|
|
wallbuy_decrease_upgraded_ammo_cost();
|
|
return;
|
|
}
|
|
|
|
wait 0.5;
|
|
}
|
|
}
|
|
|
|
buildbuildables()
|
|
{
|
|
// need a wait or else some buildables dont build
|
|
wait 1;
|
|
|
|
if(is_classic())
|
|
{
|
|
if(level.scr_zm_map_start_location == "transit")
|
|
{
|
|
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")
|
|
{
|
|
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" );
|
|
buildbuildable( "turbine" );
|
|
buildbuildable( "subwoofer_zm" );
|
|
buildbuildable( "springpad_zm" );
|
|
buildbuildable( "headchopper_zm" );
|
|
buildbuildable( "sq_common", 1 );
|
|
}
|
|
}
|
|
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", 1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
buildbuildable( buildable, craft )
|
|
{
|
|
if (!isDefined(craft))
|
|
{
|
|
craft = 0;
|
|
}
|
|
|
|
player = get_players()[ 0 ];
|
|
foreach (stub in level.buildable_stubs)
|
|
{
|
|
if ( !isDefined( buildable ) || stub.equipname == buildable )
|
|
{
|
|
if ( isDefined( buildable ) || stub.persistent != 3 )
|
|
{
|
|
displayname = stub get_equipment_display_name();
|
|
stub.cost = stub get_equipment_cost();
|
|
stub.trigger_hintstring = "Hold ^3[{+activate}]^7 for " + displayname + " [Cost: " + stub.cost + "]";
|
|
stub.trigger_func = ::buildable_place_think;
|
|
|
|
if (craft)
|
|
{
|
|
stub maps/mp/zombies/_zm_buildables::buildablestub_finish_build( player );
|
|
stub maps/mp/zombies/_zm_buildables::buildablestub_remove();
|
|
stub.model notsolid();
|
|
stub.model show();
|
|
}
|
|
else
|
|
{
|
|
level.zombie_buildables[stub.equipname].hint = "Hold ^3[{+activate}]^7 to craft " + displayname;
|
|
stub.prompt_and_visibility_func = ::buildabletrigger_update_prompt;
|
|
}
|
|
|
|
i = 0;
|
|
foreach (piece in stub.buildablezone.pieces)
|
|
{
|
|
piece maps/mp/zombies/_zm_buildables::piece_unspawn();
|
|
if (!craft && i > 0)
|
|
{
|
|
stub.buildablezone maps/mp/zombies/_zm_buildables::buildable_set_piece_built(piece);
|
|
}
|
|
i++;
|
|
}
|
|
|
|
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")
|
|
{
|
|
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";
|
|
}
|
|
}
|
|
|
|
get_equipment_cost()
|
|
{
|
|
if (self.equipname == "turbine")
|
|
{
|
|
return 500;
|
|
}
|
|
else if (self.equipname == "jetgun_zm")
|
|
{
|
|
return 5000;
|
|
}
|
|
else if (self.equipname == "slipgun_zm")
|
|
{
|
|
return 5000;
|
|
}
|
|
|
|
return 1000;
|
|
}
|
|
|
|
buildable_place_think()
|
|
{
|
|
self endon( "kill_trigger" );
|
|
player_built = undefined;
|
|
while ( isDefined( self.stub.built ) && !self.stub.built )
|
|
{
|
|
self waittill( "trigger", player );
|
|
if ( player != self.parent_player )
|
|
{
|
|
continue;
|
|
}
|
|
if ( isDefined( player.screecher_weapon ) )
|
|
{
|
|
continue;
|
|
}
|
|
if ( !is_player_valid( player ) )
|
|
{
|
|
player thread ignore_triggers( 0.5 );
|
|
}
|
|
status = player maps/mp/zombies/_zm_buildables::player_can_build( self.stub.buildablezone );
|
|
if ( !status )
|
|
{
|
|
self.stub.hint_string = "";
|
|
self sethintstring( self.stub.hint_string );
|
|
if ( isDefined( self.stub.oncantuse ) )
|
|
{
|
|
self.stub [[ self.stub.oncantuse ]]( player );
|
|
}
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
if ( isDefined( self.stub.onbeginuse ) )
|
|
{
|
|
self.stub [[ self.stub.onbeginuse ]]( player );
|
|
}
|
|
result = self maps/mp/zombies/_zm_buildables::buildable_use_hold_think( player );
|
|
team = player.pers[ "team" ];
|
|
if ( isDefined( self.stub.onenduse ) )
|
|
{
|
|
self.stub [[ self.stub.onenduse ]]( team, player, result );
|
|
}
|
|
if ( !result )
|
|
{
|
|
continue;
|
|
}
|
|
if ( isDefined( self.stub.onuse ) )
|
|
{
|
|
self.stub [[ self.stub.onuse ]]( player );
|
|
}
|
|
prompt = player maps/mp/zombies/_zm_buildables::player_build( self.stub.buildablezone );
|
|
player_built = player;
|
|
self.stub.hint_string = prompt;
|
|
self sethintstring( self.stub.hint_string );
|
|
}
|
|
}
|
|
if ( isDefined( player_built ) )
|
|
{
|
|
}
|
|
if ( self.stub.persistent == 0 )
|
|
{
|
|
self.stub maps/mp/zombies/_zm_buildables::buildablestub_remove();
|
|
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub );
|
|
return;
|
|
}
|
|
if ( self.stub.persistent == 3 )
|
|
{
|
|
maps/mp/zombies/_zm_buildables::stub_unbuild_buildable( self.stub, 1 );
|
|
return;
|
|
}
|
|
if ( self.stub.persistent == 2 )
|
|
{
|
|
if ( isDefined( player_built ) )
|
|
{
|
|
self buildabletrigger_update_prompt( player_built );
|
|
}
|
|
if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) )
|
|
{
|
|
self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED";
|
|
self sethintstring( self.stub.hint_string );
|
|
return;
|
|
}
|
|
if ( isDefined( self.stub.bought ) && self.stub.bought )
|
|
{
|
|
self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX";
|
|
self sethintstring( self.stub.hint_string );
|
|
return;
|
|
}
|
|
if ( isDefined( self.stub.model ) )
|
|
{
|
|
self.stub.model notsolid();
|
|
self.stub.model show();
|
|
}
|
|
while ( self.stub.persistent == 2 )
|
|
{
|
|
self waittill( "trigger", player );
|
|
if ( isDefined( player.screecher_weapon ) )
|
|
{
|
|
continue;
|
|
}
|
|
if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) )
|
|
{
|
|
self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED";
|
|
self sethintstring( self.stub.hint_string );
|
|
return;
|
|
}
|
|
if ( isDefined( self.stub.built ) && !self.stub.built )
|
|
{
|
|
self.stub.hint_string = "";
|
|
self sethintstring( self.stub.hint_string );
|
|
return;
|
|
}
|
|
if ( player != self.parent_player )
|
|
{
|
|
continue;
|
|
}
|
|
if ( !is_player_valid( player ) )
|
|
{
|
|
player thread ignore_triggers( 0.5 );
|
|
}
|
|
|
|
if (player.score < self.stub.cost)
|
|
{
|
|
self play_sound_on_ent( "no_purchase" );
|
|
continue;
|
|
}
|
|
|
|
player maps/mp/zombies/_zm_score::minus_to_player_score( self.stub.cost );
|
|
self play_sound_on_ent( "purchase" );
|
|
|
|
self.stub.bought = 1;
|
|
if ( isDefined( self.stub.model ) )
|
|
{
|
|
self.stub.model thread maps/mp/zombies/_zm_buildables::model_fly_away();
|
|
}
|
|
player maps/mp/zombies/_zm_weapons::weapon_give( self.stub.weaponname );
|
|
if ( isDefined( level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ) )
|
|
{
|
|
self [[ level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ]]( player );
|
|
}
|
|
if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.stub.weaponname, undefined ) )
|
|
{
|
|
self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED";
|
|
}
|
|
else
|
|
{
|
|
self.stub.hint_string = &"ZOMBIE_GO_TO_THE_BOX";
|
|
}
|
|
self sethintstring( self.stub.hint_string );
|
|
player maps/mp/zombies/_zm_buildables::track_buildables_pickedup( self.stub.weaponname );
|
|
}
|
|
}
|
|
else while ( !isDefined( player_built ) || self buildabletrigger_update_prompt( player_built ) )
|
|
{
|
|
if ( isDefined( self.stub.model ) )
|
|
{
|
|
self.stub.model notsolid();
|
|
self.stub.model show();
|
|
}
|
|
while ( self.stub.persistent == 1 )
|
|
{
|
|
self waittill( "trigger", player );
|
|
if ( isDefined( player.screecher_weapon ) )
|
|
{
|
|
continue;
|
|
}
|
|
if ( isDefined( self.stub.built ) && !self.stub.built )
|
|
{
|
|
self.stub.hint_string = "";
|
|
self sethintstring( self.stub.hint_string );
|
|
return;
|
|
}
|
|
if ( player != self.parent_player )
|
|
{
|
|
continue;
|
|
}
|
|
if ( !is_player_valid( player ) )
|
|
{
|
|
player thread ignore_triggers( 0.5 );
|
|
}
|
|
if ( player has_player_equipment( self.stub.weaponname ) )
|
|
{
|
|
continue;
|
|
}
|
|
if (player.score < self.stub.cost)
|
|
{
|
|
self play_sound_on_ent( "no_purchase" );
|
|
continue;
|
|
}
|
|
if ( !maps/mp/zombies/_zm_equipment::is_limited_equipment( self.stub.weaponname ) || !maps/mp/zombies/_zm_equipment::limited_equipment_in_use( self.stub.weaponname ) )
|
|
{
|
|
player maps/mp/zombies/_zm_score::minus_to_player_score( self.stub.cost );
|
|
self play_sound_on_ent( "purchase" );
|
|
|
|
player maps/mp/zombies/_zm_equipment::equipment_buy( self.stub.weaponname );
|
|
player giveweapon( self.stub.weaponname );
|
|
player setweaponammoclip( self.stub.weaponname, 1 );
|
|
if ( isDefined( level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ) )
|
|
{
|
|
self [[ level.zombie_include_buildables[ self.stub.equipname ].onbuyweapon ]]( player );
|
|
}
|
|
if ( self.stub.weaponname != "keys_zm" )
|
|
{
|
|
player setactionslot( 1, "weapon", self.stub.weaponname );
|
|
}
|
|
if ( isDefined( level.zombie_buildables[ self.stub.equipname ].bought ) )
|
|
{
|
|
self.stub.hint_string = level.zombie_buildables[ self.stub.equipname ].bought;
|
|
}
|
|
else
|
|
{
|
|
self.stub.hint_string = "";
|
|
}
|
|
self sethintstring( self.stub.hint_string );
|
|
player maps/mp/zombies/_zm_buildables::track_buildables_pickedup( self.stub.weaponname );
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
self.stub.hint_string = "";
|
|
self sethintstring( self.stub.hint_string );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
buildabletrigger_update_prompt( player )
|
|
{
|
|
can_use = 0;
|
|
if (isDefined(level.buildablepools))
|
|
{
|
|
can_use = self.stub pooledbuildablestub_update_prompt( player, self );
|
|
}
|
|
else
|
|
{
|
|
can_use = self.stub buildablestub_update_prompt( player, self );
|
|
}
|
|
|
|
self sethintstring( self.stub.hint_string );
|
|
if ( isDefined( self.stub.cursor_hint ) )
|
|
{
|
|
if ( self.stub.cursor_hint == "HINT_WEAPON" && isDefined( self.stub.cursor_hint_weapon ) )
|
|
{
|
|
self setcursorhint( self.stub.cursor_hint, self.stub.cursor_hint_weapon );
|
|
}
|
|
else
|
|
{
|
|
self setcursorhint( self.stub.cursor_hint );
|
|
}
|
|
}
|
|
return can_use;
|
|
}
|
|
|
|
buildablestub_update_prompt( player, trigger )
|
|
{
|
|
if ( !self maps/mp/zombies/_zm_buildables::anystub_update_prompt( player ) )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if ( isDefined( self.buildablestub_reject_func ) )
|
|
{
|
|
rval = self [[ self.buildablestub_reject_func ]]( player );
|
|
if ( rval )
|
|
{
|
|
return 0;
|
|
}
|
|
}
|
|
|
|
if ( isDefined( self.custom_buildablestub_update_prompt ) && !( self [[ self.custom_buildablestub_update_prompt ]]( player ) ) )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
self.cursor_hint = "HINT_NOICON";
|
|
self.cursor_hint_weapon = undefined;
|
|
if ( isDefined( self.built ) && !self.built )
|
|
{
|
|
slot = self.buildablestruct.buildable_slot;
|
|
piece = self.buildablezone.pieces[0];
|
|
player maps/mp/zombies/_zm_buildables::player_set_buildable_piece(piece, slot);
|
|
|
|
if ( !isDefined( player maps/mp/zombies/_zm_buildables::player_get_buildable_piece( slot ) ) )
|
|
{
|
|
if ( isDefined( level.zombie_buildables[ self.equipname ].hint_more ) )
|
|
{
|
|
self.hint_string = level.zombie_buildables[ self.equipname ].hint_more;
|
|
}
|
|
else
|
|
{
|
|
self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE";
|
|
}
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
if ( !self.buildablezone maps/mp/zombies/_zm_buildables::buildable_has_piece( player maps/mp/zombies/_zm_buildables::player_get_buildable_piece( slot ) ) )
|
|
{
|
|
if ( isDefined( level.zombie_buildables[ self.equipname ].hint_wrong ) )
|
|
{
|
|
self.hint_string = level.zombie_buildables[ self.equipname ].hint_wrong;
|
|
}
|
|
else
|
|
{
|
|
self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG";
|
|
}
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
if ( isDefined( level.zombie_buildables[ self.equipname ].hint ) )
|
|
{
|
|
self.hint_string = level.zombie_buildables[ self.equipname ].hint;
|
|
}
|
|
else
|
|
{
|
|
self.hint_string = "Missing buildable hint";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( self.persistent == 1 )
|
|
{
|
|
if ( maps/mp/zombies/_zm_equipment::is_limited_equipment( self.weaponname ) && maps/mp/zombies/_zm_equipment::limited_equipment_in_use( self.weaponname ) )
|
|
{
|
|
self.hint_string = &"ZOMBIE_BUILD_PIECE_ONLY_ONE";
|
|
return 0;
|
|
}
|
|
|
|
if ( player has_player_equipment( self.weaponname ) )
|
|
{
|
|
self.hint_string = &"ZOMBIE_BUILD_PIECE_HAVE_ONE";
|
|
return 0;
|
|
}
|
|
|
|
self.hint_string = self.trigger_hintstring;
|
|
}
|
|
else if ( self.persistent == 2 )
|
|
{
|
|
if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.weaponname, undefined ) )
|
|
{
|
|
self.hint_string = &"ZOMBIE_GO_TO_THE_BOX_LIMITED";
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
if ( isDefined( self.bought ) && self.bought )
|
|
{
|
|
self.hint_string = &"ZOMBIE_GO_TO_THE_BOX";
|
|
return 0;
|
|
}
|
|
}
|
|
self.hint_string = self.trigger_hintstring;
|
|
}
|
|
else
|
|
{
|
|
self.hint_string = "";
|
|
return 0;
|
|
}
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
pooledbuildablestub_update_prompt( player, trigger )
|
|
{
|
|
if ( !self maps/mp/zombies/_zm_buildables::anystub_update_prompt( player ) )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
if ( isDefined( self.custom_buildablestub_update_prompt ) && !( self [[ self.custom_buildablestub_update_prompt ]]( player ) ) )
|
|
{
|
|
return 0;
|
|
}
|
|
|
|
self.cursor_hint = "HINT_NOICON";
|
|
self.cursor_hint_weapon = undefined;
|
|
if ( isDefined( self.built ) && !self.built )
|
|
{
|
|
trigger thread buildablestub_build_succeed();
|
|
|
|
if (level.buildables_available.size > 1)
|
|
{
|
|
self thread choose_open_buildable(player);
|
|
}
|
|
|
|
slot = self.buildablestruct.buildable_slot;
|
|
|
|
if (self.buildables_available_index >= level.buildables_available.size)
|
|
{
|
|
self.buildables_available_index = 0;
|
|
}
|
|
|
|
foreach (stub in level.buildable_stubs)
|
|
{
|
|
if (stub.buildablezone.buildable_name == level.buildables_available[self.buildables_available_index])
|
|
{
|
|
piece = stub.buildablezone.pieces[0];
|
|
break;
|
|
}
|
|
}
|
|
|
|
player maps/mp/zombies/_zm_buildables::player_set_buildable_piece(piece, slot);
|
|
|
|
piece = player maps/mp/zombies/_zm_buildables::player_get_buildable_piece(slot);
|
|
|
|
if ( !isDefined( piece ) )
|
|
{
|
|
if ( isDefined( level.zombie_buildables[ self.equipname ].hint_more ) )
|
|
{
|
|
self.hint_string = level.zombie_buildables[ self.equipname ].hint_more;
|
|
}
|
|
else
|
|
{
|
|
self.hint_string = &"ZOMBIE_BUILD_PIECE_MORE";
|
|
}
|
|
|
|
if ( isDefined( level.custom_buildable_need_part_vo ) )
|
|
{
|
|
player thread [[ level.custom_buildable_need_part_vo ]]();
|
|
}
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
if ( isDefined( self.bound_to_buildable ) && !self.bound_to_buildable.buildablezone maps/mp/zombies/_zm_buildables::buildable_has_piece( piece ) )
|
|
{
|
|
if ( isDefined( level.zombie_buildables[ self.bound_to_buildable.equipname ].hint_wrong ) )
|
|
{
|
|
self.hint_string = level.zombie_buildables[ self.bound_to_buildable.equipname ].hint_wrong;
|
|
}
|
|
else
|
|
{
|
|
self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG";
|
|
}
|
|
|
|
if ( isDefined( level.custom_buildable_wrong_part_vo ) )
|
|
{
|
|
player thread [[ level.custom_buildable_wrong_part_vo ]]();
|
|
}
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
if ( !isDefined( self.bound_to_buildable ) && !self.buildable_pool pooledbuildable_has_piece( piece ) )
|
|
{
|
|
if ( isDefined( level.zombie_buildables[ self.equipname ].hint_wrong ) )
|
|
{
|
|
self.hint_string = level.zombie_buildables[ self.equipname ].hint_wrong;
|
|
}
|
|
else
|
|
{
|
|
self.hint_string = &"ZOMBIE_BUILD_PIECE_WRONG";
|
|
}
|
|
return 0;
|
|
}
|
|
else
|
|
{
|
|
if ( isDefined( self.bound_to_buildable ) )
|
|
{
|
|
if ( isDefined( level.zombie_buildables[ piece.buildablename ].hint ) )
|
|
{
|
|
self.hint_string = level.zombie_buildables[ piece.buildablename ].hint;
|
|
}
|
|
else
|
|
{
|
|
self.hint_string = "Missing buildable hint";
|
|
}
|
|
}
|
|
|
|
if ( isDefined( level.zombie_buildables[ piece.buildablename ].hint ) )
|
|
{
|
|
self.hint_string = level.zombie_buildables[ piece.buildablename ].hint;
|
|
}
|
|
else
|
|
{
|
|
self.hint_string = "Missing buildable hint";
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
return trigger [[ self.original_prompt_and_visibility_func ]]( player );
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
pooledbuildable_has_piece( piece )
|
|
{
|
|
return isDefined( self pooledbuildable_stub_for_piece( piece ) );
|
|
}
|
|
|
|
pooledbuildable_stub_for_piece( piece )
|
|
{
|
|
foreach (stub in self.stubs)
|
|
{
|
|
if ( !isDefined( stub.bound_to_buildable ) )
|
|
{
|
|
if ( stub.buildablezone maps/mp/zombies/_zm_buildables::buildable_has_piece( piece ) )
|
|
{
|
|
return stub;
|
|
}
|
|
}
|
|
}
|
|
|
|
return undefined;
|
|
}
|
|
|
|
choose_open_buildable( player )
|
|
{
|
|
self endon( "kill_choose_open_buildable" );
|
|
|
|
n_playernum = player getentitynumber();
|
|
b_got_input = 1;
|
|
hinttexthudelem = newclienthudelem( player );
|
|
hinttexthudelem.alignx = "center";
|
|
hinttexthudelem.aligny = "middle";
|
|
hinttexthudelem.horzalign = "center";
|
|
hinttexthudelem.vertalign = "bottom";
|
|
hinttexthudelem.y = -100;
|
|
hinttexthudelem.foreground = 1;
|
|
hinttexthudelem.font = "default";
|
|
hinttexthudelem.fontscale = 1;
|
|
hinttexthudelem.alpha = 1;
|
|
hinttexthudelem.color = ( 1, 1, 1 );
|
|
hinttexthudelem settext( "Press [{+actionslot 1}] or [{+actionslot 2}] to change item" );
|
|
|
|
if (!isDefined(self.buildables_available_index))
|
|
{
|
|
self.buildables_available_index = 0;
|
|
}
|
|
|
|
while ( isDefined( self.playertrigger[ n_playernum ] ) && !self.built )
|
|
{
|
|
if (!player isTouching(self.playertrigger[n_playernum]))
|
|
{
|
|
hinttexthudelem.alpha = 0;
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
hinttexthudelem.alpha = 1;
|
|
|
|
if ( player actionslotonebuttonpressed() )
|
|
{
|
|
self.buildables_available_index++;
|
|
b_got_input = 1;
|
|
}
|
|
else
|
|
{
|
|
if ( player actionslottwobuttonpressed() )
|
|
{
|
|
self.buildables_available_index--;
|
|
|
|
b_got_input = 1;
|
|
}
|
|
}
|
|
|
|
if ( self.buildables_available_index >= level.buildables_available.size )
|
|
{
|
|
self.buildables_available_index = 0;
|
|
}
|
|
else
|
|
{
|
|
if ( self.buildables_available_index < 0 )
|
|
{
|
|
self.buildables_available_index = level.buildables_available.size - 1;
|
|
}
|
|
}
|
|
|
|
if ( b_got_input )
|
|
{
|
|
piece = undefined;
|
|
foreach (stub in level.buildable_stubs)
|
|
{
|
|
if (stub.buildablezone.buildable_name == level.buildables_available[self.buildables_available_index])
|
|
{
|
|
piece = stub.buildablezone.pieces[0];
|
|
break;
|
|
}
|
|
}
|
|
slot = self.buildablestruct.buildable_slot;
|
|
player maps/mp/zombies/_zm_buildables::player_set_buildable_piece(piece, slot);
|
|
|
|
self.equipname = level.buildables_available[self.buildables_available_index];
|
|
self.hint_string = level.zombie_buildables[self.equipname].hint;
|
|
self.playertrigger[n_playernum] sethintstring(self.hint_string);
|
|
b_got_input = 0;
|
|
}
|
|
|
|
if ( player is_player_looking_at( self.playertrigger[n_playernum].origin, 0.76 ) )
|
|
{
|
|
hinttexthudelem.alpha = 1;
|
|
}
|
|
else
|
|
{
|
|
hinttexthudelem.alpha = 0;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
|
|
hinttexthudelem destroy();
|
|
}
|
|
|
|
buildablestub_build_succeed()
|
|
{
|
|
self notify("buildablestub_build_succeed");
|
|
self endon("buildablestub_build_succeed");
|
|
|
|
self waittill( "build_succeed" );
|
|
|
|
self.stub maps/mp/zombies/_zm_buildables::buildablestub_remove();
|
|
arrayremovevalue(level.buildables_available, self.stub.buildablezone.buildable_name);
|
|
if (level.buildables_available.size == 0)
|
|
{
|
|
foreach (stub in level.buildable_stubs)
|
|
{
|
|
switch(stub.equipname)
|
|
{
|
|
case "turbine":
|
|
case "subwoofer_zm":
|
|
case "springpad_zm":
|
|
case "headchopper_zm":
|
|
maps/mp/zombies/_zm_unitrigger::unregister_unitrigger(stub);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
// adds updated hintstring and functionality
|
|
updatebuildables()
|
|
{
|
|
foreach (stub in level._unitriggers.trigger_stubs)
|
|
{
|
|
if(IsDefined(stub.equipname))
|
|
{
|
|
displayname = stub get_equipment_display_name();
|
|
stub.cost = 1000;
|
|
stub.trigger_hintstring = "Hold ^3[{+activate}]^7 for " + displayname + " [Cost: " + stub.cost + "]";
|
|
stub.trigger_func = ::buildable_place_think;
|
|
}
|
|
}
|
|
}
|
|
|
|
removebuildable( buildable, after_built )
|
|
{
|
|
if (!isDefined(after_built))
|
|
{
|
|
after_built = 0;
|
|
}
|
|
|
|
if (after_built)
|
|
{
|
|
foreach (stub in level._unitriggers.trigger_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;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
buildable_piece_remove_on_last_stand()
|
|
{
|
|
self endon( "disconnect" );
|
|
|
|
self thread buildable_get_last_piece();
|
|
|
|
while (1)
|
|
{
|
|
self waittill("entering_last_stand");
|
|
|
|
if (isDefined(self.last_piece))
|
|
{
|
|
self.last_piece maps/mp/zombies/_zm_buildables::piece_unspawn();
|
|
}
|
|
}
|
|
}
|
|
|
|
buildable_get_last_piece()
|
|
{
|
|
self endon( "disconnect" );
|
|
|
|
while (1)
|
|
{
|
|
if (!self maps/mp/zombies/_zm_laststand::player_is_in_laststand())
|
|
{
|
|
self.last_piece = maps/mp/zombies/_zm_buildables::player_get_buildable_piece(0);
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
// 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" );
|
|
changecraftableoption( 0 );
|
|
}
|
|
else if(level.scr_zm_map_start_location == "tomb")
|
|
{
|
|
buildcraftable( "tomb_shield_zm" );
|
|
buildcraftable( "equip_dieseldrone_zm" );
|
|
takecraftableparts( "gramophone" );
|
|
}
|
|
}
|
|
}
|
|
|
|
changecraftableoption( index )
|
|
{
|
|
foreach (craftable in level.a_uts_craftables)
|
|
{
|
|
if (craftable.equipname == "open_table")
|
|
{
|
|
craftable thread setcraftableoption( index );
|
|
}
|
|
}
|
|
}
|
|
|
|
setcraftableoption( index )
|
|
{
|
|
self endon("death");
|
|
|
|
while (self.a_uts_open_craftables_available.size <= 0)
|
|
{
|
|
wait 0.05;
|
|
}
|
|
|
|
if (self.a_uts_open_craftables_available.size > 1)
|
|
{
|
|
self.n_open_craftable_choice = index;
|
|
self.equipname = self.a_uts_open_craftables_available[self.n_open_craftable_choice].equipname;
|
|
self.hint_string = self.a_uts_open_craftables_available[self.n_open_craftable_choice].hint_string;
|
|
foreach (trig in self.playertrigger)
|
|
{
|
|
trig sethintstring( self.hint_string );
|
|
}
|
|
}
|
|
}
|
|
|
|
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;
|
|
}
|
|
|
|
prev_heatval = 0;
|
|
cooldown_amount = 0.1;
|
|
overheat_amount = 0.85;
|
|
|
|
while(1)
|
|
{
|
|
if(!IsDefined(self.jetgun_heatval))
|
|
{
|
|
prev_heatval = 0;
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
curr_heatval = self.jetgun_heatval;
|
|
diff_heatval = curr_heatval - prev_heatval;
|
|
|
|
if(self getCurrentWeapon() != "jetgun_zm")
|
|
{
|
|
self.jetgun_heatval -= cooldown_amount;
|
|
}
|
|
else if(self getCurrentWeapon() == "jetgun_zm" && self attackButtonPressed() && self isMeleeing())
|
|
{
|
|
self.jetgun_heatval += overheat_amount;
|
|
}
|
|
else if(diff_heatval < 0)
|
|
{
|
|
self.jetgun_heatval -= abs(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 != curr_heatval)
|
|
{
|
|
self setweaponoverheating(self.jetgun_overheating, self.jetgun_heatval);
|
|
}
|
|
|
|
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" );
|
|
}
|
|
|
|
if (self HasPerk("specialty_longersprint"))
|
|
{
|
|
self Setperk( "specialty_movefaster" );
|
|
}
|
|
else
|
|
{
|
|
self Unsetperk( "specialty_movefaster" );
|
|
}
|
|
}
|
|
}
|
|
|
|
disable_sniper_scope_sway()
|
|
{
|
|
self endon( "disconnect" );
|
|
|
|
self.sway_disabled = 0;
|
|
|
|
while (1)
|
|
{
|
|
if (!self hasPerk("specialty_deadshot"))
|
|
{
|
|
if (isads(self))
|
|
{
|
|
if (!self.sway_disabled)
|
|
{
|
|
self.sway_disabled = 1;
|
|
self setclientfieldtoplayer( "deadshot_perk", 1 );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if (self.sway_disabled)
|
|
{
|
|
self.sway_disabled = 0;
|
|
self setclientfieldtoplayer( "deadshot_perk", 0 );
|
|
}
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
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()
|
|
{
|
|
dc = spawn( "script_model", self.origin + vectorScale( ( 0, 0, 1 ), 40 ) );
|
|
dc.angles = self.angles;
|
|
dc setmodel( "tag_origin" );
|
|
dc_icon = spawn( "script_model", self.origin + vectorScale( ( 0, 0, 1 ), 40 ) );
|
|
dc_icon.angles = self.angles;
|
|
dc_icon setmodel( "ch_tombstone1" );
|
|
dc_icon linkto( dc );
|
|
dc.icon = dc_icon;
|
|
dc.script_noteworthy = "player_tombstone_model";
|
|
dc.player = self;
|
|
|
|
self thread maps/mp/zombies/_zm_tombstone::tombstone_clear();
|
|
dc thread tombstone_wobble();
|
|
dc thread tombstone_emp();
|
|
|
|
result = self waittill_any_return( "player_revived", "spawned_player", "disconnect" );
|
|
|
|
if (result == "disconnect")
|
|
{
|
|
dc tombstone_delete();
|
|
return;
|
|
}
|
|
|
|
dc thread tombstone_waypoint();
|
|
dc thread tombstone_timeout();
|
|
dc 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()
|
|
{
|
|
height_offset = 40;
|
|
hud_elem = newClientHudElem(self.player);
|
|
hud_elem.x = self.origin[0];
|
|
hud_elem.y = self.origin[1];
|
|
hud_elem.z = self.origin[2] + height_offset;
|
|
hud_elem.alpha = 1;
|
|
hud_elem.color = (0.5, 0.5, 0.5);
|
|
hud_elem.hidewheninmenu = 1;
|
|
hud_elem.fadewhentargeted = 1;
|
|
hud_elem setWaypoint(1, "specialty_tombstone_zombies");
|
|
|
|
self waittill_any("tombstone_grabbed", "tombstone_timedout");
|
|
|
|
hud_elem 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 = maps/mp/zombies/_zm_tombstone::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]));
|
|
}
|
|
|
|
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_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"))
|
|
{
|
|
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_save_weapons()
|
|
{
|
|
self endon("disconnect");
|
|
|
|
while (1)
|
|
{
|
|
if (!self hasPerk("specialty_additionalprimaryweapon"))
|
|
{
|
|
self waittill("perk_acquired");
|
|
wait 0.05;
|
|
}
|
|
|
|
if (self hasPerk("specialty_additionalprimaryweapon"))
|
|
{
|
|
primaries = self getweaponslistprimaries();
|
|
if (primaries.size >= 3)
|
|
{
|
|
weapon = primaries[primaries.size - 1];
|
|
self.a_saved_weapon = maps/mp/zombies/_zm_weapons::get_player_weapondata(self, weapon);
|
|
}
|
|
else
|
|
{
|
|
self.a_saved_weapon = undefined;
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
additionalprimaryweapon_restore_weapons()
|
|
{
|
|
self endon("disconnect");
|
|
|
|
while (1)
|
|
{
|
|
self waittill("perk_acquired");
|
|
|
|
if (isDefined(self.a_saved_weapon) && self hasPerk("specialty_additionalprimaryweapon"))
|
|
{
|
|
pap_triggers = getentarray( "specialty_weapupgrade", "script_noteworthy" );
|
|
|
|
give_wep = 1;
|
|
if ( isDefined( self ) && self maps/mp/zombies/_zm_weapons::has_weapon_or_upgrade( self.a_saved_weapon["name"] ) )
|
|
{
|
|
give_wep = 0;
|
|
}
|
|
else if ( !maps/mp/zombies/_zm_weapons::limited_weapon_below_quota( self.a_saved_weapon["name"], self, pap_triggers ) )
|
|
{
|
|
give_wep = 0;
|
|
}
|
|
else if ( !self maps/mp/zombies/_zm_weapons::player_can_use_content( self.a_saved_weapon["name"] ) )
|
|
{
|
|
give_wep = 0;
|
|
}
|
|
else if ( isDefined( level.custom_magic_box_selection_logic ) )
|
|
{
|
|
if ( !( [[ level.custom_magic_box_selection_logic ]]( self.a_saved_weapon["name"], self, pap_triggers ) ) )
|
|
{
|
|
give_wep = 0;
|
|
}
|
|
}
|
|
else if ( isDefined( self ) && isDefined( level.special_weapon_magicbox_check ) )
|
|
{
|
|
give_wep = self [[ level.special_weapon_magicbox_check ]]( self.a_saved_weapon["name"] );
|
|
}
|
|
|
|
if (give_wep)
|
|
{
|
|
current_wep = self getCurrentWeapon();
|
|
self maps/mp/zombies/_zm_weapons::weapondata_give(self.a_saved_weapon);
|
|
self switchToWeapon(current_wep);
|
|
}
|
|
|
|
self.a_saved_weapon = undefined;
|
|
}
|
|
}
|
|
}
|
|
|
|
additionalprimaryweapon_indicator()
|
|
{
|
|
self endon("disconnect");
|
|
|
|
additionalprimaryweapon_indicator_hud = newClientHudElem(self);
|
|
additionalprimaryweapon_indicator_hud.alignx = "right";
|
|
additionalprimaryweapon_indicator_hud.aligny = "bottom";
|
|
additionalprimaryweapon_indicator_hud.horzalign = "user_right";
|
|
additionalprimaryweapon_indicator_hud.vertalign = "user_bottom";
|
|
if (level.script == "zm_highrise")
|
|
{
|
|
additionalprimaryweapon_indicator_hud.x -= 100;
|
|
additionalprimaryweapon_indicator_hud.y -= 80;
|
|
}
|
|
else if (level.script == "zm_tomb")
|
|
{
|
|
additionalprimaryweapon_indicator_hud.x -= 75;
|
|
additionalprimaryweapon_indicator_hud.y -= 60;
|
|
}
|
|
else
|
|
{
|
|
additionalprimaryweapon_indicator_hud.x -= 75;
|
|
additionalprimaryweapon_indicator_hud.y -= 80;
|
|
}
|
|
additionalprimaryweapon_indicator_hud.alpha = 0;
|
|
additionalprimaryweapon_indicator_hud.color = ( 1, 1, 1 );
|
|
additionalprimaryweapon_indicator_hud.hidewheninmenu = 1;
|
|
additionalprimaryweapon_indicator_hud setShader("specialty_additionalprimaryweapon_zombies", 24, 24);
|
|
|
|
while (1)
|
|
{
|
|
self waittill_any("weapon_change", "specialty_additionalprimaryweapon_stop", "spawned_player");
|
|
|
|
if (self hasPerk("specialty_additionalprimaryweapon") && isDefined(self.a_saved_weapon) && self getCurrentWeapon() == self.a_saved_weapon["name"])
|
|
{
|
|
additionalprimaryweapon_indicator_hud fadeOverTime(0.5);
|
|
additionalprimaryweapon_indicator_hud.alpha = 1;
|
|
}
|
|
else
|
|
{
|
|
additionalprimaryweapon_indicator_hud fadeOverTime(0.5);
|
|
additionalprimaryweapon_indicator_hud.alpha = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
additionalprimaryweapon_stowed_weapon_refill()
|
|
{
|
|
self endon("disconnect");
|
|
|
|
while (1)
|
|
{
|
|
string = self waittill_any_return("weapon_change", "weapon_change_complete", "specialty_additionalprimaryweapon_stop", "spawned_player");
|
|
|
|
if(self hasPerk("specialty_additionalprimaryweapon"))
|
|
{
|
|
curr_wep = self getCurrentWeapon();
|
|
if(curr_wep == "none")
|
|
{
|
|
continue;
|
|
}
|
|
|
|
primaries = self getWeaponsListPrimaries();
|
|
foreach(primary in primaries)
|
|
{
|
|
if(primary != maps/mp/zombies/_zm_weapons::get_nonalternate_weapon(curr_wep))
|
|
{
|
|
if(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");
|
|
|
|
reload_time = weaponReloadTime(primary);
|
|
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")
|
|
{
|
|
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))
|
|
{
|
|
reload_amount = 2;
|
|
}
|
|
}
|
|
|
|
if(!isDefined(reload_amount) && reload_time < 1)
|
|
{
|
|
reload_time = 1;
|
|
}
|
|
|
|
if(self hasPerk("specialty_fastreload"))
|
|
{
|
|
reload_time *= getDvarFloat("perk_weapReloadMultiplier");
|
|
}
|
|
|
|
wait reload_time;
|
|
|
|
ammo_clip = self getWeaponAmmoClip(primary);
|
|
ammo_stock = self getWeaponAmmoStock(primary);
|
|
missing_clip = weaponClipSize(primary) - ammo_clip;
|
|
|
|
if(missing_clip > ammo_stock)
|
|
{
|
|
missing_clip = ammo_stock;
|
|
}
|
|
|
|
if(isDefined(reload_amount) && missing_clip > reload_amount)
|
|
{
|
|
missing_clip = reload_amount;
|
|
}
|
|
|
|
self setWeaponAmmoClip(primary, ammo_clip + missing_clip);
|
|
self setWeaponAmmoStock(primary, ammo_stock - missing_clip);
|
|
|
|
dw_primary = weaponDualWieldWeaponName(primary);
|
|
if(dw_primary != "none")
|
|
{
|
|
ammo_clip = self getWeaponAmmoClip(dw_primary);
|
|
ammo_stock = self getWeaponAmmoStock(dw_primary);
|
|
missing_clip = weaponClipSize(dw_primary) - ammo_clip;
|
|
|
|
if(missing_clip > ammo_stock)
|
|
{
|
|
missing_clip = ammo_stock;
|
|
}
|
|
|
|
self setWeaponAmmoClip(dw_primary, ammo_clip + missing_clip);
|
|
self setWeaponAmmoStock(dw_primary, ammo_stock - missing_clip);
|
|
}
|
|
|
|
alt_primary = weaponAltWeaponName(primary);
|
|
if(alt_primary != "none")
|
|
{
|
|
ammo_clip = self getWeaponAmmoClip(alt_primary);
|
|
ammo_stock = self getWeaponAmmoStock(alt_primary);
|
|
missing_clip = weaponClipSize(alt_primary) - ammo_clip;
|
|
|
|
if(missing_clip > ammo_stock)
|
|
{
|
|
missing_clip = ammo_stock;
|
|
}
|
|
|
|
self setWeaponAmmoClip(alt_primary, ammo_clip + missing_clip);
|
|
self setWeaponAmmoStock(alt_primary, ammo_stock - missing_clip);
|
|
}
|
|
|
|
if(isDefined(reload_amount) && self getWeaponAmmoStock(primary) > 0 && self getWeaponAmmoClip(primary) < weaponClipSize(primary))
|
|
{
|
|
self refill_after_time(primary);
|
|
}
|
|
}
|
|
|
|
whos_who_spawn_changes()
|
|
{
|
|
self endon( "disconnect" );
|
|
|
|
while (1)
|
|
{
|
|
self waittill("fake_revive");
|
|
|
|
self.pers_upgrades_awarded["revive"] = 1;
|
|
|
|
self takeweapon("frag_grenade_zm");
|
|
self takeweapon("claymore_zm");
|
|
self giveweapon("sticky_grenade_zm");
|
|
self setweaponammoclip("sticky_grenade_zm", 2);
|
|
|
|
foreach (perk in self.loadout.perks)
|
|
{
|
|
self maps/mp/zombies/_zm_perks::give_perk(perk);
|
|
}
|
|
|
|
self waittill("chugabud_effects_cleanup");
|
|
|
|
self.pers_upgrades_awarded["revive"] = 0;
|
|
}
|
|
}
|
|
|
|
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(is_classic())
|
|
{
|
|
if(level.scr_zm_map_start_location == "rooftop")
|
|
{
|
|
// AN94 to Debris
|
|
level.zones[ "zone_orange_level3a" ].adjacent_zones[ "zone_orange_level3b" ].is_connected = 0;
|
|
|
|
// Trample Steam to Skyscraper
|
|
level.zones[ "zone_green_level3b" ].adjacent_zones[ "zone_blue_level1c" ] structdelete();
|
|
level.zones[ "zone_green_level3b" ].adjacent_zones[ "zone_blue_level1c" ] = undefined;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if(level.scr_zm_map_start_location == "farm")
|
|
{
|
|
// Barn to Farm
|
|
flag_set("OnFarm_enter");
|
|
}
|
|
}
|
|
}
|
|
|
|
vulture_disable_stink_while_standing()
|
|
{
|
|
self endon( "disconnect" );
|
|
|
|
if(!(is_classic() && level.scr_zm_map_start_location == "processing"))
|
|
{
|
|
return;
|
|
}
|
|
|
|
while(!isDefined(self.perk_vulture))
|
|
{
|
|
wait 0.05;
|
|
}
|
|
|
|
while(1)
|
|
{
|
|
if (!self.perk_vulture.active)
|
|
{
|
|
wait 0.05;
|
|
continue;
|
|
}
|
|
|
|
self.perk_vulture.is_in_zombie_stink = 1;
|
|
self.perk_vulture.stink_time_entered = undefined;
|
|
|
|
b_player_in_zombie_stink = 0;
|
|
a_close_points = arraysort( level.perk_vulture.zombie_stink_array, self.origin, 1, 300 );
|
|
if ( a_close_points.size > 0 )
|
|
{
|
|
if(isDefined(level._is_player_in_zombie_stink))
|
|
{
|
|
b_player_in_zombie_stink = self [[level._is_player_in_zombie_stink]]( a_close_points );
|
|
}
|
|
}
|
|
|
|
if (b_player_in_zombie_stink)
|
|
{
|
|
vel = self GetVelocity();
|
|
magnitude = sqrt((vel[0] * vel[0]) + (vel[1] * vel[1]) + (vel[2] * vel[2]));
|
|
if (magnitude < 125)
|
|
{
|
|
self.perk_vulture.is_in_zombie_stink = 0;
|
|
|
|
wait 0.25;
|
|
|
|
while (self.vulture_stink_value > 0)
|
|
{
|
|
wait 0.05;
|
|
}
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
destroy_on_intermission()
|
|
{
|
|
self endon("death");
|
|
|
|
level waittill("intermission");
|
|
|
|
if(self.elemtype == "bar")
|
|
{
|
|
self.bar destroy();
|
|
self.barframe destroy();
|
|
}
|
|
|
|
self destroy();
|
|
}
|
|
|
|
test()
|
|
{
|
|
while(1)
|
|
{
|
|
wait 1;
|
|
}
|
|
} |