mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-06-07 17:37:50 -05:00
[ZM] Added zm_prison and zm_highrise GSCs
This commit is contained in:
parent
8ccce7f949
commit
f97389d9da
@ -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
|
||||
{
|
||||
}
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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();
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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 );
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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" );
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
#/
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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 );
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
}
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -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 );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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
@ -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" );
|
||||
}
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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" );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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();
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -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 );
|
||||
#/
|
||||
}
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -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 );
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
||||
|
@ -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 );
|
||||
}
|
||||
|
@ -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" ] );
|
||||
}
|
File diff suppressed because it is too large
Load Diff
@ -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 );
|
||||
}
|
||||
}
|
||||
|
@ -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;
|
||||
}
|
Loading…
x
Reference in New Issue
Block a user