Files
Recompilable-gscs-for-BO2-z…/zm_buried_patch/maps/mp/zm_buried_buildables.gsc
2020-06-05 01:51:32 -07:00

1488 lines
47 KiB
Plaintext

#include maps/mp/zombies/_zm_unitrigger;
#include maps/mp/zombies/_zm_weap_claymore;
#include maps/mp/zombies/_zm_melee_weapon;
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_stats;
#include maps/mp/zombies/_zm_score;
#include maps/mp/zombies/_zm_buildables_pooled;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_magicbox;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/zombies/_zm_buildables;
#include maps/mp/_utility;
#include common_scripts/utility;
prepare_chalk_weapon_list()
{
level.buildable_wallbuy_weapons = [];
level.buildable_wallbuy_weapons[ 0 ] = "ak74u_zm";
level.buildable_wallbuy_weapons[ 1 ] = "an94_zm";
level.buildable_wallbuy_weapons[ 2 ] = "pdw57_zm";
level.buildable_wallbuy_weapons[ 3 ] = "svu_zm";
level.buildable_wallbuy_weapons[ 4 ] = "tazer_knuckles_zm";
level.buildable_wallbuy_weapons[ 5 ] = "870mcs_zm";
level.buildable_wallbuy_weapon_hints = [];
level.buildable_wallbuy_weapon_hints[ "ak74u_zm" ] = &"ZM_BURIED_WB_AK74U";
level.buildable_wallbuy_weapon_hints[ "an94_zm" ] = &"ZM_BURIED_WB_AN94";
level.buildable_wallbuy_weapon_hints[ "pdw57_zm" ] = &"ZM_BURIED_WB_PDW57";
level.buildable_wallbuy_weapon_hints[ "svu_zm" ] = &"ZM_BURIED_WB_SVU";
level.buildable_wallbuy_weapon_hints[ "tazer_knuckles_zm" ] = &"ZM_BURIED_WB_TAZER";
level.buildable_wallbuy_weapon_hints[ "870mcs_zm" ] = &"ZM_BURIED_WB_870MCS";
level.buildable_wallbuy_pickup_hints = [];
level.buildable_wallbuy_pickup_hints[ "ak74u_zm" ] = &"ZM_BURIED_PU_AK74U";
level.buildable_wallbuy_pickup_hints[ "an94_zm" ] = &"ZM_BURIED_PU_AN94";
level.buildable_wallbuy_pickup_hints[ "pdw57_zm" ] = &"ZM_BURIED_PU_PDW57";
level.buildable_wallbuy_pickup_hints[ "svu_zm" ] = &"ZM_BURIED_PU_SVU";
level.buildable_wallbuy_pickup_hints[ "tazer_knuckles_zm" ] = &"ZM_BURIED_PU_TAZER";
level.buildable_wallbuy_pickup_hints[ "870mcs_zm" ] = &"ZM_BURIED_PU_870MCS";
level.buildable_wallbuy_weapon_models = [];
level.buildable_wallbuy_weapon_angles = [];
_a64 = level.buildable_wallbuy_weapon_models;
_k64 = getFirstArrayKey( _a64 );
while ( isDefined( _k64 ) )
{
model = _a64[ _k64 ];
if ( isDefined( model ) )
{
precachemodel( model );
}
_k64 = getNextArrayKey( _a64, _k64 );
}
}
init_buildables( buildablesenabledlist )
{
registerclientfield( "scriptmover", "buildable_glint_fx", 12000, 1, "int" );
precacheitem( "chalk_draw_zm" );
precacheitem( "no_hands_zm" );
level._effect[ "wallbuy_replace" ] = loadfx( "maps/zombie_buried/fx_buried_booze_candy_spawn" );
level._effect[ "wallbuy_drawing" ] = loadfx( "maps/zombie/fx_zmb_wall_dyn_chalk_drawing" );
level.str_buildables_build = &"ZOMBIE_BUILD_SQ_COMMON";
level.str_buildables_building = &"ZOMBIE_BUILDING_SQ_COMMON";
level.str_buildables_grab_part = &"ZOMBIE_BUILD_PIECE_GRAB";
level.str_buildables_swap_part = &"ZOMBIE_BUILD_PIECE_SWITCH";
level.safe_place_for_buildable_piece = ::safe_place_for_buildable_piece;
level.buildable_slot_count = max( 1, 2 ) + 1;
level.buildable_clientfields = [];
level.buildable_clientfields[ 0 ] = "buildable";
level.buildable_clientfields[ 1 ] = "buildable" + "_pu";
level.buildable_piece_counts = [];
level.buildable_piece_counts[ 0 ] = 15;
level.buildable_piece_counts[ 1 ] = 4;
if ( -1 )
{
level.buildable_clientfields[ 2 ] = "buildable" + "_sq";
level.buildable_piece_counts[ 2 ] = 13;
}
if ( isinarray( buildablesenabledlist, "sq_common" ) )
{
add_zombie_buildable( "sq_common", level.str_buildables_build, level.str_buildables_building );
}
if ( isinarray( buildablesenabledlist, "buried_sq_tpo_switch" ) )
{
add_zombie_buildable( "buried_sq_tpo_switch", level.str_buildables_build, level.str_buildables_building );
}
if ( isinarray( buildablesenabledlist, "buried_sq_ghost_lamp" ) )
{
add_zombie_buildable( "buried_sq_ghost_lamp", level.str_buildables_build, level.str_buildables_building );
}
if ( isinarray( buildablesenabledlist, "buried_sq_bt_m_tower" ) )
{
add_zombie_buildable( "buried_sq_bt_m_tower", level.str_buildables_build, level.str_buildables_building );
}
if ( isinarray( buildablesenabledlist, "buried_sq_bt_r_tower" ) )
{
add_zombie_buildable( "buried_sq_bt_r_tower", level.str_buildables_build, level.str_buildables_building );
}
if ( isinarray( buildablesenabledlist, "buried_sq_oillamp" ) )
{
add_zombie_buildable( "buried_sq_oillamp", level.str_buildables_build, level.str_buildables_building, &"NULL_EMPTY" );
}
if ( isinarray( buildablesenabledlist, "turbine" ) )
{
add_zombie_buildable( "turbine", level.str_buildables_build, level.str_buildables_building, &"NULL_EMPTY" );
add_zombie_buildable_vox_category( "turbine", "trb" );
}
if ( isinarray( buildablesenabledlist, "springpad_zm" ) )
{
add_zombie_buildable( "springpad_zm", level.str_buildables_build, level.str_buildables_building, &"NULL_EMPTY" );
add_zombie_buildable_vox_category( "springpad_zm", "stm" );
}
if ( isinarray( buildablesenabledlist, "subwoofer_zm" ) )
{
add_zombie_buildable( "subwoofer_zm", level.str_buildables_build, level.str_buildables_building, &"NULL_EMPTY" );
add_zombie_buildable_vox_category( "subwoofer_zm", "sw" );
}
if ( isinarray( buildablesenabledlist, "headchopper_zm" ) )
{
add_zombie_buildable( "headchopper_zm", level.str_buildables_build, level.str_buildables_building, &"NULL_EMPTY" );
add_zombie_buildable_vox_category( "headchopper_zm", "hc" );
}
if ( isinarray( buildablesenabledlist, "booze" ) )
{
add_zombie_buildable( "booze", &"ZM_BURIED_LEAVE_BOOZE", level.str_buildables_building, &"NULL_EMPTY" );
add_zombie_buildable_piece_vox_category( "booze", "booze" );
}
if ( isinarray( buildablesenabledlist, "candy" ) )
{
add_zombie_buildable( "candy", &"ZM_BURIED_LEAVE_CANDY", level.str_buildables_building, &"NULL_EMPTY" );
add_zombie_buildable_piece_vox_category( "candy", "candy" );
}
if ( isinarray( buildablesenabledlist, "chalk" ) )
{
add_zombie_buildable( "chalk", &"NULL_EMPTY", level.str_buildables_building, &"NULL_EMPTY" );
add_zombie_buildable_piece_vox_category( "chalk", "gunshop_chalk", 300 );
}
if ( isinarray( buildablesenabledlist, "sloth" ) )
{
add_zombie_buildable( "sloth", &"ZM_BURIED_BOOZE_GV", level.str_buildables_building, &"NULL_EMPTY" );
}
if ( isinarray( buildablesenabledlist, "keys_zm" ) )
{
add_zombie_buildable( "keys_zm", &"ZM_BURIED_KEYS_BL", level.str_buildables_building, &"NULL_EMPTY" );
add_zombie_buildable_piece_vox_category( "keys_zm", "key" );
}
level thread chalk_host_migration();
}
include_buildables( buildablesenabledlist )
{
turbine_fan = generate_zombie_buildable_piece( "turbine", "p6_zm_buildable_turbine_fan", 32, 64, 0, "zm_hud_icon_fan", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 1 );
turbine_panel = generate_zombie_buildable_piece( "turbine", "p6_zm_buildable_turbine_rudder", 32, 64, 0, "zm_hud_icon_rudder", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 2 );
turbine_body = generate_zombie_buildable_piece( "turbine", "p6_zm_buildable_turbine_mannequin", 32, 15, 0, "zm_hud_icon_mannequin", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 3 );
springpad_door = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_door", 32, 64, 0, "zom_hud_trample_steam_screen", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_02", undefined, 4 );
springpad_flag = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_bellows", 32, 15, 0, "zom_hud_trample_steam_bellow", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_04", undefined, 5 );
springpad_motor = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_compressor", 32, 15, 0, "zom_hud_trample_steam_compressor", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_01", undefined, 6 );
springpad_whistle = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_flag", 48, 15, 0, "zom_hud_trample_steam_whistle", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_03", undefined, 7 );
sq_common_electricbox = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_electric_box", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "tag_part_02", undefined, 1, 2 );
sq_common_meteor = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_meteor", 32, 64, 0, "zm_hud_icon_sq_meteor", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 2, 2 );
sq_common_scaffolding = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_scaffolding", 64, 96, 0, "zm_hud_icon_sq_scafold", ::onpickup_common, ::ondrop_common, undefined, "tag_part_01", undefined, 3, 2 );
sq_common_transceiver = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_transceiver", 64, 96, 0, "zm_hud_icon_sq_tranceiver", ::onpickup_common, ::ondrop_common, undefined, "tag_part_03", undefined, 4, 2 );
sq_lamp_piece = generate_zombie_buildable_piece( "buried_sq_oillamp", "p6_zm_bu_lantern_silver_on", 32, 64, 0, "zm_hud_icon_jetgun_engine", ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, 13, 2 );
sq_m_tower_vacuum_tube = generate_zombie_buildable_piece( "buried_sq_bt_m_tower", "p6_zm_bu_sq_vaccume_tube", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "j_vaccume_01", undefined, 7, 2 );
sq_m_tower_battery = generate_zombie_buildable_piece( "buried_sq_bt_m_tower", "p6_zm_bu_sq_buildable_battery", 32, 64, 0, "zm_hud_icon_battery", ::onpickup_common, ::ondrop_common, undefined, "j_battery", undefined, 8, 2 );
sq_r_tower_crystal = generate_zombie_buildable_piece( "buried_sq_bt_r_tower", "p6_zm_bu_sq_crystal", 96, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "j_crystal_01", undefined, 9, 2 );
sq_r_tower_satellite = generate_zombie_buildable_piece( "buried_sq_bt_r_tower", "p6_zm_bu_sq_satellite_dish", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, "j_satellite", undefined, undefined, 10, 2 );
sq_s_tower_antenna = generate_zombie_buildable_piece( "buried_sq_bt_m_tower", "p6_zm_bu_sq_antenna", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "j_antenna", undefined, 11, 2 );
sq_s_tower_wire = generate_zombie_buildable_piece( "buried_sq_bt_m_tower", "p6_zm_bu_sq_wire_spool", 32, 64, 0, "zm_hud_icon_sq_powerbox", ::onpickup_common, ::ondrop_common, undefined, "j_wire", undefined, 12, 2 );
subwoofer_speaker = generate_zombie_buildable_piece( "subwoofer_zm", "t6_wpn_zmb_subwoofer_parts_speaker", 32, 64, 0, "zom_hud_icon_buildable_woof_speaker", ::onpickup_common, ::ondrop_common, undefined, "TAG_SPEAKER", undefined, 8 );
subwoofer_motor = generate_zombie_buildable_piece( "subwoofer_zm", "t6_wpn_zmb_subwoofer_parts_motor", 48, 15, 0, "zom_hud_icon_buildable_woof_motor", ::onpickup_common, ::ondrop_common, undefined, "TAG_ENGINE", undefined, 9 );
subwoofer_table = generate_zombie_buildable_piece( "subwoofer_zm", "t6_wpn_zmb_subwoofer_parts_table", 48, 15, 0, "zom_hud_icon_buildable_woof_frame", ::onpickup_common, ::ondrop_common, undefined, "TAG_SPIN", undefined, 11 );
subwoofer_mount = generate_zombie_buildable_piece( "subwoofer_zm", "t6_wpn_zmb_subwoofer_parts_mount", 32, 15, 0, "zom_hud_icon_buildable_woof_chains", ::onpickup_common, ::ondrop_common, undefined, "TAG_MOUNT", undefined, 10 );
headchopper_blade = generate_zombie_buildable_piece( "headchopper_zm", "t6_wpn_zmb_chopper_part_blade", 32, 64, 0, "zom_hud_icon_buildable_chop_a", ::onpickup_common, ::ondrop_common, undefined, "TAG_SAW", undefined, 12 );
headchopper_crank = generate_zombie_buildable_piece( "headchopper_zm", "t6_wpn_zmb_chopper_part_crank", 32, 15, 0, "zom_hud_icon_buildable_chop_b", ::onpickup_common, ::ondrop_common, undefined, "TAG_CRANK", undefined, 13 );
headchopper_hinge = generate_zombie_buildable_piece( "headchopper_zm", "t6_wpn_zmb_chopper_part_hinge", 32, 15, 0, "zom_hud_icon_buildable_chop_c", ::onpickup_common, ::ondrop_common, undefined, "TAG_GEARS", undefined, 14 );
headchopper_mount = generate_zombie_buildable_piece( "headchopper_zm", "t6_wpn_zmb_chopper_part_mount", 32, 15, 0, "zom_hud_icon_buildable_chop_d", ::onpickup_common, ::ondrop_common, undefined, "TAG_MOUNT", undefined, 15 );
bottle = generate_zombie_buildable_piece( "booze", "p6_zm_bu_booze", 32, 64, 2,4, "zom_hud_icon_buildable_sloth_booze", ::onpickup_booze, ::ondrop_booze, undefined, undefined, 0, 1, 1 );
cane = generate_zombie_buildable_piece( "candy", "p6_zm_bu_sloth_candy_bowl", 32, 64, 2,4, "zom_hud_icon_buildable_sloth_candy", ::onpickup_candy, ::ondrop_candy, undefined, undefined, 0, 2, 1 );
pencil = generate_zombie_buildable_piece( "chalk", "p6_zm_bu_chalk", 32, 64, 2,4, "zom_hud_icon_buildable_weap_chalk", ::onpickup_common, ::ondrop_chalk, undefined, undefined, 0, 4, 1 );
key_chain = generate_zombie_buildable_piece( "keys_zm", "p6_zm_bu_sloth_key", 32, 64, 9, "zom_hud_icon_buildable_sloth_key", ::onpickup_keys, ::ondrop_keys, undefined, undefined, 0, 3, 1 );
if ( isinarray( buildablesenabledlist, "turbine" ) )
{
turbine = spawnstruct();
turbine.name = "turbine";
turbine add_buildable_piece( turbine_fan );
turbine add_buildable_piece( turbine_panel );
turbine add_buildable_piece( turbine_body );
turbine.onuseplantobject = ::onuseplantobject_turbine;
turbine.triggerthink = ::turbinebuildable;
include_buildable( turbine );
maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "turbine_buildable_trigger" );
}
if ( isinarray( buildablesenabledlist, "springpad_zm" ) )
{
springpad = spawnstruct();
springpad.name = "springpad_zm";
springpad add_buildable_piece( springpad_door );
springpad add_buildable_piece( springpad_flag );
springpad add_buildable_piece( springpad_motor );
springpad add_buildable_piece( springpad_whistle );
springpad.triggerthink = ::springpadbuildable;
include_buildable( springpad );
}
if ( isinarray( buildablesenabledlist, "sq_common" ) )
{
if ( is_sidequest_allowed( "zclassic" ) )
{
sqcommon = spawnstruct();
sqcommon.name = "sq_common";
sqcommon add_buildable_piece( sq_common_electricbox );
sqcommon add_buildable_piece( sq_common_meteor );
sqcommon add_buildable_piece( sq_common_scaffolding );
sqcommon add_buildable_piece( sq_common_transceiver );
sqcommon.triggerthink = ::sqcommonbuildable;
include_buildable( sqcommon );
maps/mp/zombies/_zm_buildables::hide_buildable_table_model( "sq_common_buildable_trigger" );
}
}
if ( isinarray( buildablesenabledlist, "buried_sq_oillamp" ) )
{
if ( is_sidequest_allowed( "zclassic" ) )
{
sq_oillamp = spawnstruct();
sq_oillamp.name = "buried_sq_oillamp";
sq_oillamp add_buildable_piece( sq_lamp_piece );
sq_oillamp.triggerthink = ::sqoillampbuildable;
include_buildable( sq_oillamp );
}
}
if ( isinarray( buildablesenabledlist, "buried_sq_bt_m_tower" ) )
{
if ( is_sidequest_allowed( "zclassic" ) )
{
sq_m_tower = spawnstruct();
sq_m_tower.name = "buried_sq_bt_m_tower";
sq_m_tower add_buildable_piece( sq_m_tower_vacuum_tube );
sq_m_tower add_buildable_piece( sq_m_tower_battery );
sq_m_tower add_buildable_piece( sq_s_tower_antenna, undefined, 1 );
sq_m_tower add_buildable_piece( sq_s_tower_wire, undefined, 1 );
sq_m_tower.triggerthink = ::sqmtowerbuildable;
sq_m_tower.onuseplantobject = ::onuseplantobject_mtower;
include_buildable( sq_m_tower );
}
else
{
remove_maxis_tower();
}
}
if ( isinarray( buildablesenabledlist, "buried_sq_bt_r_tower" ) )
{
if ( is_sidequest_allowed( "zclassic" ) )
{
sq_r_tower = spawnstruct();
sq_r_tower.name = "buried_sq_bt_r_tower";
sq_r_tower add_buildable_piece( sq_r_tower_crystal );
sq_r_tower add_buildable_piece( sq_r_tower_satellite );
sq_r_tower add_buildable_piece( sq_s_tower_antenna, undefined, 1 );
sq_r_tower add_buildable_piece( sq_s_tower_wire, undefined, 1 );
sq_r_tower.triggerthink = ::sqrtowerbuildable;
sq_r_tower.onuseplantobject = ::onuseplantobject_rtower;
include_buildable( sq_r_tower );
}
else
{
remove_ricky_tower();
}
}
if ( isinarray( buildablesenabledlist, "subwoofer_zm" ) )
{
subwoofer = spawnstruct();
subwoofer.name = "subwoofer_zm";
subwoofer add_buildable_piece( subwoofer_speaker );
subwoofer add_buildable_piece( subwoofer_motor );
subwoofer add_buildable_piece( subwoofer_table );
subwoofer add_buildable_piece( subwoofer_mount );
subwoofer.triggerthink = ::subwooferbuildable;
include_buildable( subwoofer );
}
if ( isinarray( buildablesenabledlist, "headchopper_zm" ) )
{
ent = getent( "buildable_headchopper", "targetname" );
ent setmodel( "t6_wpn_zmb_chopper" );
headchopper = spawnstruct();
headchopper.name = "headchopper_zm";
headchopper add_buildable_piece( headchopper_blade );
headchopper add_buildable_piece( headchopper_crank );
headchopper add_buildable_piece( headchopper_hinge );
headchopper add_buildable_piece( headchopper_mount );
headchopper.triggerthink = ::headchopperbuildable;
include_buildable( headchopper );
}
if ( isinarray( buildablesenabledlist, "booze" ) )
{
level.booze_model = "p6_zm_bu_sloth_booze_jug";
precachemodel( level.booze_model );
bottle.hint_grab = &"ZM_BURIED_BOOZE_G";
bottle.hint_swap = &"ZM_BURIED_BOOZE_G";
bottle manage_multiple_pieces( 2 );
bottle.onspawn = ::piece_spawn_booze;
bottle.onunspawn = ::piece_unspawn_booze;
bottle.ondestroy = ::piece_destroy_booze;
level.booze_piece = bottle;
booze = spawnstruct();
booze.name = "booze";
booze.hint_more = &"ZM_BURIED_I_NEED_BOOZE";
booze.hint_wrong = &"ZM_BURIED_I_SAID_BOOZE";
booze add_buildable_piece( bottle );
booze.triggerthink = ::boozebuildable;
booze.onuseplantobject = ::onuseplantobject_booze_and_candy;
include_buildable( booze );
}
if ( isinarray( buildablesenabledlist, "candy" ) )
{
level.candy_model = "p6_zm_bu_sloth_candy_bowl";
precachemodel( level.candy_model );
cane.hint_grab = &"ZM_BURIED_CANDY_G";
cane.hint_swap = &"ZM_BURIED_CANDY_G";
cane manage_multiple_pieces( 1 );
cane.onspawn = ::piece_spawn_candy;
cane.onunspawn = ::piece_unspawn_candy;
cane.ondestroy = ::piece_destroy_candy;
level.candy_piece = cane;
candy = spawnstruct();
candy.name = "candy";
candy.hint_more = &"ZM_BURIED_I_WANT_CANDY";
candy.hint_wrong = &"ZM_BURIED_THATS_NOT_CANDY";
candy add_buildable_piece( cane );
candy.triggerthink = ::candybuildable;
candy.onuseplantobject = ::onuseplantobject_booze_and_candy;
include_buildable( candy );
}
if ( isinarray( buildablesenabledlist, "sloth" ) )
{
sloth_buildable = spawnstruct();
sloth_buildable.name = "sloth";
sloth_buildable.hint_more = &"NULL_EMPTY";
sloth_buildable.hint_wrong = &"NULL_EMPTY";
sloth_buildable add_buildable_piece( bottle );
sloth_buildable add_buildable_piece( cane );
sloth_buildable.triggerthink = ::slothbuildable;
sloth_buildable.onuseplantobject = ::onuseplantobject_sloth;
sloth_buildable.snd_build_add_vo_override = ::empty;
include_buildable( sloth_buildable );
}
if ( isinarray( buildablesenabledlist, "chalk" ) )
{
pencil.hint_grab = level.str_buildables_grab_part;
pencil.hint_swap = level.str_buildables_swap_part;
pencil.onspawn = ::piece_spawn_chalk;
pencil.ondestroy = ::piece_destroy_chalk;
pencil manage_multiple_pieces( 6, 6 );
chalk = spawnstruct();
chalk.name = "chalk";
chalk.hint_more = &"NULL_EMPTY";
chalk.hint_wrong = &"NULL_EMPTY";
chalk add_buildable_piece( pencil );
chalk.triggerthink = ::chalkbuildable;
chalk.onuseplantobject = ::onuseplantobject_chalk;
if ( isDefined( level.buy_random_wallbuys ) && level.buy_random_wallbuys )
{
chalk.oncantuse = ::oncantuse_chalk;
}
chalk.onbeginuse = ::onbeginuse_chalk;
chalk.onenduse = ::onenduse_chalk;
include_buildable( chalk );
}
if ( isinarray( buildablesenabledlist, "keys_zm" ) )
{
key_chain.onspawn = ::onspawn_keys;
key_chain manage_multiple_pieces( 2 );
key_chain.hint_grab = &"ZM_BURIED_KEY_G";
key_chain.hint_swap = &"ZM_BURIED_KEY_G";
key = spawnstruct();
key.name = "keys_zm";
key add_buildable_piece( key_chain );
key.triggerthink = ::keysbuildable;
key.onuseplantobject = ::onuseplantobject_key;
key.hint_wrong = &"NULL_EMPTY";
include_buildable( key );
}
generate_piece_makers();
level thread maps/mp/zombies/_zm_buildables_pooled::randomize_pooled_buildables( "buried" );
}
sqcommonbuildable()
{
level.sq_buildable = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "sq_common_buildable_trigger", "sq_common", "sq_common", "", 1, 0 );
if ( isDefined( level.sq_buildable ) )
{
level.sq_buildable.ignore_open_sesame = 1;
}
}
sqmtowerbuildable()
{
level.sq_mtower_buildable = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "sq_m_tower_buildable_trigger", "buried_sq_bt_m_tower", "buried_sq_bt_m_tower", "", 1, 0 );
level.sq_mtower_buildable.ignore_open_sesame = 1;
}
remove_all_ents( named )
{
ents = getentarray( named, "targetname" );
_a516 = ents;
_k516 = getFirstArrayKey( _a516 );
while ( isDefined( _k516 ) )
{
ent = _a516[ _k516 ];
ent delete();
_k516 = getNextArrayKey( _a516, _k516 );
}
}
remove_maxis_tower()
{
remove_all_ents( "sq_m_tower_buildable_trigger" );
}
sqrtowerbuildable()
{
level.sq_rtower_buildable = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "sq_r_tower_buildable_trigger", "buried_sq_bt_r_tower", "buried_sq_bt_r_tower", "", 1, 0 );
level.sq_rtower_buildable.ignore_open_sesame = 1;
}
remove_ricky_tower()
{
remove_all_ents( "guillotine_trigger" );
remove_all_ents( "ricky_tower_col" );
remove_all_ents( "sq_r_tower_buildable_trigger" );
}
turbinebuildable()
{
level.turbine_buildable = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "turbine_buildable_trigger", "turbine", "equip_turbine_zm", &"ZOMBIE_EQUIP_TURBINE_PICKUP_HINT_STRING", 1, 1 );
maps/mp/zombies/_zm_buildables_pooled::add_buildable_to_pool( level.turbine_buildable, "buried" );
}
springpadbuildable()
{
stub = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "springpad_zm_buildable_trigger", "springpad_zm", "equip_springpad_zm", &"ZM_BURIED_EQ_SP_PHS", 1, 1 );
maps/mp/zombies/_zm_buildables_pooled::add_buildable_to_pool( stub, "buried" );
}
subwooferbuildable()
{
stub = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "subwoofer_zm_buildable_trigger", "subwoofer_zm", "equip_subwoofer_zm", &"ZM_BURIED_EQ_SW_PHS", 1, 1 );
maps/mp/zombies/_zm_buildables_pooled::add_buildable_to_pool( stub, "buried" );
}
headchopperbuildable()
{
stub = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "headchopper_buildable_trigger", "headchopper_zm", "equip_headchopper_zm", &"ZM_BURIED_EQ_HC_PHS", 1, 1 );
maps/mp/zombies/_zm_buildables_pooled::add_buildable_to_pool( stub, "buried" );
}
boozebuildable()
{
booze_builds = maps/mp/zombies/_zm_buildables::buildable_trigger_think_array( "booze_buildable_trigger", "booze", "booze", &"ZM_BURIED_BOOZE_G", 1, 0 );
_a567 = booze_builds;
_k567 = getFirstArrayKey( _a567 );
while ( isDefined( _k567 ) )
{
stub = _a567[ _k567 ];
stub.ignore_open_sesame = 1;
stub.require_look_at = 0;
stub bpstub_set_custom_think_callback( ::bptrigger_think_unbuild_no_return );
_k567 = getNextArrayKey( _a567, _k567 );
}
}
candybuildable()
{
candy_builds = maps/mp/zombies/_zm_buildables::buildable_trigger_think_array( "candy_buildable_trigger", "candy", "candy", &"ZM_BURIED_CANDY_G", 1, 0 );
_a579 = candy_builds;
_k579 = getFirstArrayKey( _a579 );
while ( isDefined( _k579 ) )
{
stub = _a579[ _k579 ];
stub.ignore_open_sesame = 1;
stub.require_look_at = 0;
stub bpstub_set_custom_think_callback( ::bptrigger_think_unbuild_no_return );
_k579 = getNextArrayKey( _a579, _k579 );
}
}
sloth_in_armory_near_bench()
{
return 1;
}
slothbuildable()
{
}
chalkbuildable()
{
level.chalk_builds = maps/mp/zombies/_zm_buildables::buildable_trigger_think_array( "chalk_buildable_trigger", "chalk", "chalk", level.str_buildables_grab_part, 1, 0 );
_a630 = level.chalk_builds;
_k630 = getFirstArrayKey( _a630 );
while ( isDefined( _k630 ) )
{
stub = _a630[ _k630 ];
stub.prompt_and_visibility_func = ::chalk_prompt;
stub.script_length = 16;
stub.ignore_open_sesame = 1;
stub.build_weapon = "chalk_draw_zm";
stub.building_prompt = &"ZM_BURIED_DRAW";
if ( isDefined( stub.target ) )
{
wallbuy = getstruct( stub.target, "targetname" );
stub.origin = wallbuy.origin;
stub.angles = wallbuy.angles;
if ( isDefined( wallbuy.script_location ) )
{
stub.location = wallbuy.script_location;
}
}
_k630 = getNextArrayKey( _a630, _k630 );
}
}
keysbuildable()
{
door = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "cell_door_trigger", "keys_zm", "keys_zm", "", 1, 3 );
if ( isDefined( door ) )
{
door.ignore_open_sesame = 1;
door.prompt_and_visibility_func = ::cell_door_key_prompt;
door.script_unitrigger_type = "unitrigger_radius_use";
door.radius = 32;
door.test_radius_sq = ( door.radius + 15 ) * ( door.radius + 15 );
door.building_prompt = &"ZM_BURIED_UNLOCKING";
thread watch_cell_open_close( door );
}
}
safe_place_for_buildable_piece( piece )
{
if ( self is_jumping() )
{
return 0;
}
if ( piece.buildablename == "booze" )
{
return 0;
}
return 1;
}
onuseplantobject_mtower( player )
{
if ( !isDefined( player player_get_buildable_piece( 2 ) ) )
{
return;
}
switch( player player_get_buildable_piece( 2 ).modelname )
{
case "p6_zm_bu_sq_vaccume_tube":
level setclientfield( "sq_gl_b_vt", 1 );
break;
case "p6_zm_bu_sq_buildable_battery":
level setclientfield( "sq_gl_b_bb", 1 );
break;
case "p6_zm_bu_sq_antenna":
level setclientfield( "sq_gl_b_a", 1 );
break;
case "p6_zm_bu_sq_wire_spool":
level setclientfield( "sq_gl_b_ws", 1 );
break;
}
level notify( "mtower_object_planted" );
}
onuseplantobject_rtower( player )
{
if ( !isDefined( player player_get_buildable_piece( 2 ) ) )
{
return;
}
m_tower = getent( "sq_guillotine", "targetname" );
switch( player player_get_buildable_piece( 2 ).modelname )
{
case "p6_zm_bu_sq_crystal":
m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_crystal", "j_crystal_01" );
break;
case "p6_zm_bu_sq_satellite_dish":
m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_satellite_dish", "j_satellite" );
break;
case "p6_zm_bu_sq_antenna":
m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_antenna", "j_antenna" );
break;
case "p6_zm_bu_sq_wire_spool":
m_tower sq_tower_spawn_attachment( "p6_zm_bu_sq_wire_spool", "j_spool" );
break;
}
level notify( "rtower_object_planted" );
}
sq_tower_spawn_attachment( str_model, str_tag )
{
m_part = spawn( "script_model", self gettagorigin( str_tag ) );
m_part.angles = self gettagangles( str_tag );
m_part setmodel( str_model );
}
sqoillampbuildable()
{
level.sq_lamp_generator_unitrig = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "generator_use_trigger", "buried_sq_oillamp", "buried_sq_oillamp", "", 1, 0 );
if ( isDefined( level.sq_lamp_generator_unitrig ) )
{
level.sq_lamp_generator_unitrig.ignore_open_sesame = 1;
level.sq_lamp_generator_unitrig.buildablestub_reject_func = ::sq_generator_buildablestub_reject_func;
}
}
sq_generator_buildablestub_reject_func( player )
{
if ( !flag( "ftl_lantern_charged" ) )
{
return 1;
}
return 0;
}
ondrop_common( player )
{
/#
println( "ZM >> Common part callback onDrop()" );
#/
self.piece_owner = undefined;
}
onpickup_common( player )
{
/#
println( "ZM >> Common part callback onPickup()" );
#/
self.piece_owner = player;
if ( isDefined( self.buildablename ) )
{
sound = "zmb_buildable_pickup";
if ( self.buildablename == "candy" )
{
sound = "zmb_candy_pickup";
}
if ( self.buildablename == "booze" )
{
sound = "zmb_booze_pickup";
}
if ( self.buildablename == "chalk" )
{
sound = "zmb_chalk_grab";
}
player playsound( sound );
}
}
onuseplantobject_turbine( player )
{
/#
println( "ZM >> Turbine Buildable CallBack onUsePlantObject()" );
#/
buildable = self.buildablezone;
first_part = "tag_part_03";
second_part = "tag_part_02";
i = 0;
while ( i < buildable.pieces.size )
{
if ( buildable.pieces[ i ].part_name == first_part )
{
if ( isDefined( buildable.pieces[ i ].built ) || buildable.pieces[ i ].built && isDefined( player player_get_buildable_piece( 0 ) ) && player player_get_buildable_piece( 0 ).part_name == first_part )
{
buildable.stub.model showpart( second_part );
i++;
continue;
}
else
{
buildable.stub.model hidepart( second_part );
}
}
i++;
}
check_for_buildable_turbine_vox( level.turbine_buildable, 1 );
}
check_for_buildable_turbine_vox( stub, start_build_counter )
{
if ( isDefined( level.maxis_turbine_vox_played ) && level.maxis_turbine_vox_played )
{
return;
}
buildable = stub.buildablezone;
piece_counter = 0;
build_counter = start_build_counter;
i = 0;
while ( i < buildable.pieces.size )
{
if ( isDefined( buildable.pieces[ i ].built ) || buildable.pieces[ i ].built && isDefined( buildable.pieces[ i ].piece_owner ) )
{
piece_counter++;
}
if ( isDefined( buildable.pieces[ i ].built ) && buildable.pieces[ i ].built )
{
build_counter++;
}
i++;
}
if ( build_counter >= 2 && piece_counter == 3 )
{
if ( !flag( "power_on" ) )
{
level.maxis_turbine_vox_played = 1;
}
}
}
watch_player_purchase( name, piece )
{
level endon( "wait_respawn_" + name );
level endon( "start_of_round" );
allow_players_purchase( name, 1 );
level waittill( "player_purchase_" + name, player );
allow_players_purchase( name, 0 );
player player_take_piece( piece );
}
wait_respawn_candy_booze( piece, name )
{
level notify( "wait_respawn_" + name );
level endon( "wait_respawn_" + name );
level endon( "player_purchase_" + name );
level thread watch_player_purchase( name, piece );
level waittill( "start_of_round" );
allow_players_purchase( name, 0 );
piece piece_spawn_at();
}
wait_respawn_booze_at_start( piece )
{
wait 4;
if ( isDefined( level.jail_barricade_down ) && level.jail_barricade_down )
{
level thread wait_respawn_candy_booze( piece, "booze" );
}
else
{
piece piece_spawn_at( piece.start_origin, piece.start_angles );
}
}
piece_spawn_booze()
{
self.model setmodel( level.booze_model );
playfxontag( level._effect[ "booze_candy_spawn" ], self.model, "tag_origin" );
self.model setclientfield( "buildable_glint_fx", 1 );
}
piece_unspawn_booze()
{
if ( isDefined( self.model ) )
{
piece_model = self.model;
self.model = undefined;
piece_model thread destroyglintfx();
}
}
piece_destroy_booze()
{
if ( isDefined( level.jail_barricade_down ) && level.jail_barricade_down )
{
level thread wait_respawn_candy_booze( self, "booze" );
}
else
{
level thread wait_respawn_booze_at_start( self );
}
}
onpickup_booze( player )
{
level notify( "sloth_pickup" );
onpickup_common( player );
if ( isDefined( level.jail_barricade_down ) && !level.jail_barricade_down )
{
if ( !isDefined( level.booze_start_origin ) )
{
level.booze_start_origin = self.start_origin;
level.booze_start_angles = self.start_angles;
}
}
}
piece_spawn_candy()
{
self.model setmodel( level.candy_model );
playfxontag( level._effect[ "booze_candy_spawn" ], self.model, "tag_origin" );
self.model setclientfield( "buildable_glint_fx", 1 );
}
piece_unspawn_candy()
{
if ( isDefined( self.model ) )
{
piece_model = self.model;
self.model = undefined;
piece_model thread destroyglintfx();
}
}
piece_destroy_candy()
{
self.built = 0;
self.building = 0;
level thread wait_respawn_candy_booze( self, "candy" );
}
onpickup_candy( player )
{
level notify( "sloth_pickup" );
onpickup_common( player );
}
ondrop_booze( player )
{
level notify( "sloth_drop" );
player notify( "sloth_drop" );
piece = player player_get_buildable_piece( 1 );
if ( isDefined( piece ) )
{
piece.model setclientfield( "buildable_glint_fx", 1 );
}
ondrop_common( player );
if ( isDefined( level.jail_barricade_down ) && !level.jail_barricade_down )
{
thread wait_put_piece_back_in_jail( piece, level.booze_start_origin, level.booze_start_angles );
}
}
wait_put_piece_back_in_jail( piece, origin, angles )
{
if ( isDefined( piece ) )
{
piece piece_unspawn();
wait 4;
piece piece_unspawn();
piece piece_spawn_at( origin, angles );
}
}
ondrop_candy( player )
{
level notify( "sloth_drop" );
player notify( "sloth_drop" );
piece = player player_get_buildable_piece( 1 );
if ( isDefined( piece ) )
{
piece.model setclientfield( "buildable_glint_fx", 1 );
}
ondrop_common( player );
}
onuseplantobject_booze_and_candy( player )
{
if ( isDefined( self.script_noteworthy ) )
{
switch( self.script_noteworthy )
{
case "candy_bench":
player thread candy_bench( self );
break;
return;
}
}
}
candy_bench( stub )
{
wait 0,2;
level notify( "candy_bench" );
}
onuseplantobject_sloth( player )
{
}
piece_spawn_chalk()
{
if ( !isDefined( self.first_origin ) )
{
self.first_origin = self.start_origin;
self.first_angles = self.start_angles;
}
self thread piece_spawn_chalk_internal();
}
chalk_host_migration()
{
level endon( "end_game" );
level notify( "chalk_hostmigration" );
level endon( "chalk_hostmigration" );
while ( 1 )
{
level waittill( "host_migration_end" );
while ( !isDefined( level.chalk_pieces ) )
{
continue;
}
_a1103 = level.chalk_pieces;
_k1103 = getFirstArrayKey( _a1103 );
while ( isDefined( _k1103 ) )
{
chalk = _a1103[ _k1103 ];
if ( isDefined( chalk.model ) )
{
weapon = chalk.script_noteworthy;
fx = level._effect[ "m14_zm_fx" ];
if ( isDefined( level._effect[ weapon + "_chalk_fx" ] ) )
{
fx = level._effect[ weapon + "_chalk_fx" ];
}
if ( isDefined( level.chalk_buildable_pieces_hide ) && !level.chalk_buildable_pieces_hide )
{
playfxontag( fx, chalk.model, "tag_origin" );
}
}
wait_network_frame();
_k1103 = getNextArrayKey( _a1103, _k1103 );
}
}
}
piece_spawn_chalk_internal()
{
weapon = self.script_noteworthy;
if ( isDefined( weapon ) )
{
if ( !isDefined( level.chalk_pieces ) )
{
level.chalk_pieces = [];
}
level.chalk_pieces = add_to_array( level.chalk_pieces, self, 0 );
self.model setmodel( "tag_origin" );
wait 0,05;
fx = level._effect[ "m14_zm_fx" ];
if ( isDefined( level._effect[ weapon + "_chalk_fx" ] ) )
{
fx = level._effect[ weapon + "_chalk_fx" ];
}
if ( isDefined( level.chalk_buildable_pieces_hide ) && !level.chalk_buildable_pieces_hide )
{
playfxontag( fx, self.model, "tag_origin" );
}
else
{
self.model.origin += vectorScale( ( 0, 0, 0 ), 1000 );
}
if ( isDefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format )
{
self.hint_grab = &"ZM_BURIED_WB";
self.hint_grab_parm1 = get_weapon_display_name( weapon );
}
else
{
if ( isDefined( level.buildable_wallbuy_pickup_hints[ weapon ] ) )
{
self.hint_grab = level.buildable_wallbuy_pickup_hints[ weapon ];
self.hint_grab_parm1 = undefined;
}
else
{
self.hint_grab = &"ZM_BURIED_WALLBUILD";
self.hint_grab_parm1 = undefined;
}
}
self.hint_swap = self.hint_grab;
self.hint_swap_parm1 = self.hint_grab_parm1;
if ( getDvarInt( #"1F0A2129" ) )
{
self.cursor_hint = "HINT_WEAPON";
self.cursor_hint_weapon = weapon;
}
}
}
piece_destroy_chalk()
{
thread wait_unbuild_chalk( self );
}
wait_unbuild_chalk( piece )
{
wait 0,1;
piece.built = 0;
}
ondrop_chalk( player )
{
self piece_unspawn();
self piece_spawn_at( self.first_origin, self.first_angles );
}
pick_up( thing )
{
candidate_list = [];
_a1225 = level.zones;
_k1225 = getFirstArrayKey( _a1225 );
while ( isDefined( _k1225 ) )
{
zone = _a1225[ _k1225 ];
if ( isDefined( zone.unitrigger_stubs ) )
{
candidate_list = arraycombine( candidate_list, zone.unitrigger_stubs, 1, 0 );
}
_k1225 = getNextArrayKey( _a1225, _k1225 );
}
candidate_list = array_randomize( candidate_list );
_a1235 = candidate_list;
_k1235 = getFirstArrayKey( _a1235 );
while ( isDefined( _k1235 ) )
{
stub = _a1235[ _k1235 ];
if ( isDefined( stub.piece ) && stub.piece.buildablename == thing )
{
stub.piece piece_unspawn();
return stub.piece;
}
_k1235 = getNextArrayKey( _a1235, _k1235 );
}
return undefined;
}
chalk_prompt( player )
{
if ( isDefined( level.buy_random_wallbuys ) && level.buy_random_wallbuys )
{
if ( isDefined( self.stub.built ) && !self.stub.built )
{
if ( !isDefined( player player_get_buildable_piece( 1 ) ) || !self.stub.buildablezone buildable_has_piece( player player_get_buildable_piece( 1 ) ) )
{
self.stub.cost = 1500;
self.stub.hint_parm1 = 1500;
self.stub.hint_string = &"ZM_BURIED_RANDOM_WALLBUY";
self sethintstring( self.stub.hint_string, self.stub.cost );
return 1;
}
}
}
can_use = self buildabletrigger_update_prompt( player );
if ( can_use )
{
piece = player player_get_buildable_piece( 1 );
if ( isDefined( piece ) )
{
weapon = piece.script_noteworthy;
if ( isDefined( weapon ) )
{
self.stub.hint_string = level.buildable_wallbuy_weapon_hints[ weapon ];
self sethintstring( self.stub.hint_string );
}
}
}
return can_use;
}
buy_random_wallbuy( player, cost )
{
temp_piece = undefined;
if ( !is_player_valid( player ) )
{
player thread ignore_triggers( 0,5 );
return temp_piece;
}
if ( !player can_buy_weapon() )
{
wait 0,1;
return temp_piece;
}
if ( player has_powerup_weapon() )
{
wait 0,1;
return temp_piece;
}
if ( player.score >= cost )
{
temp_piece = player pick_up( "chalk" );
if ( !isDefined( temp_piece ) )
{
return temp_piece;
}
player maps/mp/zombies/_zm_score::minus_to_player_score( cost );
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" );
player maps/mp/zombies/_zm_stats::increment_client_stat( "wallbuy_weapons_purchased" );
player maps/mp/zombies/_zm_stats::increment_player_stat( "wallbuy_weapons_purchased" );
return temp_piece;
}
player play_sound_on_ent( "no_purchase" );
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
return temp_piece;
}
onbeginuse_chalk( player )
{
player thread player_draw_chalk( self );
}
player_draw_chalk( stub )
{
self endon( "death" );
self endon( "stop_action" );
self notify( "end_chalk_dust" );
self endon( "end_chalk_dust" );
origin = stub.origin;
forward = anglesToForward( stub.angles );
while ( isalive( self ) )
{
playfx( level._effect[ "wallbuy_drawing" ], origin, forward );
wait 0,1;
}
}
onenduse_chalk( team, player, result )
{
player notify( "end_chalk_dust" );
}
oncantuse_chalk( player )
{
if ( self.built )
{
return;
}
if ( !isDefined( player player_get_buildable_piece( 1 ) ) || !self.buildablezone buildable_has_piece( player player_get_buildable_piece( 1 ) ) )
{
self.cost = 1500;
piece = buy_random_wallbuy( player, self.cost );
if ( !isDefined( piece ) )
{
return;
}
weapon = piece.script_noteworthy;
if ( isDefined( weapon ) )
{
origin = self.origin;
angles = self.angles;
if ( isDefined( level._effect[ "wallbuy_replace" ] ) )
{
playfx( level._effect[ "wallbuy_replace" ], origin, anglesToForward( angles ) );
}
add_dynamic_wallbuy( weapon, self.target, 0 );
if ( is_melee_weapon( weapon ) )
{
player maps/mp/zombies/_zm_melee_weapon::give_melee_weapon_by_name( weapon );
}
else
{
if ( is_lethal_grenade( weapon ) )
{
player takeweapon( player get_player_lethal_grenade() );
player set_player_lethal_grenade( weapon );
}
else
{
if ( weapon == "claymore_zm" )
{
player thread maps/mp/zombies/_zm_weap_claymore::show_claymore_hint( "claymore_purchased" );
}
}
player weapon_give( weapon );
}
if ( !isDefined( level.built_wallbuys ) )
{
level.built_wallbuys = 0;
}
level.built_wallbuys++;
if ( level.built_wallbuys >= 6 )
{
level.built_wallbuys = -100;
}
}
self buildablestub_finish_build( player );
self buildablestub_remove();
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self );
}
}
onuseplantobject_chalk( entity )
{
piece = entity player_get_buildable_piece( 1 );
if ( isDefined( piece ) )
{
weapon = piece.script_noteworthy;
if ( isDefined( weapon ) )
{
origin = self.origin;
angles = self.angles;
if ( isDefined( level._effect[ "wallbuy_replace" ] ) )
{
playfx( level._effect[ "wallbuy_replace" ], origin, anglesToForward( angles ) );
}
add_dynamic_wallbuy( weapon, self.target, 1 );
if ( !isDefined( level.built_wallbuys ) )
{
level.built_wallbuys = 0;
}
level.built_wallbuys++;
if ( isplayer( entity ) )
{
entity maps/mp/zombies/_zm_stats::increment_client_stat( "buried_wallbuy_placed", 0 );
entity maps/mp/zombies/_zm_stats::increment_player_stat( "buried_wallbuy_placed" );
entity maps/mp/zombies/_zm_stats::increment_client_stat( "buried_wallbuy_placed_" + weapon, 0 );
entity maps/mp/zombies/_zm_stats::increment_player_stat( "buried_wallbuy_placed_" + weapon );
}
if ( level.built_wallbuys >= 6 )
{
if ( isplayer( entity ) )
{
entity maps/mp/zombies/_zm_score::player_add_points( "build_wallbuy", 2000 );
}
level.built_wallbuys = -100;
return;
}
else
{
if ( isplayer( entity ) )
{
entity maps/mp/zombies/_zm_score::player_add_points( "build_wallbuy", 1000 );
}
}
}
}
}
onspawn_keys()
{
if ( isDefined( self.unitrigger ) && isDefined( self.start_origin ) && self.model.origin == self.start_origin )
{
self.unitrigger.origin_parent = undefined;
self.unitrigger.origin = self.model.origin + vectorScale( ( 0, 0, 0 ), 12 );
}
}
onpickup_keys( player )
{
onpickup_common( player );
if ( isDefined( level.jail_barricade_down ) && !level.jail_barricade_down )
{
if ( !isDefined( level.key_start_origin ) )
{
level.key_start_origin = self.start_origin + vectorScale( ( 0, 0, 0 ), 6 );
level.key_start_angles = self.start_angles;
}
}
}
ondrop_keys( player )
{
piece = player player_get_buildable_piece( 1 );
ondrop_common( player );
if ( isDefined( level.jail_barricade_down ) && !level.jail_barricade_down )
{
thread wait_put_piece_back_in_jail( piece, level.key_start_origin, level.key_start_angles );
}
}
cell_door_key_prompt( player )
{
if ( isDefined( level.cell_open ) && level.cell_open )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
return 0;
}
return self buildabletrigger_update_prompt( player );
}
onuseplantobject_key( player )
{
level notify( "cell_open" );
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "sloth_unlocked" );
}
stub_suspend_buildable( door )
{
door.buildablezone.pieces[ 0 ] piece_unspawn();
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( door );
}
stub_resume_buildable( door )
{
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( door, ::buildable_place_think );
}
watch_cell_open_close( door )
{
level.cell_open = 0;
/#
thread watch_opensesame();
#/
while ( 1 )
{
level waittill( "cell_open" );
level.cell_open = 1;
wait 0,05;
stub_suspend_buildable( door );
level waittill( "cell_close" );
level.cell_open = 0;
stub_resume_buildable( door );
stub_unbuild_buildable( door, 1 );
}
}
watch_opensesame()
{
/#
level waittill( "open_sesame" );
level notify( "cell_open" );
#/
}
destroyglintfx()
{
self setclientfield( "buildable_glint_fx", 0 );
self ghost();
wait_network_frame();
wait_network_frame();
wait_network_frame();
if ( isDefined( self ) )
{
self delete();
}
}
generate_piece_makers()
{
level.piece_makers = [];
level.piece_maker_prompts = [];
level.piece_maker_prompts[ "booze" ] = &"ZM_BURIED_BOOZE_B";
level.piece_maker_prompts[ "candy" ] = &"ZM_BURIED_CANDY_B";
piece_maker_structs = getstructarray( "piece_purchase", "targetname" );
_a1586 = piece_maker_structs;
_k1586 = getFirstArrayKey( _a1586 );
while ( isDefined( _k1586 ) )
{
pm = _a1586[ _k1586 ];
piecename = pm.script_noteworthy;
if ( isDefined( piecename ) )
{
level.piece_makers[ piecename ] = pm piece_maker_unitrigger( "piece_maker", ::piece_maker_update_prompt, ::piece_maker_think );
level.piece_makers[ piecename ].piecename = piecename;
level.piece_makers[ piecename ].allow_purchase = 0;
level.piece_makers[ piecename ].notify_name = "player_purchase_" + piecename;
if ( isDefined( level.piece_maker_prompts[ piecename ] ) )
{
level.piece_makers[ piecename ].buy_prompt = level.piece_maker_prompts[ piecename ];
break;
}
else
{
level.piece_makers[ piecename ].buy_prompt = &"ZM_BURIED_BUY_UNKNOWN_STUFF";
}
}
_k1586 = getNextArrayKey( _a1586, _k1586 );
}
}
allow_players_purchase( name, allow_purchase )
{
if ( isDefined( level.piece_makers[ name ] ) )
{
level.piece_makers[ name ].allow_purchase = allow_purchase;
}
}
piece_maker_unitrigger( name, prompt_fn, think_fn )
{
unitrigger_stub = spawnstruct();
unitrigger_stub.origin = self.origin;
if ( isDefined( self.script_angles ) )
{
unitrigger_stub.angles = self.script_angles;
}
else if ( isDefined( self.angles ) )
{
unitrigger_stub.angles = self.angles;
}
else
{
unitrigger_stub.angles = ( 0, 0, 0 );
}
unitrigger_stub.script_angles = unitrigger_stub.angles;
if ( isDefined( self.script_length ) )
{
unitrigger_stub.script_length = self.script_length;
}
else
{
unitrigger_stub.script_length = 32;
}
if ( isDefined( self.script_width ) )
{
unitrigger_stub.script_width = self.script_width;
}
else
{
unitrigger_stub.script_width = 32;
}
if ( isDefined( self.script_height ) )
{
unitrigger_stub.script_height = self.script_height;
}
else
{
unitrigger_stub.script_height = 64;
}
if ( isDefined( self.radius ) )
{
unitrigger_stub.radius = self.radius;
}
else
{
unitrigger_stub.radius = 32;
}
if ( isDefined( self.script_unitrigger_type ) )
{
unitrigger_stub.script_unitrigger_type = self.script_unitrigger_type;
}
else
{
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
unitrigger_stub.origin -= anglesToRight( unitrigger_stub.angles ) * ( unitrigger_stub.script_length / 2 );
}
unitrigger_stub.cursor_hint = "HINT_NOICON";
unitrigger_stub.targetname = name;
maps/mp/zombies/_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
unitrigger_stub.prompt_and_visibility_func = prompt_fn;
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, think_fn );
return unitrigger_stub;
}
piece_maker_update_prompt( player )
{
if ( isDefined( self.stub.allow_purchase ) && !self.stub.allow_purchase )
{
self sethintstring( "" );
return 0;
}
if ( player.score < 1000 )
{
self sethintstring( "" );
return 0;
}
else
{
self sethintstring( self.stub.buy_prompt, 1000 );
}
return 1;
}
piece_maker_think()
{
self endon( "kill_trigger" );
while ( 1 )
{
self waittill( "trigger", player );
if ( isDefined( self.stub.allow_purchase ) && !self.stub.allow_purchase )
{
continue;
}
while ( !is_player_valid( player ) )
{
continue;
}
if ( player.score >= 1000 )
{
player.score -= 1000;
level notify( self.stub.notify_name );
self sethintstring( "" );
continue;
}
else
{
self playsound( "evt_perk_deny" );
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
}
}
}