mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-10 10:47:58 -05:00
1347 lines
45 KiB
Plaintext
1347 lines
45 KiB
Plaintext
#include maps/mp/zm_alcatraz_weap_quest;
|
|
#include maps/mp/zombies/_zm_audio;
|
|
#include maps/mp/zombies/_zm_zonemgr;
|
|
#include maps/mp/zm_alcatraz_utility;
|
|
#include maps/mp/zombies/_zm_utility;
|
|
#include maps/mp/_utility;
|
|
#include common_scripts/utility;
|
|
|
|
#using_animtree( "fxanim_props" );
|
|
|
|
include_craftable( craftable_struct )
|
|
{
|
|
/#
|
|
println( "ZM >> include_craftable = " + craftable_struct.name );
|
|
#/
|
|
maps/mp/zombies/_zm_craftables::include_zombie_craftable( craftable_struct );
|
|
}
|
|
|
|
is_craftable()
|
|
{
|
|
return self maps/mp/zombies/_zm_craftables::is_craftable();
|
|
}
|
|
|
|
is_part_crafted( craftable_name, part_modelname )
|
|
{
|
|
return maps/mp/zombies/_zm_craftables::is_part_crafted( craftable_name, part_modelname );
|
|
}
|
|
|
|
wait_for_craftable( craftable_name )
|
|
{
|
|
level waittill( craftable_name + "_crafted", player );
|
|
return player;
|
|
}
|
|
|
|
is_team_on_golden_gate_bridge()
|
|
{
|
|
players = getplayers();
|
|
e_zone = getent( "zone_golden_gate_bridge", "targetname" );
|
|
_a57 = players;
|
|
_k57 = getFirstArrayKey( _a57 );
|
|
while ( isDefined( _k57 ) )
|
|
{
|
|
player = _a57[ _k57 ];
|
|
if ( player istouching( e_zone ) )
|
|
{
|
|
}
|
|
else return 0;
|
|
_k57 = getNextArrayKey( _a57, _k57 );
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
create_tutorial_message( str_msg )
|
|
{
|
|
if ( !isDefined( self.client_hint ) )
|
|
{
|
|
self.client_hint = newclienthudelem( self );
|
|
self.client_hint.alignx = "center";
|
|
self.client_hint.aligny = "middle";
|
|
self.client_hint.horzalign = "center";
|
|
self.client_hint.vertalign = "bottom";
|
|
if ( self issplitscreen() )
|
|
{
|
|
self.client_hint.y = -140;
|
|
}
|
|
else
|
|
{
|
|
self.client_hint.y = -250;
|
|
}
|
|
self.client_hint.foreground = 1;
|
|
self.client_hint.font = "default";
|
|
self.client_hint.fontscale = 1,5;
|
|
self.client_hint.alpha = 1;
|
|
self.client_hint.foreground = 1;
|
|
self.client_hint.hidewheninmenu = 1;
|
|
self.client_hint.color = ( 1, 1, 1 );
|
|
}
|
|
self.client_hint settext( str_msg );
|
|
}
|
|
|
|
destroy_tutorial_message()
|
|
{
|
|
if ( isDefined( self.client_hint ) )
|
|
{
|
|
self.client_hint fadeovertime( 0,5 );
|
|
self.client_hint.alpha = 0;
|
|
wait 0,5;
|
|
if ( isDefined( self.client_hint ) )
|
|
{
|
|
self.client_hint destroy();
|
|
self.client_hint = undefined;
|
|
}
|
|
}
|
|
}
|
|
|
|
get_array_of_farthest( org, array, excluders, max )
|
|
{
|
|
sorted_array = get_array_of_closest( org, array, excluders );
|
|
if ( isDefined( max ) )
|
|
{
|
|
temp_array = [];
|
|
i = 0;
|
|
while ( i < sorted_array.size )
|
|
{
|
|
temp_array[ temp_array.size ] = sorted_array[ sorted_array.size - i ];
|
|
i++;
|
|
}
|
|
sorted_array = temp_array;
|
|
}
|
|
sorted_array = array_reverse( sorted_array );
|
|
return sorted_array;
|
|
}
|
|
|
|
drop_all_barriers()
|
|
{
|
|
zkeys = getarraykeys( level.zones );
|
|
z = 0;
|
|
while ( z < level.zones.size )
|
|
{
|
|
while ( zkeys[ z ] != "zone_start" && zkeys[ z ] != "zone_library" )
|
|
{
|
|
zbarriers = get_all_zone_zbarriers( zkeys[ z ] );
|
|
if ( !isDefined( zbarriers ) )
|
|
{
|
|
z++;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
_a155 = zbarriers;
|
|
_k155 = getFirstArrayKey( _a155 );
|
|
while ( isDefined( _k155 ) )
|
|
{
|
|
zbarrier = _a155[ _k155 ];
|
|
zbarrier_pieces = zbarrier getnumzbarrierpieces();
|
|
i = 0;
|
|
while ( i < zbarrier_pieces )
|
|
{
|
|
zbarrier hidezbarrierpiece( i );
|
|
zbarrier setzbarrierpiecestate( i, "open" );
|
|
i++;
|
|
}
|
|
wait 0,05;
|
|
_k155 = getNextArrayKey( _a155, _k155 );
|
|
}
|
|
}
|
|
}
|
|
z++;
|
|
}
|
|
}
|
|
|
|
get_all_zone_zbarriers( zone_name )
|
|
{
|
|
if ( !isDefined( zone_name ) )
|
|
{
|
|
return undefined;
|
|
}
|
|
zone = level.zones[ zone_name ];
|
|
return zone.zbarriers;
|
|
}
|
|
|
|
blundergat_change_hintstring( hint_string )
|
|
{
|
|
self notify( "new_change_hint_string" );
|
|
self endon( "new_change_hint_string" );
|
|
while ( isDefined( self.is_locked ) && self.is_locked )
|
|
{
|
|
wait 0,05;
|
|
}
|
|
self sethintstring( hint_string );
|
|
wait 0,05;
|
|
self sethintstring( hint_string );
|
|
}
|
|
|
|
blundergat_upgrade_station()
|
|
{
|
|
t_upgrade = getent( "blundergat_upgrade", "targetname" );
|
|
t_upgrade sethintstring( &"ZM_PRISON_CONVERT_START" );
|
|
waittill_crafted( "packasplat" );
|
|
m_converter = t_upgrade.m_upgrade_machine;
|
|
v_angles = m_converter gettagangles( "tag_origin" );
|
|
v_weapon_origin_offset = ( ( anglesToForward( v_angles ) * 1 ) + ( anglesToRight( v_angles ) * 10 ) ) + ( anglesToUp( v_angles ) * 1,75 );
|
|
v_weapon_angles_offset = ( 0, 90, -90 );
|
|
m_converter.v_weapon_origin = m_converter gettagorigin( "tag_origin" ) + v_weapon_origin_offset;
|
|
m_converter.v_weapon_angles = v_angles + v_weapon_angles_offset;
|
|
m_converter useanimtree( -1 );
|
|
m_converter.fxanims[ "close" ] = %fxanim_zom_al_packasplat_start_anim;
|
|
m_converter.fxanims[ "inject" ] = %fxanim_zom_al_packasplat_idle_anim;
|
|
m_converter.fxanims[ "open" ] = %fxanim_zom_al_packasplat_end_anim;
|
|
m_converter.n_start_time = getanimlength( m_converter.fxanims[ "close" ] );
|
|
m_converter.n_idle_time = getanimlength( m_converter.fxanims[ "inject" ] );
|
|
m_converter.n_end_time = getanimlength( m_converter.fxanims[ "open" ] );
|
|
while ( 1 )
|
|
{
|
|
t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_CONVERT_START" );
|
|
t_upgrade waittill( "trigger", player );
|
|
while ( isDefined( level.custom_craftable_validation ) )
|
|
{
|
|
valid = t_upgrade [[ level.custom_craftable_validation ]]( player );
|
|
while ( !valid )
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
str_valid_weapon = undefined;
|
|
if ( player hasweapon( "blundergat_zm" ) )
|
|
{
|
|
str_valid_weapon = "blundergat_zm";
|
|
}
|
|
else
|
|
{
|
|
if ( player hasweapon( "blundergat_upgraded_zm" ) )
|
|
{
|
|
str_valid_weapon = "blundergat_upgraded_zm";
|
|
}
|
|
}
|
|
if ( isDefined( str_valid_weapon ) )
|
|
{
|
|
player takeweapon( str_valid_weapon );
|
|
player.is_pack_splatting = 1;
|
|
t_upgrade setinvisibletoall();
|
|
m_converter.worldgun = spawn_weapon_model( str_valid_weapon, undefined, m_converter.v_weapon_origin, m_converter.v_weapon_angles );
|
|
m_converter blundergat_upgrade_station_inject( str_valid_weapon );
|
|
t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_CONVERT_PICKUP" );
|
|
if ( isDefined( player ) )
|
|
{
|
|
t_upgrade setvisibletoplayer( player );
|
|
t_upgrade thread wait_for_player_to_take( player, str_valid_weapon );
|
|
}
|
|
t_upgrade thread wait_for_timeout();
|
|
t_upgrade waittill_any( "acid_timeout", "acid_taken" );
|
|
if ( isDefined( player ) )
|
|
{
|
|
player.is_pack_splatting = undefined;
|
|
}
|
|
m_converter.worldgun delete();
|
|
wait 0,5;
|
|
t_upgrade setvisibletoall();
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
t_upgrade thread blundergat_change_hintstring( &"ZM_PRISON_MISSING_BLUNDERGAT" );
|
|
wait 2;
|
|
}
|
|
}
|
|
}
|
|
|
|
wait_for_player_to_take( player, str_valid_weapon )
|
|
{
|
|
self endon( "acid_timeout" );
|
|
player endon( "disconnect" );
|
|
while ( 1 )
|
|
{
|
|
self waittill( "trigger", trigger_player );
|
|
while ( isDefined( level.custom_craftable_validation ) )
|
|
{
|
|
valid = self [[ level.custom_craftable_validation ]]( player );
|
|
while ( !valid )
|
|
{
|
|
continue;
|
|
}
|
|
}
|
|
if ( trigger_player == player )
|
|
{
|
|
current_weapon = player getcurrentweapon();
|
|
if ( is_player_valid( player ) && player.is_drinking > 0 && !is_placeable_mine( current_weapon ) && !is_equipment( current_weapon ) && level.revive_tool != current_weapon && current_weapon != "none" && !player hacker_active() )
|
|
{
|
|
self notify( "acid_taken" );
|
|
player notify( "acid_taken" );
|
|
weapon_limit = 2;
|
|
primaries = player getweaponslistprimaries();
|
|
if ( isDefined( primaries ) && primaries.size >= weapon_limit )
|
|
{
|
|
player takeweapon( current_weapon );
|
|
}
|
|
str_new_weapon = undefined;
|
|
if ( str_valid_weapon == "blundergat_zm" )
|
|
{
|
|
str_new_weapon = "blundersplat_zm";
|
|
}
|
|
else
|
|
{
|
|
str_new_weapon = "blundersplat_upgraded_zm";
|
|
}
|
|
if ( player hasweapon( "blundersplat_zm" ) )
|
|
{
|
|
player givemaxammo( "blundersplat_zm" );
|
|
}
|
|
else if ( player hasweapon( "blundersplat_upgraded_zm" ) )
|
|
{
|
|
player givemaxammo( "blundersplat_upgraded_zm" );
|
|
}
|
|
else
|
|
{
|
|
player giveweapon( str_new_weapon );
|
|
player switchtoweapon( str_new_weapon );
|
|
}
|
|
player thread do_player_general_vox( "general", "player_recieves_blundersplat" );
|
|
player notify( "player_obtained_acidgat" );
|
|
player thread player_lost_blundersplat_watcher();
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
wait_for_timeout()
|
|
{
|
|
self endon( "acid_taken" );
|
|
wait 15;
|
|
self notify( "acid_timeout" );
|
|
}
|
|
|
|
blundergat_upgrade_station_inject( str_weapon_model )
|
|
{
|
|
wait 0,5;
|
|
self playsound( "zmb_acidgat_upgrade_machine" );
|
|
self setanim( self.fxanims[ "close" ], 1, 0, 1 );
|
|
wait self.n_start_time;
|
|
i = 0;
|
|
while ( i < 3 )
|
|
{
|
|
self setanim( self.fxanims[ "inject" ], 1, 0, 1 );
|
|
wait self.n_idle_time;
|
|
i++;
|
|
}
|
|
self.worldgun delete();
|
|
if ( str_weapon_model == "blundergat_zm" )
|
|
{
|
|
self.worldgun = spawn_weapon_model( "blundersplat_zm", undefined, self.v_weapon_origin, self.v_weapon_angles );
|
|
}
|
|
else
|
|
{
|
|
self.worldgun = spawn_weapon_model( "blundersplat_upgraded_zm", undefined, self.v_weapon_origin, self.v_weapon_angles );
|
|
}
|
|
self setanim( self.fxanims[ "open" ], 1, 0, 1 );
|
|
wait self.n_end_time;
|
|
wait 0,5;
|
|
}
|
|
|
|
player_lost_blundersplat_watcher()
|
|
{
|
|
while ( isDefined( self ) )
|
|
{
|
|
if ( isalive( self ) )
|
|
{
|
|
primaries = self getweaponslistprimaries();
|
|
if ( !isinarray( primaries, "blundersplat_zm" ) && !isinarray( primaries, "blundersplat_upgraded_zm" ) )
|
|
{
|
|
if ( isDefined( self.afterlife ) && !self.afterlife )
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
wait 1;
|
|
}
|
|
}
|
|
}
|
|
|
|
player_lightning_manager()
|
|
{
|
|
self endon( "disconnect" );
|
|
self.b_lightning = 0;
|
|
a_bad_zones[ 0 ] = "zone_dryer";
|
|
a_bad_zones[ 1 ] = "zone_studio";
|
|
a_bad_zones[ 2 ] = "zone_citadel_stairs";
|
|
a_bad_zones[ 3 ] = "cellblock_shower";
|
|
a_bad_zones[ 4 ] = "zone_citadel";
|
|
a_bad_zones[ 5 ] = "zone_infirmary";
|
|
a_bad_zones[ 6 ] = "zone_infirmary_roof";
|
|
a_bad_zones[ 7 ] = "zone_citadel_shower";
|
|
while ( 1 )
|
|
{
|
|
str_player_zone = self get_player_zone();
|
|
while ( !isDefined( str_player_zone ) )
|
|
{
|
|
wait 1;
|
|
}
|
|
if ( isDefined( level.hostmigrationtimer ) )
|
|
{
|
|
level waittill( "host_migration_end" );
|
|
self.b_lightning = 0;
|
|
self setclientfieldtoplayer( "toggle_lightning", 0 );
|
|
wait 1;
|
|
}
|
|
while ( isDefined( self.afterlife ) || self.afterlife && isDefined( self.scary_lightning ) && self.scary_lightning )
|
|
{
|
|
self.b_lightning = 0;
|
|
self setclientfieldtoplayer( "toggle_lightning", 0 );
|
|
while ( isDefined( self.afterlife ) || self.afterlife && isDefined( self.scary_lightning ) && self.scary_lightning )
|
|
{
|
|
wait 0,05;
|
|
}
|
|
}
|
|
if ( isDefined( self.b_lightning ) && self.b_lightning )
|
|
{
|
|
_a496 = a_bad_zones;
|
|
_k496 = getFirstArrayKey( _a496 );
|
|
while ( isDefined( _k496 ) )
|
|
{
|
|
str_bad_zone = _a496[ _k496 ];
|
|
if ( str_player_zone == str_bad_zone )
|
|
{
|
|
self.b_lightning = 0;
|
|
self setclientfieldtoplayer( "toggle_lightning", 0 );
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
_k496 = getNextArrayKey( _a496, _k496 );
|
|
}
|
|
}
|
|
}
|
|
else self.b_lightning = 1;
|
|
_a512 = a_bad_zones;
|
|
_k512 = getFirstArrayKey( _a512 );
|
|
while ( isDefined( _k512 ) )
|
|
{
|
|
str_bad_zone = _a512[ _k512 ];
|
|
if ( str_player_zone == str_bad_zone )
|
|
{
|
|
self.b_lightning = 0;
|
|
}
|
|
_k512 = getNextArrayKey( _a512, _k512 );
|
|
}
|
|
if ( isDefined( self.b_lightning ) && self.b_lightning )
|
|
{
|
|
self setclientfieldtoplayer( "toggle_lightning", 1 );
|
|
}
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
setting_tutorial_hud()
|
|
{
|
|
client_hint = newclienthudelem( self );
|
|
client_hint.x = 320;
|
|
client_hint.y = 220;
|
|
client_hint.alignx = "center";
|
|
client_hint.aligny = "bottom";
|
|
client_hint.fontscale = 1,6;
|
|
client_hint.alpha = 1;
|
|
client_hint.sort = 20;
|
|
return client_hint;
|
|
}
|
|
|
|
riotshield_tutorial_hint()
|
|
{
|
|
self waittill( "alcatraz_shield_zm_given" );
|
|
wait 4;
|
|
hud = setting_tutorial_hud();
|
|
hud settext( &"ZM_PRISON_RIOTSHIELD_ATTACK" );
|
|
self waittill_notify_or_timeout( "shield_attack", 3 );
|
|
hud settext( &"ZM_PRISON_RIOTSHIELD_DEPLOY" );
|
|
self waittill_notify_or_timeout( "shield_attack", 3 );
|
|
hud destroy();
|
|
}
|
|
|
|
check_solo_status()
|
|
{
|
|
if ( getnumexpectedplayers() == 1 || !sessionmodeisonlinegame() && !sessionmodeisprivate() )
|
|
{
|
|
level.is_forever_solo_game = 1;
|
|
}
|
|
else
|
|
{
|
|
level.is_forever_solo_game = 0;
|
|
}
|
|
}
|
|
|
|
disable_powerup_if_player_on_bridge()
|
|
{
|
|
self endon( "disconnect" );
|
|
flag_wait( "afterlife_start_over" );
|
|
while ( 1 )
|
|
{
|
|
if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
|
{
|
|
if ( flag( "zombie_drop_powerups" ) )
|
|
{
|
|
flag_clear( "zombie_drop_powerups" );
|
|
}
|
|
}
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
enable_powerup_if_no_player_on_bridge()
|
|
{
|
|
flag_wait( "afterlife_start_over" );
|
|
while ( 1 )
|
|
{
|
|
n_player_total = 0;
|
|
n_player_total += get_players_in_zone( "zone_golden_gate_bridge" );
|
|
if ( n_player_total == 0 && !flag( "zombie_drop_powerups" ) )
|
|
{
|
|
flag_set( "zombie_drop_powerups" );
|
|
}
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
init_level_specific_audio()
|
|
{
|
|
level.oh_shit_vo_cooldown = 0;
|
|
level.wolf_kill_vo_cooldown = 0;
|
|
level.wallbuys_purchased = 0;
|
|
setdvar( "zombie_kills", "5" );
|
|
setdvar( "zombie_kill_timer", "5" );
|
|
if ( is_classic() )
|
|
{
|
|
level._audio_custom_response_line = ::alcatraz_audio_custom_response_line;
|
|
level.audio_get_mod_type = ::alcatraz_audio_get_mod_type_override;
|
|
level.custom_kill_damaged_vo = ::maps/mp/zombies/_zm_audio::custom_kill_damaged_vo;
|
|
level._custom_zombie_oh_shit_vox_func = ::alcatraz_custom_zombie_oh_shit_vox;
|
|
level.gib_on_damage = ::alcatraz_custom_crawler_spawned_vo;
|
|
level thread alcatraz_first_magic_box_seen_vo();
|
|
level._audio_custom_weapon_check = ::alcatraz_audio_custom_weapon_check;
|
|
level thread brutus_spawn_vo_watcher();
|
|
level thread brutus_killed_vo_watcher();
|
|
}
|
|
level thread setup_conversation_vo();
|
|
alcatraz_add_player_dialogue( "player", "general", "no_money_weapon", "nomoney_generic", undefined );
|
|
alcatraz_add_player_dialogue( "player", "general", "no_money_box", "nomoney_generic", undefined );
|
|
alcatraz_add_player_dialogue( "player", "general", "perk_deny", "nomoney_generic", undefined );
|
|
alcatraz_add_player_dialogue( "player", "perk", "specialty_armorvest", "perk_generic", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "perk", "specialty_fastreload", "perk_generic", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "perk", "specialty_rof", "perk_generic", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "perk", "specialty_deadshot", "perk_generic", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "perk", "specialty_grenadepulldeath", "perk_generic", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "closekill", "kill_close", undefined, 15 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "damage", "kill_damaged", undefined, 50 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "headshot", "kill_headshot", "resp_kill_headshot", 25 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_0", "headshot_respond_to_plr_0", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_1", "headshot_respond_to_plr_1", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_2", "headshot_respond_to_plr_2", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_to_plr_3", "headshot_respond_to_plr_3", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "headshot_respond_generic", "headshot_respond_generic", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "retriever", "kill_retriever", undefined, 15 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "redeemer", "kill_redeemer", undefined, 15 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "blundergat", "kill_blundergat", undefined, 15 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "acidgat", "kill_acidgat", undefined, 15 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "death_machine", "kill_death_machine", undefined, 15 );
|
|
alcatraz_add_player_dialogue( "player", "kill", "wolf_kill", "wolf_kill", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "achievement", "earn_acheivement", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "revive_up", "heal_revived", "revive_player", 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "revive_player", "revive_player", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "exert_sigh", "exert_sigh", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "exert_laugh", "exert_laugh", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "pain_high", "pain_high", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "build_pickup", "build_pickup", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "build_swap", "build_swap", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "build_add", "build_add", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "build_final", "build_final", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "build_bsm_pickup", "build_bsm_pickup", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "build_bsm_final", "build_bsm_final", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "player_recieves_blundersplat", "build_bsm_plc", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "build_zs_pickup", "build_zs_pickup", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "build_zs_final", "build_zs_final", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "build_zs_plc", "build_zs_plc", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "reboard", "rebuild_boards", undefined, 50 );
|
|
alcatraz_add_player_dialogue( "player", "general", "discover_box", "discover_box", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "discover_wall_buy", "discover_wall_buy", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "generic_wall_buy", "generic_wall_buy", undefined, 25 );
|
|
alcatraz_add_player_dialogue( "player", "general", "wpck_pap", "wpck_pap", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "portal_clue", "portal_clue", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "killswitch_clue", "killswitch_clue", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "power_off", "power_off", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "power_on", "power_on", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "electric_zap", "electric_zap", undefined, 25 );
|
|
alcatraz_add_player_dialogue( "player", "general", "need_electricity", "need_electricity", undefined, 25 );
|
|
alcatraz_add_player_dialogue( "player", "general", "use_gondola", "use_gondola", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "discover_trap", "discover_trap", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "start_trap", "start_trap", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "surrounded_respond_to_plr_0", "surrounded_respond_to_plr_0", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "surrounded_respond_to_plr_1", "surrounded_respond_to_plr_1", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "surrounded_respond_to_plr_2", "surrounded_respond_to_plr_2", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "surrounded_respond_to_plr_3", "surrounded_respond_to_plr_3", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "wolf_complete", "wolf_complete", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "wolf_final", "wolf_final", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "wolf_encounter", "wolf_encounter", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "brutus_encounter", "brutus_encounter", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "brutus_arrival", "brutus_arrival", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "brutus_reaction", "brutus_reaction", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "general", "brutus_defeated", "brutus_defeated", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "find_map", "find_map", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "response_map", "response_map", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_key", "sidequest_key", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_key_response", "sidequest_key_response", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_sheets", "sidequest_sheets", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_valves", "sidequest_valves", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_engine", "sidequest_engine", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_rigging", "sidequest_rigging", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_oxygen", "sidequest_oxygen", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_parts1_prog", "sidequest_parts1_prog", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_parts2_prog", "sidequest_parts2_prog", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_parts3_prog", "sidequest_parts3_prog", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_parts4_prog", "sidequest_parts4_prog", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_all_parts", "sidequest_all_parts", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "sidequest_roof_nag", "sidequest_roof_nag", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "build_plane", "build_plane", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "plane_takeoff", "plane_takeoff", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "plane_flight", "plane_flight", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "plane_crash", "plane_crash", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "free_fall", "free_fall", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "zombie_arrive_gg", "zombie_arrive_gg", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "chair_electrocution", "chair_electrocution", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "fuel_pickup", "fuel_pickup", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "start_2", "start_2", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "pick_up_easter_egg", "pick_up_egg", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "secret_poster", "secret_poster", undefined, 100 );
|
|
alcatraz_add_player_dialogue( "player", "quest", "find_secret", "find_secret", undefined, 100 );
|
|
}
|
|
|
|
alcatraz_add_player_dialogue( speaker, category, type, alias, response, chance )
|
|
{
|
|
level.vox zmbvoxadd( speaker, category, type, alias, response );
|
|
if ( isDefined( chance ) )
|
|
{
|
|
add_vox_response_chance( type, chance );
|
|
}
|
|
}
|
|
|
|
alcatraz_audio_get_mod_type_override( impact, mod, weapon, zombie, instakill, dist, player )
|
|
{
|
|
close_dist = 4096;
|
|
med_dist = 15376;
|
|
far_dist = 75625;
|
|
a_str_mod = [];
|
|
if ( isDefined( zombie.my_soul_catcher ) )
|
|
{
|
|
if ( isDefined( zombie.my_soul_catcher.wolf_kill_cooldown ) && !zombie.my_soul_catcher.wolf_kill_cooldown )
|
|
{
|
|
if ( isDefined( player.soul_catcher_cooldown ) && !player.soul_catcher_cooldown )
|
|
{
|
|
if ( isDefined( zombie.my_soul_catcher.souls_received ) && zombie.my_soul_catcher.souls_received > 0 )
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "wolf_kill";
|
|
}
|
|
else
|
|
{
|
|
if ( isDefined( zombie.my_soul_catcher.souls_received ) && zombie.my_soul_catcher.souls_received == 0 )
|
|
{
|
|
if ( isDefined( level.wolf_encounter_vo_played ) && !level.wolf_encounter_vo_played )
|
|
{
|
|
if ( level.soul_catchers_charged == 0 )
|
|
{
|
|
zombie.my_soul_catcher thread maps/mp/zm_alcatraz_weap_quest::first_wolf_encounter_vo();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
if ( weapon == "blundergat_zm" || weapon == "blundergat_upgraded_zm" )
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "blundergat";
|
|
}
|
|
if ( isDefined( zombie.damageweapon ) && zombie.damageweapon == "blundersplat_explosive_dart_zm" )
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "acidgat";
|
|
}
|
|
if ( isDefined( zombie.damageweapon ) && zombie.damageweapon == "bouncing_tomahawk_zm" )
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "retriever";
|
|
}
|
|
if ( isDefined( zombie.damageweapon ) && zombie.damageweapon == "upgraded_tomahawk_zm" )
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "redeemer";
|
|
}
|
|
if ( weapon == "minigun_alcatraz_zm" || weapon == "minigun_alcatraz_upgraded_zm" )
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "death_machine";
|
|
}
|
|
if ( is_headshot( weapon, impact, mod ) && dist >= far_dist )
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "headshot";
|
|
}
|
|
if ( is_explosive_damage( mod ) && weapon != "ray_gun_zm" && weapon != "ray_gun_upgraded_zm" && isDefined( zombie.is_on_fire ) && !zombie.is_on_fire )
|
|
{
|
|
if ( !isinarray( a_str_mod, "retriever" ) && !isinarray( a_str_mod, "redeemer" ) )
|
|
{
|
|
if ( !instakill )
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "explosive";
|
|
}
|
|
else
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "weapon_instakill";
|
|
}
|
|
}
|
|
}
|
|
if ( weapon == "ray_gun_zm" || weapon == "ray_gun_upgraded_zm" )
|
|
{
|
|
if ( dist > far_dist )
|
|
{
|
|
if ( !instakill )
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "raygun";
|
|
}
|
|
else
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "weapon_instakill";
|
|
}
|
|
}
|
|
}
|
|
if ( instakill )
|
|
{
|
|
if ( mod == "MOD_MELEE" )
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "melee_instakill";
|
|
}
|
|
else
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "weapon_instakill";
|
|
}
|
|
}
|
|
if ( mod != "MOD_MELEE" && !zombie.has_legs )
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "crawler";
|
|
}
|
|
if ( mod != "MOD_BURNED" && dist < close_dist )
|
|
{
|
|
a_str_mod[ a_str_mod.size ] = "closekill";
|
|
}
|
|
if ( a_str_mod.size == 0 )
|
|
{
|
|
str_mod_final = "default";
|
|
}
|
|
else if ( a_str_mod.size == 1 )
|
|
{
|
|
str_mod_final = a_str_mod[ 0 ];
|
|
}
|
|
else
|
|
{
|
|
i = 0;
|
|
while ( i < a_str_mod.size )
|
|
{
|
|
if ( cointoss() )
|
|
{
|
|
str_mod_final = a_str_mod[ i ];
|
|
}
|
|
i++;
|
|
}
|
|
str_mod_final = a_str_mod[ randomint( a_str_mod.size ) ];
|
|
}
|
|
if ( str_mod_final == "wolf_kill" )
|
|
{
|
|
player thread wolf_kill_cooldown_watcher( zombie.my_soul_catcher );
|
|
}
|
|
return str_mod_final;
|
|
}
|
|
|
|
wolf_kill_cooldown_watcher( soul_catcher )
|
|
{
|
|
self endon( "disconnect" );
|
|
self waittill( "speaking", type );
|
|
if ( type == "wolf_kill" )
|
|
{
|
|
self.soul_catcher_cooldown = 1;
|
|
soul_catcher thread wolf_kill_cooldown();
|
|
}
|
|
}
|
|
|
|
wolf_kill_cooldown()
|
|
{
|
|
self.wolf_kill_cooldown = 1;
|
|
wait 60;
|
|
self.wolf_kill_cooldown = 0;
|
|
}
|
|
|
|
setup_conversation_vo()
|
|
{
|
|
level.conscience_vo = [];
|
|
level.conscience_vo[ "conscience_Finn_convo_1" ] = [];
|
|
level.conscience_vo[ "conscience_Finn_convo_1" ][ 0 ] = "vox_plr_0_finn_self_2_0";
|
|
level.conscience_vo[ "conscience_Finn_convo_1" ][ 1 ] = "vox_plr_0_finn_self_2_1";
|
|
level.conscience_vo[ "conscience_Finn_convo_1" ][ 2 ] = "vox_plr_0_finn_self_2_2";
|
|
level.conscience_vo[ "conscience_Finn_convo_1" ][ 3 ] = "vox_plr_0_finn_self_2_3";
|
|
level.conscience_vo[ "conscience_Finn_convo_1" ][ 4 ] = "vox_plr_0_finn_self_2_4";
|
|
level.conscience_vo[ "conscience_Finn_convo_2" ] = [];
|
|
level.conscience_vo[ "conscience_Finn_convo_2" ][ 0 ] = "vox_plr_0_finn_self_3_0";
|
|
level.conscience_vo[ "conscience_Finn_convo_2" ][ 1 ] = "vox_plr_0_finn_self_3_1";
|
|
level.conscience_vo[ "conscience_Finn_convo_2" ][ 2 ] = "vox_plr_0_finn_self_3_2";
|
|
level.conscience_vo[ "conscience_Finn_convo_2" ][ 3 ] = "vox_plr_0_finn_self_3_3";
|
|
level.conscience_vo[ "conscience_Finn_convo_2" ][ 4 ] = "vox_plr_0_finn_self_3_4";
|
|
level.conscience_vo[ "conscience_Finn_convo_2" ][ 5 ] = "vox_plr_0_finn_self_3_5";
|
|
level.conscience_vo[ "conscience_Sal_convo_1" ] = [];
|
|
level.conscience_vo[ "conscience_Sal_convo_1" ][ 0 ] = "vox_plr_1_sal_self_2_0";
|
|
level.conscience_vo[ "conscience_Sal_convo_1" ][ 1 ] = "vox_plr_1_sal_self_2_1";
|
|
level.conscience_vo[ "conscience_Sal_convo_1" ][ 2 ] = "vox_plr_1_sal_self_2_2";
|
|
level.conscience_vo[ "conscience_Sal_convo_1" ][ 3 ] = "vox_plr_1_sal_self_2_3";
|
|
level.conscience_vo[ "conscience_Sal_convo_1" ][ 4 ] = "vox_plr_1_sal_self_2_4";
|
|
level.conscience_vo[ "conscience_Sal_convo_1" ][ 5 ] = "vox_plr_1_sal_self_2_5";
|
|
level.conscience_vo[ "conscience_Sal_convo_2" ] = [];
|
|
level.conscience_vo[ "conscience_Sal_convo_2" ][ 0 ] = "vox_plr_1_sal_self_3_0";
|
|
level.conscience_vo[ "conscience_Sal_convo_2" ][ 1 ] = "vox_plr_1_sal_self_3_1";
|
|
level.conscience_vo[ "conscience_Sal_convo_2" ][ 2 ] = "vox_plr_1_sal_self_3_2";
|
|
level.conscience_vo[ "conscience_Sal_convo_2" ][ 3 ] = "vox_plr_1_sal_self_3_3";
|
|
level.conscience_vo[ "conscience_Sal_convo_2" ][ 4 ] = "vox_plr_1_sal_self_3_4";
|
|
level.conscience_vo[ "conscience_Billy_convo_1" ] = [];
|
|
level.conscience_vo[ "conscience_Billy_convo_1" ][ 0 ] = "vox_plr_2_billy_self_2_0";
|
|
level.conscience_vo[ "conscience_Billy_convo_1" ][ 1 ] = "vox_plr_2_billy_self_2_1";
|
|
level.conscience_vo[ "conscience_Billy_convo_1" ][ 2 ] = "vox_plr_2_billy_self_2_2";
|
|
level.conscience_vo[ "conscience_Billy_convo_1" ][ 3 ] = "vox_plr_2_billy_self_2_3";
|
|
level.conscience_vo[ "conscience_Billy_convo_1" ][ 4 ] = "vox_plr_2_billy_self_2_4";
|
|
level.conscience_vo[ "conscience_Billy_convo_2" ] = [];
|
|
level.conscience_vo[ "conscience_Billy_convo_2" ][ 0 ] = "vox_plr_2_billy_self_3_0";
|
|
level.conscience_vo[ "conscience_Billy_convo_2" ][ 1 ] = "vox_plr_2_billy_self_3_1";
|
|
level.conscience_vo[ "conscience_Billy_convo_2" ][ 2 ] = "vox_plr_2_billy_self_3_2";
|
|
level.conscience_vo[ "conscience_Billy_convo_2" ][ 3 ] = "vox_plr_2_billy_self_3_3";
|
|
level.conscience_vo[ "conscience_Billy_convo_2" ][ 4 ] = "vox_plr_2_billy_self_3_4";
|
|
level.conscience_vo[ "conscience_Arlington_convo_1" ] = [];
|
|
level.conscience_vo[ "conscience_Arlington_convo_1" ][ 0 ] = "vox_plr_3_arlington_self_2_0";
|
|
level.conscience_vo[ "conscience_Arlington_convo_1" ][ 1 ] = "vox_plr_3_arlington_self_2_2";
|
|
level.conscience_vo[ "conscience_Arlington_convo_1" ][ 2 ] = "vox_plr_3_arlington_self_2_3";
|
|
level.conscience_vo[ "conscience_Arlington_convo_1" ][ 3 ] = "vox_plr_3_arlington_self_2_4";
|
|
level.conscience_vo[ "conscience_Arlington_convo_1" ][ 4 ] = "vox_plr_3_arlington_self_2_5";
|
|
level.conscience_vo[ "conscience_Arlington_convo_2" ] = [];
|
|
level.conscience_vo[ "conscience_Arlington_convo_2" ][ 0 ] = "vox_plr_3_arlington_self_3_0";
|
|
level.conscience_vo[ "conscience_Arlington_convo_2" ][ 1 ] = "vox_plr_3_arlington_self_3_1";
|
|
level.conscience_vo[ "conscience_Arlington_convo_2" ][ 2 ] = "vox_plr_3_arlington_self_3_2";
|
|
level.conscience_vo[ "conscience_Arlington_convo_2" ][ 3 ] = "vox_plr_3_arlington_self_3_3";
|
|
level.conscience_vo[ "conscience_Arlington_convo_2" ][ 4 ] = "vox_plr_3_arlington_self_3_4";
|
|
}
|
|
|
|
alcatraz_custom_zombie_oh_shit_vox()
|
|
{
|
|
self endon( "death_or_disconnect" );
|
|
while ( 1 )
|
|
{
|
|
wait 1;
|
|
if ( isDefined( self.oh_shit_vo_cooldown ) && self.oh_shit_vo_cooldown )
|
|
{
|
|
continue;
|
|
}
|
|
players = get_players();
|
|
zombs = get_round_enemy_array();
|
|
if ( players.size <= 1 )
|
|
{
|
|
n_distance = 250;
|
|
n_zombies = 5;
|
|
n_chance = 30;
|
|
n_cooldown_time = 20;
|
|
}
|
|
else
|
|
{
|
|
n_distance = 250;
|
|
n_zombies = 5;
|
|
n_chance = 30;
|
|
n_cooldown_time = 15;
|
|
}
|
|
close_zombs = 0;
|
|
i = 0;
|
|
while ( i < zombs.size )
|
|
{
|
|
if ( isDefined( zombs[ i ].favoriteenemy ) || zombs[ i ].favoriteenemy == self && !isDefined( zombs[ i ].favoriteenemy ) )
|
|
{
|
|
if ( distancesquared( zombs[ i ].origin, self.origin ) < ( n_distance * n_distance ) )
|
|
{
|
|
close_zombs++;
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
if ( close_zombs >= n_zombies )
|
|
{
|
|
if ( randomint( 100 ) < n_chance && isDefined( self.isonbus ) && !self.isonbus )
|
|
{
|
|
self maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "oh_shit" );
|
|
self thread global_oh_shit_cooldown_timer( n_cooldown_time );
|
|
wait n_cooldown_time;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
global_oh_shit_cooldown_timer( n_cooldown_time )
|
|
{
|
|
self endon( "disconnect" );
|
|
self.oh_shit_vo_cooldown = 1;
|
|
wait n_cooldown_time;
|
|
self.oh_shit_vo_cooldown = 0;
|
|
}
|
|
|
|
alcatraz_custom_crawler_spawned_vo()
|
|
{
|
|
self endon( "death" );
|
|
if ( isDefined( self.a.gib_ref ) && isalive( self ) )
|
|
{
|
|
if ( self.a.gib_ref != "no_legs" || self.a.gib_ref == "right_leg" && self.a.gib_ref == "left_leg" )
|
|
{
|
|
if ( isDefined( self.attacker ) && isplayer( self.attacker ) )
|
|
{
|
|
if ( isDefined( self.attacker.crawler_created_vo_cooldown ) && self.attacker.crawler_created_vo_cooldown )
|
|
{
|
|
return;
|
|
}
|
|
rand = randomintrange( 0, 100 );
|
|
if ( rand < 15 )
|
|
{
|
|
self.attacker maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "crawl_spawn" );
|
|
self.attacker thread crawler_created_vo_cooldown();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
crawler_created_vo_cooldown()
|
|
{
|
|
self endon( "disconnect" );
|
|
self.crawler_created_vo_cooldown = 1;
|
|
wait 30;
|
|
self.crawler_created_vo_cooldown = 0;
|
|
}
|
|
|
|
alcatraz_first_magic_box_seen_vo()
|
|
{
|
|
flag_wait( "start_zombie_round_logic" );
|
|
magicbox = level.chests[ level.chest_index ];
|
|
a_players = getplayers();
|
|
_a1155 = a_players;
|
|
_k1155 = getFirstArrayKey( _a1155 );
|
|
while ( isDefined( _k1155 ) )
|
|
{
|
|
player = _a1155[ _k1155 ];
|
|
player thread wait_and_play_first_magic_box_seen_vo( magicbox.unitrigger_stub );
|
|
_k1155 = getNextArrayKey( _a1155, _k1155 );
|
|
}
|
|
}
|
|
|
|
wait_and_play_first_magic_box_seen_vo( struct )
|
|
{
|
|
self endon( "disconnect" );
|
|
level endon( "first_maigc_box_discovered" );
|
|
while ( 1 )
|
|
{
|
|
if ( distancesquared( self.origin, struct.origin ) < 40000 )
|
|
{
|
|
if ( self is_player_looking_at( struct.origin, 0,25 ) )
|
|
{
|
|
if ( isDefined( self.dontspeak ) && !self.dontspeak )
|
|
{
|
|
self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "discover_box" );
|
|
level notify( "first_maigc_box_discovered" );
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
wait 0,1;
|
|
}
|
|
}
|
|
}
|
|
|
|
alcatraz_audio_custom_weapon_check( weapon, magic_box )
|
|
{
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
if ( isDefined( magic_box ) && magic_box )
|
|
{
|
|
type = self maps/mp/zombies/_zm_weapons::weapon_type_check( weapon );
|
|
return type;
|
|
}
|
|
if ( issubstr( weapon, "upgraded" ) )
|
|
{
|
|
self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "wpck_pap" );
|
|
}
|
|
else if ( level.wallbuys_purchased == 0 )
|
|
{
|
|
self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "discover_wall_buy" );
|
|
level.wallbuys_purchased++;
|
|
}
|
|
else
|
|
{
|
|
self thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "generic_wall_buy" );
|
|
}
|
|
return "crappy";
|
|
}
|
|
|
|
brutus_spawn_vo_watcher()
|
|
{
|
|
level.total_brutuses_spawned = 0;
|
|
while ( 1 )
|
|
{
|
|
level waittill( "brutus_spawned", ai_brutus );
|
|
while ( !isDefined( ai_brutus ) )
|
|
{
|
|
continue;
|
|
}
|
|
if ( isDefined( level.brutus_spawn_vo_cooldown ) && level.brutus_spawn_vo_cooldown )
|
|
{
|
|
continue;
|
|
}
|
|
ai_brutus thread brutus_reaction_vo_watcher();
|
|
ai_brutus thread brutus_helmet_pop_vo_watcher();
|
|
if ( level.total_brutuses_spawned == 0 )
|
|
{
|
|
str_vo_category = "brutus_encounter";
|
|
}
|
|
else
|
|
{
|
|
str_vo_category = "brutus_arrival";
|
|
}
|
|
wait 3;
|
|
while ( !isalive( ai_brutus ) )
|
|
{
|
|
continue;
|
|
}
|
|
a_players = getplayers();
|
|
a_closest = get_array_of_closest( ai_brutus.origin, a_players );
|
|
i = 0;
|
|
while ( i < a_closest.size )
|
|
{
|
|
if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak )
|
|
{
|
|
if ( isalive( a_closest[ i ] ) && isalive( ai_brutus ) )
|
|
{
|
|
a_closest[ i ] thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", str_vo_category );
|
|
level thread brutus_spawn_vo_cooldown();
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
brutus_spawn_vo_cooldown()
|
|
{
|
|
level.brutus_spawn_vo_cooldown = 1;
|
|
wait 30;
|
|
level.brutus_spawn_vo_cooldown = 0;
|
|
}
|
|
|
|
brutus_reaction_vo_watcher()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "restart_brutus_reaction_vo_watcher" );
|
|
while ( isalive( self ) )
|
|
{
|
|
wait randomfloatrange( 20, 40 );
|
|
a_players = getplayers();
|
|
a_closest = get_array_of_closest( self.origin, a_players );
|
|
i = 0;
|
|
while ( i < a_closest.size )
|
|
{
|
|
if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak )
|
|
{
|
|
if ( distancesquared( a_closest[ i ].origin, self.origin ) < 1000000 )
|
|
{
|
|
a_closest[ i ] thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "brutus_reaction" );
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
}
|
|
|
|
brutus_helmet_pop_vo_watcher()
|
|
{
|
|
self endon( "death" );
|
|
level waittill( "brutus_helmet_removed", player );
|
|
wait 3;
|
|
if ( isalive( player ) )
|
|
{
|
|
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "brutus_reaction" );
|
|
}
|
|
level notify( "restart_brutus_reaction_vo_watcher" );
|
|
self thread brutus_reaction_vo_watcher();
|
|
}
|
|
|
|
brutus_killed_vo_watcher()
|
|
{
|
|
while ( 1 )
|
|
{
|
|
level waittill( "brutus_killed", player );
|
|
wait 5;
|
|
if ( isalive( player ) )
|
|
{
|
|
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "brutus_defeated" );
|
|
}
|
|
}
|
|
}
|
|
|
|
easter_egg_song_vo( player )
|
|
{
|
|
wait 3,5;
|
|
if ( isalive( player ) )
|
|
{
|
|
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "quest", "find_secret" );
|
|
}
|
|
else
|
|
{
|
|
while ( 1 )
|
|
{
|
|
a_players = getplayers();
|
|
_a1346 = a_players;
|
|
_k1346 = getFirstArrayKey( _a1346 );
|
|
while ( isDefined( _k1346 ) )
|
|
{
|
|
player = _a1346[ _k1346 ];
|
|
if ( isalive( player ) )
|
|
{
|
|
if ( isDefined( player.dontspeak ) && !player.dontspeak )
|
|
{
|
|
player thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "quest", "find_secret" );
|
|
}
|
|
}
|
|
_k1346 = getNextArrayKey( _a1346, _k1346 );
|
|
}
|
|
}
|
|
wait 0,1;
|
|
}
|
|
}
|
|
|
|
player_portal_clue_vo()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
flag_wait( "afterlife_start_over" );
|
|
wait 1;
|
|
while ( 1 )
|
|
{
|
|
self waittill( "player_fake_corpse_created" );
|
|
self.e_afterlife_corpse waittill( "player_revived", e_reviver );
|
|
if ( self == e_reviver && !level.someone_has_visited_nml )
|
|
{
|
|
wait 3;
|
|
self do_player_general_vox( "general", "portal_clue", undefined, 100 );
|
|
return;
|
|
}
|
|
wait 0,1;
|
|
}
|
|
}
|
|
|
|
setup_personality_character_exerts()
|
|
{
|
|
level.exert_sounds[ 1 ][ "burp" ][ 0 ] = "vox_plr_0_exert_burp_0";
|
|
level.exert_sounds[ 1 ][ "burp" ][ 1 ] = "vox_plr_0_exert_burp_1";
|
|
level.exert_sounds[ 1 ][ "burp" ][ 2 ] = "vox_plr_0_exert_burp_2";
|
|
level.exert_sounds[ 1 ][ "burp" ][ 3 ] = "vox_plr_0_exert_burp_3";
|
|
level.exert_sounds[ 1 ][ "burp" ][ 4 ] = "vox_plr_0_exert_burp_4";
|
|
level.exert_sounds[ 1 ][ "burp" ][ 5 ] = "vox_plr_0_exert_burp_5";
|
|
level.exert_sounds[ 1 ][ "burp" ][ 6 ] = "vox_plr_0_exert_burp_6";
|
|
level.exert_sounds[ 2 ][ "burp" ][ 0 ] = "vox_plr_1_exert_burp_0";
|
|
level.exert_sounds[ 2 ][ "burp" ][ 1 ] = "vox_plr_1_exert_burp_1";
|
|
level.exert_sounds[ 2 ][ "burp" ][ 2 ] = "vox_plr_1_exert_burp_2";
|
|
level.exert_sounds[ 2 ][ "burp" ][ 3 ] = "vox_plr_1_exert_burp_3";
|
|
level.exert_sounds[ 3 ][ "burp" ][ 0 ] = "vox_plr_2_exert_burp_0";
|
|
level.exert_sounds[ 3 ][ "burp" ][ 1 ] = "vox_plr_2_exert_burp_1";
|
|
level.exert_sounds[ 3 ][ "burp" ][ 2 ] = "vox_plr_2_exert_burp_2";
|
|
level.exert_sounds[ 3 ][ "burp" ][ 3 ] = "vox_plr_2_exert_burp_3";
|
|
level.exert_sounds[ 3 ][ "burp" ][ 4 ] = "vox_plr_2_exert_burp_4";
|
|
level.exert_sounds[ 3 ][ "burp" ][ 5 ] = "vox_plr_2_exert_burp_5";
|
|
level.exert_sounds[ 3 ][ "burp" ][ 6 ] = "vox_plr_2_exert_burp_6";
|
|
level.exert_sounds[ 4 ][ "burp" ][ 0 ] = "vox_plr_3_exert_burp_0";
|
|
level.exert_sounds[ 4 ][ "burp" ][ 1 ] = "vox_plr_3_exert_burp_1";
|
|
level.exert_sounds[ 4 ][ "burp" ][ 2 ] = "vox_plr_3_exert_burp_2";
|
|
level.exert_sounds[ 4 ][ "burp" ][ 3 ] = "vox_plr_3_exert_burp_3";
|
|
level.exert_sounds[ 4 ][ "burp" ][ 4 ] = "vox_plr_3_exert_burp_4";
|
|
level.exert_sounds[ 4 ][ "burp" ][ 5 ] = "vox_plr_3_exert_burp_5";
|
|
level.exert_sounds[ 4 ][ "burp" ][ 6 ] = "vox_plr_3_exert_burp_6";
|
|
level.exert_sounds[ 1 ][ "hitmed" ][ 0 ] = "vox_plr_0_exert_pain_medium_0";
|
|
level.exert_sounds[ 1 ][ "hitmed" ][ 1 ] = "vox_plr_0_exert_pain_medium_1";
|
|
level.exert_sounds[ 1 ][ "hitmed" ][ 2 ] = "vox_plr_0_exert_pain_medium_2";
|
|
level.exert_sounds[ 1 ][ "hitmed" ][ 3 ] = "vox_plr_0_exert_pain_medium_3";
|
|
level.exert_sounds[ 2 ][ "hitmed" ][ 0 ] = "vox_plr_1_exert_pain_medium_0";
|
|
level.exert_sounds[ 2 ][ "hitmed" ][ 1 ] = "vox_plr_1_exert_pain_medium_1";
|
|
level.exert_sounds[ 2 ][ "hitmed" ][ 2 ] = "vox_plr_1_exert_pain_medium_2";
|
|
level.exert_sounds[ 2 ][ "hitmed" ][ 3 ] = "vox_plr_1_exert_pain_medium_3";
|
|
level.exert_sounds[ 3 ][ "hitmed" ][ 0 ] = "vox_plr_2_exert_pain_medium_0";
|
|
level.exert_sounds[ 3 ][ "hitmed" ][ 1 ] = "vox_plr_2_exert_pain_medium_1";
|
|
level.exert_sounds[ 3 ][ "hitmed" ][ 2 ] = "vox_plr_2_exert_pain_medium_2";
|
|
level.exert_sounds[ 3 ][ "hitmed" ][ 3 ] = "vox_plr_2_exert_pain_medium_3";
|
|
level.exert_sounds[ 4 ][ "hitmed" ][ 0 ] = "vox_plr_3_exert_pain_medium_0";
|
|
level.exert_sounds[ 4 ][ "hitmed" ][ 1 ] = "vox_plr_3_exert_pain_medium_1";
|
|
level.exert_sounds[ 4 ][ "hitmed" ][ 2 ] = "vox_plr_3_exert_pain_medium_2";
|
|
level.exert_sounds[ 4 ][ "hitmed" ][ 3 ] = "vox_plr_3_exert_pain_medium_3";
|
|
level.exert_sounds[ 1 ][ "hitlrg" ][ 0 ] = "vox_plr_0_exert_pain_high_0";
|
|
level.exert_sounds[ 1 ][ "hitlrg" ][ 1 ] = "vox_plr_0_exert_pain_high_1";
|
|
level.exert_sounds[ 1 ][ "hitlrg" ][ 2 ] = "vox_plr_0_exert_pain_high_2";
|
|
level.exert_sounds[ 1 ][ "hitlrg" ][ 3 ] = "vox_plr_0_exert_pain_high_3";
|
|
level.exert_sounds[ 2 ][ "hitlrg" ][ 0 ] = "vox_plr_1_exert_pain_high_0";
|
|
level.exert_sounds[ 2 ][ "hitlrg" ][ 1 ] = "vox_plr_1_exert_pain_high_1";
|
|
level.exert_sounds[ 2 ][ "hitlrg" ][ 2 ] = "vox_plr_1_exert_pain_high_2";
|
|
level.exert_sounds[ 2 ][ "hitlrg" ][ 3 ] = "vox_plr_1_exert_pain_high_3";
|
|
level.exert_sounds[ 3 ][ "hitlrg" ][ 0 ] = "vox_plr_2_exert_pain_high_0";
|
|
level.exert_sounds[ 3 ][ "hitlrg" ][ 1 ] = "vox_plr_2_exert_pain_high_1";
|
|
level.exert_sounds[ 3 ][ "hitlrg" ][ 2 ] = "vox_plr_2_exert_pain_high_2";
|
|
level.exert_sounds[ 3 ][ "hitlrg" ][ 3 ] = "vox_plr_2_exert_pain_high_3";
|
|
level.exert_sounds[ 4 ][ "hitlrg" ][ 0 ] = "vox_plr_3_exert_pain_high_0";
|
|
level.exert_sounds[ 4 ][ "hitlrg" ][ 1 ] = "vox_plr_3_exert_pain_high_1";
|
|
level.exert_sounds[ 4 ][ "hitlrg" ][ 2 ] = "vox_plr_3_exert_pain_high_2";
|
|
level.exert_sounds[ 4 ][ "hitlrg" ][ 3 ] = "vox_plr_3_exert_pain_high_3";
|
|
}
|
|
|
|
alcatraz_audio_custom_response_line( player, index, category, type )
|
|
{
|
|
if ( type == "revive_up" )
|
|
{
|
|
player thread play_vo_category_on_closest_player( "general", "revive_player" );
|
|
}
|
|
else if ( type == "headshot" )
|
|
{
|
|
if ( cointoss() )
|
|
{
|
|
player thread play_vo_category_on_closest_player( "kill", "headshot_respond_to_plr_" + player.characterindex );
|
|
}
|
|
else
|
|
{
|
|
player thread play_vo_category_on_closest_player( "kill", "headshot_respond_generic" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( type == "oh_shit" )
|
|
{
|
|
player thread play_vo_category_on_closest_player( "general", "surrounded_respond_to_plr_" + player.characterindex );
|
|
player thread global_oh_shit_cooldown_timer( 15 );
|
|
}
|
|
}
|
|
}
|
|
|
|
play_vo_category_on_closest_player( category, type )
|
|
{
|
|
a_players = getplayers();
|
|
if ( a_players.size <= 1 )
|
|
{
|
|
return;
|
|
}
|
|
arrayremovevalue( a_players, self );
|
|
a_closest = arraysort( a_players, self.origin, 1 );
|
|
if ( distancesquared( self.origin, a_closest[ 0 ].origin ) <= 250000 )
|
|
{
|
|
if ( isalive( a_closest[ 0 ] ) )
|
|
{
|
|
a_closest[ 0 ] maps/mp/zombies/_zm_audio::create_and_play_dialog( category, type );
|
|
}
|
|
}
|
|
}
|
|
|
|
check_for_special_weapon_limit_exist( weapon )
|
|
{
|
|
if ( weapon != "blundergat_zm" && weapon != "minigun_alcatraz_zm" )
|
|
{
|
|
return 1;
|
|
}
|
|
players = get_players();
|
|
count = 0;
|
|
if ( weapon == "blundergat_zm" )
|
|
{
|
|
if ( self maps/mp/zombies/_zm_weapons::has_weapon_or_upgrade( "blundersplat_zm" ) )
|
|
{
|
|
return 0;
|
|
}
|
|
if ( self afterlife_weapon_limit_check( "blundergat_zm" ) )
|
|
{
|
|
return 0;
|
|
}
|
|
limit = level.limited_weapons[ "blundergat_zm" ];
|
|
}
|
|
else
|
|
{
|
|
if ( self afterlife_weapon_limit_check( "minigun_alcatraz_zm" ) )
|
|
{
|
|
return 0;
|
|
}
|
|
limit = level.limited_weapons[ "minigun_alcatraz_zm" ];
|
|
}
|
|
i = 0;
|
|
while ( i < players.size )
|
|
{
|
|
if ( weapon == "blundergat_zm" )
|
|
{
|
|
if ( players[ i ] has_weapon_or_upgrade( "blundersplat_zm" ) || isDefined( players[ i ].is_pack_splatting ) && players[ i ].is_pack_splatting )
|
|
{
|
|
count++;
|
|
i++;
|
|
continue;
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( players[ i ] afterlife_weapon_limit_check( weapon ) )
|
|
{
|
|
count++;
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
if ( count >= limit )
|
|
{
|
|
return 0;
|
|
}
|
|
return 1;
|
|
}
|
|
|
|
afterlife_weapon_limit_check( limited_weapon )
|
|
{
|
|
while ( isDefined( self.afterlife ) && self.afterlife )
|
|
{
|
|
if ( limited_weapon == "blundergat_zm" )
|
|
{
|
|
_a1577 = self.loadout;
|
|
_k1577 = getFirstArrayKey( _a1577 );
|
|
while ( isDefined( _k1577 ) )
|
|
{
|
|
weapon = _a1577[ _k1577 ];
|
|
if ( weapon != "blundergat_zm" && weapon != "blundergat_upgraded_zm" || weapon == "blundersplat_zm" && weapon == "blundersplat_upgraded_zm" )
|
|
{
|
|
return 1;
|
|
}
|
|
_k1577 = getNextArrayKey( _a1577, _k1577 );
|
|
}
|
|
}
|
|
else while ( limited_weapon == "minigun_alcatraz_zm" )
|
|
{
|
|
_a1587 = self.loadout;
|
|
_k1587 = getFirstArrayKey( _a1587 );
|
|
while ( isDefined( _k1587 ) )
|
|
{
|
|
weapon = _a1587[ _k1587 ];
|
|
if ( weapon == "minigun_alcatraz_zm" || weapon == "minigun_alcatraz_upgraded_zm" )
|
|
{
|
|
return 1;
|
|
}
|
|
_k1587 = getNextArrayKey( _a1587, _k1587 );
|
|
}
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
door_rumble_on_buy()
|
|
{
|
|
self setclientfieldtoplayer( "rumble_door_open", 1 );
|
|
wait_network_frame();
|
|
self setclientfieldtoplayer( "rumble_door_open", 0 );
|
|
}
|