[ZM] Added zm_prison and zm_highrise GSCs

This commit is contained in:
JezuzLizard 2022-03-09 12:30:35 -08:00
parent 8ccce7f949
commit f97389d9da
93 changed files with 39579 additions and 41338 deletions

View File

@ -1,13 +0,0 @@
//checked includes match cerberus output
#include common_scripts/utility;
#include maps/mp/_utility;
init() //checked matches cerberus output
{
loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" );
loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" );
}
watch_bolt_detonation( owner ) //checked matches cerberus output
{
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "baseball_to_first_floor_climb" );
dosimpletraverse( "baseball_to_first_floor_climb" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "baseball_to_roof_climb" );
dosimpletraverse( "baseball_to_roof_climb" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "baseball_to_second_floor_climb" );
dosimpletraverse( "baseball_to_second_floor_climb" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_down_cellblock" );
dosimpletraverse( "jump_down_cellblock" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_down_cellblock_norailing" );
dosimpletraverse( "jump_down_cellblock_norailing" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_up_cellblock" );
dosimpletraverse( "jump_up_cellblock" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "climb_over_dock_fence", 1 );
dosimpletraverse( "climb_over_dock_fence", 1 );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "dock_mid_way_jump_up_climb", 1 );
dosimpletraverse( "dock_mid_way_jump_up_climb", 1 );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "dock_tommygun_dropdown", 1 );
dosimpletraverse( "dock_tommygun_dropdown", 1 );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "dock_water_climb_up" );
dosimpletraverse( "dock_water_climb_up" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "golden_gate_jump_up" );
dosimpletraverse( "golden_gate_jump_up" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "prison_gondola_traversal", 1 );
dosimpletraverse( "prison_gondola_traversal", 1 );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_down_127" );
dosimpletraverse( "jump_down_127" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_down_222" );
dosimpletraverse( "jump_down_222" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_down_286" );
dosimpletraverse( "jump_down_286" );
}

View File

@ -1,14 +1,12 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
if ( isDefined( self.isdog ) && self.isdog )
{
dog_jump_down( 72, 7 );
}
else
{
dosimpletraverse( "jump_down_72" );
}
if ( isdefined( self.isdog ) && self.isdog )
dog_jump_down( 72, 7 );
else
dosimpletraverse( "jump_down_72" );
}

View File

@ -1,14 +1,12 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
if ( isDefined( self.isdog ) && self.isdog )
{
dog_jump_down( 96, 7 );
}
else
{
dosimpletraverse( "jump_down_96" );
}
if ( isdefined( self.isdog ) && self.isdog )
dog_jump_down( 96, 7 );
else
dosimpletraverse( "jump_down_96" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_up_127" );
dosimpletraverse( "jump_up_127" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "jump_up_222" );
dosimpletraverse( "jump_up_222" );
}

View File

@ -1,7 +1,9 @@
#include maps/mp/animscripts/traverse/zm_shared;
#include maps/mp/animscripts/traverse/shared;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\animscripts\traverse\shared;
#include maps\mp\animscripts\traverse\zm_shared;
main()
{
dosimpletraverse( "cellblock_jump_up_climb" );
dosimpletraverse( "cellblock_jump_up_climb" );
}

View File

@ -1,45 +1,46 @@
//checked includes match cerberus output
#include maps/mp/zombies/_zm;
#include maps/mp/zombies/_zm_ai_dogs;
#include maps/mp/zombies/_zm_stats;
#include maps/mp/gametypes_zm/_zm_gametype;
#include common_scripts/utility;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include common_scripts\utility;
#include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_ai_dogs;
#include maps\mp\zombies\_zm;
main() //checked matches cerberus output
main()
{
maps/mp/gametypes_zm/_zm_gametype::main();
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level._game_module_custom_spawn_init_func = maps/mp/gametypes_zm/_zm_gametype::custom_spawn_init_func;
level._game_module_stat_update_func = maps/mp/zombies/_zm_stats::survival_classic_custom_stat_update;
maps/mp/gametypes_zm/_zm_gametype::post_gametype_main( "zstandard" );
maps\mp\gametypes_zm\_zm_gametype::main();
level.onprecachegametype = ::onprecachegametype;
level.onstartgametype = ::onstartgametype;
level._game_module_custom_spawn_init_func = maps\mp\gametypes_zm\_zm_gametype::custom_spawn_init_func;
level._game_module_stat_update_func = maps\mp\zombies\_zm_stats::survival_classic_custom_stat_update;
maps\mp\gametypes_zm\_zm_gametype::post_gametype_main( "zstandard" );
}
onprecachegametype() //checked matches cerberus output
onprecachegametype()
{
level.playersuicideallowed = 1;
level.canplayersuicide = ::canplayersuicide;
level.suicide_weapon = "death_self_zm";
precacheitem( "death_self_zm" );
maps/mp/zombies/_zm_ai_dogs::init();
maps/mp/gametypes_zm/_zm_gametype::rungametypeprecache( "zstandard" );
level.playersuicideallowed = 1;
level.canplayersuicide = ::canplayersuicide;
level.suicide_weapon = "death_self_zm";
precacheitem( "death_self_zm" );
maps\mp\zombies\_zm_ai_dogs::init();
maps\mp\gametypes_zm\_zm_gametype::rungametypeprecache( "zstandard" );
}
onstartgametype() //checked matches cerberus output
onstartgametype()
{
maps/mp/gametypes_zm/_zm_gametype::setup_classic_gametype();
maps/mp/gametypes_zm/_zm_gametype::rungametypemain( "zstandard", ::zstandard_main );
maps\mp\gametypes_zm\_zm_gametype::setup_classic_gametype();
maps\mp\gametypes_zm\_zm_gametype::rungametypemain( "zstandard", ::zstandard_main );
}
zstandard_main() //checked matches cerberus output
zstandard_main()
{
level.dog_rounds_allowed = getgametypesetting( "allowdogs" );
if ( level.dog_rounds_allowed )
{
maps/mp/zombies/_zm_ai_dogs::enable_dog_rounds();
}
level thread maps/mp/zombies/_zm::round_start();
level thread maps/mp/gametypes_zm/_zm_gametype::kill_all_zombies();
level.dog_rounds_allowed = getgametypesetting( "allowdogs" );
if ( level.dog_rounds_allowed )
maps\mp\zombies\_zm_ai_dogs::enable_dog_rounds();
level thread maps\mp\zombies\_zm::round_start();
level thread maps\mp\gametypes_zm\_zm_gametype::kill_all_zombies();
}

View File

@ -1,304 +1,314 @@
//checked includes changed to match cerberus output
#include maps/mp/zm_prison_sq_wth;
#include maps/mp/zm_prison_sq_fc;
#include maps/mp/zm_prison_sq_final;
#include maps/mp/zombies/_zm_powerups;
#include maps/mp/zombies/_zm_magicbox;
#include maps/mp/zm_alcatraz_travel;
#include maps/mp/zm_alcatraz_traps;
#include maps/mp/zm_prison;
#include maps/mp/zm_alcatraz_sq;
#include maps/mp/zm_prison_sq_bg;
#include maps/mp/zm_prison_spoon;
#include maps/mp/zm_prison_achievement;
#include maps/mp/zombies/_zm_game_module;
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/zombies/_zm_afterlife;
#include maps/mp/zombies/_zm_ai_brutus;
#include maps/mp/zm_alcatraz_craftables;
#include maps/mp/zombies/_zm_craftables;
#include maps/mp/zm_alcatraz_utility;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zm_alcatraz_utility;
#include maps\mp\zombies\_zm_craftables;
#include maps\mp\zm_alcatraz_craftables;
#include maps\mp\zombies\_zm_ai_brutus;
#include maps\mp\zombies\_zm_afterlife;
#include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\zombies\_zm_game_module;
#include maps\mp\zm_prison_achievement;
#include maps\mp\zm_prison_spoon;
#include maps\mp\zm_prison_sq_bg;
#include maps\mp\zm_alcatraz_sq;
#include maps\mp\zm_prison;
#include maps\mp\zm_alcatraz_traps;
#include maps\mp\zm_alcatraz_travel;
#include maps\mp\zombies\_zm_magicbox;
#include maps\mp\zombies\_zm_powerups;
#include maps\mp\zm_prison_sq_final;
#include maps\mp\zm_prison_sq_fc;
#include maps\mp\zm_prison_sq_wth;
precache() //checked matches cerberus output
precache()
{
if ( isDefined( level.createfx_enabled ) && level.createfx_enabled )
{
return;
}
maps/mp/zombies/_zm_craftables::init();
maps/mp/zm_alcatraz_craftables::include_craftables();
maps/mp/zm_alcatraz_craftables::init_craftables();
maps/mp/zombies/_zm_ai_brutus::precache();
maps/mp/zombies/_zm_afterlife::init();
precacheshader( "waypoint_kill_red" );
level._effect[ "powerup_on" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_powerup" );
if ( isdefined( level.createfx_enabled ) && level.createfx_enabled )
return;
maps\mp\zombies\_zm_craftables::init();
maps\mp\zm_alcatraz_craftables::include_craftables();
maps\mp\zm_alcatraz_craftables::init_craftables();
maps\mp\zombies\_zm_ai_brutus::precache();
maps\mp\zombies\_zm_afterlife::init();
precacheshader( "waypoint_kill_red" );
level._effect["powerup_on"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_powerup" );
}
main() //checked changed to match cerberus output
main()
{
level thread sq_main_controller();
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "zclassic" );
maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index );
maps/mp/zombies/_zm_ai_brutus::init();
level thread maps/mp/zombies/_zm_craftables::think_craftables();
maps/mp/zm_prison_achievement::init();
level thread maps/mp/zm_prison_spoon::init();
level thread maps/mp/zm_prison_sq_bg::init();
a_grief_clips = getentarray( "grief_clips", "targetname" );
foreach ( clip in a_grief_clips )
{
clip connectpaths();
clip delete();
}
level thread give_afterlife();
level thread maps/mp/zm_alcatraz_sq::start_alcatraz_sidequest();
onplayerconnect_callback( ::player_quest_vfx );
flag_wait( "initial_blackscreen_passed" );
level notify( "Pack_A_Punch_on" );
flag_wait( "start_zombie_round_logic" );
level thread maps/mp/zm_prison::delete_perk_machine_clip();
level thread maps/mp/zm_alcatraz_traps::init_fan_trap_trigs();
level thread maps/mp/zm_alcatraz_traps::init_acid_trap_trigs();
level thread maps/mp/zm_alcatraz_traps::init_tower_trap_trigs();
level thread maps/mp/zm_alcatraz_travel::init_alcatraz_zipline();
level thread power_on_perk_machines();
level thread afterlife_powerups();
level thread afterlife_intro_door();
level thread afterlife_cell_door_1();
level thread afterlife_cell_door_2();
level thread blundergat_upgrade_station();
level thread sq_main_controller();
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "zclassic" );
maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index );
maps\mp\zombies\_zm_ai_brutus::init();
level thread maps\mp\zombies\_zm_craftables::think_craftables();
maps\mp\zm_prison_achievement::init();
level thread maps\mp\zm_prison_spoon::init();
level thread maps\mp\zm_prison_sq_bg::init();
a_grief_clips = getentarray( "grief_clips", "targetname" );
foreach ( clip in a_grief_clips )
{
clip connectpaths();
clip delete();
}
level thread give_afterlife();
level thread maps\mp\zm_alcatraz_sq::start_alcatraz_sidequest();
onplayerconnect_callback( ::player_quest_vfx );
flag_wait( "initial_blackscreen_passed" );
level notify( "Pack_A_Punch_on" );
flag_wait( "start_zombie_round_logic" );
level thread maps\mp\zm_prison::delete_perk_machine_clip();
level thread maps\mp\zm_alcatraz_traps::init_fan_trap_trigs();
level thread maps\mp\zm_alcatraz_traps::init_acid_trap_trigs();
level thread maps\mp\zm_alcatraz_traps::init_tower_trap_trigs();
level thread maps\mp\zm_alcatraz_travel::init_alcatraz_zipline();
level thread power_on_perk_machines();
level thread afterlife_powerups();
level thread afterlife_intro_door();
level thread afterlife_cell_door_1();
level thread afterlife_cell_door_2();
level thread blundergat_upgrade_station();
}
zm_treasure_chest_init() //checked matches cerberus output
zm_treasure_chest_init()
{
chest1 = getstruct( "start_chest", "script_noteworthy" );
level.chests = [];
level.chests[ level.chests.size ] = chest1;
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" );
chest1 = getstruct( "start_chest", "script_noteworthy" );
level.chests = [];
level.chests[level.chests.size] = chest1;
maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" );
}
give_afterlife() //checked changed to match cerberus output
give_afterlife()
{
onplayerconnect_callback( maps/mp/zombies/_zm_afterlife::init_player );
flag_wait( "initial_players_connected" );
wait 0.5;
n_start_pos = 1;
a_players = getplayers();
foreach ( player in a_players )
{
if ( isDefined( player.afterlife ) && !player.afterlife )
{
player thread fake_kill_player( n_start_pos );
n_start_pos++;
}
}
onplayerconnect_callback( maps\mp\zombies\_zm_afterlife::init_player );
flag_wait( "initial_players_connected" );
wait 0.5;
n_start_pos = 1;
a_players = getplayers();
foreach ( player in a_players )
{
if ( isdefined( player.afterlife ) && !player.afterlife )
{
player thread fake_kill_player( n_start_pos );
n_start_pos++;
}
}
}
fake_kill_player( n_start_pos ) //checked changed to match cerberus output
fake_kill_player( n_start_pos )
{
self afterlife_remove();
self.afterlife = 1;
self thread afterlife_laststand();
self waittill( "player_fake_corpse_created" );
self thread afterlife_tutorial();
e_corpse_location = getstruct( "corpse_starting_point_" + n_start_pos, "targetname" );
trace_start = e_corpse_location.origin;
trace_end = e_corpse_location.origin + vectorScale( ( 0, 0, -1 ), 100 );
corpse_trace = physicstrace( trace_start, trace_end, vectorScale( ( -1, -1, 0 ), 10 ), vectorScale( ( 1, 1, 0 ), 10 ), self.e_afterlife_corpse );
self.e_afterlife_corpse.origin = corpse_trace[ "position" ];
vec_to_target = self.e_afterlife_corpse.origin - self.origin;
vec_to_target = vectorToAngles( vec_to_target );
vec_to_target = ( 0, vec_to_target[ 1 ], 0 );
self setplayerangles( vec_to_target );
self notify( "al_all_setup" );
self afterlife_remove();
self.afterlife = 1;
self thread afterlife_laststand();
self waittill( "player_fake_corpse_created" );
self thread afterlife_tutorial();
e_corpse_location = getstruct( "corpse_starting_point_" + n_start_pos, "targetname" );
trace_start = e_corpse_location.origin;
trace_end = e_corpse_location.origin + vectorscale( ( 0, 0, -1 ), 100.0 );
corpse_trace = physicstrace( trace_start, trace_end, vectorscale( ( -1, -1, 0 ), 10.0 ), vectorscale( ( 1, 1, 0 ), 10.0 ), self.e_afterlife_corpse );
self.e_afterlife_corpse.origin = corpse_trace["position"];
vec_to_target = self.e_afterlife_corpse.origin - self.origin;
vec_to_target = vectortoangles( vec_to_target );
vec_to_target = ( 0, vec_to_target[1], 0 );
self setplayerangles( vec_to_target );
self notify( "al_all_setup" );
}
afterlife_tutorial() //checked matches cerberus output
afterlife_tutorial()
{
self endon( "disconnect" );
level endon( "end_game" );
flag_wait( "start_zombie_round_logic" );
wait 3;
self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO" );
self thread afterlife_tutorial_attack_watch();
waittill_notify_or_timeout( "stop_tutorial", 5 );
self thread destroy_tutorial_message();
wait 1;
if ( isDefined( self.afterlife ) && self.afterlife )
{
self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO_2" );
self thread afterlife_tutorial_jump_watch();
waittill_notify_or_timeout( "stop_tutorial", 5 );
self thread destroy_tutorial_message();
}
self endon( "disconnect" );
level endon( "end_game" );
flag_wait( "start_zombie_round_logic" );
wait 3;
self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO" );
self thread afterlife_tutorial_attack_watch();
waittill_notify_or_timeout( "stop_tutorial", 5 );
self thread destroy_tutorial_message();
wait 1;
if ( isdefined( self.afterlife ) && self.afterlife )
{
self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO_2" );
self thread afterlife_tutorial_jump_watch();
waittill_notify_or_timeout( "stop_tutorial", 5 );
self thread destroy_tutorial_message();
}
}
afterlife_tutorial_attack_watch() //checked matches cerberus output
afterlife_tutorial_attack_watch()
{
self endon( "stop_tutorial" );
self endon( "disconnect" );
while ( isDefined( self.afterlife ) && self.afterlife && !self isfiring() )
{
wait 0.05;
}
wait 0.2;
self notify( "stop_tutorial" );
self endon( "stop_tutorial" );
self endon( "disconnect" );
while ( isdefined( self.afterlife ) && self.afterlife && !self isfiring() )
wait 0.05;
wait 0.2;
self notify( "stop_tutorial" );
}
afterlife_tutorial_jump_watch() //checked matches cerberus output
afterlife_tutorial_jump_watch()
{
self endon( "stop_tutorial" );
self endon( "disconnect" );
while ( isDefined( self.afterlife ) && self.afterlife && !self is_jumping() )
{
wait 0.05;
}
wait 0.2;
self notify( "stop_tutorial" );
self endon( "stop_tutorial" );
self endon( "disconnect" );
while ( isdefined( self.afterlife ) && self.afterlife && !self is_jumping() )
wait 0.05;
wait 0.2;
self notify( "stop_tutorial" );
}
afterlife_powerups() //checked matches cerberus output
afterlife_powerups()
{
level._powerup_grab_check = ::cell_grab_check;
s_powerup_loc = getstruct( "powerup_start", "targetname" );
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
s_powerup_loc = getstruct( "powerup_cell_1", "targetname" );
if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
{
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
}
else
{
spawn_infinite_powerup_drop( s_powerup_loc.origin, "insta_kill" );
}
s_powerup_loc = getstruct( "powerup_cell_2", "targetname" );
if ( isDefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
{
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
}
else
{
spawn_infinite_powerup_drop( s_powerup_loc.origin, "full_ammo" );
}
level._powerup_grab_check = ::cell_grab_check;
s_powerup_loc = getstruct( "powerup_start", "targetname" );
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
s_powerup_loc = getstruct( "powerup_cell_1", "targetname" );
if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
else
spawn_infinite_powerup_drop( s_powerup_loc.origin, "insta_kill" );
s_powerup_loc = getstruct( "powerup_cell_2", "targetname" );
if ( isdefined( level.is_forever_solo_game ) && level.is_forever_solo_game )
spawn_infinite_powerup_drop( s_powerup_loc.origin, "double_points" );
else
spawn_infinite_powerup_drop( s_powerup_loc.origin, "full_ammo" );
}
cell_grab_check( player ) //checked matches cerberus output
cell_grab_check( player )
{
cell_powerup = getstruct( "powerup_start", "targetname" );
if ( self.origin == ( cell_powerup.origin + vectorScale( ( 0, 0, 1 ), 40 ) ) )
{
m_door = getent( "powerup_door", "targetname" );
if ( !isDefined( m_door.opened ) )
{
return 0;
}
}
cell_powerup = getstruct( "powerup_cell_1", "targetname" );
if ( self.origin == ( cell_powerup.origin + vectorScale( ( 0, 0, 1 ), 40 ) ) )
{
m_door = getent( "powerup_cell_door_1", "targetname" );
if ( !isDefined( m_door.opened ) )
{
return 0;
}
}
cell_powerup = getstruct( "powerup_cell_2", "targetname" );
if ( self.origin == ( cell_powerup.origin + vectorScale( ( 0, 0, 1 ), 40 ) ) )
{
m_door = getent( "powerup_cell_door_2", "targetname" );
if ( !isDefined( m_door.opened ) )
{
return 0;
}
}
return 1;
cell_powerup = getstruct( "powerup_start", "targetname" );
if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) )
{
m_door = getent( "powerup_door", "targetname" );
if ( !isdefined( m_door.opened ) )
return false;
}
cell_powerup = getstruct( "powerup_cell_1", "targetname" );
if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) )
{
m_door = getent( "powerup_cell_door_1", "targetname" );
if ( !isdefined( m_door.opened ) )
return false;
}
cell_powerup = getstruct( "powerup_cell_2", "targetname" );
if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) )
{
m_door = getent( "powerup_cell_door_2", "targetname" );
if ( !isdefined( m_door.opened ) )
return false;
}
return true;
}
afterlife_intro_door() //checked matches cerberus output
afterlife_intro_door()
{
m_door = getent( "powerup_door", "targetname" );
level waittill( "intro_powerup_activate" );
wait 1;
array_delete( getentarray( "wires_cell_dblock", "script_noteworthy" ) );
m_door.opened = 1;
m_door movex( 34, 2, 1 );
m_door playsound( "zmb_jail_door" );
level waittill( "intro_powerup_restored" );
s_powerup_loc = getstruct( "powerup_start", "targetname" );
spawn_infinite_powerup_drop( s_powerup_loc.origin );
m_door = getent( "powerup_door", "targetname" );
level waittill( "intro_powerup_activate" );
wait 1;
array_delete( getentarray( "wires_cell_dblock", "script_noteworthy" ) );
m_door.opened = 1;
m_door movex( 34, 2, 1 );
m_door playsound( "zmb_jail_door" );
level waittill( "intro_powerup_restored" );
s_powerup_loc = getstruct( "powerup_start", "targetname" );
spawn_infinite_powerup_drop( s_powerup_loc.origin );
}
afterlife_cell_door_1() //checked matches cerberus output
afterlife_cell_door_1()
{
m_door = getent( "powerup_cell_door_1", "targetname" );
level waittill( "cell_1_powerup_activate" );
wait 1;
array_delete( getentarray( "wires_cell_cafeteria", "script_noteworthy" ) );
m_door.opened = 1;
m_door movex( 36, 2, 1 );
m_door playsound( "zmb_jail_door" );
m_door = getent( "powerup_cell_door_1", "targetname" );
level waittill( "cell_1_powerup_activate" );
wait 1;
array_delete( getentarray( "wires_cell_cafeteria", "script_noteworthy" ) );
m_door.opened = 1;
m_door movex( 36, 2, 1 );
m_door playsound( "zmb_jail_door" );
}
afterlife_cell_door_2() //checked matches cerberus output
afterlife_cell_door_2()
{
m_door = getent( "powerup_cell_door_2", "targetname" );
level waittill( "cell_2_powerup_activate" );
wait 1;
array_delete( getentarray( "wires_cell_michigan", "script_noteworthy" ) );
m_door.opened = 1;
m_door movex( -34, 2, 1 );
m_door playsound( "zmb_jail_door" );
m_door = getent( "powerup_cell_door_2", "targetname" );
level waittill( "cell_2_powerup_activate" );
wait 1;
array_delete( getentarray( "wires_cell_michigan", "script_noteworthy" ) );
m_door.opened = 1;
m_door movex( -34, 2, 1 );
m_door playsound( "zmb_jail_door" );
}
spawn_infinite_powerup_drop( v_origin, str_type ) //checked matches cerberus output
spawn_infinite_powerup_drop( v_origin, str_type )
{
level._powerup_timeout_override = ::powerup_infinite_time;
if ( isDefined( str_type ) )
{
intro_powerup = maps/mp/zombies/_zm_powerups::specific_powerup_drop( str_type, v_origin );
}
else
{
intro_powerup = maps/mp/zombies/_zm_powerups::powerup_drop( v_origin );
}
level._powerup_timeout_override = undefined;
level._powerup_timeout_override = ::powerup_infinite_time;
if ( isdefined( str_type ) )
intro_powerup = maps\mp\zombies\_zm_powerups::specific_powerup_drop( str_type, v_origin );
else
intro_powerup = maps\mp\zombies\_zm_powerups::powerup_drop( v_origin );
level._powerup_timeout_override = undefined;
}
powerup_infinite_time() //checked matches cerberus output
powerup_infinite_time()
{
}
power_on_perk_machines() //checked changed to match cerberus output
power_on_perk_machines()
{
level waittill_any( "unlock_all_perk_machines", "open_sesame" );
a_shockboxes = getentarray( "perk_afterlife_trigger", "script_noteworthy" );
foreach ( e_shockbox in a_shockboxes )
{
e_shockbox notify( "damage" );
wait 1;
}
level waittill_any( "unlock_all_perk_machines", "open_sesame" );
a_shockboxes = getentarray( "perk_afterlife_trigger", "script_noteworthy" );
foreach ( e_shockbox in a_shockboxes )
{
e_shockbox notify( "damage", 1, level );
wait 1;
}
}
sq_main_controller() //checked matches cerberus output
sq_main_controller()
{
precacheshader( "zm_al_wth_zombie" );
onplayerconnect_callback( maps/mp/zm_prison_sq_final::onplayerconnect_sq_final );
level thread maps/mp/zm_prison_sq_final::stage_one();
onplayerconnect_callback( maps/mp/zm_prison_sq_fc::onplayerconnect_sq_fc );
level thread maps/mp/zm_prison_sq_fc::watch_for_trigger_condition();
onplayerconnect_callback( maps/mp/zm_prison_sq_wth::onplayerconnect_sq_wth );
precacheshader( "zm_al_wth_zombie" );
onplayerconnect_callback( maps\mp\zm_prison_sq_final::onplayerconnect_sq_final );
level thread maps\mp\zm_prison_sq_final::stage_one();
onplayerconnect_callback( maps\mp\zm_prison_sq_fc::onplayerconnect_sq_fc );
level thread maps\mp\zm_prison_sq_fc::watch_for_trigger_condition();
onplayerconnect_callback( maps\mp\zm_prison_sq_wth::onplayerconnect_sq_wth );
}
player_quest_vfx() //checked matches cerberus output
player_quest_vfx()
{
flag_wait( "initial_blackscreen_passed" );
wait 1;
if ( !flag( "generator_challenge_completed" ) )
{
exploder( 2000 );
}
}
flag_wait( "initial_blackscreen_passed" );
wait 1;
if ( !flag( "generator_challenge_completed" ) )
exploder( 2000 );
}

View File

@ -1,169 +1,150 @@
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_spawner;
zombie_tracking_init()
{
level.zombie_respawned_health = [];
if ( !isDefined( level.zombie_tracking_dist ) )
{
level.zombie_tracking_dist = 1500;
}
if ( !isDefined( level.zombie_tracking_high ) )
{
level.zombie_tracking_high = 600;
}
if ( !isDefined( level.zombie_tracking_wait ) )
{
level.zombie_tracking_wait = 10;
}
for ( ;; )
{
while ( 1 )
{
zombies = get_round_enemy_array();
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
{
wait level.zombie_tracking_wait;
}
}
else i = 0;
while ( i < zombies.size )
{
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking )
{
zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
}
i++;
}
wait level.zombie_tracking_wait;
}
level.zombie_respawned_health = [];
if ( !isdefined( level.zombie_tracking_dist ) )
level.zombie_tracking_dist = 1500;
if ( !isdefined( level.zombie_tracking_high ) )
level.zombie_tracking_high = 600;
if ( !isdefined( level.zombie_tracking_wait ) )
level.zombie_tracking_wait = 10;
while ( true )
{
zombies = get_round_enemy_array();
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
{
wait( level.zombie_tracking_wait );
continue;
}
else
{
for ( i = 0; i < zombies.size; i++ )
{
if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) )
zombies[i] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
}
}
wait( level.zombie_tracking_wait );
}
}
delete_zombie_noone_looking( how_close, how_high )
{
self endon( "death" );
if ( !isDefined( how_close ) )
{
how_close = 1500;
}
if ( !isDefined( how_high ) )
{
how_close = 600;
}
distance_squared_check = how_close * how_close;
too_far_dist = distance_squared_check * 3;
if ( isDefined( level.zombie_tracking_too_far_dist ) )
{
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
}
self.inview = 0;
self.player_close = 0;
players = get_players();
i = 0;
while ( i < players.size )
{
if ( players[ i ].sessionstate == "spectator" )
{
i++;
continue;
}
else if ( isDefined( level.only_track_targeted_players ) )
{
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] )
{
i++;
continue;
}
}
else
{
can_be_seen = self player_can_see_me( players[ i ] );
if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist )
{
self.inview++;
}
if ( distancesquared( self.origin, players[ i ].origin ) < distance_squared_check && abs( self.origin[ 2 ] - players[ i ].origin[ 2 ] ) < how_high )
{
self.player_close++;
}
}
i++;
}
wait 0,1;
if ( self.inview == 0 && self.player_close == 0 )
{
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" )
{
return;
}
if ( isDefined( self.electrified ) && self.electrified == 1 )
{
return;
}
if ( isDefined( self.in_the_ground ) && self.in_the_ground == 1 )
{
return;
}
zombies = getaiarray( "axis" );
if ( isDefined( self.damagemod ) && self.damagemod == "MOD_UNKNOWN" && self.health < self.maxhealth )
{
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
{
level.zombie_total++;
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health;
}
}
else
{
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth )
{
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
{
level.zombie_total++;
if ( self.health < level.zombie_health )
{
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health;
}
}
}
}
self maps/mp/zombies/_zm_spawner::reset_attack_spot();
self notify( "zombie_delete" );
self delete();
recalc_zombie_array();
}
self endon( "death" );
if ( !isdefined( how_close ) )
how_close = 1500;
if ( !isdefined( how_high ) )
how_close = 600;
distance_squared_check = how_close * how_close;
too_far_dist = distance_squared_check * 3;
if ( isdefined( level.zombie_tracking_too_far_dist ) )
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
self.inview = 0;
self.player_close = 0;
players = get_players();
for ( i = 0; i < players.size; i++ )
{
if ( players[i].sessionstate == "spectator" )
continue;
if ( isdefined( level.only_track_targeted_players ) )
{
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
continue;
}
can_be_seen = self player_can_see_me( players[i] );
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
self.inview++;
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
self.player_close++;
}
wait 0.1;
if ( self.inview == 0 && self.player_close == 0 )
{
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
return;
if ( isdefined( self.electrified ) && self.electrified == 1 )
return;
if ( isdefined( self.in_the_ground ) && self.in_the_ground == 1 )
return;
zombies = getaiarray( "axis" );
if ( ( !isdefined( self.damagemod ) || self.damagemod == "MOD_UNKNOWN" ) && self.health < self.maxhealth )
{
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
{
level.zombie_total++;
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
}
}
else if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth )
{
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
{
level.zombie_total++;
if ( self.health < level.zombie_health )
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
}
}
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
self notify( "zombie_delete" );
self delete();
recalc_zombie_array();
}
}
player_can_see_me( player )
{
playerangles = player getplayerangles();
playerforwardvec = anglesToForward( playerangles );
playerunitforwardvec = vectornormalize( playerforwardvec );
banzaipos = self.origin;
playerpos = player getorigin();
playertobanzaivec = banzaipos - playerpos;
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
if ( forwarddotbanzai >= 1 )
{
anglefromcenter = 0;
}
else if ( forwarddotbanzai <= -1 )
{
anglefromcenter = 180;
}
else
{
anglefromcenter = acos( forwarddotbanzai );
}
playerfov = getDvarFloat( "cg_fov" );
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" );
if ( banzaivsplayerfovbuffer <= 0 )
{
banzaivsplayerfovbuffer = 0,2;
}
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
return playercanseeme;
playerangles = player getplayerangles();
playerforwardvec = anglestoforward( playerangles );
playerunitforwardvec = vectornormalize( playerforwardvec );
banzaipos = self.origin;
playerpos = player getorigin();
playertobanzaivec = banzaipos - playerpos;
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
if ( forwarddotbanzai >= 1 )
anglefromcenter = 0;
else if ( forwarddotbanzai <= -1 )
anglefromcenter = 180;
else
anglefromcenter = acos( forwarddotbanzai );
playerfov = getdvarfloat( "cg_fov" );
banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
if ( banzaivsplayerfovbuffer <= 0 )
banzaivsplayerfovbuffer = 0.2;
playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer );
return playercanseeme;
}

View File

@ -1,18 +1,19 @@
//checked includes changed to match cerberus output
#include maps/mp/zm_alcatraz_classic;
#include maps/mp/zm_alcatraz_grief_cellblock;
#include maps/mp/zm_prison;
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/zombies/_zm_game_module;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_game_module;
#include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\zm_prison;
#include maps\mp\zm_alcatraz_grief_cellblock;
#include maps\mp\zm_alcatraz_classic;
init() //checked matches cerberus output
init()
{
level.custom_vending_precaching = maps/mp/zm_prison::custom_vending_precaching;
add_map_gamemode( "zclassic", maps/mp/zm_prison::zclassic_preinit, undefined, undefined );
add_map_gamemode( "zgrief", maps/mp/zm_alcatraz_grief_cellblock::zgrief_preinit, undefined, undefined );
add_map_location_gamemode( "zclassic", "prison", maps/mp/zm_alcatraz_classic::precache, maps/mp/zm_alcatraz_classic::main );
add_map_location_gamemode( "zgrief", "cellblock", maps/mp/zm_alcatraz_grief_cellblock::precache, maps/mp/zm_alcatraz_grief_cellblock::main );
level.custom_vending_precaching = maps\mp\zm_prison::custom_vending_precaching;
add_map_gamemode( "zclassic", maps\mp\zm_prison::zclassic_preinit, undefined, undefined );
add_map_gamemode( "zgrief", maps\mp\zm_alcatraz_grief_cellblock::zgrief_preinit, undefined, undefined );
add_map_location_gamemode( "zclassic", "prison", maps\mp\zm_alcatraz_classic::precache, maps\mp\zm_alcatraz_classic::main );
add_map_location_gamemode( "zgrief", "cellblock", maps\mp\zm_alcatraz_grief_cellblock::precache, maps\mp\zm_alcatraz_grief_cellblock::main );
}

View File

@ -1,482 +1,498 @@
//checked includes changed to match cerberus output
#include maps/mp/gametypes_zm/zmeat;
#include maps/mp/zm_alcatraz_traps;
#include maps/mp/zombies/_zm_game_module;
#include maps/mp/zombies/_zm_blockers;
#include maps/mp/zombies/_zm_ai_brutus;
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/zombies/_zm_magicbox;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zm_prison;
#include maps/mp/zombies/_zm_race_utility;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_race_utility;
#include maps\mp\zm_prison;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_magicbox;
#include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\zombies\_zm_ai_brutus;
#include maps\mp\zombies\_zm_blockers;
#include maps\mp\zombies\_zm_game_module;
#include maps\mp\zm_alcatraz_traps;
#include maps\mp\gametypes_zm\zmeat;
precache() //checked matches cerberus output
precache()
{
}
zgrief_preinit() //checked matches cerberus output
zgrief_preinit()
{
registerclientfield( "toplayer", "meat_stink", 1, 1, "int" );
level.givecustomloadout = maps/mp/zm_prison::givecustomloadout;
zgrief_init();
registerclientfield( "toplayer", "meat_stink", 1, 1, "int" );
level.givecustomloadout = maps\mp\zm_prison::givecustomloadout;
zgrief_init();
}
zgrief_init() //checked matches cerberus output
zgrief_init()
{
encounter_init();
flag_wait( "start_zombie_round_logic" );
if ( level.round_number < 4 && level.gamedifficulty != 0 )
{
level.zombie_move_speed = 35;
}
encounter_init();
flag_wait( "start_zombie_round_logic" );
if ( level.round_number < 4 && level.gamedifficulty != 0 )
level.zombie_move_speed = 35;
}
encounter_init() //checked matches cerberus output
encounter_init()
{
level._game_module_player_laststand_callback = ::alcatraz_grief_laststand_weapon_save;
level.precachecustomcharacters = ::precache_team_characters;
level.givecustomcharacters = ::give_team_characters;
level.gamemode_post_spawn_logic = ::give_player_shiv;
level._game_module_player_laststand_callback = ::alcatraz_grief_laststand_weapon_save;
level.precachecustomcharacters = ::precache_team_characters;
level.givecustomcharacters = ::give_team_characters;
level.gamemode_post_spawn_logic = ::give_player_shiv;
}
alcatraz_grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration ) //checked changed to match cerberus output
alcatraz_grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime, deathanimduration )
{
if ( self hasperk( "specialty_additionalprimaryweapon" ) )
{
primary_weapons_that_can_be_taken = [];
primaryweapons = self getweaponslistprimaries();
for ( i = 0; i < primaryweapons.size; i++ )
{
if ( maps/mp/zombies/_zm_weapons::is_weapon_included( primaryweapons[ i ] ) || maps/mp/zombies/_zm_weapons::is_weapon_upgraded( primaryweapons[ i ] ) )
{
primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size ] = primaryweapons[ i ];
}
}
if ( primary_weapons_that_can_be_taken.size >= 3 )
{
weapon_to_take = primary_weapons_that_can_be_taken[ primary_weapons_that_can_be_taken.size - 1 ];
self takeweapon( weapon_to_take );
self.weapon_taken_by_losing_specialty_additionalprimaryweapon = weapon_to_take;
}
}
self.grief_savedweapon_weapons = self getweaponslist();
self.grief_savedweapon_weaponsammo_stock = [];
self.grief_savedweapon_weaponsammo_clip = [];
self.grief_savedweapon_currentweapon = self getcurrentweapon();
self.grief_savedweapon_grenades = self get_player_lethal_grenade();
if ( isDefined( self.grief_savedweapon_grenades ) )
{
self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades );
}
self.grief_savedweapon_tactical = self get_player_tactical_grenade();
if ( isDefined( self.grief_savedweapon_tactical ) )
{
self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical );
}
for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ )
{
self.grief_savedweapon_weaponsammo_clip[ i ] = self getweaponammoclip( self.grief_savedweapon_weapons[ i ] );
self.grief_savedweapon_weaponsammo_stock[ i ] = self getweaponammostock( self.grief_savedweapon_weapons[ i ] );
}
if ( isDefined( self.hasriotshield ) && self.hasriotshield )
{
self.grief_hasriotshield = 1;
}
if ( self hasweapon( "claymore_zm" ) )
{
self.grief_savedweapon_claymore = 1;
self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" );
}
if ( self hasperk( "specialty_additionalprimaryweapon" ) )
{
primary_weapons_that_can_be_taken = [];
primaryweapons = self getweaponslistprimaries();
for ( i = 0; i < primaryweapons.size; i++ )
{
if ( maps\mp\zombies\_zm_weapons::is_weapon_included( primaryweapons[i] ) || maps\mp\zombies\_zm_weapons::is_weapon_upgraded( primaryweapons[i] ) )
primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size] = primaryweapons[i];
}
if ( primary_weapons_that_can_be_taken.size >= 3 )
{
weapon_to_take = primary_weapons_that_can_be_taken[primary_weapons_that_can_be_taken.size - 1];
self takeweapon( weapon_to_take );
self.weapon_taken_by_losing_specialty_additionalprimaryweapon = weapon_to_take;
}
}
self.grief_savedweapon_weapons = self getweaponslist();
self.grief_savedweapon_weaponsammo_stock = [];
self.grief_savedweapon_weaponsammo_clip = [];
self.grief_savedweapon_currentweapon = self getcurrentweapon();
self.grief_savedweapon_grenades = self get_player_lethal_grenade();
if ( isdefined( self.grief_savedweapon_grenades ) )
self.grief_savedweapon_grenades_clip = self getweaponammoclip( self.grief_savedweapon_grenades );
self.grief_savedweapon_tactical = self get_player_tactical_grenade();
if ( isdefined( self.grief_savedweapon_tactical ) )
self.grief_savedweapon_tactical_clip = self getweaponammoclip( self.grief_savedweapon_tactical );
for ( i = 0; i < self.grief_savedweapon_weapons.size; i++ )
{
self.grief_savedweapon_weaponsammo_clip[i] = self getweaponammoclip( self.grief_savedweapon_weapons[i] );
self.grief_savedweapon_weaponsammo_stock[i] = self getweaponammostock( self.grief_savedweapon_weapons[i] );
}
if ( isdefined( self.hasriotshield ) && self.hasriotshield )
self.grief_hasriotshield = 1;
if ( self hasweapon( "claymore_zm" ) )
{
self.grief_savedweapon_claymore = 1;
self.grief_savedweapon_claymore_clip = self getweaponammoclip( "claymore_zm" );
}
}
precache_team_characters() //checked matches cerberus output
precache_team_characters()
{
precachemodel( "c_zom_player_grief_guard_fb" );
precachemodel( "c_zom_oleary_shortsleeve_viewhands" );
precachemodel( "c_zom_player_grief_inmate_fb" );
precachemodel( "c_zom_grief_guard_viewhands" );
precachemodel( "c_zom_player_grief_guard_fb" );
precachemodel( "c_zom_oleary_shortsleeve_viewhands" );
precachemodel( "c_zom_player_grief_inmate_fb" );
precachemodel( "c_zom_grief_guard_viewhands" );
}
give_team_characters() //checked matches cerberus output
give_team_characters()
{
self detachall();
self set_player_is_female( 0 );
if ( !isDefined( self.characterindex ) )
{
self.characterindex = 1;
if ( self.team == "axis" )
{
self.characterindex = 0;
}
}
switch( self.characterindex )
{
case 0:
case 2:
self setmodel( "c_zom_player_grief_inmate_fb" );
self.voice = "american";
self.skeleton = "base";
self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" );
self.characterindex = 0;
break;
case 1:
case 3:
self setmodel( "c_zom_player_grief_guard_fb" );
self.voice = "american";
self.skeleton = "base";
self setviewmodel( "c_zom_grief_guard_viewhands" );
self.characterindex = 1;
break;
}
self setmovespeedscale( 1 );
self setsprintduration( 4 );
self setsprintcooldown( 0 );
self detachall();
self set_player_is_female( 0 );
if ( !isdefined( self.characterindex ) )
{
self.characterindex = 1;
if ( self.team == "axis" )
self.characterindex = 0;
}
switch ( self.characterindex )
{
case "2":
case "0":
self setmodel( "c_zom_player_grief_inmate_fb" );
self.voice = "american";
self.skeleton = "base";
self setviewmodel( "c_zom_oleary_shortsleeve_viewhands" );
self.characterindex = 0;
break;
case "3":
case "1":
self setmodel( "c_zom_player_grief_guard_fb" );
self.voice = "american";
self.skeleton = "base";
self setviewmodel( "c_zom_grief_guard_viewhands" );
self.characterindex = 1;
break;
}
self setmovespeedscale( 1 );
self setsprintduration( 4 );
self setsprintcooldown( 0 );
}
give_player_shiv() //checked matches cerberus output
give_player_shiv()
{
self takeweapon( "knife_zm" );
self giveweapon( "knife_zm_alcatraz" );
self takeweapon( "knife_zm" );
self giveweapon( "knife_zm_alcatraz" );
}
grief_treasure_chest_init() //checked matches cerberus output
grief_treasure_chest_init()
{
chest1 = getstruct( "start_chest", "script_noteworthy" );
chest2 = getstruct( "cafe_chest", "script_noteworthy" );
setdvar( "disableLookAtEntityLogic", 1 );
level.chests = [];
level.chests[ level.chests.size ] = chest1;
level.chests[ level.chests.size ] = chest2;
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" );
chest1 = getstruct( "start_chest", "script_noteworthy" );
chest2 = getstruct( "cafe_chest", "script_noteworthy" );
setdvar( "disableLookAtEntityLogic", 1 );
level.chests = [];
level.chests[level.chests.size] = chest1;
level.chests[level.chests.size] = chest2;
maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" );
}
main() //checked partially changed to match cerberus output changed at own discretion see info.md
main()
{
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "cellblock" );
grief_treasure_chest_init();
precacheshader( "zm_al_wth_zombie" );
array_thread( level.zombie_spawners, ::add_spawn_function, ::remove_zombie_hats_for_grief );
maps/mp/zombies/_zm_ai_brutus::precache();
maps/mp/zombies/_zm_ai_brutus::init();
level.enemy_location_override_func = ::enemy_location_override;
level._effect[ "butterflies" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec" );
a_t_door_triggers = getentarray( "zombie_door", "targetname" );
triggers = a_t_door_triggers;
i = 0;
while ( i < triggers.size )
{
if ( isDefined( triggers[ i ].script_flag ) )
{
if ( triggers[ i ].script_flag == "activate_cellblock_citadel" || triggers[ i ].script_flag == "activate_shower_room" || triggers[ i ].script_flag == "activate_cellblock_infirmary" || triggers[ i ].script_flag == "activate_infirmary" )
{
triggers[ i ] delete();
i++;
continue;
}
if ( triggers[ i ].script_flag == "activate_cafeteria" || triggers[ i ].script_flag == "activate_cellblock_east" || triggers[ i ].script_flag == "activate_cellblock_west" || triggers[ i ].script_flag == "activate_cellblock_barber" || triggers[ i ].script_flag == "activate_cellblock_gondola" || triggers[ i ].script_flag == "activate_cellblock_east_west" || triggers[ i ].script_flag == "activate_warden_office" )
{
i++;
continue;
}
if ( isDefined( triggers[ i ].target ) )
{
str_target = triggers[ i ].target;
a_door_and_clip = getentarray( str_target, "targetname" );
foreach ( ent in a_door_and_clip )
{
ent delete();
}
}
triggers[ i ] delete();
}
i++;
}
a_t_doors = getentarray( "zombie_door", "targetname" );
foreach ( t_door in a_t_doors )
{
if ( isDefined( t_door.script_flag ) )
{
if ( t_door.script_flag == "activate_cellblock_east_west" || t_door.script_flag == "activate_cellblock_barber" )
{
t_door maps/mp/zombies/_zm_blockers::door_opened( self.zombie_cost );
}
}
}
zbarriers = getzbarrierarray();
a_str_zones = [];
a_str_zones[ 0 ] = "zone_start";
a_str_zones[ 1 ] = "zone_library";
a_str_zones[ 2 ] = "zone_cafeteria";
a_str_zones[ 3 ] = "zone_cafeteria_end";
a_str_zones[ 4 ] = "zone_warden_office";
a_str_zones[ 5 ] = "zone_cellblock_east";
a_str_zones[ 6 ] = "zone_cellblock_west_warden";
a_str_zones[ 7 ] = "zone_cellblock_west_barber";
a_str_zones[ 8 ] = "zone_cellblock_west";
a_str_zones[ 9 ] = "zone_cellblock_west_gondola";
foreach ( barrier in zbarriers )
{
if ( isDefined( barrier.script_noteworthy ) && barrier.script_noteworthy == "cafe_chest_zbarrier" || isDefined( barrier.script_noteworthy ) && barrier.script_noteworthy == "start_chest_zbarrier" )
{
}
else
{
str_model = barrier.model;
b_delete_barrier = 1;
if ( isdefined( barrier.script_string ) )
{
for ( i = 0; i < a_str_zones.size; i++ )
{
if ( str_model == a_str_zones[ i ] )
{
b_delete_barrier = 0;
break;
}
}
}
else if ( b_delete_barrier == 1 )
{
barrier delete();
}
}
}
t_temp = getent( "tower_trap_activate_trigger", "targetname" );
t_temp delete();
t_temp = getent( "tower_trap_range_trigger", "targetname" );
t_temp delete();
e_model = getent( "trap_control_docks", "targetname" );
e_model delete();
e_brush = getent( "tower_shockbox_door", "targetname" );
e_brush delete();
a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" );
foreach ( trigger in a_t_travel_triggers )
{
trigger delete();
}
a_e_gondola_lights = getentarray( "gondola_state_light", "targetname" );
foreach ( light in a_e_gondola_lights )
{
light delete();
}
a_e_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" );
foreach ( model in a_e_gondola_landing_gates )
{
model delete();
}
a_e_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" );
foreach ( model in a_e_gondola_landing_doors )
{
model delete();
}
a_e_gondola_gates = getentarray( "gondola_gates", "targetname" );
foreach ( model in a_e_gondola_gates )
{
model delete();
}
a_e_gondola_doors = getentarray( "gondola_doors", "targetname" );
foreach ( model in a_e_gondola_doors )
{
model delete();
}
m_gondola = getent( "zipline_gondola", "targetname" );
m_gondola delete();
t_ride_trigger = getent( "gondola_ride_trigger", "targetname" );
t_ride_trigger delete();
a_classic_clips = getentarray( "classic_clips", "targetname" );
foreach ( clip in a_classic_clips )
{
clip connectpaths();
clip delete();
}
a_afterlife_props = getentarray( "afterlife_show", "targetname" );
foreach ( m_prop in a_afterlife_props )
{
m_prop delete();
}
spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal delete();
a_audio = getentarray( "at_headphones", "script_noteworthy" );
foreach ( model in a_audio )
{
model delete();
}
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
m_spoon_pickup delete();
t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" );
t_sq_bg delete();
t_crafting_table = getentarray( "open_craftable_trigger", "targetname" );
foreach ( trigger in t_crafting_table )
{
trigger delete();
}
t_warden_fence = getent( "warden_fence_damage", "targetname" );
t_warden_fence delete();
m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" );
m_plane_about_to_crash delete();
m_plane_craftable = getent( "plane_craftable", "targetname" );
m_plane_craftable delete();
for ( i = 1; i <= 5; i++ )
{
m_key_lock = getent( "masterkey_lock_" + i, "targetname" );
m_key_lock delete();
}
m_shower_door = getent( "shower_key_door", "targetname" );
m_shower_door delete();
m_nixie_door = getent( "nixie_door_left", "targetname" );
m_nixie_door delete();
m_nixie_door = getent( "nixie_door_right", "targetname" );
m_nixie_door delete();
m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" );
m_nixie_brush delete();
for ( i = 1; i <= 3; i++ )
{
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
m_nixie_tube delete();
}
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
t_elevator_door delete();
e_elevator_clip = getent( "elevator_door_playerclip", "targetname" );
e_elevator_clip delete();
e_elevator_bottom_gate = getent( "elevator_bottom_gate_l", "targetname" );
e_elevator_bottom_gate delete();
e_elevator_bottom_gate = getent( "elevator_bottom_gate_r", "targetname" );
e_elevator_bottom_gate delete();
m_docks_puzzle = getent( "cable_puzzle_gate_01", "targetname" );
m_docks_puzzle delete();
m_docks_puzzle = getent( "cable_puzzle_gate_02", "targetname" );
m_docks_puzzle delete();
m_infirmary_case = getent( "infirmary_case_door_left", "targetname" );
m_infirmary_case delete();
m_infirmary_case = getent( "infirmary_case_door_right", "targetname" );
m_infirmary_case delete();
fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" );
fake_plane_part delete();
for ( i = 1; i <= 3; i++ )
{
m_generator = getent( "generator_panel_" + i, "targetname" );
m_generator delete();
}
a_m_generator_core = getentarray( "generator_core", "targetname" );
foreach ( generator in a_m_generator_core )
{
generator delete();
}
e_playerclip = getent( "electric_chair_playerclip", "targetname" );
e_playerclip delete();
for ( i = 1; i <= 4; i++ )
{
t_use = getent( "trigger_electric_chair_" + i, "targetname" );
t_use delete();
m_chair = getent( "electric_chair_" + i, "targetname" );
m_chair delete();
}
a_afterlife_interact = getentarray( "afterlife_interact", "targetname" );
foreach ( model in a_afterlife_interact )
{
model turn_afterlife_interact_on();
wait 0.1;
}
flag_wait( "initial_blackscreen_passed" );
maps/mp/zombies/_zm_game_module::turn_power_on_and_open_doors();
flag_wait( "start_zombie_round_logic" );
level thread maps/mp/zm_alcatraz_traps::init_fan_trap_trigs();
level thread maps/mp/zm_alcatraz_traps::init_acid_trap_trigs();
wait 1;
level notify( "sleight_on" );
wait_network_frame();
level notify( "doubletap_on" );
wait_network_frame();
level notify( "juggernog_on" );
wait_network_frame();
level notify( "electric_cherry_on" );
wait_network_frame();
level notify( "deadshot_on" );
wait_network_frame();
level notify( "divetonuke_on" );
wait_network_frame();
level notify( "additionalprimaryweapon_on" );
wait_network_frame();
level notify( "Pack_A_Punch_on" );
wait_network_frame();
/*
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "cellblock" );
grief_treasure_chest_init();
precacheshader( "zm_al_wth_zombie" );
array_thread( level.zombie_spawners, ::add_spawn_function, ::remove_zombie_hats_for_grief );
maps\mp\zombies\_zm_ai_brutus::precache();
maps\mp\zombies\_zm_ai_brutus::init();
level.enemy_location_override_func = ::enemy_location_override;
level._effect["butterflies"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec" );
a_t_door_triggers = getentarray( "zombie_door", "targetname" );
foreach ( trigger in a_t_door_triggers )
{
if ( isdefined( trigger.script_flag ) )
{
if ( trigger.script_flag == "activate_cellblock_citadel" || trigger.script_flag == "activate_shower_room" || trigger.script_flag == "activate_cellblock_infirmary" || trigger.script_flag == "activate_infirmary" )
{
trigger delete();
continue;
}
if ( trigger.script_flag == "activate_cafeteria" || trigger.script_flag == "activate_cellblock_east" || trigger.script_flag == "activate_cellblock_west" || trigger.script_flag == "activate_cellblock_barber" || trigger.script_flag == "activate_cellblock_gondola" || trigger.script_flag == "activate_cellblock_east_west" || trigger.script_flag == "activate_warden_office" )
{
continue;
continue;
}
if ( isdefined( trigger.target ) )
{
str_target = trigger.target;
a_door_and_clip = getentarray( str_target, "targetname" );
foreach ( ent in a_door_and_clip )
ent delete();
}
trigger delete();
}
}
a_t_doors = getentarray( "zombie_door", "targetname" );
foreach ( t_door in a_t_doors )
{
if ( isdefined( t_door.script_flag ) )
{
if ( t_door.script_flag == "activate_cellblock_east_west" || t_door.script_flag == "activate_cellblock_barber" )
t_door maps\mp\zombies\_zm_blockers::door_opened( self.zombie_cost );
}
}
zbarriers = getzbarrierarray();
a_str_zones = [];
a_str_zones[0] = "zone_start";
a_str_zones[1] = "zone_library";
a_str_zones[2] = "zone_cafeteria";
a_str_zones[3] = "zone_cafeteria_end";
a_str_zones[4] = "zone_warden_office";
a_str_zones[5] = "zone_cellblock_east";
a_str_zones[6] = "zone_cellblock_west_warden";
a_str_zones[7] = "zone_cellblock_west_barber";
a_str_zones[8] = "zone_cellblock_west";
a_str_zones[9] = "zone_cellblock_west_gondola";
foreach ( barrier in zbarriers )
{
if ( isdefined( barrier.script_noteworthy ) )
{
if ( barrier.script_noteworthy == "cafe_chest_zbarrier" || barrier.script_noteworthy == "start_chest_zbarrier" )
continue;
}
b_delete_barrier = 1;
if ( isdefined( barrier.script_string ) )
{
for ( i = 0; i < a_str_zones.size; i++ )
{
if ( barrier.script_string == a_str_zones[i] )
{
b_delete_barrier = 0;
break;
}
}
}
if ( b_delete_barrier == 1 )
barrier delete();
}
t_temp = getent( "tower_trap_activate_trigger", "targetname" );
t_temp delete();
t_temp = getent( "tower_trap_range_trigger", "targetname" );
t_temp delete();
e_model = getent( "trap_control_docks", "targetname" );
e_model delete();
e_brush = getent( "tower_shockbox_door", "targetname" );
e_brush delete();
a_t_travel_triggers = getentarray( "travel_trigger", "script_noteworthy" );
foreach ( trigger in a_t_travel_triggers )
trigger delete();
a_e_gondola_lights = getentarray( "gondola_state_light", "targetname" );
foreach ( light in a_e_gondola_lights )
light delete();
a_e_gondola_landing_gates = getentarray( "gondola_landing_gates", "targetname" );
foreach ( model in a_e_gondola_landing_gates )
model delete();
a_e_gondola_landing_doors = getentarray( "gondola_landing_doors", "targetname" );
foreach ( model in a_e_gondola_landing_doors )
model delete();
a_e_gondola_gates = getentarray( "gondola_gates", "targetname" );
foreach ( model in a_e_gondola_gates )
model delete();
a_e_gondola_doors = getentarray( "gondola_doors", "targetname" );
foreach ( model in a_e_gondola_doors )
model delete();
m_gondola = getent( "zipline_gondola", "targetname" );
m_gondola delete();
t_ride_trigger = getent( "gondola_ride_trigger", "targetname" );
t_ride_trigger delete();
a_classic_clips = getentarray( "classic_clips", "targetname" );
foreach ( clip in a_classic_clips )
{
clip connectpaths();
clip delete();
}
a_afterlife_props = getentarray( "afterlife_show", "targetname" );
foreach ( m_prop in a_afterlife_props )
m_prop delete();
spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal delete();
a_audio = getentarray( "at_headphones", "script_noteworthy" );
foreach ( model in a_audio )
model delete();
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
m_spoon_pickup delete();
t_sq_bg = getent( "sq_bg_reward_pickup", "targetname" );
t_sq_bg delete();
t_crafting_table = getentarray( "open_craftable_trigger", "targetname" );
foreach ( trigger in t_crafting_table )
trigger delete();
t_warden_fence = getent( "warden_fence_damage", "targetname" );
t_warden_fence delete();
m_plane_about_to_crash = getent( "plane_about_to_crash", "targetname" );
m_plane_about_to_crash delete();
m_plane_craftable = getent( "plane_craftable", "targetname" );
m_plane_craftable delete();
for ( i = 1; i <= 5; i++ )
{
m_key_lock = getent( "masterkey_lock_" + i, "targetname" );
m_key_lock delete();
}
m_shower_door = getent( "shower_key_door", "targetname" );
m_shower_door delete();
m_nixie_door = getent( "nixie_door_left", "targetname" );
m_nixie_door delete();
m_nixie_door = getent( "nixie_door_right", "targetname" );
m_nixie_door delete();
m_nixie_brush = getent( "nixie_tube_weaponclip", "targetname" );
m_nixie_brush delete();
for ( i = 1; i <= 3; i++ )
{
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
m_nixie_tube delete();
}
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
t_elevator_door delete();
e_elevator_clip = getent( "elevator_door_playerclip", "targetname" );
e_elevator_clip delete();
e_elevator_bottom_gate = getent( "elevator_bottom_gate_l", "targetname" );
e_elevator_bottom_gate delete();
e_elevator_bottom_gate = getent( "elevator_bottom_gate_r", "targetname" );
e_elevator_bottom_gate delete();
m_docks_puzzle = getent( "cable_puzzle_gate_01", "targetname" );
m_docks_puzzle delete();
m_docks_puzzle = getent( "cable_puzzle_gate_02", "targetname" );
m_docks_puzzle delete();
m_infirmary_case = getent( "infirmary_case_door_left", "targetname" );
m_infirmary_case delete();
m_infirmary_case = getent( "infirmary_case_door_right", "targetname" );
m_infirmary_case delete();
fake_plane_part = getent( "fake_veh_t6_dlc_zombie_part_control", "targetname" );
fake_plane_part delete();
for ( i = 1; i <= 3; i++ )
{
m_generator = getent( "generator_panel_" + i, "targetname" );
m_generator delete();
}
a_m_generator_core = getentarray( "generator_core", "targetname" );
foreach ( generator in a_m_generator_core )
generator delete();
e_playerclip = getent( "electric_chair_playerclip", "targetname" );
e_playerclip delete();
for ( i = 1; i <= 4; i++ )
{
t_use = getent( "trigger_electric_chair_" + i, "targetname" );
t_use delete();
m_chair = getent( "electric_chair_" + i, "targetname" );
m_chair delete();
}
a_afterlife_interact = getentarray( "afterlife_interact", "targetname" );
foreach ( model in a_afterlife_interact )
{
model turn_afterlife_interact_on();
wait 0.1;
}
flag_wait( "initial_blackscreen_passed" );
maps\mp\zombies\_zm_game_module::turn_power_on_and_open_doors();
flag_wait( "start_zombie_round_logic" );
level thread maps\mp\zm_alcatraz_traps::init_fan_trap_trigs();
level thread maps\mp\zm_alcatraz_traps::init_acid_trap_trigs();
wait 1;
level notify( "sleight_on" );
wait_network_frame();
level notify( "doubletap_on" );
wait_network_frame();
level notify( "juggernog_on" );
wait_network_frame();
level notify( "electric_cherry_on" );
wait_network_frame();
level notify( "deadshot_on" );
wait_network_frame();
level notify( "divetonuke_on" );
wait_network_frame();
level notify( "additionalprimaryweapon_on" );
wait_network_frame();
level notify( "Pack_A_Punch_on" );
wait_network_frame();
/#
level thread maps/mp/gametypes_zm/zmeat::spawn_level_meat_manager();
level thread maps\mp\gametypes_zm\zmeat::spawn_level_meat_manager();
#/
*/
}
remove_zombie_hats_for_grief() //checked matches cerberus output
remove_zombie_hats_for_grief()
{
self detach( "c_zom_guard_hat" );
self detach( "c_zom_guard_hat" );
}
enemy_location_override( zombie, enemy ) //checked matches cerberus output
enemy_location_override( zombie, enemy )
{
location = enemy.origin;
if ( is_true( self.reroute ) )
{
if ( isDefined( self.reroute_origin ) )
{
location = self.reroute_origin;
}
}
return location;
location = enemy.origin;
if ( is_true( self.reroute ) )
{
if ( isdefined( self.reroute_origin ) )
location = self.reroute_origin;
}
return location;
}
magicbox_face_spawn() //checked matches cerberus output
magicbox_face_spawn()
{
self endon( "disconnect" );
if ( !is_gametype_active( "zgrief" ) )
{
return;
}
while ( 1 )
{
self waittill( "user_grabbed_weapon" );
if ( randomint( 50000 ) == 115 )
{
self playsoundtoplayer( "zmb_easteregg_face", self );
self.wth_elem = newclienthudelem( self );
self.wth_elem.horzalign = "fullscreen";
self.wth_elem.vertalign = "fullscreen";
self.wth_elem.sort = 1000;
self.wth_elem.foreground = 0;
self.wth_elem.alpha = 1;
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
self.wth_elem.hidewheninmenu = 1;
wait 0.25;
self.wth_elem destroy();
}
wait 0.05;
}
self endon( "disconnect" );
if ( !is_gametype_active( "zgrief" ) )
return;
while ( true )
{
self waittill( "user_grabbed_weapon" );
if ( randomint( 50000 ) == 115 )
{
self playsoundtoplayer( "zmb_easteregg_face", self );
self.wth_elem = newclienthudelem( self );
self.wth_elem.horzalign = "fullscreen";
self.wth_elem.vertalign = "fullscreen";
self.wth_elem.sort = 1000;
self.wth_elem.foreground = 0;
self.wth_elem.alpha = 1.0;
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
self.wth_elem.hidewheninmenu = 1;
wait 0.25;
self.wth_elem destroy();
}
wait 0.05;
}
}
#using_animtree("fxanim_props");
turn_afterlife_interact_on()
{
if ( self.script_string == "cell_1_powerup_activate" || self.script_string == "intro_powerup_activate" || self.script_string == "cell_2_powerup_activate" || self.script_string == "wires_shower_door" )
{
return;
}
if ( self.script_string == "electric_cherry_on" || self.script_string == "sleight_on" || self.script_string == "wires_admin_door" )
{
if ( !isDefined( level.shockbox_anim ) )
{
level.shockbox_anim[ "on" ] = %fxanim_zom_al_shock_box_on_anim;
level.shockbox_anim[ "off" ] = %fxanim_zom_al_shock_box_off_anim;
}
if ( issubstr( self.model, "p6_zm_al_shock_box" ) )
{
self useanimtree( -1 );
self setmodel( "p6_zm_al_shock_box_on" );
self setanim( level.shockbox_anim[ "on" ] );
}
}
else
{
self delete();
}
}
if ( self.script_string == "cell_1_powerup_activate" || self.script_string == "intro_powerup_activate" || self.script_string == "cell_2_powerup_activate" || self.script_string == "wires_shower_door" )
return;
if ( self.script_string == "electric_cherry_on" || self.script_string == "sleight_on" || self.script_string == "wires_admin_door" )
{
if ( !isdefined( level.shockbox_anim ) )
{
level.shockbox_anim["on"] = %fxanim_zom_al_shock_box_on_anim;
level.shockbox_anim["off"] = %fxanim_zom_al_shock_box_off_anim;
}
if ( issubstr( self.model, "p6_zm_al_shock_box" ) )
{
self useanimtree( -1 );
self setmodel( "p6_zm_al_shock_box_on" );
self setanim( level.shockbox_anim["on"] );
}
}
else
self delete();
}

File diff suppressed because it is too large Load Diff

View File

@ -1,28 +1,30 @@
//checked includes match cerberus output
#include maps/mp/zombies/_zm_magicbox;
#include maps/mp/zombies/_zm_game_module;
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\zombies\_zm_game_module;
#include maps\mp\zombies\_zm_magicbox;
precache() //checked matches cerberus output
precache()
{
}
main() //checked matches cerberus output
main()
{
maps/mp/gametypes_zm/_zm_gametype::setup_standard_objects( "working" );
maps/mp/zombies/_zm_game_module::set_current_game_module( level.game_module_standard_index );
flag_wait( "initial_blackscreen_passed" );
flag_set( "power_on" );
zm_treasure_chest_init();
maps\mp\gametypes_zm\_zm_gametype::setup_standard_objects( "working" );
maps\mp\zombies\_zm_game_module::set_current_game_module( level.game_module_standard_index );
flag_wait( "initial_blackscreen_passed" );
flag_set( "power_on" );
zm_treasure_chest_init();
}
zm_treasure_chest_init() //checked matches cerberus output
zm_treasure_chest_init()
{
chest1 = getstruct( "start_chest", "script_noteworthy" );
level.chests = [];
level.chests[ level.chests.size ] = chest1;
maps/mp/zombies/_zm_magicbox::treasure_chest_init( "start_chest" );
chest1 = getstruct( "start_chest", "script_noteworthy" );
level.chests = [];
level.chests[level.chests.size] = chest1;
maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" );
}

File diff suppressed because it is too large Load Diff

View File

@ -1,209 +1,211 @@
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/gametypes_zm/_globallogic_score;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\gametypes_zm\_globallogic_score;
#include maps\mp\zombies\_zm_zonemgr;
init()
{
level thread achievement_full_lockdown();
level thread achievement_pop_goes_the_weasel();
level thread achievement_trapped_in_time();
onplayerconnect_callback( ::onplayerconnect );
level.achievement_sound_func = ::achievement_sound_func;
level thread achievement_full_lockdown();
level thread achievement_pop_goes_the_weasel();
level thread achievement_trapped_in_time();
onplayerconnect_callback( ::onplayerconnect );
level.achievement_sound_func = ::achievement_sound_func;
}
onplayerconnect()
{
self thread achievement_no_one_escapes_alive();
self thread achievement_feed_the_beast();
self thread achievement_making_the_rounds();
self thread achievement_acid_drip();
self thread achievement_a_burst_of_flavor();
self thread achievement_paranormal_progress();
self thread achievement_gg_bridge();
self thread achievement_no_one_escapes_alive();
self thread achievement_feed_the_beast();
self thread achievement_making_the_rounds();
self thread achievement_acid_drip();
self thread achievement_a_burst_of_flavor();
self thread achievement_paranormal_progress();
self thread achievement_gg_bridge();
}
achievement_sound_func( achievement_name_lower )
{
self thread do_player_general_vox( "general", "achievement" );
self thread do_player_general_vox( "general", "achievement" );
}
init_player_achievement_stats()
{
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_prison_sidequest", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_feed_the_beast", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_making_the_rounds", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_acid_drip", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_full_lockdown", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_a_burst_of_flavor", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_paranormal_progress", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_gg_bridge", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_trapped_in_time", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc2_pop_goes_the_weasel", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_prison_sidequest", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_feed_the_beast", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_making_the_rounds", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_acid_drip", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_full_lockdown", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_a_burst_of_flavor", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_paranormal_progress", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_gg_bridge", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_trapped_in_time", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc2_pop_goes_the_weasel", 0 );
}
achievement_full_lockdown()
{
level endon( "end_game" );
level.lockdown_track[ "magic_box" ] = 0;
level.lockdown_track[ "speedcola_perk" ] = 0;
level.lockdown_track[ "electric_cherry_perk" ] = 0;
level.lockdown_track[ "jugg_perk" ] = 0;
level.lockdown_track[ "deadshot_perk" ] = 0;
level.lockdown_track[ "tap_perk" ] = 0;
level.lockdown_track[ "plane_ramp" ] = 0;
level.lockdown_track[ "craft_shield" ] = 0;
level.lockdown_track[ "craft_kit" ] = 0;
b_unlock = 0;
while ( b_unlock == 0 )
{
level waittill( "brutus_locked_object" );
b_unlock = 1;
_a92 = level.lockdown_track;
_k92 = getFirstArrayKey( _a92 );
while ( isDefined( _k92 ) )
{
b_check = _a92[ _k92 ];
if ( b_check == 0 )
{
b_unlock = 0;
break;
}
else
{
_k92 = getNextArrayKey( _a92, _k92 );
}
}
}
level giveachievement_wrapper( "ZM_DLC2_FULL_LOCKDOWN", 1 );
level endon( "end_game" );
level.lockdown_track["magic_box"] = 0;
level.lockdown_track["speedcola_perk"] = 0;
level.lockdown_track["electric_cherry_perk"] = 0;
level.lockdown_track["jugg_perk"] = 0;
level.lockdown_track["deadshot_perk"] = 0;
level.lockdown_track["tap_perk"] = 0;
level.lockdown_track["plane_ramp"] = 0;
level.lockdown_track["craft_shield"] = 0;
level.lockdown_track["craft_kit"] = 0;
b_unlock = 0;
while ( b_unlock == 0 )
{
level waittill( "brutus_locked_object" );
b_unlock = 1;
foreach ( b_check in level.lockdown_track )
{
if ( b_check == 0 )
{
b_unlock = 0;
break;
}
}
}
level giveachievement_wrapper( "ZM_DLC2_FULL_LOCKDOWN", 1 );
}
achievement_trapped_in_time()
{
level endon( "end_game" );
level.trapped_track[ "acid" ] = 0;
level.trapped_track[ "fan" ] = 0;
level.trapped_track[ "tower" ] = 0;
level.trapped_track[ "tower_upgrade" ] = 0;
b_unlock = 0;
while ( b_unlock == 0 )
{
level waittill_either( "trap_activated", "tower_trap_upgraded" );
if ( level.round_number >= 10 )
{
return;
}
b_unlock = 1;
_a131 = level.trapped_track;
_k131 = getFirstArrayKey( _a131 );
while ( isDefined( _k131 ) )
{
b_check = _a131[ _k131 ];
if ( b_check == 0 )
{
b_unlock = 0;
break;
}
else
{
_k131 = getNextArrayKey( _a131, _k131 );
}
}
}
level giveachievement_wrapper( "ZM_DLC2_TRAPPED_IN_TIME", 1 );
level endon( "end_game" );
level.trapped_track["acid"] = 0;
level.trapped_track["fan"] = 0;
level.trapped_track["tower"] = 0;
level.trapped_track["tower_upgrade"] = 0;
b_unlock = 0;
while ( b_unlock == 0 )
{
level waittill_either( "trap_activated", "tower_trap_upgraded" );
if ( level.round_number >= 10 )
return;
b_unlock = 1;
foreach ( b_check in level.trapped_track )
{
if ( b_check == 0 )
{
b_unlock = 0;
break;
}
}
}
level giveachievement_wrapper( "ZM_DLC2_TRAPPED_IN_TIME", 1 );
}
achievement_pop_goes_the_weasel()
{
level endon( "end_game" );
level waittill( "pop_goes_the_weasel_achieved" );
level giveachievement_wrapper( "ZM_DLC2_POP_GOES_THE_WEASEL", 1 );
level endon( "end_game" );
level waittill( "pop_goes_the_weasel_achieved" );
level giveachievement_wrapper( "ZM_DLC2_POP_GOES_THE_WEASEL", 1 );
}
achievement_no_one_escapes_alive()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_at_bridge" );
self giveachievement_wrapper( "ZM_DLC2_PRISON_SIDEQUEST" );
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_at_bridge" );
self giveachievement_wrapper( "ZM_DLC2_PRISON_SIDEQUEST" );
}
achievement_feed_the_beast()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_obtained_tomahawk" );
self giveachievement_wrapper( "ZM_DLC2_FEED_THE_BEAST" );
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_obtained_tomahawk" );
self giveachievement_wrapper( "ZM_DLC2_FEED_THE_BEAST" );
}
achievement_making_the_rounds()
{
level endon( "end_game" );
self endon( "disconnect" );
n_completed_trips = 0;
while ( n_completed_trips < 3 )
{
self waittill( "player_completed_cycle" );
n_completed_trips++;
}
self giveachievement_wrapper( "ZM_DLC2_MAKING_THE_ROUNDS" );
level endon( "end_game" );
self endon( "disconnect" );
for ( n_completed_trips = 0; n_completed_trips < 3; n_completed_trips++ )
self waittill( "player_completed_cycle" );
self giveachievement_wrapper( "ZM_DLC2_MAKING_THE_ROUNDS" );
}
achievement_acid_drip()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_obtained_acidgat" );
self giveachievement_wrapper( "ZM_DLC2_ACID_DRIP" );
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_obtained_acidgat" );
self giveachievement_wrapper( "ZM_DLC2_ACID_DRIP" );
}
achievement_a_burst_of_flavor()
{
level endon( "end_game" );
self endon( "disconnect" );
while ( 1 )
{
self waittill( "electric_cherry_start" );
self.cherry_kills = 0;
self waittill( "electric_cherry_end" );
if ( self.cherry_kills >= 10 )
{
break;
}
else
{
}
}
self giveachievement_wrapper( "ZM_DLC2_A_BURST_OF_FLAVOR" );
level endon( "end_game" );
self endon( "disconnect" );
while ( true )
{
self waittill( "electric_cherry_start" );
self.cherry_kills = 0;
self waittill( "electric_cherry_end" );
if ( self.cherry_kills >= 10 )
break;
}
self giveachievement_wrapper( "ZM_DLC2_A_BURST_OF_FLAVOR" );
}
achievement_paranormal_progress()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_opened_afterlife_door" );
self giveachievement_wrapper( "ZM_DLC2_PARANORMAL_PROGRESS" );
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "player_opened_afterlife_door" );
self giveachievement_wrapper( "ZM_DLC2_PARANORMAL_PROGRESS" );
}
achievement_gg_bridge()
{
level endon( "end_game" );
self endon( "disconnect" );
while ( 1 )
{
level waittill( "end_of_round" );
if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) && level.round_number >= 15 )
{
level waittill( "end_of_round" );
if ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
{
break;
}
}
else
{
}
}
self giveachievement_wrapper( "ZM_DLC2_GG_BRIDGE" );
level endon( "end_game" );
self endon( "disconnect" );
while ( true )
{
level waittill( "end_of_round" );
if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) && level.round_number >= 15 )
{
level waittill( "end_of_round" );
if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
break;
}
}
self giveachievement_wrapper( "ZM_DLC2_GG_BRIDGE" );
}

View File

@ -1,148 +1,178 @@
#include maps/mp/zombies/_zm_afterlife;
#include maps/mp/zm_prison;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zm_prison;
#include maps\mp\zombies\_zm_afterlife;
main_start()
{
level thread spawned_collision_ffotd();
t_killbrush_1 = spawn( "trigger_box", ( 142, 9292, 1504 ), 0, 700, 160, 128 );
t_killbrush_1.script_noteworthy = "kill_brush";
t_killbrush_2 = spawn( "trigger_box", ( 1822, 9316, 1358 ), 0, 120, 100, 30 );
t_killbrush_2.script_noteworthy = "kill_brush";
t_killbrush_3 = spawn( "trigger_box", ( -42, 9348, 1392 ), 0, 200, 100, 128 );
t_killbrush_3.script_noteworthy = "kill_brush";
level thread spawned_collision_ffotd();
t_killbrush_1 = spawn( "trigger_box", ( 142, 9292, 1504 ), 0, 700, 160, 128 );
t_killbrush_1.script_noteworthy = "kill_brush";
t_killbrush_2 = spawn( "trigger_box", ( 1822, 9316, 1358 ), 0, 120, 100, 30 );
t_killbrush_2.script_noteworthy = "kill_brush";
t_killbrush_3 = spawn( "trigger_box", ( -50, 9318, 1392 ), 0, 200, 110, 128 );
t_killbrush_3.script_noteworthy = "kill_brush";
t_killbrush_4 = spawn( "trigger_box", ( -212, 7876, 74 ), 0, 220, 280, 30 );
t_killbrush_4.angles = vectorscale( ( 0, 1, 0 ), 315.0 );
t_killbrush_4.script_noteworthy = "kill_brush";
t_killbrush_5 = spawn( "trigger_box", ( 896, 6291, 84 ), 0, 798, 498, 332 );
t_killbrush_5.angles = vectorscale( ( 0, 1, 0 ), 10.0 );
t_killbrush_5.script_noteworthy = "kill_brush";
t_killbrush_6 = spawn( "trigger_box", ( 1268, 6870, 232 ), 0, 1024, 512, 512 );
t_killbrush_6.angles = vectorscale( ( 0, 1, 0 ), 10.0 );
t_killbrush_6.script_noteworthy = "kill_brush";
t_killbrush_7 = spawn( "trigger_box", ( 896, 6009, 304 ), 0, 320, 192, 128 );
t_killbrush_7.angles = ( 0, 0, 0 );
t_killbrush_7.script_noteworthy = "kill_brush";
level.gondola_docks_landing_killbrush = t_killbrush_7;
t_killbrush_8 = spawn( "trigger_box", ( 934, 9148, 1346 ), 0, 39.7, 55.6, 39.7 );
t_killbrush_8.angles = vectorscale( ( 1, 0, 0 ), 325.0 );
t_killbrush_8.script_noteworthy = "kill_brush";
t_killbrush_9 = spawn( "trigger_box", ( -1338, 5478, 114 ), 0, 200, 50, 100 );
t_killbrush_9.angles = vectorscale( ( 0, 1, 0 ), 280.0 );
t_killbrush_9.script_noteworthy = "kill_brush";
}
main_end()
{
level.equipment_dead_zone_pos = [];
level.equipment_dead_zone_rad2 = [];
level.equipment_dead_zone_pos[ 0 ] = ( 408, 10016, 1128 );
level.equipment_dead_zone_rad2[ 0 ] = 65536;
level.equipment_dead_zone_pos[ 1 ] = ( -280, 7872, 176 );
level.equipment_dead_zone_rad2[ 1 ] = 10000;
level.equipment_dead_zone_pos[ 2 ] = ( -104, 8056, 280 );
level.equipment_dead_zone_rad2[ 2 ] = 10000;
level.equipment_dead_zone_pos[ 3 ] = ( -86, 7712, 114 );
level.equipment_dead_zone_rad2[ 3 ] = 10000;
level.equipment_dead_zone_pos[ 4 ] = ( 447, 5963, 264 );
level.equipment_dead_zone_rad2[ 4 ] = 10000;
level.equipment_dead_zone_pos[ 5 ] = ( 231, 5913, 200 );
level.equipment_dead_zone_rad2[ 5 ] = 10000;
level.equipment_dead_zone_pos[ 6 ] = ( 15, 5877, 136 );
level.equipment_dead_zone_rad2[ 6 ] = 10000;
level.equipment_dead_zone_pos[ 7 ] = ( -335, 5795, 14 );
level.equipment_dead_zone_rad2[ 7 ] = 22500;
level.equipment_dead_zone_pos[ 8 ] = ( -621, 5737, -48 );
level.equipment_dead_zone_rad2[ 8 ] = 10000;
level.equipment_dead_zone_pos[ 9 ] = ( 402, 7058, 147 );
level.equipment_dead_zone_rad2[ 9 ] = 10000;
level.equipment_dead_zone_pos[ 10 ] = ( 2151, 10180, 1204 );
level.equipment_dead_zone_rad2[ 10 ] = 625;
level.equipment_dead_zone_pos[ 11 ] = ( 2144, 9486, 1364 );
level.equipment_dead_zone_rad2[ 11 ] = 2500;
level.equipment_safe_to_drop = ::equipment_safe_to_drop_ffotd;
waittillframeend;
level.afterlife_give_loadout = ::afterlife_give_loadout_override;
level.equipment_dead_zone_pos = [];
level.equipment_dead_zone_rad2 = [];
level.equipment_safe_to_drop = ::equipment_safe_to_drop_ffotd;
waittillframeend;
level.afterlife_give_loadout = ::afterlife_give_loadout_override;
}
equipment_safe_to_drop_ffotd( weapon )
{
i = 0;
while ( i < level.equipment_dead_zone_pos.size )
{
if ( distancesquared( level.equipment_dead_zone_pos[ i ], weapon.origin ) < level.equipment_dead_zone_rad2[ i ] )
{
return 0;
}
i++;
}
return self maps/mp/zm_prison::equipment_safe_to_drop( weapon );
for ( i = 0; i < level.equipment_dead_zone_pos.size; i++ )
{
if ( distancesquared( level.equipment_dead_zone_pos[i], weapon.origin ) < level.equipment_dead_zone_rad2[i] )
return 0;
}
return self maps\mp\zm_prison::equipment_safe_to_drop( weapon );
}
spawned_collision_ffotd()
{
precachemodel( "collision_ai_64x64x10" );
precachemodel( "collision_wall_256x256x10_standard" );
precachemodel( "collision_wall_128x128x10_standard" );
precachemodel( "collision_wall_512x512x10_standard" );
precachemodel( "collision_geo_256x256x256_standard" );
precachemodel( "collision_geo_64x64x256_standard" );
precachemodel( "collision_geo_128x128x128_standard" );
flag_wait( "start_zombie_round_logic" );
if ( !is_true( level.optimise_for_splitscreen ) )
{
collision1 = spawn( "script_model", ( 1999, 9643, 1472 ) );
collision1 setmodel( "collision_ai_64x64x10" );
collision1.angles = ( 0, 270, -90 );
collision1 ghost();
collision2 = spawn( "script_model", ( -437, 6260, 121 ) );
collision2 setmodel( "collision_wall_256x256x10_standard" );
collision2.angles = vectorScale( ( 0, 0, 0 ), 11,8 );
collision2 ghost();
collision3 = spawn( "script_model", ( 1887,98, 9323, 1489,14 ) );
collision3 setmodel( "collision_wall_128x128x10_standard" );
collision3.angles = ( 0, 270, 38,6 );
collision3 ghost();
collision4 = spawn( "script_model", ( -261, 8512,02, 1153,14 ) );
collision4 setmodel( "collision_geo_256x256x256_standard" );
collision4.angles = vectorScale( ( 0, 0, 0 ), 180 );
collision4 ghost();
collision5a = spawn( "script_model", ( 792, 8302, 1620 ) );
collision5a setmodel( "collision_geo_64x64x256_standard" );
collision5a.angles = ( 0, 0, 0 );
collision5a ghost();
collision5b = spawn( "script_model", ( 1010, 8302, 1620 ) );
collision5b setmodel( "collision_geo_64x64x256_standard" );
collision5b.angles = ( 0, 0, 0 );
collision5b ghost();
collision6 = spawn( "script_model", ( 554, 8026, 698 ) );
collision6 setmodel( "collision_wall_128x128x10_standard" );
collision6.angles = vectorScale( ( 0, 0, 0 ), 22,2 );
collision6 ghost();
collision7 = spawn( "script_model", ( 1890, 9911, 1184 ) );
collision7 setmodel( "collision_geo_64x64x256_standard" );
collision7.angles = ( 0, 0, 0 );
collision7 ghost();
collision8 = spawn( "script_model", ( 258, 9706, 1152 ) );
collision8 setmodel( "collision_geo_64x64x256_standard" );
collision8.angles = ( 0, 0, 0 );
collision8 ghost();
collision9 = spawn( "script_model", ( 596, 8944, 1160 ) );
collision9 setmodel( "collision_ai_64x64x10" );
collision9.angles = ( 270, 180, -180 );
collision9 ghost();
collision10 = spawn( "script_model", ( -756,5, 5730, -113,75 ) );
collision10 setmodel( "collision_geo_128x128x128_standard" );
collision10.angles = ( 354,9, 11, 0 );
collision10 ghost();
collision11 = spawn( "script_model", ( -4, 8314, 808 ) );
collision11 setmodel( "collision_wall_128x128x10_standard" );
collision11.angles = vectorScale( ( 0, 0, 0 ), 292 );
collision11 ghost();
collision12 = spawn( "script_model", ( 1416, 10708, 1440 ) );
collision12 setmodel( "collision_wall_512x512x10_standard" );
collision12.angles = ( 0, 0, 0 );
collision12 ghost();
}
precachemodel( "collision_ai_64x64x10" );
precachemodel( "collision_wall_256x256x10_standard" );
precachemodel( "collision_wall_128x128x10_standard" );
precachemodel( "collision_wall_512x512x10_standard" );
precachemodel( "collision_geo_256x256x256_standard" );
precachemodel( "collision_geo_64x64x256_standard" );
precachemodel( "collision_geo_128x128x128_standard" );
precachemodel( "collision_geo_128x128x10_standard" );
precachemodel( "collision_geo_64x64x64_standard" );
precachemodel( "collision_geo_32x32x128_standard" );
precachemodel( "p6_zm_al_surgery_cart" );
precachemodel( "p6_zm_al_laundry_bag" );
precachemodel( "ch_furniture_teachers_chair1" );
flag_wait( "start_zombie_round_logic" );
if ( !is_true( level.optimise_for_splitscreen ) )
{
collision1 = spawn( "script_model", ( 1999, 9643, 1472 ) );
collision1 setmodel( "collision_ai_64x64x10" );
collision1.angles = ( 0, 270, -90 );
collision1 ghost();
collision2 = spawn( "script_model", ( -437, 6260, 121 ) );
collision2 setmodel( "collision_wall_256x256x10_standard" );
collision2.angles = vectorscale( ( 0, 1, 0 ), 11.8 );
collision2 ghost();
collision3 = spawn( "script_model", ( 1887.98, 9323, 1489.14 ) );
collision3 setmodel( "collision_wall_128x128x10_standard" );
collision3.angles = ( 0, 270, 38.6 );
collision3 ghost();
collision4 = spawn( "script_model", ( -261, 8512.02, 1153.14 ) );
collision4 setmodel( "collision_geo_256x256x256_standard" );
collision4.angles = vectorscale( ( 0, 1, 0 ), 180.0 );
collision4 ghost();
collision5a = spawn( "script_model", ( 792, 8302, 1620 ) );
collision5a setmodel( "collision_geo_64x64x256_standard" );
collision5a.angles = ( 0, 0, 0 );
collision5a ghost();
collision5b = spawn( "script_model", ( 1010, 8302, 1620 ) );
collision5b setmodel( "collision_geo_64x64x256_standard" );
collision5b.angles = ( 0, 0, 0 );
collision5b ghost();
collision6 = spawn( "script_model", ( 554, 8026, 698 ) );
collision6 setmodel( "collision_wall_128x128x10_standard" );
collision6.angles = vectorscale( ( 0, 1, 0 ), 22.2 );
collision6 ghost();
collision7 = spawn( "script_model", ( 1890, 9911, 1184 ) );
collision7 setmodel( "collision_geo_64x64x256_standard" );
collision7.angles = ( 0, 0, 0 );
collision7 ghost();
collision8 = spawn( "script_model", ( 258, 9706, 1152 ) );
collision8 setmodel( "collision_geo_64x64x256_standard" );
collision8.angles = ( 0, 0, 0 );
collision8 ghost();
collision9 = spawn( "script_model", ( 596, 8944, 1160 ) );
collision9 setmodel( "collision_ai_64x64x10" );
collision9.angles = ( 270, 180, -180 );
collision9 ghost();
collision10 = spawn( "script_model", ( -756.5, 5730, -113.75 ) );
collision10 setmodel( "collision_geo_128x128x128_standard" );
collision10.angles = ( 354.9, 11, 0 );
collision10 ghost();
collision11 = spawn( "script_model", ( -4, 8314, 808 ) );
collision11 setmodel( "collision_wall_128x128x10_standard" );
collision11.angles = vectorscale( ( 0, 1, 0 ), 292.0 );
collision11 ghost();
collision12 = spawn( "script_model", ( 1416, 10708, 1440 ) );
collision12 setmodel( "collision_wall_512x512x10_standard" );
collision12.angles = ( 0, 0, 0 );
collision12 ghost();
collision13 = spawn( "script_model", ( 1788, 9758, 1472 ) );
collision13 setmodel( "collision_geo_64x64x64_standard" );
collision13.angles = ( 0, 0, 0 );
collision13 ghost();
collision13_prop1 = spawn( "script_model", ( 1801.27, 9753.57, 1440 ) );
collision13_prop1 setmodel( "p6_zm_al_surgery_cart" );
collision13_prop1.angles = vectorscale( ( 0, 1, 0 ), 14.8 );
collision13_prop2 = spawn( "script_model", ( 1802.64, 9754.85, 1476 ) );
collision13_prop2 setmodel( "p6_zm_al_laundry_bag" );
collision13_prop2.angles = vectorscale( ( 0, 1, 0 ), 314.351 );
collision14 = spawn( "script_model", ( -820, 8668, 1400 ) );
collision14 setmodel( "collision_geo_32x32x128_standard" );
collision14.angles = ( 0, 0, 0 );
collision14 ghost();
collision14_prop1 = spawn( "script_model", ( -820.273, 8668.71, 1336 ) );
collision14_prop1 setmodel( "ch_furniture_teachers_chair1" );
collision14_prop1.angles = vectorscale( ( 0, 1, 0 ), 80.0 );
collision15 = spawn( "script_model", ( 2557, 9723.5, 1520 ) );
collision15 setmodel( "collision_geo_128x128x10_standard" );
collision15.angles = vectorscale( ( 0, 0, 1 ), 34.2 );
collision15 ghost();
collision16 = spawn( "script_model", ( -1909.5, -3614, -8583 ) );
collision16 setmodel( "collision_geo_256x256x256_standard" );
collision16.angles = vectorscale( ( 1, 0, 0 ), 34.9 );
collision16 ghost();
collision17 = spawn( "script_model", ( -1909.5, -3554, -8583 ) );
collision17 setmodel( "collision_geo_256x256x256_standard" );
collision17.angles = vectorscale( ( 1, 0, 0 ), 34.9 );
collision17 ghost();
}
}
afterlife_give_loadout_override()
{
self thread afterlife_leave_freeze();
self maps/mp/zombies/_zm_afterlife::afterlife_give_loadout();
self thread afterlife_leave_freeze();
self maps\mp\zombies\_zm_afterlife::afterlife_give_loadout();
}
afterlife_leave_freeze()
{
self endon( "disconnect" );
self freezecontrols( 1 );
wait 0,5;
if ( !is_true( self.hostmigrationcontrolsfrozen ) )
{
self freezecontrols( 0 );
}
self endon( "disconnect" );
level endon( "end_game" );
self freezecontrols( 1 );
wait 0.5;
if ( !is_true( self.hostmigrationcontrolsfrozen ) )
self freezecontrols( 0 );
}

View File

@ -1,144 +1,147 @@
#include maps/mp/_utility;
#using_animtree( "fxanim_props" );
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\createfx\zm_prison_fx;
main()
{
precache_createfx_fx();
precache_scripted_fx();
precache_fxanim_props();
maps/mp/createfx/zm_prison_fx::main();
precache_createfx_fx();
precache_scripted_fx();
precache_fxanim_props();
maps\mp\createfx\zm_prison_fx::main();
}
precache_scripted_fx()
{
level._effect[ "elevator_fall" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_fall" );
level._effect[ "key_glint" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_key_glint" );
level._effect[ "quest_item_glow" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_quest_item_glow" );
level._effect[ "eye_glow" ] = loadfx( "maps/zombie_alcatraz/fx_zombie_eye_single_red" );
level._effect[ "fx_alcatraz_unlock_door" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_unlock_door" );
level._effect[ "fx_alcatraz_elec_chair" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" );
level._effect[ "fx_alcatraz_lightning_finale" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_finale" );
level._effect[ "fx_alcatraz_panel_on_2" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on_2" );
level._effect[ "fx_alcatraz_panel_off_2" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_off_2" );
level._effect[ "fx_alcatraz_lightning_wire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_wire" );
level._effect[ "fx_alcatraz_afterlife_zmb_tport" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_zmb_tport" );
level._effect[ "fx_alcatraz_panel_ol" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_ol" );
level._effect[ "fx_alcatraz_plane_apear" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_apear" );
level._effect[ "switch_sparks" ] = loadfx( "env/electrical/fx_elec_wire_spark_burst" );
level._effect[ "zapper_light_ready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" );
level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" );
level._effect[ "fx_alcatraz_plane_trail" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail" );
level._effect[ "fx_alcatraz_plane_trail_fast" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail_fast" );
level._effect[ "fx_alcatraz_flight_lightning" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_lightning" );
level._effect[ "fx_alcatraz_plane_fire_trail" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_fire_trail" );
level._effect[ "alcatraz_dryer_light_green" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_green" );
level._effect[ "alcatraz_dryer_light_red" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_red" );
level._effect[ "alcatraz_dryer_light_yellow" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_yellow" );
level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
level._effect[ "elec_md" ] = loadfx( "electrical/fx_elec_player_md" );
level._effect[ "elec_sm" ] = loadfx( "electrical/fx_elec_player_sm" );
level._effect[ "elec_torso" ] = loadfx( "electrical/fx_elec_player_torso" );
level._effect[ "acid_spray" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_spray" );
level._effect[ "acid_death" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_death" );
level._effect[ "box_activated" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_box_charge" );
level._effect[ "fan_blood" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fan_blood" );
level._effect[ "light_gondola" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_gondola" );
level._effect[ "lightning_flash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_lg" );
level._effect[ "tomahawk_trail" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail" );
level._effect[ "tomahawk_trail_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_ug" );
level._effect[ "tomahawk_impact" ] = loadfx( "weapon/tomahawk/fx_tomahawk_impact" );
level._effect[ "tomahawk_impact_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_impact_ug" );
level._effect[ "tomahawk_charge_up" ] = loadfx( "weapon/tomahawk/fx_tomahawk_charge" );
level._effect[ "tomahawk_charge_up_ug" ] = loadfx( "weapon/tomahawk/fx_tomahawk_charge_ug" );
level._effect[ "tomahawk_pickup" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup" );
level._effect[ "tomahawk_pickup_upgrade" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup_ug" );
level._effect[ "tomahawk_charged_trail" ] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_charged" );
level._effect[ "tomahawk_fire_dot" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_zmb_fire_torso" );
level._effect[ "soul_charge_start" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_start" );
level._effect[ "soul_charge" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge" );
level._effect[ "soul_charge_impact" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact" );
level._effect[ "soul_charged" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charged" );
level._effect[ "hell_portal" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell" );
level._effect[ "hell_portal_close" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell_close" );
level._effect[ "tomahawk_hellhole" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brutus_footstomp" );
level._effect[ "wolf_bite_blood" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact_sm" );
level._effect[ "uzi_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_uzi" );
level._effect[ "thompson_zm_fx" ] = loadfx( "maps/zombie/fx_zmb_wall_buy_thompson" );
level._effect[ "fx_alcatraz_lighthouse" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_house" );
level._effect[ "ee_skull_shot" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec_2" );
level._effect["elevator_fall"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_fall" );
level._effect["key_glint"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_key_glint" );
level._effect["quest_item_glow"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_quest_item_glow" );
level._effect["eye_glow"] = loadfx( "maps/zombie_alcatraz/fx_zombie_eye_single_red" );
level._effect["fx_alcatraz_unlock_door"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_unlock_door" );
level._effect["fx_alcatraz_elec_chair"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" );
level._effect["fx_alcatraz_lightning_finale"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_finale" );
level._effect["fx_alcatraz_panel_on_2"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on_2" );
level._effect["fx_alcatraz_panel_off_2"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_off_2" );
level._effect["fx_alcatraz_lightning_wire"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_wire" );
level._effect["fx_alcatraz_afterlife_zmb_tport"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_afterlife_zmb_tport" );
level._effect["fx_alcatraz_panel_ol"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_ol" );
level._effect["fx_alcatraz_plane_apear"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_apear" );
level._effect["switch_sparks"] = loadfx( "env/electrical/fx_elec_wire_spark_burst" );
level._effect["zapper_light_ready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" );
level._effect["zapper_light_notready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" );
level._effect["fx_alcatraz_plane_trail"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail" );
level._effect["fx_alcatraz_plane_trail_fast"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_trail_fast" );
level._effect["fx_alcatraz_flight_lightning"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_lightning" );
level._effect["fx_alcatraz_plane_fire_trail"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_plane_fire_trail" );
level._effect["alcatraz_dryer_light_green"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_green" );
level._effect["alcatraz_dryer_light_red"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_red" );
level._effect["alcatraz_dryer_light_yellow"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_light_yellow" );
level._effect["zomb_gib"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
level._effect["elec_md"] = loadfx( "electrical/fx_elec_player_md" );
level._effect["elec_sm"] = loadfx( "electrical/fx_elec_player_sm" );
level._effect["elec_torso"] = loadfx( "electrical/fx_elec_player_torso" );
level._effect["acid_spray"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_spray" );
level._effect["acid_death"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_acid_death" );
level._effect["box_activated"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_box_charge" );
level._effect["fan_blood"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fan_blood" );
level._effect["light_gondola"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_gondola" );
level._effect["lightning_flash"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_lg" );
level._effect["tomahawk_trail"] = loadfx( "weapon/tomahawk/fx_tomahawk_trail" );
level._effect["tomahawk_trail_ug"] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_ug" );
level._effect["tomahawk_impact"] = loadfx( "weapon/tomahawk/fx_tomahawk_impact" );
level._effect["tomahawk_impact_ug"] = loadfx( "weapon/tomahawk/fx_tomahawk_impact_ug" );
level._effect["tomahawk_charge_up"] = loadfx( "weapon/tomahawk/fx_tomahawk_charge" );
level._effect["tomahawk_charge_up_ug"] = loadfx( "weapon/tomahawk/fx_tomahawk_charge_ug" );
level._effect["tomahawk_pickup"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup" );
level._effect["tomahawk_pickup_upgrade"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tomahawk_pickup_ug" );
level._effect["tomahawk_charged_trail"] = loadfx( "weapon/tomahawk/fx_tomahawk_trail_charged" );
level._effect["tomahawk_fire_dot"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_zmb_fire_torso" );
level._effect["soul_charge_start"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_start" );
level._effect["soul_charge"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge" );
level._effect["soul_charge_impact"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact" );
level._effect["soul_charged"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charged" );
level._effect["hell_portal"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell" );
level._effect["hell_portal_close"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_hell_close" );
level._effect["tomahawk_hellhole"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_brutus_footstomp" );
level._effect["wolf_bite_blood"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_soul_charge_impact_sm" );
level._effect["uzi_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_uzi" );
level._effect["thompson_zm_fx"] = loadfx( "maps/zombie/fx_zmb_wall_buy_thompson" );
level._effect["fx_alcatraz_lighthouse"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_house" );
level._effect["ee_skull_shot"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_skull_elec_2" );
}
precache_createfx_fx()
{
level._effect[ "fx_alcatraz_storm_start" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_storm_start" );
level._effect[ "fx_alcatraz_vista_fog" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_vista_fog" );
level._effect[ "fx_alcatraz_docks_fog" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_docks_fog" );
level._effect[ "fx_alcatraz_fog_closet" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fog_closet" );
level._effect[ "fx_alcatraz_fire_works" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_works" );
level._effect[ "fx_alcatraz_tunnel_dust_fall" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_dust_fall" );
level._effect[ "fx_alcatraz_tunnel_ash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_ash" );
level._effect[ "fx_alcatraz_steam_pipe_2" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe_2" );
level._effect[ "fx_alcatraz_steam_pipe" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
level._effect[ "fx_alcatraz_shower_steam" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" );
level._effect[ "fx_alcatraz_steam_pipe" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
level._effect[ "fx_alcatraz_panel_on" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on" );
level._effect[ "fx_alcatraz_door_blocker" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_door_blocker" );
level._effect[ "fx_alcatraz_dryer_on" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_on" );
level._effect[ "fx_alcatraz_elec_fence" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_fence" );
level._effect[ "fx_alcatraz_generator_smk" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_smk" );
level._effect[ "fx_alcatraz_generator_sparks" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_sparks" );
level._effect[ "fx_alcatraz_generator_exp" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_exp" );
level._effect[ "fx_alcatraz_elevator_spark" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_spark" );
level._effect[ "fx_alcatraz_elec_key" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_key" );
level._effect[ "fx_alcatraz_sparks_ceiling" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_ceiling" );
level._effect[ "fx_alcatraz_sparks_panel" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_panel" );
level._effect[ "fx_alcatraz_fire_sm" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_sm" );
level._effect[ "fx_alcatraz_fire_xsm" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_xsm" );
level._effect[ "fx_alcatraz_embers_flat" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_flat" );
level._effect[ "fx_alcatraz_falling_fire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_falling_fire" );
level._effect[ "fx_alcatraz_steam_3floor" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_3floor" );
level._effect[ "fx_alcatraz_elec_box_amb" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_box_amb" );
level._effect[ "fx_alcatraz_blood_drip" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_blood_drip" );
level._effect[ "fx_alcatraz_godray_grill" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill" );
level._effect[ "fx_alcatraz_godray_grill_lg" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill_lg" );
level._effect[ "fx_alcatraz_godray_skinny" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_skinny" );
level._effect[ "fx_alcatraz_ground_fog" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ground_fog" );
level._effect[ "fx_alcatraz_flies" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flies" );
level._effect[ "fx_alcatraz_candle_fire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_candle_fire" );
level._effect[ "fx_alcatraz_portal_amb" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_amb" );
level._effect[ "fx_alcatraz_fire_md" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_md" );
level._effect[ "fx_alcatraz_smk_linger" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_smk_linger" );
level._effect[ "fx_alcatraz_embers_indoor" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_indoor" );
level._effect[ "fx_alcatraz_papers" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_papers" );
level._effect[ "fx_alcatraz_ceiling_fire" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ceiling_fire" );
level._effect[ "fx_alcatraz_steam_ash" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_ash" );
level._effect[ "fx_alcatraz_godray_jail" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_jail" );
level._effect[ "fx_alcatraz_water_drip" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_water_drip" );
level._effect[ "fx_alcatraz_shower_steam" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" );
level._effect[ "fx_alcatraz_steam_pipe" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
level._effect[ "fx_alcatraz_light_tinhat" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat" );
level._effect[ "fx_alcatraz_light_round_oo" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_round_oo" );
level._effect[ "fx_alcatraz_light_tinhat_oo" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat_oo" );
level._effect[ "fx_alcatraz_flight_clouds" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_clouds" );
level._effect[ "fx_alcatraz_lightning_bridge" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_bridge" );
level._effect[ "fx_alcatraz_elec_chair" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" );
level._effect["fx_alcatraz_storm_start"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_storm_start" );
level._effect["fx_alcatraz_vista_fog"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_vista_fog" );
level._effect["fx_alcatraz_docks_fog"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_docks_fog" );
level._effect["fx_alcatraz_fog_closet"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fog_closet" );
level._effect["fx_alcatraz_fire_works"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_works" );
level._effect["fx_alcatraz_tunnel_dust_fall"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_dust_fall" );
level._effect["fx_alcatraz_tunnel_ash"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_tunnel_ash" );
level._effect["fx_alcatraz_steam_pipe_2"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe_2" );
level._effect["fx_alcatraz_steam_pipe"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
level._effect["fx_alcatraz_shower_steam"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" );
level._effect["fx_alcatraz_steam_pipe"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
level._effect["fx_alcatraz_panel_on"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_panel_on" );
level._effect["fx_alcatraz_door_blocker"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_door_blocker" );
level._effect["fx_alcatraz_dryer_on"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_dryer_on" );
level._effect["fx_alcatraz_elec_fence"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_fence" );
level._effect["fx_alcatraz_generator_smk"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_smk" );
level._effect["fx_alcatraz_generator_sparks"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_sparks" );
level._effect["fx_alcatraz_generator_exp"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_generator_exp" );
level._effect["fx_alcatraz_elevator_spark"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elevator_spark" );
level._effect["fx_alcatraz_elec_key"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_key" );
level._effect["fx_alcatraz_sparks_ceiling"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_ceiling" );
level._effect["fx_alcatraz_sparks_panel"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_sparks_panel" );
level._effect["fx_alcatraz_fire_sm"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_sm" );
level._effect["fx_alcatraz_fire_xsm"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_xsm" );
level._effect["fx_alcatraz_embers_flat"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_flat" );
level._effect["fx_alcatraz_falling_fire"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_falling_fire" );
level._effect["fx_alcatraz_steam_3floor"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_3floor" );
level._effect["fx_alcatraz_elec_box_amb"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_box_amb" );
level._effect["fx_alcatraz_blood_drip"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_blood_drip" );
level._effect["fx_alcatraz_godray_grill"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill" );
level._effect["fx_alcatraz_godray_grill_lg"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_grill_lg" );
level._effect["fx_alcatraz_godray_skinny"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_skinny" );
level._effect["fx_alcatraz_ground_fog"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ground_fog" );
level._effect["fx_alcatraz_flies"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flies" );
level._effect["fx_alcatraz_candle_fire"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_candle_fire" );
level._effect["fx_alcatraz_portal_amb"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_portal_amb" );
level._effect["fx_alcatraz_fire_md"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_fire_md" );
level._effect["fx_alcatraz_smk_linger"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_smk_linger" );
level._effect["fx_alcatraz_embers_indoor"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_embers_indoor" );
level._effect["fx_alcatraz_papers"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_papers" );
level._effect["fx_alcatraz_ceiling_fire"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_ceiling_fire" );
level._effect["fx_alcatraz_steam_ash"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_ash" );
level._effect["fx_alcatraz_godray_jail"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_godray_jail" );
level._effect["fx_alcatraz_water_drip"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_water_drip" );
level._effect["fx_alcatraz_shower_steam"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_shower_steam" );
level._effect["fx_alcatraz_steam_pipe"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_steam_pipe" );
level._effect["fx_alcatraz_light_tinhat"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat" );
level._effect["fx_alcatraz_light_round_oo"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_round_oo" );
level._effect["fx_alcatraz_light_tinhat_oo"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_light_tinhat_oo" );
level._effect["fx_alcatraz_flight_clouds"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_flight_clouds" );
level._effect["fx_alcatraz_lightning_bridge"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_lightning_bridge" );
level._effect["fx_alcatraz_elec_chair"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_elec_chair" );
}
#using_animtree("fxanim_props");
precache_fxanim_props()
{
level.scr_anim[ "fxanim_props" ][ "wirespark_med" ] = %fxanim_gp_wirespark_med_anim;
level.scr_anim[ "fxanim_props" ][ "dryer_start" ] = %fxanim_zom_al_industrial_dryer_start_anim;
level.scr_anim[ "fxanim_props" ][ "dryer_idle" ] = %fxanim_zom_al_industrial_dryer_idle_anim;
level.scr_anim[ "fxanim_props" ][ "dryer_end" ] = %fxanim_zom_al_industrial_dryer_end_anim;
level.scr_anim[ "fxanim_props" ][ "dryer_hide" ] = %fxanim_zom_al_industrial_dryer_hide_anim;
level.scr_anim[ "fxanim_props" ][ "pulley_down" ] = %fxanim_zom_al_key_pulley_down_anim;
level.scr_anim[ "fxanim_props" ][ "pulley_up" ] = %fxanim_zom_al_key_pulley_up_anim;
level.scr_anim[ "fxanim_props" ][ "crane_palette" ] = %fxanim_zom_al_crane_palette_anim;
level.scr_anim[ "fxanim_props" ][ "chain_hook_rotate" ] = %fxanim_zom_al_chain_short_hook_rotate_anim;
level.scr_anim[ "fxanim_props" ][ "bodybag_rotate" ] = %fxanim_zom_al_bodybag_rotate_anim;
level.scr_anim[ "fxanim_props" ][ "chain_hook_swing" ] = %fxanim_zom_al_chain_short_hook_swing_anim;
level.scr_anim[ "fxanim_props" ][ "bodybag_swing" ] = %fxanim_zom_al_bodybag_swing_anim;
level.scr_anim[ "fxanim_props" ][ "chain_hook_crane" ] = %fxanim_zom_al_chain_short_hook_crane_anim;
level.scr_anim[ "fxanim_props" ][ "bodybag_crane" ] = %fxanim_zom_al_bodybag_crane_anim;
level.scr_anim["fxanim_props"]["wirespark_med"] = %fxanim_gp_wirespark_med_anim;
level.scr_anim["fxanim_props"]["dryer_start"] = %fxanim_zom_al_industrial_dryer_start_anim;
level.scr_anim["fxanim_props"]["dryer_idle"] = %fxanim_zom_al_industrial_dryer_idle_anim;
level.scr_anim["fxanim_props"]["dryer_end"] = %fxanim_zom_al_industrial_dryer_end_anim;
level.scr_anim["fxanim_props"]["dryer_hide"] = %fxanim_zom_al_industrial_dryer_hide_anim;
level.scr_anim["fxanim_props"]["pulley_down"] = %fxanim_zom_al_key_pulley_down_anim;
level.scr_anim["fxanim_props"]["pulley_up"] = %fxanim_zom_al_key_pulley_up_anim;
level.scr_anim["fxanim_props"]["crane_palette"] = %fxanim_zom_al_crane_palette_anim;
level.scr_anim["fxanim_props"]["chain_hook_rotate"] = %fxanim_zom_al_chain_short_hook_rotate_anim;
level.scr_anim["fxanim_props"]["bodybag_rotate"] = %fxanim_zom_al_bodybag_rotate_anim;
level.scr_anim["fxanim_props"]["chain_hook_swing"] = %fxanim_zom_al_chain_short_hook_swing_anim;
level.scr_anim["fxanim_props"]["bodybag_swing"] = %fxanim_zom_al_bodybag_swing_anim;
level.scr_anim["fxanim_props"]["chain_hook_crane"] = %fxanim_zom_al_chain_short_hook_crane_anim;
level.scr_anim["fxanim_props"]["bodybag_crane"] = %fxanim_zom_al_bodybag_crane_anim;
}

View File

@ -1,305 +1,294 @@
//checked includes match cerberus output
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_stats;
#include maps/mp/zombies/_zm_weap_tomahawk;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_net;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zombies\_zm_weap_tomahawk;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_audio;
//#using_animtree( "fxanim_props" );
init() //checked matches cerberus output
init()
{
if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
{
spoon_easy_cleanup();
return;
}
precachemodel( "t6_wpn_zmb_spoon_world" );
precachemodel( "c_zom_inmate_g_rarmspawn" );
level thread wait_for_initial_conditions();
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spoon_func );
level thread bucket_init();
spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal setinvisibletoall();
level.b_spoon_in_tub = 0;
level.n_spoon_kill_count = 0;
flag_init( "spoon_obtained" );
flag_init( "charged_spoon" );
if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
{
spoon_easy_cleanup();
return;
}
precachemodel( "t6_wpn_zmb_spoon_world" );
precachemodel( "c_zom_inmate_g_rarmspawn" );
level thread wait_for_initial_conditions();
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spoon_func );
level thread bucket_init();
spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal setinvisibletoall();
level.b_spoon_in_tub = 0;
level.n_spoon_kill_count = 0;
flag_init( "spoon_obtained" );
flag_init( "charged_spoon" );
/#
level thread debug_prison_spoon_quest();
level thread debug_prison_spoon_quest();
#/
}
spoon_easy_cleanup() //checked matches cerberus output
spoon_easy_cleanup()
{
spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal delete();
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
m_spoon_pickup delete();
m_spoon = getent( "zap_spoon", "targetname" );
m_spoon delete();
spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal delete();
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
m_spoon_pickup delete();
m_spoon = getent( "zap_spoon", "targetname" );
m_spoon delete();
}
extra_death_func_to_check_for_splat_death() //checked matches cerberus output
extra_death_func_to_check_for_splat_death()
{
self thread maps/mp/zombies/_zm_spawner::zombie_death_animscript();
if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" )
{
if ( self.damageweapon == "blundersplat_explosive_dart_zm" )
{
if ( isplayer( self.attacker ) )
{
self notify( "killed_by_a_blundersplat" );
}
}
else
{
if ( self.damageweapon == "bouncing_tomahawk_zm" )
{
if ( isplayer( self.attacker ) )
{
self.attacker notify( "got_a_tomahawk_kill" );
}
}
}
}
if ( isDefined( self.attacker.killed_with_only_tomahawk ) )
{
if ( self.damageweapon != "bouncing_tomahawk_zm" && self.damageweapon != "none" )
{
self.attacker.killed_with_only_tomahawk = 0;
}
}
if ( isDefined( self.attacker.killed_something_thq ) )
{
self.attacker.killed_something_thq = 1;
}
return 0;
self thread maps\mp\zombies\_zm_spawner::zombie_death_animscript();
if ( self.damagemod == "MOD_GRENADE" || self.damagemod == "MOD_GRENADE_SPLASH" )
{
if ( self.damageweapon == "blundersplat_explosive_dart_zm" )
{
if ( isplayer( self.attacker ) )
self notify( "killed_by_a_blundersplat", self.attacker );
}
else if ( self.damageweapon == "bouncing_tomahawk_zm" )
{
if ( isplayer( self.attacker ) )
self.attacker notify( "got_a_tomahawk_kill" );
}
}
if ( isdefined( self.attacker.killed_with_only_tomahawk ) )
{
if ( self.damageweapon != "bouncing_tomahawk_zm" && self.damageweapon != "none" )
self.attacker.killed_with_only_tomahawk = 0;
}
if ( isdefined( self.attacker.killed_something_thq ) )
self.attacker.killed_something_thq = 1;
return 0;
}
zombie_spoon_func() //checked matches cerberus output
zombie_spoon_func()
{
self.deathfunction = ::extra_death_func_to_check_for_splat_death;
self waittill( "killed_by_a_blundersplat", player );
if ( flag( "charged_spoon" ) || !level.b_spoon_in_tub )
{
return;
}
if ( self maps/mp/zombies/_zm_zonemgr::entity_in_zone( "cellblock_shower" ) )
{
level.n_spoon_kill_count++;
}
else
{
return;
}
if ( level.n_spoon_kill_count >= 50 )
{
self.deathfunction = ::extra_death_func_to_check_for_splat_death;
self waittill( "killed_by_a_blundersplat", player );
if ( flag( "charged_spoon" ) || !level.b_spoon_in_tub )
return;
if ( self maps\mp\zombies\_zm_zonemgr::entity_in_zone( "cellblock_shower" ) )
level.n_spoon_kill_count++;
else
return;
if ( level.n_spoon_kill_count >= 50 )
{
/#
iprintlnbold( "Spoon Charged" );
iprintlnbold( "Spoon Charged" );
#/
flag_set( "charged_spoon" );
}
flag_set( "charged_spoon" );
}
}
wait_for_initial_conditions() //checked changed to match cerberus output
wait_for_initial_conditions()
{
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
m_spoon_pickup ghost();
m_spoon_pickup ghostindemo();
while ( !isDefined( level.characters_in_nml ) || level.characters_in_nml.size == 0 )
{
wait 1;
}
flag_wait( "soul_catchers_charged" );
m_poster = getent( "poster", "targetname" );
m_poster.health = 5000;
m_poster setcandamage( 1 );
b_poster_knocked_down = 0;
while ( !b_poster_knocked_down )
{
m_poster waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
if ( weaponname != "frag_grenade_zm" || weaponname == "bouncing_tomahawk_zm" || weaponname == "upgraded_tomahawk_zm" )
{
b_poster_knocked_down = 1;
playsoundatposition( "zmb_squest_spoon_poster", m_poster.origin );
m_poster delete();
if ( isDefined( attacker ) && isplayer( attacker ) )
{
attacker do_player_general_vox( "quest", "secret_poster", undefined, 100 );
}
wait 1;
attacker thread do_player_general_vox( "quest", "pick_up_easter_egg" );
}
}
spork_door = getent( "spork_door", "targetname" );
spork_door.targetname = "afterlife_door";
spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal.targetname = "afterlife_show";
m_spoon = getent( "zap_spoon", "targetname" );
m_spoon ghostindemo();
m_spoon.health = 50000;
m_spoon setcandamage( 1 );
b_spoon_shocked = 0;
while ( !b_spoon_shocked )
{
m_spoon waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
m_spoon.health += damage;
if ( weaponname == "lightning_hands_zm" )
{
b_spoon_shocked = 1;
m_spoon delete();
attacker playsound( "zmb_easteregg_laugh" );
}
}
m_spoon_pickup show();
m_spoon_pickup.health = 10000;
m_spoon_pickup setcandamage( 1 );
level.a_tomahawk_pickup_funcs[ level.a_tomahawk_pickup_funcs.size ] = ::tomahawk_the_spoon;
m_spoon_pickup = getent( "pickup_spoon", "targetname" );
m_spoon_pickup ghost();
m_spoon_pickup ghostindemo();
while ( !isdefined( level.characters_in_nml ) || level.characters_in_nml.size == 0 )
wait 1;
flag_wait( "soul_catchers_charged" );
m_poster = getent( "poster", "targetname" );
m_poster.health = 5000;
m_poster setcandamage( 1 );
b_poster_knocked_down = 0;
while ( !b_poster_knocked_down )
{
m_poster waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
if ( weaponname == "frag_grenade_zm" || weaponname == "bouncing_tomahawk_zm" || weaponname == "upgraded_tomahawk_zm" )
{
b_poster_knocked_down = 1;
playsoundatposition( "zmb_squest_spoon_poster", m_poster.origin );
m_poster delete();
if ( isdefined( attacker ) && isplayer( attacker ) )
attacker do_player_general_vox( "quest", "secret_poster", undefined, 100 );
wait 1.0;
attacker thread do_player_general_vox( "quest", "pick_up_easter_egg" );
}
}
spork_door = getent( "spork_door", "targetname" );
spork_door.targetname = "afterlife_door";
spork_portal = getent( "afterlife_show_spork", "targetname" );
spork_portal.targetname = "afterlife_show";
m_spoon = getent( "zap_spoon", "targetname" );
m_spoon ghostindemo();
m_spoon.health = 50000;
m_spoon setcandamage( 1 );
b_spoon_shocked = 0;
while ( !b_spoon_shocked )
{
m_spoon waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname );
m_spoon.health += damage;
if ( weaponname == "lightning_hands_zm" )
{
b_spoon_shocked = 1;
m_spoon delete();
attacker playsound( "zmb_easteregg_laugh" );
}
}
m_spoon_pickup show();
m_spoon_pickup.health = 10000;
m_spoon_pickup setcandamage( 1 );
level.a_tomahawk_pickup_funcs[level.a_tomahawk_pickup_funcs.size] = ::tomahawk_the_spoon;
}
tomahawk_the_spoon( grenade, n_grenade_charge_power ) //checked matches cerberus output
tomahawk_the_spoon( grenade, n_grenade_charge_power )
{
if ( self hasweapon( "spoon_zm_alcatraz" ) || self hasweapon( "spork_zm_alcatraz" ) )
{
return 0;
}
m_spoon = getent( "pickup_spoon", "targetname" );
if ( distancesquared( m_spoon.origin, grenade.origin ) < 40000 )
{
m_tomahawk = maps/mp/zombies/_zm_weap_tomahawk::tomahawk_spawn( grenade.origin );
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
m_player_spoon = spawn( "script_model", grenade.origin );
m_player_spoon setmodel( "t6_wpn_zmb_spoon_world" );
m_player_spoon linkto( m_tomahawk );
self maps/mp/zombies/_zm_stats::increment_client_stat( "prison_ee_spoon_acquired", 0 );
self thread maps/mp/zombies/_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk );
self thread give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon );
self thread dip_the_spoon();
flag_set( "spoon_obtained" );
self playsoundtoplayer( "vox_brutus_easter_egg_101_0", self );
return 1;
}
return 0;
if ( self hasweapon( "spoon_zm_alcatraz" ) || self hasweapon( "spork_zm_alcatraz" ) )
return false;
m_spoon = getent( "pickup_spoon", "targetname" );
if ( distancesquared( m_spoon.origin, grenade.origin ) < 40000 )
{
m_tomahawk = maps\mp\zombies\_zm_weap_tomahawk::tomahawk_spawn( grenade.origin );
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
m_player_spoon = spawn( "script_model", grenade.origin );
m_player_spoon setmodel( "t6_wpn_zmb_spoon_world" );
m_player_spoon linkto( m_tomahawk );
self maps\mp\zombies\_zm_stats::increment_client_stat( "prison_ee_spoon_acquired", 0 );
self thread maps\mp\zombies\_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk );
self thread give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon );
self thread dip_the_spoon();
flag_set( "spoon_obtained" );
self playsoundtoplayer( "vox_brutus_easter_egg_101_0", self );
return true;
}
return false;
}
give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon ) //checked changed to match cerberus output
give_player_spoon_upon_receipt( m_tomahawk, m_player_spoon )
{
while ( isDefined( m_tomahawk ) )
{
wait 0.05;
}
m_player_spoon delete();
if ( !self hasweapon( "spoon_zm_alcatraz" ) && !self hasweapon( "spork_zm_alcatraz" ) && !is_true( self.spoon_in_tub ) )
{
self giveweapon( "spoon_zm_alcatraz" );
self set_player_melee_weapon( "spoon_zm_alcatraz" );
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "spoon", self );
weapons = self getweaponslist();
for ( i = 0; i < weapons.size; i++ )
{
if ( issubstr( weapons[ i ], "knife" ) )
{
self takeweapon( weapons[ i ] );
}
}
}
weapons = self getweaponslist();
wait 1;
self thread do_player_general_vox( "quest", "pick_up_easter_egg" );
while ( isdefined( m_tomahawk ) )
wait 0.05;
m_player_spoon delete();
if ( !self hasweapon( "spoon_zm_alcatraz" ) && !self hasweapon( "spork_zm_alcatraz" ) && !( isdefined( self.spoon_in_tub ) && self.spoon_in_tub ) )
{
self giveweapon( "spoon_zm_alcatraz" );
self set_player_melee_weapon( "spoon_zm_alcatraz" );
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "spoon", self );
weapons = self getweaponslist();
for ( i = 0; i < weapons.size; i++ )
{
if ( issubstr( weapons[i], "knife" ) )
self takeweapon( weapons[i] );
}
}
weapons = self getweaponslist();
wait 1.0;
self thread do_player_general_vox( "quest", "pick_up_easter_egg" );
}
bucket_init() //checked matches cerberus output
bucket_init()
{
s_bathtub = getstruct( "tub_trigger_struct", "targetname" );
level.t_bathtub = spawn( "trigger_radius_use", s_bathtub.origin, 0, 40, 150 );
level.t_bathtub usetriggerrequirelookat();
level.t_bathtub triggerignoreteam();
level.t_bathtub sethintstring( "" );
level.t_bathtub setcursorhint( "HINT_NOICON" );
s_bathtub = getstruct( "tub_trigger_struct", "targetname" );
level.t_bathtub = spawn( "trigger_radius_use", s_bathtub.origin, 0, 40, 150 );
level.t_bathtub usetriggerrequirelookat();
level.t_bathtub triggerignoreteam();
level.t_bathtub sethintstring( "" );
level.t_bathtub setcursorhint( "HINT_NOICON" );
}
wait_for_bucket_activated( player ) //checked matches cerberus output
wait_for_bucket_activated( player )
{
if ( isDefined( player ) )
{
while ( 1 )
{
level.t_bathtub waittill( "trigger", who );
if ( who == player )
{
return;
}
}
}
else
{
level.t_bathtub waittill( "trigger", who );
}
if ( isdefined( player ) )
{
while ( true )
{
level.t_bathtub waittill( "trigger", who );
if ( who == player )
return;
}
}
else
level.t_bathtub waittill( "trigger", who );
}
dip_the_spoon() //checked matches cerberus output
dip_the_spoon()
{
self endon( "disconnect" );
wait_for_bucket_activated( self );
self takeweapon( "spoon_zm_alcatraz" );
self giveweapon( "knife_zm_alcatraz" );
self set_player_melee_weapon( "knife_zm_alcatraz" );
self.spoon_in_tub = 1;
self setclientfieldtoplayer( "spoon_visual_state", 1 );
wait 5;
level.b_spoon_in_tub = 1;
flag_wait( "charged_spoon" );
wait 1;
level.t_bathtub playsound( "zmb_easteregg_laugh" );
self thread thrust_the_spork();
self endon( "disconnect" );
wait_for_bucket_activated( self );
self takeweapon( "spoon_zm_alcatraz" );
self giveweapon( "knife_zm_alcatraz" );
self set_player_melee_weapon( "knife_zm_alcatraz" );
self.spoon_in_tub = 1;
self setclientfieldtoplayer( "spoon_visual_state", 1 );
wait 5;
level.b_spoon_in_tub = 1;
flag_wait( "charged_spoon" );
wait 1.0;
level.t_bathtub playsound( "zmb_easteregg_laugh" );
self thread thrust_the_spork();
}
thrust_the_spork() //checked matches cerberus output
thrust_the_spork()
{
self endon( "disconnect" );
wait_for_bucket_activated( self );
self setclientfieldtoplayer( "spoon_visual_state", 2 );
wait 5;
wait_for_bucket_activated( self );
self takeweapon( "knife_zm_alcatraz" );
self giveweapon( "spork_zm_alcatraz" );
self set_player_melee_weapon( "spork_zm_alcatraz" );
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "spork", self );
self.spoon_in_tub = undefined;
self setclientfieldtoplayer( "spoon_visual_state", 3 );
wait 1;
self thread do_player_general_vox( "quest", "pick_up_easter_egg" );
self endon( "disconnect" );
wait_for_bucket_activated( self );
self setclientfieldtoplayer( "spoon_visual_state", 2 );
wait 5;
wait_for_bucket_activated( self );
self takeweapon( "knife_zm_alcatraz" );
self giveweapon( "spork_zm_alcatraz" );
self set_player_melee_weapon( "spork_zm_alcatraz" );
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "spork", self );
self.spoon_in_tub = undefined;
self setclientfieldtoplayer( "spoon_visual_state", 3 );
wait 1.0;
self thread do_player_general_vox( "quest", "pick_up_easter_egg" );
}
debug_prison_spoon_quest() //dev call didn't check
debug_prison_spoon_quest()
{
/*
/#
while ( 1 )
{
a_players = getplayers();
_a377 = a_players;
_k377 = getFirstArrayKey( _a377 );
while ( isDefined( _k377 ) )
{
player = _a377[ _k377 ];
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
{
flag_set( "soul_catchers_charged" );
break;
}
else
{
_k377 = getNextArrayKey( _a377, _k377 );
}
}
wait 1;
while ( true )
{
a_players = getplayers();
foreach ( player in a_players )
{
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
{
flag_set( "soul_catchers_charged" );
break;
}
}
wait 1.0;
}
#/
}
*/
}

View File

@ -1,287 +1,289 @@
#include maps/mp/zombies/_zm_weap_tomahawk;
#include maps/mp/zombies/_zm_afterlife;
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_net;
#include maps\mp\zombies\_zm_audio;
#include maps\mp\zombies\_zm_afterlife;
#include maps\mp\zombies\_zm_weap_tomahawk;
init()
{
if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
{
sq_bg_easy_cleanup();
return;
}
precachemodel( "p6_zm_al_skull_afterlife" );
flag_init( "warden_blundergat_obtained" );
level thread wait_for_initial_conditions();
if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
{
sq_bg_easy_cleanup();
return;
}
precachemodel( "p6_zm_al_skull_afterlife" );
flag_init( "warden_blundergat_obtained" );
level thread wait_for_initial_conditions();
}
sq_bg_easy_cleanup()
{
t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" );
t_reward_pickup delete();
t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" );
t_reward_pickup delete();
}
wait_for_initial_conditions()
{
t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" );
t_reward_pickup sethintstring( "" );
t_reward_pickup setcursorhint( "HINT_NOICON" );
t_reward_pickup = getent( "sq_bg_reward_pickup", "targetname" );
t_reward_pickup sethintstring( "" );
t_reward_pickup setcursorhint( "HINT_NOICON" );
/#
level thread debug_sq_bg_quest_starter();
level thread debug_sq_bg_quest_starter();
#/
level waittill( "bouncing_tomahawk_zm_aquired" );
level.sq_bg_macguffins = [];
a_s_mcguffin = getstructarray( "struct_sq_bg_macguffin", "targetname" );
_a46 = a_s_mcguffin;
_k46 = getFirstArrayKey( _a46 );
while ( isDefined( _k46 ) )
{
struct = _a46[ _k46 ];
m_temp = spawn( "script_model", struct.origin, 0 );
m_temp.targetname = "sq_bg_macguffin";
m_temp setmodel( struct.model );
m_temp.angles = struct.angles;
m_temp ghost();
m_temp ghostindemo();
level.sq_bg_macguffins[ level.sq_bg_macguffins.size ] = m_temp;
wait_network_frame();
_k46 = getNextArrayKey( _a46, _k46 );
}
array_thread( level.sq_bg_macguffins, ::sq_bg_macguffin_think );
level.a_tomahawk_pickup_funcs[ level.a_tomahawk_pickup_funcs.size ] = ::tomahawk_the_macguffin;
level thread check_sq_bg_progress();
level waittill( "all_macguffins_acquired" );
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
t_reward_pickup thread give_sq_bg_reward();
level waittill( "bouncing_tomahawk_zm_aquired" );
level.sq_bg_macguffins = [];
a_s_mcguffin = getstructarray( "struct_sq_bg_macguffin", "targetname" );
foreach ( struct in a_s_mcguffin )
{
m_temp = spawn( "script_model", struct.origin, 0 );
m_temp.targetname = "sq_bg_macguffin";
m_temp setmodel( struct.model );
m_temp.angles = struct.angles;
m_temp ghost();
m_temp ghostindemo();
level.sq_bg_macguffins[level.sq_bg_macguffins.size] = m_temp;
wait_network_frame();
}
array_thread( level.sq_bg_macguffins, ::sq_bg_macguffin_think );
level.a_tomahawk_pickup_funcs[level.a_tomahawk_pickup_funcs.size] = ::tomahawk_the_macguffin;
level thread check_sq_bg_progress();
level waittill( "all_macguffins_acquired" );
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" );
t_reward_pickup thread give_sq_bg_reward();
}
sq_bg_macguffin_think()
{
self endon( "sq_bg_macguffin_received_by_player" );
self thread maps/mp/zombies/_zm_afterlife::enable_afterlife_prop();
self.health = 10000;
self setcandamage( 1 );
self setforcenocull();
while ( 1 )
{
self waittill( "damage", amount, attacker );
if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" )
{
playfx( level._effect[ "ee_skull_shot" ], self.origin );
self playsound( "zmb_powerpanel_activate" );
self thread maps/mp/zombies/_zm_afterlife::disable_afterlife_prop();
self thread wait_and_hide_sq_bg_macguffin();
}
}
self endon( "sq_bg_macguffin_received_by_player" );
self thread maps\mp\zombies\_zm_afterlife::enable_afterlife_prop();
self.health = 10000;
self setcandamage( 1 );
self setforcenocull();
while ( true )
{
self waittill( "damage", amount, attacker );
if ( attacker == level || isplayer( attacker ) && attacker getcurrentweapon() == "lightning_hands_zm" )
{
playfx( level._effect["ee_skull_shot"], self.origin );
self playsound( "zmb_powerpanel_activate" );
self thread maps\mp\zombies\_zm_afterlife::disable_afterlife_prop();
self thread wait_and_hide_sq_bg_macguffin();
}
}
}
wait_and_hide_sq_bg_macguffin()
{
self notify( "restart_show_timer" );
self endon( "restart_show_timer" );
self endon( "caught_by_tomahawk" );
wait 1,6;
self thread maps/mp/zombies/_zm_afterlife::enable_afterlife_prop();
self notify( "restart_show_timer" );
self endon( "restart_show_timer" );
self endon( "caught_by_tomahawk" );
wait 1.6;
self thread maps\mp\zombies\_zm_afterlife::enable_afterlife_prop();
}
tomahawk_the_macguffin( grenade, n_grenade_charge_power )
{
if ( !isDefined( level.sq_bg_macguffins ) || level.sq_bg_macguffins.size <= 0 )
{
return 0;
}
_a119 = level.sq_bg_macguffins;
_k119 = getFirstArrayKey( _a119 );
while ( isDefined( _k119 ) )
{
macguffin = _a119[ _k119 ];
if ( distancesquared( macguffin.origin, grenade.origin ) < 10000 )
{
m_tomahawk = maps/mp/zombies/_zm_weap_tomahawk::tomahawk_spawn( grenade.origin );
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
macguffin notify( "caught_by_tomahawk" );
macguffin.origin = grenade.origin;
macguffin linkto( m_tomahawk );
macguffin thread maps/mp/zombies/_zm_afterlife::disable_afterlife_prop();
self thread maps/mp/zombies/_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk );
self thread give_player_macguffin_upon_receipt( m_tomahawk, macguffin );
return 1;
}
_k119 = getNextArrayKey( _a119, _k119 );
}
return 0;
if ( !isdefined( level.sq_bg_macguffins ) || level.sq_bg_macguffins.size <= 0 )
return false;
foreach ( macguffin in level.sq_bg_macguffins )
{
if ( distancesquared( macguffin.origin, grenade.origin ) < 10000 )
{
m_tomahawk = maps\mp\zombies\_zm_weap_tomahawk::tomahawk_spawn( grenade.origin );
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
macguffin notify( "caught_by_tomahawk" );
macguffin.origin = grenade.origin;
macguffin linkto( m_tomahawk );
macguffin thread maps\mp\zombies\_zm_afterlife::disable_afterlife_prop();
self thread maps\mp\zombies\_zm_weap_tomahawk::tomahawk_return_player( m_tomahawk );
self thread give_player_macguffin_upon_receipt( m_tomahawk, macguffin );
return true;
}
}
return false;
}
give_player_macguffin_upon_receipt( m_tomahawk, m_macguffin )
{
self endon( "disconnect" );
while ( isDefined( m_tomahawk ) )
{
wait 0,05;
}
m_macguffin notify( "sq_bg_macguffin_received_by_player" );
arrayremovevalue( level.sq_bg_macguffins, m_macguffin );
m_macguffin delete();
play_sound_at_pos( "purchase", self.origin );
level notify( "sq_bg_macguffin_collected" );
self endon( "disconnect" );
while ( isdefined( m_tomahawk ) )
wait 0.05;
m_macguffin notify( "sq_bg_macguffin_received_by_player" );
arrayremovevalue( level.sq_bg_macguffins, m_macguffin );
m_macguffin delete();
play_sound_at_pos( "purchase", self.origin );
level notify( "sq_bg_macguffin_collected", self );
}
check_sq_bg_progress()
{
n_macguffins_total = level.sq_bg_macguffins.size;
n_macguffins_collected = 0;
while ( 1 )
{
level waittill( "sq_bg_macguffin_collected", player );
n_macguffins_collected++;
if ( n_macguffins_collected >= n_macguffins_total )
{
level notify( "all_macguffins_acquired" );
break;
}
else play_sq_bg_collected_vo( player );
}
wait 1;
player playsound( "zmb_easteregg_laugh" );
n_macguffins_total = level.sq_bg_macguffins.size;
n_macguffins_collected = 0;
while ( true )
{
level waittill( "sq_bg_macguffin_collected", player );
n_macguffins_collected++;
if ( n_macguffins_collected >= n_macguffins_total )
{
level notify( "all_macguffins_acquired" );
break;
}
else
play_sq_bg_collected_vo( player );
}
wait 1.0;
player playsound( "zmb_easteregg_laugh" );
}
play_sq_bg_collected_vo( player )
{
player endon( "disconnect" );
wait 1;
player thread do_player_general_vox( "quest", "pick_up_easter_egg" );
player endon( "disconnect" );
wait 1.0;
player thread do_player_general_vox( "quest", "pick_up_easter_egg" );
}
give_sq_bg_reward()
{
s_reward_origin = getstruct( "sq_bg_reward", "targetname" );
t_near = spawn( "trigger_radius", s_reward_origin.origin, 0, 196, 64 );
while ( 1 )
{
t_near waittill( "trigger", ent );
if ( isplayer( ent ) )
{
t_near thread sq_bg_spawn_rumble();
break;
}
else
{
wait 0,1;
}
}
a_players = getplayers();
if ( a_players.size == 1 )
{
if ( a_players[ 0 ] hasweapon( "blundergat_zm" ) )
{
str_reward_weapon = "blundersplat_zm";
str_loc = &"ZM_PRISON_SQ_BS";
}
else
{
str_reward_weapon = "blundergat_zm";
str_loc = &"ZM_PRISON_SQ_BG";
}
}
else
{
str_reward_weapon = "blundergat_zm";
str_loc = &"ZM_PRISON_SQ_BG";
}
m_reward_model = spawn_weapon_model( str_reward_weapon, undefined, s_reward_origin.origin, s_reward_origin.angles );
m_reward_model moveto( m_reward_model.origin + vectorScale( ( 0, 0, 1 ), 14 ), 5 );
level setclientfield( "sq_bg_reward_portal", 1 );
self sethintstring( str_loc );
for ( ;; )
{
while ( 1 )
{
self waittill( "trigger", 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() )
{
if ( player hasweapon( str_reward_weapon ) )
{
s_reward_origin = getstruct( "sq_bg_reward", "targetname" );
t_near = spawn( "trigger_radius", s_reward_origin.origin, 0, 196, 64 );
while ( true )
{
t_near waittill( "trigger", ent );
if ( isplayer( ent ) )
{
t_near thread sq_bg_spawn_rumble();
break;
}
wait 0.1;
}
a_players = getplayers();
if ( a_players.size == 1 )
{
if ( a_players[0] hasweapon( "blundergat_zm" ) )
{
str_reward_weapon = "blundersplat_zm";
str_loc = &"ZM_PRISON_SQ_BS";
}
else
{
str_reward_weapon = "blundergat_zm";
str_loc = &"ZM_PRISON_SQ_BG";
}
}
else
{
str_reward_weapon = "blundergat_zm";
str_loc = &"ZM_PRISON_SQ_BG";
}
m_reward_model = spawn_weapon_model( str_reward_weapon, undefined, s_reward_origin.origin, s_reward_origin.angles );
m_reward_model moveto( m_reward_model.origin + vectorscale( ( 0, 0, 1 ), 14.0 ), 5 );
level setclientfield( "sq_bg_reward_portal", 1 );
self sethintstring( str_loc );
while ( true )
{
self waittill( "trigger", 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 && "none" != current_weapon && !player hacker_active() )
{
if ( player hasweapon( str_reward_weapon ) )
{
/#
iprintln( "Player has" + str_reward_weapon + " , so don't give him another one" );
iprintln( "Player has" + str_reward_weapon + " , so don't give him another one" );
#/
}
}
else self delete();
level setclientfield( "sq_bg_reward_portal", 0 );
wait_network_frame();
m_reward_model delete();
player take_old_weapon_and_give_reward( current_weapon, str_reward_weapon );
}
}
t_near delete();
continue;
}
else
{
self delete();
level setclientfield( "sq_bg_reward_portal", 0 );
wait_network_frame();
m_reward_model delete();
player take_old_weapon_and_give_reward( current_weapon, str_reward_weapon );
}
}
}
t_near delete();
}
sq_bg_spawn_rumble()
{
a_players = getplayers();
_a285 = a_players;
_k285 = getFirstArrayKey( _a285 );
while ( isDefined( _k285 ) )
{
player = _a285[ _k285 ];
if ( player istouching( self ) )
{
player setclientfieldtoplayer( "rumble_sq_bg", 1 );
}
_k285 = getNextArrayKey( _a285, _k285 );
}
a_players = getplayers();
foreach ( player in a_players )
{
if ( player istouching( self ) )
player setclientfieldtoplayer( "rumble_sq_bg", 1 );
}
}
take_old_weapon_and_give_reward( current_weapon, reward_weapon, weapon_limit_override )
{
if ( !isDefined( weapon_limit_override ) )
{
weapon_limit_override = 0;
}
if ( weapon_limit_override == 1 )
{
self takeweapon( current_weapon );
}
else
{
primaries = self getweaponslistprimaries();
if ( isDefined( primaries ) && primaries.size >= 2 )
{
self takeweapon( current_weapon );
}
}
self giveweapon( reward_weapon );
self switchtoweapon( reward_weapon );
flag_set( "warden_blundergat_obtained" );
self playsoundtoplayer( "vox_brutus_easter_egg_872_0", self );
if ( !isdefined( weapon_limit_override ) )
weapon_limit_override = 0;
if ( weapon_limit_override == 1 )
self takeweapon( current_weapon );
else
{
primaries = self getweaponslistprimaries();
if ( isdefined( primaries ) && primaries.size >= 2 )
self takeweapon( current_weapon );
}
self giveweapon( reward_weapon );
self switchtoweapon( reward_weapon );
flag_set( "warden_blundergat_obtained" );
self playsoundtoplayer( "vox_brutus_easter_egg_872_0", self );
}
debug_sq_bg_quest_starter()
{
/#
while ( 1 )
{
a_players = getplayers();
_a327 = a_players;
_k327 = getFirstArrayKey( _a327 );
while ( isDefined( _k327 ) )
{
player = _a327[ _k327 ];
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
{
level notify( "bouncing_tomahawk_zm_aquired" );
break;
}
else
{
_k327 = getNextArrayKey( _a327, _k327 );
}
}
wait 1;
while ( true )
{
a_players = getplayers();
foreach ( player in a_players )
{
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
{
level notify( "bouncing_tomahawk_zm_aquired" );
break;
}
}
wait 1.0;
}
#/
}
}

View File

@ -1,162 +1,162 @@
#include maps/mp/zombies/_zm;
#include maps/mp/_visionset_mgr;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_net;
#include maps\mp\_visionset_mgr;
#include maps\mp\zombies\_zm;
onplayerconnect_sq_fc()
{
if ( !isDefined( level.sq_fc_still_valid ) )
{
level.sq_fc_still_valid = 1;
}
if ( flag( "afterlife_start_over" ) || !level.sq_fc_still_valid )
{
return;
}
self thread watch_for_touching_controls();
if ( !isdefined( level.sq_fc_still_valid ) )
level.sq_fc_still_valid = 1;
if ( flag( "afterlife_start_over" ) || !level.sq_fc_still_valid )
return;
self thread watch_for_touching_controls();
}
watch_for_touching_controls()
{
self endon( "out_of_mana" );
self endon( "disconnect" );
self waittill( "al_all_setup" );
wait 1;
v_original_origin = ( self.origin[ 0 ], self.origin[ 1 ], 0 );
v_original_angles = self.angles;
v_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 );
v_original_forward_vec = vectornormalize( v_forward_point - self.origin );
while ( !flag( "afterlife_start_over" ) && level.sq_fc_still_valid )
{
v_new_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 );
v_new_forward_vec = vectornormalize( v_new_forward_point - self.origin );
move_length = length( ( self.origin[ 0 ], self.origin[ 1 ], 0 ) - v_original_origin );
if ( !self actionslotonebuttonpressed() && !self actionslottwobuttonpressed() && !self actionslotthreebuttonpressed() && !self actionslotfourbuttonpressed() && !self adsbuttonpressed() && !self attackbuttonpressed() && !self fragbuttonpressed() && !self inventorybuttonpressed() && !self jumpbuttonpressed() && !self meleebuttonpressed() && !self secondaryoffhandbuttonpressed() && !self sprintbuttonpressed() && !self stancebuttonpressed() && !self throwbuttonpressed() && !self usebuttonpressed() && !self changeseatbuttonpressed() || move_length > 2 && vectordot( v_original_forward_vec, v_new_forward_vec ) < 0,99 )
{
level.sq_fc_still_valid = 0;
}
wait 0,05;
}
level notify( "someone_touched_controls" );
self endon( "out_of_mana" );
self endon( "disconnect" );
self waittill( "al_all_setup" );
wait 1;
v_original_origin = ( self.origin[0], self.origin[1], 0 );
v_original_angles = self.angles;
v_forward_point = self.origin + anglestoforward( self.angles ) * 10;
v_original_forward_vec = vectornormalize( v_forward_point - self.origin );
while ( !flag( "afterlife_start_over" ) && level.sq_fc_still_valid )
{
v_new_forward_point = self.origin + anglestoforward( self.angles ) * 10;
v_new_forward_vec = vectornormalize( v_new_forward_point - self.origin );
move_length = length( ( self.origin[0], self.origin[1], 0 ) - v_original_origin );
if ( self actionslotonebuttonpressed() || self actionslottwobuttonpressed() || self actionslotthreebuttonpressed() || self actionslotfourbuttonpressed() || self adsbuttonpressed() || self attackbuttonpressed() || self fragbuttonpressed() || self inventorybuttonpressed() || self jumpbuttonpressed() || self meleebuttonpressed() || self secondaryoffhandbuttonpressed() || self sprintbuttonpressed() || self stancebuttonpressed() || self throwbuttonpressed() || self usebuttonpressed() || self changeseatbuttonpressed() || move_length > 2 || vectordot( v_original_forward_vec, v_new_forward_vec ) < 0.99 )
level.sq_fc_still_valid = 0;
wait 0.05;
}
level notify( "someone_touched_controls" );
}
watch_for_trigger_condition()
{
level waittill( "pre_end_game" );
if ( !level.sq_fc_still_valid )
{
return;
}
level.sndgameovermusicoverride = "game_over_nomove";
level.custom_intermission = ::player_intermission_prison;
players = getplayers();
_a94 = players;
_k94 = getFirstArrayKey( _a94 );
while ( isDefined( _k94 ) )
{
player = _a94[ _k94 ];
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_audio_log", player );
_k94 = getNextArrayKey( _a94, _k94 );
}
level waittill( "pre_end_game" );
if ( !level.sq_fc_still_valid )
return;
level.sndgameovermusicoverride = "game_over_nomove";
level.custom_intermission = ::player_intermission_prison;
players = getplayers();
foreach ( player in players )
maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_audio_log", player );
}
player_intermission_prison()
{
self closemenu();
self closeingamemenu();
level endon( "stop_intermission" );
self endon( "disconnect" );
self endon( "death" );
self notify( "_zombie_game_over" );
self.score = self.score_total;
self.sessionstate = "intermission";
self.spectatorclient = -1;
self.killcamentity = -1;
self.archivetime = 0;
self.psoffsettime = 0;
self.friendlydamage = undefined;
points = getstructarray( "dblock_cam", "targetname" );
if ( !isDefined( points ) || points.size == 0 )
{
points = getentarray( "info_intermission", "classname" );
if ( points.size < 1 )
{
self closemenu();
self closeingamemenu();
level endon( "stop_intermission" );
self endon( "disconnect" );
self endon( "death" );
self notify( "_zombie_game_over" );
self.score = self.score_total;
self.sessionstate = "intermission";
self.spectatorclient = -1;
self.killcamentity = -1;
self.archivetime = 0;
self.psoffsettime = 0;
self.friendlydamage = undefined;
points = getstructarray( "dblock_cam", "targetname" );
if ( !isdefined( points ) || points.size == 0 )
{
points = getentarray( "info_intermission", "classname" );
if ( points.size < 1 )
{
/#
println( "NO info_intermission POINTS IN MAP" );
println( "NO info_intermission POINTS IN MAP" );
#/
return;
}
}
self.game_over_bg = newclienthudelem( self );
self.game_over_bg.horzalign = "fullscreen";
self.game_over_bg.vertalign = "fullscreen";
self.game_over_bg setshader( "black", 640, 480 );
self.game_over_bg.alpha = 1;
visionsetnaked( "cheat_bw", 0,05 );
org = undefined;
while ( 1 )
{
points = array_randomize( points );
i = 0;
while ( i < points.size )
{
point = points[ i ];
if ( !isDefined( org ) )
{
self spawn( point.origin, point.angles );
}
if ( isDefined( points[ i ].target ) )
{
if ( !isDefined( org ) )
{
org = spawn( "script_model", self.origin + vectorScale( ( 0, 0, -1 ), 60 ) );
org setmodel( "tag_origin" );
}
org.origin = points[ i ].origin;
org.angles = points[ i ].angles;
j = 0;
while ( j < get_players().size )
{
player = get_players()[ j ];
player camerasetposition( org );
player camerasetlookat();
player cameraactivate( 1 );
j++;
}
speed = 20;
if ( isDefined( points[ i ].speed ) )
{
speed = points[ i ].speed;
}
target_point = getstruct( points[ i ].target, "targetname" );
dist = distance( points[ i ].origin, target_point.origin );
time = dist / speed;
q_time = time * 0,25;
if ( q_time > 1 )
{
q_time = 1;
}
self.game_over_bg fadeovertime( q_time );
self.game_over_bg.alpha = 0;
org moveto( target_point.origin, time, q_time, q_time );
org rotateto( target_point.angles, time, q_time, q_time );
wait ( time - q_time );
self.game_over_bg fadeovertime( q_time );
self.game_over_bg.alpha = 1;
wait q_time;
i++;
continue;
}
else
{
self.game_over_bg fadeovertime( 1 );
self.game_over_bg.alpha = 0;
wait 5;
self.game_over_bg thread maps/mp/zombies/_zm::fade_up_over_time( 1 );
}
i++;
}
}
return;
}
}
self.game_over_bg = newclienthudelem( self );
self.game_over_bg.horzalign = "fullscreen";
self.game_over_bg.vertalign = "fullscreen";
self.game_over_bg setshader( "black", 640, 480 );
self.game_over_bg.alpha = 1;
visionsetnaked( "cheat_bw", 0.05 );
org = undefined;
while ( true )
{
points = array_randomize( points );
for ( i = 0; i < points.size; i++ )
{
point = points[i];
if ( !isdefined( org ) )
self spawn( point.origin, point.angles );
if ( isdefined( points[i].target ) )
{
if ( !isdefined( org ) )
{
org = spawn( "script_model", self.origin + vectorscale( ( 0, 0, -1 ), 60.0 ) );
org setmodel( "tag_origin" );
}
org.origin = points[i].origin;
org.angles = points[i].angles;
for ( j = 0; j < get_players().size; j++ )
{
player = get_players()[j];
player camerasetposition( org );
player camerasetlookat();
player cameraactivate( 1 );
}
speed = 20;
if ( isdefined( points[i].speed ) )
speed = points[i].speed;
target_point = getstruct( points[i].target, "targetname" );
dist = distance( points[i].origin, target_point.origin );
time = dist / speed;
q_time = time * 0.25;
if ( q_time > 1 )
q_time = 1;
self.game_over_bg fadeovertime( q_time );
self.game_over_bg.alpha = 0;
org moveto( target_point.origin, time, q_time, q_time );
org rotateto( target_point.angles, time, q_time, q_time );
wait( time - q_time );
self.game_over_bg fadeovertime( q_time );
self.game_over_bg.alpha = 1;
wait( q_time );
continue;
}
self.game_over_bg fadeovertime( 1 );
self.game_over_bg.alpha = 0;
wait 5;
self.game_over_bg thread maps\mp\zombies\_zm::fade_up_over_time( 1 );
}
}
}

View File

@ -1,108 +1,112 @@
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_net;
#include maps\mp\zombies\_zm_zonemgr;
onplayerconnect_sq_wth()
{
if ( !isDefined( level.wth_lookat_point ) )
{
level.wth_lookat_point = getstruct( "struct_gg_look", "targetname" );
}
self thread track_player_eyes();
self thread play_scary_lightning();
if ( !isdefined( level.wth_lookat_point ) )
level.wth_lookat_point = getstruct( "struct_gg_look", "targetname" );
self thread track_player_eyes();
self thread play_scary_lightning();
}
track_player_eyes()
{
self endon( "disconnect" );
b_saw_the_wth = 0;
while ( !b_saw_the_wth )
{
n_time = 0;
while ( self adsbuttonpressed() && n_time < 25 )
{
n_time++;
wait 0,05;
}
if ( n_time >= 25 && self adsbuttonpressed() && self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_roof" ) && sq_is_weapon_sniper( self getcurrentweapon() ) && is_player_looking_at( level.wth_lookat_point.origin, 0,9, 0, undefined ) )
{
self do_player_general_vox( "general", "scare_react", undefined, 100 );
self playsoundtoplayer( "zmb_easteregg_face", self );
self.wth_elem = newclienthudelem( self );
self.wth_elem.horzalign = "fullscreen";
self.wth_elem.vertalign = "fullscreen";
self.wth_elem.sort = 1000;
self.wth_elem.foreground = 0;
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
self.wth_elem.hidewheninmenu = 1;
j_time = 0;
while ( self adsbuttonpressed() && j_time < 5 )
{
j_time++;
wait 0,05;
}
self.wth_elem destroy();
b_saw_the_wth = 1;
}
wait 0,05;
}
self endon( "disconnect" );
b_saw_the_wth = 0;
while ( !b_saw_the_wth )
{
n_time = 0;
while ( self adsbuttonpressed() && n_time < 25 )
{
n_time++;
wait 0.05;
}
if ( n_time >= 25 && self adsbuttonpressed() && self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_roof" ) && sq_is_weapon_sniper( self getcurrentweapon() ) && is_player_looking_at( level.wth_lookat_point.origin, 0.9, 0, undefined ) )
{
self do_player_general_vox( "general", "scare_react", undefined, 100 );
self playsoundtoplayer( "zmb_easteregg_face", self );
self.wth_elem = newclienthudelem( self );
self.wth_elem.horzalign = "fullscreen";
self.wth_elem.vertalign = "fullscreen";
self.wth_elem.sort = 1000;
self.wth_elem.foreground = 0;
self.wth_elem setshader( "zm_al_wth_zombie", 640, 480 );
self.wth_elem.hidewheninmenu = 1;
j_time = 0;
while ( self adsbuttonpressed() && j_time < 5 )
{
j_time++;
wait 0.05;
}
self.wth_elem destroy();
b_saw_the_wth = 1;
}
wait 0.05;
}
}
sq_is_weapon_sniper( str_weapon )
{
a_snipers = array( "dsr50", "barretm82" );
_a77 = a_snipers;
_k77 = getFirstArrayKey( _a77 );
while ( isDefined( _k77 ) )
{
str_sniper = _a77[ _k77 ];
if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) )
{
return 1;
}
_k77 = getNextArrayKey( _a77, _k77 );
}
return 0;
a_snipers = array( "dsr50", "barretm82" );
foreach ( str_sniper in a_snipers )
{
if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) )
return true;
}
return false;
}
play_scary_lightning()
{
self endon( "disconnect" );
while ( 1 )
{
while ( self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) && isDefined( self.b_lightning ) || !self.b_lightning && flag( "plane_zapped" ) )
{
wait 0,25;
}
if ( randomint( 100000 ) == 1337 )
{
self.scary_lighting = 1;
level setclientfield( "scripted_lightning_flash", 1 );
wait_network_frame();
self.sl_elem = newclienthudelem( self );
self.sl_elem.horzalign = "fullscreen";
self.sl_elem.vertalign = "fullscreen";
self.sl_elem.sort = 1000;
self.sl_elem.foreground = 0;
self.sl_elem.alpha = 0,6;
self.sl_elem setshader( "zm_al_wth_zombie", 640, 480 );
self.sl_elem.hidewheninmenu = 1;
self.sl_elem.alpha = 0;
self.sl_elem fadeovertime( 0,1 );
wait_network_frame();
self.sl_elem.alpha = 0,6;
self.sl_elem fadeovertime( 0,1 );
wait_network_frame();
self.sl_elem.alpha = 0;
self.sl_elem fadeovertime( 0,1 );
wait_network_frame();
self.sl_elem destroy();
self.scary_lightning = 0;
wait 10;
level setclientfield( "scripted_lightning_flash", 0 );
}
wait 1;
}
self endon( "disconnect" );
while ( true )
{
while ( !self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) || !( isdefined( self.b_lightning ) && self.b_lightning ) || flag( "plane_zapped" ) )
wait 0.25;
if ( randomint( 100000 ) == 1337 )
{
self.scary_lighting = 1;
level setclientfield( "scripted_lightning_flash", 1 );
wait_network_frame();
self.sl_elem = newclienthudelem( self );
self.sl_elem.horzalign = "fullscreen";
self.sl_elem.vertalign = "fullscreen";
self.sl_elem.sort = 1000;
self.sl_elem.foreground = 0;
self.sl_elem.alpha = 0.6;
self.sl_elem setshader( "zm_al_wth_zombie", 640, 480 );
self.sl_elem.hidewheninmenu = 1;
self.sl_elem.alpha = 0.0;
self.sl_elem fadeovertime( 0.1 );
wait_network_frame();
self.sl_elem.alpha = 0.6;
self.sl_elem fadeovertime( 0.1 );
wait_network_frame();
self.sl_elem.alpha = 0.0;
self.sl_elem fadeovertime( 0.1 );
wait_network_frame();
self.sl_elem destroy();
self.scary_lightning = 0;
wait 10;
level setclientfield( "scripted_lightning_flash", 0 );
}
wait 1;
}
}

View File

@ -1,13 +1,14 @@
//checked includes changed to match cerberus output
#include maps/mp/zombies/_zm_game_module;
#include maps/mp/zombies/_zm_game_module_utility;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_game_module_utility;
#include maps\mp\zombies\_zm_game_module;
register_game_module() //checked matches cerberus output
register_game_module()
{
level.game_module_grief_index = 9;
maps/mp/zombies/_zm_game_module::register_game_module( level.game_module_grief_index, "zgrief", ::onpreinitgametype, ::onpostinitgametype, undefined, ::onspawnzombie, ::onstartgametype );
level.game_module_grief_index = 9;
maps\mp\zombies\_zm_game_module::register_game_module( level.game_module_grief_index, "zgrief", ::onpreinitgametype, ::onpostinitgametype, undefined, ::onspawnzombie, ::onstartgametype );
}

View File

@ -1,7 +1,9 @@
//checked includes match cerberus output
#include maps/mp/zombies/_zm_game_module_utility;
#include maps/mp/zombies/_zm_game_module_meat_utility;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_game_module_meat_utility;
#include maps\mp\zombies\_zm_game_module_utility;

View File

@ -1,43 +1,46 @@
//checked includes match cerberus output
#include maps/mp/zombies/_zm_game_module_meat;
#include maps/mp/zombies/_zm_game_module_meat_utility;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/gametypes_zm/_hud_util;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\gametypes_zm\_hud_util;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_game_module_meat_utility;
#include maps\mp\zombies\_zm_game_module_meat;
init_item_meat() //checked matches cerberus output
init_item_meat()
{
level.item_meat_name = "item_meat_zm";
precacheitem( level.item_meat_name );
level.item_meat_name = "item_meat_zm";
precacheitem( level.item_meat_name );
}
move_ring( ring ) //checked changed to match cerberus output
move_ring( ring )
{
positions = getstructarray( ring.target, "targetname" );
positions = array_randomize( positions );
level endon( "end_game" );
while ( 1 )
{
foreach ( position in positions )
{
self moveto( position.origin, randomintrange( 30, 45 ) );
self waittill( "movedone" );
}
}
positions = getstructarray( ring.target, "targetname" );
positions = array_randomize( positions );
level endon( "end_game" );
while ( true )
{
foreach ( position in positions )
{
self moveto( position.origin, randomintrange( 30, 45 ) );
self waittill( "movedone" );
}
}
}
rotate_ring( forward ) //checked matches cerberus output
rotate_ring( forward )
{
level endon( "end_game" );
dir = -360;
if ( forward )
{
dir = 360;
}
while ( 1 )
{
self rotateyaw( dir, 9 );
wait 9;
}
level endon( "end_game" );
dir = -360;
if ( forward )
dir = 360;
while ( true )
{
self rotateyaw( dir, 9 );
wait 9;
}
}

View File

@ -1,217 +1,209 @@
#include maps/mp/zombies/_zm_magicbox;
#include maps/mp/zombies/_zm_unitrigger;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_unitrigger;
#include maps\mp\zombies\_zm_magicbox;
init()
{
registerclientfield( "zbarrier", "magicbox_initial_fx", 2000, 1, "int" );
registerclientfield( "zbarrier", "magicbox_amb_fx", 2000, 2, "int" );
registerclientfield( "zbarrier", "magicbox_open_fx", 2000, 1, "int" );
registerclientfield( "zbarrier", "magicbox_leaving_fx", 2000, 1, "int" );
level._effect[ "lght_marker" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_marker" );
level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie_alcatraz/fx_zmb_tranzit_marker_fl" );
level._effect[ "poltergeist" ] = loadfx( "system_elements/fx_null" );
level._effect[ "box_gone_ambient" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_amb" );
level._effect[ "box_here_ambient" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_arrive" );
level._effect[ "box_is_open" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_open" );
level._effect[ "box_is_locked" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_lock" );
level._effect[ "box_is_leaving" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_leave" );
level.using_locked_magicbox = 1;
level.chest_joker_model = "p6_anim_zm_al_magic_box_lock_red";
precachemodel( level.chest_joker_model );
level.chest_joker_custom_movement = ::custom_joker_movement;
level.magic_box_zbarrier_state_func = ::set_magic_box_zbarrier_state;
level thread wait_then_create_base_magic_box_fx();
level thread handle_fire_sale();
registerclientfield( "zbarrier", "magicbox_initial_fx", 2000, 1, "int" );
registerclientfield( "zbarrier", "magicbox_amb_fx", 2000, 2, "int" );
registerclientfield( "zbarrier", "magicbox_open_fx", 2000, 1, "int" );
registerclientfield( "zbarrier", "magicbox_leaving_fx", 2000, 1, "int" );
level._effect["lght_marker"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_marker" );
level._effect["lght_marker_flare"] = loadfx( "maps/zombie_alcatraz/fx_zmb_tranzit_marker_fl" );
level._effect["poltergeist"] = loadfx( "system_elements/fx_null" );
level._effect["box_gone_ambient"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_amb" );
level._effect["box_here_ambient"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_arrive" );
level._effect["box_is_open"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_open" );
level._effect["box_is_locked"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_lock" );
level._effect["box_is_leaving"] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_magicbox_leave" );
level.using_locked_magicbox = 1;
level.chest_joker_model = "p6_anim_zm_al_magic_box_lock_red";
precachemodel( level.chest_joker_model );
level.chest_joker_custom_movement = ::custom_joker_movement;
level.magic_box_zbarrier_state_func = ::set_magic_box_zbarrier_state;
level thread wait_then_create_base_magic_box_fx();
level thread handle_fire_sale();
}
custom_joker_movement()
{
v_origin = self.weapon_model.origin - vectorScale( ( 0, 1, 0 ), 5 );
self.weapon_model delete();
m_lock = spawn( "script_model", v_origin );
m_lock setmodel( level.chest_joker_model );
m_lock.angles = self.angles + vectorScale( ( 0, 1, 0 ), 180 );
wait 0,5;
level notify( "weapon_fly_away_start" );
wait 1;
m_lock rotateyaw( 3000, 4, 4 );
wait 3;
m_lock movez( 20, 0,5, 0,5 );
m_lock waittill( "movedone" );
m_lock movez( -100, 0,5, 0,5 );
m_lock waittill( "movedone" );
m_lock delete();
self notify( "box_moving" );
level notify( "weapon_fly_away_end" );
v_origin = self.weapon_model.origin - vectorscale( ( 0, 0, 1 ), 5.0 );
self.weapon_model delete();
m_lock = spawn( "script_model", v_origin );
m_lock setmodel( level.chest_joker_model );
m_lock.angles = self.angles + vectorscale( ( 0, 1, 0 ), 180.0 );
wait 0.5;
level notify( "weapon_fly_away_start" );
wait 1;
m_lock rotateyaw( 3000, 4, 4 );
wait 3;
m_lock movez( 20, 0.5, 0.5 );
m_lock waittill( "movedone" );
m_lock movez( -100, 0.5, 0.5 );
m_lock waittill( "movedone" );
m_lock delete();
self notify( "box_moving" );
level notify( "weapon_fly_away_end" );
}
wait_then_create_base_magic_box_fx()
{
while ( !isDefined( level.chests ) )
{
wait 0,5;
}
while ( !isDefined( level.chests[ level.chests.size - 1 ].zbarrier ) )
{
wait 0,5;
}
_a92 = level.chests;
_k92 = getFirstArrayKey( _a92 );
while ( isDefined( _k92 ) )
{
chest = _a92[ _k92 ];
chest.zbarrier setclientfield( "magicbox_initial_fx", 1 );
_k92 = getNextArrayKey( _a92, _k92 );
}
while ( !isdefined( level.chests ) )
wait 0.5;
while ( !isdefined( level.chests[level.chests.size - 1].zbarrier ) )
wait 0.5;
foreach ( chest in level.chests )
chest.zbarrier setclientfield( "magicbox_initial_fx", 1 );
}
set_magic_box_zbarrier_state( state )
{
i = 0;
while ( i < self getnumzbarrierpieces() )
{
self hidezbarrierpiece( i );
i++;
}
self notify( "zbarrier_state_change" );
switch( state )
{
case "away":
self showzbarrierpiece( 0 );
self.state = "away";
self.owner.is_locked = 0;
break;
case "arriving":
self showzbarrierpiece( 1 );
self thread magic_box_arrives();
self.state = "arriving";
break;
case "initial":
self showzbarrierpiece( 1 );
self thread magic_box_initial();
thread maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, ::maps/mp/zombies/_zm_magicbox::magicbox_unitrigger_think );
self.state = "close";
break;
case "open":
self showzbarrierpiece( 2 );
self thread magic_box_opens();
self.state = "open";
break;
case "close":
self showzbarrierpiece( 2 );
self thread magic_box_closes();
self.state = "close";
break;
case "leaving":
self showzbarrierpiece( 1 );
self thread magic_box_leaves();
self.state = "leaving";
self.owner.is_locked = 0;
break;
default:
if ( isDefined( level.custom_magicbox_state_handler ) )
{
self [[ level.custom_magicbox_state_handler ]]( state );
}
break;
}
for ( i = 0; i < self getnumzbarrierpieces(); i++ )
self hidezbarrierpiece( i );
self notify( "zbarrier_state_change" );
switch ( state )
{
case "away":
self showzbarrierpiece( 0 );
self.state = "away";
self.owner.is_locked = 0;
break;
case "arriving":
self showzbarrierpiece( 1 );
self thread magic_box_arrives();
self.state = "arriving";
break;
case "initial":
self showzbarrierpiece( 1 );
self thread magic_box_initial();
thread maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( self.owner.unitrigger_stub, maps\mp\zombies\_zm_magicbox::magicbox_unitrigger_think );
self.state = "close";
break;
case "open":
self showzbarrierpiece( 2 );
self thread magic_box_opens();
self.state = "open";
break;
case "close":
self showzbarrierpiece( 2 );
self thread magic_box_closes();
self.state = "close";
break;
case "leaving":
self showzbarrierpiece( 1 );
self thread magic_box_leaves();
self.state = "leaving";
self.owner.is_locked = 0;
break;
default:
if ( isdefined( level.custom_magicbox_state_handler ) )
self [[ level.custom_magicbox_state_handler ]]( state );
break;
}
}
magic_box_initial()
{
self setzbarrierpiecestate( 1, "open" );
wait 1;
self setclientfield( "magicbox_amb_fx", 1 );
self setzbarrierpiecestate( 1, "open" );
wait 1;
self setclientfield( "magicbox_amb_fx", 1 );
}
magic_box_arrives()
{
self setclientfield( "magicbox_leaving_fx", 0 );
self setclientfield( "magicbox_amb_fx", 1 );
self setzbarrierpiecestate( 1, "opening" );
while ( self getzbarrierpiecestate( 1 ) == "opening" )
{
wait 0,05;
}
self notify( "arrived" );
self.state = "close";
self setclientfield( "magicbox_leaving_fx", 0 );
self setclientfield( "magicbox_amb_fx", 1 );
self setzbarrierpiecestate( 1, "opening" );
while ( self getzbarrierpiecestate( 1 ) == "opening" )
wait 0.05;
self notify( "arrived" );
self.state = "close";
}
magic_box_leaves()
{
self setclientfield( "magicbox_leaving_fx", 1 );
self setclientfield( "magicbox_open_fx", 0 );
self setzbarrierpiecestate( 1, "closing" );
self playsound( "zmb_hellbox_rise" );
while ( self getzbarrierpiecestate( 1 ) == "closing" )
{
wait 0,1;
}
self notify( "left" );
self setclientfield( "magicbox_amb_fx", 0 );
self setclientfield( "magicbox_leaving_fx", 1 );
self setclientfield( "magicbox_open_fx", 0 );
self setzbarrierpiecestate( 1, "closing" );
self playsound( "zmb_hellbox_rise" );
while ( self getzbarrierpiecestate( 1 ) == "closing" )
wait 0.1;
self notify( "left" );
self setclientfield( "magicbox_amb_fx", 0 );
}
magic_box_opens()
{
self setclientfield( "magicbox_open_fx", 1 );
self setzbarrierpiecestate( 2, "opening" );
self playsound( "zmb_hellbox_open" );
while ( self getzbarrierpiecestate( 2 ) == "opening" )
{
wait 0,1;
}
self notify( "opened" );
self setclientfield( "magicbox_open_fx", 1 );
self setzbarrierpiecestate( 2, "opening" );
self playsound( "zmb_hellbox_open" );
while ( self getzbarrierpiecestate( 2 ) == "opening" )
wait 0.1;
self notify( "opened" );
}
magic_box_closes()
{
self setzbarrierpiecestate( 2, "closing" );
self playsound( "zmb_hellbox_close" );
while ( self getzbarrierpiecestate( 2 ) == "closing" )
{
wait 0,1;
}
self notify( "closed" );
self setclientfield( "magicbox_open_fx", 0 );
self setzbarrierpiecestate( 2, "closing" );
self playsound( "zmb_hellbox_close" );
while ( self getzbarrierpiecestate( 2 ) == "closing" )
wait 0.1;
self notify( "closed" );
self setclientfield( "magicbox_open_fx", 0 );
}
magic_box_do_weapon_rise()
{
self endon( "box_hacked_respin" );
self setzbarrierpiecestate( 3, "closed" );
self setzbarrierpiecestate( 4, "closed" );
wait_network_frame();
self zbarrierpieceuseboxriselogic( 3 );
self zbarrierpieceuseboxriselogic( 4 );
self showzbarrierpiece( 3 );
self showzbarrierpiece( 4 );
self setzbarrierpiecestate( 3, "opening" );
self setzbarrierpiecestate( 4, "opening" );
while ( self getzbarrierpiecestate( 3 ) != "open" )
{
wait 0,5;
}
self hidezbarrierpiece( 3 );
self hidezbarrierpiece( 4 );
self endon( "box_hacked_respin" );
self setzbarrierpiecestate( 3, "closed" );
self setzbarrierpiecestate( 4, "closed" );
wait_network_frame();
self zbarrierpieceuseboxriselogic( 3 );
self zbarrierpieceuseboxriselogic( 4 );
self showzbarrierpiece( 3 );
self showzbarrierpiece( 4 );
self setzbarrierpiecestate( 3, "opening" );
self setzbarrierpiecestate( 4, "opening" );
while ( self getzbarrierpiecestate( 3 ) != "open" )
wait 0.5;
self hidezbarrierpiece( 3 );
self hidezbarrierpiece( 4 );
}
handle_fire_sale()
{
while ( 1 )
{
level waittill( "fire_sale_off" );
i = 0;
while ( i < level.chests.size )
{
if ( level.chest_index != i && isDefined( level.chests[ i ].was_temp ) )
{
level.chests[ i ].zbarrier setclientfield( "magicbox_amb_fx", 0 );
}
i++;
}
}
while ( true )
{
level waittill( "fire_sale_off" );
for ( i = 0; i < level.chests.size; i++ )
{
if ( level.chest_index != i && isdefined( level.chests[i].was_temp ) )
level.chests[i].zbarrier setclientfield( "magicbox_amb_fx", 0 );
}
}
}

View File

@ -1,169 +1,172 @@
//checked includes match cerberus output
#include maps/mp/_visionset_mgr;
#include maps/mp/zombies/_zm_perks;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_net;
#include maps\mp\zombies\_zm_perks;
#include maps\mp\_visionset_mgr;
enable_divetonuke_perk_for_level() //checked matches cerberus output
enable_divetonuke_perk_for_level()
{
maps/mp/zombies/_zm_perks::register_perk_basic_info( "specialty_flakjacket", "divetonuke", 2000, &"ZOMBIE_PERK_DIVETONUKE", "zombie_perk_bottle_nuke" );
maps/mp/zombies/_zm_perks::register_perk_precache_func( "specialty_flakjacket", ::divetonuke_precache );
maps/mp/zombies/_zm_perks::register_perk_clientfields( "specialty_flakjacket", ::divetonuke_register_clientfield, ::divetonuke_set_clientfield );
maps/mp/zombies/_zm_perks::register_perk_machine( "specialty_flakjacket", ::divetonuke_perk_machine_setup, ::divetonuke_perk_machine_think );
maps/mp/zombies/_zm_perks::register_perk_host_migration_func( "specialty_flakjacket", ::divetonuke_host_migration_func );
maps\mp\zombies\_zm_perks::register_perk_basic_info( "specialty_flakjacket", "divetonuke", 2000, &"ZOMBIE_PERK_DIVETONUKE", "zombie_perk_bottle_nuke" );
maps\mp\zombies\_zm_perks::register_perk_precache_func( "specialty_flakjacket", ::divetonuke_precache );
maps\mp\zombies\_zm_perks::register_perk_clientfields( "specialty_flakjacket", ::divetonuke_register_clientfield, ::divetonuke_set_clientfield );
maps\mp\zombies\_zm_perks::register_perk_machine( "specialty_flakjacket", ::divetonuke_perk_machine_setup, ::divetonuke_perk_machine_think );
maps\mp\zombies\_zm_perks::register_perk_host_migration_func( "specialty_flakjacket", ::divetonuke_host_migration_func );
}
init_divetonuke() //checked matches cerberus output
init_divetonuke()
{
level.zombiemode_divetonuke_perk_func = ::divetonuke_explode;
maps/mp/_visionset_mgr::vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 );
level._effect[ "divetonuke_groundhit" ] = loadfx( "maps/zombie/fx_zmb_phdflopper_exp" );
set_zombie_var( "zombie_perk_divetonuke_radius", 300 );
set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 );
set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 );
level.zombiemode_divetonuke_perk_func = ::divetonuke_explode;
maps\mp\_visionset_mgr::vsmgr_register_info( "visionset", "zm_perk_divetonuke", 9000, 400, 5, 1 );
level._effect["divetonuke_groundhit"] = loadfx( "maps/zombie/fx_zmb_phdflopper_exp" );
set_zombie_var( "zombie_perk_divetonuke_radius", 300 );
set_zombie_var( "zombie_perk_divetonuke_min_damage", 1000 );
set_zombie_var( "zombie_perk_divetonuke_max_damage", 5000 );
}
divetonuke_precache() //checked matches cerberus output
divetonuke_precache()
{
if ( isDefined( level.divetonuke_precache_override_func ) )
{
[[ level.divetonuke_precache_override_func ]]();
return;
}
precacheitem( "zombie_perk_bottle_nuke" );
precacheshader( "specialty_divetonuke_zombies" );
precachemodel( "zombie_vending_nuke" );
precachemodel( "zombie_vending_nuke_on" );
precachestring( &"ZOMBIE_PERK_DIVETONUKE" );
level._effect[ "divetonuke_light" ] = loadfx( "misc/fx_zombie_cola_dtap_on" );
level.machine_assets[ "divetonuke" ] = spawnstruct();
level.machine_assets[ "divetonuke" ].weapon = "zombie_perk_bottle_nuke";
level.machine_assets[ "divetonuke" ].off_model = "zombie_vending_nuke";
level.machine_assets[ "divetonuke" ].on_model = "zombie_vending_nuke_on";
if ( isdefined( level.divetonuke_precache_override_func ) )
{
[[ level.divetonuke_precache_override_func ]]();
return;
}
precacheitem( "zombie_perk_bottle_nuke" );
precacheshader( "specialty_divetonuke_zombies" );
precachemodel( "zombie_vending_nuke" );
precachemodel( "zombie_vending_nuke_on" );
precachestring( &"ZOMBIE_PERK_DIVETONUKE" );
level._effect["divetonuke_light"] = loadfx( "misc/fx_zombie_cola_dtap_on" );
level.machine_assets["divetonuke"] = spawnstruct();
level.machine_assets["divetonuke"].weapon = "zombie_perk_bottle_nuke";
level.machine_assets["divetonuke"].off_model = "zombie_vending_nuke";
level.machine_assets["divetonuke"].on_model = "zombie_vending_nuke_on";
}
divetonuke_register_clientfield() //checked matches cerberus output
divetonuke_register_clientfield()
{
registerclientfield( "toplayer", "perk_dive_to_nuke", 9000, 1, "int" );
registerclientfield( "toplayer", "perk_dive_to_nuke", 9000, 1, "int" );
}
divetonuke_set_clientfield( state ) //checked matches cerberus output
divetonuke_set_clientfield( state )
{
self setclientfieldtoplayer( "perk_dive_to_nuke", state );
self setclientfieldtoplayer( "perk_dive_to_nuke", state );
}
divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision ) //checked matches cerberus output
divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision )
{
use_trigger.script_sound = "mus_perks_phd_jingle";
use_trigger.script_string = "divetonuke_perk";
use_trigger.script_label = "mus_perks_phd_sting";
use_trigger.target = "vending_divetonuke";
perk_machine.script_string = "divetonuke_perk";
perk_machine.targetname = "vending_divetonuke";
if ( isDefined( bump_trigger ) )
{
bump_trigger.script_string = "divetonuke_perk";
}
use_trigger.script_sound = "mus_perks_phd_jingle";
use_trigger.script_string = "divetonuke_perk";
use_trigger.script_label = "mus_perks_phd_sting";
use_trigger.target = "vending_divetonuke";
perk_machine.script_string = "divetonuke_perk";
perk_machine.targetname = "vending_divetonuke";
if ( isdefined( bump_trigger ) )
bump_trigger.script_string = "divetonuke_perk";
}
divetonuke_perk_machine_think() //checked changed to match cerberus output
divetonuke_perk_machine_think()
{
init_divetonuke();
while ( 1 )
{
machine = getentarray( "vending_divetonuke", "targetname" );
machine_triggers = getentarray( "vending_divetonuke", "target" );
for ( i = 0; i < machine.size; i++ )
{
machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].off_model );
}
array_thread( machine_triggers, ::set_power_on, 0 );
level thread do_initial_power_off_callback( machine, "divetonuke" );
level waittill( "divetonuke_on" );
for ( i = 0; i < machine.size; i++ )
{
machine[ i ] setmodel( level.machine_assets[ "divetonuke" ].on_model );
machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0.3, 0.4, 3 );
machine[ i ] playsound( "zmb_perks_power_on" );
machine[ i ] thread perk_fx( "divetonuke_light" );
machine[ i ] thread play_loop_on_machine();
}
level notify( "specialty_flakjacket_power_on" );
array_thread( machine_triggers, ::set_power_on, 1 );
if ( isDefined( level.machine_assets[ "divetonuke" ].power_on_callback ) )
{
array_thread( machine, level.machine_assets[ "divetonuke" ].power_on_callback );
}
level waittill( "divetonuke_off" );
if ( isDefined( level.machine_assets[ "divetonuke" ].power_off_callback ) )
{
array_thread( machine, level.machine_assets[ "divetonuke" ].power_off_callback );
}
array_thread( machine, ::turn_perk_off );
}
init_divetonuke();
while ( true )
{
machine = getentarray( "vending_divetonuke", "targetname" );
machine_triggers = getentarray( "vending_divetonuke", "target" );
for ( i = 0; i < machine.size; i++ )
machine[i] setmodel( level.machine_assets["divetonuke"].off_model );
array_thread( machine_triggers, ::set_power_on, 0 );
level thread do_initial_power_off_callback( machine, "divetonuke" );
level waittill( "divetonuke_on" );
for ( i = 0; i < machine.size; i++ )
{
machine[i] setmodel( level.machine_assets["divetonuke"].on_model );
machine[i] vibrate( vectorscale( ( 0, -1, 0 ), 100.0 ), 0.3, 0.4, 3 );
machine[i] playsound( "zmb_perks_power_on" );
machine[i] thread perk_fx( "divetonuke_light" );
machine[i] thread play_loop_on_machine();
}
level notify( "specialty_flakjacket_power_on" );
array_thread( machine_triggers, ::set_power_on, 1 );
if ( isdefined( level.machine_assets["divetonuke"].power_on_callback ) )
array_thread( machine, level.machine_assets["divetonuke"].power_on_callback );
level waittill( "divetonuke_off" );
if ( isdefined( level.machine_assets["divetonuke"].power_off_callback ) )
array_thread( machine, level.machine_assets["divetonuke"].power_off_callback );
array_thread( machine, ::turn_perk_off );
}
}
divetonuke_host_migration_func() //checked changed to match cerberus output
divetonuke_host_migration_func()
{
flop = getentarray( "vending_divetonuke", "targetname" );
foreach ( perk in flop )
{
if ( isDefined( perk.model ) && perk.model == level.machine_assets[ "divetonuke" ].on_model )
{
perk perk_fx( undefined, 1 );
perk thread perk_fx( "divetonuke_light" );
}
}
flop = getentarray( "vending_divetonuke", "targetname" );
foreach ( perk in flop )
{
if ( isdefined( perk.model ) && perk.model == level.machine_assets["divetonuke"].on_model )
{
perk perk_fx( undefined, 1 );
perk thread perk_fx( "divetonuke_light" );
}
}
}
divetonuke_explode( attacker, origin )
{
radius = level.zombie_vars[ "zombie_perk_divetonuke_radius" ];
min_damage = level.zombie_vars[ "zombie_perk_divetonuke_min_damage" ];
max_damage = level.zombie_vars[ "zombie_perk_divetonuke_max_damage" ];
if ( isdefined( level.flopper_network_optimized ) && level.flopper_network_optimized )
{
attacker thread divetonuke_explode_network_optimized(origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" );
}
else
{
radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" );
}
playfx( level._effect[ "divetonuke_groundhit" ], origin );
attacker playsound( "zmb_phdflop_explo" );
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
wait 1;
maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker );
radius = level.zombie_vars["zombie_perk_divetonuke_radius"];
min_damage = level.zombie_vars["zombie_perk_divetonuke_min_damage"];
max_damage = level.zombie_vars["zombie_perk_divetonuke_max_damage"];
if ( isdefined( level.flopper_network_optimized ) && level.flopper_network_optimized )
attacker thread divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, "MOD_GRENADE_SPLASH" );
else
radiusdamage( origin, radius, max_damage, min_damage, attacker, "MOD_GRENADE_SPLASH" );
playfx( level._effect["divetonuke_groundhit"], origin );
attacker playsound( "zmb_phdflop_explo" );
maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
wait 1;
maps\mp\_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker );
}
divetonuke_explode_network_optimized(origin, radius, max_damage, min_damage, damage_mod)
divetonuke_explode_network_optimized( origin, radius, max_damage, min_damage, damage_mod )
{
self endon( "disconnect" );
a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius );
network_stall_counter = 0;
if ( isdefined( a_zombies ) )
{
i = 0;
while ( i < a_zombies.size )
{
e_zombie = a_zombies[ i ];
if ( !isdefined( e_zombie ) || !isalive( e_zombie ) )
{
i++;
continue;
}
dist = distance( e_zombie.origin, origin );
damage = ( min_damage + max_damage ) - min_damage * ( 1 - ( dist / radius ) );
e_zombie dodamage(damage, e_zombie.origin, self, self, 0, damage_mod);
network_stall_counter--;
if ( network_stall_counter <= 0 )
{
wait_network_frame();
network_stall_counter = randomintrange( 1, 3 );
}
i++;
}
}
self endon( "disconnect" );
a_zombies = get_array_of_closest( origin, get_round_enemy_array(), undefined, undefined, radius );
network_stall_counter = 0;
if ( isdefined( a_zombies ) )
{
for ( i = 0; i < a_zombies.size; i++ )
{
e_zombie = a_zombies[i];
if ( !isdefined( e_zombie ) || !isalive( e_zombie ) )
continue;
dist = distance( e_zombie.origin, origin );
damage = min_damage + ( max_damage - min_damage ) * ( 1.0 - dist / radius );
e_zombie dodamage( damage, e_zombie.origin, self, self, 0, damage_mod );
network_stall_counter--;
if ( network_stall_counter <= 0 )
{
wait_network_frame();
network_stall_counter = randomintrange( 1, 3 );
}
}
}
}

View File

@ -1,391 +0,0 @@
#include maps/mp/zombies/_zm_ai_basic;
#include maps/mp/animscripts/shared;
#include maps/mp/zombies/_zm_score;
#include maps/mp/zombies/_zm_perks;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
enable_electric_cherry_perk_for_level()
{
maps/mp/zombies/_zm_perks::register_perk_basic_info( "specialty_grenadepulldeath", "electric_cherry", 2000, &"ZM_PRISON_PERK_CHERRY", "zombie_perk_bottle_cherry" );
maps/mp/zombies/_zm_perks::register_perk_precache_func( "specialty_grenadepulldeath", ::electic_cherry_precache );
maps/mp/zombies/_zm_perks::register_perk_clientfields( "specialty_grenadepulldeath", ::electric_cherry_register_clientfield, ::electric_cherry_set_clientfield );
maps/mp/zombies/_zm_perks::register_perk_threads( "specialty_grenadepulldeath", ::electric_cherry_reload_attack, ::electric_cherry_perk_lost );
maps/mp/zombies/_zm_perks::register_perk_machine( "specialty_grenadepulldeath", ::electric_cherry_perk_machine_setup, ::electric_cherry_perk_machine_think );
maps/mp/zombies/_zm_perks::register_perk_host_migration_func( "specialty_grenadepulldeath", ::electric_cherry_host_migration_func );
}
init_electric_cherry()
{
level.custom_laststand_func = ::electric_cherry_laststand;
set_zombie_var( "tesla_head_gib_chance", 50 );
registerclientfield( "allplayers", "electric_cherry_reload_fx", 9000, 2, "int" );
}
electic_cherry_precache()
{
precacheitem( "zombie_perk_bottle_cherry" );
precacheshader( "specialty_fastreload_zombies" );
precachemodel( "p6_zm_vending_electric_cherry_off" );
precachemodel( "p6_zm_vending_electric_cherry_on" );
precachestring( &"ZM_PRISON_PERK_CHERRY" );
level._effect[ "electriccherry" ] = loadfx( "misc/fx_zombie_cola_on" );
level._effect[ "electric_cherry_explode" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_down" );
level._effect[ "electric_cherry_reload_small" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_sm" );
level._effect[ "electric_cherry_reload_medium" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_player" );
level._effect[ "electric_cherry_reload_large" ] = loadfx( "maps/zombie_alcatraz/fx_alcatraz_electric_cherry_lg" );
level._effect[ "tesla_shock" ] = loadfx( "maps/zombie/fx_zombie_tesla_shock" );
level._effect[ "tesla_shock_secondary" ] = loadfx( "maps/zombie/fx_zombie_tesla_shock_secondary" );
}
electric_cherry_register_clientfield()
{
registerclientfield( "toplayer", "perk_electric_cherry", 9000, 1, "int" );
}
electric_cherry_set_clientfield( state )
{
self setclientfieldtoplayer( "perk_electric_cherry", state );
}
electric_cherry_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collision )
{
use_trigger.script_sound = "mus_perks_cherry_jingle";
use_trigger.script_string = "electric_cherry_perk";
use_trigger.script_label = "mus_perks_cherry_sting";
use_trigger.target = "vending_electriccherry";
perk_machine.script_string = "electriccherry_perk";
perk_machine.targetname = "vendingelectric_cherry";
if ( isDefined( bump_trigger ) )
{
bump_trigger.script_string = "electriccherry_perk";
}
}
electric_cherry_perk_machine_think()
{
init_electric_cherry();
while ( 1 )
{
machine = getentarray( "vendingelectric_cherry", "targetname" );
machine_triggers = getentarray( "vending_electriccherry", "target" );
i = 0;
while ( i < machine.size )
{
machine[ i ] setmodel( "p6_zm_vending_electric_cherry_off" );
i++;
}
level thread do_initial_power_off_callback( machine, "electriccherry" );
array_thread( machine_triggers, ::maps/mp/zombies/_zm_perks::set_power_on, 0 );
level waittill( "electric_cherry_on" );
i = 0;
while ( i < machine.size )
{
machine[ i ] setmodel( "p6_zm_vending_electric_cherry_on" );
machine[ i ] vibrate( vectorScale( ( 0, -1, 0 ), 100 ), 0,3, 0,4, 3 );
machine[ i ] playsound( "zmb_perks_power_on" );
machine[ i ] thread perk_fx( "electriccherry" );
machine[ i ] thread play_loop_on_machine();
i++;
}
level notify( "specialty_grenadepulldeath_power_on" );
array_thread( machine_triggers, ::maps/mp/zombies/_zm_perks::set_power_on, 1 );
level waittill( "electric_cherry_off" );
array_thread( machine, ::maps/mp/zombies/_zm_perks::turn_perk_off );
}
}
electric_cherry_host_migration_func()
{
a_electric_cherry_perk_machines = getentarray( "vending_electriccherry", "targetname" );
_a125 = a_electric_cherry_perk_machines;
_k125 = getFirstArrayKey( _a125 );
while ( isDefined( _k125 ) )
{
perk_machine = _a125[ _k125 ];
if ( isDefined( perk_machine.model ) && perk_machine.model == "p6_zm_vending_electric_cherry_on" )
{
perk_machine perk_fx( undefined, 1 );
perk_machine thread perk_fx( "electriccherry" );
}
_k125 = getNextArrayKey( _a125, _k125 );
}
}
electric_cherry_laststand()
{
visionsetlaststand( "zombie_last_stand", 1 );
if ( isDefined( self ) )
{
playfx( level._effect[ "electric_cherry_explode" ], self.origin );
self playsound( "zmb_cherry_explode" );
self notify( "electric_cherry_start" );
wait 0,05;
a_zombies = get_round_enemy_array();
a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, 500 );
i = 0;
while ( i < a_zombies.size )
{
if ( isalive( self ) )
{
if ( a_zombies[ i ].health <= 1000 )
{
a_zombies[ i ] thread electric_cherry_death_fx();
if ( isDefined( self.cherry_kills ) )
{
self.cherry_kills++;
}
self maps/mp/zombies/_zm_score::add_to_player_score( 40 );
}
else
{
a_zombies[ i ] thread electric_cherry_stun();
a_zombies[ i ] thread electric_cherry_shock_fx();
}
wait 0,1;
a_zombies[ i ] dodamage( 1000, self.origin, self, self, "none" );
}
i++;
}
self notify( "electric_cherry_end" );
}
}
electric_cherry_death_fx()
{
self endon( "death" );
tag = "J_SpineUpper";
fx = "tesla_shock";
if ( self.isdog )
{
tag = "J_Spine1";
}
self playsound( "zmb_elec_jib_zombie" );
network_safe_play_fx_on_tag( "tesla_death_fx", 2, level._effect[ fx ], self, tag );
if ( isDefined( self.tesla_head_gib_func ) && !self.head_gibbed )
{
[[ self.tesla_head_gib_func ]]();
}
}
electric_cherry_shock_fx()
{
self endon( "death" );
tag = "J_SpineUpper";
fx = "tesla_shock_secondary";
if ( self.isdog )
{
tag = "J_Spine1";
}
self playsound( "zmb_elec_jib_zombie" );
network_safe_play_fx_on_tag( "tesla_shock_fx", 2, level._effect[ fx ], self, tag );
}
electric_cherry_stun()
{
self endon( "death" );
self notify( "stun_zombie" );
self endon( "stun_zombie" );
if ( self.health <= 0 )
{
/#
iprintln( "trying to stun a dead zombie" );
#/
return;
}
if ( self.ai_state != "find_flesh" )
{
return;
}
self.forcemovementscriptstate = 1;
self.ignoreall = 1;
i = 0;
while ( i < 2 )
{
self animscripted( self.origin, self.angles, "zm_afterlife_stun" );
self maps/mp/animscripts/shared::donotetracks( "stunned" );
i++;
}
self.forcemovementscriptstate = 0;
self.ignoreall = 0;
self setgoalpos( self.origin );
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
}
electric_cherry_reload_attack()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "stop_electric_cherry_reload_attack" );
self.wait_on_reload = [];
self.consecutive_electric_cherry_attacks = 0;
while ( 1 )
{
self waittill( "reload_start" );
str_current_weapon = self getcurrentweapon();
while ( isinarray( self.wait_on_reload, str_current_weapon ) )
{
continue;
}
self.wait_on_reload[ self.wait_on_reload.size ] = str_current_weapon;
self.consecutive_electric_cherry_attacks++;
n_clip_current = self getweaponammoclip( str_current_weapon );
n_clip_max = weaponclipsize( str_current_weapon );
n_fraction = n_clip_current / n_clip_max;
perk_radius = linear_map( n_fraction, 1, 0, 32, 128 );
perk_dmg = linear_map( n_fraction, 1, 0, 1, 1045 );
self thread check_for_reload_complete( str_current_weapon );
if ( isDefined( self ) )
{
switch( self.consecutive_electric_cherry_attacks )
{
case 0:
case 1:
n_zombie_limit = undefined;
break;
case 2:
n_zombie_limit = 8;
break;
case 3:
n_zombie_limit = 4;
break;
case 4:
n_zombie_limit = 2;
break;
default:
n_zombie_limit = 0;
}
self thread electric_cherry_cooldown_timer( str_current_weapon );
if ( isDefined( n_zombie_limit ) && n_zombie_limit == 0 )
{
continue;
}
self thread electric_cherry_reload_fx( n_fraction );
self notify( "electric_cherry_start" );
self playsound( "zmb_cherry_explode" );
a_zombies = get_round_enemy_array();
a_zombies = get_array_of_closest( self.origin, a_zombies, undefined, undefined, perk_radius );
n_zombies_hit = 0;
i = 0;
while ( i < a_zombies.size )
{
if ( isalive( self ) )
{
if ( isDefined( n_zombie_limit ) )
{
if ( n_zombies_hit < n_zombie_limit )
{
n_zombies_hit++;
break;
}
else }
else if ( a_zombies[ i ].health <= perk_dmg )
{
a_zombies[ i ] thread electric_cherry_death_fx();
if ( isDefined( self.cherry_kills ) )
{
self.cherry_kills++;
}
self maps/mp/zombies/_zm_score::add_to_player_score( 40 );
}
else
{
if ( !isDefined( a_zombies[ i ].is_brutus ) )
{
a_zombies[ i ] thread electric_cherry_stun();
}
a_zombies[ i ] thread electric_cherry_shock_fx();
}
wait 0,1;
a_zombies[ i ] dodamage( perk_dmg, self.origin, self, self, "none" );
}
i++;
}
self notify( "electric_cherry_end" );
}
}
}
electric_cherry_cooldown_timer( str_current_weapon )
{
self notify( "electric_cherry_cooldown_started" );
self endon( "electric_cherry_cooldown_started" );
self endon( "death" );
self endon( "disconnect" );
n_reload_time = weaponreloadtime( str_current_weapon );
if ( self hasperk( "specialty_fastreload" ) )
{
n_reload_time *= getDvarFloat( "perk_weapReloadMultiplier" );
}
n_cooldown_time = n_reload_time + 3;
wait n_cooldown_time;
self.consecutive_electric_cherry_attacks = 0;
}
check_for_reload_complete( weapon )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "player_lost_weapon_" + weapon );
self thread weapon_replaced_monitor( weapon );
while ( 1 )
{
self waittill( "reload" );
str_current_weapon = self getcurrentweapon();
if ( str_current_weapon == weapon )
{
arrayremovevalue( self.wait_on_reload, weapon );
self notify( "weapon_reload_complete_" + weapon );
return;
}
else
{
}
}
}
weapon_replaced_monitor( weapon )
{
self endon( "death" );
self endon( "disconnect" );
self endon( "weapon_reload_complete_" + weapon );
while ( 1 )
{
self waittill( "weapon_change" );
primaryweapons = self getweaponslistprimaries();
if ( !isinarray( primaryweapons, weapon ) )
{
self notify( "player_lost_weapon_" + weapon );
arrayremovevalue( self.wait_on_reload, weapon );
return;
}
else
{
}
}
}
electric_cherry_reload_fx( n_fraction )
{
if ( n_fraction >= 0,67 )
{
self setclientfield( "electric_cherry_reload_fx", 1 );
}
else if ( n_fraction >= 0,33 && n_fraction < 0,67 )
{
self setclientfield( "electric_cherry_reload_fx", 2 );
}
else
{
self setclientfield( "electric_cherry_reload_fx", 3 );
}
wait 1;
self setclientfield( "electric_cherry_reload_fx", 0 );
}
electric_cherry_perk_lost()
{
self notify( "stop_electric_cherry_reload_attack" );
}

View File

@ -1,278 +1,302 @@
#include maps/mp/zombies/_zm_stats;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_stats;
init()
{
if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
{
precachemodel( "t5_weapon_ballistic_knife_projectile" );
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
}
if ( !isdefined( level.ballistic_knife_autorecover ) )
level.ballistic_knife_autorecover = 1;
if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
{
precachemodel( "t5_weapon_ballistic_knife_projectile" );
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
}
}
on_spawn( watcher, player )
{
player endon( "death" );
player endon( "disconnect" );
player endon( "zmb_lost_knife" );
level endon( "game_ended" );
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
isfriendly = 0;
if ( isDefined( endpos ) )
{
retrievable_model = spawn( "script_model", endpos );
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
retrievable_model setowner( player );
retrievable_model.owner = player;
retrievable_model.angles = angles;
retrievable_model.name = watcher.weapon;
if ( isDefined( prey ) )
{
if ( isplayer( prey ) && player.team == prey.team )
{
isfriendly = 1;
}
else
{
if ( isai( prey ) && player.team == prey.team )
{
isfriendly = 1;
}
}
if ( !isfriendly )
{
retrievable_model linkto( prey, bone );
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
}
else
{
if ( isfriendly )
{
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
normal = ( 0, 0, 1 );
}
}
}
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
if ( isfriendly )
{
retrievable_model waittill( "stationary" );
}
retrievable_model thread drop_knives_to_ground( player );
if ( isfriendly )
{
player notify( "ballistic_knife_stationary" );
}
else
{
player notify( "ballistic_knife_stationary" );
}
retrievable_model thread wait_to_show_glowing_model( prey );
}
player endon( "death" );
player endon( "disconnect" );
player endon( "zmb_lost_knife" );
level endon( "game_ended" );
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
isfriendly = 0;
if ( isdefined( endpos ) )
{
retrievable_model = spawn( "script_model", endpos );
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
retrievable_model setowner( player );
retrievable_model.owner = player;
retrievable_model.angles = angles;
retrievable_model.name = watcher.weapon;
if ( isdefined( prey ) )
{
if ( isplayer( prey ) && player.team == prey.team )
isfriendly = 1;
else if ( isai( prey ) && player.team == prey.team )
isfriendly = 1;
if ( !isfriendly )
{
retrievable_model linkto( prey, bone );
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
}
else if ( isfriendly )
{
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
normal = ( 0, 0, 1 );
}
}
watcher.objectarray[watcher.objectarray.size] = retrievable_model;
if ( isfriendly )
retrievable_model waittill( "stationary" );
retrievable_model thread drop_knives_to_ground( player );
if ( isfriendly )
player notify( "ballistic_knife_stationary", retrievable_model, normal );
else
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
retrievable_model thread wait_to_show_glowing_model( prey );
}
}
wait_to_show_glowing_model( prey )
{
level endon( "game_ended" );
self endon( "death" );
wait 2;
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
level endon( "game_ended" );
self endon( "death" );
wait 2;
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
}
on_spawn_retrieve_trigger( watcher, player )
{
player endon( "death" );
player endon( "disconnect" );
player endon( "zmb_lost_knife" );
level endon( "game_ended" );
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
if ( !isDefined( retrievable_model ) )
{
return;
}
trigger_pos = [];
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
{
trigger_pos[ 0 ] = prey.origin[ 0 ];
trigger_pos[ 1 ] = prey.origin[ 1 ];
trigger_pos[ 2 ] = prey.origin[ 2 ] + 10;
}
else
{
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] );
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] );
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] );
}
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) );
pickup_trigger setcursorhint( "HINT_NOICON" );
pickup_trigger.owner = player;
retrievable_model.retrievabletrigger = pickup_trigger;
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
if ( isDefined( hint_string ) )
{
pickup_trigger sethintstring( hint_string );
}
else
{
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
}
pickup_trigger setteamfortrigger( player.team );
player clientclaimtrigger( pickup_trigger );
pickup_trigger enablelinkto();
if ( isDefined( prey ) )
{
pickup_trigger linkto( prey );
}
else
{
pickup_trigger linkto( retrievable_model );
}
if ( isDefined( level.knife_planted ) )
{
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
}
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
player thread watch_shutdown( pickup_trigger, retrievable_model );
player endon( "death" );
player endon( "disconnect" );
player endon( "zmb_lost_knife" );
level endon( "game_ended" );
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
if ( !isdefined( retrievable_model ) )
return;
trigger_pos = [];
if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
{
trigger_pos[0] = prey.origin[0];
trigger_pos[1] = prey.origin[1];
trigger_pos[2] = prey.origin[2] + 10;
}
else
{
trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0];
trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1];
trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2];
}
if ( is_true( level.ballistic_knife_autorecover ) )
{
trigger_pos[2] -= 50.0;
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
}
else
{
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
pickup_trigger setcursorhint( "HINT_NOICON" );
}
pickup_trigger.owner = player;
retrievable_model.retrievabletrigger = pickup_trigger;
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
if ( isdefined( hint_string ) )
pickup_trigger sethintstring( hint_string );
else
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
pickup_trigger setteamfortrigger( player.team );
player clientclaimtrigger( pickup_trigger );
pickup_trigger enablelinkto();
if ( isdefined( prey ) )
pickup_trigger linkto( prey );
else
pickup_trigger linkto( retrievable_model );
if ( isdefined( level.knife_planted ) )
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
player thread watch_shutdown( pickup_trigger, retrievable_model );
}
debug_print( endpos )
{
/#
self endon( "death" );
while ( 1 )
{
print3d( endpos, "pickup_trigger" );
wait 0,05;
self endon( "death" );
while ( true )
{
print3d( endpos, "pickup_trigger" );
wait 0.05;
}
#/
}
}
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
{
self endon( "death" );
self endon( "delete" );
level endon( "game_ended" );
while ( 1 )
{
trigger waittill( "trigger", player );
while ( !isalive( player ) )
{
continue;
}
while ( !player isonground() )
{
continue;
}
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
{
continue;
}
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
{
continue;
}
if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() )
{
if ( isDefined( playersoundonuse ) )
{
player playlocalsound( playersoundonuse );
}
if ( isDefined( npcsoundonuse ) )
{
player playsound( npcsoundonuse );
}
player thread [[ callback ]]( weapon, model, trigger );
return;
}
else
{
}
}
self endon( "death" );
self endon( "delete" );
level endon( "game_ended" );
max_ammo = weaponmaxammo( weapon ) + 1;
autorecover = is_true( level.ballistic_knife_autorecover );
while ( true )
{
trigger waittill( "trigger", player );
if ( !isalive( player ) )
continue;
if ( !player isonground() && !is_true( trigger.force_pickup ) )
continue;
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
continue;
if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
continue;
ammo_stock = player getweaponammostock( weapon );
ammo_clip = player getweaponammoclip( weapon );
current_weapon = player getcurrentweapon();
total_ammo = ammo_stock + ammo_clip;
hasreloaded = 1;
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
hasreloaded = 0;
if ( total_ammo >= max_ammo || !hasreloaded )
continue;
if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) )
{
if ( isdefined( playersoundonuse ) )
player playlocalsound( playersoundonuse );
if ( isdefined( npcsoundonuse ) )
player playsound( npcsoundonuse );
player thread [[ callback ]]( weapon, model, trigger );
break;
}
}
}
pick_up( weapon, model, trigger )
{
current_weapon = self getcurrentweapon();
if ( current_weapon != weapon )
{
clip_ammo = self getweaponammoclip( weapon );
if ( !clip_ammo )
{
self setweaponammoclip( weapon, 1 );
}
else
{
new_ammo_stock = self getweaponammostock( weapon ) + 1;
self setweaponammostock( weapon, new_ammo_stock );
}
}
else
{
new_ammo_stock = self getweaponammostock( weapon ) + 1;
self setweaponammostock( weapon, new_ammo_stock );
}
self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
model destroy_ent();
trigger destroy_ent();
if ( self hasweapon( weapon ) )
{
current_weapon = self getcurrentweapon();
if ( current_weapon != weapon )
{
clip_ammo = self getweaponammoclip( weapon );
if ( !clip_ammo )
self setweaponammoclip( weapon, 1 );
else
{
new_ammo_stock = self getweaponammostock( weapon ) + 1;
self setweaponammostock( weapon, new_ammo_stock );
}
}
else
{
new_ammo_stock = self getweaponammostock( weapon ) + 1;
self setweaponammostock( weapon, new_ammo_stock );
}
}
self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
model destroy_ent();
trigger destroy_ent();
}
destroy_ent()
{
if ( isDefined( self ) )
{
if ( isDefined( self.glowing_model ) )
{
self.glowing_model delete();
}
self delete();
}
if ( isdefined( self ) )
{
if ( isdefined( self.glowing_model ) )
self.glowing_model delete();
self delete();
}
}
watch_shutdown( trigger, model )
{
self waittill_any( "death", "disconnect", "zmb_lost_knife" );
trigger destroy_ent();
model destroy_ent();
self waittill_any( "death_or_disconnect", "zmb_lost_knife" );
trigger destroy_ent();
model destroy_ent();
}
drop_knives_to_ground( player )
{
player endon( "death" );
player endon( "zmb_lost_knife" );
for ( ;; )
{
level waittill( "drop_objects_to_ground", origin, radius );
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
{
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
self thread update_retrieve_trigger( player );
}
}
player endon( "death" );
player endon( "zmb_lost_knife" );
for (;;)
{
level waittill( "drop_objects_to_ground", origin, radius );
if ( distancesquared( origin, self.origin ) < radius * radius )
{
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
self thread update_retrieve_trigger( player );
}
}
}
force_drop_knives_to_ground_on_death( player, prey )
{
self endon( "death" );
player endon( "zmb_lost_knife" );
prey waittill( "death" );
self unlink();
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
self thread update_retrieve_trigger( player );
self endon( "death" );
player endon( "zmb_lost_knife" );
prey waittill( "death" );
self unlink();
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
self thread update_retrieve_trigger( player );
}
update_retrieve_trigger( player )
{
self endon( "death" );
player endon( "zmb_lost_knife" );
if ( isDefined( level.custom_update_retrieve_trigger ) )
{
self [[ level.custom_update_retrieve_trigger ]]( player );
return;
}
self waittill( "stationary" );
trigger = self.retrievabletrigger;
trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 );
trigger linkto( self );
self endon( "death" );
player endon( "zmb_lost_knife" );
if ( isdefined( level.custom_update_retrieve_trigger ) )
{
self [[ level.custom_update_retrieve_trigger ]]( player );
return;
}
self waittill( "stationary" );
trigger = self.retrievabletrigger;
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
trigger linkto( self );
}

View File

@ -1,323 +1,328 @@
//checked includes match cerberus output
#include maps/mp/animscripts/zm_shared;
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_net;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\animscripts\zm_shared;
init() //checked matches cerberus output
init()
{
if ( !maps/mp/zombies/_zm_weapons::is_weapon_included( "blundergat_zm" ) )
{
return;
}
else
{
precacheitem( "blundersplat_bullet_zm" );
precacheitem( "blundersplat_explosive_dart_zm" );
}
level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" );
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_wait_for_blundersplat_hit );
level.custom_derive_damage_refs = ::gib_on_blundergat_damage;
level._effect[ "dart_light" ] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" );
onplayerconnect_callback( ::blundersplat_on_player_connect );
if ( !maps\mp\zombies\_zm_weapons::is_weapon_included( "blundergat_zm" ) )
return;
else
{
precacheitem( "blundersplat_bullet_zm" );
precacheitem( "blundersplat_explosive_dart_zm" );
}
level.zombie_spawners = getentarray( "zombie_spawner", "script_noteworthy" );
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_wait_for_blundersplat_hit );
level.custom_derive_damage_refs = ::gib_on_blundergat_damage;
level._effect["dart_light"] = loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" );
onplayerconnect_callback( ::blundersplat_on_player_connect );
}
blundersplat_on_player_connect() //checked matches cerberus output
blundersplat_on_player_connect()
{
self thread wait_for_blundersplat_fired();
self thread wait_for_blundersplat_upgraded_fired();
self thread wait_for_blundersplat_fired();
self thread wait_for_blundersplat_upgraded_fired();
}
zombie_wait_for_blundersplat_hit() //checked changed to match cerberus output
zombie_wait_for_blundersplat_hit()
{
self endon( "death" );
while ( 1 )
{
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
if ( weaponname == "blundersplat_bullet_zm" )
{
if ( !isDefined( self.titus_tagged ) )
{
a_grenades = getentarray( "grenade", "classname" );
if ( !isDefined( a_grenades ) || a_grenades.size <= 0 )
{
continue;
}
self.titus_tagged = 1;
foreach ( e_grenade in a_grenades )
{
if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
{
if ( e_grenade islinkedto( self ) )
{
while ( 1 )
{
if ( !isDefined( e_grenade.fuse_time ) )
{
wait_network_frame();
}
else
{
break;
}
}
n_fuse_timer = e_grenade.fuse_time;
e_grenade thread _titus_grenade_detonate_on_target_death( self );
}
}
}
self thread _titus_target_animate_and_die( n_fuse_timer, inflictor );
self thread _titus_target_check_for_grenade_hits();
}
}
}
self endon( "death" );
while ( true )
{
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
if ( weaponname == "blundersplat_bullet_zm" )
{
if ( !isdefined( self.titus_tagged ) )
{
a_grenades = getentarray( "grenade", "classname" );
if ( !isdefined( a_grenades ) || a_grenades.size <= 0 )
continue;
self.titus_tagged = 1;
foreach ( e_grenade in a_grenades )
{
if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
{
if ( e_grenade islinkedto( self ) )
{
while ( true )
{
if ( !isdefined( e_grenade.fuse_time ) )
wait_network_frame();
else
break;
}
n_fuse_timer = e_grenade.fuse_time;
e_grenade thread _titus_grenade_detonate_on_target_death( self );
}
}
}
self thread _titus_target_animate_and_die( n_fuse_timer, inflictor );
self thread _titus_target_check_for_grenade_hits();
}
}
}
}
wait_for_blundersplat_fired() //checked matches cerberus output
wait_for_blundersplat_fired()
{
self endon( "disconnect" );
self waittill( "spawned_player" );
for ( ;; )
{
self waittill( "weapon_fired", str_weapon );
if ( str_weapon == "blundersplat_zm" )
{
wait_network_frame();
_titus_locate_target( 1 );
wait_network_frame();
_titus_locate_target( 1 );
wait_network_frame();
_titus_locate_target( 1 );
}
wait 0.5;
}
self endon( "disconnect" );
self waittill( "spawned_player" );
for (;;)
{
self waittill( "weapon_fired", str_weapon );
if ( str_weapon == "blundersplat_zm" )
{
wait_network_frame();
_titus_locate_target( 1 );
wait_network_frame();
_titus_locate_target( 1 );
wait_network_frame();
_titus_locate_target( 1 );
}
wait 0.5;
}
}
wait_for_blundersplat_upgraded_fired() //checked matches cerberus output
wait_for_blundersplat_upgraded_fired()
{
self endon( "disconnect" );
self waittill( "spawned_player" );
for ( ;; )
{
self waittill( "weapon_fired", str_weapon );
if ( str_weapon == "blundersplat_upgraded_zm" )
{
wait_network_frame();
_titus_locate_target( 0 );
wait_network_frame();
_titus_locate_target( 0 );
wait_network_frame();
_titus_locate_target( 0 );
}
}
self endon( "disconnect" );
self waittill( "spawned_player" );
for (;;)
{
self waittill( "weapon_fired", str_weapon );
if ( str_weapon == "blundersplat_upgraded_zm" )
{
wait_network_frame();
_titus_locate_target( 0 );
wait_network_frame();
_titus_locate_target( 0 );
wait_network_frame();
_titus_locate_target( 0 );
}
}
}
_titus_locate_target( is_not_upgraded ) //checked changed to match cerberus output
_titus_locate_target( is_not_upgraded )
{
if ( !isDefined( is_not_upgraded ) )
{
is_not_upgraded = 1;
}
fire_angles = self getplayerangles();
fire_origin = self getplayercamerapos();
a_targets = arraycombine( getaiarray( "axis" ), getvehiclearray( "axis" ), 0, 0 );
a_targets = get_array_of_closest( self.origin, a_targets, undefined, undefined, 1500 );
if ( is_not_upgraded )
{
n_fuse_timer = randomfloatrange( 1, 2.5 );
}
else
{
n_fuse_timer = randomfloatrange( 3, 4 );
}
foreach ( target in a_targets )
{
if ( within_fov( fire_origin, fire_angles, target.origin, cos( 30 ) ) )
{
if ( isai( target ) )
{
if ( !isDefined( target.titusmarked ) )
{
a_tags = [];
a_tags[ 0 ] = "j_hip_le";
a_tags[ 1 ] = "j_hip_ri";
a_tags[ 2 ] = "j_spine4";
a_tags[ 3 ] = "j_elbow_le";
a_tags[ 4 ] = "j_elbow_ri";
a_tags[ 5 ] = "j_clavicle_le";
a_tags[ 6 ] = "j_clavicle_ri";
str_tag = a_tags[ randomint( a_tags.size ) ];
b_trace_pass = bullettracepassed( fire_origin, target gettagorigin( str_tag ), 1, self, target );
if ( b_trace_pass )
{
target thread _titus_marked();
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, target gettagorigin( str_tag ), self );
e_dart thread _titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded );
return;
}
}
}
}
}
vec = anglesToForward( fire_angles );
trace_end = fire_origin + ( vec * 20000 );
trace = bullettrace( fire_origin, trace_end, 1, self );
offsetpos = trace[ "position" ] + _titus_get_spread( 80 );
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, offsetpos, self );
e_dart thread _titus_reset_grenade_fuse( n_fuse_timer );
if ( !isdefined( is_not_upgraded ) )
is_not_upgraded = 1;
fire_angles = self getplayerangles();
fire_origin = self getplayercamerapos();
a_targets = arraycombine( getaiarray( "axis" ), getvehiclearray( "axis" ), 0, 0 );
a_targets = get_array_of_closest( self.origin, a_targets, undefined, undefined, 1500 );
if ( is_not_upgraded )
n_fuse_timer = randomfloatrange( 1.0, 2.5 );
else
n_fuse_timer = randomfloatrange( 3.0, 4.0 );
foreach ( target in a_targets )
{
if ( within_fov( fire_origin, fire_angles, target.origin, cos( 30 ) ) )
{
if ( isai( target ) )
{
if ( !isdefined( target.titusmarked ) )
{
a_tags = [];
a_tags[0] = "j_hip_le";
a_tags[1] = "j_hip_ri";
a_tags[2] = "j_spine4";
a_tags[3] = "j_elbow_le";
a_tags[4] = "j_elbow_ri";
a_tags[5] = "j_clavicle_le";
a_tags[6] = "j_clavicle_ri";
str_tag = a_tags[randomint( a_tags.size )];
b_trace_pass = bullettracepassed( fire_origin, target gettagorigin( str_tag ), 1, self, target );
if ( b_trace_pass )
{
target thread _titus_marked();
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, target gettagorigin( str_tag ), self );
e_dart thread _titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded );
return;
}
}
}
}
}
vec = anglestoforward( fire_angles );
trace_end = fire_origin + vec * 20000;
trace = bullettrace( fire_origin, trace_end, 1, self );
offsetpos = trace["position"] + _titus_get_spread( 80 );
e_dart = magicbullet( "blundersplat_bullet_zm", fire_origin, offsetpos, self );
e_dart thread _titus_reset_grenade_fuse( n_fuse_timer );
}
_titus_get_spread( n_spread ) //checked matches cerberus output
_titus_get_spread( n_spread )
{
n_x = randomintrange( n_spread * -1, n_spread );
n_y = randomintrange( n_spread * -1, n_spread );
n_z = randomintrange( n_spread * -1, n_spread );
return ( n_x, n_y, n_z );
n_x = randomintrange( n_spread * -1, n_spread );
n_y = randomintrange( n_spread * -1, n_spread );
n_z = randomintrange( n_spread * -1, n_spread );
return ( n_x, n_y, n_z );
}
_titus_marked() //checked matches cerberus output
_titus_marked()
{
self endon( "death" );
self.titusmarked = 1;
wait 1;
self.titusmarked = undefined;
self endon( "death" );
self.titusmarked = 1;
wait 1;
self.titusmarked = undefined;
}
_titus_target_animate_and_die( n_fuse_timer, inflictor ) //checked matches cerberus output
_titus_target_animate_and_die( n_fuse_timer, inflictor )
{
self endon( "death" );
self endon( "titus_target_timeout" );
self thread _titus_target_timeout( n_fuse_timer );
self thread _titus_check_for_target_death( inflictor );
self thread _blundersplat_target_acid_stun_anim();
wait n_fuse_timer;
self notify( "killed_by_a_blundersplat" );
self dodamage( self.health + 1000, self.origin );
self endon( "death" );
self endon( "titus_target_timeout" );
self thread _titus_target_timeout( n_fuse_timer );
self thread _titus_check_for_target_death( inflictor );
self thread _blundersplat_target_acid_stun_anim();
wait( n_fuse_timer );
self notify( "killed_by_a_blundersplat", inflictor );
self dodamage( self.health + 1000, self.origin );
}
_titus_target_check_for_grenade_hits() //checked changed to match cerberus output
_titus_target_check_for_grenade_hits()
{
self endon( "death" );
self endon( "titus_target_timeout" );
while ( 1 )
{
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
if ( weaponname == "blundersplat_bullet_zm" )
{
a_grenades = getentarray( "grenade", "classname" );
foreach ( e_grenade in a_grenades )
{
if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
{
if ( e_grenade islinkedto( self ) )
{
e_grenade thread _titus_grenade_detonate_on_target_death( self );
}
}
}
}
}
self endon( "death" );
self endon( "titus_target_timeout" );
while ( true )
{
self waittill( "damage", amount, inflictor, direction, point, type, tagname, modelname, partname, weaponname, idflags );
if ( weaponname == "blundersplat_bullet_zm" )
{
a_grenades = getentarray( "grenade", "classname" );
foreach ( e_grenade in a_grenades )
{
if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" )
{
if ( e_grenade islinkedto( self ) )
e_grenade thread _titus_grenade_detonate_on_target_death( self );
}
}
}
}
}
_titus_target_timeout( n_fuse_timer ) //checked matches cerberus output
_titus_target_timeout( n_fuse_timer )
{
self endon( "death" );
wait n_fuse_timer;
self notify( "titus_target_timeout" );
self endon( "death" );
wait( n_fuse_timer );
self notify( "titus_target_timeout" );
}
_titus_check_for_target_death( inflictor ) //checked changed to match cerberus output
_titus_check_for_target_death( inflictor )
{
self waittill( "death" );
self notify( "killed_by_a_blundersplat", inflictor );
self notify( "titus_target_killed" );
self waittill( "death" );
self notify( "killed_by_a_blundersplat", inflictor );
self notify( "titus_target_killed" );
}
_titus_grenade_detonate_on_target_death( target ) //checked matches cerberus output
_titus_grenade_detonate_on_target_death( target )
{
self endon( "death" );
target endon( "titus_target_timeout" );
target waittill( "titus_target_killed" );
self.fuse_reset = 1;
self resetmissiledetonationtime( 0.05 );
self endon( "death" );
target endon( "titus_target_timeout" );
target waittill( "titus_target_killed" );
self.fuse_reset = 1;
self resetmissiledetonationtime( 0.05 );
}
_titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded ) //checked changed to match cerberus output
_titus_reset_grenade_fuse( n_fuse_timer, is_not_upgraded )
{
if ( !isDefined( is_not_upgraded ) )
{
is_not_upgraded = 1;
}
if ( !isDefined( n_fuse_timer ) )
{
n_fuse_timer = randomfloatrange( 1, 1,5 );
}
self waittill( "death" );
a_grenades = getentarray( "grenade", "classname" );
foreach ( e_grenade in a_grenades )
{
if ( isDefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" && !isDefined( e_grenade.fuse_reset ) )
{
e_grenade.fuse_reset = 1;
e_grenade.fuse_time = n_fuse_timer;
e_grenade resetmissiledetonationtime( n_fuse_timer );
if ( is_not_upgraded )
{
e_grenade create_zombie_point_of_interest( 250, 5, 10000 );
}
else
{
e_grenade create_zombie_point_of_interest( 500, 10, 10000 );
}
return;
}
}
if ( !isdefined( is_not_upgraded ) )
is_not_upgraded = 1;
if ( !isdefined( n_fuse_timer ) )
n_fuse_timer = randomfloatrange( 1, 1.5 );
self waittill( "death" );
a_grenades = getentarray( "grenade", "classname" );
foreach ( e_grenade in a_grenades )
{
if ( isdefined( e_grenade.model ) && e_grenade.model == "t6_wpn_zmb_projectile_blundergat" && !isdefined( e_grenade.fuse_reset ) )
{
e_grenade.fuse_reset = 1;
e_grenade.fuse_time = n_fuse_timer;
e_grenade resetmissiledetonationtime( n_fuse_timer );
if ( is_not_upgraded )
e_grenade create_zombie_point_of_interest( 250, 5, 10000 );
else
e_grenade create_zombie_point_of_interest( 500, 10, 10000 );
return;
}
}
}
gib_on_blundergat_damage( refs, point, weaponname ) //checked changed to match cerberus output
gib_on_blundergat_damage( refs, point, weaponname )
{
new_gib_ref = [];
if ( isDefined( level.no_gib_in_wolf_area ) )
{
if ( [[ level.no_gib_in_wolf_area ]]() )
{
return new_gib_ref;
}
}
if ( self.health <= 0 )
{
return refs;
}
else if ( weaponname == "blundergat_zm" || weaponname == "blundergat_upgraded_zm" )
{
new_gib_ref = self maps/mp/zombies/_zm_spawner::derive_damage_refs( point );
return new_gib_ref;
}
return refs;
new_gib_ref = [];
if ( isdefined( level.no_gib_in_wolf_area ) )
{
if ( [[ level.no_gib_in_wolf_area ]]() )
return new_gib_ref;
}
if ( self.health <= 0 )
return refs;
else if ( weaponname == "blundergat_zm" || weaponname == "blundergat_upgraded_zm" )
{
new_gib_ref = self maps\mp\zombies\_zm_spawner::derive_damage_refs( point );
return new_gib_ref;
}
return refs;
}
_blundersplat_target_acid_stun_anim() //checked matches cerberus output
_blundersplat_target_acid_stun_anim()
{
self endon( "death" );
while ( 1 )
{
ground_ent = self getgroundent();
if ( isDefined( ground_ent ) && !is_true( ground_ent.classname == "worldspawn" ) )
{
self linkto( ground_ent );
}
if ( is_true( self.has_legs ) )
{
self animscripted( self.origin, self.angles, "zm_blundersplat_stun" );
}
else
{
self animscripted( self.origin, self.angles, "zm_blundersplat_stun_crawl" );
}
self maps/mp/animscripts/zm_shared::donotetracks( "blundersplat_stunned_anim" );
}
}
self endon( "death" );
while ( true )
{
ground_ent = self getgroundent();
if ( isdefined( ground_ent ) && !is_true( ground_ent.classname == "worldspawn" ) )
self linkto( ground_ent );
if ( is_true( self.has_legs ) )
self animscripted( self.origin, self.angles, "zm_blundersplat_stun" );
else
self animscripted( self.origin, self.angles, "zm_blundersplat_stun_crawl" );
self maps\mp\animscripts\zm_shared::donotetracks( "blundersplat_stunned_anim" );
}
}

View File

@ -1,492 +1,466 @@
#include maps/mp/gametypes_zm/_weaponobjects;
#include maps/mp/zombies/_zm_stats;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_score;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_equipment;
#include maps\mp\zombies\_zm_score;
#include maps\mp\zombies\_zm_audio;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\gametypes_zm\_weaponobjects;
init()
{
if ( !isDefined( level.claymores_max_per_player ) )
{
level.claymores_max_per_player = 12;
}
trigs = getentarray( "claymore_purchase", "targetname" );
i = 0;
while ( i < trigs.size )
{
model = getent( trigs[ i ].target, "targetname" );
if ( isDefined( model ) )
{
model hide();
}
i++;
}
array_thread( trigs, ::buy_claymores );
level thread give_claymores_after_rounds();
level.claymores_on_damage = ::satchel_damage;
level.pickup_claymores = ::pickup_claymores;
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
level.claymore_detectiondot = cos( 70 );
level.claymore_detectionmindist = 20;
level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" );
if ( !isdefined( level.claymores_max_per_player ) )
level.claymores_max_per_player = 12;
trigs = getentarray( "claymore_purchase", "targetname" );
for ( i = 0; i < trigs.size; i++ )
{
model = getent( trigs[i].target, "targetname" );
if ( isdefined( model ) )
model hide();
}
array_thread( trigs, ::buy_claymores );
level thread give_claymores_after_rounds();
level.claymores_on_damage = ::satchel_damage;
level.pickup_claymores = ::pickup_claymores;
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
level.claymore_detectiondot = cos( 70 );
level.claymore_detectionmindist = 20;
level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" );
}
buy_claymores()
{
self.zombie_cost = 1000;
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_NOICON" );
self endon( "kill_trigger" );
if ( !isDefined( self.stub ) )
{
return;
}
if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) )
{
self.stub.claymores_triggered = 0;
}
self.claymores_triggered = self.stub.claymores_triggered;
while ( 1 )
{
self waittill( "trigger", who );
while ( who in_revive_trigger() )
{
continue;
}
while ( who has_powerup_weapon() )
{
wait 0,1;
}
if ( is_player_valid( who ) )
{
if ( who.score >= self.zombie_cost )
{
if ( !who is_player_placeable_mine( "claymore_zm" ) )
{
play_sound_at_pos( "purchase", self.origin );
who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost );
who thread claymore_setup();
who thread show_claymore_hint( "claymore_purchased" );
who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
if ( isDefined( self.stub ) )
{
self.claymores_triggered = self.stub.claymores_triggered;
}
if ( self.claymores_triggered == 0 )
{
model = getent( self.target, "targetname" );
if ( isDefined( model ) )
{
model thread maps/mp/zombies/_zm_weapons::weapon_show( who );
}
else
{
if ( isDefined( self.clientfieldname ) )
{
level setclientfield( self.clientfieldname, 1 );
}
}
self.claymores_triggered = 1;
if ( isDefined( self.stub ) )
{
self.stub.claymores_triggered = 1;
}
}
trigs = getentarray( "claymore_purchase", "targetname" );
i = 0;
while ( i < trigs.size )
{
trigs[ i ] setinvisibletoplayer( who );
i++;
}
}
else who thread show_claymore_hint( "already_purchased" );
}
}
}
self.zombie_cost = 1000;
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
self endon( "kill_trigger" );
if ( !isdefined( self.stub ) )
return;
if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) )
self.stub.claymores_triggered = 0;
self.claymores_triggered = self.stub.claymores_triggered;
while ( true )
{
self waittill( "trigger", who );
if ( who in_revive_trigger() )
continue;
if ( who has_powerup_weapon() )
{
wait 0.1;
continue;
}
if ( is_player_valid( who ) )
{
if ( who.score >= self.zombie_cost )
{
if ( !who is_player_placeable_mine( "claymore_zm" ) )
{
play_sound_at_pos( "purchase", self.origin );
who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost );
who thread claymore_setup();
who thread show_claymore_hint( "claymore_purchased" );
who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
if ( isdefined( self.stub ) )
self.claymores_triggered = self.stub.claymores_triggered;
if ( self.claymores_triggered == 0 )
{
model = getent( self.target, "targetname" );
if ( isdefined( model ) )
model thread maps\mp\zombies\_zm_weapons::weapon_show( who );
else if ( isdefined( self.clientfieldname ) )
level setclientfield( self.clientfieldname, 1 );
self.claymores_triggered = 1;
if ( isdefined( self.stub ) )
self.stub.claymores_triggered = 1;
}
trigs = getentarray( "claymore_purchase", "targetname" );
for ( i = 0; i < trigs.size; i++ )
trigs[i] setinvisibletoplayer( who );
}
else
who thread show_claymore_hint( "already_purchased" );
}
else
{
who play_sound_on_ent( "no_purchase" );
who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
}
}
}
}
claymore_unitrigger_update_prompt( player )
{
if ( player is_player_placeable_mine( "claymore_zm" ) )
{
return 0;
}
return 1;
if ( player is_player_placeable_mine( "claymore_zm" ) )
{
self sethintstring( "" );
self setcursorhint( "HINT_NOICON" );
return false;
}
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
return true;
}
set_claymore_visible()
{
players = get_players();
trigs = getentarray( "claymore_purchase", "targetname" );
while ( 1 )
{
j = 0;
while ( j < players.size )
{
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) )
{
i = 0;
while ( i < trigs.size )
{
trigs[ i ] setinvisibletoplayer( players[ j ], 0 );
i++;
}
}
j++;
}
wait 1;
players = get_players();
}
players = get_players();
trigs = getentarray( "claymore_purchase", "targetname" );
while ( true )
{
for ( j = 0; j < players.size; j++ )
{
if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
{
for ( i = 0; i < trigs.size; i++ )
trigs[i] setinvisibletoplayer( players[j], 0 );
}
}
wait 1;
players = get_players();
}
}
claymore_safe_to_plant()
{
if ( self.owner.claymores.size >= level.claymores_max_per_player )
{
return 0;
}
if ( isDefined( level.claymore_safe_to_plant ) )
{
return self [[ level.claymore_safe_to_plant ]]();
}
return 1;
if ( self.owner.claymores.size >= level.claymores_max_per_player )
return 0;
if ( isdefined( level.claymore_safe_to_plant ) )
return self [[ level.claymore_safe_to_plant ]]();
return 1;
}
claymore_wait_and_detonate()
{
wait 0,1;
self detonate( self.owner );
wait 0.1;
self detonate( self.owner );
}
claymore_watch()
{
self endon( "death" );
while ( 1 )
{
self waittill( "grenade_fire", claymore, weapname );
if ( weapname == "claymore_zm" )
{
claymore.owner = self;
claymore.team = self.team;
self notify( "zmb_enable_claymore_prompt" );
if ( claymore claymore_safe_to_plant() )
{
if ( isDefined( level.claymore_planted ) )
{
self thread [[ level.claymore_planted ]]( claymore );
}
claymore thread satchel_damage();
claymore thread claymore_detonation();
claymore thread play_claymore_effects();
self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" );
self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" );
break;
}
else
{
claymore thread claymore_wait_and_detonate();
}
}
}
self endon( "death" );
self notify( "claymore_watch" );
self endon( "claymore_watch" );
while ( true )
{
self waittill( "grenade_fire", claymore, weapname );
if ( weapname == "claymore_zm" )
{
claymore.owner = self;
claymore.team = self.team;
self notify( "zmb_enable_claymore_prompt" );
if ( claymore claymore_safe_to_plant() )
{
if ( isdefined( level.claymore_planted ) )
self thread [[ level.claymore_planted ]]( claymore );
claymore thread claymore_detonation();
claymore thread play_claymore_effects();
self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" );
self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" );
}
else
claymore thread claymore_wait_and_detonate();
}
}
}
claymore_setup()
{
if ( !isDefined( self.claymores ) )
{
self.claymores = [];
}
self thread claymore_watch();
self giveweapon( "claymore_zm" );
self set_player_placeable_mine( "claymore_zm" );
self setactionslot( 4, "weapon", "claymore_zm" );
self setweaponammostock( "claymore_zm", 2 );
if ( !isdefined( self.claymores ) )
self.claymores = [];
self thread claymore_watch();
self giveweapon( "claymore_zm" );
self set_player_placeable_mine( "claymore_zm" );
self setactionslot( 4, "weapon", "claymore_zm" );
self setweaponammostock( "claymore_zm", 2 );
}
adjust_trigger_origin( origin )
{
origin += vectorScale( ( 0, 0, 1 ), 20 );
return origin;
origin += vectorscale( ( 0, 0, 1 ), 20.0 );
return origin;
}
on_spawn_retrieve_trigger( watcher, player )
{
self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player );
if ( isDefined( self.pickuptrigger ) )
{
self.pickuptrigger sethintlowpriority( 0 );
}
self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player );
if ( isdefined( self.pickuptrigger ) )
self.pickuptrigger sethintlowpriority( 0 );
}
pickup_claymores()
{
player = self.owner;
if ( !player hasweapon( "claymore_zm" ) )
{
player thread claymore_watch();
player giveweapon( "claymore_zm" );
player set_player_placeable_mine( "claymore_zm" );
player setactionslot( 4, "weapon", "claymore_zm" );
player setweaponammoclip( "claymore_zm", 0 );
player notify( "zmb_enable_claymore_prompt" );
}
else
{
clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo )
{
self destroy_ent();
player notify( "zmb_disable_claymore_prompt" );
return;
}
}
self pick_up();
clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo )
{
player notify( "zmb_disable_claymore_prompt" );
}
player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" );
player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" );
player = self.owner;
if ( !player hasweapon( "claymore_zm" ) )
{
player thread claymore_watch();
player giveweapon( "claymore_zm" );
player set_player_placeable_mine( "claymore_zm" );
player setactionslot( 4, "weapon", "claymore_zm" );
player setweaponammoclip( "claymore_zm", 0 );
player notify( "zmb_enable_claymore_prompt" );
}
else
{
clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo )
{
self destroy_ent();
player notify( "zmb_disable_claymore_prompt" );
return;
}
}
self pick_up();
clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo )
player notify( "zmb_disable_claymore_prompt" );
player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" );
player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" );
}
pickup_claymores_trigger_listener( trigger, player )
{
self thread pickup_claymores_trigger_listener_enable( trigger, player );
self thread pickup_claymores_trigger_listener_disable( trigger, player );
self thread pickup_claymores_trigger_listener_enable( trigger, player );
self thread pickup_claymores_trigger_listener_disable( trigger, player );
}
pickup_claymores_trigger_listener_enable( trigger, player )
{
self endon( "delete" );
while ( 1 )
{
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
if ( !isDefined( trigger ) )
{
return;
}
trigger trigger_on();
trigger linkto( self );
}
self endon( "delete" );
self endon( "death" );
while ( true )
{
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
if ( !isdefined( trigger ) )
return;
trigger trigger_on();
trigger linkto( self );
}
}
pickup_claymores_trigger_listener_disable( trigger, player )
{
self endon( "delete" );
while ( 1 )
{
player waittill( "zmb_disable_claymore_prompt" );
if ( !isDefined( trigger ) )
{
return;
}
trigger unlink();
trigger trigger_off();
}
self endon( "delete" );
self endon( "death" );
while ( true )
{
player waittill( "zmb_disable_claymore_prompt" );
if ( !isdefined( trigger ) )
return;
trigger unlink();
trigger trigger_off();
}
}
shouldaffectweaponobject( object )
{
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 );
dirtopos = pos - object.origin;
objectforward = anglesToForward( object.angles );
dist = vectordot( dirtopos, objectforward );
if ( dist < level.claymore_detectionmindist )
{
return 0;
}
dirtopos = vectornormalize( dirtopos );
dot = vectordot( dirtopos, objectforward );
return dot > level.claymore_detectiondot;
pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 );
dirtopos = pos - object.origin;
objectforward = anglestoforward( object.angles );
dist = vectordot( dirtopos, objectforward );
if ( dist < level.claymore_detectionmindist )
return 0;
dirtopos = vectornormalize( dirtopos );
dot = vectordot( dirtopos, objectforward );
return dot > level.claymore_detectiondot;
}
claymore_detonation()
{
self endon( "death" );
self waittill_not_moving();
detonateradius = 96;
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
damagearea setexcludeteamfortrigger( self.team );
damagearea enablelinkto();
damagearea linkto( self );
if ( is_true( self.isonbus ) )
{
damagearea setmovingplatformenabled( 1 );
}
self.damagearea = damagearea;
self thread delete_claymores_on_death( self.owner, damagearea );
self.owner.claymores[ self.owner.claymores.size ] = self;
while ( 1 )
{
damagearea waittill( "trigger", ent );
if ( isDefined( self.owner ) && ent == self.owner )
{
continue;
}
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
{
continue;
}
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
{
continue;
}
while ( !ent shouldaffectweaponobject( self ) )
{
continue;
}
if ( ent damageconetrace( self.origin, self ) > 0 )
{
self playsound( "wpn_claymore_alert" );
wait 0,4;
if ( isDefined( self.owner ) )
{
self detonate( self.owner );
}
else
{
self detonate( undefined );
}
return;
}
}
self endon( "death" );
self waittill_not_moving();
detonateradius = 96;
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
damagearea setexcludeteamfortrigger( self.team );
damagearea enablelinkto();
damagearea linkto( self );
if ( is_true( self.isonbus ) )
damagearea setmovingplatformenabled( 1 );
self.damagearea = damagearea;
self thread delete_claymores_on_death( self.owner, damagearea );
self.owner.claymores[self.owner.claymores.size] = self;
while ( true )
{
damagearea waittill( "trigger", ent );
if ( isdefined( self.owner ) && ent == self.owner )
continue;
if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team )
continue;
if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
continue;
if ( !ent shouldaffectweaponobject( self ) )
continue;
if ( ent damageconetrace( self.origin, self ) > 0 )
{
self playsound( "wpn_claymore_alert" );
wait 0.4;
if ( isdefined( self.owner ) )
self detonate( self.owner );
else
self detonate( undefined );
return;
}
}
}
delete_claymores_on_death( player, ent )
{
self waittill( "death" );
if ( isDefined( player ) )
{
arrayremovevalue( player.claymores, self );
}
wait 0,05;
if ( isDefined( ent ) )
{
ent delete();
}
self waittill( "death" );
if ( isdefined( player ) )
arrayremovevalue( player.claymores, self );
wait 0.05;
if ( isdefined( ent ) )
ent delete();
}
satchel_damage()
{
self setcandamage( 1 );
self.health = 100000;
self.maxhealth = self.health;
attacker = undefined;
while ( 1 )
{
self waittill( "damage", amount, attacker );
if ( !isDefined( self ) )
{
return;
}
self.health = self.maxhealth;
while ( !isplayer( attacker ) )
{
continue;
}
if ( isDefined( self.owner ) && attacker == self.owner )
{
continue;
}
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
{
continue;
}
}
if ( level.satchelexplodethisframe )
{
wait ( 0,1 + randomfloat( 0,4 ) );
}
else wait 0,05;
if ( !isDefined( self ) )
{
return;
}
level.satchelexplodethisframe = 1;
thread reset_satchel_explode_this_frame();
self detonate( attacker );
self endon( "death" );
self setcandamage( 1 );
self.health = 100000;
self.maxhealth = self.health;
attacker = undefined;
while ( true )
{
self waittill( "damage", amount, attacker );
if ( !isdefined( self ) )
return;
self.health = self.maxhealth;
if ( !isplayer( attacker ) )
continue;
if ( isdefined( self.owner ) && attacker == self.owner )
continue;
if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team )
continue;
break;
}
if ( level.satchelexplodethisframe )
wait( 0.1 + randomfloat( 0.4 ) );
else
wait 0.05;
if ( !isdefined( self ) )
return;
level.satchelexplodethisframe = 1;
thread reset_satchel_explode_this_frame();
self detonate( attacker );
}
reset_satchel_explode_this_frame()
{
wait 0,05;
level.satchelexplodethisframe = 0;
wait 0.05;
level.satchelexplodethisframe = 0;
}
play_claymore_effects()
{
self endon( "death" );
self waittill_not_moving();
playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" );
self endon( "death" );
self waittill_not_moving();
playfxontag( level._effect["claymore_laser"], self, "tag_fx" );
}
give_claymores_after_rounds()
{
while ( 1 )
{
level waittill( "between_round_over" );
while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
{
players = get_players();
i = 0;
while ( i < players.size )
{
if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) )
{
players[ i ] giveweapon( "claymore_zm" );
players[ i ] set_player_placeable_mine( "claymore_zm" );
players[ i ] setactionslot( 4, "weapon", "claymore_zm" );
players[ i ] setweaponammoclip( "claymore_zm", 2 );
}
i++;
}
}
}
}
while ( true )
{
level waittill( "between_round_over" );
init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha )
{
self.x = x;
self.y = y;
self.alignx = alignx;
self.aligny = aligny;
self.fontscale = fontscale;
self.alpha = alpha;
self.sort = 20;
}
if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
{
players = get_players();
setup_client_hintelem()
{
self endon( "death" );
self endon( "disconnect" );
if ( !isDefined( self.hintelem ) )
{
self.hintelem = newclienthudelem( self );
}
self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 );
for ( i = 0; i < players.size; i++ )
{
if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
{
players[i] giveweapon( "claymore_zm" );
players[i] set_player_placeable_mine( "claymore_zm" );
players[i] setactionslot( 4, "weapon", "claymore_zm" );
players[i] setweaponammoclip( "claymore_zm", 2 );
}
}
}
}
}
show_claymore_hint( string )
{
self endon( "death" );
self endon( "disconnect" );
if ( string == "claymore_purchased" )
{
text = &"ZOMBIE_CLAYMORE_HOWTO";
}
else
{
text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED";
}
self setup_client_hintelem();
self.hintelem settext( text );
wait 3,5;
self.hintelem settext( "" );
self endon( "death" );
self endon( "disconnect" );
if ( string == "claymore_purchased" )
text = &"ZOMBIE_CLAYMORE_HOWTO";
else
text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED";
show_equipment_hint_text( text );
}

View File

@ -1,12 +0,0 @@
#include common_scripts/utility;
#include maps/mp/_utility;
init()
{
loadfx( "weapon/crossbow/fx_trail_crossbow_blink_grn_os" );
loadfx( "weapon/crossbow/fx_trail_crossbow_blink_red_os" );
}
watch_bolt_detonation( owner )
{
}

File diff suppressed because it is too large Load Diff

View File

@ -1,193 +1,198 @@
#include maps/mp/gametypes_zm/_globallogic_score;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\gametypes_zm\_globallogic_score;
init()
{
level thread achievement_highrise_sidequest();
level thread achievement_mad_without_power();
level.achievement_sound_func = ::achievement_sound_func;
onplayerconnect_callback( ::onplayerconnect );
level thread achievement_highrise_sidequest();
level thread achievement_mad_without_power();
level.achievement_sound_func = ::achievement_sound_func;
onplayerconnect_callback( ::onplayerconnect );
}
achievement_sound_func( achievement_name_lower )
{
self thread do_player_general_vox( "general", "achievement" );
self thread do_player_general_vox( "general", "achievement" );
}
init_player_achievement_stats()
{
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_highrise_sidequest", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_vertigoner", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_slippery_when_undead", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_facing_the_dragon", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_im_my_own_best_friend", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_mad_without_power", 0 );
self maps/mp/gametypes_zm/_globallogic_score::initpersstat( "zm_dlc1_shafted", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_highrise_sidequest", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_vertigoner", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_slippery_when_undead", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_facing_the_dragon", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_im_my_own_best_friend", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_mad_without_power", 0 );
self maps\mp\gametypes_zm\_globallogic_score::initpersstat( "zm_dlc1_shafted", 0 );
}
onplayerconnect()
{
self thread achievement_vertigoner();
self thread achievement_slippery_when_undead();
self thread achievement_facing_the_dragon();
self thread achievement_im_my_own_best_friend();
self thread achievement_shafted();
self thread achievement_vertigoner();
self thread achievement_slippery_when_undead();
self thread achievement_facing_the_dragon();
self thread achievement_im_my_own_best_friend();
self thread achievement_shafted();
}
achievement_highrise_sidequest()
{
level endon( "end_game" );
level waittill( "highrise_sidequest_achieved" );
level endon( "end_game" );
level waittill( "highrise_sidequest_achieved" );
/#
iprintlnbold( "ZM_DLC1_HIGHRISE_SIDEQUEST achieved for the team" );
iprintlnbold( "ZM_DLC1_HIGHRISE_SIDEQUEST achieved for the team" );
#/
level giveachievement_wrapper( "ZM_DLC1_HIGHRISE_SIDEQUEST", 1 );
level giveachievement_wrapper( "ZM_DLC1_HIGHRISE_SIDEQUEST", 1 );
}
achievement_vertigoner()
{
level endon( "end_game" );
self endon( "disconnect" );
self.num_zombies_flung = 0;
max_zombies_flung = 10;
while ( self.num_zombies_flung < max_zombies_flung )
{
self waittill( "zombie_flung" );
wait 0,1;
}
level endon( "end_game" );
self endon( "disconnect" );
self.num_zombies_flung = 0;
max_zombies_flung = 10;
while ( self.num_zombies_flung < max_zombies_flung )
{
self waittill( "zombie_flung" );
wait 0.1;
}
/#
#/
self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" );
self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" );
}
achievement_slippery_when_undead()
{
level endon( "end_game" );
self endon( "disconnect" );
self.num_sliquifier_kills = 0;
max_kills_with_one_shot = 5;
while ( self.num_sliquifier_kills < max_kills_with_one_shot )
{
self waittill( "sliquifier_kill" );
wait 0,01;
}
level endon( "end_game" );
self endon( "disconnect" );
self.num_sliquifier_kills = 0;
max_kills_with_one_shot = 5;
while ( self.num_sliquifier_kills < max_kills_with_one_shot )
{
self waittill( "sliquifier_kill" );
wait 0.01;
}
/#
#/
self giveachievement_wrapper( "ZM_DLC1_SLIPPERY_WHEN_UNDEAD" );
self giveachievement_wrapper( "ZM_DLC1_SLIPPERY_WHEN_UNDEAD" );
}
achievement_facing_the_dragon()
{
level endon( "end_game" );
self endon( "disconnect" );
v_achievement_location = ( 2209, 693, 3200 );
v_dragon_position = ( 971, 43, 3800 );
is_touching_distance = 350;
round_number_max = 2;
while ( 1 )
{
if ( level.round_number >= round_number_max )
{
return;
}
dist = distance( self.origin, v_achievement_location );
if ( dist <= is_touching_distance )
{
v_dir = vectornormalize( v_dragon_position - self.origin );
v_forward = self getweaponforwarddir();
dp = vectordot( v_dir, v_forward );
if ( dp > 0,95 )
{
break;
}
}
else
{
wait 0,01;
}
}
level endon( "end_game" );
self endon( "disconnect" );
v_achievement_location = ( 2209, 693, 3200 );
v_dragon_position = ( 971, 43, 3800 );
is_touching_distance = 350;
round_number_max = 2;
while ( true )
{
if ( level.round_number >= round_number_max )
return;
dist = distance( self.origin, v_achievement_location );
if ( dist <= is_touching_distance )
{
v_dir = vectornormalize( v_dragon_position - self.origin );
v_forward = self getweaponforwarddir();
dp = vectordot( v_dir, v_forward );
if ( dp > 0.95 )
break;
}
wait 0.01;
}
/#
#/
self giveachievement_wrapper( "ZM_DLC1_FACING_THE_DRAGON" );
self giveachievement_wrapper( "ZM_DLC1_FACING_THE_DRAGON" );
}
achievement_im_my_own_best_friend()
{
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "whos_who_self_revive" );
level endon( "end_game" );
self endon( "disconnect" );
self waittill( "whos_who_self_revive" );
/#
#/
self giveachievement_wrapper( "ZM_DLC1_IM_MY_OWN_BEST_FRIEND" );
self giveachievement_wrapper( "ZM_DLC1_IM_MY_OWN_BEST_FRIEND" );
}
achievement_mad_without_power()
{
level endon( "end_game" );
round_number_max = 10;
while ( level.round_number < round_number_max )
{
level waittill( "start_of_round" );
if ( flag( "power_on" ) )
{
return;
}
}
level endon( "end_game" );
round_number_max = 10;
while ( level.round_number < round_number_max )
{
level waittill( "start_of_round" );
if ( flag( "power_on" ) )
return;
}
/#
#/
self giveachievement_wrapper( "ZM_DLC1_MAD_WITHOUT_POWER", 1 );
self giveachievement_wrapper( "ZM_DLC1_MAD_WITHOUT_POWER", 1 );
}
achievement_shafted()
{
level endon( "end_game" );
self endon( "disconnect" );
level.perk_bought_func = ::player_buys_perk_machine;
max_unique_perk_machines = 6;
while ( 1 )
{
self waittill_any( "player_buys_perk", "pap_used" );
if ( isDefined( self.pap_used ) && self.pap_used == 1 )
{
if ( isDefined( self.perk_machines_bought ) && self.perk_machines_bought.size >= max_unique_perk_machines )
{
break;
}
}
else
{
}
}
level endon( "end_game" );
self endon( "disconnect" );
level.perk_bought_func = ::player_buys_perk_machine;
max_unique_perk_machines = 6;
while ( true )
{
self waittill_any( "player_buys_perk", "pap_used" );
if ( isdefined( self.pap_used ) && self.pap_used == 1 )
{
if ( isdefined( self.perk_machines_bought ) && self.perk_machines_bought.size >= max_unique_perk_machines )
break;
}
}
/#
#/
self giveachievement_wrapper( "ZM_DLC1_SHAFTED" );
self giveachievement_wrapper( "ZM_DLC1_SHAFTED" );
}
player_buys_perk_machine( perk )
{
if ( !isDefined( self.perk_machines_bought ) )
{
self.perk_machines_bought = [];
}
found = 0;
i = 0;
while ( i < self.perk_machines_bought.size )
{
if ( perk == self.perk_machines_bought[ i ] )
{
found = 1;
break;
}
else
{
i++;
}
}
if ( !found )
{
self.perk_machines_bought[ self.perk_machines_bought.size ] = perk;
self notify( "player_buys_perk" );
}
if ( !isdefined( self.perk_machines_bought ) )
self.perk_machines_bought = [];
found = 0;
for ( i = 0; i < self.perk_machines_bought.size; i++ )
{
if ( perk == self.perk_machines_bought[i] )
{
found = 1;
break;
}
}
if ( !found )
{
self.perk_machines_bought[self.perk_machines_bought.size] = perk;
self notify( "player_buys_perk" );
}
}

View File

@ -1,75 +1,74 @@
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
#include maps/mp/_ambientpackage;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_ambientpackage;
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
main()
{
level thread sndmusicegg();
level thread sndmusicegg();
}
sndmusicegg()
{
origins = [];
origins[ 0 ] = ( 2724, 300, 1347 );
origins[ 1 ] = ( 2639, 1831, 1359 );
origins[ 2 ] = ( 1230, 1846, 3249 );
level.meteor_counter = 0;
level.music_override = 0;
i = 0;
while ( i < origins.size )
{
level thread sndmusicegg_wait( origins[ i ] );
i++;
}
origins = [];
origins[0] = ( 2724, 300, 1347 );
origins[1] = ( 2639, 1831, 1359 );
origins[2] = ( 1230, 1846, 3249 );
level.meteor_counter = 0;
level.music_override = 0;
for ( i = 0; i < origins.size; i++ )
level thread sndmusicegg_wait( origins[i] );
}
sndmusicegg_wait( bear_origin )
{
temp_ent = spawn( "script_origin", bear_origin );
temp_ent playloopsound( "zmb_meteor_loop" );
temp_ent thread maps/mp/zombies/_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override );
temp_ent waittill( "main_music_egg_hit", player );
temp_ent stoploopsound( 1 );
player playsound( "zmb_meteor_activate" );
level.meteor_counter += 1;
if ( level.meteor_counter == 3 )
{
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 190 );
}
else
{
wait 1,5;
temp_ent delete();
}
temp_ent = spawn( "script_origin", bear_origin );
temp_ent playloopsound( "zmb_meteor_loop" );
temp_ent thread maps\mp\zombies\_zm_sidequests::fake_use( "main_music_egg_hit", ::sndmusicegg_override );
temp_ent waittill( "main_music_egg_hit", player );
temp_ent stoploopsound( 1 );
player playsound( "zmb_meteor_activate" );
level.meteor_counter += 1;
if ( level.meteor_counter == 3 )
level thread sndmuseggplay( temp_ent, "mus_zmb_secret_song", 190 );
else
{
wait 1.5;
temp_ent delete();
}
}
sndmusicegg_override()
{
if ( is_true( level.music_override ) )
{
return 0;
}
return 1;
if ( is_true( level.music_override ) )
return false;
return true;
}
sndmuseggplay( ent, alias, time )
{
level.music_override = 1;
wait 1;
ent playsound( alias );
level thread sndeggmusicwait( time );
level waittill_either( "end_game", "sndSongDone" );
ent stopsounds();
wait 0,05;
ent delete();
level.music_override = 0;
level.music_override = 1;
wait 1;
ent playsound( alias );
level thread sndeggmusicwait( time );
level waittill_either( "end_game", "sndSongDone" );
ent stopsounds();
wait 0.05;
ent delete();
level.music_override = 0;
}
sndeggmusicwait( time )
{
level endon( "end_game" );
wait time;
level notify( "sndSongDone" );
level endon( "end_game" );
wait( time );
level notify( "sndSongDone" );
}

View File

@ -1,353 +1,347 @@
#include maps/mp/zombies/_zm_unitrigger;
#include maps/mp/zm_highrise_elevators;
#include maps/mp/zombies/_zm_buildables;
#include maps/mp/zm_transit_utility;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zm_transit_utility;
#include maps\mp\zombies\_zm_buildables;
#include maps\mp\zm_highrise_elevators;
#include maps\mp\zombies\_zm_unitrigger;
init_buildables()
{
level.buildable_piece_count = 13;
add_zombie_buildable( "springpad_zm", &"ZM_HIGHRISE_BUILD_SPRINGPAD", &"ZM_HIGHRISE_BUILDING_SPRINGPAD", &"ZM_HIGHRISE_BOUGHT_SPRINGPAD" );
add_zombie_buildable( "slipgun_zm", &"ZM_HIGHRISE_BUILD_SLIPGUN", &"ZM_HIGHRISE_BUILDING_SLIPGUN", &"ZM_HIGHRISE_BOUGHT_SLIPGUN" );
add_zombie_buildable( "keys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" );
add_zombie_buildable( "ekeys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" );
add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" );
level.buildable_piece_count = 13;
add_zombie_buildable( "springpad_zm", &"ZM_HIGHRISE_BUILD_SPRINGPAD", &"ZM_HIGHRISE_BUILDING_SPRINGPAD", &"ZM_HIGHRISE_BOUGHT_SPRINGPAD" );
add_zombie_buildable( "slipgun_zm", &"ZM_HIGHRISE_BUILD_SLIPGUN", &"ZM_HIGHRISE_BUILDING_SLIPGUN", &"ZM_HIGHRISE_BOUGHT_SLIPGUN" );
add_zombie_buildable( "keys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" );
add_zombie_buildable( "ekeys_zm", &"ZM_HIGHRISE_BUILD_KEYS", &"ZM_HIGHRISE_BUILDING_KEYS", &"ZM_HIGHRISE_BOUGHT_KEYS" );
add_zombie_buildable( "sq_common", &"ZOMBIE_BUILD_SQ_COMMON", &"ZOMBIE_BUILDING_SQ_COMMON" );
}
include_buildables()
{
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, 1 );
springpad_flag = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_bellows", 48, 15, 0, "zom_hud_trample_steam_bellow", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_04", undefined, 2 );
springpad_motor = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_compressor", 48, 15, 0, "zom_hud_trample_steam_compressor", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_01", undefined, 3 );
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, 4 );
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 );
slipgun_canister = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_extinguisher", 32, 64, 0, "zom_hud_icon_buildable_slip_ext", ::onpickup_common, ::ondrop_common, undefined, "TAG_CO2", undefined, 5 );
slipgun_cooker = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_cooker", 48, 15, 0, "zom_hud_icon_buildable_slip_cooker", ::onpickup_common, ::ondrop_common, undefined, "TAG_COOKER", undefined, 6 );
slipgun_foot = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_foot", 48, 15, 0, "zom_hud_icon_buildable_slip_foot", ::onpickup_common, ::ondrop_common, undefined, "TAG_FOOT", undefined, 7 );
slipgun_throttle = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_throttle", 48, 15, 0, "zom_hud_icon_buildable_slip_handle", ::onpickup_common, ::ondrop_common, undefined, "TAG_THROTTLE", undefined, 8 );
slipgun = spawnstruct();
slipgun.name = "slipgun_zm";
slipgun add_buildable_piece( slipgun_canister );
slipgun add_buildable_piece( slipgun_cooker );
slipgun add_buildable_piece( slipgun_foot );
slipgun add_buildable_piece( slipgun_throttle );
slipgun.onbuyweapon = ::onbuyweapon_slipgun;
slipgun.triggerthink = ::slipgunbuildable;
slipgun.onuseplantobject = ::onuseplantobject_slipgun;
include_buildable( slipgun );
key_chain = generate_zombie_buildable_piece( "keys_zm", "P6_zm_hr_key", 32, 64, 2,4, "zom_hud_icon_epod_key", ::onpickup_keys, ::ondrop_keys, undefined, undefined, 0, 9 );
key_chain.onspawn = ::onspawn_keys;
key_chain manage_multiple_pieces( 4 );
key = spawnstruct();
key.name = "keys_zm";
key add_buildable_piece( key_chain );
key.triggerthink = ::keysbuildable;
key.onuseplantobject = ::onuseplantobject_escapepodkey;
key.buildablepieces[ 0 ].onspawn = ::onspawn_keys;
include_buildable( key );
ekey = spawnstruct();
ekey.name = "ekeys_zm";
ekey add_buildable_piece( key_chain );
ekey.triggerthink = ::ekeysbuildable;
ekey.onuseplantobject = ::onuseplantobject_elevatorkey;
ekey.buildablepieces[ 0 ].onspawn = ::onspawn_keys;
include_buildable( ekey );
if ( !isDefined( level.gamedifficulty ) || level.gamedifficulty != 0 )
{
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, 10 );
sq_common_meteor = generate_zombie_buildable_piece( "sq_common", "p6_zm_buildable_sq_meteor", 128, 64, 0, "zm_hud_icon_sq_meteor", ::onpickup_common, ::ondrop_common, undefined, "tag_part_04", undefined, 11 );
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, 12 );
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, 13 );
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" );
}
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, 1 );
springpad_flag = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_bellows", 48, 15, 0, "zom_hud_trample_steam_bellow", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_04", undefined, 2 );
springpad_motor = generate_zombie_buildable_piece( "springpad_zm", "p6_zm_buildable_tramplesteam_compressor", 48, 15, 0, "zom_hud_trample_steam_compressor", ::onpickup_common, ::ondrop_common, undefined, "Tag_part_01", undefined, 3 );
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, 4 );
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 );
slipgun_canister = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_extinguisher", 32, 64, 0, "zom_hud_icon_buildable_slip_ext", ::onpickup_common, ::ondrop_common, undefined, "TAG_CO2", undefined, 5 );
slipgun_cooker = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_cooker", 48, 15, 0, "zom_hud_icon_buildable_slip_cooker", ::onpickup_common, ::ondrop_common, undefined, "TAG_COOKER", undefined, 6 );
slipgun_foot = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_foot", 48, 15, 0, "zom_hud_icon_buildable_slip_foot", ::onpickup_common, ::ondrop_common, undefined, "TAG_FOOT", undefined, 7 );
slipgun_throttle = generate_zombie_buildable_piece( "slipgun_zm", "t6_zmb_buildable_slipgun_throttle", 48, 15, 0, "zom_hud_icon_buildable_slip_handle", ::onpickup_common, ::ondrop_common, undefined, "TAG_THROTTLE", undefined, 8 );
slipgun = spawnstruct();
slipgun.name = "slipgun_zm";
slipgun add_buildable_piece( slipgun_canister );
slipgun add_buildable_piece( slipgun_cooker );
slipgun add_buildable_piece( slipgun_foot );
slipgun add_buildable_piece( slipgun_throttle );
slipgun.onbuyweapon = ::onbuyweapon_slipgun;
slipgun.triggerthink = ::slipgunbuildable;
slipgun.onuseplantobject = ::onuseplantobject_slipgun;
include_buildable( slipgun );
key_chain = generate_zombie_buildable_piece( "keys_zm", "P6_zm_hr_key", 32, 64, 2.4, "zom_hud_icon_epod_key", ::onpickup_keys, ::ondrop_keys, undefined, undefined, 0, 9 );
key_chain.onspawn = ::onspawn_keys;
key_chain manage_multiple_pieces( 4 );
key = spawnstruct();
key.name = "keys_zm";
key add_buildable_piece( key_chain );
key.triggerthink = ::keysbuildable;
key.onuseplantobject = ::onuseplantobject_escapepodkey;
key.buildablepieces[0].onspawn = ::onspawn_keys;
include_buildable( key );
ekey = spawnstruct();
ekey.name = "ekeys_zm";
ekey add_buildable_piece( key_chain );
ekey.triggerthink = ::ekeysbuildable;
ekey.onuseplantobject = ::onuseplantobject_elevatorkey;
ekey.buildablepieces[0].onspawn = ::onspawn_keys;
include_buildable( ekey );
if ( !isdefined( level.gamedifficulty ) || level.gamedifficulty != 0 )
{
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, 10 );
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, 11 );
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, 12 );
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, 13 );
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" );
}
}
springpadbuildable()
{
maps/mp/zombies/_zm_buildables::buildable_trigger_think( "springpad_zm_buildable_trigger", "springpad_zm", "equip_springpad_zm", &"ZM_HIGHRISE_GRAB_SPRINGPAD", 1, 1 );
maps\mp\zombies\_zm_buildables::buildable_trigger_think( "springpad_zm_buildable_trigger", "springpad_zm", "equip_springpad_zm", &"ZM_HIGHRISE_GRAB_SPRINGPAD", 1, 1 );
}
slipgunbuildable()
{
level thread wait_for_slipgun();
if ( isDefined( level.slipgun_as_equipment ) && !level.slipgun_as_equipment )
{
persist = 2;
}
else
{
persist = 1;
}
maps/mp/zombies/_zm_buildables::buildable_trigger_think( "slipgun_zm_buildable_trigger", "slipgun_zm", "slipgun_zm", &"ZM_HIGHRISE_GRAB_SLIPGUN", 1, persist );
level thread wait_for_slipgun();
if ( !( isdefined( level.slipgun_as_equipment ) && level.slipgun_as_equipment ) )
persist = 2;
else
persist = 1;
maps\mp\zombies\_zm_buildables::buildable_trigger_think( "slipgun_zm_buildable_trigger", "slipgun_zm", "slipgun_zm", &"ZM_HIGHRISE_GRAB_SLIPGUN", 1, persist );
}
keysbuildable()
{
pod_key = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "escape_pod_key_console_trigger", "keys_zm", "keys_zm", "", 1, 3 );
pod_key.prompt_and_visibility_func = ::escape_pod_key_prompt;
pod_key = maps\mp\zombies\_zm_buildables::buildable_trigger_think( "escape_pod_key_console_trigger", "keys_zm", "keys_zm", "", 1, 3 );
pod_key.prompt_and_visibility_func = ::escape_pod_key_prompt;
}
ekeysbuildable()
{
elevator_keys = maps/mp/zombies/_zm_buildables::buildable_trigger_think_array( "elevator_key_console_trigger", "ekeys_zm", "keys_zm", "", 1, 3 );
_a143 = elevator_keys;
_k143 = getFirstArrayKey( _a143 );
while ( isDefined( _k143 ) )
{
stub = _a143[ _k143 ];
stub.prompt_and_visibility_func = ::elevator_key_prompt;
stub.buildablezone.stat_name = "keys_zm";
_k143 = getNextArrayKey( _a143, _k143 );
}
elevator_keys = maps\mp\zombies\_zm_buildables::buildable_trigger_think_array( "elevator_key_console_trigger", "ekeys_zm", "keys_zm", "", 1, 3 );
foreach ( stub in elevator_keys )
{
stub.prompt_and_visibility_func = ::elevator_key_prompt;
stub.buildablezone.stat_name = "keys_zm";
}
}
ondrop_common( player )
{
/#
println( "ZM >> Common part callback onDrop()" );
println( "ZM >> Common part callback onDrop()" );
#/
self droponelevator( player );
self.piece_owner = undefined;
self droponelevator( player );
self.piece_owner = undefined;
}
onpickup_common( player )
{
/#
println( "ZM >> Common part callback onPickup()" );
println( "ZM >> Common part callback onPickup()" );
#/
player playsound( "zmb_buildable_pickup" );
self pickupfromelevator();
self.piece_owner = player;
player playsound( "zmb_buildable_pickup" );
self pickupfromelevator();
self.piece_owner = player;
}
sqcommonbuildable()
{
level.sq_buildable = maps/mp/zombies/_zm_buildables::buildable_trigger_think( "sq_common_buildable_trigger", "sq_common", "sq_common", "", 1, 0 );
level.sq_buildable = maps\mp\zombies\_zm_buildables::buildable_trigger_think( "sq_common_buildable_trigger", "sq_common", "sq_common", "", 1, 0 );
}
onbuyweapon_slipgun( player )
{
player givestartammo( self.stub.weaponname );
player switchtoweapon( self.stub.weaponname );
level notify( "slipgun_bought" );
player givestartammo( self.stub.weaponname );
player switchtoweapon( self.stub.weaponname );
level notify( "slipgun_bought", player );
}
wait_for_slipgun()
{
level.zombie_include_weapons[ "slipgun_zm" ] = 0;
if ( isDefined( level.slipgun_as_equipment ) && !level.slipgun_as_equipment )
{
level waittill( "slipgun_bought", player );
level.zombie_include_weapons[ "slipgun_zm" ] = 1;
level.zombie_weapons[ "slipgun_zm" ].is_in_box = 1;
}
level.zombie_include_weapons["slipgun_zm"] = 0;
if ( !( isdefined( level.slipgun_as_equipment ) && level.slipgun_as_equipment ) )
{
level waittill( "slipgun_bought", player );
level.zombie_include_weapons["slipgun_zm"] = 1;
level.zombie_weapons["slipgun_zm"].is_in_box = 1;
}
}
keyscreateglint()
{
if ( !isDefined( self.model.glint_fx ) )
{
playfxontag( level._effect[ "elevator_glint" ], self.model, "tag_origin" );
}
if ( !isdefined( self.model.glint_fx ) )
playfxontag( level._effect["elevator_glint"], self.model, "tag_origin" );
}
onspawn_keys()
{
self keyscreateglint();
self keyscreateglint();
}
ondrop_keys( player )
{
self keyscreateglint();
self keyscreateglint();
}
onpickup_keys( player )
{
}
escape_pod_key_prompt( player )
{
if ( !flag( "escape_pod_needs_reset" ) )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
return 0;
}
return self buildabletrigger_update_prompt( player );
if ( !flag( "escape_pod_needs_reset" ) )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
return 0;
}
return self buildabletrigger_update_prompt( player );
}
onuseplantobject_escapepodkey( player )
{
level notify( "reset_escape_pod" );
level notify( "reset_escape_pod" );
}
watch_elevator_prompt( player, trig )
{
player notify( "watch_elevator_prompt" );
player endon( "watch_elevator_prompt" );
trig endon( "kill_trigger" );
while ( 1 )
{
trig.stub.elevator waittill( "floor_changed" );
if ( isDefined( self.stub.elevator ) )
{
if ( trig.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) )
{
thread maps/mp/zombies/_zm_unitrigger::cleanup_trigger( trig, player );
return;
}
}
}
player notify( "watch_elevator_prompt" );
player endon( "watch_elevator_prompt" );
trig endon( "kill_trigger" );
while ( true )
{
trig.stub.elevator waittill( "floor_changed" );
if ( isdefined( self.stub.elevator ) )
{
if ( trig.stub.elevator maps\mp\zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) )
{
thread maps\mp\zombies\_zm_unitrigger::cleanup_trigger( trig, player );
return;
}
}
}
}
elevator_key_prompt( player )
{
if ( !isDefined( self.stub.elevator ) )
{
elevatorname = self.stub.script_noteworthy;
if ( isDefined( elevatorname ) && isDefined( self.stub.script_parameters ) )
{
elevator = level.elevators[ elevatorname ];
floor = int( self.stub.script_parameters );
flevel = elevator maps/mp/zm_highrise_elevators::elevator_level_for_floor( floor );
self.stub.elevator = elevator;
self.stub.floor = flevel;
}
}
if ( !isdefined( self.stub.elevator ) )
{
elevatorname = self.stub.script_noteworthy;
if ( isdefined( elevatorname ) && isdefined( self.stub.script_parameters ) )
{
elevator = level.elevators[elevatorname];
floor = int( self.stub.script_parameters );
flevel = elevator maps\mp\zm_highrise_elevators::elevator_level_for_floor( floor );
self.stub.elevator = elevator;
self.stub.floor = flevel;
}
}
/#
if ( !isDefined( self.stub.elevator ) )
{
if ( isDefined( self.stub.script_noteworthy ) )
{
error( "Cannot locate elevator " + self.stub.script_noteworthy );
}
else
{
error( "Cannot locate elevator " );
}
}
else
{
color = vectorScale( ( 0, 0, 1 ), 0,7 );
stop = self.stub.floor;
floor = self.stub.elevator.floors[ "" + stop ].script_location;
text = "call " + self.stub.script_noteworthy + " to stop " + stop + " floor " + floor + "";
if ( getDvarInt( #"B67910B4" ) )
{
print3d( self.stub.origin, text, color, 1, 0,5, 300 );
if ( !isdefined( self.stub.elevator ) )
{
if ( isdefined( self.stub.script_noteworthy ) )
error( "Cannot locate elevator " + self.stub.script_noteworthy );
else
error( "Cannot locate elevator " );
}
else
{
color = vectorscale( ( 0, 0, 1 ), 0.7 );
stop = self.stub.floor;
floor = self.stub.elevator.floors["" + stop].script_location;
text = "call " + self.stub.script_noteworthy + " to stop " + stop + " floor " + floor + "";
if ( getdvarint( _hash_B67910B4 ) )
print3d( self.stub.origin, text, color, 1, 0.5, 300 );
}
#/
}
}
if ( isDefined( self.stub.elevator ) )
{
if ( self.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( self.stub.floor ) )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
return 0;
}
}
if ( !flag( "power_on" ) )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
return 0;
}
can_use = self buildabletrigger_update_prompt( player );
if ( can_use )
{
thread watch_elevator_prompt( player, self );
}
return can_use;
if ( isdefined( self.stub.elevator ) )
{
if ( self.stub.elevator maps\mp\zm_highrise_elevators::elevator_is_on_floor( self.stub.floor ) )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
return 0;
}
}
if ( !flag( "power_on" ) )
{
self.stub.hint_string = "";
self sethintstring( self.stub.hint_string );
return 0;
}
can_use = self buildabletrigger_update_prompt( player );
if ( can_use )
thread watch_elevator_prompt( player, self );
return can_use;
}
onuseplantobject_elevatorkey( player )
{
elevatorname = self.script_noteworthy;
if ( isDefined( elevatorname ) && isDefined( self.script_parameters ) )
{
floor = int( self.script_parameters );
elevator = level.elevators[ elevatorname ];
if ( isDefined( elevator ) )
{
elevator.body.force_starting_floor = floor;
elevator.body notify( "forcego" );
}
}
elevatorname = self.script_noteworthy;
if ( isdefined( elevatorname ) && isdefined( self.script_parameters ) )
{
floor = int( self.script_parameters );
elevator = level.elevators[elevatorname];
if ( isdefined( elevator ) )
{
elevator.body.force_starting_floor = floor;
elevator.body notify( "forcego" );
}
}
}
droponelevator( player )
{
if ( isDefined( player ) && isDefined( player maps/mp/zm_highrise_elevators::object_is_on_elevator() ) && player maps/mp/zm_highrise_elevators::object_is_on_elevator() )
{
self.model linkto( player.elevator_parent );
self.linked_to_elevator = 1;
self.unitrigger.link_parent = player.elevator_parent;
}
else
{
self.unitrigger.link_parent = undefined;
}
if ( isdefined( player ) && ( isdefined( player maps\mp\zm_highrise_elevators::object_is_on_elevator() ) && player maps\mp\zm_highrise_elevators::object_is_on_elevator() ) )
{
self.model linkto( player.elevator_parent );
self.linked_to_elevator = 1;
self.unitrigger.link_parent = player.elevator_parent;
}
else
self.unitrigger.link_parent = undefined;
}
pickupfromelevator()
{
if ( isDefined( self.linked_to_elevator ) && self.linked_to_elevator )
{
if ( isDefined( self.model ) )
{
self.model unlink();
}
self.linked_to_elevator = undefined;
}
if ( isDefined( self.unitrigger ) )
{
self.unitrigger.link_parent = undefined;
}
if ( isdefined( self.linked_to_elevator ) && self.linked_to_elevator )
{
if ( isdefined( self.model ) )
self.model unlink();
self.linked_to_elevator = undefined;
}
if ( isdefined( self.unitrigger ) )
self.unitrigger.link_parent = undefined;
}
onuseplantobject_slipgun( player )
{
/#
println( "ZM >> Slipgun Buildable CallBack onUsePlantObject()" );
println( "ZM >> Slipgun Buildable CallBack onUsePlantObject()" );
#/
buildable = self.buildablezone;
first_part = "TAG_COOKER";
second_part = "TAG_BASE";
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 && player.current_buildable_piece.part_name == first_part )
{
buildable.stub.model showpart( second_part );
i++;
continue;
}
else
{
buildable.stub.model hidepart( second_part );
}
}
i++;
}
buildable = self.buildablezone;
first_part = "TAG_COOKER";
second_part = "TAG_BASE";
for ( i = 0; i < buildable.pieces.size; i++ )
{
if ( buildable.pieces[i].part_name == first_part )
{
if ( isdefined( buildable.pieces[i].built ) && buildable.pieces[i].built || player player_get_buildable_piece().part_name == first_part )
{
buildable.stub.model showpart( second_part );
continue;
}
buildable.stub.model hidepart( second_part );
}
}
}

View File

@ -1,415 +1,390 @@
#include maps/mp/zombies/_zm_ai_basic;
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\zombies\_zm_ai_basic;
zombie_tracking_init()
{
level.zombie_respawned_health = [];
if ( !isDefined( level.zombie_tracking_dist ) )
{
level.zombie_tracking_dist = 1000;
}
if ( !isDefined( level.zombie_tracking_high ) )
{
level.zombie_tracking_high = 500;
}
if ( !isDefined( level.zombie_tracking_wait ) )
{
level.zombie_tracking_wait = 10;
}
building_trigs = getentarray( "zombie_fell_off", "targetname" );
if ( isDefined( building_trigs ) )
{
array_thread( building_trigs, ::zombies_off_building );
}
level.distance_tracker_aggressive_distance = 500;
level.distance_tracker_aggressive_height = 200;
for ( ;; )
{
while ( 1 )
{
zombies = get_round_enemy_array();
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
{
wait level.zombie_tracking_wait;
}
}
else i = 0;
while ( i < zombies.size )
{
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking )
{
zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
}
i++;
}
wait level.zombie_tracking_wait;
}
level.zombie_respawned_health = [];
if ( !isdefined( level.zombie_tracking_dist ) )
level.zombie_tracking_dist = 1000;
if ( !isdefined( level.zombie_tracking_high ) )
level.zombie_tracking_high = 500;
if ( !isdefined( level.zombie_tracking_wait ) )
level.zombie_tracking_wait = 10;
building_trigs = getentarray( "zombie_fell_off", "targetname" );
if ( isdefined( building_trigs ) )
array_thread( building_trigs, ::zombies_off_building );
level.distance_tracker_aggressive_distance = 500;
level.distance_tracker_aggressive_height = 200;
while ( true )
{
zombies = get_round_enemy_array();
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
{
wait( level.zombie_tracking_wait );
continue;
}
else
{
for ( i = 0; i < zombies.size; i++ )
{
if ( isdefined( zombies[i] ) && !( isdefined( zombies[i].ignore_distance_tracking ) && zombies[i].ignore_distance_tracking ) )
zombies[i] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
}
}
wait( level.zombie_tracking_wait );
}
}
delete_zombie_noone_looking( how_close, how_high )
{
self endon( "death" );
if ( !isDefined( how_close ) )
{
how_close = 1000;
}
if ( !isDefined( how_high ) )
{
how_high = 500;
}
distance_squared_check = how_close * how_close;
height_squared_check = how_high * how_high;
too_far_dist = distance_squared_check * 3;
if ( isDefined( level.zombie_tracking_too_far_dist ) )
{
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
}
self.inview = 0;
self.player_close = 0;
players = get_players();
i = 0;
while ( i < players.size )
{
if ( players[ i ].sessionstate == "spectator" )
{
i++;
continue;
}
else if ( isDefined( level.only_track_targeted_players ) )
{
if ( !isDefined( self.favoriteenemy ) || self.favoriteenemy != players[ i ] )
{
i++;
continue;
}
}
else
{
can_be_seen = self player_can_see_me( players[ i ] );
if ( can_be_seen && distancesquared( self.origin, players[ i ].origin ) < too_far_dist )
{
self.inview++;
}
if ( distancesquared( self.origin, players[ i ].origin ) < distance_squared_check && abs( self.origin[ 2 ] - players[ i ].origin[ 2 ] ) < how_high )
{
self.player_close++;
}
}
i++;
}
wait 0,1;
if ( self.inview == 0 && self.player_close == 0 )
{
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" )
{
return;
}
if ( isDefined( self.electrified ) && self.electrified == 1 )
{
return;
}
zombies = getaiarray( "axis" );
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && self.health >= self.maxhealth )
{
if ( isDefined( self.exclude_distance_cleanup_adding_to_total ) && !self.exclude_distance_cleanup_adding_to_total && isDefined( self.isscreecher ) && !self.isscreecher )
{
level.zombie_total++;
if ( self.health < level.zombie_health )
{
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = self.health;
}
}
}
self maps/mp/zombies/_zm_spawner::reset_attack_spot();
self notify( "zombie_delete" );
self delete();
recalc_zombie_array();
}
self endon( "death" );
if ( !isdefined( how_close ) )
how_close = 1000;
if ( !isdefined( how_high ) )
how_high = 500;
distance_squared_check = how_close * how_close;
height_squared_check = how_high * how_high;
too_far_dist = distance_squared_check * 3;
if ( isdefined( level.zombie_tracking_too_far_dist ) )
too_far_dist = level.zombie_tracking_too_far_dist * level.zombie_tracking_too_far_dist;
self.inview = 0;
self.player_close = 0;
players = get_players();
for ( i = 0; i < players.size; i++ )
{
if ( players[i].sessionstate == "spectator" )
continue;
if ( isdefined( level.only_track_targeted_players ) )
{
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[i] )
continue;
}
can_be_seen = self player_can_see_me( players[i] );
if ( can_be_seen && distancesquared( self.origin, players[i].origin ) < too_far_dist )
self.inview++;
if ( distancesquared( self.origin, players[i].origin ) < distance_squared_check && abs( self.origin[2] - players[i].origin[2] ) < how_high )
self.player_close++;
}
wait 0.1;
if ( self.inview == 0 && self.player_close == 0 )
{
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
return;
if ( isdefined( self.electrified ) && self.electrified == 1 )
return;
zombies = getaiarray( "axis" );
if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth )
{
if ( !( isdefined( self.exclude_distance_cleanup_adding_to_total ) && self.exclude_distance_cleanup_adding_to_total ) && !( isdefined( self.isscreecher ) && self.isscreecher ) )
{
level.zombie_total++;
if ( self.health < level.zombie_health )
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
}
}
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
self notify( "zombie_delete" );
self delete();
recalc_zombie_array();
}
}
player_can_see_me( player )
{
playerangles = player getplayerangles();
playerforwardvec = anglesToForward( playerangles );
playerunitforwardvec = vectornormalize( playerforwardvec );
banzaipos = self.origin;
playerpos = player getorigin();
playertobanzaivec = banzaipos - playerpos;
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
if ( forwarddotbanzai >= 1 )
{
anglefromcenter = 0;
}
else if ( forwarddotbanzai <= -1 )
{
anglefromcenter = 180;
}
else
{
anglefromcenter = acos( forwarddotbanzai );
}
playerfov = getDvarFloat( "cg_fov" );
banzaivsplayerfovbuffer = getDvarFloat( "g_banzai_player_fov_buffer" );
if ( banzaivsplayerfovbuffer <= 0 )
{
banzaivsplayerfovbuffer = 0,2;
}
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
return playercanseeme;
playerangles = player getplayerangles();
playerforwardvec = anglestoforward( playerangles );
playerunitforwardvec = vectornormalize( playerforwardvec );
banzaipos = self.origin;
playerpos = player getorigin();
playertobanzaivec = banzaipos - playerpos;
playertobanzaiunitvec = vectornormalize( playertobanzaivec );
forwarddotbanzai = vectordot( playerunitforwardvec, playertobanzaiunitvec );
if ( forwarddotbanzai >= 1 )
anglefromcenter = 0;
else if ( forwarddotbanzai <= -1 )
anglefromcenter = 180;
else
anglefromcenter = acos( forwarddotbanzai );
playerfov = getdvarfloat( "cg_fov" );
banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
if ( banzaivsplayerfovbuffer <= 0 )
banzaivsplayerfovbuffer = 0.2;
playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer );
return playercanseeme;
}
escaped_zombies_cleanup_init()
{
self endon( "death" );
self.zombie_path_bad = 0;
while ( 1 )
{
if ( !self.zombie_path_bad )
{
self waittill( "bad_path" );
}
found_player = undefined;
players = get_players();
i = 0;
while ( i < players.size )
{
if ( self maymovetopoint( players[ i ].origin, 1 ) )
{
self.favoriteenemy = players[ i ];
found_player = 1;
i++;
continue;
}
i++;
}
n_delete_distance = 800;
n_delete_height = 300;
if ( is_player_in_inverted_elevator_shaft() )
{
n_delete_distance = level.distance_tracker_aggressive_distance;
n_delete_height = level.distance_tracker_aggressive_height;
}
if ( !isDefined( found_player ) && isDefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area )
{
self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height );
self.zombie_path_bad = 1;
self escaped_zombies_cleanup();
}
wait 0,1;
}
self endon( "death" );
self.zombie_path_bad = 0;
while ( true )
{
if ( !self.zombie_path_bad )
self waittill( "bad_path" );
found_player = undefined;
players = get_players();
for ( i = 0; i < players.size; i++ )
{
if ( self maymovetopoint( players[i].origin, 1 ) )
{
self.favoriteenemy = players[i];
found_player = 1;
continue;
}
}
n_delete_distance = 800;
n_delete_height = 300;
if ( is_player_in_inverted_elevator_shaft() )
{
n_delete_distance = level.distance_tracker_aggressive_distance;
n_delete_height = level.distance_tracker_aggressive_height;
}
if ( !isdefined( found_player ) && ( isdefined( self.completed_emerging_into_playable_area ) && self.completed_emerging_into_playable_area ) )
{
self thread delete_zombie_noone_looking( n_delete_distance, n_delete_height );
self.zombie_path_bad = 1;
self escaped_zombies_cleanup();
}
wait 0.1;
}
}
is_player_in_inverted_elevator_shaft()
{
b_player_is_in_elevator_shaft = 0;
a_occupied_zones = get_occupied_zones();
i = 0;
while ( i < a_occupied_zones.size )
{
if ( issubstr( a_occupied_zones[ i ], "orange_elevator_shaft" ) )
{
b_player_is_in_elevator_shaft = 1;
}
i++;
}
return b_player_is_in_elevator_shaft;
b_player_is_in_elevator_shaft = 0;
a_occupied_zones = get_occupied_zones();
for ( i = 0; i < a_occupied_zones.size; i++ )
{
if ( issubstr( a_occupied_zones[i], "orange_elevator_shaft" ) )
b_player_is_in_elevator_shaft = 1;
}
return b_player_is_in_elevator_shaft;
}
get_occupied_zones()
{
a_occupied_zones = [];
i = 0;
while ( i < level.active_zone_names.size )
{
if ( level.zones[ level.active_zone_names[ i ] ].is_occupied )
{
a_occupied_zones[ a_occupied_zones.size ] = level.active_zone_names[ i ];
}
i++;
}
return a_occupied_zones;
a_occupied_zones = [];
for ( i = 0; i < level.active_zone_names.size; i++ )
{
if ( level.zones[level.active_zone_names[i]].is_occupied )
a_occupied_zones[a_occupied_zones.size] = level.active_zone_names[i];
}
return a_occupied_zones;
}
get_escape_position()
{
self endon( "death" );
str_zone = get_current_zone();
if ( isDefined( str_zone ) )
{
a_zones = get_adjacencies_to_zone( str_zone );
a_dog_locations = get_dog_locations_in_zones( a_zones );
s_farthest = self get_farthest_dog_location( a_dog_locations );
}
return s_farthest;
self endon( "death" );
str_zone = get_current_zone();
if ( isdefined( str_zone ) )
{
a_zones = get_adjacencies_to_zone( str_zone );
a_dog_locations = get_dog_locations_in_zones( a_zones );
s_farthest = self get_farthest_dog_location( a_dog_locations );
}
return s_farthest;
}
get_current_zone()
{
str_zone = undefined;
a_zones = getarraykeys( level.zones );
_a310 = a_zones;
_k310 = getFirstArrayKey( _a310 );
while ( isDefined( _k310 ) )
{
zone = _a310[ _k310 ];
i = 0;
while ( i < level.zones[ zone ].volumes.size )
{
if ( self istouching( level.zones[ zone ].volumes[ i ] ) )
{
str_zone = zone;
}
i++;
}
_k310 = getNextArrayKey( _a310, _k310 );
}
return str_zone;
str_zone = undefined;
a_zones = getarraykeys( level.zones );
foreach ( zone in a_zones )
{
for ( i = 0; i < level.zones[zone].volumes.size; i++ )
{
if ( self istouching( level.zones[zone].volumes[i] ) )
str_zone = zone;
}
}
return str_zone;
}
get_adjacencies_to_zone( str_zone )
{
a_adjacencies = [];
a_adjacencies[ 0 ] = str_zone;
a_adjacent_zones = getarraykeys( level.zones[ str_zone ].adjacent_zones );
i = 0;
while ( i < a_adjacent_zones.size )
{
if ( level.zones[ str_zone ].adjacent_zones[ a_adjacent_zones[ i ] ].is_connected )
{
a_adjacencies[ a_adjacencies.size ] = a_adjacent_zones[ i ];
}
i++;
}
return a_adjacencies;
a_adjacencies = [];
a_adjacencies[0] = str_zone;
a_adjacent_zones = getarraykeys( level.zones[str_zone].adjacent_zones );
for ( i = 0; i < a_adjacent_zones.size; i++ )
{
if ( level.zones[str_zone].adjacent_zones[a_adjacent_zones[i]].is_connected )
a_adjacencies[a_adjacencies.size] = a_adjacent_zones[i];
}
return a_adjacencies;
}
get_dog_locations_in_zones( a_zones )
{
a_dog_locations = [];
_a345 = a_zones;
_k345 = getFirstArrayKey( _a345 );
while ( isDefined( _k345 ) )
{
zone = _a345[ _k345 ];
a_dog_locations = arraycombine( a_dog_locations, level.zones[ zone ].dog_locations, 0, 0 );
_k345 = getNextArrayKey( _a345, _k345 );
}
return a_dog_locations;
a_dog_locations = [];
foreach ( zone in a_zones )
a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 );
return a_dog_locations;
}
get_farthest_dog_location( a_dog_locations )
{
n_farthest_index = 0;
n_distance_farthest = 0;
i = 0;
while ( i < a_dog_locations.size )
{
n_distance_sq = distancesquared( self.origin, a_dog_locations[ i ].origin );
if ( n_distance_sq > n_distance_farthest )
{
n_distance_farthest = n_distance_sq;
n_farthest_index = i;
}
i++;
}
return a_dog_locations[ n_farthest_index ];
n_farthest_index = 0;
n_distance_farthest = 0;
for ( i = 0; i < a_dog_locations.size; i++ )
{
n_distance_sq = distancesquared( self.origin, a_dog_locations[i].origin );
if ( n_distance_sq > n_distance_farthest )
{
n_distance_farthest = n_distance_sq;
n_farthest_index = i;
}
}
return a_dog_locations[n_farthest_index];
}
escaped_zombies_cleanup()
{
self endon( "death" );
s_escape = self get_escape_position();
self notify( "stop_find_flesh" );
self notify( "zombie_acquire_enemy" );
if ( isDefined( s_escape ) )
{
self setgoalpos( s_escape.origin );
self thread check_player_available();
self waittill_any( "goal", "reaquire_player" );
}
self.zombie_path_bad = !can_zombie_path_to_any_player();
wait 0,1;
if ( !self.zombie_path_bad )
{
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
}
self endon( "death" );
s_escape = self get_escape_position();
self notify( "stop_find_flesh" );
self notify( "zombie_acquire_enemy" );
if ( isdefined( s_escape ) )
{
self setgoalpos( s_escape.origin );
self thread check_player_available();
self waittill_any( "goal", "reaquire_player" );
}
self.zombie_path_bad = !can_zombie_path_to_any_player();
wait 0.1;
if ( !self.zombie_path_bad )
self thread maps\mp\zombies\_zm_ai_basic::find_flesh();
}
check_player_available()
{
self notify( "_check_player_available" );
self endon( "_check_player_available" );
self endon( "death" );
self endon( "goal" );
self endon( "reaquire_player" );
while ( self.zombie_path_bad )
{
if ( self can_zombie_see_any_player() )
{
self notify( "reaquire_player" );
}
wait randomfloatrange( 0,2, 0,5 );
}
self notify( "_check_player_available" );
self endon( "_check_player_available" );
self endon( "death" );
self endon( "goal" );
self endon( "reaquire_player" );
while ( self.zombie_path_bad )
{
if ( self can_zombie_see_any_player() )
self notify( "reaquire_player" );
wait( randomfloatrange( 0.2, 0.5 ) );
}
}
can_zombie_path_to_any_player()
{
a_players = get_players();
i = 0;
while ( i < a_players.size )
{
if ( findpath( self.origin, a_players[ i ].origin ) )
{
return 1;
}
i++;
}
return 0;
a_players = get_players();
for ( i = 0; i < a_players.size; i++ )
{
if ( findpath( self.origin, a_players[i].origin ) )
return true;
}
return false;
}
can_zombie_see_any_player()
{
a_players = get_players();
i = 0;
while ( i < a_players.size )
{
if ( self maymovetopoint( a_players[ i ].origin, 1 ) )
{
return 1;
}
i++;
}
return 0;
a_players = get_players();
for ( i = 0; i < a_players.size; i++ )
{
if ( self maymovetopoint( a_players[i].origin, 1 ) )
return true;
}
return false;
}
zombies_off_building()
{
while ( 1 )
{
self waittill( "trigger", who );
if ( !isplayer( who ) && isDefined( who.is_leaper ) && !who.is_leaper )
{
zombies = getaiarray( "axis" );
if ( ( zombies.size + level.zombie_total ) > 24 || ( zombies.size + level.zombie_total ) <= 24 && who.health >= who.maxhealth )
{
if ( isDefined( who.exclude_distance_cleanup_adding_to_total ) && !who.exclude_distance_cleanup_adding_to_total && isDefined( who.is_leaper ) && !who.is_leaper )
{
level.zombie_total++;
if ( who.health < level.zombie_health )
{
level.zombie_respawned_health[ level.zombie_respawned_health.size ] = who.health;
}
}
}
who maps/mp/zombies/_zm_spawner::reset_attack_spot();
who notify( "zombie_delete" );
who dodamage( who.health + 666, who.origin, who );
recalc_zombie_array();
}
wait 0,1;
}
while ( true )
{
self waittill( "trigger", who );
if ( !isplayer( who ) && !( isdefined( who.is_leaper ) && who.is_leaper ) )
{
zombies = getaiarray( "axis" );
if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && who.health >= who.maxhealth )
{
if ( !( isdefined( who.exclude_distance_cleanup_adding_to_total ) && who.exclude_distance_cleanup_adding_to_total ) && !( isdefined( who.is_leaper ) && who.is_leaper ) )
{
level.zombie_total++;
if ( who.health < level.zombie_health )
level.zombie_respawned_health[level.zombie_respawned_health.size] = who.health;
}
}
who maps\mp\zombies\_zm_spawner::reset_attack_spot();
who notify( "zombie_delete" );
who dodamage( who.health + 666, who.origin, who );
recalc_zombie_array();
}
wait 0.1;
}
}

View File

@ -1,189 +1,204 @@
//checked includes match cerberus output
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zombies\_zm_weapons;
main_start() //checked matches cerberus output
main_start()
{
level thread spawned_collision_ffotd();
level thread eject_player_trigger_init();
level thread change_bad_spawner();
level thread spawned_collision_ffotd();
level thread eject_player_trigger_init();
level thread change_bad_spawner();
}
main_end() //checked matches cerberus output
main_end()
{
level thread eject_player_trigger();
level thread eject_player_trigger();
}
spawned_collision_ffotd() //checked changed to match cerberus output
spawned_collision_ffotd()
{
precachemodel( "collision_wall_32x32x10_standard" );
flag_wait( "start_zombie_round_logic" );
if ( !is_true( level.optimise_for_splitscreen ) )
{
collision1 = spawn( "script_model", ( 2044, 499, 2893 ) );
collision1 setmodel( "collision_wall_32x32x10_standard" );
collision1.angles = vectorScale( ( 0, 1, 0 ), 330 );
collision1 ghost();
collision2 = spawn( "script_model", ( 2044, 499, 2925 ) );
collision2 setmodel( "collision_wall_32x32x10_standard" );
collision2.angles = vectorScale( ( 0, 1, 0 ), 330 );
collision2 ghost();
collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) );
collision3 setmodel( "collision_wall_256x256x10_standard" );
collision3.angles = ( 0, 0, 0 );
collision3 ghost();
collision3b = spawn( "script_model", ( 1740, 1497, 3075 ) );
collision3b setmodel( "collision_wall_256x256x10_standard" );
collision3b.angles = ( 0, 0, 0 );
collision3b ghost();
collision3 = spawn( "script_model", ( 2054, 1455, 3440 ) );
collision3 setmodel( "collision_wall_128x128x10_standard" );
collision3.angles = ( 0, 0, 0 );
collision3 ghost();
collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) );
collision4 setmodel( "collision_wall_256x256x10_standard" );
collision4.angles = vectorScale( ( 0, 1, 0 ), 270 );
collision4 ghost();
collision5 = spawn( "script_model", ( 3076, 1598, 2791 ) );
collision5 setmodel( "collision_wall_256x256x10_standard" );
collision5.angles = vectorScale( ( 1, 0, 0 ), 347.6 );
collision5 ghost();
collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) );
collision6b setmodel( "collision_wall_256x256x10_standard" );
collision6b.angles = ( 0, 270, 12 );
collision6b ghost();
collision6c = spawn( "script_model", ( 3666, 1840, 2023 ) );
collision6c setmodel( "collision_wall_256x256x10_standard" );
collision6c.angles = ( 0, 270, 12 );
collision6c ghost();
collision7 = spawn( "script_model", ( 2157, 839, 3129 ) );
collision7 setmodel( "collision_wall_128x128x10_standard" );
collision7.angles = ( 0, 9.79996, -90 );
collision7 ghost();
collision7 = spawn( "script_model", ( 3594, 1708, 2247 ) );
collision7 setmodel( "collision_wall_128x128x10_standard" );
collision7.angles = ( 0, 270, 12 );
collision7 ghost();
}
precachemodel( "collision_wall_32x32x10_standard" );
flag_wait( "start_zombie_round_logic" );
if ( !is_true( level.optimise_for_splitscreen ) )
{
collision1 = spawn( "script_model", ( 2044, 499, 2893 ) );
collision1 setmodel( "collision_wall_32x32x10_standard" );
collision1.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision1 ghost();
collision2 = spawn( "script_model", ( 2044, 499, 2925 ) );
collision2 setmodel( "collision_wall_32x32x10_standard" );
collision2.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision2 ghost();
collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) );
collision3 setmodel( "collision_wall_256x256x10_standard" );
collision3.angles = ( 0, 0, 0 );
collision3 ghost();
collision3b = spawn( "script_model", ( 1740, 1497, 3075 ) );
collision3b setmodel( "collision_wall_256x256x10_standard" );
collision3b.angles = ( 0, 0, 0 );
collision3b ghost();
collision3 = spawn( "script_model", ( 2054, 1455, 3440 ) );
collision3 setmodel( "collision_wall_128x128x10_standard" );
collision3.angles = ( 0, 0, 0 );
collision3 ghost();
collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) );
collision4 setmodel( "collision_wall_256x256x10_standard" );
collision4.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
collision4 ghost();
collision5 = spawn( "script_model", ( 3076, 1598, 2791 ) );
collision5 setmodel( "collision_wall_256x256x10_standard" );
collision5.angles = vectorscale( ( 1, 0, 0 ), 347.6 );
collision5 ghost();
collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) );
collision6b setmodel( "collision_wall_256x256x10_standard" );
collision6b.angles = ( 0, 270, 12 );
collision6b ghost();
collision6c = spawn( "script_model", ( 3666, 1840, 2023 ) );
collision6c setmodel( "collision_wall_256x256x10_standard" );
collision6c.angles = ( 0, 270, 12 );
collision6c ghost();
collision7 = spawn( "script_model", ( 2157, 839, 3129 ) );
collision7 setmodel( "collision_wall_128x128x10_standard" );
collision7.angles = ( 0, 9.79996, -90 );
collision7 ghost();
collision7 = spawn( "script_model", ( 3594, 1708, 2247 ) );
collision7 setmodel( "collision_wall_128x128x10_standard" );
collision7.angles = ( 0, 270, 12 );
collision7 ghost();
}
}
eject_player_trigger_init() //checked matches cerberus output
eject_player_trigger_init()
{
trig1 = spawn( "trigger_box", ( 3172, 1679, 1296.09 ), 0, 64, 10, 64 );
trig1.angles = ( 0, 0, 0 );
trig1.targetname = "eject_player_pos";
trig1.point = spawn( "script_origin", ( 3266, 1703.5, 1325 ) );
trig2 = spawn( "trigger_box", ( 3225.5, 1153, 1346.48 ), 0, 64, 10, 64 );
trig2.angles = ( 0, 0, 0 );
trig2.targetname = "eject_player_pos";
trig2.point = spawn( "script_origin", ( 3074, 1137.5, 1282.26 ) );
trig3 = spawn( "trigger_radius", ( 3583, 1964, 2751.95 ), 0, 30, 64 );
trig3.angles = ( 0, 0, 0 );
trig3.targetname = "eject_player_pos";
trig3.point = spawn( "script_origin", ( 3590.2, 2068, 2720.34 ) );
trig1 = spawn( "trigger_box", ( 3172, 1679, 1296.09 ), 0, 64, 10, 64 );
trig1.angles = ( 0, 0, 0 );
trig1.targetname = "eject_player_pos";
trig1.point = spawn( "script_origin", ( 3266, 1703.5, 1325 ) );
trig2 = spawn( "trigger_box", ( 3225.5, 1153, 1346.48 ), 0, 64, 10, 64 );
trig2.angles = ( 0, 0, 0 );
trig2.targetname = "eject_player_pos";
trig2.point = spawn( "script_origin", ( 3074, 1137.5, 1282.26 ) );
trig3 = spawn( "trigger_radius", ( 3583, 1964, 2751.95 ), 0, 30, 64 );
trig3.angles = ( 0, 0, 0 );
trig3.targetname = "eject_player_pos";
trig3.point = spawn( "script_origin", ( 3590.2, 2068, 2720.34 ) );
}
eject_player_trigger() //checked matches cerberus output
eject_player_trigger()
{
trigs = getentarray( "eject_player_pos", "targetname" );
array_thread( trigs, ::player_eject_watcher );
trigs = getentarray( "eject_player_pos", "targetname" );
array_thread( trigs, ::player_eject_watcher );
}
player_eject_watcher() //checked matches cerberus output
player_eject_watcher()
{
time = 0;
while ( 1 )
{
self waittill( "trigger", who );
if ( is_player_valid( who ) )
{
while ( who istouching( self ) )
{
time++;
if ( time >= 6 )
{
if ( isDefined( self.point ) )
{
if ( !positionwouldtelefrag( self.point.origin ) )
{
who setorigin( self.point.origin );
who playlocalsound( level.zmb_laugh_alias );
who playrumbleonentity( "damage_light" );
earthquake( 0.5, 0.5, who.origin, 100 );
who thread ejected_overrun( self );
}
}
}
wait 1;
}
time = 0;
}
wait 0.1;
}
time = 0;
while ( true )
{
self waittill( "trigger", who );
if ( is_player_valid( who ) )
{
while ( who istouching( self ) )
{
time++;
if ( time >= 6 )
{
if ( isdefined( self.point ) )
{
if ( !positionwouldtelefrag( self.point.origin ) )
{
who setorigin( self.point.origin );
who playlocalsound( level.zmb_laugh_alias );
who playrumbleonentity( "damage_light" );
earthquake( 0.5, 0.5, who.origin, 100 );
who thread ejected_overrun( self );
}
}
}
wait 1.0;
}
time = 0;
}
wait 0.1;
}
}
ejected_overrun( trig ) //checked changed to match cerberus output
ejected_overrun( trig )
{
if ( !isDefined( trig.ejected ) )
{
trig.ejected = 1;
}
else
{
trig.ejected++;
if ( trig.ejected >= 3 )
{
primaries = self getweaponslistprimaries();
foreach ( weapon in primaries )
{
self takeweapon( weapon );
}
lethal = self get_player_lethal_grenade();
if ( isDefined( lethal ) && lethal != "" )
{
self takeweapon( lethal );
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( lethal );
}
tactical = self get_player_tactical_grenade();
if ( isDefined( tactical ) && tactical != "" )
{
self takeweapon( tactical );
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( tactical );
}
mine = self get_player_placeable_mine();
if ( isDefined( mine ) )
{
self takeweapon( mine );
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( mine );
}
melee_weapon = self get_player_melee_weapon();
if ( isDefined( melee_weapon ) )
{
self takeweapon( melee_weapon );
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( melee_weapon );
}
self giveweapon( "knife_zm" );
self.current_melee_weapon = "knife_zm";
self give_start_weapon( 1 );
self.currentweapon = "m1911_zm";
}
}
if ( !isdefined( trig.ejected ) )
trig.ejected = 1;
else
{
trig.ejected++;
if ( trig.ejected >= 3 )
{
primaries = self getweaponslistprimaries();
foreach ( weapon in primaries )
self takeweapon( weapon );
lethal = self get_player_lethal_grenade();
if ( isdefined( lethal ) && lethal != "" )
{
self takeweapon( lethal );
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( lethal );
}
tactical = self get_player_tactical_grenade();
if ( isdefined( tactical ) && tactical != "" )
{
self takeweapon( tactical );
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( tactical );
}
mine = self get_player_placeable_mine();
if ( isdefined( mine ) )
{
self takeweapon( mine );
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( mine );
}
melee_weapon = self get_player_melee_weapon();
if ( isdefined( melee_weapon ) )
{
self takeweapon( melee_weapon );
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( melee_weapon );
}
self giveweapon( "knife_zm" );
self.current_melee_weapon = "knife_zm";
self give_start_weapon( 1 );
self.currentweapon = "m1911_zm";
}
}
}
change_bad_spawner() //checked changed to match cerberus output
change_bad_spawner()
{
flag_wait( "always_on" );
spawner_array = getstructarray( "zone_blue_level4a_spawners", "targetname" );
foreach ( struct in spawner_array )
{
if ( isDefined( struct.origin ) && struct.origin == ( 2154, 748.5, 1312 ) )
{
struct.script_noteworthy = "riser_location";
return;
}
}
}
flag_wait( "always_on" );
spawner_array = getstructarray( "zone_blue_level4a_spawners", "targetname" );
foreach ( struct in spawner_array )
{
if ( isdefined( struct.origin ) && struct.origin == ( 2154, 748.5, 1312 ) )
{
struct.script_noteworthy = "riser_location";
return;
}
}
}

View File

@ -1,114 +1,117 @@
#include maps/mp/_utility;
#using_animtree( "fxanim_props" );
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include maps\mp\createfx\zm_highrise_fx;
main()
{
precache_createfx_fx();
precache_scripted_fx();
precache_fxanim_props();
maps/mp/createfx/zm_highrise_fx::main();
precache_createfx_fx();
precache_scripted_fx();
precache_fxanim_props();
maps\mp\createfx\zm_highrise_fx::main();
}
precache_scripted_fx()
{
level._effect[ "switch_sparks" ] = loadfx( "maps/zombie/fx_zmb_pswitch_spark" );
level._effect[ "zapper_light_ready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" );
level._effect[ "zapper_light_notready" ] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" );
level._effect[ "lght_marker" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" );
level._effect[ "pandora_box_inverted" ] = loadfx( "maps/zombie/fx_zmb_highrise_marker" );
level._effect[ "lght_marker_flare" ] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" );
level._effect[ "poltergeist" ] = loadfx( "misc/fx_zombie_couch_effect" );
level._effect[ "zomb_gib" ] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
level._effect[ "elec_md" ] = loadfx( "electrical/fx_elec_player_md" );
level._effect[ "elec_sm" ] = loadfx( "electrical/fx_elec_player_sm" );
level._effect[ "elec_torso" ] = loadfx( "electrical/fx_elec_player_torso" );
level._effect[ "blue_eyes" ] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" );
level._effect[ "elevator_tell" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_tell" );
level._effect[ "elevator_sparks" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_sparks" );
level._effect[ "elevator_impact" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_impact" );
level._effect[ "elevator_glint" ] = loadfx( "maps/zombie_highrise/fx_highrise_key_glint" );
level._effect[ "elevator_light" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_light" );
level._effect[ "perk_elevator_idle" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_slow" );
level._effect[ "perk_elevator_departing" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_fast" );
level._effect[ "perk_elevator_indicator_up" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_up" );
level._effect[ "perk_elevator_indicator_down" ] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_down" );
level._effect[ "sidequest_dragon_spark_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_max" );
level._effect[ "sidequest_dragon_fireball_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_max" );
level._effect[ "sidequest_dragon_spark_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_ric" );
level._effect[ "sidequest_dragon_fireball_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_ric" );
level._effect[ "sidequest_flash" ] = loadfx( "maps/zombie_highrise/fx_highrise_sq_flash" );
level._effect[ "sidequest_tower_bolts" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_tower_bolts" );
level._effect["switch_sparks"] = loadfx( "maps/zombie/fx_zmb_pswitch_spark" );
level._effect["zapper_light_ready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_green" );
level._effect["zapper_light_notready"] = loadfx( "maps/zombie/fx_zombie_zapper_light_red" );
level._effect["lght_marker"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker" );
level._effect["pandora_box_inverted"] = loadfx( "maps/zombie/fx_zmb_highrise_marker" );
level._effect["lght_marker_flare"] = loadfx( "maps/zombie/fx_zmb_tranzit_marker_fl" );
level._effect["poltergeist"] = loadfx( "misc/fx_zombie_couch_effect" );
level._effect["zomb_gib"] = loadfx( "maps/zombie/fx_zmb_tranzit_lava_torso_explo" );
level._effect["elec_md"] = loadfx( "electrical/fx_elec_player_md" );
level._effect["elec_sm"] = loadfx( "electrical/fx_elec_player_sm" );
level._effect["elec_torso"] = loadfx( "electrical/fx_elec_player_torso" );
level._effect["blue_eyes"] = loadfx( "maps/zombie/fx_zombie_eye_single_blue" );
level._effect["elevator_tell"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_tell" );
level._effect["elevator_sparks"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_sparks" );
level._effect["elevator_impact"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_impact" );
level._effect["elevator_glint"] = loadfx( "maps/zombie_highrise/fx_highrise_key_glint" );
level._effect["elevator_light"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_light" );
level._effect["perk_elevator_idle"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_slow" );
level._effect["perk_elevator_departing"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_perk_fast" );
level._effect["perk_elevator_indicator_up"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_up" );
level._effect["perk_elevator_indicator_down"] = loadfx( "maps/zombie_highrise/fx_highrise_elevator_arrow_down" );
level._effect["sidequest_dragon_spark_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_max" );
level._effect["sidequest_dragon_fireball_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_max" );
level._effect["sidequest_dragon_spark_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_spark_ric" );
level._effect["sidequest_dragon_fireball_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_fireball_ric" );
level._effect["sidequest_flash"] = loadfx( "maps/zombie_highrise/fx_highrise_sq_flash" );
level._effect["sidequest_tower_bolts"] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_tower_bolts" );
}
precache_createfx_fx()
{
level._effect[ "fx_highrise_cloud_lg_single" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_single" );
level._effect[ "fx_highrise_cloud_lg_flat" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_flat" );
level._effect[ "fx_highrise_cloud_lg_left" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_left" );
level._effect[ "fx_highrise_cloud_lg_right" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_right" );
level._effect[ "fx_highrise_cloud_sm_bottom" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_bottom" );
level._effect[ "fx_highrise_cloud_sm_right" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_right" );
level._effect[ "fx_highrise_cloud_bend_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_sm" );
level._effect[ "fx_highrise_cloud_bend_01" ] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_01" );
level._effect[ "fx_highrise_meteor_lg_bottom" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_bottom" );
level._effect[ "fx_highrise_meteor_lg_top" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top" );
level._effect[ "fx_highrise_meteor_lg_top2" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top2" );
level._effect[ "fx_highrise_meteor_sm_top" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_top" );
level._effect[ "fx_highrise_meteor_sm_horizon" ] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_horizon" );
level._effect[ "fx_lf_zmb_highrise_sun" ] = loadfx( "lens_flares/fx_lf_zmb_highrise_sun" );
level._effect[ "fx_zmb_flies" ] = loadfx( "maps/zombie/fx_zmb_flies" );
level._effect[ "fx_zmb_tranzit_fire_med" ] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" );
level._effect[ "fx_highrise_ash_rising_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_ash_rising_md" );
level._effect[ "fx_highrise_bld_crumble_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_bld_crumble_runner" );
level._effect[ "fx_highrise_ceiling_dust_md_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_md_runner" );
level._effect[ "fx_highrise_ceiling_dust_sm_runner" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_sm_runner" );
level._effect[ "fx_highrise_ceiling_dust_edge_100" ] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_edge_100" );
level._effect[ "fx_highrise_edge_crumble_ext" ] = loadfx( "maps/zombie_highrise/fx_highrise_edge_crumble_ext" );
level._effect[ "fx_highrise_point_crumble_ext" ] = loadfx( "maps/zombie_highrise/fx_highrise_point_crumble_ext" );
level._effect[ "fx_highrise_wire_spark" ] = loadfx( "maps/zombie_highrise/fx_highrise_wire_spark" );
level._effect[ "fx_highrise_water_drip_fast" ] = loadfx( "maps/zombie_highrise/fx_highrise_water_drip_fast" );
level._effect[ "fx_highrise_haze_int_med" ] = loadfx( "maps/zombie_highrise/fx_highrise_haze_int_med" );
level._effect[ "fx_highrise_fire_distant" ] = loadfx( "maps/zombie_highrise/fx_highrise_fire_distant" );
level._effect[ "fx_highrise_smk_plume_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_sm" );
level._effect[ "fx_highrise_smk_plume_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_md" );
level._effect[ "fx_highrise_smk_plume_xlg" ] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_xlg" );
level._effect[ "fx_highrise_moon" ] = loadfx( "maps/zombie_highrise/fx_highrise_moon" );
level._effect[ "fx_highrise_god_ray_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_sm" );
level._effect[ "fx_highrise_god_ray_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_md" );
level._effect[ "fx_highrise_god_ray_cool_sm" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_sm" );
level._effect[ "fx_highrise_god_ray_cool_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_md" );
level._effect[ "fx_highrise_light_bulb" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_bulb" );
level._effect[ "fx_highrise_light_build_lamp" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_build_lamp" );
level._effect[ "fx_highrise_light_fluorescent" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent" );
level._effect[ "fx_highrise_light_fluorescent_wall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wall" );
level._effect[ "fx_highrise_light_fluorescent_wal2" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wal2" );
level._effect[ "fx_highrise_light_recessed" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed" );
level._effect[ "fx_highrise_light_recessed_md" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_md" );
level._effect[ "fx_highrise_light_recessed_tall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tall" );
level._effect[ "fx_highrise_light_recessed_tiny" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tiny" );
level._effect[ "fx_highrise_light_mall" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_mall" );
level._effect[ "fx_highrise_light_lantern_red" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_red" );
level._effect[ "fx_highrise_light_lantern_yel" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_yel" );
level._effect[ "fx_highrise_light_sconce_glow" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_glow" );
level._effect[ "fx_highrise_light_sconce_beam" ] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_beam" );
level._effect[ "fx_highrise_dragon_breath_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_max" );
level._effect[ "fx_highrise_dragon_tower_absorb_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_max" );
level._effect[ "fx_highrise_dragon_tower_glow_max" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_max" );
level._effect[ "fx_highrise_sidequest_complete" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete" );
level._effect[ "fx_highrise_dragon_breath_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_ric" );
level._effect[ "fx_highrise_dragon_tower_absorb_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_ric" );
level._effect[ "fx_highrise_dragon_tower_glow_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_ric" );
level._effect[ "fx_highrise_sidequest_complete_ric" ] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete_ric" );
level._effect["fx_highrise_cloud_lg_single"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_single" );
level._effect["fx_highrise_cloud_lg_flat"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_flat" );
level._effect["fx_highrise_cloud_lg_left"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_left" );
level._effect["fx_highrise_cloud_lg_right"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_lg_right" );
level._effect["fx_highrise_cloud_sm_bottom"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_bottom" );
level._effect["fx_highrise_cloud_sm_right"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_sm_right" );
level._effect["fx_highrise_cloud_bend_sm"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_sm" );
level._effect["fx_highrise_cloud_bend_01"] = loadfx( "maps/zombie_highrise/fx_highrise_cloud_bend_01" );
level._effect["fx_highrise_meteor_lg_bottom"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_bottom" );
level._effect["fx_highrise_meteor_lg_top"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top" );
level._effect["fx_highrise_meteor_lg_top2"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_lg_top2" );
level._effect["fx_highrise_meteor_sm_top"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_top" );
level._effect["fx_highrise_meteor_sm_horizon"] = loadfx( "maps/zombie_highrise/fx_highrise_meteor_sm_horizon" );
level._effect["fx_lf_zmb_highrise_sun"] = loadfx( "lens_flares/fx_lf_zmb_highrise_sun" );
level._effect["fx_zmb_flies"] = loadfx( "maps/zombie/fx_zmb_flies" );
level._effect["fx_zmb_tranzit_fire_med"] = loadfx( "maps/zombie/fx_zmb_tranzit_fire_med" );
level._effect["fx_highrise_ash_rising_md"] = loadfx( "maps/zombie_highrise/fx_highrise_ash_rising_md" );
level._effect["fx_highrise_bld_crumble_runner"] = loadfx( "maps/zombie_highrise/fx_highrise_bld_crumble_runner" );
level._effect["fx_highrise_ceiling_dust_md_runner"] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_md_runner" );
level._effect["fx_highrise_ceiling_dust_sm_runner"] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_sm_runner" );
level._effect["fx_highrise_ceiling_dust_edge_100"] = loadfx( "maps/zombie_highrise/fx_highrise_ceiling_dust_edge_100" );
level._effect["fx_highrise_edge_crumble_ext"] = loadfx( "maps/zombie_highrise/fx_highrise_edge_crumble_ext" );
level._effect["fx_highrise_point_crumble_ext"] = loadfx( "maps/zombie_highrise/fx_highrise_point_crumble_ext" );
level._effect["fx_highrise_wire_spark"] = loadfx( "maps/zombie_highrise/fx_highrise_wire_spark" );
level._effect["fx_highrise_water_drip_fast"] = loadfx( "maps/zombie_highrise/fx_highrise_water_drip_fast" );
level._effect["fx_highrise_haze_int_med"] = loadfx( "maps/zombie_highrise/fx_highrise_haze_int_med" );
level._effect["fx_highrise_fire_distant"] = loadfx( "maps/zombie_highrise/fx_highrise_fire_distant" );
level._effect["fx_highrise_smk_plume_sm"] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_sm" );
level._effect["fx_highrise_smk_plume_md"] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_md" );
level._effect["fx_highrise_smk_plume_xlg"] = loadfx( "maps/zombie_highrise/fx_highrise_smk_plume_xlg" );
level._effect["fx_highrise_moon"] = loadfx( "maps/zombie_highrise/fx_highrise_moon" );
level._effect["fx_highrise_god_ray_sm"] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_sm" );
level._effect["fx_highrise_god_ray_md"] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_md" );
level._effect["fx_highrise_god_ray_cool_sm"] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_sm" );
level._effect["fx_highrise_god_ray_cool_md"] = loadfx( "maps/zombie_highrise/fx_highrise_god_ray_cool_md" );
level._effect["fx_highrise_light_bulb"] = loadfx( "maps/zombie_highrise/fx_highrise_light_bulb" );
level._effect["fx_highrise_light_build_lamp"] = loadfx( "maps/zombie_highrise/fx_highrise_light_build_lamp" );
level._effect["fx_highrise_light_fluorescent"] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent" );
level._effect["fx_highrise_light_fluorescent_wall"] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wall" );
level._effect["fx_highrise_light_fluorescent_wal2"] = loadfx( "maps/zombie_highrise/fx_highrise_light_fluorescent_wal2" );
level._effect["fx_highrise_light_recessed"] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed" );
level._effect["fx_highrise_light_recessed_md"] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_md" );
level._effect["fx_highrise_light_recessed_tall"] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tall" );
level._effect["fx_highrise_light_recessed_tiny"] = loadfx( "maps/zombie_highrise/fx_highrise_light_recessed_tiny" );
level._effect["fx_highrise_light_mall"] = loadfx( "maps/zombie_highrise/fx_highrise_light_mall" );
level._effect["fx_highrise_light_lantern_red"] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_red" );
level._effect["fx_highrise_light_lantern_yel"] = loadfx( "maps/zombie_highrise/fx_highrise_light_lantern_yel" );
level._effect["fx_highrise_light_sconce_glow"] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_glow" );
level._effect["fx_highrise_light_sconce_beam"] = loadfx( "maps/zombie_highrise/fx_highrise_light_sconce_beam" );
level._effect["fx_highrise_dragon_breath_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_max" );
level._effect["fx_highrise_dragon_tower_absorb_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_max" );
level._effect["fx_highrise_dragon_tower_glow_max"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_max" );
level._effect["fx_highrise_sidequest_complete"] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete" );
level._effect["fx_highrise_dragon_breath_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_breath_ric" );
level._effect["fx_highrise_dragon_tower_absorb_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_absorb_ric" );
level._effect["fx_highrise_dragon_tower_glow_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_dragon_tower_glow_ric" );
level._effect["fx_highrise_sidequest_complete_ric"] = loadfx( "maps/zombie_highrise/fx_highrise_sidequest_complete_ric" );
}
#using_animtree("fxanim_props");
precache_fxanim_props()
{
level.scr_anim[ "fxanim_props" ][ "wirespark_med_lrg" ] = %fxanim_gp_wirespark_med_lrg_anim;
level.scr_anim[ "fxanim_props" ][ "wirespark_long_lrg" ] = %fxanim_gp_wirespark_long_lrg_anim;
level.scr_anim[ "fxanim_props" ][ "roaches" ] = %fxanim_gp_roaches_anim;
level.scr_anim[ "fxanim_props" ][ "dragon_a" ] = %fxanim_zom_highrise_dragon_a_anim;
level.scr_anim[ "fxanim_props" ][ "dragon_b" ] = %fxanim_zom_highrise_dragon_b_anim;
level.scr_anim[ "fxanim_props" ][ "dragon" ] = %fxanim_zom_highrise_dragon_idle_anim;
level.scr_anim[ "fxanim_props" ][ "rock_slide" ] = %fxanim_zom_highrise_rock_slide_anim;
level.scr_anim["fxanim_props"]["wirespark_med_lrg"] = %fxanim_gp_wirespark_med_lrg_anim;
level.scr_anim["fxanim_props"]["wirespark_long_lrg"] = %fxanim_gp_wirespark_long_lrg_anim;
level.scr_anim["fxanim_props"]["roaches"] = %fxanim_gp_roaches_anim;
level.scr_anim["fxanim_props"]["dragon_a"] = %fxanim_zom_highrise_dragon_a_anim;
level.scr_anim["fxanim_props"]["dragon_b"] = %fxanim_zom_highrise_dragon_b_anim;
level.scr_anim["fxanim_props"]["dragon"] = %fxanim_zom_highrise_dragon_idle_anim;
level.scr_anim["fxanim_props"]["rock_slide"] = %fxanim_zom_highrise_rock_slide_anim;
}

View File

@ -1,14 +1,15 @@
//checked includes match cerberus output
#include maps/mp/zm_highrise_classic;
#include maps/mp/zm_highrise;
#include maps/mp/gametypes_zm/_zm_gametype;
#include maps/mp/zombies/_zm_game_module;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_game_module;
#include maps\mp\gametypes_zm\_zm_gametype;
#include maps\mp\zm_highrise;
#include maps\mp\zm_highrise_classic;
init() //checked matches cerberus output
init()
{
add_map_gamemode( "zclassic", maps/mp/zm_highrise::zclassic_preinit, undefined, undefined );
add_map_location_gamemode( "zclassic", "rooftop", maps/mp/zm_highrise_classic::precache, maps/mp/zm_highrise_classic::main );
add_map_gamemode( "zclassic", maps\mp\zm_highrise::zclassic_preinit, undefined, undefined );
add_map_location_gamemode( "zclassic", "rooftop", maps\mp\zm_highrise_classic::precache, maps\mp\zm_highrise_classic::main );
}

View File

@ -1,247 +1,249 @@
#include maps/mp/zm_highrise_sq;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_highrise_sq;
init()
{
flag_init( "sq_atd_elevator0" );
flag_init( "sq_atd_elevator1" );
flag_init( "sq_atd_elevator2" );
flag_init( "sq_atd_elevator3" );
flag_init( "sq_atd_elevator_activated" );
flag_init( "sq_atd_drg_puzzle_1st_error" );
flag_init( "sq_atd_drg_puzzle_complete" );
declare_sidequest_stage( "sq", "atd", ::init_stage, ::stage_logic, ::exit_stage_1 );
sq_atd_dragon_icon_setup();
flag_init( "sq_atd_elevator0" );
flag_init( "sq_atd_elevator1" );
flag_init( "sq_atd_elevator2" );
flag_init( "sq_atd_elevator3" );
flag_init( "sq_atd_elevator_activated" );
flag_init( "sq_atd_drg_puzzle_1st_error" );
flag_init( "sq_atd_drg_puzzle_complete" );
declare_sidequest_stage( "sq", "atd", ::init_stage, ::stage_logic, ::exit_stage_1 );
sq_atd_dragon_icon_setup();
}
init_stage()
{
level._cur_stage_name = "atd";
clientnotify( "atd" );
level._cur_stage_name = "atd";
clientnotify( "atd" );
}
stage_logic()
{
/#
iprintlnbold( "ATD Started" );
iprintlnbold( "ATD Started" );
#/
sq_atd_elevators();
sq_atd_drg_puzzle();
stage_completed( "sq", level._cur_stage_name );
sq_atd_elevators();
sq_atd_drg_puzzle();
stage_completed( "sq", level._cur_stage_name );
}
exit_stage_1( success )
{
}
sq_atd_dragon_icon_setup()
{
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
_a51 = a_dragon_icons;
_k51 = getFirstArrayKey( _a51 );
while ( isDefined( _k51 ) )
{
m_icon = _a51[ _k51 ];
m_icon notsolid();
m_icon.m_elevator = getent( "elevator_" + m_icon.script_noteworthy + "_body", "targetname" );
m_icon.origin = m_icon.m_elevator.origin + vectorScale( ( 0, 0, 1 ), 134 );
m_icon.angles = m_icon.m_elevator.angles;
m_icon linkto( m_icon.m_elevator );
m_icon.m_lit_icon = getent( m_icon.script_noteworthy + "_elevator_lit", "script_noteworthy" );
if ( isDefined( m_icon.m_lit_icon ) )
{
m_icon.m_lit_icon notsolid();
m_icon.m_lit_icon.origin = m_icon.origin - vectorScale( ( 0, 0, 1 ), 2 );
m_icon.m_lit_icon.angles = m_icon.angles;
m_icon.m_lit_icon linkto( m_icon.m_elevator );
}
_k51 = getNextArrayKey( _a51, _k51 );
}
a_atd2_icons = getentarray( "atd2_marker_unlit", "script_noteworthy" );
a_atd2_lit_icons = getentarray( "atd2_marker_lit", "targetname" );
i = 0;
while ( i < a_atd2_icons.size )
{
a_atd2_lit_icons[ i ].origin = a_atd2_icons[ i ].origin - vectorScale( ( 0, 0, 1 ), 5 );
a_atd2_lit_icons[ i ].angles = a_atd2_icons[ i ].angles;
a_atd2_icons[ i ].lit_icon = a_atd2_lit_icons[ i ];
i++;
}
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
foreach ( m_icon in a_dragon_icons )
{
m_icon notsolid();
m_icon.m_elevator = getent( "elevator_" + m_icon.script_noteworthy + "_body", "targetname" );
m_icon.origin = m_icon.m_elevator.origin + vectorscale( ( 0, 0, 1 ), 134.0 );
m_icon.angles = m_icon.m_elevator.angles;
m_icon linkto( m_icon.m_elevator );
m_icon.m_lit_icon = getent( m_icon.script_noteworthy + "_elevator_lit", "script_noteworthy" );
if ( isdefined( m_icon.m_lit_icon ) )
{
m_icon.m_lit_icon notsolid();
m_icon.m_lit_icon.origin = m_icon.origin - vectorscale( ( 0, 0, 1 ), 2.0 );
m_icon.m_lit_icon.angles = m_icon.angles;
m_icon.m_lit_icon linkto( m_icon.m_elevator );
}
}
a_atd2_icons = getentarray( "atd2_marker_unlit", "script_noteworthy" );
a_atd2_lit_icons = getentarray( "atd2_marker_lit", "targetname" );
for ( i = 0; i < a_atd2_icons.size; i++ )
{
a_atd2_lit_icons[i].origin = a_atd2_icons[i].origin - vectorscale( ( 0, 0, 1 ), 5.0 );
a_atd2_lit_icons[i].angles = a_atd2_icons[i].angles;
a_atd2_icons[i].lit_icon = a_atd2_lit_icons[i];
}
}
sq_atd_elevators()
{
a_elevators = array( "elevator_bldg1b_trigger", "elevator_bldg1d_trigger", "elevator_bldg3b_trigger", "elevator_bldg3c_trigger" );
a_elevator_flags = array( "sq_atd_elevator0", "sq_atd_elevator1", "sq_atd_elevator2", "sq_atd_elevator3" );
i = 0;
while ( i < a_elevators.size )
{
trig_elevator = getent( a_elevators[ i ], "targetname" );
trig_elevator thread sq_atd_watch_elevator( a_elevator_flags[ i ] );
i++;
}
while ( flag( "sq_atd_elevator0" ) && flag( "sq_atd_elevator1" ) || !flag( "sq_atd_elevator2" ) && !flag( "sq_atd_elevator3" ) )
{
flag_wait_any_array( a_elevator_flags );
wait 0,5;
}
a_elevators = array( "elevator_bldg1b_trigger", "elevator_bldg1d_trigger", "elevator_bldg3b_trigger", "elevator_bldg3c_trigger" );
a_elevator_flags = array( "sq_atd_elevator0", "sq_atd_elevator1", "sq_atd_elevator2", "sq_atd_elevator3" );
for ( i = 0; i < a_elevators.size; i++ )
{
trig_elevator = getent( a_elevators[i], "targetname" );
trig_elevator thread sq_atd_watch_elevator( a_elevator_flags[i] );
}
while ( !flag( "sq_atd_elevator0" ) || !flag( "sq_atd_elevator1" ) || !flag( "sq_atd_elevator2" ) || !flag( "sq_atd_elevator3" ) )
{
flag_wait_any_array( a_elevator_flags );
wait 0.5;
}
/#
iprintlnbold( "Standing on Elevators Complete" );
iprintlnbold( "Standing on Elevators Complete" );
#/
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
_a105 = a_dragon_icons;
_k105 = getFirstArrayKey( _a105 );
while ( isDefined( _k105 ) )
{
m_icon = _a105[ _k105 ];
v_off_pos = m_icon.m_lit_icon.origin;
m_icon.m_lit_icon unlink();
m_icon unlink();
m_icon.m_lit_icon.origin = m_icon.origin;
m_icon.origin = v_off_pos;
m_icon.m_lit_icon linkto( m_icon.m_elevator );
m_icon linkto( m_icon.m_elevator );
m_icon playsound( "zmb_sq_symbol_light" );
_k105 = getNextArrayKey( _a105, _k105 );
}
flag_set( "sq_atd_elevator_activated" );
vo_richtofen_atd_elevators();
level thread vo_maxis_atd_elevators();
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
foreach ( m_icon in a_dragon_icons )
{
v_off_pos = m_icon.m_lit_icon.origin;
m_icon.m_lit_icon unlink();
m_icon unlink();
m_icon.m_lit_icon.origin = m_icon.origin;
m_icon.origin = v_off_pos;
m_icon.m_lit_icon linkto( m_icon.m_elevator );
m_icon linkto( m_icon.m_elevator );
m_icon playsound( "zmb_sq_symbol_light" );
}
flag_set( "sq_atd_elevator_activated" );
vo_richtofen_atd_elevators();
level thread vo_maxis_atd_elevators();
}
sq_atd_watch_elevator( str_flag )
{
level endon( "sq_atd_elevator_activated" );
while ( 1 )
{
self waittill( "trigger", e_who );
while ( !isplayer( e_who ) )
{
wait 0,05;
}
flag_set( str_flag );
while ( isalive( e_who ) && e_who istouching( self ) )
{
wait 0,05;
}
flag_clear( str_flag );
}
level endon( "sq_atd_elevator_activated" );
while ( true )
{
self waittill( "trigger", e_who );
if ( !isplayer( e_who ) )
{
wait 0.05;
continue;
}
flag_set( str_flag );
while ( isalive( e_who ) && e_who istouching( self ) )
wait 0.05;
flag_clear( str_flag );
}
}
sq_atd_drg_puzzle()
{
level.sq_atd_cur_drg = 0;
a_puzzle_trigs = getentarray( "trig_atd_drg_puzzle", "targetname" );
a_puzzle_trigs = array_randomize( a_puzzle_trigs );
i = 0;
while ( i < a_puzzle_trigs.size )
{
a_puzzle_trigs[ i ] thread drg_puzzle_trig_think( i );
i++;
}
while ( level.sq_atd_cur_drg < 4 )
{
wait 1;
}
flag_set( "sq_atd_drg_puzzle_complete" );
level thread vo_maxis_atd_order_complete();
level.sq_atd_cur_drg = 0;
a_puzzle_trigs = getentarray( "trig_atd_drg_puzzle", "targetname" );
a_puzzle_trigs = array_randomize( a_puzzle_trigs );
for ( i = 0; i < a_puzzle_trigs.size; i++ )
a_puzzle_trigs[i] thread drg_puzzle_trig_think( i );
while ( level.sq_atd_cur_drg < 4 )
wait 1;
flag_set( "sq_atd_drg_puzzle_complete" );
level thread vo_maxis_atd_order_complete();
/#
iprintlnbold( "Dragon Puzzle COMPLETE" );
iprintlnbold( "Dragon Puzzle COMPLETE" );
#/
}
drg_puzzle_trig_think( n_order_id )
{
self.drg_active = 0;
m_unlit = getent( self.target, "targetname" );
m_lit = m_unlit.lit_icon;
v_top = m_unlit.origin;
v_hidden = m_lit.origin;
while ( !flag( "sq_atd_drg_puzzle_complete" ) )
{
while ( self.drg_active )
{
level waittill_either( "sq_atd_drg_puzzle_complete", "drg_puzzle_reset" );
while ( flag( "sq_atd_drg_puzzle_complete" ) )
{
continue;
}
}
self waittill( "trigger", e_who );
if ( level.sq_atd_cur_drg == n_order_id )
{
m_lit.origin = v_top;
m_unlit.origin = v_hidden;
m_lit playsound( "zmb_sq_symbol_light" );
self.drg_active = 1;
level thread vo_richtofen_atd_order( level.sq_atd_cur_drg );
level.sq_atd_cur_drg++;
self.drg_active = 0;
m_unlit = getent( self.target, "targetname" );
m_lit = m_unlit.lit_icon;
v_top = m_unlit.origin;
v_hidden = m_lit.origin;
while ( !flag( "sq_atd_drg_puzzle_complete" ) )
{
if ( self.drg_active )
{
level waittill_either( "sq_atd_drg_puzzle_complete", "drg_puzzle_reset" );
if ( flag( "sq_atd_drg_puzzle_complete" ) )
continue;
}
self waittill( "trigger", e_who );
if ( level.sq_atd_cur_drg == n_order_id )
{
m_lit.origin = v_top;
m_unlit.origin = v_hidden;
m_lit playsound( "zmb_sq_symbol_light" );
self.drg_active = 1;
level thread vo_richtofen_atd_order( level.sq_atd_cur_drg );
level.sq_atd_cur_drg++;
/#
iprintlnbold( "Dragon " + n_order_id + " Correct" );
iprintlnbold( "Dragon " + n_order_id + " Correct" );
#/
self thread drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden );
}
else
{
if ( !flag( "sq_atd_drg_puzzle_1st_error" ) )
{
level thread vo_maxis_atd_order_error();
}
level.sq_atd_cur_drg = 0;
level notify( "drg_puzzle_reset" );
self thread drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden );
}
else
{
if ( !flag( "sq_atd_drg_puzzle_1st_error" ) )
level thread vo_maxis_atd_order_error();
level.sq_atd_cur_drg = 0;
level notify( "drg_puzzle_reset" );
/#
iprintlnbold( "INCORRECT DRAGON" );
iprintlnbold( "INCORRECT DRAGON" );
#/
wait 0,5;
}
while ( e_who istouching( self ) )
{
wait 0,5;
}
}
wait 0.5;
}
while ( e_who istouching( self ) )
wait 0.5;
}
}
drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden )
{
level endon( "sq_atd_drg_puzzle_complete" );
level waittill( "drg_puzzle_reset" );
m_unlit.origin = v_top;
m_lit.origin = v_hidden;
m_unlit playsound( "zmb_sq_symbol_fade" );
self.drg_active = 0;
level endon( "sq_atd_drg_puzzle_complete" );
level waittill( "drg_puzzle_reset" );
m_unlit.origin = v_top;
m_lit.origin = v_hidden;
m_unlit playsound( "zmb_sq_symbol_fade" );
self.drg_active = 0;
}
vo_richtofen_atd_elevators()
{
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_activ_dragons_0" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_activ_dragons_0" );
}
vo_maxis_atd_elevators()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_activ_dragons_0" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_activ_dragons_0" );
}
vo_richtofen_atd_order( n_which )
{
str_vox = "vox_zmba_sidequest_sec_symbols_" + n_which;
maps/mp/zm_highrise_sq::richtofensay( str_vox );
str_vox = "vox_zmba_sidequest_sec_symbols_" + n_which;
maps\mp\zm_highrise_sq::richtofensay( str_vox );
}
vo_richtofen_atd_order_error()
{
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_5" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_5" );
}
vo_maxis_atd_order_error()
{
flag_set( "sq_atd_drg_puzzle_1st_error" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_0" );
flag_set( "sq_atd_drg_puzzle_1st_error" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_0" );
}
vo_maxis_atd_order_complete()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_1" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_sec_symbols_1" );
}

View File

@ -1,570 +1,559 @@
#include maps/mp/zombies/_zm_unitrigger;
#include maps/mp/zm_highrise_sq;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
#using_animtree( "fxanim_props" );
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_highrise_sq;
#include maps\mp\zombies\_zm_unitrigger;
init_1()
{
flag_init( "pts_1_springpads_placed" );
declare_sidequest_stage( "sq_1", "pts_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
flag_init( "pts_1_springpads_placed" );
declare_sidequest_stage( "sq_1", "pts_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
}
init_2()
{
flag_init( "pts_2_springpads_placed" );
flag_init( "pts_2_generator_1_started" );
flag_init( "pts_2_generator_2_started" );
declare_sidequest_stage( "sq_2", "pts_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
flag_init( "pts_2_springpads_placed" );
flag_init( "pts_2_generator_1_started" );
flag_init( "pts_2_generator_2_started" );
declare_sidequest_stage( "sq_2", "pts_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
}
init_stage_1()
{
clientnotify( "pts_1" );
level.n_launched_zombies = 0;
wait 15;
level thread richtofen_pts_instructions();
level thread richtofen_pts_placed();
clientnotify( "pts_1" );
level.n_launched_zombies = 0;
wait 15;
level thread richtofen_pts_instructions();
level thread richtofen_pts_placed();
}
init_stage_2()
{
clientnotify( "pts_2" );
level.sq_ball_putdown_trigs = [];
level thread maxis_pts_instructions();
level thread maxis_pts_placed();
clientnotify( "pts_2" );
level.sq_ball_putdown_trigs = [];
level thread maxis_pts_instructions();
level thread maxis_pts_placed();
}
stage_logic_1()
{
/#
iprintlnbold( "PTS1 Started" );
iprintlnbold( "PTS1 Started" );
#/
watch_player_springpads( 0 );
wait_for_all_springpads_placed( "pts_ghoul", "pts_1_springpads_placed" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 1 );
wait_for_zombies_launched();
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
stage_completed( "sq_1", "pts_1" );
watch_player_springpads( 0 );
wait_for_all_springpads_placed( "pts_ghoul", "pts_1_springpads_placed" );
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 1 );
wait_for_zombies_launched();
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 );
stage_completed( "sq_1", "pts_1" );
}
wait_for_zombies_launched()
{
level thread richtofen_zombies_launched();
t_tower = getent( "pts_tower_trig", "targetname" );
s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" );
while ( level.n_launched_zombies < 16 )
{
wait 0,5;
}
level thread richtofen_zombies_launched();
t_tower = getent( "pts_tower_trig", "targetname" );
s_tower_top = getstruct( "sq_zombie_launch_target", "targetname" );
while ( level.n_launched_zombies < 16 )
wait 0.5;
}
watch_zombie_flings()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "equip_springpad_zm_taken" );
self endon( "equip_springpad_zm_pickup" );
while ( level.n_launched_zombies < 16 )
{
self waittill( "fling" );
level.n_launched_zombies++;
if ( level.n_launched_zombies != 1 || level.n_launched_zombies == 5 && level.n_launched_zombies == 10 )
{
level notify( "pts1_say_next_line" );
}
wait 0,1;
}
self endon( "death" );
self endon( "disconnect" );
self endon( "equip_springpad_zm_taken" );
self endon( "equip_springpad_zm_pickup" );
while ( level.n_launched_zombies < 16 )
{
self waittill( "fling" );
level.n_launched_zombies++;
if ( level.n_launched_zombies == 1 || level.n_launched_zombies == 5 || level.n_launched_zombies == 10 )
level notify( "pts1_say_next_line" );
wait 0.1;
}
}
stage_logic_2()
{
/#
iprintlnbold( "PTS2 Started" );
iprintlnbold( "PTS2 Started" );
#/
watch_player_springpads( 1 );
level thread wait_for_balls_launched();
flag_wait( "pts_2_generator_1_started" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 );
flag_wait( "pts_2_generator_2_started" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 );
level thread maxis_balls_placed();
stage_completed( "sq_2", "pts_2" );
watch_player_springpads( 1 );
level thread wait_for_balls_launched();
flag_wait( "pts_2_generator_1_started" );
maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
flag_wait( "pts_2_generator_2_started" );
maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
level thread maxis_balls_placed();
stage_completed( "sq_2", "pts_2" );
}
wait_for_balls_launched()
{
level.current_generator = 1;
a_lion_spots = getstructarray( "pts_lion", "targetname" );
_a138 = a_lion_spots;
_k138 = getFirstArrayKey( _a138 );
while ( isDefined( _k138 ) )
{
s_lion_spot = _a138[ _k138 ];
s_lion_spot.a_place_ball_trigs = [];
s_lion_spot.springpad_buddy = getstruct( s_lion_spot.script_string, "script_noteworthy" );
_k138 = getNextArrayKey( _a138, _k138 );
}
a_players = getplayers();
_a145 = a_players;
_k145 = getFirstArrayKey( _a145 );
while ( isDefined( _k145 ) )
{
player = _a145[ _k145 ];
player.a_place_ball_trigs = [];
if ( isDefined( player.zm_sq_has_ball ) )
{
player thread player_has_ball();
}
_k145 = getNextArrayKey( _a145, _k145 );
}
while ( 1 )
{
level waittill( "zm_ball_picked_up", player );
player thread player_has_ball();
}
level.current_generator = 1;
a_lion_spots = getstructarray( "pts_lion", "targetname" );
foreach ( s_lion_spot in a_lion_spots )
{
s_lion_spot.a_place_ball_trigs = [];
s_lion_spot.springpad_buddy = getstruct( s_lion_spot.script_string, "script_noteworthy" );
}
a_players = getplayers();
foreach ( player in a_players )
{
player.a_place_ball_trigs = [];
if ( isdefined( player.zm_sq_has_ball ) )
player thread player_has_ball();
}
while ( true )
{
level waittill( "zm_ball_picked_up", player );
player thread player_has_ball();
}
}
player_has_ball()
{
self thread player_set_down_ball_watcher();
self thread player_set_down_ball_watcher();
}
player_set_down_ball_watcher()
{
self waittill_either( "zm_sq_ball_putdown", "zm_sq_ball_used" );
pts_putdown_trigs_remove_for_player( self );
self waittill_either( "zm_sq_ball_putdown", "zm_sq_ball_used" );
pts_putdown_trigs_remove_for_player( self );
}
sq_pts_create_use_trigger( v_origin, radius, height, str_hint_string )
{
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
t_pickup setcursorhint( "HINT_NOICON" );
t_pickup sethintstring( str_hint_string );
t_pickup.targetname = "ball_place_trig";
t_pickup triggerignoreteam();
t_pickup usetriggerrequirelookat();
return t_pickup;
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
t_pickup setcursorhint( "HINT_NOICON" );
t_pickup sethintstring( str_hint_string );
t_pickup.targetname = "ball_place_trig";
t_pickup triggerignoreteam();
t_pickup usetriggerrequirelookat();
return t_pickup;
}
place_ball_think( t_place_ball, s_lion_spot )
{
t_place_ball endon( "delete" );
t_place_ball waittill( "trigger" );
pts_putdown_trigs_remove_for_spot( s_lion_spot );
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
self.zm_sq_has_ball = undefined;
s_lion_spot.which_ball = self.which_ball;
self notify( "zm_sq_ball_used" );
s_lion_spot.zm_pts_animating = 1;
s_lion_spot.springpad_buddy.zm_pts_animating = 1;
flag_set( "pts_2_generator_" + level.current_generator + "_started" );
s_lion_spot.which_generator = level.current_generator;
level.current_generator++;
t_place_ball endon( "delete" );
t_place_ball waittill( "trigger" );
pts_putdown_trigs_remove_for_spot( s_lion_spot );
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
self.zm_sq_has_ball = undefined;
s_lion_spot.which_ball = self.which_ball;
self notify( "zm_sq_ball_used" );
s_lion_spot.zm_pts_animating = 1;
s_lion_spot.springpad_buddy.zm_pts_animating = 1;
flag_set( "pts_2_generator_" + level.current_generator + "_started" );
s_lion_spot.which_generator = level.current_generator;
level.current_generator++;
/#
iprintlnbold( "Ball Animating" );
iprintlnbold( "Ball Animating" );
#/
s_lion_spot.springpad thread pts_springpad_fling( s_lion_spot.script_noteworthy, s_lion_spot.springpad_buddy.springpad );
self.t_putdown_ball delete();
s_lion_spot.springpad thread pts_springpad_fling( s_lion_spot.script_noteworthy, s_lion_spot.springpad_buddy.springpad );
self.t_putdown_ball delete();
}
delete_all_springpads()
{
}
exit_stage_1( success )
{
}
exit_stage_2( success )
{
}
watch_player_springpads( is_generator )
{
level thread springpad_count_watcher( is_generator );
a_players = get_players();
_a240 = a_players;
_k240 = getFirstArrayKey( _a240 );
while ( isDefined( _k240 ) )
{
player = _a240[ _k240 ];
player thread pts_watch_springpad_use( is_generator );
_k240 = getNextArrayKey( _a240, _k240 );
}
level thread springpad_count_watcher( is_generator );
a_players = get_players();
foreach ( player in a_players )
player thread pts_watch_springpad_use( is_generator );
}
pts_watch_springpad_use( is_generator )
{
self endon( "death" );
self endon( "disconnect" );
while ( !flag( "sq_branch_complete" ) )
{
self waittill( "equipment_placed", weapon, weapname );
if ( weapname == level.springpad_name )
{
self is_springpad_in_place( weapon, is_generator );
}
}
self endon( "death" );
self endon( "disconnect" );
while ( !flag( "sq_branch_complete" ) )
{
self waittill( "equipment_placed", weapon, weapname );
if ( weapname == level.springpad_name )
self is_springpad_in_place( weapon, is_generator );
}
}
springpad_count_watcher( is_generator )
{
level endon( "sq_pts_springad_count4" );
str_which_spots = "pts_ghoul";
if ( is_generator )
{
str_which_spots = "pts_lion";
}
a_spots = getstructarray( str_which_spots, "targetname" );
while ( 1 )
{
level waittill( "sq_pts_springpad_in_place" );
n_count = 0;
_a279 = a_spots;
_k279 = getFirstArrayKey( _a279 );
while ( isDefined( _k279 ) )
{
s_spot = _a279[ _k279 ];
if ( isDefined( s_spot.springpad ) )
{
n_count++;
}
_k279 = getNextArrayKey( _a279, _k279 );
}
level notify( "sq_pts_springad_count" + n_count );
}
level endon( "sq_pts_springad_count4" );
str_which_spots = "pts_ghoul";
if ( is_generator )
str_which_spots = "pts_lion";
a_spots = getstructarray( str_which_spots, "targetname" );
while ( true )
{
level waittill( "sq_pts_springpad_in_place" );
n_count = 0;
foreach ( s_spot in a_spots )
{
if ( isdefined( s_spot.springpad ) )
n_count++;
}
level notify( "sq_pts_springad_count" + n_count );
}
}
is_springpad_in_place( m_springpad, is_generator )
{
a_lion_spots = getstructarray( "pts_lion", "targetname" );
a_ghoul_spots = getstructarray( "pts_ghoul", "targetname" );
a_spots = arraycombine( a_lion_spots, a_ghoul_spots, 0, 0 );
_a298 = a_spots;
_k298 = getFirstArrayKey( _a298 );
while ( isDefined( _k298 ) )
{
s_spot = _a298[ _k298 ];
n_dist = distance2dsquared( m_springpad.origin, s_spot.origin );
if ( n_dist < 1024 )
{
v_spot_forward = vectornormalize( anglesToForward( s_spot.angles ) );
v_pad_forward = vectornormalize( anglesToForward( m_springpad.angles ) );
n_dot = vectordot( v_spot_forward, v_pad_forward );
a_lion_spots = getstructarray( "pts_lion", "targetname" );
a_ghoul_spots = getstructarray( "pts_ghoul", "targetname" );
a_spots = arraycombine( a_lion_spots, a_ghoul_spots, 0, 0 );
foreach ( s_spot in a_spots )
{
n_dist = distance2dsquared( m_springpad.origin, s_spot.origin );
if ( n_dist < 1024 )
{
v_spot_forward = vectornormalize( anglestoforward( s_spot.angles ) );
v_pad_forward = vectornormalize( anglestoforward( m_springpad.angles ) );
n_dot = vectordot( v_spot_forward, v_pad_forward );
/#
iprintlnbold( "Trample Steam OFF: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
iprintlnbold( "Trample Steam OFF: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
#/
if ( n_dot > 0,98 )
{
if ( n_dot > 0.98 )
{
/#
iprintlnbold( "Trample Steam IN PLACE: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
iprintlnbold( "Trample Steam IN PLACE: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
#/
level notify( "sq_pts_springpad_in_place" );
s_spot.springpad = m_springpad;
self thread pts_springpad_removed_watcher( m_springpad, s_spot );
if ( is_generator )
{
wait 0,1;
level thread pts_should_springpad_create_trigs( s_spot );
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
}
else
{
m_springpad.fling_scaler = 2;
m_springpad thread watch_zombie_flings();
}
if ( isDefined( s_spot.script_float ) )
{
s_target = getstruct( "sq_zombie_launch_target", "targetname" );
v_override_dir = vectornormalize( s_target.origin - m_springpad.origin );
v_override_dir = vectorScale( v_override_dir, 1024 );
m_springpad.direction_vec_override = v_override_dir;
m_springpad.fling_scaler = s_spot.script_float;
}
return;
}
}
else
{
_k298 = getNextArrayKey( _a298, _k298 );
}
}
level notify( "sq_pts_springpad_in_place" );
s_spot.springpad = m_springpad;
self thread pts_springpad_removed_watcher( m_springpad, s_spot );
if ( is_generator )
{
wait 0.1;
level thread pts_should_springpad_create_trigs( s_spot );
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
}
else
{
m_springpad.fling_scaler = 2;
m_springpad thread watch_zombie_flings();
}
if ( isdefined( s_spot.script_float ) )
{
s_target = getstruct( "sq_zombie_launch_target", "targetname" );
v_override_dir = vectornormalize( s_target.origin - m_springpad.origin );
v_override_dir = vectorscale( v_override_dir, 1024 );
m_springpad.direction_vec_override = v_override_dir;
m_springpad.fling_scaler = s_spot.script_float;
}
break;
}
}
}
}
pts_springpad_fling( str_spot_name, m_buddy_springpad )
{
str_anim1 = undefined;
n_anim_length1 = undefined;
str_anim2 = undefined;
n_anim_length2 = undefined;
switch( str_spot_name )
{
case "lion_pair_1":
str_anim1 = "dc";
str_anim2 = "cd";
break;
case "lion_pair_2":
str_anim1 = "ab";
str_anim2 = "ba";
break;
case "lion_pair_3":
str_anim1 = "cd";
str_anim2 = "dc";
break;
case "lion_pair_4":
str_anim1 = "ba";
str_anim2 = "ab";
break;
}
m_anim = spawn( "script_model", ( 2090, 675, 3542 ) );
m_anim.angles = ( 0, 0, 0 );
m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" );
m_anim useanimtree( -1 );
m_anim.targetname = "trample_gen_" + str_spot_name;
pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 );
str_anim1 = undefined;
n_anim_length1 = undefined;
str_anim2 = undefined;
n_anim_length2 = undefined;
switch ( str_spot_name )
{
case "lion_pair_1":
str_anim1 = "dc";
str_anim2 = "cd";
break;
case "lion_pair_2":
str_anim1 = "ab";
str_anim2 = "ba";
break;
case "lion_pair_3":
str_anim1 = "cd";
str_anim2 = "dc";
break;
case "lion_pair_4":
str_anim1 = "ba";
str_anim2 = "ab";
break;
}
m_anim = spawn( "script_model", ( 2090, 675, 3542 ) );
m_anim.angles = ( 0, 0, 0 );
m_anim setmodel( "fxanim_zom_highrise_trample_gen_mod" );
m_anim useanimtree( -1 );
m_anim.targetname = "trample_gen_" + str_spot_name;
pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 );
}
pts_springpad_anim_ball( m_buddy_springpad, m_anim, str_anim1, str_anim2 )
{
m_anim endon( "delete" );
self endon( "delete" );
m_buddy_springpad endon( "delete" );
n_anim_length1 = getanimlength( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim1 ] );
n_anim_length2 = getanimlength( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim2 ] );
while ( isDefined( m_anim ) )
{
self notify( "fling" );
if ( isDefined( m_anim ) )
{
m_anim setanim( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim1 ] );
}
wait n_anim_length1;
m_buddy_springpad notify( "fling" );
if ( isDefined( m_anim ) )
{
m_anim setanim( level.scr_anim[ "fxanim_props" ][ "trample_gen_" + str_anim2 ] );
}
wait n_anim_length2;
}
m_anim endon( "delete" );
self endon( "delete" );
m_buddy_springpad endon( "delete" );
n_anim_length1 = getanimlength( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim1] );
n_anim_length2 = getanimlength( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim2] );
while ( isdefined( m_anim ) )
{
self notify( "fling", 1 );
if ( isdefined( m_anim ) )
m_anim setanim( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim1] );
wait( n_anim_length1 );
m_buddy_springpad notify( "fling", 1 );
if ( isdefined( m_anim ) )
m_anim setanim( level.scr_anim["fxanim_props"]["trample_gen_" + str_anim2] );
wait( n_anim_length2 );
}
}
pts_springpad_removed_watcher( m_springpad, s_spot )
{
self pts_springpad_waittill_removed( m_springpad );
s_spot.springpad = undefined;
self pts_springpad_waittill_removed( m_springpad );
s_spot.springpad = undefined;
}
pts_springpad_waittill_removed( m_springpad )
{
m_springpad endon( "delete" );
m_springpad endon( "death" );
self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" );
m_springpad endon( "delete" );
m_springpad endon( "death" );
self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" );
}
wait_for_all_springpads_placed( str_type, str_flag )
{
a_spots = getstructarray( str_type, "targetname" );
while ( !flag( str_flag ) )
{
is_clear = 0;
_a442 = a_spots;
_k442 = getFirstArrayKey( _a442 );
while ( isDefined( _k442 ) )
{
s_spot = _a442[ _k442 ];
if ( !isDefined( s_spot.springpad ) )
{
is_clear = 1;
}
_k442 = getNextArrayKey( _a442, _k442 );
}
if ( !is_clear )
{
flag_set( str_flag );
}
wait 1;
}
a_spots = getstructarray( str_type, "targetname" );
while ( !flag( str_flag ) )
{
is_clear = 0;
foreach ( s_spot in a_spots )
{
if ( !isdefined( s_spot.springpad ) )
is_clear = 1;
}
if ( !is_clear )
flag_set( str_flag );
wait 1;
}
}
pts_should_player_create_trigs( player )
{
a_lion_spots = getstructarray( "pts_lion", "targetname" );
_a467 = a_lion_spots;
_k467 = getFirstArrayKey( _a467 );
while ( isDefined( _k467 ) )
{
s_lion_spot = _a467[ _k467 ];
if ( isDefined( s_lion_spot.springpad ) && isDefined( s_lion_spot.springpad_buddy.springpad ) )
{
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
}
_k467 = getNextArrayKey( _a467, _k467 );
}
a_lion_spots = getstructarray( "pts_lion", "targetname" );
foreach ( s_lion_spot in a_lion_spots )
{
if ( isdefined( s_lion_spot.springpad ) && isdefined( s_lion_spot.springpad_buddy.springpad ) )
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
}
}
pts_should_springpad_create_trigs( s_lion_spot )
{
while ( isDefined( s_lion_spot.springpad ) && isDefined( s_lion_spot.springpad_buddy.springpad ) )
{
a_players = getplayers();
_a481 = a_players;
_k481 = getFirstArrayKey( _a481 );
while ( isDefined( _k481 ) )
{
player = _a481[ _k481 ];
if ( isDefined( player.zm_sq_has_ball ) && player.zm_sq_has_ball )
{
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
pts_putdown_trigs_create_for_spot( s_lion_spot.springpad_buddy, player );
}
_k481 = getNextArrayKey( _a481, _k481 );
}
}
if ( isdefined( s_lion_spot.springpad ) && isdefined( s_lion_spot.springpad_buddy.springpad ) )
{
a_players = getplayers();
foreach ( player in a_players )
{
if ( isdefined( player.zm_sq_has_ball ) && player.zm_sq_has_ball )
{
pts_putdown_trigs_create_for_spot( s_lion_spot, player );
pts_putdown_trigs_create_for_spot( s_lion_spot.springpad_buddy, player );
}
}
}
}
pts_putdown_trigs_create_for_spot( s_lion_spot, player )
{
if ( isDefined( s_lion_spot.which_ball ) || isDefined( s_lion_spot.springpad_buddy ) && isDefined( s_lion_spot.springpad_buddy.which_ball ) )
{
return;
}
t_place_ball = sq_pts_create_use_trigger( s_lion_spot.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
player clientclaimtrigger( t_place_ball );
t_place_ball.owner = player;
player thread place_ball_think( t_place_ball, s_lion_spot );
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
{
s_lion_spot.pts_putdown_trigs = [];
}
s_lion_spot.pts_putdown_trigs[ player.characterindex ] = t_place_ball;
level thread pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot );
if ( isdefined( s_lion_spot.which_ball ) || isdefined( s_lion_spot.springpad_buddy ) && isdefined( s_lion_spot.springpad_buddy.which_ball ) )
return;
t_place_ball = sq_pts_create_use_trigger( s_lion_spot.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
player clientclaimtrigger( t_place_ball );
t_place_ball.owner = player;
player thread place_ball_think( t_place_ball, s_lion_spot );
if ( !isdefined( s_lion_spot.pts_putdown_trigs ) )
s_lion_spot.pts_putdown_trigs = [];
s_lion_spot.pts_putdown_trigs[player.characterindex] = t_place_ball;
level thread pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot );
}
pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot )
{
player pts_springpad_waittill_removed( s_lion_spot.springpad );
pts_putdown_trigs_remove_for_spot( s_lion_spot );
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
level thread pts_reset_ball( s_lion_spot );
player pts_springpad_waittill_removed( s_lion_spot.springpad );
pts_putdown_trigs_remove_for_spot( s_lion_spot );
pts_putdown_trigs_remove_for_spot( s_lion_spot.springpad_buddy );
level thread pts_reset_ball( s_lion_spot );
}
pts_reset_ball( s_lion_spot )
{
if ( isDefined( s_lion_spot.which_ball ) )
{
s_lion_spot.sq_pickup_reset = 1;
s_lion_spot.which_ball notify( "sq_pickup_reset" );
m_ball_anim = getent( "trample_gen_" + s_lion_spot.script_noteworthy, "targetname" );
playfx( level._effect[ "sidequest_flash" ], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
flag_clear( "pts_2_generator_" + s_lion_spot.which_generator + "_started" );
level.current_generator--;
s_lion_spot.which_ball = undefined;
m_ball_anim delete();
}
else
{
if ( isDefined( s_lion_spot.springpad_buddy.which_ball ) )
{
s_lion_spot.springpad_buddy.sq_pickup_reset = 1;
s_lion_spot.springpad_buddy.which_ball notify( "sq_pickup_reset" );
m_ball_anim = getent( "trample_gen_" + s_lion_spot.springpad_buddy.script_noteworthy, "targetname" );
playfx( level._effect[ "sidequest_flash" ], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
flag_clear( "pts_2_generator_" + s_lion_spot.springpad_buddy.which_generator + "_started" );
level.current_generator--;
s_lion_spot.springpad_buddy.which_ball = undefined;
m_ball_anim delete();
}
}
if ( isdefined( s_lion_spot.which_ball ) )
{
s_lion_spot.sq_pickup_reset = 1;
s_lion_spot.which_ball notify( "sq_pickup_reset" );
m_ball_anim = getent( "trample_gen_" + s_lion_spot.script_noteworthy, "targetname" );
playfx( level._effect["sidequest_flash"], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
flag_clear( "pts_2_generator_" + s_lion_spot.which_generator + "_started" );
level.current_generator--;
s_lion_spot.which_ball = undefined;
m_ball_anim delete();
}
else if ( isdefined( s_lion_spot.springpad_buddy.which_ball ) )
{
s_lion_spot.springpad_buddy.sq_pickup_reset = 1;
s_lion_spot.springpad_buddy.which_ball notify( "sq_pickup_reset" );
m_ball_anim = getent( "trample_gen_" + s_lion_spot.springpad_buddy.script_noteworthy, "targetname" );
playfx( level._effect["sidequest_flash"], m_ball_anim gettagorigin( "fxanim_zom_highrise_trample_gen1_jnt" ) );
flag_clear( "pts_2_generator_" + s_lion_spot.springpad_buddy.which_generator + "_started" );
level.current_generator--;
s_lion_spot.springpad_buddy.which_ball = undefined;
m_ball_anim delete();
}
}
pts_putdown_trigs_remove_for_player( player )
{
a_lion_spots = getstructarray( "pts_lion", "targetname" );
_a554 = a_lion_spots;
_k554 = getFirstArrayKey( _a554 );
while ( isDefined( _k554 ) )
{
s_lion_spot = _a554[ _k554 ];
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
{
}
else if ( isDefined( s_lion_spot.pts_putdown_trigs[ player.characterindex ] ) )
{
s_lion_spot.pts_putdown_trigs[ player.characterindex ] delete();
arrayremoveindex( s_lion_spot.pts_putdown_trigs, player.characterindex, 1 );
}
_k554 = getNextArrayKey( _a554, _k554 );
}
a_lion_spots = getstructarray( "pts_lion", "targetname" );
foreach ( s_lion_spot in a_lion_spots )
{
if ( !isdefined( s_lion_spot.pts_putdown_trigs ) )
{
continue;
continue;
}
if ( isdefined( s_lion_spot.pts_putdown_trigs[player.characterindex] ) )
{
s_lion_spot.pts_putdown_trigs[player.characterindex] delete();
arrayremoveindex( s_lion_spot.pts_putdown_trigs, player.characterindex, 1 );
}
}
}
pts_putdown_trigs_remove_for_spot( s_lion_spot )
{
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
{
return;
}
_a575 = s_lion_spot.pts_putdown_trigs;
_k575 = getFirstArrayKey( _a575 );
while ( isDefined( _k575 ) )
{
t_putdown = _a575[ _k575 ];
t_putdown delete();
_k575 = getNextArrayKey( _a575, _k575 );
}
s_lion_spot.pts_putdown_trigs = [];
if ( !isdefined( s_lion_spot.pts_putdown_trigs ) )
return;
foreach ( t_putdown in s_lion_spot.pts_putdown_trigs )
t_putdown delete();
s_lion_spot.pts_putdown_trigs = [];
}
richtofen_pts_instructions()
{
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_0" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_0" );
}
richtofen_pts_placed()
{
level waittill( "sq_pts_springad_count1" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_1" );
level waittill( "sq_pts_springad_count2" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_2" );
level waittill( "sq_pts_springad_count3" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_3" );
level waittill( "sq_pts_springad_count4" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_4" );
level waittill( "sq_pts_springad_count1" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_1" );
level waittill( "sq_pts_springad_count2" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_2" );
level waittill( "sq_pts_springad_count3" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_3" );
level waittill( "sq_pts_springad_count4" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_place_trample_4" );
}
richtofen_zombies_launched()
{
level waittill( "pts1_say_next_line" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_0" );
wait 1;
level waittill( "pts1_say_next_line" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_1" );
wait 1;
level waittill( "pts1_say_next_line" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_2" );
level waittill( "pts1_say_next_line" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_0" );
wait 1;
level waittill( "pts1_say_next_line" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_1" );
wait 1;
level waittill( "pts1_say_next_line" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_spill_blood_2" );
}
maxis_pts_instructions()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_0" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_0" );
}
maxis_pts_placed()
{
level waittill( "sq_pts_springad_count1" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_1" );
level waittill( "sq_pts_springad_count2" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_2" );
level waittill( "sq_pts_springad_count4" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_3" );
level waittill( "sq_pts_springad_count1" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_1" );
level waittill( "sq_pts_springad_count2" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_2" );
level waittill( "sq_pts_springad_count4" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_3" );
}
maxis_balls_placed()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_4" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_create_trample_4" );
}

View File

@ -1,199 +1,206 @@
#include maps/mp/zm_highrise_sq_pts;
#include maps/mp/zm_highrise_sq;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zm_highrise_sq;
#include maps\mp\zm_highrise_sq_pts;
init()
{
flag_init( "sq_slb_first_ball_sniped" );
flag_init( "sq_slb_richtofen_spoke" );
declare_sidequest_stage( "sq", "slb", ::init_stage, ::stage_logic, ::exit_stage_1 );
flag_init( "sq_slb_first_ball_sniped" );
flag_init( "sq_slb_richtofen_spoke" );
declare_sidequest_stage( "sq", "slb", ::init_stage, ::stage_logic, ::exit_stage_1 );
}
init_stage()
{
level._cur_stage_name = "slb";
clientnotify( "slb" );
level thread vo_maxis_slb_hint();
level._cur_stage_name = "slb";
clientnotify( "slb" );
level thread vo_maxis_slb_hint();
}
stage_logic()
{
/#
iprintlnbold( "SLB Started" );
iprintlnbold( "SLB Started" );
#/
snipe_balls_wait();
stage_completed( "sq", level._cur_stage_name );
snipe_balls_wait();
stage_completed( "sq", level._cur_stage_name );
}
exit_stage_1( success )
{
}
snipe_balls_wait()
{
a_balls = getentarray( "sq_dragon_lion_ball", "targetname" );
array_thread( a_balls, ::snipe_balls_watch_ball );
is_complete = 0;
while ( !is_complete )
{
level waittill( "zm_ball_shot" );
wait 1;
is_complete = 1;
_a50 = a_balls;
_k50 = getFirstArrayKey( _a50 );
while ( isDefined( _k50 ) )
{
m_ball = _a50[ _k50 ];
if ( isDefined( m_ball ) )
{
is_complete = 0;
}
_k50 = getNextArrayKey( _a50, _k50 );
}
}
a_balls = getentarray( "sq_dragon_lion_ball", "targetname" );
array_thread( a_balls, ::snipe_balls_watch_ball );
is_complete = 0;
while ( !is_complete )
{
level waittill( "zm_ball_shot" );
wait 1;
is_complete = 1;
foreach ( m_ball in a_balls )
{
if ( isdefined( m_ball ) )
is_complete = 0;
}
}
/#
iprintlnbold( "All Balls Shot" );
iprintlnbold( "All Balls Shot" );
#/
}
snipe_balls_watch_ball()
{
self endon( "delete" );
a_snipers = array( "dsr50_zm", "dsr50_upgraded_zm+vzoom", "barretm82_zm", "barretm82_upgraded_zm+vzoom", "svu_zm", "svu_upgraded_zm+vzoom" );
self setcandamage( 1 );
while ( 1 )
{
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
if ( maps/mp/zm_highrise_sq::sq_is_weapon_sniper( weaponname ) )
{
level notify( "zm_ball_shot" );
playsoundatposition( "zmb_sq_ball_ding", self.origin );
playfx( level._effect[ "sidequest_flash" ], self.origin );
str_noteworthy = self.script_noteworthy;
self delete();
wait 0,5;
clientnotify( str_noteworthy );
m_ball = getent( "sq_sliquify_r", "script_noteworthy" );
if ( str_noteworthy == "m_drg_tail" )
{
m_ball = getent( "sq_sliquify_m", "script_noteworthy" );
}
playfx( level._effect[ "sidequest_flash" ], m_ball.origin );
m_ball show();
m_ball thread lion_ball_enable_pickup();
if ( !flag( "sq_slb_first_ball_sniped" ) )
{
flag_set( "sq_slb_first_ball_sniped" );
level thread vo_atd_ball1_sniped();
break;
}
else
{
level thread vo_maxis_atd_ball2_sniped();
}
}
}
self endon( "delete" );
a_snipers = array( "dsr50_zm", "dsr50_upgraded_zm+vzoom", "barretm82_zm", "barretm82_upgraded_zm+vzoom", "svu_zm", "svu_upgraded_zm+vzoom" );
self setcandamage( 1 );
while ( true )
{
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
if ( maps\mp\zm_highrise_sq::sq_is_weapon_sniper( weaponname ) )
{
level notify( "zm_ball_shot" );
playsoundatposition( "zmb_sq_ball_ding", self.origin );
playfx( level._effect["sidequest_flash"], self.origin );
str_noteworthy = self.script_noteworthy;
self delete();
wait 0.5;
clientnotify( str_noteworthy );
m_ball = getent( "sq_sliquify_r", "script_noteworthy" );
if ( str_noteworthy == "m_drg_tail" )
m_ball = getent( "sq_sliquify_m", "script_noteworthy" );
playfx( level._effect["sidequest_flash"], m_ball.origin );
m_ball show();
m_ball thread lion_ball_enable_pickup();
if ( !flag( "sq_slb_first_ball_sniped" ) )
{
flag_set( "sq_slb_first_ball_sniped" );
level thread vo_atd_ball1_sniped();
}
else
level thread vo_maxis_atd_ball2_sniped();
}
}
}
lion_ball_enable_pickup()
{
self endon( "sq_sliquified" );
while ( 1 )
{
self.can_pickup = 1;
self.t_pickup = sq_slb_create_use_trigger( self.origin, 32, 70, &"ZM_HIGHRISE_SQ_PICKUP_BALL" );
while ( self.can_pickup )
{
self.t_pickup waittill( "trigger", player );
if ( !isDefined( player.zm_sq_has_ball ) )
{
player.zm_sq_has_ball = 1;
player.which_ball = self;
self.can_pickup = 0;
self.player = player;
flag_set( "sq_ball_picked_up" );
level thread maps/mp/zm_highrise_sq_pts::pts_should_player_create_trigs( player );
level notify( "zm_ball_picked_up" );
}
}
self.t_pickup delete();
self hide();
self setcandamage( 0 );
wait 1;
self.t_putdown = sq_slb_create_use_trigger( self.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
self.player clientclaimtrigger( self.t_putdown );
self.player.t_putdown_ball = self.t_putdown;
self ball_pickup_waittill_change();
play_spark = 0;
if ( !isDefined( self.t_putdown ) )
{
self waittill( "sq_pickup_reset" );
play_spark = 1;
}
else
{
self.t_putdown delete();
}
self.player notify( "zm_sq_ball_putdown" );
if ( play_spark )
{
self.sq_pickup_reset = undefined;
playfx( level._effect[ "sidequest_flash" ], self.origin );
}
self show();
self setcandamage( 1 );
self.player.zm_sq_has_ball = undefined;
self.player = undefined;
wait 1;
}
self endon( "sq_sliquified" );
while ( true )
{
self.can_pickup = 1;
self.t_pickup = sq_slb_create_use_trigger( self.origin, 32, 70, &"ZM_HIGHRISE_SQ_PICKUP_BALL" );
while ( self.can_pickup )
{
self.t_pickup waittill( "trigger", player );
if ( !isdefined( player.zm_sq_has_ball ) )
{
player.zm_sq_has_ball = 1;
player.which_ball = self;
self.can_pickup = 0;
self.player = player;
flag_set( "sq_ball_picked_up" );
level thread maps\mp\zm_highrise_sq_pts::pts_should_player_create_trigs( player );
level notify( "zm_ball_picked_up", player );
}
}
self.t_pickup delete();
self hide();
self setcandamage( 0 );
wait 1;
self.t_putdown = sq_slb_create_use_trigger( self.origin, 16, 70, &"ZM_HIGHRISE_SQ_PUTDOWN_BALL" );
self.player clientclaimtrigger( self.t_putdown );
self.player.t_putdown_ball = self.t_putdown;
self ball_pickup_waittill_change();
play_spark = 0;
if ( !isdefined( self.t_putdown ) )
{
self waittill( "sq_pickup_reset" );
play_spark = 1;
}
else
self.t_putdown delete();
self.player notify( "zm_sq_ball_putdown" );
if ( play_spark )
{
self.sq_pickup_reset = undefined;
playfx( level._effect["sidequest_flash"], self.origin );
}
self show();
self setcandamage( 1 );
self.player.zm_sq_has_ball = undefined;
self.player = undefined;
wait 1;
}
}
ball_pickup_waittill_change()
{
self endon( "sq_pickup_reset" );
self.t_putdown waittill_any_return( "trigger", "delete", "reset" );
self endon( "sq_pickup_reset" );
self.t_putdown waittill_any_return( "trigger", "delete", "reset" );
}
sq_slb_create_use_trigger( v_origin, radius, height, str_hint_string )
{
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
t_pickup setcursorhint( "HINT_NOICON" );
t_pickup sethintstring( str_hint_string );
t_pickup.targetname = "ball_pickup_trig";
t_pickup triggerignoreteam();
t_pickup usetriggerrequirelookat();
return t_pickup;
t_pickup = spawn( "trigger_radius_use", v_origin, 0, radius, height );
t_pickup setcursorhint( "HINT_NOICON" );
t_pickup sethintstring( str_hint_string );
t_pickup.targetname = "ball_pickup_trig";
t_pickup triggerignoreteam();
t_pickup usetriggerrequirelookat();
return t_pickup;
}
vo_richtofen_atd_ball_sniped()
{
if ( !flag( "sq_slb_richtofen_spoke" ) )
{
flag_set( "sq_slb_richtofen_spoke" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_4" );
}
if ( !flag( "sq_slb_richtofen_spoke" ) )
{
flag_set( "sq_slb_richtofen_spoke" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sec_symbols_4" );
}
}
vo_maxis_slb_hint()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_0" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_0" );
}
vo_maxis_atd_ball1_sniped()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_1" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_1" );
}
vo_maxis_atd_ball2_sniped()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_2" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_2" );
}
vo_atd_ball1_sniped()
{
vo_richtofen_atd_ball_sniped();
level thread vo_maxis_atd_ball1_sniped();
vo_richtofen_atd_ball_sniped();
level thread vo_maxis_atd_ball1_sniped();
}

View File

@ -1,328 +1,318 @@
#include maps/mp/zm_highrise_sq;
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_sidequests;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_sidequests;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\zm_highrise_sq;
init_1()
{
flag_init( "ssp1_ball0_complete" );
flag_init( "ssp1_ball1_complete" );
flag_init( "ssp1_complete" );
declare_sidequest_stage( "sq_1", "ssp_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
flag_init( "ssp1_ball0_complete" );
flag_init( "ssp1_ball1_complete" );
flag_init( "ssp1_complete" );
declare_sidequest_stage( "sq_1", "ssp_1", ::init_stage_1, ::stage_logic_1, ::exit_stage_1 );
}
init_2()
{
flag_init( "ssp2_maxis_keep_going_said" );
flag_init( "ssp2_maxis_reincarnate_said" );
flag_init( "ssp2_corpses_in_place" );
flag_init( "ssp2_resurrection_done" );
flag_init( "ssp2_statue_complete" );
maps/mp/zombies/_zm_spawner::add_custom_zombie_spawn_logic( ::ssp_2_zombie_death_check );
declare_sidequest_stage( "sq_2", "ssp_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
flag_init( "ssp2_maxis_keep_going_said" );
flag_init( "ssp2_maxis_reincarnate_said" );
flag_init( "ssp2_corpses_in_place" );
flag_init( "ssp2_resurrection_done" );
flag_init( "ssp2_statue_complete" );
maps\mp\zombies\_zm_spawner::add_custom_zombie_spawn_logic( ::ssp_2_zombie_death_check );
declare_sidequest_stage( "sq_2", "ssp_2", ::init_stage_2, ::stage_logic_2, ::exit_stage_2 );
}
init_stage_1()
{
clientnotify( "ssp_1" );
level thread vo_richtofen_instructions();
clientnotify( "ssp_1" );
level thread vo_richtofen_instructions();
}
init_stage_2()
{
clientnotify( "ssp_2" );
level thread vo_maxis_start_ssp();
clientnotify( "ssp_2" );
level thread vo_maxis_start_ssp();
}
stage_logic_1()
{
/#
iprintlnbold( "SSP1 Started" );
iprintlnbold( "SSP1 Started" );
#/
ssp1_sliquify_balls();
stage_completed( "sq_1", "ssp_1" );
ssp1_sliquify_balls();
stage_completed( "sq_1", "ssp_1" );
}
ssp1_sliquify_balls()
{
a_balls = getentarray( "sq_sliquify_ball", "targetname" );
level thread vo_sliquify_fail_watch();
level thread ssp1_advance_dragon();
level thread vo_richtofen_sliquify_confirm();
level thread vo_maxis_sliquify_fail();
i = 0;
while ( i < a_balls.size )
{
a_balls[ i ] thread ssp1_watch_ball( "ssp1_ball" + i + "_complete" );
i++;
}
while ( !flag( "ssp1_ball0_complete" ) || !flag( "ssp1_ball1_complete" ) )
{
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
wait 0,5;
}
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
a_balls = getentarray( "sq_sliquify_ball", "targetname" );
level thread vo_sliquify_fail_watch();
level thread ssp1_advance_dragon();
level thread vo_richtofen_sliquify_confirm();
level thread vo_maxis_sliquify_fail();
for ( i = 0; i < a_balls.size; i++ )
a_balls[i] thread ssp1_watch_ball( "ssp1_ball" + i + "_complete" );
while ( !flag( "ssp1_ball0_complete" ) || !flag( "ssp1_ball1_complete" ) )
{
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
wait 0.5;
}
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 );
}
ssp1_watch_ball( str_complete_flag )
{
self watch_model_sliquification( 20, str_complete_flag );
self thread ssp1_rotate_ball();
self playloopsound( "zmb_sq_ball_rotate_loop", 0,25 );
self watch_model_sliquification( 20, str_complete_flag );
self thread ssp1_rotate_ball();
self playloopsound( "zmb_sq_ball_rotate_loop", 0.25 );
}
ssp1_rotate_ball()
{
while ( isDefined( self ) )
{
self rotateyaw( 360, 1 );
wait 0,9;
}
while ( isdefined( self ) )
{
self rotateyaw( 360, 1 );
wait 0.9;
}
}
ssp1_advance_dragon()
{
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 );
}
stage_logic_2()
{
/#
iprintlnbold( "SSP2 Started" );
iprintlnbold( "SSP2 Started" );
#/
level thread ssp2_advance_dragon();
corpse_room_watcher();
stage_completed( "sq_2", "ssp_2" );
level thread ssp2_advance_dragon();
corpse_room_watcher();
stage_completed( "sq_2", "ssp_2" );
}
corpse_room_watcher()
{
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
n_count = 0;
while ( !flag( "ssp2_resurrection_done" ) )
{
level waittill( "ssp2_corpse_made", is_in_room );
if ( is_in_room )
{
n_count++;
}
else
{
n_count = 0;
}
if ( n_count == 1 && !flag( "ssp2_maxis_keep_going_said" ) )
{
flag_set( "ssp2_maxis_keep_going_said" );
level thread maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_0" );
continue;
}
else
{
if ( n_count >= 15 )
{
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
n_count = 0;
while ( !flag( "ssp2_resurrection_done" ) )
{
level waittill( "ssp2_corpse_made", is_in_room );
if ( is_in_room )
n_count++;
else
n_count = 0;
if ( n_count == 1 && !flag( "ssp2_maxis_keep_going_said" ) )
{
flag_set( "ssp2_maxis_keep_going_said" );
level thread maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_0" );
}
else if ( n_count >= 15 )
{
/#
iprintlnbold( "Corpse Count Reached" );
iprintlnbold( "Corpse Count Reached" );
#/
level thread vo_maxis_ssp_reincarnate();
flag_set( "ssp2_corpses_in_place" );
corpse_room_revive_watcher();
level notify( "end_revive_watcher" );
}
}
}
level thread vo_maxis_ssp_reincarnate();
flag_set( "ssp2_corpses_in_place" );
corpse_room_revive_watcher();
level notify( "end_revive_watcher" );
}
}
}
ssp_2_zombie_death_check()
{
self waittill( "death" );
if ( !isDefined( self ) )
{
return;
}
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
if ( self istouching( t_corpse_room ) )
{
level notify( "ssp2_corpse_made" );
}
else
{
level notify( "ssp2_corpse_made" );
}
self waittill( "death" );
if ( !isdefined( self ) )
return;
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
if ( self istouching( t_corpse_room ) )
level notify( "ssp2_corpse_made", 1 );
else
level notify( "ssp2_corpse_made", 0 );
}
corpse_room_cleanup_watcher()
{
level endon( "ssp2_resurrection_done" );
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
while ( 1 )
{
wait 1;
a_corpses = getcorpsearray();
if ( a_corpses.size < 15 )
{
level thread vo_maxis_ssp_fail();
level notify( "end_revive_watcher" );
return;
}
n_count = 0;
_a206 = a_corpses;
_k206 = getFirstArrayKey( _a206 );
while ( isDefined( _k206 ) )
{
m_corpse = _a206[ _k206 ];
if ( m_corpse istouching( t_corpse_room ) )
{
n_count++;
}
_k206 = getNextArrayKey( _a206, _k206 );
}
if ( n_count < 15 )
{
level thread vo_maxis_ssp_fail();
level notify( "end_revive_watcher" );
return;
}
}
level endon( "ssp2_resurrection_done" );
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
while ( true )
{
wait 1;
a_corpses = getcorpsearray();
if ( a_corpses.size < 15 )
{
level thread vo_maxis_ssp_fail();
level notify( "end_revive_watcher" );
return;
}
n_count = 0;
foreach ( m_corpse in a_corpses )
{
if ( m_corpse istouching( t_corpse_room ) )
n_count++;
}
if ( n_count < 15 )
{
level thread vo_maxis_ssp_fail();
level notify( "end_revive_watcher" );
return;
}
}
}
corpse_room_revive_watcher()
{
level endon( "end_revive_watcher" );
weaponname = "none";
str_type = "none";
t_corpse_room_dmg = getent( "corpse_room_trigger", "targetname" );
while ( weaponname != "knife_ballistic_upgraded_zm" || str_type != "MOD_IMPACT" )
{
t_corpse_room_dmg waittill( "damage", amount, inflictor, direction, point, type );
if ( isplayer( inflictor ) )
{
weaponname = inflictor.currentweapon;
str_type = type;
}
}
level endon( "end_revive_watcher" );
weaponname = "none";
str_type = "none";
t_corpse_room_dmg = getent( "corpse_room_trigger", "targetname" );
while ( weaponname != "knife_ballistic_upgraded_zm" || str_type != "MOD_IMPACT" )
{
t_corpse_room_dmg waittill( "damage", amount, inflictor, direction, point, type );
if ( isplayer( inflictor ) )
{
weaponname = inflictor.currentweapon;
str_type = type;
}
}
/#
iprintlnbold( "Revive Complete" );
iprintlnbold( "Revive Complete" );
#/
vo_maxis_ssp_complete();
flag_set( "ssp2_resurrection_done" );
vo_maxis_ssp_complete();
flag_set( "ssp2_resurrection_done" );
}
ssp2_advance_dragon()
{
flag_wait( "ssp2_corpses_in_place" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 1 );
flag_wait( "ssp2_resurrection_done" );
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 2 );
flag_wait( "ssp2_corpses_in_place" );
maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 1 );
flag_wait( "ssp2_resurrection_done" );
maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
}
exit_stage_1( success )
{
flag_set( "ssp1_complete" );
flag_set( "ssp1_complete" );
}
exit_stage_2( success )
{
}
watch_model_sliquification( n_end_limit, str_complete_flag )
{
n_count = 0;
self setcandamage( 1 );
while ( !flag( str_complete_flag ) )
{
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
if ( issubstr( weaponname, "slipgun" ) && !flag( "sq_ball_picked_up" ) )
{
n_count++;
if ( n_count >= n_end_limit )
{
n_count = 0;
self setcandamage( 1 );
while ( !flag( str_complete_flag ) )
{
self waittill( "damage", amount, attacker, direction, point, mod, tagname, modelname, partname, weaponname );
if ( issubstr( weaponname, "slipgun" ) && !flag( "sq_ball_picked_up" ) )
{
n_count++;
if ( n_count >= n_end_limit )
{
/#
iprintlnbold( "MODEL COMPLETE: " + str_complete_flag );
iprintlnbold( "MODEL COMPLETE: " + str_complete_flag );
#/
self notify( "sq_sliquified" );
if ( isDefined( self.t_pickup ) )
{
self.t_pickup delete();
}
flag_set( str_complete_flag );
break;
}
else if ( n_count == 1 )
{
level notify( "ssp1_ball_first_sliquified" );
break;
}
else
{
if ( n_count == 10 )
{
level notify( "ssp1_ball_sliquified_2" );
}
}
}
}
self notify( "sq_sliquified" );
if ( isdefined( self.t_pickup ) )
self.t_pickup delete();
flag_set( str_complete_flag );
}
else if ( n_count == 1 )
level notify( "ssp1_ball_first_sliquified" );
else if ( n_count == 10 )
level notify( "ssp1_ball_sliquified_2" );
}
}
}
vo_richtofen_instructions()
{
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_0" );
wait 10;
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_1" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_0" );
wait 10;
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_1" );
}
vo_sliquify_fail_watch()
{
flag_wait( "sq_ball_picked_up" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_fail_1" );
flag_wait( "sq_ball_picked_up" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_fail_1" );
}
vo_richtofen_sliquify_confirm()
{
level waittill( "ssp1_ball_first_sliquified" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_2" );
level waittill( "ssp1_ball_sliquified_2" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_3" );
flag_wait( "ssp1_complete" );
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_4" );
wait 10;
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_5" );
level waittill( "ssp1_ball_first_sliquified" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_2" );
level waittill( "ssp1_ball_sliquified_2" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_3" );
flag_wait( "ssp1_complete" );
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_4" );
wait 10;
maps\mp\zm_highrise_sq::richtofensay( "vox_zmba_sidequest_sliquif_balls_5" );
}
vo_maxis_sliquify_fail()
{
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_fail_3" );
flag_wait_any( "ssp1_ball0_complete", "ssp1_ball1_complete" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_fail_3" );
}
vo_maxis_start_ssp()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_3" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_4" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_3" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_lion_balls_4" );
}
vo_maxis_ssp_reincarnate()
{
if ( !flag( "ssp2_maxis_reincarnate_said" ) )
{
flag_set( "ssp2_maxis_reincarnate_said" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_1" );
}
else
{
flag_clear( "ssp2_maxis_reincarnate_said" );
}
if ( !flag( "ssp2_maxis_reincarnate_said" ) )
{
flag_set( "ssp2_maxis_reincarnate_said" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_1" );
}
else
flag_clear( "ssp2_maxis_reincarnate_said" );
}
vo_maxis_ssp_fail()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_5" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_5" );
}
vo_maxis_ssp_complete()
{
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_3" );
maps/mp/zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_6" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_3" );
maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_6" );
}

View File

@ -1,280 +1,274 @@
#include maps/mp/zombies/_zm_ffotd;
#include maps/mp/zombies/_zm_zonemgr;
#include maps/mp/zombies/_zm_utility;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_zonemgr;
#include maps\mp\zombies\_zm_ffotd;
main_start()
{
level thread spawned_collision_fix();
level thread kill_trigger_spawn();
level thread spawned_collision_fix();
level thread kill_trigger_spawn();
}
main_end()
{
connect_zones_for_ffotd( "zone_orange_level3a", "zone_orange_level3b", 0 );
connect_zones_for_ffotd( "zone_orange_elevator_shaft_middle_1", "zone_orange_elevator_shaft_top", 1 );
level thread pathfinding_override_fix();
connect_zones_for_ffotd( "zone_orange_level3a", "zone_orange_level3b", 0 );
connect_zones_for_ffotd( "zone_orange_elevator_shaft_middle_1", "zone_orange_elevator_shaft_top", 1 );
level thread pathfinding_override_fix();
}
spawned_collision_fix()
{
precachemodel( "collision_geo_512x512x512_standard" );
precachemodel( "collision_geo_32x32x128_standard" );
precachemodel( "collision_geo_64x64x256_standard" );
precachemodel( "collision_wall_128x128x10_standard" );
precachemodel( "collision_wall_256x256x10_standard" );
flag_wait( "start_zombie_round_logic" );
if ( !is_true( level.optimise_for_splitscreen ) )
{
collision1 = spawn( "script_model", ( 2992, 536, 497 ) );
collision1 setmodel( "collision_geo_512x512x512_standard" );
collision1.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision1 ghost();
collision2 = spawn( "script_model", ( 2824, 632, 497 ) );
collision2 setmodel( "collision_geo_512x512x512_standard" );
collision2.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision2 ghost();
collision3 = spawn( "script_model", ( 2992, 536, -15 ) );
collision3 setmodel( "collision_geo_512x512x512_standard" );
collision3.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision3 ghost();
collision4 = spawn( "script_model", ( 2824, 632, -15 ) );
collision4 setmodel( "collision_geo_512x512x512_standard" );
collision4.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision4 ghost();
collision5 = spawn( "script_model", ( 2992, 536, -527 ) );
collision5 setmodel( "collision_geo_512x512x512_standard" );
collision5.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision5 ghost();
collision6 = spawn( "script_model", ( 2824, 632, -527 ) );
collision6 setmodel( "collision_geo_512x512x512_standard" );
collision6.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision6 ghost();
collision7 = spawn( "script_model", ( 2992, 536, -1039 ) );
collision7 setmodel( "collision_geo_512x512x512_standard" );
collision7.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision7 ghost();
collision8 = spawn( "script_model", ( 2824, 632, -1039 ) );
collision8 setmodel( "collision_geo_512x512x512_standard" );
collision8.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision8 ghost();
collision9 = spawn( "script_model", ( 2992, 536, -1551 ) );
collision9 setmodel( "collision_geo_512x512x512_standard" );
collision9.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision9 ghost();
collision10 = spawn( "script_model", ( 2824, 632, -1551 ) );
collision10 setmodel( "collision_geo_512x512x512_standard" );
collision10.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision10 ghost();
collision11 = spawn( "script_model", ( 2992, 536, -2063 ) );
collision11 setmodel( "collision_geo_512x512x512_standard" );
collision11.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision11 ghost();
collision12 = spawn( "script_model", ( 2824, 632, -2063 ) );
collision12 setmodel( "collision_geo_512x512x512_standard" );
collision12.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision12 ghost();
collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) );
collisione1 setmodel( "collision_wall_256x256x10_standard" );
collisione1.angles = ( 0, 0, 0 );
collisione1 ghost();
collisione2 = spawn( "script_model", ( 1649, 2164, 2587 ) );
collisione2 setmodel( "collision_wall_256x256x10_standard" );
collisione2.angles = ( 0, 0, 0 );
collisione2 ghost();
collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) );
collisione3 setmodel( "collision_wall_256x256x10_standard" );
collisione3.angles = vectorScale( ( 0, 0, 0 ), 270 );
collisione3 ghost();
collisione4 = spawn( "script_model", ( 1478, 1216, 2587 ) );
collisione4 setmodel( "collision_wall_256x256x10_standard" );
collisione4.angles = vectorScale( ( 0, 0, 0 ), 270 );
collisione4 ghost();
collisione5 = spawn( "script_model", ( 1478, 1216, 2331 ) );
collisione5 setmodel( "collision_wall_256x256x10_standard" );
collisione5.angles = vectorScale( ( 0, 0, 0 ), 270 );
collisione5 ghost();
collisione6 = spawn( "script_model", ( 1478, 1216, 2242 ) );
collisione6 setmodel( "collision_wall_256x256x10_standard" );
collisione6.angles = vectorScale( ( 0, 0, 0 ), 270 );
collisione6 ghost();
collision13 = spawn( "script_model", ( 2251, 2687, 3095 ) );
collision13 setmodel( "collision_wall_128x128x10_standard" );
collision13.angles = vectorScale( ( 0, 0, 0 ), 270 );
collision13 ghost();
collision14 = spawn( "script_model", ( 2046, 1270, 2758 ) );
collision14 setmodel( "collision_geo_512x512x512_standard" );
collision14.angles = vectorScale( ( 0, 0, 0 ), 6,20013 );
collision14 ghost();
collision15 = spawn( "script_model", ( 2518, 597, 3191 ) );
collision15 setmodel( "collision_wall_128x128x10_standard" );
collision15.angles = ( 0, 240,4, -3,00014 );
collision15 ghost();
collision16 = spawn( "script_model", ( 2613, -721, 1184 ) );
collision16 setmodel( "collision_wall_128x128x10_standard" );
collision16.angles = ( 0, 60, -2,60003 );
collision16 ghost();
collision17 = spawn( "script_model", ( 2721, -533, 1184 ) );
collision17 setmodel( "collision_wall_128x128x10_standard" );
collision17.angles = ( 0, 60, -2,60003 );
collision17 ghost();
collision18 = spawn( "script_model", ( 2940, 1512, 3004 ) );
collision18 setmodel( "collision_geo_64x64x256_standard" );
collision18.angles = vectorScale( ( 0, 0, 0 ), 350 );
collision18 ghost();
collision19 = spawn( "script_model", ( 1631, -235, 2943 ) );
collision19 setmodel( "collision_geo_32x32x128_standard" );
collision19.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision19 ghost();
collision20 = spawn( "script_model", ( 2232, -579, 1354 ) );
collision20 setmodel( "collision_wall_128x128x10_standard" );
collision20.angles = vectorScale( ( 0, 0, 0 ), 330 );
collision20 ghost();
collision21 = spawn( "script_model", ( 2349, 805, 1346 ) );
collision21 setmodel( "collision_geo_32x32x128_standard" );
collision21.angles = vectorScale( ( 0, 0, 0 ), 8,6 );
collision21 ghost();
collision22 = spawn( "script_model", ( 2791, 1093, 1272 ) );
collision22 setmodel( "collision_geo_32x32x128_standard" );
collision22.angles = vectorScale( ( 0, 0, 0 ), 3,2 );
collision22 ghost();
collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) );
collision23 setmodel( "collision_geo_32x32x128_standard" );
collision23.angles = ( 0, 0, 0 );
collision23 ghost();
collision24 = spawn( "script_model", ( 2222, 1488, 3312 ) );
collision24 setmodel( "collision_geo_32x32x128_standard" );
collision24.angles = ( 0, 0, 0 );
collision24 ghost();
}
precachemodel( "collision_geo_512x512x512_standard" );
precachemodel( "collision_geo_32x32x128_standard" );
precachemodel( "collision_geo_64x64x256_standard" );
precachemodel( "collision_wall_128x128x10_standard" );
precachemodel( "collision_wall_256x256x10_standard" );
flag_wait( "start_zombie_round_logic" );
if ( !is_true( level.optimise_for_splitscreen ) )
{
collision1 = spawn( "script_model", ( 2992, 536, 497 ) );
collision1 setmodel( "collision_geo_512x512x512_standard" );
collision1.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision1 ghost();
collision2 = spawn( "script_model", ( 2824, 632, 497 ) );
collision2 setmodel( "collision_geo_512x512x512_standard" );
collision2.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision2 ghost();
collision3 = spawn( "script_model", ( 2992, 536, -15 ) );
collision3 setmodel( "collision_geo_512x512x512_standard" );
collision3.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision3 ghost();
collision4 = spawn( "script_model", ( 2824, 632, -15 ) );
collision4 setmodel( "collision_geo_512x512x512_standard" );
collision4.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision4 ghost();
collision5 = spawn( "script_model", ( 2992, 536, -527 ) );
collision5 setmodel( "collision_geo_512x512x512_standard" );
collision5.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision5 ghost();
collision6 = spawn( "script_model", ( 2824, 632, -527 ) );
collision6 setmodel( "collision_geo_512x512x512_standard" );
collision6.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision6 ghost();
collision7 = spawn( "script_model", ( 2992, 536, -1039 ) );
collision7 setmodel( "collision_geo_512x512x512_standard" );
collision7.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision7 ghost();
collision8 = spawn( "script_model", ( 2824, 632, -1039 ) );
collision8 setmodel( "collision_geo_512x512x512_standard" );
collision8.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision8 ghost();
collision9 = spawn( "script_model", ( 2992, 536, -1551 ) );
collision9 setmodel( "collision_geo_512x512x512_standard" );
collision9.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision9 ghost();
collision10 = spawn( "script_model", ( 2824, 632, -1551 ) );
collision10 setmodel( "collision_geo_512x512x512_standard" );
collision10.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision10 ghost();
collision11 = spawn( "script_model", ( 2992, 536, -2063 ) );
collision11 setmodel( "collision_geo_512x512x512_standard" );
collision11.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision11 ghost();
collision12 = spawn( "script_model", ( 2824, 632, -2063 ) );
collision12 setmodel( "collision_geo_512x512x512_standard" );
collision12.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision12 ghost();
collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) );
collisione1 setmodel( "collision_wall_256x256x10_standard" );
collisione1.angles = ( 0, 0, 0 );
collisione1 ghost();
collisione2 = spawn( "script_model", ( 1649, 2164, 2587 ) );
collisione2 setmodel( "collision_wall_256x256x10_standard" );
collisione2.angles = ( 0, 0, 0 );
collisione2 ghost();
collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) );
collisione3 setmodel( "collision_wall_256x256x10_standard" );
collisione3.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
collisione3 ghost();
collisione4 = spawn( "script_model", ( 1478, 1216, 2587 ) );
collisione4 setmodel( "collision_wall_256x256x10_standard" );
collisione4.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
collisione4 ghost();
collisione5 = spawn( "script_model", ( 1478, 1216, 2331 ) );
collisione5 setmodel( "collision_wall_256x256x10_standard" );
collisione5.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
collisione5 ghost();
collisione6 = spawn( "script_model", ( 1478, 1216, 2242 ) );
collisione6 setmodel( "collision_wall_256x256x10_standard" );
collisione6.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
collisione6 ghost();
collision13 = spawn( "script_model", ( 2251, 2687, 3095 ) );
collision13 setmodel( "collision_wall_128x128x10_standard" );
collision13.angles = vectorscale( ( 0, 1, 0 ), 270.0 );
collision13 ghost();
collision14 = spawn( "script_model", ( 2046, 1270, 2758 ) );
collision14 setmodel( "collision_geo_512x512x512_standard" );
collision14.angles = vectorscale( ( 0, 0, -1 ), 6.20013 );
collision14 ghost();
collision15 = spawn( "script_model", ( 2518, 597, 3191 ) );
collision15 setmodel( "collision_wall_128x128x10_standard" );
collision15.angles = ( 0, 240.4, -3.00014 );
collision15 ghost();
collision16 = spawn( "script_model", ( 2613, -721, 1184 ) );
collision16 setmodel( "collision_wall_128x128x10_standard" );
collision16.angles = ( 0, 60, -2.60003 );
collision16 ghost();
collision17 = spawn( "script_model", ( 2721, -533, 1184 ) );
collision17 setmodel( "collision_wall_128x128x10_standard" );
collision17.angles = ( 0, 60, -2.60003 );
collision17 ghost();
collision18 = spawn( "script_model", ( 2940, 1512, 3004 ) );
collision18 setmodel( "collision_geo_64x64x256_standard" );
collision18.angles = vectorscale( ( 1, 0, 0 ), 350.0 );
collision18 ghost();
collision19 = spawn( "script_model", ( 1631, -235, 2943 ) );
collision19 setmodel( "collision_geo_32x32x128_standard" );
collision19.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision19 ghost();
collision20 = spawn( "script_model", ( 2232, -579, 1354 ) );
collision20 setmodel( "collision_wall_128x128x10_standard" );
collision20.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
collision20 ghost();
collision21 = spawn( "script_model", ( 2349, 805, 1346 ) );
collision21 setmodel( "collision_geo_32x32x128_standard" );
collision21.angles = vectorscale( ( 0, 1, 0 ), 8.6 );
collision21 ghost();
collision22 = spawn( "script_model", ( 2791, 1093, 1272 ) );
collision22 setmodel( "collision_geo_32x32x128_standard" );
collision22.angles = vectorscale( ( 1, 0, 0 ), 3.2 );
collision22 ghost();
collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) );
collision23 setmodel( "collision_geo_32x32x128_standard" );
collision23.angles = ( 0, 0, 0 );
collision23 ghost();
collision24 = spawn( "script_model", ( 2222, 1488, 3312 ) );
collision24 setmodel( "collision_geo_32x32x128_standard" );
collision24.angles = ( 0, 0, 0 );
collision24 ghost();
}
}
connect_zones_for_ffotd( zone_name_a, zone_name_b, one_way )
{
if ( !isDefined( one_way ) )
{
one_way = 0;
}
zone_init( zone_name_a );
zone_init( zone_name_b );
enable_zone( zone_name_a );
enable_zone( zone_name_b );
if ( !isDefined( level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] ) )
{
level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ] = spawnstruct();
}
level.zones[ zone_name_a ].adjacent_zones[ zone_name_b ].is_connected = 1;
if ( !one_way )
{
if ( !isDefined( level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] ) )
{
level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ] = spawnstruct();
}
level.zones[ zone_name_b ].adjacent_zones[ zone_name_a ].is_connected = 1;
}
if ( !isdefined( one_way ) )
one_way = 0;
zone_init( zone_name_a );
zone_init( zone_name_b );
enable_zone( zone_name_a );
enable_zone( zone_name_b );
if ( !isdefined( level.zones[zone_name_a].adjacent_zones[zone_name_b] ) )
level.zones[zone_name_a].adjacent_zones[zone_name_b] = spawnstruct();
level.zones[zone_name_a].adjacent_zones[zone_name_b].is_connected = 1;
if ( !one_way )
{
if ( !isdefined( level.zones[zone_name_b].adjacent_zones[zone_name_a] ) )
level.zones[zone_name_b].adjacent_zones[zone_name_a] = spawnstruct();
level.zones[zone_name_b].adjacent_zones[zone_name_a].is_connected = 1;
}
}
kill_trigger_spawn()
{
trig = spawn( "trigger_box", ( 3328, 160, 1480 ), 0, 96, 200, 128 );
trig.angles = vectorScale( ( 0, 0, 0 ), 150 );
trig.targetname = "instant_death";
trig2 = spawn( "trigger_box", ( 2512, 1824, 1488 ), 0, 140, 140, 128 );
trig2.angles = ( 0, 0, 0 );
trig2.targetname = "instant_death";
trig = spawn( "trigger_box", ( 3328, 160, 1480 ), 0, 96, 200, 128 );
trig.angles = vectorscale( ( 0, 1, 0 ), 150.0 );
trig.targetname = "instant_death";
trig2 = spawn( "trigger_box", ( 2512, 1824, 1488 ), 0, 140, 140, 128 );
trig2.angles = ( 0, 0, 0 );
trig2.targetname = "instant_death";
}
pathfinding_override_fix()
{
zombie_trigger_origin = ( 2303, 746, 1296 );
zombie_trigger_radius = 30;
zombie_trigger_height = 128;
player_trigger_origin = ( 2357, 778, 1304 );
player_trigger_radius = 40;
zombie_goto_point = ( 2361, 738, 1304 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3767, 1867, 2790 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3684, 1772, 2758 );
player_trigger_radius = 70;
zombie_goto_point = ( 3659, 1872, 2790 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3245, 1251, 1347,79 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3246, 1126, 1347,79 );
player_trigger_radius = 64;
zombie_goto_point = ( 3031, 1234, 1278,12 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3246, 1113, 1347,79 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3245, 1230, 1347,79 );
player_trigger_radius = 44;
zombie_goto_point = ( 3023, 1154, 1278,12 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3389, 1182, 1364,79 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3246, 1126, 1347,79 );
player_trigger_radius = 64;
zombie_goto_point = ( 3381, 1093, 1364,79 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3148, 1712, 1299,07 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3149, 1604, 1302,2 );
player_trigger_radius = 44;
zombie_goto_point = ( 3259, 1644, 1321,5 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3149, 1584, 1302,2 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3148, 1692, 1299,07 );
player_trigger_radius = 44;
zombie_goto_point = ( 3291, 1684, 1321,5 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3818, 1860, 2789,23 );
zombie_trigger_radius = 100;
zombie_trigger_height = 128;
player_trigger_origin = ( 3601, 1961, 2744,95 );
player_trigger_radius = 50;
zombie_goto_point = ( 3626, 1918, 2750,26 );
level thread maps/mp/zombies/_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
all_nodes = getallnodes();
_a331 = all_nodes;
_k331 = getFirstArrayKey( _a331 );
while ( isDefined( _k331 ) )
{
node = _a331[ _k331 ];
if ( node.origin[ 0 ] == 3598,2 )
{
deletepathnode( node );
return;
}
else
{
_k331 = getNextArrayKey( _a331, _k331 );
}
}
zombie_trigger_origin = ( 2303, 746, 1296 );
zombie_trigger_radius = 30;
zombie_trigger_height = 128;
player_trigger_origin = ( 2357, 778, 1304 );
player_trigger_radius = 40;
zombie_goto_point = ( 2361, 738, 1304 );
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3767, 1867, 2790 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3684, 1772, 2758 );
player_trigger_radius = 70;
zombie_goto_point = ( 3659, 1872, 2790 );
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3245, 1251, 1347.79 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3246, 1126, 1347.79 );
player_trigger_radius = 64;
zombie_goto_point = ( 3031, 1234, 1278.12 );
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3246, 1113, 1347.79 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3245, 1230, 1347.79 );
player_trigger_radius = 44;
zombie_goto_point = ( 3023, 1154, 1278.12 );
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3389, 1182, 1364.79 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3246, 1126, 1347.79 );
player_trigger_radius = 64;
zombie_goto_point = ( 3381, 1093, 1364.79 );
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3148, 1712, 1299.07 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3149, 1604, 1302.2 );
player_trigger_radius = 44;
zombie_goto_point = ( 3259, 1644, 1321.5 );
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3149, 1584, 1302.2 );
zombie_trigger_radius = 64;
zombie_trigger_height = 128;
player_trigger_origin = ( 3148, 1692, 1299.07 );
player_trigger_radius = 44;
zombie_goto_point = ( 3291, 1684, 1321.5 );
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
zombie_trigger_origin = ( 3818, 1860, 2789.23 );
zombie_trigger_radius = 100;
zombie_trigger_height = 128;
player_trigger_origin = ( 3601, 1961, 2744.95 );
player_trigger_radius = 50;
zombie_goto_point = ( 3626, 1918, 2750.26 );
level thread maps\mp\zombies\_zm_ffotd::path_exploit_fix( zombie_trigger_origin, zombie_trigger_radius, zombie_trigger_height, player_trigger_origin, player_trigger_radius, zombie_goto_point );
all_nodes = getallnodes();
foreach ( node in all_nodes )
{
if ( node.origin[0] == 3598.2 )
{
deletepathnode( node );
break;
}
}
}
highrise_link_nodes( a, b )
{
if ( nodesarelinked( a, b ) )
{
return;
}
link_nodes( a, b );
if ( nodesarelinked( a, b ) )
return;
link_nodes( a, b );
}
highrise_unlink_nodes( a, b )
{
if ( !nodesarelinked( a, b ) )
{
return;
}
unlink_nodes( a, b );
if ( !nodesarelinked( a, b ) )
return;
unlink_nodes( a, b );
}

View File

@ -0,0 +1,304 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_magicbox;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_powerups;
#include maps\mp\zombies\_zm_score;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_unitrigger;
init()
{
onplayerconnect_callback( ::onplayerconnect_bank_deposit_box );
if ( !isdefined( level.ta_vaultfee ) )
level.ta_vaultfee = 100;
if ( !isdefined( level.ta_tellerfee ) )
level.ta_tellerfee = 100;
}
main()
{
if ( !isdefined( level.banking_map ) )
level.banking_map = level.script;
level thread bank_teller_init();
level thread bank_deposit_box();
}
bank_teller_init()
{
level.bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
if ( isdefined( level.bank_teller_dmg_trig ) )
{
level.bank_teller_transfer_trig = getent( level.bank_teller_dmg_trig.target, "targetname" );
level.bank_teller_powerup_spot = getstruct( level.bank_teller_transfer_trig.target, "targetname" );
level thread bank_teller_logic();
level.bank_teller_transfer_trig.origin += vectorscale( ( -1, 0, 0 ), 25.0 );
level.bank_teller_transfer_trig trigger_off();
level.bank_teller_transfer_trig sethintstring( &"ZOMBIE_TELLER_GIVE_MONEY", level.ta_tellerfee );
}
}
bank_teller_logic()
{
level endon( "end_game" );
while ( true )
{
level.bank_teller_dmg_trig waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, blah );
if ( isdefined( attacker ) && isplayer( attacker ) && damage == 1500 && type == "MOD_MELEE" )
{
bank_teller_give_money();
level.bank_teller_transfer_trig trigger_off();
}
}
}
bank_teller_give_money()
{
level endon( "end_game" );
level endon( "stop_bank_teller" );
level.bank_teller_transfer_trig trigger_on();
bank_transfer = undefined;
while ( true )
{
level.bank_teller_transfer_trig waittill( "trigger", player );
if ( !is_player_valid( player, 0 ) || player.score < 1000 + level.ta_tellerfee )
continue;
if ( !isdefined( bank_transfer ) )
{
bank_transfer = maps\mp\zombies\_zm_powerups::specific_powerup_drop( "teller_withdrawl", level.bank_teller_powerup_spot.origin + vectorscale( ( 0, 0, -1 ), 40.0 ) );
bank_transfer thread stop_bank_teller();
bank_transfer.value = 0;
}
bank_transfer.value += 1000;
bank_transfer notify( "powerup_reset" );
bank_transfer thread maps\mp\zombies\_zm_powerups::powerup_timeout();
player maps\mp\zombies\_zm_score::minus_to_player_score( 1000 + level.ta_tellerfee );
level notify( "bank_teller_used" );
}
}
stop_bank_teller()
{
level endon( "end_game" );
self waittill( "death" );
level notify( "stop_bank_teller" );
}
delete_bank_teller()
{
wait 1;
level notify( "stop_bank_teller" );
bank_teller_dmg_trig = getent( "bank_teller_tazer_trig", "targetname" );
bank_teller_transfer_trig = getent( bank_teller_dmg_trig.target, "targetname" );
bank_teller_dmg_trig delete();
bank_teller_transfer_trig delete();
}
onplayerconnect_bank_deposit_box()
{
online_game = sessionmodeisonlinegame();
if ( !online_game )
self.account_value = 0;
else
self.account_value = self maps\mp\zombies\_zm_stats::get_map_stat( "depositBox", level.banking_map );
}
bank_deposit_box()
{
level.bank_deposit_max_amount = 250000;
level.bank_deposit_ddl_increment_amount = 1000;
level.bank_account_max = level.bank_deposit_max_amount / level.bank_deposit_ddl_increment_amount;
level.bank_account_increment = int( level.bank_deposit_ddl_increment_amount / 1000 );
deposit_triggers = getstructarray( "bank_deposit", "targetname" );
array_thread( deposit_triggers, ::bank_deposit_unitrigger );
withdraw_triggers = getstructarray( "bank_withdraw", "targetname" );
array_thread( withdraw_triggers, ::bank_withdraw_unitrigger );
}
bank_deposit_unitrigger()
{
bank_unitrigger( "bank_deposit", ::trigger_deposit_update_prompt, ::trigger_deposit_think, 5, 5, undefined, 5 );
}
bank_withdraw_unitrigger()
{
bank_unitrigger( "bank_withdraw", ::trigger_withdraw_update_prompt, ::trigger_withdraw_think, 5, 5, undefined, 5 );
}
bank_unitrigger( name, prompt_fn, think_fn, override_length, override_width, override_height, override_radius )
{
unitrigger_stub = spawnstruct();
unitrigger_stub.origin = self.origin;
if ( isdefined( self.script_angles ) )
unitrigger_stub.angles = self.script_angles;
else
unitrigger_stub.angles = self.angles;
unitrigger_stub.script_angles = unitrigger_stub.angles;
if ( isdefined( override_length ) )
unitrigger_stub.script_length = override_length;
else if ( isdefined( self.script_length ) )
unitrigger_stub.script_length = self.script_length;
else
unitrigger_stub.script_length = 32;
if ( isdefined( override_width ) )
unitrigger_stub.script_width = override_width;
else if ( isdefined( self.script_width ) )
unitrigger_stub.script_width = self.script_width;
else
unitrigger_stub.script_width = 32;
if ( isdefined( override_height ) )
unitrigger_stub.script_height = override_height;
else if ( isdefined( self.script_height ) )
unitrigger_stub.script_height = self.script_height;
else
unitrigger_stub.script_height = 64;
if ( isdefined( override_radius ) )
unitrigger_stub.script_radius = override_radius;
else 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 );
}
trigger_deposit_update_prompt( player )
{
if ( player.score < level.bank_deposit_ddl_increment_amount || player.account_value >= level.bank_account_max )
{
player show_balance();
self sethintstring( "" );
return false;
}
self sethintstring( &"ZOMBIE_BANK_DEPOSIT_PROMPT", level.bank_deposit_ddl_increment_amount );
return true;
}
trigger_deposit_think()
{
self endon( "kill_trigger" );
while ( true )
{
self waittill( "trigger", player );
if ( !is_player_valid( player ) )
continue;
if ( player.score >= level.bank_deposit_ddl_increment_amount && player.account_value < level.bank_account_max )
{
player playsoundtoplayer( "zmb_vault_bank_deposit", player );
player.score -= level.bank_deposit_ddl_increment_amount;
player.account_value += level.bank_account_increment;
player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
if ( isdefined( level.custom_bank_deposit_vo ) )
player thread [[ level.custom_bank_deposit_vo ]]();
if ( player.account_value >= level.bank_account_max )
self sethintstring( "" );
}
else
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
player show_balance();
}
}
trigger_withdraw_update_prompt( player )
{
if ( player.account_value <= 0 )
{
self sethintstring( "" );
player show_balance();
return false;
}
self sethintstring( &"ZOMBIE_BANK_WITHDRAW_PROMPT", level.bank_deposit_ddl_increment_amount, level.ta_vaultfee );
return true;
}
trigger_withdraw_think()
{
self endon( "kill_trigger" );
while ( true )
{
self waittill( "trigger", player );
if ( !is_player_valid( player ) )
continue;
if ( player.account_value >= level.bank_account_increment )
{
player playsoundtoplayer( "zmb_vault_bank_withdraw", player );
player.score += level.bank_deposit_ddl_increment_amount;
level notify( "bank_withdrawal" );
player.account_value -= level.bank_account_increment;
player maps\mp\zombies\_zm_stats::set_map_stat( "depositBox", player.account_value, level.banking_map );
if ( isdefined( level.custom_bank_withdrawl_vo ) )
player thread [[ level.custom_bank_withdrawl_vo ]]();
else
player thread do_player_general_vox( "general", "exert_laugh", 10, 50 );
player thread player_withdraw_fee();
if ( player.account_value < level.bank_account_increment )
self sethintstring( "" );
}
else
player thread do_player_general_vox( "general", "exert_sigh", 10, 50 );
player show_balance();
}
}
player_withdraw_fee()
{
self endon( "disconnect" );
wait_network_frame();
self.score -= level.ta_vaultfee;
}
show_balance()
{
/#
iprintlnbold( "DEBUG BANKER: " + self.name + " account worth " + self.account_value );
#/
}

View File

@ -1,278 +1,302 @@
#include maps/mp/zombies/_zm_stats;
#include common_scripts/utility;
#include maps/mp/_utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include maps\mp\_utility;
#include common_scripts\utility;
#include maps\mp\zombies\_zm_stats;
init()
{
if ( isDefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
{
precachemodel( "t5_weapon_ballistic_knife_projectile" );
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
}
if ( !isdefined( level.ballistic_knife_autorecover ) )
level.ballistic_knife_autorecover = 1;
if ( isdefined( level._uses_retrievable_ballisitic_knives ) && level._uses_retrievable_ballisitic_knives == 1 )
{
precachemodel( "t5_weapon_ballistic_knife_projectile" );
precachemodel( "t5_weapon_ballistic_knife_blade_retrieve" );
}
}
on_spawn( watcher, player )
{
player endon( "death" );
player endon( "disconnect" );
player endon( "zmb_lost_knife" );
level endon( "game_ended" );
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
isfriendly = 0;
if ( isDefined( endpos ) )
{
retrievable_model = spawn( "script_model", endpos );
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
retrievable_model setowner( player );
retrievable_model.owner = player;
retrievable_model.angles = angles;
retrievable_model.name = watcher.weapon;
if ( isDefined( prey ) )
{
if ( isplayer( prey ) && player.team == prey.team )
{
isfriendly = 1;
}
else
{
if ( isai( prey ) && player.team == prey.team )
{
isfriendly = 1;
}
}
if ( !isfriendly )
{
retrievable_model linkto( prey, bone );
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
}
else
{
if ( isfriendly )
{
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
normal = ( 0, 0, 1 );
}
}
}
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
if ( isfriendly )
{
retrievable_model waittill( "stationary" );
}
retrievable_model thread drop_knives_to_ground( player );
if ( isfriendly )
{
player notify( "ballistic_knife_stationary" );
}
else
{
player notify( "ballistic_knife_stationary" );
}
retrievable_model thread wait_to_show_glowing_model( prey );
}
player endon( "death" );
player endon( "disconnect" );
player endon( "zmb_lost_knife" );
level endon( "game_ended" );
self waittill( "stationary", endpos, normal, angles, attacker, prey, bone );
isfriendly = 0;
if ( isdefined( endpos ) )
{
retrievable_model = spawn( "script_model", endpos );
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
retrievable_model setowner( player );
retrievable_model.owner = player;
retrievable_model.angles = angles;
retrievable_model.name = watcher.weapon;
if ( isdefined( prey ) )
{
if ( isplayer( prey ) && player.team == prey.team )
isfriendly = 1;
else if ( isai( prey ) && player.team == prey.team )
isfriendly = 1;
if ( !isfriendly )
{
retrievable_model linkto( prey, bone );
retrievable_model thread force_drop_knives_to_ground_on_death( player, prey );
}
else if ( isfriendly )
{
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
normal = ( 0, 0, 1 );
}
}
watcher.objectarray[watcher.objectarray.size] = retrievable_model;
if ( isfriendly )
retrievable_model waittill( "stationary" );
retrievable_model thread drop_knives_to_ground( player );
if ( isfriendly )
player notify( "ballistic_knife_stationary", retrievable_model, normal );
else
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
retrievable_model thread wait_to_show_glowing_model( prey );
}
}
wait_to_show_glowing_model( prey )
{
level endon( "game_ended" );
self endon( "death" );
wait 2;
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
level endon( "game_ended" );
self endon( "death" );
wait 2;
self setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
}
on_spawn_retrieve_trigger( watcher, player )
{
player endon( "death" );
player endon( "disconnect" );
player endon( "zmb_lost_knife" );
level endon( "game_ended" );
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
if ( !isDefined( retrievable_model ) )
{
return;
}
trigger_pos = [];
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
{
trigger_pos[ 0 ] = prey.origin[ 0 ];
trigger_pos[ 1 ] = prey.origin[ 1 ];
trigger_pos[ 2 ] = prey.origin[ 2 ] + 10;
}
else
{
trigger_pos[ 0 ] = retrievable_model.origin[ 0 ] + ( 10 * normal[ 0 ] );
trigger_pos[ 1 ] = retrievable_model.origin[ 1 ] + ( 10 * normal[ 1 ] );
trigger_pos[ 2 ] = retrievable_model.origin[ 2 ] + ( 10 * normal[ 2 ] );
}
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[ 0 ], trigger_pos[ 1 ], trigger_pos[ 2 ] ) );
pickup_trigger setcursorhint( "HINT_NOICON" );
pickup_trigger.owner = player;
retrievable_model.retrievabletrigger = pickup_trigger;
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
if ( isDefined( hint_string ) )
{
pickup_trigger sethintstring( hint_string );
}
else
{
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
}
pickup_trigger setteamfortrigger( player.team );
player clientclaimtrigger( pickup_trigger );
pickup_trigger enablelinkto();
if ( isDefined( prey ) )
{
pickup_trigger linkto( prey );
}
else
{
pickup_trigger linkto( retrievable_model );
}
if ( isDefined( level.knife_planted ) )
{
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
}
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
player thread watch_shutdown( pickup_trigger, retrievable_model );
player endon( "death" );
player endon( "disconnect" );
player endon( "zmb_lost_knife" );
level endon( "game_ended" );
player waittill( "ballistic_knife_stationary", retrievable_model, normal, prey );
if ( !isdefined( retrievable_model ) )
return;
trigger_pos = [];
if ( isdefined( prey ) && ( isplayer( prey ) || isai( prey ) ) )
{
trigger_pos[0] = prey.origin[0];
trigger_pos[1] = prey.origin[1];
trigger_pos[2] = prey.origin[2] + 10;
}
else
{
trigger_pos[0] = retrievable_model.origin[0] + 10 * normal[0];
trigger_pos[1] = retrievable_model.origin[1] + 10 * normal[1];
trigger_pos[2] = retrievable_model.origin[2] + 10 * normal[2];
}
if ( is_true( level.ballistic_knife_autorecover ) )
{
trigger_pos[2] -= 50.0;
pickup_trigger = spawn( "trigger_radius", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ), 0, 50, 100 );
}
else
{
pickup_trigger = spawn( "trigger_radius_use", ( trigger_pos[0], trigger_pos[1], trigger_pos[2] ) );
pickup_trigger setcursorhint( "HINT_NOICON" );
}
pickup_trigger.owner = player;
retrievable_model.retrievabletrigger = pickup_trigger;
hint_string = &"WEAPON_BALLISTIC_KNIFE_PICKUP";
if ( isdefined( hint_string ) )
pickup_trigger sethintstring( hint_string );
else
pickup_trigger sethintstring( &"GENERIC_PICKUP" );
pickup_trigger setteamfortrigger( player.team );
player clientclaimtrigger( pickup_trigger );
pickup_trigger enablelinkto();
if ( isdefined( prey ) )
pickup_trigger linkto( prey );
else
pickup_trigger linkto( retrievable_model );
if ( isdefined( level.knife_planted ) )
[[ level.knife_planted ]]( retrievable_model, pickup_trigger, prey );
retrievable_model thread watch_use_trigger( pickup_trigger, retrievable_model, ::pick_up, watcher.weapon, watcher.pickupsoundplayer, watcher.pickupsound );
player thread watch_shutdown( pickup_trigger, retrievable_model );
}
debug_print( endpos )
{
/#
self endon( "death" );
while ( 1 )
{
print3d( endpos, "pickup_trigger" );
wait 0,05;
self endon( "death" );
while ( true )
{
print3d( endpos, "pickup_trigger" );
wait 0.05;
}
#/
}
}
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
{
self endon( "death" );
self endon( "delete" );
level endon( "game_ended" );
while ( 1 )
{
trigger waittill( "trigger", player );
while ( !isalive( player ) )
{
continue;
}
while ( !player isonground() )
{
continue;
}
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
{
continue;
}
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
{
continue;
}
if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() )
{
if ( isDefined( playersoundonuse ) )
{
player playlocalsound( playersoundonuse );
}
if ( isDefined( npcsoundonuse ) )
{
player playsound( npcsoundonuse );
}
player thread [[ callback ]]( weapon, model, trigger );
return;
}
else
{
}
}
self endon( "death" );
self endon( "delete" );
level endon( "game_ended" );
max_ammo = weaponmaxammo( weapon ) + 1;
autorecover = is_true( level.ballistic_knife_autorecover );
while ( true )
{
trigger waittill( "trigger", player );
if ( !isalive( player ) )
continue;
if ( !player isonground() && !is_true( trigger.force_pickup ) )
continue;
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
continue;
if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
continue;
ammo_stock = player getweaponammostock( weapon );
ammo_clip = player getweaponammoclip( weapon );
current_weapon = player getcurrentweapon();
total_ammo = ammo_stock + ammo_clip;
hasreloaded = 1;
if ( total_ammo > 0 && ammo_stock == total_ammo && current_weapon == weapon )
hasreloaded = 0;
if ( total_ammo >= max_ammo || !hasreloaded )
continue;
if ( autorecover || player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() || is_true( trigger.force_pickup ) )
{
if ( isdefined( playersoundonuse ) )
player playlocalsound( playersoundonuse );
if ( isdefined( npcsoundonuse ) )
player playsound( npcsoundonuse );
player thread [[ callback ]]( weapon, model, trigger );
break;
}
}
}
pick_up( weapon, model, trigger )
{
current_weapon = self getcurrentweapon();
if ( current_weapon != weapon )
{
clip_ammo = self getweaponammoclip( weapon );
if ( !clip_ammo )
{
self setweaponammoclip( weapon, 1 );
}
else
{
new_ammo_stock = self getweaponammostock( weapon ) + 1;
self setweaponammostock( weapon, new_ammo_stock );
}
}
else
{
new_ammo_stock = self getweaponammostock( weapon ) + 1;
self setweaponammostock( weapon, new_ammo_stock );
}
self maps/mp/zombies/_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
self maps/mp/zombies/_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
model destroy_ent();
trigger destroy_ent();
if ( self hasweapon( weapon ) )
{
current_weapon = self getcurrentweapon();
if ( current_weapon != weapon )
{
clip_ammo = self getweaponammoclip( weapon );
if ( !clip_ammo )
self setweaponammoclip( weapon, 1 );
else
{
new_ammo_stock = self getweaponammostock( weapon ) + 1;
self setweaponammostock( weapon, new_ammo_stock );
}
}
else
{
new_ammo_stock = self getweaponammostock( weapon ) + 1;
self setweaponammostock( weapon, new_ammo_stock );
}
}
self maps\mp\zombies\_zm_stats::increment_client_stat( "ballistic_knives_pickedup" );
self maps\mp\zombies\_zm_stats::increment_player_stat( "ballistic_knives_pickedup" );
model destroy_ent();
trigger destroy_ent();
}
destroy_ent()
{
if ( isDefined( self ) )
{
if ( isDefined( self.glowing_model ) )
{
self.glowing_model delete();
}
self delete();
}
if ( isdefined( self ) )
{
if ( isdefined( self.glowing_model ) )
self.glowing_model delete();
self delete();
}
}
watch_shutdown( trigger, model )
{
self waittill_any( "death", "disconnect", "zmb_lost_knife" );
trigger destroy_ent();
model destroy_ent();
self waittill_any( "death_or_disconnect", "zmb_lost_knife" );
trigger destroy_ent();
model destroy_ent();
}
drop_knives_to_ground( player )
{
player endon( "death" );
player endon( "zmb_lost_knife" );
for ( ;; )
{
level waittill( "drop_objects_to_ground", origin, radius );
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
{
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
self thread update_retrieve_trigger( player );
}
}
player endon( "death" );
player endon( "zmb_lost_knife" );
for (;;)
{
level waittill( "drop_objects_to_ground", origin, radius );
if ( distancesquared( origin, self.origin ) < radius * radius )
{
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
self thread update_retrieve_trigger( player );
}
}
}
force_drop_knives_to_ground_on_death( player, prey )
{
self endon( "death" );
player endon( "zmb_lost_knife" );
prey waittill( "death" );
self unlink();
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
self thread update_retrieve_trigger( player );
self endon( "death" );
player endon( "zmb_lost_knife" );
prey waittill( "death" );
self unlink();
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
self thread update_retrieve_trigger( player );
}
update_retrieve_trigger( player )
{
self endon( "death" );
player endon( "zmb_lost_knife" );
if ( isDefined( level.custom_update_retrieve_trigger ) )
{
self [[ level.custom_update_retrieve_trigger ]]( player );
return;
}
self waittill( "stationary" );
trigger = self.retrievabletrigger;
trigger.origin = ( self.origin[ 0 ], self.origin[ 1 ], self.origin[ 2 ] + 10 );
trigger linkto( self );
self endon( "death" );
player endon( "zmb_lost_knife" );
if ( isdefined( level.custom_update_retrieve_trigger ) )
{
self [[ level.custom_update_retrieve_trigger ]]( player );
return;
}
self waittill( "stationary" );
trigger = self.retrievabletrigger;
trigger.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
trigger linkto( self );
}

View File

@ -1,53 +1,19 @@
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_melee_weapon;
#include maps\mp\zombies\_zm_weapons;
init()
{
if ( isDefined( level.bowie_cost ) )
{
cost = level.bowie_cost;
}
else
{
cost = 3000;
}
maps/mp/zombies/_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", ::has_bowie, ::give_bowie, ::take_bowie, ::bowie_flourish );
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" );
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" );
}
if ( isdefined( level.bowie_cost ) )
cost = level.bowie_cost;
else
cost = 3000;
spectator_respawn()
{
maps/mp/zombies/_zm_melee_weapon::spectator_respawn( "bowie_upgrade", ::take_bowie, ::has_bowie );
}
has_bowie()
{
if ( is_true( level._allow_melee_weapon_switching ) )
{
return 0;
}
if ( !is_true( self._sickle_zm_equipped ) || is_true( self._bowie_zm_equipped ) && is_true( self._tazer_zm_equipped ) )
{
return 1;
}
return 0;
}
give_bowie()
{
self._bowie_zm_equipped = 1;
self._sickle_zm_equipped = undefined;
self._tazer_zm_equipped = undefined;
}
take_bowie()
{
self._bowie_zm_equipped = undefined;
}
bowie_flourish()
{
maps\mp\zombies\_zm_melee_weapon::init( "bowie_knife_zm", "zombie_bowie_flourish", "knife_ballistic_bowie_zm", "knife_ballistic_bowie_upgraded_zm", cost, "bowie_upgrade", &"ZOMBIE_WEAPON_BOWIE_BUY", "bowie", undefined );
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie" );
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_bowie_upgraded" );
}

View File

@ -1,492 +1,466 @@
#include maps/mp/gametypes_zm/_weaponobjects;
#include maps/mp/zombies/_zm_stats;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_score;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_equipment;
#include maps\mp\zombies\_zm_score;
#include maps\mp\zombies\_zm_audio;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\gametypes_zm\_weaponobjects;
init()
{
if ( !isDefined( level.claymores_max_per_player ) )
{
level.claymores_max_per_player = 12;
}
trigs = getentarray( "claymore_purchase", "targetname" );
i = 0;
while ( i < trigs.size )
{
model = getent( trigs[ i ].target, "targetname" );
if ( isDefined( model ) )
{
model hide();
}
i++;
}
array_thread( trigs, ::buy_claymores );
level thread give_claymores_after_rounds();
level.claymores_on_damage = ::satchel_damage;
level.pickup_claymores = ::pickup_claymores;
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
level.claymore_detectiondot = cos( 70 );
level.claymore_detectionmindist = 20;
level._effect[ "claymore_laser" ] = loadfx( "weapon/claymore/fx_claymore_laser" );
if ( !isdefined( level.claymores_max_per_player ) )
level.claymores_max_per_player = 12;
trigs = getentarray( "claymore_purchase", "targetname" );
for ( i = 0; i < trigs.size; i++ )
{
model = getent( trigs[i].target, "targetname" );
if ( isdefined( model ) )
model hide();
}
array_thread( trigs, ::buy_claymores );
level thread give_claymores_after_rounds();
level.claymores_on_damage = ::satchel_damage;
level.pickup_claymores = ::pickup_claymores;
level.pickup_claymores_trigger_listener = ::pickup_claymores_trigger_listener;
level.claymore_detectiondot = cos( 70 );
level.claymore_detectionmindist = 20;
level._effect["claymore_laser"] = loadfx( "weapon/claymore/fx_claymore_laser" );
}
buy_claymores()
{
self.zombie_cost = 1000;
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_NOICON" );
self endon( "kill_trigger" );
if ( !isDefined( self.stub ) )
{
return;
}
if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) )
{
self.stub.claymores_triggered = 0;
}
self.claymores_triggered = self.stub.claymores_triggered;
while ( 1 )
{
self waittill( "trigger", who );
while ( who in_revive_trigger() )
{
continue;
}
while ( who has_powerup_weapon() )
{
wait 0,1;
}
if ( is_player_valid( who ) )
{
if ( who.score >= self.zombie_cost )
{
if ( !who is_player_placeable_mine( "claymore_zm" ) )
{
play_sound_at_pos( "purchase", self.origin );
who maps/mp/zombies/_zm_score::minus_to_player_score( self.zombie_cost );
who thread claymore_setup();
who thread show_claymore_hint( "claymore_purchased" );
who thread maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
if ( isDefined( self.stub ) )
{
self.claymores_triggered = self.stub.claymores_triggered;
}
if ( self.claymores_triggered == 0 )
{
model = getent( self.target, "targetname" );
if ( isDefined( model ) )
{
model thread maps/mp/zombies/_zm_weapons::weapon_show( who );
}
else
{
if ( isDefined( self.clientfieldname ) )
{
level setclientfield( self.clientfieldname, 1 );
}
}
self.claymores_triggered = 1;
if ( isDefined( self.stub ) )
{
self.stub.claymores_triggered = 1;
}
}
trigs = getentarray( "claymore_purchase", "targetname" );
i = 0;
while ( i < trigs.size )
{
trigs[ i ] setinvisibletoplayer( who );
i++;
}
}
else who thread show_claymore_hint( "already_purchased" );
}
}
}
self.zombie_cost = 1000;
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
self endon( "kill_trigger" );
if ( !isdefined( self.stub ) )
return;
if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) )
self.stub.claymores_triggered = 0;
self.claymores_triggered = self.stub.claymores_triggered;
while ( true )
{
self waittill( "trigger", who );
if ( who in_revive_trigger() )
continue;
if ( who has_powerup_weapon() )
{
wait 0.1;
continue;
}
if ( is_player_valid( who ) )
{
if ( who.score >= self.zombie_cost )
{
if ( !who is_player_placeable_mine( "claymore_zm" ) )
{
play_sound_at_pos( "purchase", self.origin );
who maps\mp\zombies\_zm_score::minus_to_player_score( self.zombie_cost );
who thread claymore_setup();
who thread show_claymore_hint( "claymore_purchased" );
who thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", "grenade" );
if ( isdefined( self.stub ) )
self.claymores_triggered = self.stub.claymores_triggered;
if ( self.claymores_triggered == 0 )
{
model = getent( self.target, "targetname" );
if ( isdefined( model ) )
model thread maps\mp\zombies\_zm_weapons::weapon_show( who );
else if ( isdefined( self.clientfieldname ) )
level setclientfield( self.clientfieldname, 1 );
self.claymores_triggered = 1;
if ( isdefined( self.stub ) )
self.stub.claymores_triggered = 1;
}
trigs = getentarray( "claymore_purchase", "targetname" );
for ( i = 0; i < trigs.size; i++ )
trigs[i] setinvisibletoplayer( who );
}
else
who thread show_claymore_hint( "already_purchased" );
}
else
{
who play_sound_on_ent( "no_purchase" );
who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
}
}
}
}
claymore_unitrigger_update_prompt( player )
{
if ( player is_player_placeable_mine( "claymore_zm" ) )
{
return 0;
}
return 1;
if ( player is_player_placeable_mine( "claymore_zm" ) )
{
self sethintstring( "" );
self setcursorhint( "HINT_NOICON" );
return false;
}
self sethintstring( &"ZOMBIE_CLAYMORE_PURCHASE" );
self setcursorhint( "HINT_WEAPON", "claymore_zm" );
return true;
}
set_claymore_visible()
{
players = get_players();
trigs = getentarray( "claymore_purchase", "targetname" );
while ( 1 )
{
j = 0;
while ( j < players.size )
{
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) )
{
i = 0;
while ( i < trigs.size )
{
trigs[ i ] setinvisibletoplayer( players[ j ], 0 );
i++;
}
}
j++;
}
wait 1;
players = get_players();
}
players = get_players();
trigs = getentarray( "claymore_purchase", "targetname" );
while ( true )
{
for ( j = 0; j < players.size; j++ )
{
if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
{
for ( i = 0; i < trigs.size; i++ )
trigs[i] setinvisibletoplayer( players[j], 0 );
}
}
wait 1;
players = get_players();
}
}
claymore_safe_to_plant()
{
if ( self.owner.claymores.size >= level.claymores_max_per_player )
{
return 0;
}
if ( isDefined( level.claymore_safe_to_plant ) )
{
return self [[ level.claymore_safe_to_plant ]]();
}
return 1;
if ( self.owner.claymores.size >= level.claymores_max_per_player )
return 0;
if ( isdefined( level.claymore_safe_to_plant ) )
return self [[ level.claymore_safe_to_plant ]]();
return 1;
}
claymore_wait_and_detonate()
{
wait 0,1;
self detonate( self.owner );
wait 0.1;
self detonate( self.owner );
}
claymore_watch()
{
self endon( "death" );
while ( 1 )
{
self waittill( "grenade_fire", claymore, weapname );
if ( weapname == "claymore_zm" )
{
claymore.owner = self;
claymore.team = self.team;
self notify( "zmb_enable_claymore_prompt" );
if ( claymore claymore_safe_to_plant() )
{
if ( isDefined( level.claymore_planted ) )
{
self thread [[ level.claymore_planted ]]( claymore );
}
claymore thread satchel_damage();
claymore thread claymore_detonation();
claymore thread play_claymore_effects();
self maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_planted" );
self maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_planted" );
break;
}
else
{
claymore thread claymore_wait_and_detonate();
}
}
}
self endon( "death" );
self notify( "claymore_watch" );
self endon( "claymore_watch" );
while ( true )
{
self waittill( "grenade_fire", claymore, weapname );
if ( weapname == "claymore_zm" )
{
claymore.owner = self;
claymore.team = self.team;
self notify( "zmb_enable_claymore_prompt" );
if ( claymore claymore_safe_to_plant() )
{
if ( isdefined( level.claymore_planted ) )
self thread [[ level.claymore_planted ]]( claymore );
claymore thread claymore_detonation();
claymore thread play_claymore_effects();
self maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_planted" );
self maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_planted" );
}
else
claymore thread claymore_wait_and_detonate();
}
}
}
claymore_setup()
{
if ( !isDefined( self.claymores ) )
{
self.claymores = [];
}
self thread claymore_watch();
self giveweapon( "claymore_zm" );
self set_player_placeable_mine( "claymore_zm" );
self setactionslot( 4, "weapon", "claymore_zm" );
self setweaponammostock( "claymore_zm", 2 );
if ( !isdefined( self.claymores ) )
self.claymores = [];
self thread claymore_watch();
self giveweapon( "claymore_zm" );
self set_player_placeable_mine( "claymore_zm" );
self setactionslot( 4, "weapon", "claymore_zm" );
self setweaponammostock( "claymore_zm", 2 );
}
adjust_trigger_origin( origin )
{
origin += vectorScale( ( 0, 0, 1 ), 20 );
return origin;
origin += vectorscale( ( 0, 0, 1 ), 20.0 );
return origin;
}
on_spawn_retrieve_trigger( watcher, player )
{
self maps/mp/gametypes_zm/_weaponobjects::onspawnretrievableweaponobject( watcher, player );
if ( isDefined( self.pickuptrigger ) )
{
self.pickuptrigger sethintlowpriority( 0 );
}
self maps\mp\gametypes_zm\_weaponobjects::onspawnretrievableweaponobject( watcher, player );
if ( isdefined( self.pickuptrigger ) )
self.pickuptrigger sethintlowpriority( 0 );
}
pickup_claymores()
{
player = self.owner;
if ( !player hasweapon( "claymore_zm" ) )
{
player thread claymore_watch();
player giveweapon( "claymore_zm" );
player set_player_placeable_mine( "claymore_zm" );
player setactionslot( 4, "weapon", "claymore_zm" );
player setweaponammoclip( "claymore_zm", 0 );
player notify( "zmb_enable_claymore_prompt" );
}
else
{
clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo )
{
self destroy_ent();
player notify( "zmb_disable_claymore_prompt" );
return;
}
}
self pick_up();
clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo )
{
player notify( "zmb_disable_claymore_prompt" );
}
player maps/mp/zombies/_zm_stats::increment_client_stat( "claymores_pickedup" );
player maps/mp/zombies/_zm_stats::increment_player_stat( "claymores_pickedup" );
player = self.owner;
if ( !player hasweapon( "claymore_zm" ) )
{
player thread claymore_watch();
player giveweapon( "claymore_zm" );
player set_player_placeable_mine( "claymore_zm" );
player setactionslot( 4, "weapon", "claymore_zm" );
player setweaponammoclip( "claymore_zm", 0 );
player notify( "zmb_enable_claymore_prompt" );
}
else
{
clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo )
{
self destroy_ent();
player notify( "zmb_disable_claymore_prompt" );
return;
}
}
self pick_up();
clip_ammo = player getweaponammoclip( self.name );
clip_max_ammo = weaponclipsize( self.name );
if ( clip_ammo >= clip_max_ammo )
player notify( "zmb_disable_claymore_prompt" );
player maps\mp\zombies\_zm_stats::increment_client_stat( "claymores_pickedup" );
player maps\mp\zombies\_zm_stats::increment_player_stat( "claymores_pickedup" );
}
pickup_claymores_trigger_listener( trigger, player )
{
self thread pickup_claymores_trigger_listener_enable( trigger, player );
self thread pickup_claymores_trigger_listener_disable( trigger, player );
self thread pickup_claymores_trigger_listener_enable( trigger, player );
self thread pickup_claymores_trigger_listener_disable( trigger, player );
}
pickup_claymores_trigger_listener_enable( trigger, player )
{
self endon( "delete" );
while ( 1 )
{
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
if ( !isDefined( trigger ) )
{
return;
}
trigger trigger_on();
trigger linkto( self );
}
self endon( "delete" );
self endon( "death" );
while ( true )
{
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
if ( !isdefined( trigger ) )
return;
trigger trigger_on();
trigger linkto( self );
}
}
pickup_claymores_trigger_listener_disable( trigger, player )
{
self endon( "delete" );
while ( 1 )
{
player waittill( "zmb_disable_claymore_prompt" );
if ( !isDefined( trigger ) )
{
return;
}
trigger unlink();
trigger trigger_off();
}
self endon( "delete" );
self endon( "death" );
while ( true )
{
player waittill( "zmb_disable_claymore_prompt" );
if ( !isdefined( trigger ) )
return;
trigger unlink();
trigger trigger_off();
}
}
shouldaffectweaponobject( object )
{
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 );
dirtopos = pos - object.origin;
objectforward = anglesToForward( object.angles );
dist = vectordot( dirtopos, objectforward );
if ( dist < level.claymore_detectionmindist )
{
return 0;
}
dirtopos = vectornormalize( dirtopos );
dot = vectordot( dirtopos, objectforward );
return dot > level.claymore_detectiondot;
pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 );
dirtopos = pos - object.origin;
objectforward = anglestoforward( object.angles );
dist = vectordot( dirtopos, objectforward );
if ( dist < level.claymore_detectionmindist )
return 0;
dirtopos = vectornormalize( dirtopos );
dot = vectordot( dirtopos, objectforward );
return dot > level.claymore_detectiondot;
}
claymore_detonation()
{
self endon( "death" );
self waittill_not_moving();
detonateradius = 96;
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
damagearea setexcludeteamfortrigger( self.team );
damagearea enablelinkto();
damagearea linkto( self );
if ( is_true( self.isonbus ) )
{
damagearea setmovingplatformenabled( 1 );
}
self.damagearea = damagearea;
self thread delete_claymores_on_death( self.owner, damagearea );
self.owner.claymores[ self.owner.claymores.size ] = self;
while ( 1 )
{
damagearea waittill( "trigger", ent );
if ( isDefined( self.owner ) && ent == self.owner )
{
continue;
}
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
{
continue;
}
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
{
continue;
}
while ( !ent shouldaffectweaponobject( self ) )
{
continue;
}
if ( ent damageconetrace( self.origin, self ) > 0 )
{
self playsound( "wpn_claymore_alert" );
wait 0,4;
if ( isDefined( self.owner ) )
{
self detonate( self.owner );
}
else
{
self detonate( undefined );
}
return;
}
}
self endon( "death" );
self waittill_not_moving();
detonateradius = 96;
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 2 );
damagearea setexcludeteamfortrigger( self.team );
damagearea enablelinkto();
damagearea linkto( self );
if ( is_true( self.isonbus ) )
damagearea setmovingplatformenabled( 1 );
self.damagearea = damagearea;
self thread delete_claymores_on_death( self.owner, damagearea );
self.owner.claymores[self.owner.claymores.size] = self;
while ( true )
{
damagearea waittill( "trigger", ent );
if ( isdefined( self.owner ) && ent == self.owner )
continue;
if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team )
continue;
if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
continue;
if ( !ent shouldaffectweaponobject( self ) )
continue;
if ( ent damageconetrace( self.origin, self ) > 0 )
{
self playsound( "wpn_claymore_alert" );
wait 0.4;
if ( isdefined( self.owner ) )
self detonate( self.owner );
else
self detonate( undefined );
return;
}
}
}
delete_claymores_on_death( player, ent )
{
self waittill( "death" );
if ( isDefined( player ) )
{
arrayremovevalue( player.claymores, self );
}
wait 0,05;
if ( isDefined( ent ) )
{
ent delete();
}
self waittill( "death" );
if ( isdefined( player ) )
arrayremovevalue( player.claymores, self );
wait 0.05;
if ( isdefined( ent ) )
ent delete();
}
satchel_damage()
{
self setcandamage( 1 );
self.health = 100000;
self.maxhealth = self.health;
attacker = undefined;
while ( 1 )
{
self waittill( "damage", amount, attacker );
if ( !isDefined( self ) )
{
return;
}
self.health = self.maxhealth;
while ( !isplayer( attacker ) )
{
continue;
}
if ( isDefined( self.owner ) && attacker == self.owner )
{
continue;
}
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
{
continue;
}
}
if ( level.satchelexplodethisframe )
{
wait ( 0,1 + randomfloat( 0,4 ) );
}
else wait 0,05;
if ( !isDefined( self ) )
{
return;
}
level.satchelexplodethisframe = 1;
thread reset_satchel_explode_this_frame();
self detonate( attacker );
self endon( "death" );
self setcandamage( 1 );
self.health = 100000;
self.maxhealth = self.health;
attacker = undefined;
while ( true )
{
self waittill( "damage", amount, attacker );
if ( !isdefined( self ) )
return;
self.health = self.maxhealth;
if ( !isplayer( attacker ) )
continue;
if ( isdefined( self.owner ) && attacker == self.owner )
continue;
if ( isdefined( attacker.pers ) && isdefined( attacker.pers["team"] ) && attacker.pers["team"] != level.zombie_team )
continue;
break;
}
if ( level.satchelexplodethisframe )
wait( 0.1 + randomfloat( 0.4 ) );
else
wait 0.05;
if ( !isdefined( self ) )
return;
level.satchelexplodethisframe = 1;
thread reset_satchel_explode_this_frame();
self detonate( attacker );
}
reset_satchel_explode_this_frame()
{
wait 0,05;
level.satchelexplodethisframe = 0;
wait 0.05;
level.satchelexplodethisframe = 0;
}
play_claymore_effects()
{
self endon( "death" );
self waittill_not_moving();
playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" );
self endon( "death" );
self waittill_not_moving();
playfxontag( level._effect["claymore_laser"], self, "tag_fx" );
}
give_claymores_after_rounds()
{
while ( 1 )
{
level waittill( "between_round_over" );
while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
{
players = get_players();
i = 0;
while ( i < players.size )
{
if ( players[ i ] is_player_placeable_mine( "claymore_zm" ) )
{
players[ i ] giveweapon( "claymore_zm" );
players[ i ] set_player_placeable_mine( "claymore_zm" );
players[ i ] setactionslot( 4, "weapon", "claymore_zm" );
players[ i ] setweaponammoclip( "claymore_zm", 2 );
}
i++;
}
}
}
}
while ( true )
{
level waittill( "between_round_over" );
init_hint_hudelem( x, y, alignx, aligny, fontscale, alpha )
{
self.x = x;
self.y = y;
self.alignx = alignx;
self.aligny = aligny;
self.fontscale = fontscale;
self.alpha = alpha;
self.sort = 20;
}
if ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
{
players = get_players();
setup_client_hintelem()
{
self endon( "death" );
self endon( "disconnect" );
if ( !isDefined( self.hintelem ) )
{
self.hintelem = newclienthudelem( self );
}
self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 );
for ( i = 0; i < players.size; i++ )
{
if ( players[i] is_player_placeable_mine( "claymore_zm" ) )
{
players[i] giveweapon( "claymore_zm" );
players[i] set_player_placeable_mine( "claymore_zm" );
players[i] setactionslot( 4, "weapon", "claymore_zm" );
players[i] setweaponammoclip( "claymore_zm", 2 );
}
}
}
}
}
show_claymore_hint( string )
{
self endon( "death" );
self endon( "disconnect" );
if ( string == "claymore_purchased" )
{
text = &"ZOMBIE_CLAYMORE_HOWTO";
}
else
{
text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED";
}
self setup_client_hintelem();
self.hintelem settext( text );
wait 3,5;
self.hintelem settext( "" );
self endon( "death" );
self endon( "disconnect" );
if ( string == "claymore_purchased" )
text = &"ZOMBIE_CLAYMORE_HOWTO";
else
text = &"ZOMBIE_CLAYMORE_ALREADY_PURCHASED";
show_equipment_hint_text( text );
}

View File

@ -1,565 +0,0 @@
#include maps/mp/zombies/_zm_clone;
#include maps/mp/zombies/_zm_laststand;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
#using_animtree( "zombie_cymbal_monkey" );
init()
{
if ( !cymbal_monkey_exists() )
{
return;
}
/#
level.zombiemode_devgui_cymbal_monkey_give = ::player_give_cymbal_monkey;
#/
level._effect[ "monkey_glow" ] = loadfx( "maps/zombie/fx_zombie_monkey_light" );
level._effect[ "grenade_samantha_steal" ] = loadfx( "maps/zombie/fx_zmb_blackhole_trap_end" );
level.cymbal_monkeys = [];
scriptmodelsuseanimtree( -1 );
}
player_give_cymbal_monkey()
{
self giveweapon( "cymbal_monkey_zm" );
self set_player_tactical_grenade( "cymbal_monkey_zm" );
self thread player_handle_cymbal_monkey();
}
player_handle_cymbal_monkey()
{
self notify( "starting_monkey_watch" );
self endon( "disconnect" );
self endon( "starting_monkey_watch" );
attract_dist_diff = level.monkey_attract_dist_diff;
if ( !isDefined( attract_dist_diff ) )
{
attract_dist_diff = 45;
}
num_attractors = level.num_monkey_attractors;
if ( !isDefined( num_attractors ) )
{
num_attractors = 96;
}
max_attract_dist = level.monkey_attract_dist;
if ( !isDefined( max_attract_dist ) )
{
max_attract_dist = 1536;
}
while ( 1 )
{
grenade = get_thrown_monkey();
self player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff );
wait 0,05;
}
}
watch_for_dud( model, actor )
{
self endon( "death" );
self waittill( "grenade_dud" );
model.dud = 1;
self playsound( "zmb_vox_monkey_scream" );
self.monk_scream_vox = 1;
wait 3;
if ( isDefined( model ) )
{
model delete();
}
if ( isDefined( actor ) )
{
actor delete();
}
if ( isDefined( self.damagearea ) )
{
self.damagearea delete();
}
if ( isDefined( self ) )
{
self delete();
}
}
watch_for_emp( model, actor )
{
self endon( "death" );
while ( 1 )
{
level waittill( "emp_detonate", origin, radius );
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
{
break;
}
else
{
}
}
self.stun_fx = 1;
if ( isDefined( level._equipment_emp_destroy_fx ) )
{
playfx( level._equipment_emp_destroy_fx, self.origin + vectorScale( ( 0, 0, -1 ), 5 ), ( 0, randomfloat( 360 ), 0 ) );
}
wait 0,15;
self.attract_to_origin = 0;
self deactivate_zombie_point_of_interest();
model clearanim( %o_monkey_bomb, 0 );
wait 1;
self detonate();
wait 1;
if ( isDefined( model ) )
{
model delete();
}
if ( isDefined( actor ) )
{
actor delete();
}
if ( isDefined( self.damagearea ) )
{
self.damagearea delete();
}
if ( isDefined( self ) )
{
self delete();
}
}
clone_player_angles( owner )
{
self endon( "death" );
owner endon( "death" );
while ( isDefined( self ) )
{
self.angles = owner.angles;
wait 0,05;
}
}
show_briefly( showtime )
{
self endon( "show_owner" );
if ( isDefined( self.show_for_time ) )
{
self.show_for_time = showtime;
return;
}
self.show_for_time = showtime;
self setvisibletoall();
while ( self.show_for_time > 0 )
{
self.show_for_time -= 0,05;
wait 0,05;
}
self setvisibletoallexceptteam( level.zombie_team );
self.show_for_time = undefined;
}
show_owner_on_attack( owner )
{
owner endon( "hide_owner" );
owner endon( "show_owner" );
self endon( "explode" );
self endon( "death" );
self endon( "grenade_dud" );
owner.show_for_time = undefined;
for ( ;; )
{
owner waittill( "weapon_fired" );
owner thread show_briefly( 0,5 );
}
}
hide_owner( owner )
{
owner notify( "hide_owner" );
owner endon( "hide_owner" );
owner setperk( "specialty_immunemms" );
owner.no_burning_sfx = 1;
owner notify( "stop_flame_sounds" );
owner setvisibletoallexceptteam( level.zombie_team );
owner.hide_owner = 1;
if ( isDefined( level._effect[ "human_disappears" ] ) )
{
playfx( level._effect[ "human_disappears" ], owner.origin );
}
self thread show_owner_on_attack( owner );
evt = self waittill_any_return( "explode", "death", "grenade_dud" );
/#
println( "ZMCLONE: Player visible again because of " + evt );
#/
owner notify( "show_owner" );
owner unsetperk( "specialty_immunemms" );
if ( isDefined( level._effect[ "human_disappears" ] ) )
{
playfx( level._effect[ "human_disappears" ], owner.origin );
}
owner.no_burning_sfx = undefined;
owner setvisibletoall();
owner.hide_owner = undefined;
owner show();
}
proximity_detonate( owner )
{
wait 1,5;
if ( !isDefined( self ) )
{
return;
}
detonateradius = 96;
explosionradius = detonateradius * 2;
damagearea = spawn( "trigger_radius", self.origin + ( 0, 0, 0 - detonateradius ), 4, detonateradius, detonateradius * 1,5 );
damagearea setexcludeteamfortrigger( owner.team );
damagearea enablelinkto();
damagearea linkto( self );
self.damagearea = damagearea;
while ( isDefined( self ) )
{
damagearea waittill( "trigger", ent );
if ( isDefined( owner ) && ent == owner )
{
continue;
}
if ( isDefined( ent.team ) && ent.team == owner.team )
{
continue;
}
self playsound( "wpn_claymore_alert" );
dist = distance( self.origin, ent.origin );
radiusdamage( self.origin + vectorScale( ( 0, 0, -1 ), 12 ), explosionradius, 1, 1, owner, "MOD_GRENADE_SPLASH", "cymbal_monkey_zm" );
if ( isDefined( owner ) )
{
self detonate( owner );
}
else
{
self detonate( undefined );
}
break;
}
if ( isDefined( damagearea ) )
{
damagearea delete();
}
}
player_throw_cymbal_monkey( grenade, num_attractors, max_attract_dist, attract_dist_diff )
{
self endon( "disconnect" );
self endon( "starting_monkey_watch" );
if ( isDefined( grenade ) )
{
grenade endon( "death" );
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
{
if ( isDefined( grenade.damagearea ) )
{
grenade.damagearea delete();
}
grenade delete();
return;
}
grenade hide();
model = spawn( "script_model", grenade.origin );
model setmodel( "weapon_zombie_monkey_bomb" );
model useanimtree( -1 );
model linkto( grenade );
model.angles = grenade.angles;
model thread monkey_cleanup( grenade );
clone = undefined;
if ( isDefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view )
{
model setvisibletoallexceptteam( level.zombie_team );
clone = maps/mp/zombies/_zm_clone::spawn_player_clone( self, vectorScale( ( 0, 0, -1 ), 999 ), level.cymbal_monkey_clone_weapon, undefined );
model.simulacrum = clone;
clone maps/mp/zombies/_zm_clone::clone_animate( "idle" );
clone thread clone_player_angles( self );
clone notsolid();
clone ghost();
}
grenade thread watch_for_dud( model, clone );
grenade thread watch_for_emp( model, clone );
info = spawnstruct();
info.sound_attractors = [];
grenade thread monitor_zombie_groans( info );
grenade waittill( "stationary" );
if ( isDefined( level.grenade_planted ) )
{
self thread [[ level.grenade_planted ]]( grenade, model );
}
if ( isDefined( grenade ) )
{
if ( isDefined( model ) )
{
model setanim( %o_monkey_bomb );
if ( isDefined( grenade.backlinked ) && !grenade.backlinked )
{
model unlink();
model.origin = grenade.origin;
model.angles = grenade.angles;
}
}
if ( isDefined( clone ) )
{
clone forceteleport( grenade.origin, grenade.angles );
clone thread hide_owner( self );
grenade thread proximity_detonate( self );
clone show();
clone setinvisibletoall();
clone setvisibletoteam( level.zombie_team );
}
grenade resetmissiledetonationtime();
playfxontag( level._effect[ "monkey_glow" ], model, "origin_animate_jnt" );
valid_poi = check_point_in_enabled_zone( grenade.origin, undefined, undefined );
if ( isDefined( level.check_valid_poi ) )
{
valid_poi = grenade [[ level.check_valid_poi ]]( valid_poi );
}
if ( valid_poi )
{
grenade create_zombie_point_of_interest( max_attract_dist, num_attractors, 10000 );
grenade.attract_to_origin = 1;
grenade thread create_zombie_point_of_interest_attractor_positions( 4, attract_dist_diff );
grenade thread wait_for_attractor_positions_complete();
grenade thread do_monkey_sound( model, info );
level.cymbal_monkeys[ level.cymbal_monkeys.size ] = grenade;
}
else
{
grenade.script_noteworthy = undefined;
level thread grenade_stolen_by_sam( grenade, model, clone );
}
return;
}
else
{
grenade.script_noteworthy = undefined;
level thread grenade_stolen_by_sam( grenade, model, clone );
}
}
}
grenade_stolen_by_sam( ent_grenade, ent_model, ent_actor )
{
if ( !isDefined( ent_model ) )
{
return;
}
direction = ent_model.origin;
direction = ( direction[ 1 ], direction[ 0 ], 0 );
if ( direction[ 1 ] < 0 || direction[ 0 ] > 0 && direction[ 1 ] > 0 )
{
direction = ( direction[ 0 ], direction[ 1 ] * -1, 0 );
}
else
{
if ( direction[ 0 ] < 0 )
{
direction = ( direction[ 0 ] * -1, direction[ 1 ], 0 );
}
}
players = get_players();
i = 0;
while ( i < players.size )
{
if ( isalive( players[ i ] ) )
{
players[ i ] playlocalsound( level.zmb_laugh_alias );
}
i++;
}
playfxontag( level._effect[ "grenade_samantha_steal" ], ent_model, "tag_origin" );
ent_model movez( 60, 1, 0,25, 0,25 );
ent_model vibrate( direction, 1,5, 2,5, 1 );
ent_model waittill( "movedone" );
if ( isDefined( self.damagearea ) )
{
self.damagearea delete();
}
ent_model delete();
if ( isDefined( ent_actor ) )
{
ent_actor delete();
}
if ( isDefined( ent_grenade ) )
{
if ( isDefined( ent_grenade.damagearea ) )
{
ent_grenade.damagearea delete();
}
ent_grenade delete();
}
}
wait_for_attractor_positions_complete()
{
self waittill( "attractor_positions_generated" );
self.attract_to_origin = 0;
}
monkey_cleanup( parent )
{
while ( 1 )
{
if ( !isDefined( parent ) )
{
if ( isDefined( self ) && isDefined( self.dud ) && self.dud )
{
wait 6;
}
if ( isDefined( self.simulacrum ) )
{
self.simulacrum delete();
}
self_delete();
return;
}
wait 0,05;
}
}
do_monkey_sound( model, info )
{
self.monk_scream_vox = 0;
if ( isDefined( level.grenade_safe_to_bounce ) )
{
if ( !( [[ level.grenade_safe_to_bounce ]]( self.owner, "cymbal_monkey_zm" ) ) )
{
self playsound( "zmb_vox_monkey_scream" );
self.monk_scream_vox = 1;
}
}
if ( !self.monk_scream_vox && level.music_override == 0 )
{
if ( isDefined( level.cymbal_monkey_dual_view ) && level.cymbal_monkey_dual_view )
{
self playsoundtoteam( "zmb_monkey_song", "allies" );
}
else
{
self playsound( "zmb_monkey_song" );
}
}
if ( !self.monk_scream_vox )
{
self thread play_delayed_explode_vox();
}
self waittill( "explode", position );
level notify( "grenade_exploded" );
monkey_index = -1;
i = 0;
while ( i < level.cymbal_monkeys.size )
{
if ( !isDefined( level.cymbal_monkeys[ i ] ) )
{
monkey_index = i;
break;
}
else
{
i++;
}
}
if ( monkey_index >= 0 )
{
arrayremoveindex( level.cymbal_monkeys, monkey_index );
}
if ( isDefined( model ) )
{
model clearanim( %o_monkey_bomb, 0,2 );
}
i = 0;
while ( i < info.sound_attractors.size )
{
if ( isDefined( info.sound_attractors[ i ] ) )
{
info.sound_attractors[ i ] notify( "monkey_blown_up" );
}
i++;
}
}
play_delayed_explode_vox()
{
wait 6,5;
if ( isDefined( self ) )
{
self playsound( "zmb_vox_monkey_explode" );
}
}
get_thrown_monkey()
{
self endon( "disconnect" );
self endon( "starting_monkey_watch" );
while ( 1 )
{
self waittill( "grenade_fire", grenade, weapname );
if ( weapname == "cymbal_monkey_zm" )
{
grenade.use_grenade_special_long_bookmark = 1;
grenade.grenade_multiattack_bookmark_count = 1;
return grenade;
}
wait 0,05;
}
}
monitor_zombie_groans( info )
{
self endon( "explode" );
while ( 1 )
{
if ( !isDefined( self ) )
{
return;
}
while ( !isDefined( self.attractor_array ) )
{
wait 0,05;
}
i = 0;
while ( i < self.attractor_array.size )
{
if ( array_check_for_dupes( info.sound_attractors, self.attractor_array[ i ] ) )
{
if ( isDefined( self.origin ) && isDefined( self.attractor_array[ i ].origin ) )
{
if ( distancesquared( self.origin, self.attractor_array[ i ].origin ) < 250000 )
{
info.sound_attractors[ info.sound_attractors.size ] = self.attractor_array[ i ];
self.attractor_array[ i ] thread play_zombie_groans();
}
}
}
i++;
}
wait 0,05;
}
}
play_zombie_groans()
{
self endon( "death" );
self endon( "monkey_blown_up" );
while ( 1 )
{
if ( isDefined( self ) )
{
self playsound( "zmb_vox_zombie_groan" );
wait randomfloatrange( 2, 3 );
continue;
}
else
{
return;
}
}
}
cymbal_monkey_exists()
{
return isDefined( level.zombie_weapons[ "cymbal_monkey_zm" ] );
}

View File

@ -1,150 +1,123 @@
#include maps/mp/zombies/_zm_audio;
#include maps/mp/zombies/_zm_spawner;
#include maps/mp/zombies/_zm_weapons;
#include maps/mp/zombies/_zm_net;
#include maps/mp/zombies/_zm_utility;
#include maps/mp/_utility;
#include common_scripts/utility;
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_net;
#include maps\mp\zombies\_zm_melee_weapon;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_spawner;
#include maps\mp\zombies\_zm_audio;
init()
{
registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" );
register_melee_weapon_for_level( "tazer_knuckles_zm" );
if ( isDefined( level.tazer_cost ) )
{
cost = level.tazer_cost;
}
else
{
cost = 6000;
}
level.use_tazer_impact_fx = 0;
maps/mp/zombies/_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::has_tazer, ::give_tazer, ::take_tazer, ::tazer_flourish_fx );
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" );
maps/mp/zombies/_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" );
maps/mp/zombies/_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions );
level._effect[ "fx_zmb_taser_vomit" ] = loadfx( "maps/zombie/fx_zmb_taser_vomit" );
level._effect[ "fx_zmb_taser_flourish" ] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" );
if ( level.script != "zm_transit" )
{
level._effect[ "fx_zmb_tazer_impact" ] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" );
level.use_tazer_impact_fx = 1;
}
level.tazer_flourish_delay = 0,5;
}
registerclientfield( "toplayer", "tazer_flourish", 1, 1, "int" );
register_melee_weapon_for_level( "tazer_knuckles_zm" );
spectator_respawn()
{
maps/mp/zombies/_zm_melee_weapon::spectator_respawn( "tazer_upgrade", ::take_tazer, ::has_tazer );
if ( isdefined( level.tazer_cost ) )
cost = level.tazer_cost;
else
cost = 6000;
level.use_tazer_impact_fx = 0;
maps\mp\zombies\_zm_melee_weapon::init( "tazer_knuckles_zm", "zombie_tazer_flourish", "knife_ballistic_no_melee_zm", "knife_ballistic_no_melee_upgraded_zm", cost, "tazer_upgrade", &"ZOMBIE_WEAPON_TAZER_BUY", "tazerknuckles", ::tazer_flourish_fx );
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee" );
maps\mp\zombies\_zm_weapons::add_retrievable_knife_init_name( "knife_ballistic_no_melee_upgraded" );
maps\mp\zombies\_zm_spawner::add_cusom_zombie_spawn_logic( ::watch_bodily_functions );
level._effect["fx_zmb_taser_vomit"] = loadfx( "maps/zombie/fx_zmb_taser_vomit" );
level._effect["fx_zmb_taser_flourish"] = loadfx( "weapon/taser/fx_taser_knuckles_anim_zmb" );
if ( level.script != "zm_transit" )
{
level._effect["fx_zmb_tazer_impact"] = loadfx( "weapon/taser/fx_taser_knuckles_impact_zmb" );
level.use_tazer_impact_fx = 1;
}
level.tazer_flourish_delay = 0.5;
}
watch_bodily_functions()
{
if ( isDefined( self.isscreecher ) || self.isscreecher && isDefined( self.is_avogadro ) && self.is_avogadro )
{
return;
}
while ( 1 )
{
self waittill( "damage", amount, attacker, direction_vec, point, type );
if ( !isDefined( self ) )
{
return;
}
if ( !isDefined( attacker ) || !isplayer( attacker ) )
{
continue;
}
while ( type != "MOD_MELEE" )
{
continue;
}
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
{
continue;
}
ch = randomint( 100 );
if ( ch < 4 )
{
playfxontag( level._effect[ "fx_zmb_taser_vomit" ], self, "j_neck" );
}
if ( level.use_tazer_impact_fx )
{
tags = [];
tags[ 0 ] = "J_Head";
tags[ 1 ] = "J_Neck";
playfxontag( level._effect[ "fx_zmb_tazer_impact" ], self, random( tags ) );
}
}
if ( isdefined( self.isscreecher ) && self.isscreecher || isdefined( self.is_avogadro ) && self.is_avogadro )
return;
while ( isdefined( self ) && isalive( self ) )
{
self waittill( "damage", amount, attacker, direction_vec, point, type );
if ( !isdefined( self ) )
return;
if ( !isdefined( attacker ) || !isplayer( attacker ) )
continue;
if ( type != "MOD_MELEE" )
continue;
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isdefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
continue;
ch = randomint( 100 );
if ( ch < 4 )
playfxontag( level._effect["fx_zmb_taser_vomit"], self, "j_neck" );
if ( level.use_tazer_impact_fx )
{
tags = [];
tags[0] = "J_Head";
tags[1] = "J_Neck";
playfxontag( level._effect["fx_zmb_tazer_impact"], self, random( tags ) );
}
}
}
onplayerconnect()
{
self thread onplayerspawned();
self thread onplayerspawned();
}
onplayerspawned()
{
self endon( "disconnect" );
for ( ;; )
{
self waittill( "spawned_player" );
self thread watchtazerknucklemelee();
}
self endon( "disconnect" );
for (;;)
{
self waittill( "spawned_player" );
self thread watchtazerknucklemelee();
}
}
watchtazerknucklemelee()
{
self endon( "disconnect" );
for ( ;; )
{
self waittill( "weapon_melee", weapon );
if ( weapon == "tazer_knuckles_zm" )
{
self tazerknuckle_melee();
}
}
self endon( "disconnect" );
for (;;)
{
self waittill( "weapon_melee", weapon );
if ( weapon == "tazer_knuckles_zm" )
self tazerknuckle_melee();
}
}
tazerknuckle_melee()
{
}
has_tazer()
{
if ( isDefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching )
{
return 0;
}
if ( isDefined( self._sickle_zm_equipped ) && !self._sickle_zm_equipped && isDefined( self._bowie_zm_equipped ) || self._bowie_zm_equipped && isDefined( self._tazer_zm_equipped ) && self._tazer_zm_equipped )
{
return 1;
}
return 0;
}
give_tazer()
{
self._tazer_zm_equipped = 1;
self._bowie_zm_equipped = undefined;
self._sickle_zm_equipped = undefined;
}
take_tazer()
{
self._tazer_zm_equipped = undefined;
}
tazer_flourish_fx()
{
self waittill( "weapon_change", newweapon );
if ( newweapon == "zombie_tazer_flourish" )
{
self endon( "weapon_change" );
wait level.tazer_flourish_delay;
self thread maps/mp/zombies/_zm_audio::playerexert( "hitmed" );
self setclientfieldtoplayer( "tazer_flourish", 1 );
wait_network_frame();
self setclientfieldtoplayer( "tazer_flourish", 0 );
}
self waittill( "weapon_change", newweapon );
if ( newweapon == "zombie_tazer_flourish" )
{
self endon( "weapon_change" );
wait( level.tazer_flourish_delay );
self thread maps\mp\zombies\_zm_audio::playerexert( "hitmed" );
self setclientfieldtoplayer( "tazer_flourish", 1 );
wait_network_frame();
self setclientfieldtoplayer( "tazer_flourish", 0 );
}
}

View File

@ -0,0 +1,327 @@
// T6 GSC SOURCE
// Decompiled by https://github.com/xensik/gsc-tool
#include common_scripts\utility;
#include maps\mp\_utility;
#include maps\mp\zombies\_zm_utility;
#include maps\mp\zombies\_zm_magicbox;
#include maps\mp\zombies\_zm_weapons;
#include maps\mp\zombies\_zm_stats;
#include maps\mp\zombies\_zm_unitrigger;
#include maps\mp\zombies\_zm_audio;
main()
{
if ( !isdefined( level.weapon_locker_map ) )
level.weapon_locker_map = level.script;
level.weapon_locker_online = sessionmodeisonlinegame();
weapon_lockers = getstructarray( "weapons_locker", "targetname" );
array_thread( weapon_lockers, ::triggerweaponslockerwatch );
}
wl_has_stored_weapondata()
{
if ( level.weapon_locker_online )
return self has_stored_weapondata( level.weapon_locker_map );
else
return isdefined( self.stored_weapon_data );
}
wl_get_stored_weapondata()
{
if ( level.weapon_locker_online )
return self get_stored_weapondata( level.weapon_locker_map );
else
return self.stored_weapon_data;
}
wl_clear_stored_weapondata()
{
if ( level.weapon_locker_online )
self clear_stored_weapondata( level.weapon_locker_map );
else
self.stored_weapon_data = undefined;
}
wl_set_stored_weapondata( weapondata )
{
if ( level.weapon_locker_online )
self set_stored_weapondata( weapondata, level.weapon_locker_map );
else
self.stored_weapon_data = weapondata;
}
triggerweaponslockerwatch()
{
unitrigger_stub = spawnstruct();
unitrigger_stub.origin = self.origin;
if ( isdefined( self.script_angles ) )
unitrigger_stub.angles = self.script_angles;
else
unitrigger_stub.angles = self.angles;
unitrigger_stub.script_angles = unitrigger_stub.angles;
if ( isdefined( self.script_length ) )
unitrigger_stub.script_length = self.script_length;
else
unitrigger_stub.script_length = 16;
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;
unitrigger_stub.origin -= anglestoright( unitrigger_stub.angles ) * unitrigger_stub.script_length / 2;
unitrigger_stub.targetname = "weapon_locker";
unitrigger_stub.cursor_hint = "HINT_NOICON";
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
unitrigger_stub.clientfieldname = "weapon_locker";
maps\mp\zombies\_zm_unitrigger::unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
unitrigger_stub.prompt_and_visibility_func = ::triggerweaponslockerthinkupdateprompt;
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::triggerweaponslockerthink );
}
triggerweaponslockerisvalidweapon( weaponname )
{
weaponname = get_base_weapon_name( weaponname, 1 );
if ( !is_weapon_included( weaponname ) )
return false;
if ( is_offhand_weapon( weaponname ) || is_limited_weapon( weaponname ) )
return false;
return true;
}
triggerweaponslockerisvalidweaponpromptupdate( player, weaponname )
{
retrievingweapon = player wl_has_stored_weapondata();
if ( !retrievingweapon )
{
weaponname = player get_nonalternate_weapon( weaponname );
if ( !triggerweaponslockerisvalidweapon( weaponname ) )
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
else
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_STORE" );
}
else
{
weapondata = player wl_get_stored_weapondata();
if ( isdefined( level.remap_weapon_locker_weapons ) )
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
weapontogive = weapondata["name"];
primaries = player getweaponslistprimaries();
maxweapons = get_player_weapon_limit( player );
weaponname = player get_nonalternate_weapon( weaponname );
if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == weaponname )
{
if ( !triggerweaponslockerisvalidweapon( weaponname ) )
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
return;
}
}
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_GRAB" );
}
}
triggerweaponslockerthinkupdateprompt( player )
{
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
return 1;
}
triggerweaponslockerthink()
{
self.parent_player thread triggerweaponslockerweaponchangethink( self );
while ( true )
{
self waittill( "trigger", player );
retrievingweapon = player wl_has_stored_weapondata();
if ( !retrievingweapon )
{
curweapon = player getcurrentweapon();
curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon );
if ( !triggerweaponslockerisvalidweapon( curweapon ) )
continue;
weapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player );
player wl_set_stored_weapondata( weapondata );
/#
assert( curweapon == weapondata["name"], "weapon data does not match" );
#/
player takeweapon( curweapon );
primaries = player getweaponslistprimaries();
if ( isdefined( primaries[0] ) )
player switchtoweapon( primaries[0] );
else
player maps\mp\zombies\_zm_weapons::give_fallback_weapon();
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
player playsoundtoplayer( "evt_fridge_locker_close", player );
player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "weapon_storage" );
}
else
{
curweapon = player getcurrentweapon();
primaries = player getweaponslistprimaries();
weapondata = player wl_get_stored_weapondata();
if ( isdefined( level.remap_weapon_locker_weapons ) )
weapondata = remap_weapon( weapondata, level.remap_weapon_locker_weapons );
weapontogive = weapondata["name"];
if ( !triggerweaponslockerisvalidweapon( weapontogive ) )
{
player playlocalsound( level.zmb_laugh_alias );
player wl_clear_stored_weapondata();
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
continue;
}
curweap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( curweapon, 1 );
weap_base = maps\mp\zombies\_zm_weapons::get_base_weapon_name( weapontogive, 1 );
if ( player has_weapon_or_upgrade( weap_base ) && weap_base != curweap_base )
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
wait 3;
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
continue;
}
maxweapons = get_player_weapon_limit( player );
if ( isdefined( primaries ) && primaries.size >= maxweapons || weapontogive == curweapon )
{
curweapon = player maps\mp\zombies\_zm_weapons::switch_from_alt_weapon( curweapon );
if ( !triggerweaponslockerisvalidweapon( curweapon ) )
{
self sethintstring( &"ZOMBIE_WEAPON_LOCKER_DENY" );
wait 3;
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
continue;
}
curweapondata = player maps\mp\zombies\_zm_weapons::get_player_weapondata( player );
player takeweapon( curweapondata["name"] );
player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata );
player wl_clear_stored_weapondata();
player wl_set_stored_weapondata( curweapondata );
player switchtoweapon( weapondata["name"] );
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
}
else
{
player thread maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "wall_withdrawl" );
player wl_clear_stored_weapondata();
player maps\mp\zombies\_zm_weapons::weapondata_give( weapondata );
player switchtoweapon( weapondata["name"] );
self triggerweaponslockerisvalidweaponpromptupdate( player, player getcurrentweapon() );
}
level notify( "weapon_locker_grab" );
player playsoundtoplayer( "evt_fridge_locker_open", player );
}
wait 0.5;
}
}
triggerweaponslockerweaponchangethink( trigger )
{
self endon( "disconnect" );
self endon( "death" );
trigger endon( "kill_trigger" );
while ( true )
{
self waittill( "weapon_change", newweapon );
trigger triggerweaponslockerisvalidweaponpromptupdate( self, newweapon );
}
}
add_weapon_locker_mapping( fromweapon, toweapon )
{
if ( !isdefined( level.remap_weapon_locker_weapons ) )
level.remap_weapon_locker_weapons = [];
level.remap_weapon_locker_weapons[fromweapon] = toweapon;
}
remap_weapon( weapondata, maptable )
{
name = get_base_name( weapondata["name"] );
att = get_attachment_name( weapondata["name"] );
if ( isdefined( maptable[name] ) )
{
weapondata["name"] = maptable[name];
name = weapondata["name"];
if ( is_weapon_upgraded( name ) )
{
if ( isdefined( att ) && weapon_supports_attachments( name ) )
{
base = get_base_weapon_name( name, 1 );
if ( !weapon_supports_this_attachment( base, att ) )
att = random_attachment( base );
weapondata["name"] = weapondata["name"] + "+" + att;
}
else if ( weapon_supports_default_attachment( name ) )
{
att = default_attachment( name );
weapondata["name"] = weapondata["name"] + "+" + att;
}
}
}
else
return weapondata;
name = weapondata["name"];
dw_name = weapondualwieldweaponname( name );
alt_name = weaponaltweaponname( name );
if ( name != "none" )
{
weapondata["clip"] = int( min( weapondata["clip"], weaponclipsize( name ) ) );
weapondata["stock"] = int( min( weapondata["stock"], weaponmaxammo( name ) ) );
}
if ( dw_name != "none" )
weapondata["lh_clip"] = int( min( weapondata["lh_clip"], weaponclipsize( dw_name ) ) );
if ( alt_name != "none" )
{
weapondata["alt_clip"] = int( min( weapondata["alt_clip"], weaponclipsize( alt_name ) ) );
weapondata["alt_stock"] = int( min( weapondata["alt_stock"], weaponmaxammo( alt_name ) ) );
}
weapondata["dw_name"] = dw_name;
weapondata["alt_name"] = alt_name;
return weapondata;
}