mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-10 10:47:58 -05:00
1007 lines
33 KiB
Plaintext
1007 lines
33 KiB
Plaintext
#include maps/mp/zm_alcatraz_travel;
|
|
#include maps/mp/zm_alcatraz_sq_vo;
|
|
#include maps/mp/zombies/_zm_audio;
|
|
#include maps/mp/zombies/_zm_unitrigger;
|
|
#include maps/mp/zombies/_zm_craftables;
|
|
#include maps/mp/zm_alcatraz_utility;
|
|
#include maps/mp/zombies/_zm_weapons;
|
|
#include maps/mp/zombies/_zm_utility;
|
|
#include maps/mp/_utility;
|
|
#include common_scripts/utility;
|
|
|
|
init_craftables()
|
|
{
|
|
precachestring( &"ZM_PRISON_KEY_DOOR" );
|
|
level.craftable_piece_count = 10;
|
|
register_clientfields();
|
|
add_zombie_craftable( "alcatraz_shield_zm", &"ZM_PRISON_CRAFT_RIOT", undefined, &"ZOMBIE_BOUGHT_RIOT", undefined, 1 );
|
|
add_zombie_craftable_vox_category( "alcatraz_shield_zm", "build_zs" );
|
|
make_zombie_craftable_open( "alcatraz_shield_zm", "t6_wpn_zmb_shield_dlc2_dmg0_world", vectorScale( ( 0, 0, 0 ), 90 ), ( 0, 0, level.riotshield_placement_zoffset ) );
|
|
add_zombie_craftable( "packasplat", &"ZM_PRISON_CRAFT_PACKASPLAT", undefined, undefined, ::onfullycrafted_packasplat, 1 );
|
|
add_zombie_craftable_vox_category( "packasplat", "build_bsm" );
|
|
make_zombie_craftable_open( "packasplat", "p6_anim_zm_al_packasplat", vectorScale( ( 0, 0, 0 ), 90 ) );
|
|
level.craftable_piece_swap_allowed = 0;
|
|
add_zombie_craftable( "quest_key1" );
|
|
add_zombie_craftable( "plane", &"ZM_PRISON_CRAFT_PLANE", &"ZM_PRISON_CRAFTING_PLANE", undefined, ::onfullycrafted_plane );
|
|
add_zombie_craftable( "refuelable_plane", &"ZM_PRISON_REFUEL_PLANE", &"ZM_PRISON_REFUELING_PLANE", undefined, ::onfullycrafted_refueled );
|
|
in_game_checklist_setup();
|
|
}
|
|
|
|
include_key_craftable( craftable_name, model_name )
|
|
{
|
|
part_key = generate_zombie_craftable_piece( craftable_name, undefined, model_name, 32, 15, 0, undefined, ::onpickup_key, undefined, undefined, undefined, undefined, undefined, undefined, 1 );
|
|
part = spawnstruct();
|
|
part.name = craftable_name;
|
|
part add_craftable_piece( part_key );
|
|
part.triggerthink = ::maps/mp/zombies/_zm_craftables::setup_craftable_pieces;
|
|
include_craftable( part );
|
|
}
|
|
|
|
include_craftables()
|
|
{
|
|
level.zombie_include_craftables[ "open_table" ].custom_craftablestub_update_prompt = ::prison_open_craftablestub_update_prompt;
|
|
craftable_name = "alcatraz_shield_zm";
|
|
riotshield_dolly = generate_zombie_craftable_piece( craftable_name, "dolly", "t6_wpn_zmb_shield_dlc2_dolly", 32, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_dolly", 1, "build_zs" );
|
|
riotshield_door = generate_zombie_craftable_piece( craftable_name, "door", "t6_wpn_zmb_shield_dlc2_door", 48, 15, 25, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_door", 1, "build_zs" );
|
|
riotshield_clamp = generate_zombie_craftable_piece( craftable_name, "clamp", "t6_wpn_zmb_shield_dlc2_shackles", 32, 15, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_clamp", 1, "build_zs" );
|
|
riotshield = spawnstruct();
|
|
riotshield.name = craftable_name;
|
|
riotshield add_craftable_piece( riotshield_dolly );
|
|
riotshield add_craftable_piece( riotshield_door );
|
|
riotshield add_craftable_piece( riotshield_clamp );
|
|
riotshield.onbuyweapon = ::onbuyweapon_riotshield;
|
|
riotshield.triggerthink = ::riotshieldcraftable;
|
|
include_craftable( riotshield );
|
|
craftable_name = "packasplat";
|
|
packasplat_case = generate_zombie_craftable_piece( craftable_name, "case", "p6_zm_al_packasplat_suitcase", 48, 36, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_case", 1, "build_bsm" );
|
|
packasplat_fuse = generate_zombie_craftable_piece( craftable_name, "fuse", "p6_zm_al_packasplat_engine", 32, 36, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_fuse", 1, "build_bsm" );
|
|
packasplat_blood = generate_zombie_craftable_piece( craftable_name, "blood", "p6_zm_al_packasplat_iv", 32, 15, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_packasplat_blood", 1, "build_bsm" );
|
|
packasplat = spawnstruct();
|
|
packasplat.name = craftable_name;
|
|
packasplat add_craftable_piece( packasplat_case );
|
|
packasplat add_craftable_piece( packasplat_fuse );
|
|
packasplat add_craftable_piece( packasplat_blood );
|
|
packasplat.triggerthink = ::packasplatcraftable;
|
|
include_craftable( packasplat );
|
|
include_key_craftable( "quest_key1", "p6_zm_al_key" );
|
|
craftable_name = "plane";
|
|
plane_cloth = generate_zombie_craftable_piece( craftable_name, "cloth", "p6_zm_al_clothes_pile_lrg", 48, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 1 );
|
|
plane_fueltanks = generate_zombie_craftable_piece( craftable_name, "fueltanks", "veh_t6_dlc_zombie_part_fuel", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_feul_tanks", undefined, 2 );
|
|
plane_engine = generate_zombie_craftable_piece( craftable_name, "engine", "veh_t6_dlc_zombie_part_engine", 32, 62, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 3 );
|
|
plane_steering = generate_zombie_craftable_piece( craftable_name, "steering", "veh_t6_dlc_zombie_part_control", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_control_mechanism", undefined, 4 );
|
|
plane_rigging = generate_zombie_craftable_piece( craftable_name, "rigging", "veh_t6_dlc_zombie_part_rigging", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 5 );
|
|
if ( level.is_forever_solo_game )
|
|
{
|
|
plane_cloth.is_shared = 1;
|
|
plane_fueltanks.is_shared = 1;
|
|
plane_engine.is_shared = 1;
|
|
plane_steering.is_shared = 1;
|
|
plane_rigging.is_shared = 1;
|
|
plane_cloth.client_field_state = undefined;
|
|
plane_fueltanks.client_field_state = undefined;
|
|
plane_engine.client_field_state = undefined;
|
|
plane_steering.client_field_state = undefined;
|
|
plane_rigging.client_field_state = undefined;
|
|
}
|
|
plane_cloth.pickup_alias = "sidequest_sheets";
|
|
plane_fueltanks.pickup_alias = "sidequest_oxygen";
|
|
plane_engine.pickup_alias = "sidequest_engine";
|
|
plane_steering.pickup_alias = "sidequest_valves";
|
|
plane_rigging.pickup_alias = "sidequest_rigging";
|
|
plane = spawnstruct();
|
|
plane.name = craftable_name;
|
|
plane add_craftable_piece( plane_cloth );
|
|
plane add_craftable_piece( plane_engine );
|
|
plane add_craftable_piece( plane_fueltanks );
|
|
plane add_craftable_piece( plane_steering );
|
|
plane add_craftable_piece( plane_rigging );
|
|
plane.triggerthink = ::planecraftable;
|
|
plane.custom_craftablestub_update_prompt = ::prison_plane_update_prompt;
|
|
include_craftable( plane );
|
|
craftable_name = "refuelable_plane";
|
|
refuelable_plane_gas1 = generate_zombie_craftable_piece( craftable_name, "fuel1", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 6 );
|
|
refuelable_plane_gas2 = generate_zombie_craftable_piece( craftable_name, "fuel2", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 7 );
|
|
refuelable_plane_gas3 = generate_zombie_craftable_piece( craftable_name, "fuel3", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 8 );
|
|
refuelable_plane_gas4 = generate_zombie_craftable_piece( craftable_name, "fuel4", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 9 );
|
|
refuelable_plane_gas5 = generate_zombie_craftable_piece( craftable_name, "fuel5", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 10 );
|
|
if ( level.is_forever_solo_game )
|
|
{
|
|
refuelable_plane_gas1.is_shared = 1;
|
|
refuelable_plane_gas2.is_shared = 1;
|
|
refuelable_plane_gas3.is_shared = 1;
|
|
refuelable_plane_gas4.is_shared = 1;
|
|
refuelable_plane_gas5.is_shared = 1;
|
|
refuelable_plane_gas1.client_field_state = undefined;
|
|
refuelable_plane_gas2.client_field_state = undefined;
|
|
refuelable_plane_gas3.client_field_state = undefined;
|
|
refuelable_plane_gas4.client_field_state = undefined;
|
|
refuelable_plane_gas5.client_field_state = undefined;
|
|
}
|
|
refuelable_plane = spawnstruct();
|
|
refuelable_plane.name = craftable_name;
|
|
refuelable_plane add_craftable_piece( refuelable_plane_gas1 );
|
|
refuelable_plane add_craftable_piece( refuelable_plane_gas2 );
|
|
refuelable_plane add_craftable_piece( refuelable_plane_gas3 );
|
|
refuelable_plane add_craftable_piece( refuelable_plane_gas4 );
|
|
refuelable_plane add_craftable_piece( refuelable_plane_gas5 );
|
|
refuelable_plane.triggerthink = ::planefuelable;
|
|
plane.custom_craftablestub_update_prompt = ::prison_plane_update_prompt;
|
|
include_craftable( refuelable_plane );
|
|
}
|
|
|
|
register_clientfields()
|
|
{
|
|
bits = 1;
|
|
registerclientfield( "world", "piece_riotshield_dolly", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "piece_riotshield_door", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "piece_riotshield_clamp", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "piece_packasplat_fuse", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "piece_packasplat_case", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "piece_packasplat_blood", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "piece_key_warden", 9000, bits, "int", undefined, 0 );
|
|
bits = getminbitcountfornum( 10 );
|
|
registerclientfield( "world", "piece_player1", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "piece_player2", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "piece_player3", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "piece_player4", 9000, bits, "int", undefined, 0 );
|
|
bits = getminbitcountfornum( 7 );
|
|
registerclientfield( "world", "quest_state1", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "quest_state2", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "quest_state3", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "quest_state4", 9000, bits, "int", undefined, 0 );
|
|
registerclientfield( "world", "quest_state5", 9000, bits, "int", undefined, 0 );
|
|
bits = 1;
|
|
registerclientfield( "world", "quest_plane_craft_complete", 9000, bits, "int", undefined, 0 );
|
|
}
|
|
|
|
riotshieldcraftable()
|
|
{
|
|
maps/mp/zombies/_zm_craftables::craftable_trigger_think( "riotshield_zm_craftable_trigger", "alcatraz_shield_zm", "alcatraz_shield_zm", &"ZOMBIE_GRAB_RIOTSHIELD", 1, 1 );
|
|
}
|
|
|
|
packasplatcraftable()
|
|
{
|
|
maps/mp/zombies/_zm_craftables::craftable_trigger_think( "packasplat_craftable_trigger", "packasplat", "packasplat", undefined, 1, 0 );
|
|
}
|
|
|
|
planecraftable()
|
|
{
|
|
level thread alcatraz_craftable_trigger_think( "plane_craftable_trigger", "plane", "plane", "", 1, 0 );
|
|
level setclientfield( "quest_plane_craft_complete", 0 );
|
|
i = 1;
|
|
while ( i <= 5 )
|
|
{
|
|
level setclientfield( "quest_state" + i, 2 );
|
|
i++;
|
|
}
|
|
}
|
|
|
|
planefuelable()
|
|
{
|
|
level thread planefuelable_think();
|
|
}
|
|
|
|
planefuelable_think()
|
|
{
|
|
flag_wait( "spawn_fuel_tanks" );
|
|
t_plane_fuelable = getent( "plane_fuelable_trigger", "targetname" );
|
|
t_plane_fuelable trigger_on();
|
|
i = 1;
|
|
while ( i <= 5 )
|
|
{
|
|
level setclientfield( "quest_state" + i, 5 );
|
|
i++;
|
|
}
|
|
alcatraz_craftable_trigger_think( "plane_fuelable_trigger", "refuelable_plane", "refuelable_plane", "", 1, 0 );
|
|
}
|
|
|
|
ondrop_common( player )
|
|
{
|
|
/#
|
|
println( "ZM >> Common part callback onDrop()" );
|
|
#/
|
|
self droponmover( player );
|
|
self.piece_owner = undefined;
|
|
}
|
|
|
|
onpickup_common( player )
|
|
{
|
|
/#
|
|
println( "ZM >> Common part callback onPickup()" );
|
|
#/
|
|
player playsound( "zmb_craftable_pickup" );
|
|
self pickupfrommover();
|
|
self.piece_owner = player;
|
|
}
|
|
|
|
ondisconnect_common( player )
|
|
{
|
|
level endon( "crafted_" + self.piecename );
|
|
level endon( "dropped_" + self.piecename );
|
|
player_num = player getentitynumber() + 1;
|
|
player waittill( "disconnect" );
|
|
switch( self.piecename )
|
|
{
|
|
case "cloth":
|
|
field_name = "quest_state1";
|
|
in_game_checklist_plane_piece_dropped( "sheets" );
|
|
break;
|
|
case "fueltanks":
|
|
field_name = "quest_state2";
|
|
in_game_checklist_plane_piece_dropped( "fueltank" );
|
|
break;
|
|
case "engine":
|
|
field_name = "quest_state3";
|
|
in_game_checklist_plane_piece_dropped( "engine" );
|
|
break;
|
|
case "steering":
|
|
field_name = "quest_state4";
|
|
in_game_checklist_plane_piece_dropped( "contval" );
|
|
break;
|
|
case "rigging":
|
|
field_name = "quest_state5";
|
|
in_game_checklist_plane_piece_dropped( "rigging" );
|
|
break;
|
|
}
|
|
level setclientfield( field_name, 2 );
|
|
level setclientfield( "piece_player" + player_num, 0 );
|
|
m_plane_piece = get_craftable_piece_model( "plane", self.piecename );
|
|
if ( isDefined( m_plane_piece ) )
|
|
{
|
|
playfxontag( level._effect[ "quest_item_glow" ], m_plane_piece, "tag_origin" );
|
|
}
|
|
m_fuel_can = get_craftable_piece_model( "refuelable_plane", self.piecename );
|
|
if ( isDefined( m_fuel_can ) )
|
|
{
|
|
playfxontag( level._effect[ "quest_item_glow" ], m_fuel_can, "tag_origin" );
|
|
}
|
|
}
|
|
|
|
prison_open_craftablestub_update_prompt( player, b_set_hint_string_now, trigger )
|
|
{
|
|
valid = maps/mp/zombies/_zm_craftables::open_craftablestub_update_prompt( player );
|
|
return valid;
|
|
}
|
|
|
|
onpickup_key( player )
|
|
{
|
|
flag_set( "key_found" );
|
|
if ( level.is_master_key_west )
|
|
{
|
|
level clientnotify( "fxanim_west_pulley_up_start" );
|
|
}
|
|
else
|
|
{
|
|
level clientnotify( "fxanim_east_pulley_up_start" );
|
|
}
|
|
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
|
_a429 = a_m_checklist;
|
|
_k429 = getFirstArrayKey( _a429 );
|
|
while ( isDefined( _k429 ) )
|
|
{
|
|
m_checklist = _a429[ _k429 ];
|
|
m_checklist showpart( "j_check_key" );
|
|
m_checklist showpart( "j_strike_key" );
|
|
_k429 = getNextArrayKey( _a429, _k429 );
|
|
}
|
|
a_door_structs = getstructarray( "quest_trigger", "script_noteworthy" );
|
|
_a437 = a_door_structs;
|
|
_k437 = getFirstArrayKey( _a437 );
|
|
while ( isDefined( _k437 ) )
|
|
{
|
|
struct = _a437[ _k437 ];
|
|
if ( isDefined( struct.unitrigger_stub ) )
|
|
{
|
|
struct.unitrigger_stub maps/mp/zombies/_zm_unitrigger::run_visibility_function_for_all_triggers();
|
|
}
|
|
_k437 = getNextArrayKey( _a437, _k437 );
|
|
}
|
|
player playsound( "evt_key_pickup" );
|
|
player thread do_player_general_vox( "quest", "sidequest_key_response", undefined, 100 );
|
|
level setclientfield( "piece_key_warden", 1 );
|
|
}
|
|
|
|
prison_plane_update_prompt( player, b_set_hint_string_now, trigger )
|
|
{
|
|
return 1;
|
|
}
|
|
|
|
ondrop_plane( player )
|
|
{
|
|
/#
|
|
println( "ZM >> Common part callback onDrop()" );
|
|
#/
|
|
level notify( "dropped_" + self.piecename );
|
|
level.plane_pieces_picked_up -= 1;
|
|
self droponmover( player );
|
|
self.piece_owner = undefined;
|
|
playfxontag( level._effect[ "quest_item_glow" ], self.model, "tag_origin" );
|
|
switch( self.piecename )
|
|
{
|
|
case "cloth":
|
|
field_name = "quest_state1";
|
|
in_game_checklist_plane_piece_dropped( "sheets" );
|
|
break;
|
|
case "fueltanks":
|
|
field_name = "quest_state2";
|
|
in_game_checklist_plane_piece_dropped( "fueltank" );
|
|
break;
|
|
case "engine":
|
|
field_name = "quest_state3";
|
|
in_game_checklist_plane_piece_dropped( "engine" );
|
|
break;
|
|
case "steering":
|
|
field_name = "quest_state4";
|
|
in_game_checklist_plane_piece_dropped( "contval" );
|
|
break;
|
|
case "rigging":
|
|
field_name = "quest_state5";
|
|
in_game_checklist_plane_piece_dropped( "rigging" );
|
|
break;
|
|
}
|
|
level setclientfield( field_name, 2 );
|
|
if ( !level.is_forever_solo_game )
|
|
{
|
|
player_num = player getentitynumber() + 1;
|
|
level setclientfield( "piece_player" + player_num, 0 );
|
|
}
|
|
}
|
|
|
|
onpickup_plane( player )
|
|
{
|
|
/#
|
|
println( "ZM >> Common part callback onPickup()" );
|
|
#/
|
|
if ( !isDefined( level.plane_pieces_picked_up ) )
|
|
{
|
|
level.plane_pieces_picked_up = 0;
|
|
level.sndplanepieces = 1;
|
|
}
|
|
level.plane_pieces_picked_up += 1;
|
|
if ( level.plane_pieces_picked_up == 5 )
|
|
{
|
|
level thread roof_nag_vo();
|
|
}
|
|
if ( level.sndplanepieces == level.plane_pieces_picked_up )
|
|
{
|
|
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "piece_" + level.sndplanepieces );
|
|
level.sndplanepieces++;
|
|
}
|
|
player playsound( "zmb_craftable_pickup" );
|
|
vo_alias_call = undefined;
|
|
vo_alias_response = undefined;
|
|
self pickupfrommover();
|
|
self.piece_owner = player;
|
|
switch( self.piecename )
|
|
{
|
|
case "cloth":
|
|
field_name = "quest_state1";
|
|
in_game_checklist_plane_piece_picked_up( "sheets" );
|
|
break;
|
|
case "fueltanks":
|
|
field_name = "quest_state2";
|
|
in_game_checklist_plane_piece_picked_up( "fueltank" );
|
|
flag_set( "docks_gates_remain_open" );
|
|
break;
|
|
case "engine":
|
|
field_name = "quest_state3";
|
|
in_game_checklist_plane_piece_picked_up( "engine" );
|
|
break;
|
|
case "steering":
|
|
field_name = "quest_state4";
|
|
in_game_checklist_plane_piece_picked_up( "contval" );
|
|
break;
|
|
case "rigging":
|
|
field_name = "quest_state5";
|
|
in_game_checklist_plane_piece_picked_up( "rigging" );
|
|
break;
|
|
}
|
|
level setclientfield( field_name, 3 );
|
|
if ( !level.is_forever_solo_game )
|
|
{
|
|
player_num = player getentitynumber() + 1;
|
|
level setclientfield( "piece_player" + player_num, self.client_field_state );
|
|
}
|
|
vo_alias_call = self check_if_newly_found();
|
|
if ( isDefined( vo_alias_call ) )
|
|
{
|
|
level thread play_plane_piece_call_and_response_vo( player, vo_alias_call );
|
|
}
|
|
self thread ondisconnect_common( player );
|
|
}
|
|
|
|
check_if_newly_found()
|
|
{
|
|
if ( !flag( self.piecename + "_found" ) )
|
|
{
|
|
switch( self.piecename )
|
|
{
|
|
case "fueltanks":
|
|
vo_alias_call = "sidequest_oxygen";
|
|
break;
|
|
case "cloth":
|
|
vo_alias_call = "sidequest_sheets";
|
|
break;
|
|
case "engine":
|
|
vo_alias_call = "sidequest_engine";
|
|
break;
|
|
case "steering":
|
|
vo_alias_call = "sidequest_valves";
|
|
break;
|
|
case "rigging":
|
|
vo_alias_call = "sidequest_rigging";
|
|
break;
|
|
}
|
|
level.n_plane_pieces_found++;
|
|
flag_set( self.piecename + "_found" );
|
|
if ( self.piecename == "cloth" )
|
|
{
|
|
level clientnotify( "fxanim_dryer_hide_start" );
|
|
}
|
|
return vo_alias_call;
|
|
}
|
|
}
|
|
|
|
play_plane_piece_call_and_response_vo( player, vo_alias_call )
|
|
{
|
|
player endon( "death" );
|
|
player endon( "disconnect" );
|
|
n_response_range = 1500;
|
|
players = getplayers();
|
|
if ( !flag( "story_vo_playing" ) )
|
|
{
|
|
flag_set( "story_vo_playing" );
|
|
player do_player_general_vox( "quest", vo_alias_call, undefined, 100 );
|
|
wait 5;
|
|
if ( players.size > 1 )
|
|
{
|
|
arrayremovevalue( players, player );
|
|
closest_other_player = getclosest( player.origin, players );
|
|
if ( isDefined( closest_other_player ) )
|
|
{
|
|
n_dist = distance( player.origin, closest_other_player.origin );
|
|
if ( isDefined( closest_other_player ) && n_dist < n_response_range )
|
|
{
|
|
if ( level.n_plane_pieces_found < 5 )
|
|
{
|
|
vo_alias_response = "sidequest_parts" + level.n_plane_pieces_found + "_prog";
|
|
}
|
|
else
|
|
{
|
|
vo_alias_response = "sidequest_all_parts";
|
|
}
|
|
closest_other_player do_player_general_vox( "quest", vo_alias_response, undefined, 100 );
|
|
}
|
|
}
|
|
}
|
|
flag_clear( "story_vo_playing" );
|
|
}
|
|
}
|
|
|
|
roof_nag_vo()
|
|
{
|
|
level notify( "roof_nag_vo" );
|
|
level endon( "roof_nag_vo" );
|
|
zone_roof = getent( "zone_roof", "targetname" );
|
|
zone_roof_infirmary = getent( "zone_roof_infirmary", "targetname" );
|
|
n_roof_nag_wait = 60;
|
|
n_roof_nag_max_times = 3;
|
|
while ( !flag( "plane_built" ) && n_roof_nag_max_times > 0 )
|
|
{
|
|
wait n_roof_nag_wait;
|
|
b_is_a_player_on_the_roof = 0;
|
|
players = getplayers();
|
|
_a696 = players;
|
|
_k696 = getFirstArrayKey( _a696 );
|
|
while ( isDefined( _k696 ) )
|
|
{
|
|
player = _a696[ _k696 ];
|
|
if ( player istouching( zone_roof ) || player istouching( zone_roof_infirmary ) )
|
|
{
|
|
b_is_a_player_on_the_roof = 1;
|
|
}
|
|
_k696 = getNextArrayKey( _a696, _k696 );
|
|
}
|
|
if ( !b_is_a_player_on_the_roof )
|
|
{
|
|
if ( level.plane_pieces_picked_up == 5 )
|
|
{
|
|
player = players[ randomintrange( 0, players.size ) ];
|
|
if ( isDefined( player ) )
|
|
{
|
|
player do_player_general_vox( "quest", "sidequest_roof_nag", undefined, 100 );
|
|
n_roof_nag_wait *= 1,5;
|
|
n_roof_nag_max_times--;
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
oncrafted_plane( player )
|
|
{
|
|
level notify( "crafted_" + self.piecename );
|
|
m_plane_hideable_engine = getent( "plane_hideable_engine", "targetname" );
|
|
m_plane_hideable_clothes_pile = getent( "plane_hideable_clothes_pile", "targetname" );
|
|
m_plane_hideable_engine ghost();
|
|
m_plane_hideable_clothes_pile ghost();
|
|
plane_craftable = getent( "plane_craftable", "targetname" );
|
|
plane_craftable hidepart( "tag_support_upper" );
|
|
plane_craftable hidepart( "tag_wings_down" );
|
|
plane_craftable hidepart( "tag_wing_skins_down" );
|
|
plane_craftable hidepart( "tag_wing_skins_up" );
|
|
plane_craftable hidepart( "tag_engines_down" );
|
|
plane_craftable hidepart( "tag_engines_up" );
|
|
plane_craftable hidepart( "tag_engines_down" );
|
|
plane_craftable hidepart( "tag_engines_up" );
|
|
plane_craftable hidepart( "tag_engine_ground" );
|
|
plane_craftable hidepart( "tag_clothes_ground" );
|
|
plane_craftable hidepart( "tag_fuel_hose" );
|
|
if ( !isDefined( level.sndplanecrafted ) )
|
|
{
|
|
level.sndplanecrafted = 0;
|
|
}
|
|
level.sndplanecrafted++;
|
|
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "plane_crafted_" + level.sndplanecrafted );
|
|
if ( is_part_crafted( "plane", "rigging" ) )
|
|
{
|
|
plane_craftable showpart( "tag_support_upper" );
|
|
if ( is_part_crafted( "plane", "cloth" ) )
|
|
{
|
|
plane_craftable showpart( "tag_wing_skins_up" );
|
|
}
|
|
if ( is_part_crafted( "plane", "engine" ) )
|
|
{
|
|
plane_craftable showpart( "tag_engines_up" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
plane_craftable showpart( "tag_wings_down" );
|
|
if ( is_part_crafted( "plane", "cloth" ) )
|
|
{
|
|
m_plane_hideable_clothes_pile show();
|
|
}
|
|
if ( is_part_crafted( "plane", "engine" ) )
|
|
{
|
|
m_plane_hideable_engine show();
|
|
}
|
|
}
|
|
if ( is_part_crafted( "plane", "steering" ) && is_part_crafted( "plane", "fueltanks" ) )
|
|
{
|
|
plane_craftable showpart( "tag_fuel_hose" );
|
|
}
|
|
switch( self.piecename )
|
|
{
|
|
case "cloth":
|
|
field_name = "quest_state1";
|
|
in_game_checklist_plane_piece_crafted( "sheets" );
|
|
break;
|
|
case "fueltanks":
|
|
field_name = "quest_state2";
|
|
in_game_checklist_plane_piece_crafted( "fueltank" );
|
|
break;
|
|
case "engine":
|
|
field_name = "quest_state3";
|
|
in_game_checklist_plane_piece_crafted( "engine" );
|
|
break;
|
|
case "steering":
|
|
field_name = "quest_state4";
|
|
in_game_checklist_plane_piece_crafted( "contval" );
|
|
break;
|
|
case "rigging":
|
|
field_name = "quest_state5";
|
|
in_game_checklist_plane_piece_crafted( "rigging" );
|
|
break;
|
|
}
|
|
level setclientfield( field_name, 4 );
|
|
if ( !level.is_forever_solo_game )
|
|
{
|
|
player_num = player getentitynumber() + 1;
|
|
level setclientfield( "piece_player" + player_num, 0 );
|
|
}
|
|
}
|
|
|
|
ondrop_fuel( player )
|
|
{
|
|
level notify( "dropped_" + self.piecename );
|
|
self.piece_owner = undefined;
|
|
playfxontag( level._effect[ "quest_item_glow" ], self.model, "tag_origin" );
|
|
if ( isDefined( level.sndfuelpieces ) )
|
|
{
|
|
level.sndfuelpieces--;
|
|
|
|
}
|
|
switch( self.piecename )
|
|
{
|
|
case "fuel1":
|
|
field_name = "quest_state1";
|
|
break;
|
|
case "fuel2":
|
|
field_name = "quest_state2";
|
|
break;
|
|
case "fuel3":
|
|
field_name = "quest_state3";
|
|
break;
|
|
case "fuel4":
|
|
field_name = "quest_state4";
|
|
break;
|
|
case "fuel5":
|
|
field_name = "quest_state5";
|
|
break;
|
|
}
|
|
level setclientfield( field_name, 5 );
|
|
if ( !level.is_forever_solo_game )
|
|
{
|
|
player_num = player getentitynumber() + 1;
|
|
level setclientfield( "piece_player" + player_num, 0 );
|
|
}
|
|
}
|
|
|
|
onpickup_fuel( player )
|
|
{
|
|
player playsound( "zmb_craftable_pickup" );
|
|
if ( !isDefined( level.sndfuelpieces ) || level.sndfuelpieces >= 5 )
|
|
{
|
|
level.sndfuelpieces = 0;
|
|
}
|
|
level.sndfuelpieces++;
|
|
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "gas_" + level.sndfuelpieces );
|
|
self pickupfrommover();
|
|
self.piece_owner = player;
|
|
if ( isDefined( player ) )
|
|
{
|
|
player do_player_general_vox( "quest", "fuel_pickup", undefined, 100 );
|
|
}
|
|
switch( self.piecename )
|
|
{
|
|
case "fuel1":
|
|
field_name = "quest_state1";
|
|
break;
|
|
case "fuel2":
|
|
field_name = "quest_state2";
|
|
break;
|
|
case "fuel3":
|
|
field_name = "quest_state3";
|
|
break;
|
|
case "fuel4":
|
|
field_name = "quest_state4";
|
|
break;
|
|
case "fuel5":
|
|
field_name = "quest_state5";
|
|
break;
|
|
}
|
|
level setclientfield( field_name, 6 );
|
|
if ( !level.is_forever_solo_game )
|
|
{
|
|
player_num = player getentitynumber() + 1;
|
|
level setclientfield( "piece_player" + player_num, self.client_field_state );
|
|
}
|
|
self thread ondisconnect_common( player );
|
|
}
|
|
|
|
oncrafted_fuel( player )
|
|
{
|
|
level notify( "crafted_" + self.piecename );
|
|
level.n_plane_fuel_count++;
|
|
switch( self.piecename )
|
|
{
|
|
case "fuel1":
|
|
field_name = "quest_state1";
|
|
break;
|
|
case "fuel2":
|
|
field_name = "quest_state2";
|
|
break;
|
|
case "fuel3":
|
|
field_name = "quest_state3";
|
|
break;
|
|
case "fuel4":
|
|
field_name = "quest_state4";
|
|
break;
|
|
case "fuel5":
|
|
field_name = "quest_state5";
|
|
break;
|
|
}
|
|
level setclientfield( field_name, 7 );
|
|
if ( !level.is_forever_solo_game )
|
|
{
|
|
player_num = player getentitynumber() + 1;
|
|
level setclientfield( "piece_player" + player_num, 0 );
|
|
}
|
|
}
|
|
|
|
onfullycrafted_plane( player )
|
|
{
|
|
flag_set( "plane_built" );
|
|
level thread maps/mp/zm_alcatraz_sq_vo::escape_flight_vo();
|
|
level notify( "roof_nag_vo" );
|
|
level setclientfield( "quest_plane_craft_complete", 1 );
|
|
return 0;
|
|
}
|
|
|
|
onfullycrafted_packasplat( player )
|
|
{
|
|
t_upgrade = getent( "blundergat_upgrade", "targetname" );
|
|
t_upgrade.target = self.target;
|
|
t_upgrade.origin = self.origin;
|
|
t_upgrade.angles = self.angles;
|
|
t_upgrade.m_upgrade_machine = get_craftable_model( "packasplat" );
|
|
return 1;
|
|
}
|
|
|
|
onfullycrafted_refueled( player )
|
|
{
|
|
flag_set( "plane_built" );
|
|
level thread maps/mp/zm_alcatraz_sq_vo::escape_flight_vo();
|
|
level notify( "roof_nag_vo" );
|
|
thread onfullycrafted_refueled_think( player );
|
|
return 0;
|
|
}
|
|
|
|
onfullycrafted_refueled_think( player )
|
|
{
|
|
flag_wait( "spawn_fuel_tanks" );
|
|
i = 1;
|
|
while ( i <= 5 )
|
|
{
|
|
level setclientfield( "quest_state" + i, 5 );
|
|
i++;
|
|
}
|
|
maps/mp/zombies/_zm_craftables::stub_uncraft_craftable( self, 1, undefined, undefined, 1 );
|
|
}
|
|
|
|
sqcommoncraftable()
|
|
{
|
|
level.sq_craftable = maps/mp/zombies/_zm_craftables::craftable_trigger_think( "sq_common_craftable_trigger", "sq_common", "sq_common", "", 1, 0 );
|
|
}
|
|
|
|
onbuyweapon_riotshield( player )
|
|
{
|
|
if ( isDefined( player.player_shield_reset_health ) )
|
|
{
|
|
player [[ player.player_shield_reset_health ]]();
|
|
}
|
|
if ( isDefined( player.player_shield_reset_location ) )
|
|
{
|
|
player [[ player.player_shield_reset_location ]]();
|
|
}
|
|
}
|
|
|
|
onbuyweapon_plane( player )
|
|
{
|
|
level notify( "plane_takeoff" );
|
|
iprintlnbold( "Plane Bought" );
|
|
}
|
|
|
|
droponmover( player )
|
|
{
|
|
while ( isDefined( player ) && player maps/mp/zm_alcatraz_travel::is_player_on_gondola() )
|
|
{
|
|
str_location = undefined;
|
|
if ( isDefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving && isDefined( level.e_gondola.destination ) )
|
|
{
|
|
str_location = level.e_gondola.destination;
|
|
}
|
|
else
|
|
{
|
|
str_location = level.e_gondola.location;
|
|
}
|
|
if ( !isDefined( str_location ) )
|
|
{
|
|
str_location = "roof";
|
|
}
|
|
a_s_part_teleport = getstructarray( "gondola_dropped_parts_" + str_location, "targetname" );
|
|
_a1104 = a_s_part_teleport;
|
|
_k1104 = getFirstArrayKey( _a1104 );
|
|
while ( isDefined( _k1104 ) )
|
|
{
|
|
struct = _a1104[ _k1104 ];
|
|
if ( isDefined( struct.occupied ) && !struct.occupied )
|
|
{
|
|
self.model.origin = struct.origin;
|
|
self.model.angles = struct.angles;
|
|
struct.occupied = 1;
|
|
self.unitrigger.struct_teleport = struct;
|
|
return;
|
|
}
|
|
else
|
|
{
|
|
_k1104 = getNextArrayKey( _a1104, _k1104 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
pickupfrommover()
|
|
{
|
|
if ( isDefined( self.unitrigger ) )
|
|
{
|
|
if ( isDefined( self.unitrigger.struct_teleport ) )
|
|
{
|
|
self.unitrigger.struct_teleport.occupied = 0;
|
|
self.unitrigger.struct_teleport = undefined;
|
|
}
|
|
}
|
|
}
|
|
|
|
in_game_checklist_setup()
|
|
{
|
|
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
|
a_str_partnames = [];
|
|
a_str_partnames[ 0 ] = "sheets";
|
|
a_str_partnames[ 1 ] = "fueltank";
|
|
a_str_partnames[ 2 ] = "engine";
|
|
a_str_partnames[ 3 ] = "contval";
|
|
a_str_partnames[ 4 ] = "rigging";
|
|
a_str_partnames[ 5 ] = "key";
|
|
_a1143 = a_m_checklist;
|
|
_k1143 = getFirstArrayKey( _a1143 );
|
|
while ( isDefined( _k1143 ) )
|
|
{
|
|
m_checklist = _a1143[ _k1143 ];
|
|
_a1145 = a_str_partnames;
|
|
_k1145 = getFirstArrayKey( _a1145 );
|
|
while ( isDefined( _k1145 ) )
|
|
{
|
|
str_partname = _a1145[ _k1145 ];
|
|
m_checklist hidepart( "j_check_" + str_partname );
|
|
m_checklist hidepart( "j_strike_" + str_partname );
|
|
_k1145 = getNextArrayKey( _a1145, _k1145 );
|
|
}
|
|
_k1143 = getNextArrayKey( _a1143, _k1143 );
|
|
}
|
|
}
|
|
|
|
in_game_checklist_plane_piece_picked_up( str_partname )
|
|
{
|
|
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
|
_a1157 = a_m_checklist;
|
|
_k1157 = getFirstArrayKey( _a1157 );
|
|
while ( isDefined( _k1157 ) )
|
|
{
|
|
m_checklist = _a1157[ _k1157 ];
|
|
m_checklist showpart( "j_check_" + str_partname );
|
|
_k1157 = getNextArrayKey( _a1157, _k1157 );
|
|
}
|
|
}
|
|
|
|
in_game_checklist_plane_piece_dropped( str_partname )
|
|
{
|
|
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
|
_a1167 = a_m_checklist;
|
|
_k1167 = getFirstArrayKey( _a1167 );
|
|
while ( isDefined( _k1167 ) )
|
|
{
|
|
m_checklist = _a1167[ _k1167 ];
|
|
m_checklist hidepart( "j_check_" + str_partname );
|
|
_k1167 = getNextArrayKey( _a1167, _k1167 );
|
|
}
|
|
}
|
|
|
|
in_game_checklist_plane_piece_crafted( str_partname )
|
|
{
|
|
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
|
_a1177 = a_m_checklist;
|
|
_k1177 = getFirstArrayKey( _a1177 );
|
|
while ( isDefined( _k1177 ) )
|
|
{
|
|
m_checklist = _a1177[ _k1177 ];
|
|
m_checklist showpart( "j_strike_" + str_partname );
|
|
_k1177 = getNextArrayKey( _a1177, _k1177 );
|
|
}
|
|
}
|
|
|
|
alcatraz_craftable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent )
|
|
{
|
|
return alcatraz_setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent );
|
|
}
|
|
|
|
alcatraz_setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent )
|
|
{
|
|
trig = getent( trigger_targetname, "targetname" );
|
|
if ( !isDefined( trig ) )
|
|
{
|
|
return;
|
|
}
|
|
trig.script_length = 386;
|
|
return alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent );
|
|
}
|
|
|
|
alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent )
|
|
{
|
|
if ( !isDefined( trig ) )
|
|
{
|
|
return;
|
|
}
|
|
unitrigger_stub = spawnstruct();
|
|
unitrigger_stub.craftablestub = level.zombie_include_craftables[ equipname ];
|
|
angles = trig.script_angles;
|
|
if ( !isDefined( angles ) )
|
|
{
|
|
angles = ( 0, 0, 0 );
|
|
}
|
|
unitrigger_stub.origin = trig.origin + ( anglesToRight( angles ) * -6 );
|
|
unitrigger_stub.angles = trig.angles;
|
|
if ( isDefined( trig.script_angles ) )
|
|
{
|
|
unitrigger_stub.angles = trig.script_angles;
|
|
}
|
|
unitrigger_stub.equipname = equipname;
|
|
unitrigger_stub.weaponname = weaponname;
|
|
unitrigger_stub.trigger_hintstring = trigger_hintstring;
|
|
unitrigger_stub.delete_trigger = delete_trigger;
|
|
unitrigger_stub.crafted = 0;
|
|
unitrigger_stub.persistent = persistent;
|
|
unitrigger_stub.usetime = int( 3000 );
|
|
unitrigger_stub.onbeginuse = ::onbeginuseuts;
|
|
unitrigger_stub.onenduse = ::onenduseuts;
|
|
unitrigger_stub.onuse = ::onuseplantobjectuts;
|
|
unitrigger_stub.oncantuse = ::oncantuseuts;
|
|
if ( isDefined( trig.script_length ) )
|
|
{
|
|
unitrigger_stub.script_length = trig.script_length;
|
|
}
|
|
else
|
|
{
|
|
unitrigger_stub.script_length = 32;
|
|
}
|
|
if ( isDefined( trig.script_width ) )
|
|
{
|
|
unitrigger_stub.script_width = trig.script_width;
|
|
}
|
|
else
|
|
{
|
|
unitrigger_stub.script_width = 100;
|
|
}
|
|
if ( isDefined( trig.script_height ) )
|
|
{
|
|
unitrigger_stub.script_height = trig.script_height;
|
|
}
|
|
else
|
|
{
|
|
unitrigger_stub.script_height = 64;
|
|
}
|
|
unitrigger_stub.target = trig.target;
|
|
unitrigger_stub.targetname = trig.targetname;
|
|
unitrigger_stub.script_noteworthy = trig.script_noteworthy;
|
|
unitrigger_stub.script_parameters = trig.script_parameters;
|
|
unitrigger_stub.cursor_hint = "HINT_NOICON";
|
|
if ( isDefined( level.zombie_craftablestubs[ equipname ].hint ) )
|
|
{
|
|
unitrigger_stub.hint_string = level.zombie_craftablestubs[ equipname ].hint;
|
|
}
|
|
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
|
|
unitrigger_stub.require_look_at = 0;
|
|
unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
|
|
if ( isDefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) )
|
|
{
|
|
unitrigger_stub.custom_craftablestub_update_prompt = unitrigger_stub.craftablestub.custom_craftablestub_update_prompt;
|
|
}
|
|
unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt;
|
|
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think );
|
|
unitrigger_stub.piece_trigger = trig;
|
|
trig.trigger_stub = unitrigger_stub;
|
|
unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade;
|
|
if ( isDefined( unitrigger_stub.target ) )
|
|
{
|
|
unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" );
|
|
if ( isDefined( unitrigger_stub.model ) )
|
|
{
|
|
if ( isDefined( unitrigger_stub.zombie_weapon_upgrade ) )
|
|
{
|
|
unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade );
|
|
}
|
|
unitrigger_stub.model ghost();
|
|
unitrigger_stub.model notsolid();
|
|
}
|
|
}
|
|
unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin );
|
|
if ( delete_trigger )
|
|
{
|
|
trig delete();
|
|
}
|
|
level.a_uts_craftables[ level.a_uts_craftables.size ] = unitrigger_stub;
|
|
return unitrigger_stub;
|
|
}
|