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,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -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 )
|
||||
{
|
||||
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 )
|
||||
{
|
||||
if ( isdefined( self.isdog ) && self.isdog )
|
||||
dog_jump_down( 96, 7 );
|
||||
}
|
||||
else
|
||||
{
|
||||
dosimpletraverse( "jump_down_96" );
|
||||
}
|
||||
}
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
@ -1,5 +1,7 @@
|
||||
#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()
|
||||
{
|
||||
|
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();
|
||||
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" );
|
||||
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" );
|
||||
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();
|
||||
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();
|
||||
}
|
||||
|
@ -1,11 +1,13 @@
|
||||
#include maps/mp/zombies/_zm_sidequests;
|
||||
#include maps/mp/zombies/_zm_zonemgr;
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/_ambientpackage;
|
||||
#include maps/mp/zm_alcatraz_utility;
|
||||
#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\zm_alcatraz_utility;
|
||||
#include maps\mp\_ambientpackage;
|
||||
#include maps\mp\zombies\_zm_audio;
|
||||
#include maps\mp\zombies\_zm_zonemgr;
|
||||
#include maps\mp\zombies\_zm_sidequests;
|
||||
|
||||
main()
|
||||
{
|
||||
@ -15,36 +17,31 @@ main()
|
||||
thread sndlastlifesetup();
|
||||
thread sndsetupendgamemusicstates();
|
||||
thread sndspectatorsetup();
|
||||
|
||||
if ( is_classic() )
|
||||
{
|
||||
thread sndmusicegg();
|
||||
}
|
||||
}
|
||||
|
||||
sndspectatorsetup()
|
||||
{
|
||||
flag_wait( "initial_players_connected" );
|
||||
players = getplayers();
|
||||
_a31 = players;
|
||||
_k31 = getFirstArrayKey( _a31 );
|
||||
while ( isDefined( _k31 ) )
|
||||
{
|
||||
player = _a31[ _k31 ];
|
||||
|
||||
foreach ( player in players )
|
||||
player thread sndspectatorafterliferevert();
|
||||
_k31 = getNextArrayKey( _a31, _k31 );
|
||||
}
|
||||
}
|
||||
|
||||
sndspectatorafterliferevert()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "spawned_spectator" );
|
||||
|
||||
while ( self.sessionstate == "spectator" )
|
||||
{
|
||||
wait 1;
|
||||
}
|
||||
|
||||
self clientnotify( "sndSR" );
|
||||
}
|
||||
}
|
||||
@ -52,31 +49,30 @@ sndspectatorafterliferevert()
|
||||
sndsetupendgamemusicstates()
|
||||
{
|
||||
flag_wait( "start_zombie_round_logic" );
|
||||
level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_final_good", "mus_zombie_game_over_final_good", 1, 0, undefined, "SILENCE" );
|
||||
level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_final_bad", "mus_zombie_game_over_final_bad", 1, 0, undefined, "SILENCE" );
|
||||
level thread maps/mp/zombies/_zm_audio::setupmusicstate( "game_over_nomove", "mus_zombie_game_over_nomove", 1, 0, undefined, "SILENCE" );
|
||||
level thread maps\mp\zombies\_zm_audio::setupmusicstate( "game_over_final_good", "mus_zombie_game_over_final_good", 1, 0, undefined, "SILENCE" );
|
||||
level thread maps\mp\zombies\_zm_audio::setupmusicstate( "game_over_final_bad", "mus_zombie_game_over_final_bad", 1, 0, undefined, "SILENCE" );
|
||||
level thread maps\mp\zombies\_zm_audio::setupmusicstate( "game_over_nomove", "mus_zombie_game_over_nomove", 1, 0, undefined, "SILENCE" );
|
||||
}
|
||||
|
||||
sndperksacolajingle( perksacola )
|
||||
{
|
||||
if ( !isDefined( self.jingle_is_playing ) )
|
||||
{
|
||||
if ( !isdefined( self.jingle_is_playing ) )
|
||||
self.jingle_is_playing = 0;
|
||||
}
|
||||
if ( !isDefined( self.script_sound ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self.script_sound ) )
|
||||
return;
|
||||
}
|
||||
if ( !isDefined( self.sndent ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self.sndent ) )
|
||||
return;
|
||||
}
|
||||
|
||||
if ( self.jingle_is_playing == 0 && level.music_override == 0 )
|
||||
{
|
||||
self.jingle_is_playing = 1;
|
||||
self.sndent stoploopsound( 1 );
|
||||
self.sndent playsoundwithnotify( self.script_sound, "sndJingleDone" );
|
||||
|
||||
self.sndent waittill( "sndJingleDone" );
|
||||
|
||||
self.sndent playloopsound( "zmb_perksacola_alcatraz_loop", 1 );
|
||||
self.jingle_is_playing = 0;
|
||||
}
|
||||
@ -87,38 +83,35 @@ sndperksacolaloop()
|
||||
self endon( "death" );
|
||||
self.sndent = spawn( "script_origin", self.origin );
|
||||
self.sndent playloopsound( "zmb_perksacola_alcatraz_loop", 1 );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
wait randomfloatrange( 31, 45 );
|
||||
wait( randomfloatrange( 31, 45 ) );
|
||||
|
||||
if ( randomint( 100 ) < 15 )
|
||||
{
|
||||
self thread sndperksacolajingle();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
sndeventstingertriggers()
|
||||
{
|
||||
flag_wait( "start_zombie_round_logic" );
|
||||
triggers = getentarray( "sndMusicEventStinger", "targetname" );
|
||||
_a105 = triggers;
|
||||
_k105 = getFirstArrayKey( _a105 );
|
||||
while ( isDefined( _k105 ) )
|
||||
{
|
||||
trigger = _a105[ _k105 ];
|
||||
|
||||
foreach ( trigger in triggers )
|
||||
trigger thread sndeventstingertriggerthink();
|
||||
_k105 = getNextArrayKey( _a105, _k105 );
|
||||
}
|
||||
}
|
||||
|
||||
sndeventstingertriggerthink()
|
||||
{
|
||||
struct = getstruct( self.target, "targetname" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger" );
|
||||
|
||||
playsoundatposition( struct.script_sound, struct.origin );
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "trigger_stinger" );
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trigger_stinger" );
|
||||
wait 5;
|
||||
}
|
||||
}
|
||||
@ -128,12 +121,14 @@ sndeventtension()
|
||||
flag_wait( "start_zombie_round_logic" );
|
||||
wait 30;
|
||||
struct = spawnstruct();
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
tension = sndgettensionlevel( struct );
|
||||
waittime = tension.waittime;
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( tension.tension_level );
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( tension.tension_level );
|
||||
level thread waitfornexttension( waittime );
|
||||
|
||||
level waittill( "sndNextTensionEvent" );
|
||||
}
|
||||
}
|
||||
@ -142,34 +137,26 @@ sndgettensionlevel( struct )
|
||||
{
|
||||
tension_level = 0;
|
||||
players = getplayers();
|
||||
_a148 = players;
|
||||
_k148 = getFirstArrayKey( _a148 );
|
||||
while ( isDefined( _k148 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a148[ _k148 ];
|
||||
if ( is_true( player.laststand ) )
|
||||
{
|
||||
tension_level++;
|
||||
}
|
||||
_k148 = getNextArrayKey( _a148, _k148 );
|
||||
}
|
||||
|
||||
num_zombs = get_current_zombie_count();
|
||||
|
||||
if ( num_zombs >= 12 )
|
||||
{
|
||||
tension_level++;
|
||||
}
|
||||
|
||||
enemies = getaispeciesarray( "axis", "all" );
|
||||
_a161 = enemies;
|
||||
_k161 = getFirstArrayKey( _a161 );
|
||||
while ( isDefined( _k161 ) )
|
||||
|
||||
foreach ( enemy in enemies )
|
||||
{
|
||||
enemy = _a161[ _k161 ];
|
||||
if ( enemy.animname == "brutus_zombie" )
|
||||
{
|
||||
tension_level++;
|
||||
}
|
||||
_k161 = getNextArrayKey( _a161, _k161 );
|
||||
}
|
||||
|
||||
if ( tension_level > 2 )
|
||||
{
|
||||
struct.tension_level = "tension_high";
|
||||
@ -180,36 +167,32 @@ sndgettensionlevel( struct )
|
||||
struct.tension_level = "tension_low";
|
||||
struct.waittime = 140;
|
||||
}
|
||||
|
||||
return struct;
|
||||
}
|
||||
|
||||
waitfornexttension( time )
|
||||
{
|
||||
level endon( "sndNextTensionEvent" );
|
||||
wait time;
|
||||
wait( time );
|
||||
level notify( "sndNextTensionEvent" );
|
||||
}
|
||||
|
||||
sndboardmonitor()
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "last_board_torn", barrier_origin );
|
||||
|
||||
players = getplayers();
|
||||
_a194 = players;
|
||||
_k194 = getFirstArrayKey( _a194 );
|
||||
while ( isDefined( _k194 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a194[ _k194 ];
|
||||
if ( distancesquared( player.origin, barrier_origin ) <= 22500 )
|
||||
{
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "boards_gone" );
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "boards_gone" );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
_k194 = getNextArrayKey( _a194, _k194 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -226,190 +209,155 @@ locationstingerwait( zone_name, type )
|
||||
numcut = 0;
|
||||
level.sndlastzone = undefined;
|
||||
level thread sndlocationbetweenroundswait();
|
||||
for ( ;; )
|
||||
{
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "newzoneActive", activezone );
|
||||
while ( !sndlocationshouldplay( array, activezone ) )
|
||||
{
|
||||
|
||||
if ( !sndlocationshouldplay( array, activezone ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( is_true( level.sndroundwait ) )
|
||||
{
|
||||
}
|
||||
}
|
||||
else while ( is_true( level.sndstinger.isplaying ) )
|
||||
continue;
|
||||
else if ( is_true( level.sndstinger.isplaying ) )
|
||||
{
|
||||
level thread sndlocationqueue( activezone );
|
||||
continue;
|
||||
}
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( activezone );
|
||||
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( activezone );
|
||||
array = sndcurrentlocationarray( array, activezone, numcut, sndnorepeats );
|
||||
level.sndlastzone = activezone;
|
||||
|
||||
if ( numcut >= sndnorepeats )
|
||||
{
|
||||
numcut = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
numcut++;
|
||||
}
|
||||
|
||||
level waittill( "between_round_over" );
|
||||
|
||||
while ( is_true( level.sndroundwait ) )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
sndlocationsarray()
|
||||
{
|
||||
array = [];
|
||||
array[ 0 ] = "zone_cellblock_east";
|
||||
array[ 1 ] = "cellblock_shower";
|
||||
array[ 2 ] = "zone_infirmary";
|
||||
array[ 3 ] = "zone_citadel_stairs";
|
||||
array[ 4 ] = "zone_roof";
|
||||
array[ 5 ] = "zone_dock";
|
||||
array[ 6 ] = "zone_studio";
|
||||
array[ 7 ] = "zone_warden_office";
|
||||
array[0] = "zone_cellblock_east";
|
||||
array[1] = "cellblock_shower";
|
||||
array[2] = "zone_infirmary";
|
||||
array[3] = "zone_citadel_stairs";
|
||||
array[4] = "zone_roof";
|
||||
array[5] = "zone_dock";
|
||||
array[6] = "zone_studio";
|
||||
array[7] = "zone_warden_office";
|
||||
return array;
|
||||
}
|
||||
|
||||
sndlocationshouldplay( array, activezone )
|
||||
{
|
||||
shouldplay = 0;
|
||||
_a280 = array;
|
||||
_k280 = getFirstArrayKey( _a280 );
|
||||
while ( isDefined( _k280 ) )
|
||||
|
||||
foreach ( place in array )
|
||||
{
|
||||
place = _a280[ _k280 ];
|
||||
if ( place == activezone )
|
||||
{
|
||||
shouldplay = 1;
|
||||
}
|
||||
_k280 = getNextArrayKey( _a280, _k280 );
|
||||
}
|
||||
|
||||
if ( shouldplay == 0 )
|
||||
{
|
||||
return shouldplay;
|
||||
}
|
||||
|
||||
playersinlocal = 0;
|
||||
players = getplayers();
|
||||
_a291 = players;
|
||||
_k291 = getFirstArrayKey( _a291 );
|
||||
while ( isDefined( _k291 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a291[ _k291 ];
|
||||
if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( activezone ) )
|
||||
if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( activezone ) )
|
||||
{
|
||||
if ( !is_true( player.afterlife ) )
|
||||
{
|
||||
playersinlocal++;
|
||||
}
|
||||
}
|
||||
_k291 = getNextArrayKey( _a291, _k291 );
|
||||
}
|
||||
|
||||
if ( playersinlocal >= 1 )
|
||||
{
|
||||
shouldplay = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
shouldplay = 0;
|
||||
}
|
||||
|
||||
return shouldplay;
|
||||
}
|
||||
|
||||
sndcurrentlocationarray( current_array, activezone, numcut, max_num_removed )
|
||||
{
|
||||
if ( numcut >= max_num_removed )
|
||||
{
|
||||
current_array = sndlocationsarray();
|
||||
}
|
||||
_a314 = current_array;
|
||||
_k314 = getFirstArrayKey( _a314 );
|
||||
while ( isDefined( _k314 ) )
|
||||
|
||||
foreach ( place in current_array )
|
||||
{
|
||||
place = _a314[ _k314 ];
|
||||
if ( place == activezone )
|
||||
{
|
||||
arrayremovevalue( current_array, place );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
_k314 = getNextArrayKey( _a314, _k314 );
|
||||
}
|
||||
}
|
||||
|
||||
return current_array;
|
||||
}
|
||||
|
||||
sndlocationbetweenrounds()
|
||||
{
|
||||
level endon( "newzoneActive" );
|
||||
activezones = maps/mp/zombies/_zm_zonemgr::get_active_zone_names();
|
||||
_a331 = activezones;
|
||||
_k331 = getFirstArrayKey( _a331 );
|
||||
while ( isDefined( _k331 ) )
|
||||
{
|
||||
zone = _a331[ _k331 ];
|
||||
if ( isDefined( level.sndlastzone ) && zone == level.sndlastzone )
|
||||
{
|
||||
}
|
||||
else
|
||||
activezones = maps\mp\zombies\_zm_zonemgr::get_active_zone_names();
|
||||
|
||||
foreach ( zone in activezones )
|
||||
{
|
||||
if ( isdefined( level.sndlastzone ) && zone == level.sndlastzone )
|
||||
continue;
|
||||
|
||||
players = getplayers();
|
||||
_a337 = players;
|
||||
_k337 = getFirstArrayKey( _a337 );
|
||||
while ( isDefined( _k337 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a337[ _k337 ];
|
||||
if ( is_true( player.afterlife ) )
|
||||
continue;
|
||||
|
||||
if ( player maps\mp\zombies\_zm_zonemgr::is_player_in_zone( zone ) )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( player maps/mp/zombies/_zm_zonemgr::is_player_in_zone( zone ) )
|
||||
{
|
||||
wait 0,1;
|
||||
level notify( "newzoneActive" );
|
||||
wait 0.1;
|
||||
level notify( "newzoneActive", zone );
|
||||
return;
|
||||
}
|
||||
}
|
||||
_k337 = getNextArrayKey( _a337, _k337 );
|
||||
}
|
||||
}
|
||||
_k331 = getNextArrayKey( _a331, _k331 );
|
||||
}
|
||||
}
|
||||
|
||||
sndlocationbetweenroundswait()
|
||||
{
|
||||
flag_wait( "afterlife_start_over" );
|
||||
|
||||
while ( is_true( level.sndroundwait ) )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
while ( 1 )
|
||||
wait 0.1;
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level thread sndlocationbetweenrounds();
|
||||
|
||||
level waittill( "between_round_over" );
|
||||
|
||||
while ( is_true( level.sndroundwait ) )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
sndlocationqueue( zone )
|
||||
{
|
||||
level endon( "newzoneActive" );
|
||||
|
||||
while ( is_true( level.sndstinger.isplaying ) )
|
||||
{
|
||||
wait 0,5;
|
||||
}
|
||||
level notify( "newzoneActive" );
|
||||
wait 0.5;
|
||||
|
||||
level notify( "newzoneActive", zone );
|
||||
}
|
||||
|
||||
sndstingersetup()
|
||||
@ -421,22 +369,22 @@ sndstingersetup()
|
||||
level.sndstinger.isplaying = 0;
|
||||
level.sndstinger.states = [];
|
||||
level.sndroundwait = 1;
|
||||
createstingerstate( "door_open", "mus_event_group_03", 2,5, "ignore" );
|
||||
createstingerstate( "gondola", "mus_event_tension_strings_01", 0,1, "reject" );
|
||||
createstingerstate( "boards_gone", "mus_event_group_02", 0,5, "ignore" );
|
||||
createstingerstate( "trigger_stinger", "mus_event_group_02", 0,1, "ignore" );
|
||||
createstingerstate( "brutus_spawn", "mus_event_brutus_spawn", 1,5, "queue" );
|
||||
createstingerstate( "brutus_death", "mus_event_brutus_death", 0,1, "ignore" );
|
||||
createstingerstate( "tension_low", "mus_event_tension_piano_01", 0,75, "reject" );
|
||||
createstingerstate( "tension_high", "mus_event_tension_piano_02", 0,75, "reject" );
|
||||
createstingerstate( "zone_cellblock_east", "mus_event_location_cellblock", 0,75, "queue" );
|
||||
createstingerstate( "zone_infirmary", "mus_event_location_infirmary", 0,75, "queue" );
|
||||
createstingerstate( "zone_studio", "mus_event_location_powerroom", 0,75, "queue" );
|
||||
createstingerstate( "zone_roof", "mus_event_location_roof", 0,75, "queue" );
|
||||
createstingerstate( "cellblock_shower", "mus_event_location_shower", 0,75, "queue" );
|
||||
createstingerstate( "zone_citadel_stairs", "mus_event_location_stairwell", 0,75, "queue" );
|
||||
createstingerstate( "zone_dock", "mus_event_location_dock", 0,75, "queue" );
|
||||
createstingerstate( "zone_warden_office", "mus_event_location_warden", 0,75, "queue" );
|
||||
createstingerstate( "door_open", "mus_event_group_03", 2.5, "ignore" );
|
||||
createstingerstate( "gondola", "mus_event_tension_strings_01", 0.1, "reject" );
|
||||
createstingerstate( "boards_gone", "mus_event_group_02", 0.5, "ignore" );
|
||||
createstingerstate( "trigger_stinger", "mus_event_group_02", 0.1, "ignore" );
|
||||
createstingerstate( "brutus_spawn", "mus_event_brutus_spawn", 1.5, "queue" );
|
||||
createstingerstate( "brutus_death", "mus_event_brutus_death", 0.1, "ignore" );
|
||||
createstingerstate( "tension_low", "mus_event_tension_piano_01", 0.75, "reject" );
|
||||
createstingerstate( "tension_high", "mus_event_tension_piano_02", 0.75, "reject" );
|
||||
createstingerstate( "zone_cellblock_east", "mus_event_location_cellblock", 0.75, "queue" );
|
||||
createstingerstate( "zone_infirmary", "mus_event_location_infirmary", 0.75, "queue" );
|
||||
createstingerstate( "zone_studio", "mus_event_location_powerroom", 0.75, "queue" );
|
||||
createstingerstate( "zone_roof", "mus_event_location_roof", 0.75, "queue" );
|
||||
createstingerstate( "cellblock_shower", "mus_event_location_shower", 0.75, "queue" );
|
||||
createstingerstate( "zone_citadel_stairs", "mus_event_location_stairwell", 0.75, "queue" );
|
||||
createstingerstate( "zone_dock", "mus_event_location_dock", 0.75, "queue" );
|
||||
createstingerstate( "zone_warden_office", "mus_event_location_warden", 0.75, "queue" );
|
||||
createstingerstate( "piece_1", "mus_event_piece_1", 0, "queue" );
|
||||
createstingerstate( "piece_2", "mus_event_piece_2", 0, "queue" );
|
||||
createstingerstate( "piece_3", "mus_event_piece_3", 0, "queue" );
|
||||
@ -454,10 +402,10 @@ sndstingersetup()
|
||||
createstingerstate( "plane_crafted_4", "mus_event_plane_4", 0, "reject" );
|
||||
createstingerstate( "plane_crafted_5", "mus_event_plane_5", 0, "reject" );
|
||||
createstingerstate( "trap", "mus_event_trap", 0, "reject" );
|
||||
createstingerstate( "tomahawk_1", "mus_event_tomahawk_2", 0,5, "ignore" );
|
||||
createstingerstate( "tomahawk_2", "mus_event_tomahawk_3", 0,5, "ignore" );
|
||||
createstingerstate( "tomahawk_3", "mus_event_tomahawk_4", 0,5, "ignore" );
|
||||
createstingerstate( "quest_generic", "mus_event_quest_generic", 0,5, "reject" );
|
||||
createstingerstate( "tomahawk_1", "mus_event_tomahawk_2", 0.5, "ignore" );
|
||||
createstingerstate( "tomahawk_2", "mus_event_tomahawk_3", 0.5, "ignore" );
|
||||
createstingerstate( "tomahawk_3", "mus_event_tomahawk_4", 0.5, "ignore" );
|
||||
createstingerstate( "quest_generic", "mus_event_quest_generic", 0.5, "reject" );
|
||||
createstingerstate( "laundry_defend", "mus_laundry_defend", 0, "ignore" );
|
||||
createstingerstate( "plane_takeoff", "mus_event_plane_takeoff", 0, "ignore" );
|
||||
createstingerstate( "at_golden_gate", "mus_event_golden_gate", 0, "ignore" );
|
||||
@ -471,83 +419,76 @@ sndstingersetup()
|
||||
createstingerstate( state, alias, prewait, interrupt )
|
||||
{
|
||||
s = level.sndstinger;
|
||||
if ( !isDefined( s.states[ state ] ) )
|
||||
|
||||
if ( !isdefined( s.states[state] ) )
|
||||
{
|
||||
s.states[ state ] = spawnstruct();
|
||||
s.states[ state ].alias = alias;
|
||||
s.states[ state ].prewait = prewait;
|
||||
s.states[ state ].interrupt = interrupt;
|
||||
s.states[state] = spawnstruct();
|
||||
s.states[state].alias = alias;
|
||||
s.states[state].prewait = prewait;
|
||||
s.states[state].interrupt = interrupt;
|
||||
}
|
||||
}
|
||||
|
||||
sndplaystinger( state, player )
|
||||
{
|
||||
s = level.sndstinger;
|
||||
if ( !isDefined( s.states[ state ] ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( s.states[state] ) )
|
||||
return;
|
||||
}
|
||||
interrupt = s.states[ state ].interrupt == "ignore";
|
||||
|
||||
interrupt = s.states[state].interrupt == "ignore";
|
||||
|
||||
if ( !is_true( s.isplaying ) || is_true( interrupt ) )
|
||||
{
|
||||
if ( interrupt )
|
||||
{
|
||||
wait s.states[ state ].prewait;
|
||||
wait( s.states[state].prewait );
|
||||
playstinger( state, player, 1 );
|
||||
}
|
||||
else if ( !level.sndroundwait )
|
||||
{
|
||||
s.isplaying = 1;
|
||||
wait s.states[ state ].prewait;
|
||||
wait( s.states[state].prewait );
|
||||
playstinger( state, player, 0 );
|
||||
level notify( "sndStingerDone" );
|
||||
s.isplaying = 0;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( s.states[ state ].interrupt == "queue" )
|
||||
{
|
||||
else if ( s.states[state].interrupt == "queue" )
|
||||
level thread sndqueuestinger( state, player );
|
||||
}
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
if ( s.states[ state ].interrupt == "queue" )
|
||||
{
|
||||
|
||||
if ( s.states[state].interrupt == "queue" )
|
||||
level thread sndqueuestinger( state, player );
|
||||
}
|
||||
}
|
||||
|
||||
playstinger( state, player, ignore )
|
||||
{
|
||||
s = level.sndstinger;
|
||||
if ( !isDefined( s.states[ state ] ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( s.states[state] ) )
|
||||
return;
|
||||
}
|
||||
|
||||
if ( is_true( level.music_override ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( is_true( ignore ) )
|
||||
{
|
||||
if ( isDefined( player ) )
|
||||
{
|
||||
player playsoundtoplayer( s.states[ state ].alias, player );
|
||||
}
|
||||
if ( isdefined( player ) )
|
||||
player playsoundtoplayer( s.states[state].alias, player );
|
||||
else
|
||||
{
|
||||
s.ent playsound( s.states[ state ].alias );
|
||||
s.ent playsound( s.states[state].alias );
|
||||
}
|
||||
}
|
||||
else if ( isDefined( player ) )
|
||||
else if ( isdefined( player ) )
|
||||
{
|
||||
player playsoundtoplayer( s.states[ state ].alias, player );
|
||||
player playsoundtoplayer( s.states[state].alias, player );
|
||||
wait 8;
|
||||
}
|
||||
else
|
||||
{
|
||||
s.ent playsoundwithnotify( s.states[ state ].alias, "sndStingerDone" );
|
||||
s.ent playsoundwithnotify( s.states[state].alias, "sndStingerDone" );
|
||||
|
||||
s.ent waittill( "sndStingerDone" );
|
||||
}
|
||||
}
|
||||
@ -555,24 +496,21 @@ playstinger( state, player, ignore )
|
||||
sndqueuestinger( state, player )
|
||||
{
|
||||
s = level.sndstinger;
|
||||
|
||||
if ( is_true( s.queue ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
s.queue = 1;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( is_true( level.sndroundwait ) || is_true( s.isplaying ) )
|
||||
{
|
||||
wait 0,5;
|
||||
continue;
|
||||
}
|
||||
wait 0.5;
|
||||
else
|
||||
{
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
||||
level thread sndplaystinger( state, player );
|
||||
s.queue = 0;
|
||||
}
|
||||
@ -583,9 +521,11 @@ sndstingerroundwait()
|
||||
flag_wait( "afterlife_start_over" );
|
||||
wait 28;
|
||||
level.sndroundwait = 0;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "end_of_round" );
|
||||
|
||||
level notify( "sndStopBrutusLoop" );
|
||||
level thread sndstingerroundwait_start();
|
||||
}
|
||||
@ -594,14 +534,16 @@ sndstingerroundwait()
|
||||
sndstingerroundwait_start()
|
||||
{
|
||||
level.sndroundwait = 1;
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
level thread sndstingerroundwait_end();
|
||||
}
|
||||
|
||||
sndstingerroundwait_end()
|
||||
{
|
||||
level endon( "end_of_round" );
|
||||
|
||||
level waittill( "between_round_over" );
|
||||
|
||||
wait 28;
|
||||
level.sndroundwait = 0;
|
||||
}
|
||||
@ -609,31 +551,30 @@ sndstingerroundwait_end()
|
||||
sndlastlifesetup()
|
||||
{
|
||||
flag_wait( "start_zombie_round_logic" );
|
||||
|
||||
if ( flag( "solo_game" ) )
|
||||
{
|
||||
level thread sndlastlife_solo();
|
||||
}
|
||||
else
|
||||
{
|
||||
level thread sndlastlife_multi();
|
||||
}
|
||||
}
|
||||
|
||||
sndlastlife_solo()
|
||||
{
|
||||
return;
|
||||
player = getplayers()[ 0 ];
|
||||
while ( 1 )
|
||||
player = getplayers()[0];
|
||||
|
||||
while ( true )
|
||||
{
|
||||
player waittill( "sndLifeGone" );
|
||||
|
||||
if ( player.lives == 0 )
|
||||
{
|
||||
while ( is_true( player.afterlife ) )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
wait 0.1;
|
||||
|
||||
level notify( "sndStopBrutusLoop" );
|
||||
level thread maps/mp/zombies/_zm_audio::change_zombie_music( "last_life" );
|
||||
level thread maps\mp\zombies\_zm_audio::change_zombie_music( "last_life" );
|
||||
|
||||
level waittill( "end_of_round" );
|
||||
}
|
||||
}
|
||||
@ -644,24 +585,26 @@ sndlastlife_multi()
|
||||
level endon( "end_of_round" );
|
||||
level thread sndlastlife_multi_reset();
|
||||
sndplayersdead = 0;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "bleed_out" );
|
||||
|
||||
sndplayersdead++;
|
||||
players = getplayers();
|
||||
if ( ( players.size - sndplayersdead ) <= 1 )
|
||||
|
||||
if ( players.size - sndplayersdead <= 1 )
|
||||
{
|
||||
last_alive = sndlastlife_multi_getlastplayer();
|
||||
|
||||
while ( last_alive.lives > 0 )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
wait 0.1;
|
||||
|
||||
while ( is_true( last_alive.afterlife ) )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
wait 0.1;
|
||||
|
||||
level notify( "sndStopBrutusLoop" );
|
||||
level thread maps/mp/zombies/_zm_audio::change_zombie_music( "last_life" );
|
||||
level thread maps\mp\zombies\_zm_audio::change_zombie_music( "last_life" );
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -670,55 +613,50 @@ sndlastlife_multi()
|
||||
sndlastlife_multi_getlastplayer()
|
||||
{
|
||||
level endon( "end_of_round" );
|
||||
wait 0,5;
|
||||
wait 0.5;
|
||||
players = getplayers();
|
||||
_a645 = players;
|
||||
_k645 = getFirstArrayKey( _a645 );
|
||||
while ( isDefined( _k645 ) )
|
||||
|
||||
foreach ( dude in players )
|
||||
{
|
||||
dude = _a645[ _k645 ];
|
||||
if ( dude.sessionstate == "spectator" )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
continue;
|
||||
|
||||
return dude;
|
||||
}
|
||||
_k645 = getNextArrayKey( _a645, _k645 );
|
||||
}
|
||||
}
|
||||
|
||||
sndlastlife_multi_reset()
|
||||
{
|
||||
level waittill( "end_of_round" );
|
||||
|
||||
level thread sndlastlife_multi();
|
||||
}
|
||||
|
||||
sndmusicegg()
|
||||
{
|
||||
origins = [];
|
||||
origins[ 0 ] = ( 338, 10673, 1378 );
|
||||
origins[ 1 ] = ( 2897, 9475, 1564 );
|
||||
origins[ 2 ] = ( -1157, 5217, -72 );
|
||||
origins[0] = ( 338, 10673, 1378 );
|
||||
origins[1] = ( 2897, 9475, 1564 );
|
||||
origins[2] = ( -1157, 5217, -72 );
|
||||
level.meteor_counter = 0;
|
||||
level.music_override = 0;
|
||||
i = 0;
|
||||
while ( i < origins.size )
|
||||
{
|
||||
level thread sndmusicegg_wait( origins[ i ] );
|
||||
i++;
|
||||
}
|
||||
|
||||
for ( i = 0; i < origins.size; i++ )
|
||||
level thread sndmusicegg_wait( origins[i] );
|
||||
}
|
||||
|
||||
sndmusicegg_wait( bottle_origin )
|
||||
{
|
||||
temp_ent = spawn( "script_origin", bottle_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 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", 170 );
|
||||
@ -726,7 +664,7 @@ sndmusicegg_wait( bottle_origin )
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 1,5;
|
||||
wait 1.5;
|
||||
temp_ent delete();
|
||||
}
|
||||
}
|
||||
@ -734,10 +672,9 @@ sndmusicegg_wait( bottle_origin )
|
||||
sndmusicegg_override()
|
||||
{
|
||||
if ( is_true( level.music_override ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
sndmuseggplay( ent, alias, time )
|
||||
@ -748,7 +685,7 @@ sndmuseggplay( ent, alias, time )
|
||||
level thread sndeggmusicwait( time );
|
||||
level waittill_either( "end_game", "sndSongDone" );
|
||||
ent stopsounds();
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
ent delete();
|
||||
level.music_override = 0;
|
||||
}
|
||||
@ -756,6 +693,6 @@ sndmuseggplay( ent, alias, time )
|
||||
sndeggmusicwait( time )
|
||||
{
|
||||
level endon( "end_game" );
|
||||
wait time;
|
||||
wait( time );
|
||||
level notify( "sndSongDone" );
|
||||
}
|
||||
|
@ -1,69 +1,71 @@
|
||||
//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 )
|
||||
{
|
||||
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();
|
||||
|
||||
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" );
|
||||
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();
|
||||
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();
|
||||
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 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();
|
||||
@ -72,24 +74,25 @@ main() //checked changed to match cerberus output
|
||||
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" );
|
||||
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 );
|
||||
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 )
|
||||
if ( isdefined( player.afterlife ) && !player.afterlife )
|
||||
{
|
||||
player thread fake_kill_player( n_start_pos );
|
||||
n_start_pos++;
|
||||
@ -97,26 +100,28 @@ give_afterlife() //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
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" ];
|
||||
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 );
|
||||
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" );
|
||||
@ -127,7 +132,8 @@ afterlife_tutorial() //checked matches cerberus output
|
||||
waittill_notify_or_timeout( "stop_tutorial", 5 );
|
||||
self thread destroy_tutorial_message();
|
||||
wait 1;
|
||||
if ( isDefined( self.afterlife ) && self.afterlife )
|
||||
|
||||
if ( isdefined( self.afterlife ) && self.afterlife )
|
||||
{
|
||||
self create_tutorial_message( &"ZM_PRISON_AFTERLIFE_HOWTO_2" );
|
||||
self thread afterlife_tutorial_jump_watch();
|
||||
@ -136,105 +142,109 @@ afterlife_tutorial() //checked matches cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
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() )
|
||||
{
|
||||
|
||||
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() )
|
||||
{
|
||||
|
||||
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 )
|
||||
{
|
||||
|
||||
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 )
|
||||
{
|
||||
|
||||
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 ) ) )
|
||||
|
||||
if ( self.origin == cell_powerup.origin + vectorscale( ( 0, 0, 1 ), 40.0 ) )
|
||||
{
|
||||
m_door = getent( "powerup_door", "targetname" );
|
||||
if ( !isDefined( m_door.opened ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
|
||||
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 ) ) )
|
||||
|
||||
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 0;
|
||||
}
|
||||
|
||||
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 ) ) )
|
||||
|
||||
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 0;
|
||||
|
||||
if ( !isdefined( m_door.opened ) )
|
||||
return false;
|
||||
}
|
||||
}
|
||||
return 1;
|
||||
|
||||
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 );
|
||||
}
|
||||
|
||||
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;
|
||||
@ -242,10 +252,12 @@ afterlife_cell_door_1() //checked matches cerberus output
|
||||
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;
|
||||
@ -253,52 +265,50 @@ afterlife_cell_door_2() //checked matches cerberus output
|
||||
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 );
|
||||
}
|
||||
|
||||
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 );
|
||||
}
|
||||
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" );
|
||||
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 );
|
||||
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 );
|
||||
}
|
||||
}
|
||||
|
||||
if ( !flag( "generator_challenge_completed" ) )
|
||||
exploder( 2000 );
|
||||
}
|
||||
|
@ -1,13 +1,15 @@
|
||||
#include maps/mp/zm_alcatraz_travel;
|
||||
#include maps/mp/zm_alcatraz_sq_vo;
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/zombies/_zm_unitrigger;
|
||||
#include maps/mp/zombies/_zm_craftables;
|
||||
#include maps/mp/zm_alcatraz_utility;
|
||||
#include maps/mp/zombies/_zm_weapons;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
// 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_alcatraz_utility;
|
||||
#include maps\mp\zombies\_zm_craftables;
|
||||
#include maps\mp\zombies\_zm_unitrigger;
|
||||
#include maps\mp\zombies\_zm_audio;
|
||||
#include maps\mp\zm_alcatraz_sq_vo;
|
||||
#include maps\mp\zm_alcatraz_travel;
|
||||
|
||||
init_craftables()
|
||||
{
|
||||
@ -16,10 +18,10 @@ init_craftables()
|
||||
register_clientfields();
|
||||
add_zombie_craftable( "alcatraz_shield_zm", &"ZM_PRISON_CRAFT_RIOT", undefined, &"ZOMBIE_BOUGHT_RIOT", undefined, 1 );
|
||||
add_zombie_craftable_vox_category( "alcatraz_shield_zm", "build_zs" );
|
||||
make_zombie_craftable_open( "alcatraz_shield_zm", "t6_wpn_zmb_shield_dlc2_dmg0_world", vectorScale( ( 0, 0, 0 ), 90 ), ( 0, 0, level.riotshield_placement_zoffset ) );
|
||||
make_zombie_craftable_open( "alcatraz_shield_zm", "t6_wpn_zmb_shield_dlc2_dmg0_world", vectorscale( ( 0, -1, 0 ), 90.0 ), ( 0, 0, level.riotshield_placement_zoffset ) );
|
||||
add_zombie_craftable( "packasplat", &"ZM_PRISON_CRAFT_PACKASPLAT", undefined, undefined, ::onfullycrafted_packasplat, 1 );
|
||||
add_zombie_craftable_vox_category( "packasplat", "build_bsm" );
|
||||
make_zombie_craftable_open( "packasplat", "p6_anim_zm_al_packasplat", vectorScale( ( 0, 0, 0 ), 90 ) );
|
||||
make_zombie_craftable_open( "packasplat", "p6_anim_zm_al_packasplat", vectorscale( ( 0, -1, 0 ), 90.0 ) );
|
||||
level.craftable_piece_swap_allowed = 0;
|
||||
add_zombie_craftable( "quest_key1" );
|
||||
add_zombie_craftable( "plane", &"ZM_PRISON_CRAFT_PLANE", &"ZM_PRISON_CRAFTING_PLANE", undefined, ::onfullycrafted_plane );
|
||||
@ -33,13 +35,13 @@ include_key_craftable( craftable_name, model_name )
|
||||
part = spawnstruct();
|
||||
part.name = craftable_name;
|
||||
part add_craftable_piece( part_key );
|
||||
part.triggerthink = ::maps/mp/zombies/_zm_craftables::setup_craftable_pieces;
|
||||
part.triggerthink = maps\mp\zombies\_zm_craftables::setup_craftable_pieces;
|
||||
include_craftable( part );
|
||||
}
|
||||
|
||||
include_craftables()
|
||||
{
|
||||
level.zombie_include_craftables[ "open_table" ].custom_craftablestub_update_prompt = ::prison_open_craftablestub_update_prompt;
|
||||
level.zombie_include_craftables["open_table"].custom_craftablestub_update_prompt = ::prison_open_craftablestub_update_prompt;
|
||||
craftable_name = "alcatraz_shield_zm";
|
||||
riotshield_dolly = generate_zombie_craftable_piece( craftable_name, "dolly", "t6_wpn_zmb_shield_dlc2_dolly", 32, 64, 0, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_dolly", 1, "build_zs" );
|
||||
riotshield_door = generate_zombie_craftable_piece( craftable_name, "door", "t6_wpn_zmb_shield_dlc2_door", 48, 15, 25, undefined, ::onpickup_common, ::ondrop_common, undefined, undefined, undefined, undefined, "piece_riotshield_door", 1, "build_zs" );
|
||||
@ -70,6 +72,7 @@ include_craftables()
|
||||
plane_engine = generate_zombie_craftable_piece( craftable_name, "engine", "veh_t6_dlc_zombie_part_engine", 32, 62, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 3 );
|
||||
plane_steering = generate_zombie_craftable_piece( craftable_name, "steering", "veh_t6_dlc_zombie_part_control", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_control_mechanism", undefined, 4 );
|
||||
plane_rigging = generate_zombie_craftable_piece( craftable_name, "rigging", "veh_t6_dlc_zombie_part_rigging", 32, 15, 0, undefined, ::onpickup_plane, ::ondrop_plane, ::oncrafted_plane, undefined, "tag_origin", undefined, 5 );
|
||||
|
||||
if ( level.is_forever_solo_game )
|
||||
{
|
||||
plane_cloth.is_shared = 1;
|
||||
@ -83,6 +86,7 @@ include_craftables()
|
||||
plane_steering.client_field_state = undefined;
|
||||
plane_rigging.client_field_state = undefined;
|
||||
}
|
||||
|
||||
plane_cloth.pickup_alias = "sidequest_sheets";
|
||||
plane_fueltanks.pickup_alias = "sidequest_oxygen";
|
||||
plane_engine.pickup_alias = "sidequest_engine";
|
||||
@ -104,6 +108,7 @@ include_craftables()
|
||||
refuelable_plane_gas3 = generate_zombie_craftable_piece( craftable_name, "fuel3", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 8 );
|
||||
refuelable_plane_gas4 = generate_zombie_craftable_piece( craftable_name, "fuel4", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 9 );
|
||||
refuelable_plane_gas5 = generate_zombie_craftable_piece( craftable_name, "fuel5", "accessories_gas_canister_1", 32, 15, 0, undefined, ::onpickup_fuel, ::ondrop_fuel, ::oncrafted_fuel, undefined, undefined, undefined, 10 );
|
||||
|
||||
if ( level.is_forever_solo_game )
|
||||
{
|
||||
refuelable_plane_gas1.is_shared = 1;
|
||||
@ -117,6 +122,7 @@ include_craftables()
|
||||
refuelable_plane_gas4.client_field_state = undefined;
|
||||
refuelable_plane_gas5.client_field_state = undefined;
|
||||
}
|
||||
|
||||
refuelable_plane = spawnstruct();
|
||||
refuelable_plane.name = craftable_name;
|
||||
refuelable_plane add_craftable_piece( refuelable_plane_gas1 );
|
||||
@ -156,24 +162,21 @@ register_clientfields()
|
||||
|
||||
riotshieldcraftable()
|
||||
{
|
||||
maps/mp/zombies/_zm_craftables::craftable_trigger_think( "riotshield_zm_craftable_trigger", "alcatraz_shield_zm", "alcatraz_shield_zm", &"ZOMBIE_GRAB_RIOTSHIELD", 1, 1 );
|
||||
maps\mp\zombies\_zm_craftables::craftable_trigger_think( "riotshield_zm_craftable_trigger", "alcatraz_shield_zm", "alcatraz_shield_zm", &"ZOMBIE_GRAB_RIOTSHIELD", 1, 1 );
|
||||
}
|
||||
|
||||
packasplatcraftable()
|
||||
{
|
||||
maps/mp/zombies/_zm_craftables::craftable_trigger_think( "packasplat_craftable_trigger", "packasplat", "packasplat", undefined, 1, 0 );
|
||||
maps\mp\zombies\_zm_craftables::craftable_trigger_think( "packasplat_craftable_trigger", "packasplat", "packasplat", undefined, 1, 0 );
|
||||
}
|
||||
|
||||
planecraftable()
|
||||
{
|
||||
level thread alcatraz_craftable_trigger_think( "plane_craftable_trigger", "plane", "plane", "", 1, 0 );
|
||||
level setclientfield( "quest_plane_craft_complete", 0 );
|
||||
i = 1;
|
||||
while ( i <= 5 )
|
||||
{
|
||||
|
||||
for ( i = 1; i <= 5; i++ )
|
||||
level setclientfield( "quest_state" + i, 2 );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
planefuelable()
|
||||
@ -186,12 +189,10 @@ planefuelable_think()
|
||||
flag_wait( "spawn_fuel_tanks" );
|
||||
t_plane_fuelable = getent( "plane_fuelable_trigger", "targetname" );
|
||||
t_plane_fuelable trigger_on();
|
||||
i = 1;
|
||||
while ( i <= 5 )
|
||||
{
|
||||
|
||||
for ( i = 1; i <= 5; i++ )
|
||||
level setclientfield( "quest_state" + i, 5 );
|
||||
i++;
|
||||
}
|
||||
|
||||
alcatraz_craftable_trigger_think( "plane_fuelable_trigger", "refuelable_plane", "refuelable_plane", "", 1, 0 );
|
||||
}
|
||||
|
||||
@ -219,8 +220,10 @@ ondisconnect_common( player )
|
||||
level endon( "crafted_" + self.piecename );
|
||||
level endon( "dropped_" + self.piecename );
|
||||
player_num = player getentitynumber() + 1;
|
||||
|
||||
player waittill( "disconnect" );
|
||||
switch( self.piecename )
|
||||
|
||||
switch ( self.piecename )
|
||||
{
|
||||
case "cloth":
|
||||
field_name = "quest_state1";
|
||||
@ -243,59 +246,51 @@ ondisconnect_common( player )
|
||||
in_game_checklist_plane_piece_dropped( "rigging" );
|
||||
break;
|
||||
}
|
||||
|
||||
level setclientfield( field_name, 2 );
|
||||
level setclientfield( "piece_player" + player_num, 0 );
|
||||
m_plane_piece = get_craftable_piece_model( "plane", self.piecename );
|
||||
if ( isDefined( m_plane_piece ) )
|
||||
{
|
||||
playfxontag( level._effect[ "quest_item_glow" ], m_plane_piece, "tag_origin" );
|
||||
}
|
||||
|
||||
if ( isdefined( m_plane_piece ) )
|
||||
playfxontag( level._effect["quest_item_glow"], m_plane_piece, "tag_origin" );
|
||||
|
||||
m_fuel_can = get_craftable_piece_model( "refuelable_plane", self.piecename );
|
||||
if ( isDefined( m_fuel_can ) )
|
||||
{
|
||||
playfxontag( level._effect[ "quest_item_glow" ], m_fuel_can, "tag_origin" );
|
||||
}
|
||||
|
||||
if ( isdefined( m_fuel_can ) )
|
||||
playfxontag( level._effect["quest_item_glow"], m_fuel_can, "tag_origin" );
|
||||
}
|
||||
|
||||
prison_open_craftablestub_update_prompt( player, b_set_hint_string_now, trigger )
|
||||
{
|
||||
valid = maps/mp/zombies/_zm_craftables::open_craftablestub_update_prompt( player );
|
||||
valid = maps\mp\zombies\_zm_craftables::open_craftablestub_update_prompt( player );
|
||||
return valid;
|
||||
}
|
||||
|
||||
onpickup_key( player )
|
||||
{
|
||||
flag_set( "key_found" );
|
||||
|
||||
if ( level.is_master_key_west )
|
||||
{
|
||||
level clientnotify( "fxanim_west_pulley_up_start" );
|
||||
}
|
||||
else
|
||||
{
|
||||
level clientnotify( "fxanim_east_pulley_up_start" );
|
||||
}
|
||||
|
||||
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
||||
_a429 = a_m_checklist;
|
||||
_k429 = getFirstArrayKey( _a429 );
|
||||
while ( isDefined( _k429 ) )
|
||||
|
||||
foreach ( m_checklist in a_m_checklist )
|
||||
{
|
||||
m_checklist = _a429[ _k429 ];
|
||||
m_checklist showpart( "j_check_key" );
|
||||
m_checklist showpart( "j_strike_key" );
|
||||
_k429 = getNextArrayKey( _a429, _k429 );
|
||||
}
|
||||
|
||||
a_door_structs = getstructarray( "quest_trigger", "script_noteworthy" );
|
||||
_a437 = a_door_structs;
|
||||
_k437 = getFirstArrayKey( _a437 );
|
||||
while ( isDefined( _k437 ) )
|
||||
|
||||
foreach ( struct in a_door_structs )
|
||||
{
|
||||
struct = _a437[ _k437 ];
|
||||
if ( isDefined( struct.unitrigger_stub ) )
|
||||
{
|
||||
struct.unitrigger_stub maps/mp/zombies/_zm_unitrigger::run_visibility_function_for_all_triggers();
|
||||
}
|
||||
_k437 = getNextArrayKey( _a437, _k437 );
|
||||
if ( isdefined( struct.unitrigger_stub ) )
|
||||
struct.unitrigger_stub maps\mp\zombies\_zm_unitrigger::run_visibility_function_for_all_triggers();
|
||||
}
|
||||
|
||||
player playsound( "evt_key_pickup" );
|
||||
player thread do_player_general_vox( "quest", "sidequest_key_response", undefined, 100 );
|
||||
level setclientfield( "piece_key_warden", 1 );
|
||||
@ -315,8 +310,9 @@ ondrop_plane( player )
|
||||
level.plane_pieces_picked_up -= 1;
|
||||
self droponmover( player );
|
||||
self.piece_owner = undefined;
|
||||
playfxontag( level._effect[ "quest_item_glow" ], self.model, "tag_origin" );
|
||||
switch( self.piecename )
|
||||
playfxontag( level._effect["quest_item_glow"], self.model, "tag_origin" );
|
||||
|
||||
switch ( self.piecename )
|
||||
{
|
||||
case "cloth":
|
||||
field_name = "quest_state1";
|
||||
@ -339,7 +335,9 @@ ondrop_plane( player )
|
||||
in_game_checklist_plane_piece_dropped( "rigging" );
|
||||
break;
|
||||
}
|
||||
|
||||
level setclientfield( field_name, 2 );
|
||||
|
||||
if ( !level.is_forever_solo_game )
|
||||
{
|
||||
player_num = player getentitynumber() + 1;
|
||||
@ -352,27 +350,30 @@ onpickup_plane( player )
|
||||
/#
|
||||
println( "ZM >> Common part callback onPickup()" );
|
||||
#/
|
||||
if ( !isDefined( level.plane_pieces_picked_up ) )
|
||||
if ( !isdefined( level.plane_pieces_picked_up ) )
|
||||
{
|
||||
level.plane_pieces_picked_up = 0;
|
||||
level.sndplanepieces = 1;
|
||||
}
|
||||
|
||||
level.plane_pieces_picked_up += 1;
|
||||
|
||||
if ( level.plane_pieces_picked_up == 5 )
|
||||
{
|
||||
level thread roof_nag_vo();
|
||||
}
|
||||
|
||||
if ( level.sndplanepieces == level.plane_pieces_picked_up )
|
||||
{
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "piece_" + level.sndplanepieces );
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "piece_" + level.sndplanepieces );
|
||||
level.sndplanepieces++;
|
||||
}
|
||||
|
||||
player playsound( "zmb_craftable_pickup" );
|
||||
vo_alias_call = undefined;
|
||||
vo_alias_response = undefined;
|
||||
self pickupfrommover();
|
||||
self.piece_owner = player;
|
||||
switch( self.piecename )
|
||||
|
||||
switch ( self.piecename )
|
||||
{
|
||||
case "cloth":
|
||||
field_name = "quest_state1";
|
||||
@ -396,17 +397,20 @@ onpickup_plane( player )
|
||||
in_game_checklist_plane_piece_picked_up( "rigging" );
|
||||
break;
|
||||
}
|
||||
|
||||
level setclientfield( field_name, 3 );
|
||||
|
||||
if ( !level.is_forever_solo_game )
|
||||
{
|
||||
player_num = player getentitynumber() + 1;
|
||||
level setclientfield( "piece_player" + player_num, self.client_field_state );
|
||||
}
|
||||
|
||||
vo_alias_call = self check_if_newly_found();
|
||||
if ( isDefined( vo_alias_call ) )
|
||||
{
|
||||
|
||||
if ( isdefined( vo_alias_call ) )
|
||||
level thread play_plane_piece_call_and_response_vo( player, vo_alias_call );
|
||||
}
|
||||
|
||||
self thread ondisconnect_common( player );
|
||||
}
|
||||
|
||||
@ -414,7 +418,7 @@ check_if_newly_found()
|
||||
{
|
||||
if ( !flag( self.piecename + "_found" ) )
|
||||
{
|
||||
switch( self.piecename )
|
||||
switch ( self.piecename )
|
||||
{
|
||||
case "fueltanks":
|
||||
vo_alias_call = "sidequest_oxygen";
|
||||
@ -432,12 +436,13 @@ check_if_newly_found()
|
||||
vo_alias_call = "sidequest_rigging";
|
||||
break;
|
||||
}
|
||||
|
||||
level.n_plane_pieces_found++;
|
||||
flag_set( self.piecename + "_found" );
|
||||
|
||||
if ( self.piecename == "cloth" )
|
||||
{
|
||||
level clientnotify( "fxanim_dryer_hide_start" );
|
||||
}
|
||||
|
||||
return vo_alias_call;
|
||||
}
|
||||
}
|
||||
@ -448,32 +453,34 @@ play_plane_piece_call_and_response_vo( player, vo_alias_call )
|
||||
player endon( "disconnect" );
|
||||
n_response_range = 1500;
|
||||
players = getplayers();
|
||||
|
||||
if ( !flag( "story_vo_playing" ) )
|
||||
{
|
||||
flag_set( "story_vo_playing" );
|
||||
player do_player_general_vox( "quest", vo_alias_call, undefined, 100 );
|
||||
wait 5;
|
||||
|
||||
if ( players.size > 1 )
|
||||
{
|
||||
arrayremovevalue( players, player );
|
||||
closest_other_player = getclosest( player.origin, players );
|
||||
if ( isDefined( closest_other_player ) )
|
||||
|
||||
if ( isdefined( closest_other_player ) )
|
||||
{
|
||||
n_dist = distance( player.origin, closest_other_player.origin );
|
||||
if ( isDefined( closest_other_player ) && n_dist < n_response_range )
|
||||
|
||||
if ( isdefined( closest_other_player ) && n_dist < n_response_range )
|
||||
{
|
||||
if ( level.n_plane_pieces_found < 5 )
|
||||
{
|
||||
vo_alias_response = "sidequest_parts" + level.n_plane_pieces_found + "_prog";
|
||||
}
|
||||
else
|
||||
{
|
||||
vo_alias_response = "sidequest_all_parts";
|
||||
}
|
||||
|
||||
closest_other_player do_player_general_vox( "quest", vo_alias_response, undefined, 100 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
flag_clear( "story_vo_playing" );
|
||||
}
|
||||
}
|
||||
@ -485,37 +492,25 @@ roof_nag_vo()
|
||||
zone_roof = getent( "zone_roof", "targetname" );
|
||||
zone_roof_infirmary = getent( "zone_roof_infirmary", "targetname" );
|
||||
n_roof_nag_wait = 60;
|
||||
n_roof_nag_max_times = 3;
|
||||
while ( !flag( "plane_built" ) && n_roof_nag_max_times > 0 )
|
||||
|
||||
for ( n_roof_nag_max_times = 3; !flag( "plane_built" ) && n_roof_nag_max_times > 0; n_roof_nag_max_times-- )
|
||||
{
|
||||
wait n_roof_nag_wait;
|
||||
wait( n_roof_nag_wait );
|
||||
b_is_a_player_on_the_roof = 0;
|
||||
players = getplayers();
|
||||
_a696 = players;
|
||||
_k696 = getFirstArrayKey( _a696 );
|
||||
while ( isDefined( _k696 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a696[ _k696 ];
|
||||
if ( player istouching( zone_roof ) || player istouching( zone_roof_infirmary ) )
|
||||
{
|
||||
b_is_a_player_on_the_roof = 1;
|
||||
}
|
||||
_k696 = getNextArrayKey( _a696, _k696 );
|
||||
}
|
||||
if ( !b_is_a_player_on_the_roof )
|
||||
{
|
||||
if ( level.plane_pieces_picked_up == 5 )
|
||||
{
|
||||
player = players[ randomintrange( 0, players.size ) ];
|
||||
if ( isDefined( player ) )
|
||||
{
|
||||
player do_player_general_vox( "quest", "sidequest_roof_nag", undefined, 100 );
|
||||
n_roof_nag_wait *= 1,5;
|
||||
n_roof_nag_max_times--;
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
asm_cond( !b_is_a_player_on_the_roof, loc_2E53 );
|
||||
asm_cond( level.plane_pieces_picked_up == 5, loc_2E53 );
|
||||
player = players[randomintrange( 0, players.size )];
|
||||
asm_cond( isdefined( player ), loc_2E53 );
|
||||
player do_player_general_vox( "quest", "sidequest_roof_nag", undefined, 100 );
|
||||
n_roof_nag_wait *= 1.5;
|
||||
}
|
||||
}
|
||||
|
||||
@ -538,41 +533,38 @@ oncrafted_plane( player )
|
||||
plane_craftable hidepart( "tag_engine_ground" );
|
||||
plane_craftable hidepart( "tag_clothes_ground" );
|
||||
plane_craftable hidepart( "tag_fuel_hose" );
|
||||
if ( !isDefined( level.sndplanecrafted ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.sndplanecrafted ) )
|
||||
level.sndplanecrafted = 0;
|
||||
}
|
||||
|
||||
level.sndplanecrafted++;
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "plane_crafted_" + level.sndplanecrafted );
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "plane_crafted_" + level.sndplanecrafted );
|
||||
|
||||
if ( is_part_crafted( "plane", "rigging" ) )
|
||||
{
|
||||
plane_craftable showpart( "tag_support_upper" );
|
||||
|
||||
if ( is_part_crafted( "plane", "cloth" ) )
|
||||
{
|
||||
plane_craftable showpart( "tag_wing_skins_up" );
|
||||
}
|
||||
|
||||
if ( is_part_crafted( "plane", "engine" ) )
|
||||
{
|
||||
plane_craftable showpart( "tag_engines_up" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
plane_craftable showpart( "tag_wings_down" );
|
||||
|
||||
if ( is_part_crafted( "plane", "cloth" ) )
|
||||
{
|
||||
m_plane_hideable_clothes_pile show();
|
||||
}
|
||||
|
||||
if ( is_part_crafted( "plane", "engine" ) )
|
||||
{
|
||||
m_plane_hideable_engine show();
|
||||
}
|
||||
}
|
||||
|
||||
if ( is_part_crafted( "plane", "steering" ) && is_part_crafted( "plane", "fueltanks" ) )
|
||||
{
|
||||
plane_craftable showpart( "tag_fuel_hose" );
|
||||
}
|
||||
switch( self.piecename )
|
||||
|
||||
switch ( self.piecename )
|
||||
{
|
||||
case "cloth":
|
||||
field_name = "quest_state1";
|
||||
@ -595,7 +587,9 @@ oncrafted_plane( player )
|
||||
in_game_checklist_plane_piece_crafted( "rigging" );
|
||||
break;
|
||||
}
|
||||
|
||||
level setclientfield( field_name, 4 );
|
||||
|
||||
if ( !level.is_forever_solo_game )
|
||||
{
|
||||
player_num = player getentitynumber() + 1;
|
||||
@ -607,13 +601,12 @@ ondrop_fuel( player )
|
||||
{
|
||||
level notify( "dropped_" + self.piecename );
|
||||
self.piece_owner = undefined;
|
||||
playfxontag( level._effect[ "quest_item_glow" ], self.model, "tag_origin" );
|
||||
if ( isDefined( level.sndfuelpieces ) )
|
||||
{
|
||||
playfxontag( level._effect["quest_item_glow"], self.model, "tag_origin" );
|
||||
|
||||
if ( isdefined( level.sndfuelpieces ) )
|
||||
level.sndfuelpieces--;
|
||||
|
||||
}
|
||||
switch( self.piecename )
|
||||
switch ( self.piecename )
|
||||
{
|
||||
case "fuel1":
|
||||
field_name = "quest_state1";
|
||||
@ -631,7 +624,9 @@ ondrop_fuel( player )
|
||||
field_name = "quest_state5";
|
||||
break;
|
||||
}
|
||||
|
||||
level setclientfield( field_name, 5 );
|
||||
|
||||
if ( !level.is_forever_solo_game )
|
||||
{
|
||||
player_num = player getentitynumber() + 1;
|
||||
@ -642,19 +637,19 @@ ondrop_fuel( player )
|
||||
onpickup_fuel( player )
|
||||
{
|
||||
player playsound( "zmb_craftable_pickup" );
|
||||
if ( !isDefined( level.sndfuelpieces ) || level.sndfuelpieces >= 5 )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.sndfuelpieces ) || level.sndfuelpieces >= 5 )
|
||||
level.sndfuelpieces = 0;
|
||||
}
|
||||
|
||||
level.sndfuelpieces++;
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "gas_" + level.sndfuelpieces );
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "gas_" + level.sndfuelpieces );
|
||||
self pickupfrommover();
|
||||
self.piece_owner = player;
|
||||
if ( isDefined( player ) )
|
||||
{
|
||||
|
||||
if ( isdefined( player ) )
|
||||
player do_player_general_vox( "quest", "fuel_pickup", undefined, 100 );
|
||||
}
|
||||
switch( self.piecename )
|
||||
|
||||
switch ( self.piecename )
|
||||
{
|
||||
case "fuel1":
|
||||
field_name = "quest_state1";
|
||||
@ -672,12 +667,15 @@ onpickup_fuel( player )
|
||||
field_name = "quest_state5";
|
||||
break;
|
||||
}
|
||||
|
||||
level setclientfield( field_name, 6 );
|
||||
|
||||
if ( !level.is_forever_solo_game )
|
||||
{
|
||||
player_num = player getentitynumber() + 1;
|
||||
level setclientfield( "piece_player" + player_num, self.client_field_state );
|
||||
}
|
||||
|
||||
self thread ondisconnect_common( player );
|
||||
}
|
||||
|
||||
@ -685,7 +683,8 @@ oncrafted_fuel( player )
|
||||
{
|
||||
level notify( "crafted_" + self.piecename );
|
||||
level.n_plane_fuel_count++;
|
||||
switch( self.piecename )
|
||||
|
||||
switch ( self.piecename )
|
||||
{
|
||||
case "fuel1":
|
||||
field_name = "quest_state1";
|
||||
@ -703,7 +702,9 @@ oncrafted_fuel( player )
|
||||
field_name = "quest_state5";
|
||||
break;
|
||||
}
|
||||
|
||||
level setclientfield( field_name, 7 );
|
||||
|
||||
if ( !level.is_forever_solo_game )
|
||||
{
|
||||
player_num = player getentitynumber() + 1;
|
||||
@ -714,7 +715,7 @@ oncrafted_fuel( player )
|
||||
onfullycrafted_plane( player )
|
||||
{
|
||||
flag_set( "plane_built" );
|
||||
level thread maps/mp/zm_alcatraz_sq_vo::escape_flight_vo();
|
||||
level thread maps\mp\zm_alcatraz_sq_vo::escape_flight_vo();
|
||||
level notify( "roof_nag_vo" );
|
||||
level setclientfield( "quest_plane_craft_complete", 1 );
|
||||
return 0;
|
||||
@ -733,7 +734,7 @@ onfullycrafted_packasplat( player )
|
||||
onfullycrafted_refueled( player )
|
||||
{
|
||||
flag_set( "plane_built" );
|
||||
level thread maps/mp/zm_alcatraz_sq_vo::escape_flight_vo();
|
||||
level thread maps\mp\zm_alcatraz_sq_vo::escape_flight_vo();
|
||||
level notify( "roof_nag_vo" );
|
||||
thread onfullycrafted_refueled_think( player );
|
||||
return 0;
|
||||
@ -742,30 +743,25 @@ onfullycrafted_refueled( player )
|
||||
onfullycrafted_refueled_think( player )
|
||||
{
|
||||
flag_wait( "spawn_fuel_tanks" );
|
||||
i = 1;
|
||||
while ( i <= 5 )
|
||||
{
|
||||
|
||||
for ( i = 1; i <= 5; i++ )
|
||||
level setclientfield( "quest_state" + i, 5 );
|
||||
i++;
|
||||
}
|
||||
maps/mp/zombies/_zm_craftables::stub_uncraft_craftable( self, 1, undefined, undefined, 1 );
|
||||
|
||||
maps\mp\zombies\_zm_craftables::stub_uncraft_craftable( self, 1, undefined, undefined, 1 );
|
||||
}
|
||||
|
||||
sqcommoncraftable()
|
||||
{
|
||||
level.sq_craftable = maps/mp/zombies/_zm_craftables::craftable_trigger_think( "sq_common_craftable_trigger", "sq_common", "sq_common", "", 1, 0 );
|
||||
level.sq_craftable = maps\mp\zombies\_zm_craftables::craftable_trigger_think( "sq_common_craftable_trigger", "sq_common", "sq_common", "", 1, 0 );
|
||||
}
|
||||
|
||||
onbuyweapon_riotshield( player )
|
||||
{
|
||||
if ( isDefined( player.player_shield_reset_health ) )
|
||||
{
|
||||
if ( isdefined( player.player_shield_reset_health ) )
|
||||
player [[ player.player_shield_reset_health ]]();
|
||||
}
|
||||
if ( isDefined( player.player_shield_reset_location ) )
|
||||
{
|
||||
|
||||
if ( isdefined( player.player_shield_reset_location ) )
|
||||
player [[ player.player_shield_reset_location ]]();
|
||||
}
|
||||
}
|
||||
|
||||
onbuyweapon_plane( player )
|
||||
@ -776,38 +772,29 @@ onbuyweapon_plane( player )
|
||||
|
||||
droponmover( player )
|
||||
{
|
||||
while ( isDefined( player ) && player maps/mp/zm_alcatraz_travel::is_player_on_gondola() )
|
||||
if ( isdefined( player ) && player maps\mp\zm_alcatraz_travel::is_player_on_gondola() )
|
||||
{
|
||||
str_location = undefined;
|
||||
if ( isDefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving && isDefined( level.e_gondola.destination ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level.e_gondola.is_moving ) && level.e_gondola.is_moving && isdefined( level.e_gondola.destination ) )
|
||||
str_location = level.e_gondola.destination;
|
||||
}
|
||||
else
|
||||
{
|
||||
str_location = level.e_gondola.location;
|
||||
}
|
||||
if ( !isDefined( str_location ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( str_location ) )
|
||||
str_location = "roof";
|
||||
}
|
||||
|
||||
a_s_part_teleport = getstructarray( "gondola_dropped_parts_" + str_location, "targetname" );
|
||||
_a1104 = a_s_part_teleport;
|
||||
_k1104 = getFirstArrayKey( _a1104 );
|
||||
while ( isDefined( _k1104 ) )
|
||||
|
||||
foreach ( struct in a_s_part_teleport )
|
||||
{
|
||||
struct = _a1104[ _k1104 ];
|
||||
if ( isDefined( struct.occupied ) && !struct.occupied )
|
||||
if ( !( isdefined( struct.occupied ) && struct.occupied ) )
|
||||
{
|
||||
self.model.origin = struct.origin;
|
||||
self.model.angles = struct.angles;
|
||||
struct.occupied = 1;
|
||||
self.unitrigger.struct_teleport = struct;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
_k1104 = getNextArrayKey( _a1104, _k1104 );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -815,9 +802,9 @@ droponmover( player )
|
||||
|
||||
pickupfrommover()
|
||||
{
|
||||
if ( isDefined( self.unitrigger ) )
|
||||
if ( isdefined( self.unitrigger ) )
|
||||
{
|
||||
if ( isDefined( self.unitrigger.struct_teleport ) )
|
||||
if ( isdefined( self.unitrigger.struct_teleport ) )
|
||||
{
|
||||
self.unitrigger.struct_teleport.occupied = 0;
|
||||
self.unitrigger.struct_teleport = undefined;
|
||||
@ -829,67 +816,45 @@ in_game_checklist_setup()
|
||||
{
|
||||
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
||||
a_str_partnames = [];
|
||||
a_str_partnames[ 0 ] = "sheets";
|
||||
a_str_partnames[ 1 ] = "fueltank";
|
||||
a_str_partnames[ 2 ] = "engine";
|
||||
a_str_partnames[ 3 ] = "contval";
|
||||
a_str_partnames[ 4 ] = "rigging";
|
||||
a_str_partnames[ 5 ] = "key";
|
||||
_a1143 = a_m_checklist;
|
||||
_k1143 = getFirstArrayKey( _a1143 );
|
||||
while ( isDefined( _k1143 ) )
|
||||
a_str_partnames[0] = "sheets";
|
||||
a_str_partnames[1] = "fueltank";
|
||||
a_str_partnames[2] = "engine";
|
||||
a_str_partnames[3] = "contval";
|
||||
a_str_partnames[4] = "rigging";
|
||||
a_str_partnames[5] = "key";
|
||||
|
||||
foreach ( m_checklist in a_m_checklist )
|
||||
{
|
||||
m_checklist = _a1143[ _k1143 ];
|
||||
_a1145 = a_str_partnames;
|
||||
_k1145 = getFirstArrayKey( _a1145 );
|
||||
while ( isDefined( _k1145 ) )
|
||||
foreach ( str_partname in a_str_partnames )
|
||||
{
|
||||
str_partname = _a1145[ _k1145 ];
|
||||
m_checklist hidepart( "j_check_" + str_partname );
|
||||
m_checklist hidepart( "j_strike_" + str_partname );
|
||||
_k1145 = getNextArrayKey( _a1145, _k1145 );
|
||||
}
|
||||
_k1143 = getNextArrayKey( _a1143, _k1143 );
|
||||
}
|
||||
}
|
||||
|
||||
in_game_checklist_plane_piece_picked_up( str_partname )
|
||||
{
|
||||
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
||||
_a1157 = a_m_checklist;
|
||||
_k1157 = getFirstArrayKey( _a1157 );
|
||||
while ( isDefined( _k1157 ) )
|
||||
{
|
||||
m_checklist = _a1157[ _k1157 ];
|
||||
|
||||
foreach ( m_checklist in a_m_checklist )
|
||||
m_checklist showpart( "j_check_" + str_partname );
|
||||
_k1157 = getNextArrayKey( _a1157, _k1157 );
|
||||
}
|
||||
}
|
||||
|
||||
in_game_checklist_plane_piece_dropped( str_partname )
|
||||
{
|
||||
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
||||
_a1167 = a_m_checklist;
|
||||
_k1167 = getFirstArrayKey( _a1167 );
|
||||
while ( isDefined( _k1167 ) )
|
||||
{
|
||||
m_checklist = _a1167[ _k1167 ];
|
||||
|
||||
foreach ( m_checklist in a_m_checklist )
|
||||
m_checklist hidepart( "j_check_" + str_partname );
|
||||
_k1167 = getNextArrayKey( _a1167, _k1167 );
|
||||
}
|
||||
}
|
||||
|
||||
in_game_checklist_plane_piece_crafted( str_partname )
|
||||
{
|
||||
a_m_checklist = getentarray( "plane_checklist", "targetname" );
|
||||
_a1177 = a_m_checklist;
|
||||
_k1177 = getFirstArrayKey( _a1177 );
|
||||
while ( isDefined( _k1177 ) )
|
||||
{
|
||||
m_checklist = _a1177[ _k1177 ];
|
||||
|
||||
foreach ( m_checklist in a_m_checklist )
|
||||
m_checklist showpart( "j_strike_" + str_partname );
|
||||
_k1177 = getNextArrayKey( _a1177, _k1177 );
|
||||
}
|
||||
}
|
||||
|
||||
alcatraz_craftable_trigger_think( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent )
|
||||
@ -900,33 +865,32 @@ alcatraz_craftable_trigger_think( trigger_targetname, equipname, weaponname, tri
|
||||
alcatraz_setup_unitrigger_craftable( trigger_targetname, equipname, weaponname, trigger_hintstring, delete_trigger, persistent )
|
||||
{
|
||||
trig = getent( trigger_targetname, "targetname" );
|
||||
if ( !isDefined( trig ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( trig ) )
|
||||
return;
|
||||
}
|
||||
|
||||
trig.script_length = 386;
|
||||
return alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent );
|
||||
}
|
||||
|
||||
alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigger_hintstring, delete_trigger, persistent )
|
||||
{
|
||||
if ( !isDefined( trig ) )
|
||||
{
|
||||
if ( !isdefined( trig ) )
|
||||
return;
|
||||
}
|
||||
|
||||
unitrigger_stub = spawnstruct();
|
||||
unitrigger_stub.craftablestub = level.zombie_include_craftables[ equipname ];
|
||||
unitrigger_stub.craftablestub = level.zombie_include_craftables[equipname];
|
||||
angles = trig.script_angles;
|
||||
if ( !isDefined( angles ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( angles ) )
|
||||
angles = ( 0, 0, 0 );
|
||||
}
|
||||
unitrigger_stub.origin = trig.origin + ( anglesToRight( angles ) * -6 );
|
||||
|
||||
unitrigger_stub.origin = trig.origin + anglestoright( angles ) * -6;
|
||||
unitrigger_stub.angles = trig.angles;
|
||||
if ( isDefined( trig.script_angles ) )
|
||||
{
|
||||
|
||||
if ( isdefined( trig.script_angles ) )
|
||||
unitrigger_stub.angles = trig.script_angles;
|
||||
}
|
||||
|
||||
unitrigger_stub.equipname = equipname;
|
||||
unitrigger_stub.weaponname = weaponname;
|
||||
unitrigger_stub.trigger_hintstring = trigger_hintstring;
|
||||
@ -938,69 +902,63 @@ alcatraz_setup_unitrigger_craftable_internal( trig, equipname, weaponname, trigg
|
||||
unitrigger_stub.onenduse = ::onenduseuts;
|
||||
unitrigger_stub.onuse = ::onuseplantobjectuts;
|
||||
unitrigger_stub.oncantuse = ::oncantuseuts;
|
||||
if ( isDefined( trig.script_length ) )
|
||||
{
|
||||
|
||||
if ( isdefined( trig.script_length ) )
|
||||
unitrigger_stub.script_length = trig.script_length;
|
||||
}
|
||||
else
|
||||
{
|
||||
unitrigger_stub.script_length = 32;
|
||||
}
|
||||
if ( isDefined( trig.script_width ) )
|
||||
{
|
||||
|
||||
if ( isdefined( trig.script_width ) )
|
||||
unitrigger_stub.script_width = trig.script_width;
|
||||
}
|
||||
else
|
||||
{
|
||||
unitrigger_stub.script_width = 100;
|
||||
}
|
||||
if ( isDefined( trig.script_height ) )
|
||||
{
|
||||
|
||||
if ( isdefined( trig.script_height ) )
|
||||
unitrigger_stub.script_height = trig.script_height;
|
||||
}
|
||||
else
|
||||
{
|
||||
unitrigger_stub.script_height = 64;
|
||||
}
|
||||
|
||||
unitrigger_stub.target = trig.target;
|
||||
unitrigger_stub.targetname = trig.targetname;
|
||||
unitrigger_stub.script_noteworthy = trig.script_noteworthy;
|
||||
unitrigger_stub.script_parameters = trig.script_parameters;
|
||||
unitrigger_stub.cursor_hint = "HINT_NOICON";
|
||||
if ( isDefined( level.zombie_craftablestubs[ equipname ].hint ) )
|
||||
{
|
||||
unitrigger_stub.hint_string = level.zombie_craftablestubs[ equipname ].hint;
|
||||
}
|
||||
|
||||
if ( isdefined( level.zombie_craftablestubs[equipname].hint ) )
|
||||
unitrigger_stub.hint_string = level.zombie_craftablestubs[equipname].hint;
|
||||
|
||||
unitrigger_stub.script_unitrigger_type = "unitrigger_box_use";
|
||||
unitrigger_stub.require_look_at = 0;
|
||||
unitrigger_force_per_player_triggers( unitrigger_stub, 1 );
|
||||
if ( isDefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) )
|
||||
{
|
||||
|
||||
if ( isdefined( unitrigger_stub.craftablestub.custom_craftablestub_update_prompt ) )
|
||||
unitrigger_stub.custom_craftablestub_update_prompt = unitrigger_stub.craftablestub.custom_craftablestub_update_prompt;
|
||||
}
|
||||
|
||||
unitrigger_stub.prompt_and_visibility_func = ::craftabletrigger_update_prompt;
|
||||
maps/mp/zombies/_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think );
|
||||
maps\mp\zombies\_zm_unitrigger::register_static_unitrigger( unitrigger_stub, ::craftable_place_think );
|
||||
unitrigger_stub.piece_trigger = trig;
|
||||
trig.trigger_stub = unitrigger_stub;
|
||||
unitrigger_stub.zombie_weapon_upgrade = trig.zombie_weapon_upgrade;
|
||||
if ( isDefined( unitrigger_stub.target ) )
|
||||
|
||||
if ( isdefined( unitrigger_stub.target ) )
|
||||
{
|
||||
unitrigger_stub.model = getent( unitrigger_stub.target, "targetname" );
|
||||
if ( isDefined( unitrigger_stub.model ) )
|
||||
{
|
||||
if ( isDefined( unitrigger_stub.zombie_weapon_upgrade ) )
|
||||
|
||||
if ( isdefined( unitrigger_stub.model ) )
|
||||
{
|
||||
if ( isdefined( unitrigger_stub.zombie_weapon_upgrade ) )
|
||||
unitrigger_stub.model useweaponhidetags( unitrigger_stub.zombie_weapon_upgrade );
|
||||
}
|
||||
|
||||
unitrigger_stub.model ghost();
|
||||
unitrigger_stub.model notsolid();
|
||||
}
|
||||
}
|
||||
|
||||
unitrigger_stub.craftablespawn = unitrigger_stub craftable_piece_unitriggers( equipname, unitrigger_stub.origin );
|
||||
|
||||
if ( delete_trigger )
|
||||
{
|
||||
trig delete();
|
||||
}
|
||||
level.a_uts_craftables[ level.a_uts_craftables.size ] = unitrigger_stub;
|
||||
|
||||
level.a_uts_craftables[level.a_uts_craftables.size] = unitrigger_stub;
|
||||
return unitrigger_stub;
|
||||
}
|
||||
|
@ -1,135 +1,120 @@
|
||||
#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 ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.zombie_tracking_dist ) )
|
||||
level.zombie_tracking_dist = 1500;
|
||||
}
|
||||
if ( !isDefined( level.zombie_tracking_high ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.zombie_tracking_high ) )
|
||||
level.zombie_tracking_high = 600;
|
||||
}
|
||||
if ( !isDefined( level.zombie_tracking_wait ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.zombie_tracking_wait ) )
|
||||
level.zombie_tracking_wait = 10;
|
||||
}
|
||||
for ( ;; )
|
||||
{
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
zombies = get_round_enemy_array();
|
||||
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
||||
|
||||
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
||||
{
|
||||
wait level.zombie_tracking_wait;
|
||||
wait( level.zombie_tracking_wait );
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else i = 0;
|
||||
while ( i < zombies.size )
|
||||
else
|
||||
{
|
||||
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking )
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
|
||||
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;
|
||||
|
||||
wait( level.zombie_tracking_wait );
|
||||
}
|
||||
}
|
||||
|
||||
delete_zombie_noone_looking( how_close, how_high )
|
||||
{
|
||||
self endon( "death" );
|
||||
if ( !isDefined( how_close ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( how_close ) )
|
||||
how_close = 1500;
|
||||
}
|
||||
if ( !isDefined( how_high ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( players[ i ].sessionstate == "spectator" )
|
||||
if ( players[i].sessionstate == "spectator" )
|
||||
continue;
|
||||
|
||||
if ( isdefined( level.only_track_targeted_players ) )
|
||||
{
|
||||
i++;
|
||||
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[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 )
|
||||
{
|
||||
|
||||
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 )
|
||||
{
|
||||
|
||||
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;
|
||||
|
||||
wait 0.1;
|
||||
|
||||
if ( self.inview == 0 && self.player_close == 0 )
|
||||
{
|
||||
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" )
|
||||
{
|
||||
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.electrified ) && self.electrified == 1 )
|
||||
{
|
||||
|
||||
if ( isdefined( self.electrified ) && self.electrified == 1 )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.in_the_ground ) && self.in_the_ground == 1 )
|
||||
{
|
||||
|
||||
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.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 )
|
||||
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;
|
||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||
}
|
||||
}
|
||||
else
|
||||
else if ( zombies.size + level.zombie_total > 24 || zombies.size + level.zombie_total <= 24 && self.health >= self.maxhealth )
|
||||
{
|
||||
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 )
|
||||
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;
|
||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
self maps/mp/zombies/_zm_spawner::reset_attack_spot();
|
||||
|
||||
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||
self notify( "zombie_delete" );
|
||||
self delete();
|
||||
recalc_zombie_array();
|
||||
@ -139,31 +124,27 @@ delete_zombie_noone_looking( how_close, how_high )
|
||||
player_can_see_me( player )
|
||||
{
|
||||
playerangles = player getplayerangles();
|
||||
playerforwardvec = anglesToForward( playerangles );
|
||||
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" );
|
||||
|
||||
playerfov = getdvarfloat( "cg_fov" );
|
||||
banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
|
||||
|
||||
if ( banzaivsplayerfovbuffer <= 0 )
|
||||
{
|
||||
banzaivsplayerfovbuffer = 0,2;
|
||||
}
|
||||
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
|
||||
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,40 +1,41 @@
|
||||
//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;
|
||||
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() //checked matches cerberus output
|
||||
encounter_init()
|
||||
{
|
||||
level._game_module_player_laststand_callback = ::alcatraz_grief_laststand_weapon_save;
|
||||
level.precachecustomcharacters = ::precache_team_characters;
|
||||
@ -42,49 +43,50 @@ encounter_init() //checked matches cerberus output
|
||||
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 ( 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 ];
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ] );
|
||||
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 )
|
||||
{
|
||||
|
||||
if ( isdefined( self.hasriotshield ) && self.hasriotshield )
|
||||
self.grief_hasriotshield = 1;
|
||||
}
|
||||
|
||||
if ( self hasweapon( "claymore_zm" ) )
|
||||
{
|
||||
self.grief_savedweapon_claymore = 1;
|
||||
@ -92,7 +94,7 @@ alcatraz_grief_laststand_weapon_save( einflictor, attacker, idamage, smeansofdea
|
||||
}
|
||||
}
|
||||
|
||||
precache_team_characters() //checked matches cerberus output
|
||||
precache_team_characters()
|
||||
{
|
||||
precachemodel( "c_zom_player_grief_guard_fb" );
|
||||
precachemodel( "c_zom_oleary_shortsleeve_viewhands" );
|
||||
@ -100,30 +102,31 @@ precache_team_characters() //checked matches cerberus output
|
||||
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 ) )
|
||||
|
||||
if ( !isdefined( self.characterindex ) )
|
||||
{
|
||||
self.characterindex = 1;
|
||||
|
||||
if ( self.team == "axis" )
|
||||
{
|
||||
self.characterindex = 0;
|
||||
}
|
||||
}
|
||||
switch( self.characterindex )
|
||||
|
||||
switch ( self.characterindex )
|
||||
{
|
||||
case 0:
|
||||
case 2:
|
||||
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 1:
|
||||
case 3:
|
||||
case "3":
|
||||
case "1":
|
||||
self setmodel( "c_zom_player_grief_guard_fb" );
|
||||
self.voice = "american";
|
||||
self.skeleton = "base";
|
||||
@ -131,118 +134,120 @@ give_team_characters() //checked matches cerberus output
|
||||
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" );
|
||||
}
|
||||
|
||||
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" );
|
||||
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" );
|
||||
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();
|
||||
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" );
|
||||
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 )
|
||||
|
||||
foreach ( trigger in a_t_door_triggers )
|
||||
{
|
||||
if ( isDefined( triggers[ i ].script_flag ) )
|
||||
if ( isdefined( trigger.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" )
|
||||
if ( trigger.script_flag == "activate_cellblock_citadel" || trigger.script_flag == "activate_shower_room" || trigger.script_flag == "activate_cellblock_infirmary" || trigger.script_flag == "activate_infirmary" )
|
||||
{
|
||||
triggers[ i ] delete();
|
||||
i++;
|
||||
trigger delete();
|
||||
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" )
|
||||
|
||||
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" )
|
||||
{
|
||||
i++;
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( triggers[ i ].target ) )
|
||||
|
||||
if ( isdefined( trigger.target ) )
|
||||
{
|
||||
str_target = triggers[ i ].target;
|
||||
str_target = trigger.target;
|
||||
a_door_and_clip = getentarray( str_target, "targetname" );
|
||||
|
||||
foreach ( ent in a_door_and_clip )
|
||||
{
|
||||
ent delete();
|
||||
}
|
||||
|
||||
trigger 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 ( 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 );
|
||||
}
|
||||
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";
|
||||
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" )
|
||||
if ( isdefined( barrier.script_noteworthy ) )
|
||||
{
|
||||
if ( barrier.script_noteworthy == "cafe_chest_zbarrier" || barrier.script_noteworthy == "start_chest_zbarrier" )
|
||||
continue;
|
||||
}
|
||||
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 ] )
|
||||
if ( barrier.script_string == a_str_zones[i] )
|
||||
{
|
||||
b_delete_barrier = 0;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if ( b_delete_barrier == 1 )
|
||||
{
|
||||
|
||||
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" );
|
||||
@ -252,77 +257,81 @@ main() //checked partially changed to match cerberus output changed at own discr
|
||||
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" );
|
||||
@ -331,11 +340,13 @@ main() //checked partially changed to match cerberus output changed at own discr
|
||||
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" );
|
||||
@ -354,18 +365,21 @@ main() //checked partially changed to match cerberus output changed at own discr
|
||||
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" );
|
||||
@ -373,17 +387,20 @@ main() //checked partially changed to match cerberus output changed at own discr
|
||||
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();
|
||||
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();
|
||||
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();
|
||||
@ -401,41 +418,40 @@ main() //checked partially changed to match cerberus output changed at own discr
|
||||
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" );
|
||||
}
|
||||
|
||||
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 ) )
|
||||
{
|
||||
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 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "user_grabbed_weapon" );
|
||||
|
||||
if ( randomint( 50000 ) == 115 )
|
||||
{
|
||||
self playsoundtoplayer( "zmb_easteregg_face", self );
|
||||
@ -444,39 +460,39 @@ magicbox_face_spawn() //checked matches cerberus output
|
||||
self.wth_elem.vertalign = "fullscreen";
|
||||
self.wth_elem.sort = 1000;
|
||||
self.wth_elem.foreground = 0;
|
||||
self.wth_elem.alpha = 1;
|
||||
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 ) )
|
||||
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;
|
||||
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" ] );
|
||||
self setanim( level.shockbox_anim["on"] );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
self delete();
|
||||
}
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,15 +1,17 @@
|
||||
#include maps/mp/zm_alcatraz_sq;
|
||||
#include maps/mp/gametypes_zm/_hud;
|
||||
#include maps/mp/gametypes_zm/_hud_util;
|
||||
#include maps/mp/zm_alcatraz_utility;
|
||||
#include maps/mp/zombies/_zm_sidequests;
|
||||
#include maps/mp/zombies/_zm_craftables;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/zombies/_zm_afterlife;
|
||||
#include maps/_vehicle;
|
||||
#include maps/_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\_utility;
|
||||
#include maps\_vehicle;
|
||||
#include maps\mp\zombies\_zm_afterlife;
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include maps\mp\zombies\_zm_craftables;
|
||||
#include maps\mp\zombies\_zm_sidequests;
|
||||
#include maps\mp\zm_alcatraz_utility;
|
||||
#include maps\mp\gametypes_zm\_hud_util;
|
||||
#include maps\mp\gametypes_zm\_hud;
|
||||
#include maps\mp\zm_alcatraz_sq;
|
||||
|
||||
setup_nixie_tubes_puzzle()
|
||||
{
|
||||
@ -22,64 +24,61 @@ setup_nixie_tubes_puzzle()
|
||||
m_rigging linkto( m_citadel_elevator );
|
||||
level thread nixie_tube_notifier();
|
||||
level thread nixie_tube_elevator_door();
|
||||
|
||||
while ( !flag( "nixie_puzzle_completed" ) )
|
||||
{
|
||||
generate_unrestricted_nixie_tube_solution();
|
||||
n_code = nixie_tube_add_code( level.a_nixie_tube_solution[ 1 ], level.a_nixie_tube_solution[ 2 ], level.a_nixie_tube_solution[ 3 ] );
|
||||
i = 1;
|
||||
while ( i < 4 )
|
||||
n_code = nixie_tube_add_code( level.a_nixie_tube_solution[1], level.a_nixie_tube_solution[2], level.a_nixie_tube_solution[3] );
|
||||
|
||||
for ( i = 1; i < 4; i++ )
|
||||
{
|
||||
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
||||
m_nixie_tube thread nixie_tube_thread( i );
|
||||
m_nixie_clue = getent( "nixie_clue_" + i, "script_noteworthy" );
|
||||
j = 0;
|
||||
while ( j < 10 )
|
||||
{
|
||||
|
||||
for ( j = 0; j < 10; j++ )
|
||||
m_nixie_clue hidepart( "J_" + j );
|
||||
j++;
|
||||
}
|
||||
|
||||
players = getplayers();
|
||||
_a76 = players;
|
||||
_k76 = getFirstArrayKey( _a76 );
|
||||
while ( isDefined( _k76 ) )
|
||||
{
|
||||
player = _a76[ _k76 ];
|
||||
if ( isDefined( player ) && isDefined( player.afterlife ) && player.afterlife )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
if ( isdefined( player ) && ( isdefined( player.afterlife ) && player.afterlife ) )
|
||||
m_nixie_clue setvisibletoplayer( player );
|
||||
}
|
||||
_k76 = getNextArrayKey( _a76, _k76 );
|
||||
}
|
||||
m_nixie_clue showpart( "J_" + level.a_nixie_tube_solution[ i ] );
|
||||
i++;
|
||||
|
||||
m_nixie_clue showpart( "J_" + level.a_nixie_tube_solution[i] );
|
||||
}
|
||||
|
||||
level waittill( "nixie_" + n_code );
|
||||
|
||||
flag_set( "nixie_puzzle_solved" );
|
||||
nixie_tube_remove_code( n_code );
|
||||
i = 1;
|
||||
while ( i < 4 )
|
||||
|
||||
for ( i = 1; i < 4; i++ )
|
||||
{
|
||||
m_nixie_clue = getent( "nixie_clue_" + i, "script_noteworthy" );
|
||||
m_nixie_clue setinvisibletoall();
|
||||
i++;
|
||||
}
|
||||
|
||||
nixie_tube_2 = getent( "nixie_tube_2", "targetname" );
|
||||
nixie_tube_2 playsound( "zmb_quest_nixie_success" );
|
||||
level thread nixie_tube_elevator_drops();
|
||||
nixie_tube_win_effects_all_tubes( 0, 6, 0 );
|
||||
wait 0,5;
|
||||
wait 0.5;
|
||||
n_countdown = 60;
|
||||
level thread sndnixietubecountdown( n_countdown );
|
||||
i = 1;
|
||||
while ( i < 4 )
|
||||
|
||||
for ( i = 1; i < 4; i++ )
|
||||
{
|
||||
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
||||
level notify( "nixie_tube_trigger_" + i );
|
||||
m_nixie_tube thread nixie_tube_thread_play_countdown( i, n_countdown );
|
||||
i++;
|
||||
}
|
||||
|
||||
flag_set( "nixie_countdown_started" );
|
||||
flag_wait( "nixie_countdown_expired" );
|
||||
|
||||
if ( !flag( "nixie_puzzle_completed" ) )
|
||||
{
|
||||
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
||||
@ -90,6 +89,7 @@ setup_nixie_tubes_puzzle()
|
||||
nixie_tube_elevator_rises();
|
||||
}
|
||||
}
|
||||
|
||||
m_nixie_tube = getent( "nixie_tube_2", "targetname" );
|
||||
m_nixie_tube playsound( "zmb_quest_nixie_success" );
|
||||
/#
|
||||
@ -100,121 +100,105 @@ setup_nixie_tubes_puzzle()
|
||||
stop_exploder( 3400 );
|
||||
stop_exploder( 3500 );
|
||||
stop_exploder( 3600 );
|
||||
i = 1;
|
||||
while ( i < 4 )
|
||||
|
||||
for ( i = 1; i < 4; i++ )
|
||||
{
|
||||
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
||||
m_nixie_tube thread afterlife_interact_object_think();
|
||||
m_nixie_tube thread nixie_tube_thread( i );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
generate_unrestricted_nixie_tube_solution()
|
||||
{
|
||||
a_restricted_solutions = [];
|
||||
a_restricted_solutions[ 0 ] = 115;
|
||||
a_restricted_solutions[ 1 ] = 935;
|
||||
a_restricted_solutions[ 2 ] = 386;
|
||||
a_restricted_solutions[ 3 ] = 481;
|
||||
a_restricted_solutions[ 4 ] = 101;
|
||||
a_restricted_solutions[ 5 ] = 872;
|
||||
a_restricted_solutions[0] = 115;
|
||||
a_restricted_solutions[1] = 935;
|
||||
a_restricted_solutions[2] = 386;
|
||||
a_restricted_solutions[3] = 481;
|
||||
a_restricted_solutions[4] = 101;
|
||||
a_restricted_solutions[5] = 872;
|
||||
a_numbers = [];
|
||||
i = 0;
|
||||
while ( i < 10 )
|
||||
{
|
||||
a_numbers[ i ] = i;
|
||||
i++;
|
||||
}
|
||||
i = 1;
|
||||
while ( i < 4 )
|
||||
|
||||
for ( i = 0; i < 10; i++ )
|
||||
a_numbers[i] = i;
|
||||
|
||||
for ( i = 1; i < 4; i++ )
|
||||
{
|
||||
n_index = randomint( a_numbers.size );
|
||||
level.a_nixie_tube_solution[ i ] = a_numbers[ n_index ];
|
||||
level.a_nixie_tube_solution[i] = a_numbers[n_index];
|
||||
arrayremoveindex( a_numbers, n_index );
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < a_restricted_solutions.size )
|
||||
|
||||
for ( i = 0; i < a_restricted_solutions.size; i++ )
|
||||
{
|
||||
b_is_restricted_solution = 1;
|
||||
restricted_solution = [];
|
||||
j = 1;
|
||||
while ( j < 4 )
|
||||
{
|
||||
restricted_solution[ j ] = get_split_number( j, a_restricted_solutions[ i ] );
|
||||
if ( restricted_solution[ j ] != level.a_nixie_tube_solution[ j ] )
|
||||
|
||||
for ( j = 1; j < 4; j++ )
|
||||
{
|
||||
restricted_solution[j] = get_split_number( j, a_restricted_solutions[i] );
|
||||
|
||||
if ( restricted_solution[j] != level.a_nixie_tube_solution[j] )
|
||||
b_is_restricted_solution = 0;
|
||||
}
|
||||
j++;
|
||||
}
|
||||
|
||||
if ( b_is_restricted_solution )
|
||||
{
|
||||
n_index = randomint( a_numbers.size );
|
||||
level.a_nixie_tube_solution[ 3 ] = a_numbers[ n_index ];
|
||||
level.a_nixie_tube_solution[3] = a_numbers[n_index];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
nixie_tube_notifier()
|
||||
{
|
||||
if ( !isDefined( level.a_important_codes ) )
|
||||
if ( !isdefined( level.a_important_codes ) )
|
||||
{
|
||||
level.a_important_codes = [];
|
||||
level.a_important_codes[ level.a_important_codes.size ] = 115;
|
||||
level.a_important_codes[ level.a_important_codes.size ] = 935;
|
||||
level.a_important_codes[level.a_important_codes.size] = 115;
|
||||
level.a_important_codes[level.a_important_codes.size] = 935;
|
||||
}
|
||||
|
||||
level thread nixie_115();
|
||||
level thread nixie_935();
|
||||
while ( !isDefined( level.a_nixie_tube_code ) || !isDefined( level.a_nixie_tube_code[ 3 ] ) )
|
||||
{
|
||||
|
||||
while ( !isdefined( level.a_nixie_tube_code ) || !isdefined( level.a_nixie_tube_code[3] ) )
|
||||
wait 1;
|
||||
}
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
codes_to_check = array_copy( level.a_important_codes );
|
||||
non_array_value = ( level.a_nixie_tube_code[ 1 ] * 100 ) + ( level.a_nixie_tube_code[ 2 ] * 10 ) + level.a_nixie_tube_code[ 3 ];
|
||||
_a240 = codes_to_check;
|
||||
_k240 = getFirstArrayKey( _a240 );
|
||||
while ( isDefined( _k240 ) )
|
||||
non_array_value = level.a_nixie_tube_code[1] * 100 + level.a_nixie_tube_code[2] * 10 + level.a_nixie_tube_code[3];
|
||||
|
||||
foreach ( code in codes_to_check )
|
||||
{
|
||||
code = _a240[ _k240 ];
|
||||
if ( code == non_array_value )
|
||||
{
|
||||
level notify( "nixie_" + code );
|
||||
}
|
||||
_k240 = getNextArrayKey( _a240, _k240 );
|
||||
}
|
||||
|
||||
wait 2;
|
||||
}
|
||||
}
|
||||
|
||||
nixie_tube_add_code( a, b, c )
|
||||
{
|
||||
if ( isDefined( b ) )
|
||||
{
|
||||
non_array_value = ( a * 100 ) + ( b * 10 ) + c;
|
||||
}
|
||||
if ( isdefined( b ) )
|
||||
non_array_value = a * 100 + b * 10 + c;
|
||||
else
|
||||
{
|
||||
non_array_value = a;
|
||||
}
|
||||
level.a_important_codes[ level.a_important_codes.size ] = non_array_value;
|
||||
|
||||
level.a_important_codes[level.a_important_codes.size] = non_array_value;
|
||||
return non_array_value;
|
||||
}
|
||||
|
||||
nixie_tube_remove_code( a, b, c )
|
||||
{
|
||||
if ( isDefined( b ) )
|
||||
{
|
||||
non_array_value = ( a * 100 ) + ( b * 10 ) + c;
|
||||
}
|
||||
if ( isdefined( b ) )
|
||||
non_array_value = a * 100 + b * 10 + c;
|
||||
else
|
||||
{
|
||||
non_array_value = a;
|
||||
}
|
||||
|
||||
arrayremovevalue( level.a_important_codes, non_array_value );
|
||||
}
|
||||
|
||||
@ -222,190 +206,178 @@ sndnixietubecountdown( num )
|
||||
{
|
||||
level endon( "sndEndNixieCount" );
|
||||
ent = getent( "nixie_tube_2", "targetname" );
|
||||
i = num;
|
||||
while ( i > 0 )
|
||||
|
||||
for ( i = num; i > 0; i-- )
|
||||
{
|
||||
if ( i <= 10 )
|
||||
{
|
||||
ent playsound( "zmb_quest_nixie_count_final" );
|
||||
}
|
||||
else
|
||||
{
|
||||
ent playsound( "zmb_quest_nixie_count" );
|
||||
}
|
||||
wait 1;
|
||||
i--;
|
||||
|
||||
wait 1;
|
||||
}
|
||||
|
||||
ent playsound( "zmb_quest_nixie_fail" );
|
||||
}
|
||||
|
||||
nixie_tube_thread( n_tube_index, b_force_reset )
|
||||
{
|
||||
if ( !isDefined( b_force_reset ) )
|
||||
{
|
||||
if ( !isdefined( b_force_reset ) )
|
||||
b_force_reset = 1;
|
||||
}
|
||||
|
||||
level endon( "kill_nixie_input" );
|
||||
|
||||
if ( b_force_reset )
|
||||
{
|
||||
level.a_nixie_tube_code[ n_tube_index ] = 0;
|
||||
}
|
||||
level.a_nixie_tube_code[n_tube_index] = 0;
|
||||
|
||||
self thread afterlife_interact_object_think();
|
||||
i = 0;
|
||||
while ( i < 10 )
|
||||
|
||||
for ( i = 0; i < 10; i++ )
|
||||
{
|
||||
self hidepart( "J_off" );
|
||||
self hidepart( "J_" + i );
|
||||
i++;
|
||||
}
|
||||
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
|
||||
|
||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||
|
||||
while ( !flag( "nixie_puzzle_solved" ) )
|
||||
{
|
||||
level waittill( "nixie_tube_trigger_" + n_tube_index );
|
||||
while ( flag( "nixie_puzzle_solved" ) )
|
||||
{
|
||||
|
||||
if ( flag( "nixie_puzzle_solved" ) )
|
||||
continue;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < 10 )
|
||||
{
|
||||
|
||||
for ( i = 0; i < 10; i++ )
|
||||
self hidepart( "J_" + i );
|
||||
i++;
|
||||
}
|
||||
level.a_nixie_tube_code[ n_tube_index ]++;
|
||||
|
||||
level.a_nixie_tube_code[n_tube_index]++;
|
||||
self playsound( "zmb_quest_nixie_count" );
|
||||
if ( level.a_nixie_tube_code[ n_tube_index ] > 9 )
|
||||
{
|
||||
level.a_nixie_tube_code[ n_tube_index ] = 0;
|
||||
}
|
||||
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
|
||||
wait 0,05;
|
||||
|
||||
if ( level.a_nixie_tube_code[n_tube_index] > 9 )
|
||||
level.a_nixie_tube_code[n_tube_index] = 0;
|
||||
|
||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||
wait 0.05;
|
||||
self notify( "afterlife_interact_reset" );
|
||||
}
|
||||
}
|
||||
|
||||
nixie_tube_win_effects( n_tube_index, n_blink_rate )
|
||||
{
|
||||
if ( !isDefined( n_blink_rate ) )
|
||||
{
|
||||
n_blink_rate = 0,25;
|
||||
}
|
||||
if ( !isdefined( n_blink_rate ) )
|
||||
n_blink_rate = 0.25;
|
||||
|
||||
while ( !flag( "nixie_countdown_started" ) )
|
||||
{
|
||||
self hidepart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
|
||||
wait n_blink_rate;
|
||||
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
|
||||
wait n_blink_rate;
|
||||
self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||
wait( n_blink_rate );
|
||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||
wait( n_blink_rate );
|
||||
}
|
||||
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
|
||||
|
||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||
}
|
||||
|
||||
nixie_tube_win_effects_all_tubes( goal_num_1, goal_num_2, goal_num_3 )
|
||||
{
|
||||
if ( !isDefined( goal_num_1 ) )
|
||||
{
|
||||
if ( !isdefined( goal_num_1 ) )
|
||||
goal_num_1 = 0;
|
||||
}
|
||||
if ( !isDefined( goal_num_2 ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( goal_num_2 ) )
|
||||
goal_num_2 = 0;
|
||||
}
|
||||
if ( !isDefined( goal_num_3 ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( goal_num_3 ) )
|
||||
goal_num_3 = 0;
|
||||
}
|
||||
|
||||
a_nixie_tube = [];
|
||||
a_nixie_tube[ 1 ] = getent( "nixie_tube_1", "targetname" );
|
||||
a_nixie_tube[ 2 ] = getent( "nixie_tube_2", "targetname" );
|
||||
a_nixie_tube[ 3 ] = getent( "nixie_tube_3", "targetname" );
|
||||
a_nixie_tube[1] = getent( "nixie_tube_1", "targetname" );
|
||||
a_nixie_tube[2] = getent( "nixie_tube_2", "targetname" );
|
||||
a_nixie_tube[3] = getent( "nixie_tube_3", "targetname" );
|
||||
n_off_tube = 1;
|
||||
start_time = 0;
|
||||
while ( start_time < 3 )
|
||||
|
||||
for ( start_time = 0; start_time < 3; start_time += 0.15 )
|
||||
{
|
||||
i = 1;
|
||||
while ( i < ( 3 + 1 ) )
|
||||
for ( i = 1; i < 3 + 1; i++ )
|
||||
{
|
||||
if ( i == n_off_tube )
|
||||
{
|
||||
a_nixie_tube[ i ] hidepart( "J_" + level.a_nixie_tube_code[ i ] );
|
||||
i++;
|
||||
a_nixie_tube[i] hidepart( "J_" + level.a_nixie_tube_code[i] );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
a_nixie_tube[ i ] showpart( "J_" + level.a_nixie_tube_code[ i ] );
|
||||
if ( i == 1 || n_off_tube == 2 && i == 3 && n_off_tube == 1 )
|
||||
{
|
||||
a_nixie_tube[ i ] playsound( "zmb_quest_nixie_count" );
|
||||
}
|
||||
}
|
||||
i++;
|
||||
|
||||
a_nixie_tube[i] showpart( "J_" + level.a_nixie_tube_code[i] );
|
||||
|
||||
if ( i == 1 && n_off_tube == 2 || i == 3 && n_off_tube == 1 )
|
||||
a_nixie_tube[i] playsound( "zmb_quest_nixie_count" );
|
||||
}
|
||||
|
||||
n_off_tube++;
|
||||
|
||||
if ( n_off_tube > 3 )
|
||||
{
|
||||
n_off_tube = 1;
|
||||
}
|
||||
|
||||
wait_network_frame();
|
||||
start_time += 0,15;
|
||||
}
|
||||
a_nixie_tube[ 1 ] showpart( "J_" + level.a_nixie_tube_code[ 1 ] );
|
||||
a_nixie_tube[ 2 ] showpart( "J_" + level.a_nixie_tube_code[ 2 ] );
|
||||
a_nixie_tube[ 3 ] showpart( "J_" + level.a_nixie_tube_code[ 3 ] );
|
||||
while ( level.a_nixie_tube_code[ 1 ] != goal_num_1 || level.a_nixie_tube_code[ 2 ] != goal_num_2 && level.a_nixie_tube_code[ 3 ] != goal_num_3 )
|
||||
|
||||
a_nixie_tube[1] showpart( "J_" + level.a_nixie_tube_code[1] );
|
||||
a_nixie_tube[2] showpart( "J_" + level.a_nixie_tube_code[2] );
|
||||
a_nixie_tube[3] showpart( "J_" + level.a_nixie_tube_code[3] );
|
||||
|
||||
while ( level.a_nixie_tube_code[1] != goal_num_1 || level.a_nixie_tube_code[2] != goal_num_2 || level.a_nixie_tube_code[3] != goal_num_3 )
|
||||
{
|
||||
n_current_tube = 1;
|
||||
n_goal = goal_num_1;
|
||||
if ( level.a_nixie_tube_code[ n_current_tube ] == goal_num_1 )
|
||||
|
||||
if ( level.a_nixie_tube_code[n_current_tube] == goal_num_1 )
|
||||
{
|
||||
n_current_tube = 2;
|
||||
n_goal = goal_num_2;
|
||||
if ( level.a_nixie_tube_code[ n_current_tube ] == goal_num_2 )
|
||||
|
||||
if ( level.a_nixie_tube_code[n_current_tube] == goal_num_2 )
|
||||
{
|
||||
n_current_tube = 3;
|
||||
n_goal = goal_num_3;
|
||||
}
|
||||
}
|
||||
j = 0;
|
||||
while ( j < 10 )
|
||||
{
|
||||
a_nixie_tube[ n_current_tube ] hidepart( "J_" + level.a_nixie_tube_code[ n_current_tube ] );
|
||||
level.a_nixie_tube_code[ n_current_tube ]--;
|
||||
|
||||
if ( level.a_nixie_tube_code[ n_current_tube ] == -1 )
|
||||
for ( j = 0; j < 10; j++ )
|
||||
{
|
||||
level.a_nixie_tube_code[ n_current_tube ] = 9;
|
||||
}
|
||||
a_nixie_tube[ n_current_tube ] showpart( "J_" + level.a_nixie_tube_code[ n_current_tube ] );
|
||||
if ( ( j % 3 ) == 0 )
|
||||
{
|
||||
a_nixie_tube[ n_current_tube ] playsound( "zmb_quest_nixie_count" );
|
||||
}
|
||||
wait 0,05;
|
||||
j++;
|
||||
a_nixie_tube[n_current_tube] hidepart( "J_" + level.a_nixie_tube_code[n_current_tube] );
|
||||
level.a_nixie_tube_code[n_current_tube]--;
|
||||
|
||||
if ( level.a_nixie_tube_code[n_current_tube] == -1 )
|
||||
level.a_nixie_tube_code[n_current_tube] = 9;
|
||||
|
||||
a_nixie_tube[n_current_tube] showpart( "J_" + level.a_nixie_tube_code[n_current_tube] );
|
||||
|
||||
if ( j % 3 == 0 )
|
||||
a_nixie_tube[n_current_tube] playsound( "zmb_quest_nixie_count" );
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
|
||||
wait_network_frame();
|
||||
j = 0;
|
||||
while ( level.a_nixie_tube_code[ n_current_tube ] != n_goal )
|
||||
{
|
||||
a_nixie_tube[ n_current_tube ] hidepart( "J_" + level.a_nixie_tube_code[ n_current_tube ] );
|
||||
level.a_nixie_tube_code[ n_current_tube ]--;
|
||||
|
||||
if ( level.a_nixie_tube_code[ n_current_tube ] == -1 )
|
||||
while ( level.a_nixie_tube_code[n_current_tube] != n_goal )
|
||||
{
|
||||
level.a_nixie_tube_code[ n_current_tube ] = 9;
|
||||
}
|
||||
a_nixie_tube[ n_current_tube ] showpart( "J_" + level.a_nixie_tube_code[ n_current_tube ] );
|
||||
if ( ( j % 3 ) == 0 )
|
||||
{
|
||||
a_nixie_tube[ n_current_tube ] playsound( "zmb_quest_nixie_count" );
|
||||
}
|
||||
a_nixie_tube[n_current_tube] hidepart( "J_" + level.a_nixie_tube_code[n_current_tube] );
|
||||
level.a_nixie_tube_code[n_current_tube]--;
|
||||
|
||||
if ( level.a_nixie_tube_code[n_current_tube] == -1 )
|
||||
level.a_nixie_tube_code[n_current_tube] = 9;
|
||||
|
||||
a_nixie_tube[n_current_tube] showpart( "J_" + level.a_nixie_tube_code[n_current_tube] );
|
||||
|
||||
if ( j % 3 == 0 )
|
||||
a_nixie_tube[n_current_tube] playsound( "zmb_quest_nixie_count" );
|
||||
|
||||
j++;
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
a_nixie_tube[ 2 ] playsound( "zmb_quest_nixie_count_final" );
|
||||
|
||||
a_nixie_tube[2] playsound( "zmb_quest_nixie_count_final" );
|
||||
wait_network_frame();
|
||||
}
|
||||
|
||||
@ -413,37 +385,34 @@ nixie_tube_thread_play_countdown( n_tube_index, n_countdown )
|
||||
{
|
||||
level endon( "end_nixie_countdown" );
|
||||
n_tick_duration = 1;
|
||||
level.a_nixie_tube_code[ n_tube_index ] = get_split_number( n_tube_index, n_countdown );
|
||||
level.a_nixie_tube_code[n_tube_index] = get_split_number( n_tube_index, n_countdown );
|
||||
/#
|
||||
iprintlnbold( "tube " + n_tube_index + " number is " + level.a_nixie_tube_code[ n_tube_index ] );
|
||||
iprintlnbold( "tube " + n_tube_index + " number is " + level.a_nixie_tube_code[n_tube_index] );
|
||||
#/
|
||||
i = 0;
|
||||
while ( i < 10 )
|
||||
{
|
||||
for ( i = 0; i < 10; i++ )
|
||||
self hidepart( "J_" + i );
|
||||
i++;
|
||||
}
|
||||
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
|
||||
|
||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||
|
||||
while ( n_countdown )
|
||||
{
|
||||
n_countdown--;
|
||||
|
||||
self hidepart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
|
||||
level.a_nixie_tube_code[ n_tube_index ] = get_split_number( n_tube_index, n_countdown );
|
||||
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
|
||||
wait n_tick_duration;
|
||||
self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||
level.a_nixie_tube_code[n_tube_index] = get_split_number( n_tube_index, n_countdown );
|
||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||
wait( n_tick_duration );
|
||||
}
|
||||
|
||||
flag_set( "nixie_countdown_expired" );
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
flag_clear( "nixie_countdown_expired" );
|
||||
}
|
||||
|
||||
get_split_number( n_tube_index, n_countdown )
|
||||
{
|
||||
if ( n_tube_index == 1 )
|
||||
{
|
||||
return ( n_countdown - ( n_countdown % 100 ) ) / 100;
|
||||
}
|
||||
return ( n_countdown - n_countdown % 100 ) / 100;
|
||||
|
||||
if ( n_tube_index == 2 )
|
||||
{
|
||||
n_temp = n_countdown % 100;
|
||||
@ -451,34 +420,31 @@ get_split_number( n_tube_index, n_countdown )
|
||||
n_temp /= 10;
|
||||
return n_temp;
|
||||
}
|
||||
|
||||
if ( n_tube_index == 3 )
|
||||
{
|
||||
return n_countdown % 10;
|
||||
}
|
||||
}
|
||||
|
||||
nixie_tube_elevator_drops()
|
||||
{
|
||||
n_elevator_drop_duration = 3;
|
||||
maps/mp/zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 0 );
|
||||
maps\mp\zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 0 );
|
||||
exploder( 3400 );
|
||||
exploder( 3500 );
|
||||
exploder( 3600 );
|
||||
m_citadel_elevator = getent( "citadel_elevator", "targetname" );
|
||||
a_m_script_models = [];
|
||||
a_m_script_models = getentarray( "script_model", "classname" );
|
||||
i = 0;
|
||||
while ( i < a_m_script_models.size )
|
||||
|
||||
for ( i = 0; i < a_m_script_models.size; i++ )
|
||||
{
|
||||
if ( a_m_script_models[ i ].model == "veh_t6_dlc_zombie_part_rigging" )
|
||||
{
|
||||
playfxontag( level._effect[ "elevator_fall" ], a_m_script_models[ i ], "tag_origin" );
|
||||
}
|
||||
i++;
|
||||
if ( a_m_script_models[i].model == "veh_t6_dlc_zombie_part_rigging" )
|
||||
playfxontag( level._effect["elevator_fall"], a_m_script_models[i], "tag_origin" );
|
||||
}
|
||||
|
||||
m_citadel_elevator playsound( "zmb_quest_elevator_move" );
|
||||
m_citadel_elevator moveto( m_citadel_elevator.origin + vectorScale( ( 0, 0, 0 ), 768 ), n_elevator_drop_duration, 1, 1 );
|
||||
wait n_elevator_drop_duration;
|
||||
m_citadel_elevator moveto( m_citadel_elevator.origin + vectorscale( ( 0, 0, -1 ), 768.0 ), n_elevator_drop_duration, 1, 1 );
|
||||
wait( n_elevator_drop_duration );
|
||||
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
||||
t_elevator_door trigger_on();
|
||||
}
|
||||
@ -486,52 +452,57 @@ nixie_tube_elevator_drops()
|
||||
nixie_tube_elevator_rises()
|
||||
{
|
||||
elevator_rise_duration = 3;
|
||||
maps/mp/zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 1 );
|
||||
maps\mp\zm_alcatraz_sq::array_set_visible_to_all( getentarray( "generator_wires", "script_noteworthy" ), 1 );
|
||||
stop_exploder( 3400 );
|
||||
stop_exploder( 3500 );
|
||||
stop_exploder( 3600 );
|
||||
m_citadel_elevator = getent( "citadel_elevator", "targetname" );
|
||||
m_citadel_elevator moveto( m_citadel_elevator.origin + vectorScale( ( 0, 0, 0 ), 768 ), elevator_rise_duration, 1, 1 );
|
||||
m_citadel_elevator moveto( m_citadel_elevator.origin + vectorscale( ( 0, 0, 1 ), 768.0 ), elevator_rise_duration, 1, 1 );
|
||||
m_citadel_elevator playsound( "zmb_quest_elevator_move" );
|
||||
wait elevator_rise_duration;
|
||||
wait( elevator_rise_duration );
|
||||
}
|
||||
|
||||
nixie_tube_elevator_door()
|
||||
{
|
||||
t_elevator_door = getent( "nixie_elevator_door", "targetname" );
|
||||
t_elevator_door sethintstring( &"ZM_PRISON_KEY_DOOR" );
|
||||
|
||||
t_elevator_door waittill( "trigger", e_triggerer );
|
||||
|
||||
m_elevator_bottom_gate_l = getent( "elevator_bottom_gate_l", "targetname" );
|
||||
m_elevator_bottom_gate_r = getent( "elevator_bottom_gate_r", "targetname" );
|
||||
m_elevator_bottom_gate_l rotateyaw( -90, 0,5 );
|
||||
m_elevator_bottom_gate_r rotateyaw( 90, 0,5 );
|
||||
m_elevator_bottom_gate_l rotateyaw( -90, 0.5 );
|
||||
m_elevator_bottom_gate_r rotateyaw( 90, 0.5 );
|
||||
elevator_door_playerclip = getent( "elevator_door_playerclip", "targetname" );
|
||||
elevator_door_playerclip delete();
|
||||
flag_set( "nixie_puzzle_completed" );
|
||||
level notify( "sndEndNixieCount" );
|
||||
level notify( "end_nixie_countdown" );
|
||||
flag_set( "nixie_countdown_expired" );
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
flag_clear( "nixie_countdown_expired" );
|
||||
t_elevator_door delete();
|
||||
}
|
||||
|
||||
nixie_tube_win_effects_ee( n_tube_index )
|
||||
{
|
||||
n_blink_rate = 0,25;
|
||||
n_blink_rate = 0.25;
|
||||
|
||||
while ( !flag( "nixie_ee_flashing" ) )
|
||||
{
|
||||
self hidepart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
|
||||
wait n_blink_rate;
|
||||
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
|
||||
wait n_blink_rate;
|
||||
self hidepart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||
wait( n_blink_rate );
|
||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||
wait( n_blink_rate );
|
||||
}
|
||||
self showpart( "J_" + level.a_nixie_tube_code[ n_tube_index ] );
|
||||
|
||||
self showpart( "J_" + level.a_nixie_tube_code[n_tube_index] );
|
||||
}
|
||||
|
||||
nixie_115()
|
||||
{
|
||||
level waittill( "nixie_" + 115 );
|
||||
|
||||
level notify( "kill_nixie_input" );
|
||||
flag_set( "nixie_puzzle_solved" );
|
||||
flag_clear( "nixie_ee_flashing" );
|
||||
@ -547,12 +518,14 @@ nixie_115_audio()
|
||||
m_nixie_tube = getent( "nixie_tube_1", "targetname" );
|
||||
n_random_line = randomint( 3 );
|
||||
m_nixie_tube playsoundwithnotify( "vox_brutus_scary_voice_" + n_random_line, "scary_voice" );
|
||||
|
||||
m_nixie_tube waittill( "scary_voice" );
|
||||
}
|
||||
|
||||
nixie_935()
|
||||
{
|
||||
level waittill( "nixie_" + 935 );
|
||||
|
||||
level notify( "kill_nixie_input" );
|
||||
flag_set( "nixie_puzzle_solved" );
|
||||
flag_clear( "nixie_ee_flashing" );
|
||||
@ -565,7 +538,7 @@ nixie_935()
|
||||
|
||||
nixie_935_audio()
|
||||
{
|
||||
if ( isDefined( level.music_override ) && !level.music_override )
|
||||
if ( !( isdefined( level.music_override ) && level.music_override ) )
|
||||
{
|
||||
level.music_override = 1;
|
||||
playsoundatposition( "mus_zmb_secret_song_2", ( 0, 0, 0 ) );
|
||||
@ -577,18 +550,17 @@ nixie_935_audio()
|
||||
m_nixie_tube = getent( "nixie_tube_1", "targetname" );
|
||||
n_random_line = randomint( 3 );
|
||||
m_nixie_tube playsoundwithnotify( "vox_brutus_scary_voice_" + n_random_line, "scary_voice" );
|
||||
|
||||
m_nixie_tube waittill( "scary_voice" );
|
||||
}
|
||||
}
|
||||
|
||||
nixie_reset_control( b_reset_control )
|
||||
{
|
||||
i = 1;
|
||||
while ( i < 4 )
|
||||
for ( i = 1; i < 4; i++ )
|
||||
{
|
||||
m_nixie_tube = getent( "nixie_tube_" + i, "targetname" );
|
||||
m_nixie_tube thread afterlife_interact_object_think();
|
||||
m_nixie_tube thread nixie_tube_thread( i, b_reset_control );
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
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 );
|
||||
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" );
|
||||
level.chests[level.chests.size] = chest1;
|
||||
maps\mp\zombies\_zm_magicbox::treasure_chest_init( "start_chest" );
|
||||
}
|
||||
|
@ -1,38 +1,39 @@
|
||||
//checked includes match cerberus output
|
||||
#include maps/mp/zombies/_zm_ai_brutus;
|
||||
#include maps/mp/zombies/_zm_stats;
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/animscripts/zm_death;
|
||||
#include maps/mp/zombies/_zm_laststand;
|
||||
#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_score;
|
||||
#include maps\mp\zombies\_zm_laststand;
|
||||
#include maps\mp\animscripts\zm_death;
|
||||
#include maps\mp\zombies\_zm_audio;
|
||||
#include maps\mp\zombies\_zm_stats;
|
||||
#include maps\mp\zombies\_zm_ai_brutus;
|
||||
|
||||
//#using_animtree( "fxanim_props" ); //uncomment when the compiler supports anim trees
|
||||
|
||||
init_fan_trap_trigs() //checked matches cerberus output
|
||||
init_fan_trap_trigs()
|
||||
{
|
||||
trap_trigs = getentarray( "fan_trap_use_trigger", "targetname" );
|
||||
array_thread( trap_trigs, ::fan_trap_think );
|
||||
init_fan_fxanim( "wardens_office" );
|
||||
}
|
||||
|
||||
init_fan_trap_animtree() //checked matches cerberus output
|
||||
init_fan_trap_animtree()
|
||||
{
|
||||
scriptmodelsuseanimtree( -1 );
|
||||
}
|
||||
|
||||
init_fan_fxanim( str_loc ) //checked matches cerberus output
|
||||
#using_animtree("fxanim_props");
|
||||
|
||||
init_fan_fxanim( str_loc )
|
||||
{
|
||||
e_fan = getent( "fxanim_fan_" + str_loc, "targetname" );
|
||||
level.fan_trap_fxanims = [];
|
||||
level.fan_trap_fxanims[ "fan_trap_start" ] = %fxanim_zom_al_trap_fan_start_anim;
|
||||
level.fan_trap_fxanims[ "fan_trap_idle" ] = %fxanim_zom_al_trap_fan_idle_anim;
|
||||
level.fan_trap_fxanims[ "fan_trap_end" ] = %fxanim_zom_al_trap_fan_end_anim;
|
||||
level.fan_trap_fxanims["fan_trap_start"] = %fxanim_zom_al_trap_fan_start_anim;
|
||||
level.fan_trap_fxanims["fan_trap_idle"] = %fxanim_zom_al_trap_fan_idle_anim;
|
||||
level.fan_trap_fxanims["fan_trap_end"] = %fxanim_zom_al_trap_fan_end_anim;
|
||||
}
|
||||
|
||||
fan_trap_think() //checked changed to match cerberus output
|
||||
fan_trap_think()
|
||||
{
|
||||
triggers = getentarray( self.targetname, "targetname" );
|
||||
self.cost = 1000;
|
||||
@ -49,17 +50,17 @@ fan_trap_think() //checked changed to match cerberus output
|
||||
flag_wait( "activate_warden_office" );
|
||||
zapper_light_green( light_name );
|
||||
self hint_string( &"ZM_PRISON_FAN_TRAP", self.cost );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", who );
|
||||
|
||||
if ( who in_revive_trigger() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( !isDefined( self.is_available ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self.is_available ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( is_player_valid( who ) )
|
||||
{
|
||||
if ( who.score >= self.cost )
|
||||
@ -69,26 +70,29 @@ fan_trap_think() //checked changed to match cerberus output
|
||||
if ( !self.has_been_used )
|
||||
{
|
||||
self.has_been_used = 1;
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "trap" );
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trap" );
|
||||
who do_player_general_vox( "general", "discover_trap" );
|
||||
}
|
||||
else
|
||||
{
|
||||
who do_player_general_vox( "general", "start_trap" );
|
||||
}
|
||||
|
||||
self.zombie_dmg_trig.in_use = 1;
|
||||
self.zombie_dmg_trig.active = 1;
|
||||
self playsound( "zmb_trap_activate" );
|
||||
self thread fan_trap_move_switch( self );
|
||||
|
||||
self waittill( "switch_activated" );
|
||||
|
||||
who minus_to_player_score( self.cost );
|
||||
level.trapped_track[ "fan" ] = 1;
|
||||
level.trapped_track["fan"] = 1;
|
||||
level notify( "trap_activated" );
|
||||
who maps/mp/zombies/_zm_stats::increment_client_stat( "prison_fan_trap_used", 0 );
|
||||
who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_fan_trap_used", 0 );
|
||||
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" );
|
||||
self.zombie_dmg_trig setvisibletoall();
|
||||
self thread activate_fan_trap();
|
||||
|
||||
self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string );
|
||||
|
||||
clientnotify( self.script_string + "off" );
|
||||
self.zombie_dmg_trig notify( "fan_trap_finished" );
|
||||
self.zombie_dmg_trig.active = 0;
|
||||
@ -105,24 +109,27 @@ fan_trap_think() //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
activate_fan_trap() //checked changed to match cerberus output
|
||||
activate_fan_trap()
|
||||
{
|
||||
self.zombie_dmg_trig thread fan_trap_damage( self );
|
||||
e_fan = getent( "fxanim_fan_" + self.script_string, "targetname" );
|
||||
e_fan useanimtree( -1 );
|
||||
e_fan playsound( "zmb_trap_fan_start" );
|
||||
e_fan playloopsound( "zmb_trap_fan_loop", 2 );
|
||||
n_start_time = getanimlength( level.fan_trap_fxanims[ "fan_trap_start" ] );
|
||||
n_idle_time = getanimlength( level.fan_trap_fxanims[ "fan_trap_idle" ] );
|
||||
n_end_time = getanimlength( level.fan_trap_fxanims[ "fan_trap_end" ] );
|
||||
e_fan setanim( level.fan_trap_fxanims[ "fan_trap_start" ], 1, 0.1, 1 );
|
||||
wait n_start_time;
|
||||
e_fan setanim( level.fan_trap_fxanims[ "fan_trap_idle" ], 1, 0.1, 1 );
|
||||
n_start_time = getanimlength( level.fan_trap_fxanims["fan_trap_start"] );
|
||||
n_idle_time = getanimlength( level.fan_trap_fxanims["fan_trap_idle"] );
|
||||
n_end_time = getanimlength( level.fan_trap_fxanims["fan_trap_end"] );
|
||||
e_fan setanim( level.fan_trap_fxanims["fan_trap_start"], 1, 0.1, 1 );
|
||||
wait( n_start_time );
|
||||
e_fan setanim( level.fan_trap_fxanims["fan_trap_idle"], 1, 0.1, 1 );
|
||||
self thread fan_trap_timeout();
|
||||
self thread fan_trap_rumble_think();
|
||||
|
||||
self.zombie_dmg_trig waittill( "trap_finished_" + self.script_string );
|
||||
e_fan setanim( level.fan_trap_fxanims[ "fan_trap_end" ], 1, 0.1, 1 );
|
||||
|
||||
e_fan setanim( level.fan_trap_fxanims["fan_trap_end"], 1, 0.1, 1 );
|
||||
a_players = getplayers();
|
||||
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
if ( is_true( player.fan_trap_rumble ) )
|
||||
@ -131,45 +138,45 @@ activate_fan_trap() //checked changed to match cerberus output
|
||||
player.fan_trap_rumble = 0;
|
||||
}
|
||||
}
|
||||
|
||||
e_fan stoploopsound( 0.75 );
|
||||
e_fan playsound( "zmb_trap_fan_end" );
|
||||
wait n_end_time;
|
||||
wait( n_end_time );
|
||||
}
|
||||
|
||||
fan_trap_timeout() //checked does not match cerberus output did not change
|
||||
fan_trap_timeout()
|
||||
{
|
||||
self.zombie_dmg_trig endon( "trap_finished_" + self.script_string );
|
||||
n_duration = 0;
|
||||
while ( n_duration < 25 )
|
||||
{
|
||||
|
||||
for ( n_duration = 0; n_duration < 25; n_duration += 0.05 )
|
||||
wait 0.05;
|
||||
n_duration += 0.05;
|
||||
}
|
||||
|
||||
self.zombie_dmg_trig notify( "trap_finished_" + self.script_string );
|
||||
}
|
||||
|
||||
fan_trap_rumble_think() //checked matches cerberus output
|
||||
fan_trap_rumble_think()
|
||||
{
|
||||
self.zombie_dmg_trig endon( "trap_finished_" + self.script_string );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self.rumble_trig waittill( "trigger", ent );
|
||||
|
||||
if ( isplayer( ent ) )
|
||||
{
|
||||
if ( !is_true( ent.fan_trap_rumble ) )
|
||||
{
|
||||
self thread fan_trap_rumble( ent );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
fan_trap_rumble( player ) //checked changed to match cerberus output
|
||||
fan_trap_rumble( player )
|
||||
{
|
||||
player endon( "death" );
|
||||
player endon( "disconnect" );
|
||||
self.zombie_dmg_trig endon( "trap_finished_" + self.script_string );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( player istouching( self.rumble_trig ) )
|
||||
{
|
||||
@ -186,29 +193,31 @@ fan_trap_rumble( player ) //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
fan_trap_damage( parent ) //checked partially changed to match cerberus output
|
||||
fan_trap_damage( parent )
|
||||
{
|
||||
if ( isDefined( level.custom_fan_trap_damage_func ) )
|
||||
if ( isdefined( level.custom_fan_trap_damage_func ) )
|
||||
{
|
||||
self thread [[ level.custom_fan_trap_damage_func ]]( parent );
|
||||
return;
|
||||
}
|
||||
|
||||
self endon( "fan_trap_finished" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", ent );
|
||||
|
||||
if ( isplayer( ent ) )
|
||||
{
|
||||
ent thread player_fan_trap_damage();
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( is_true( ent.is_brutus ) )
|
||||
{
|
||||
ent maps/mp/zombies/_zm_ai_brutus::trap_damage_callback( self );
|
||||
ent maps\mp\zombies\_zm_ai_brutus::trap_damage_callback( self );
|
||||
return;
|
||||
}
|
||||
if ( !isDefined( ent.marked_for_death ) )
|
||||
|
||||
if ( !isdefined( ent.marked_for_death ) )
|
||||
{
|
||||
ent.marked_for_death = 1;
|
||||
ent thread zombie_fan_trap_death();
|
||||
@ -217,7 +226,7 @@ fan_trap_damage( parent ) //checked partially changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
fan_trap_move_switch( parent ) //checked matches cerberus output
|
||||
fan_trap_move_switch( parent )
|
||||
{
|
||||
light_name = "";
|
||||
tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" );
|
||||
@ -225,54 +234,57 @@ fan_trap_move_switch( parent ) //checked matches cerberus output
|
||||
zapper_light_red( light_name );
|
||||
tswitch rotatepitch( -180, 0.5 );
|
||||
tswitch playsound( "amb_sparks_l_b" );
|
||||
|
||||
tswitch waittill( "rotatedone" );
|
||||
|
||||
self notify( "switch_activated" );
|
||||
|
||||
self waittill( "available" );
|
||||
|
||||
tswitch rotatepitch( 180, 0.5 );
|
||||
zapper_light_green( light_name );
|
||||
}
|
||||
|
||||
player_fan_trap_damage() //checked matches cerberus output
|
||||
player_fan_trap_damage()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
if ( !self hasperk( "specialty_armorvest" ) || ( self.health - 100 ) < 1 )
|
||||
{
|
||||
|
||||
if ( !self hasperk( "specialty_armorvest" ) || self.health - 100 < 1 )
|
||||
radiusdamage( self.origin, 10, self.health + 100, self.health + 100 );
|
||||
}
|
||||
else
|
||||
{
|
||||
self dodamage( 50, self.origin );
|
||||
}
|
||||
}
|
||||
|
||||
zombie_fan_trap_death() //checked matches cerberus output
|
||||
zombie_fan_trap_death()
|
||||
{
|
||||
self endon( "death" );
|
||||
if ( !isDefined( self.is_brutus ) )
|
||||
|
||||
if ( !isdefined( self.is_brutus ) )
|
||||
{
|
||||
self.a.gib_ref = random( array( "guts", "right_arm", "left_arm", "head" ) );
|
||||
self thread maps/mp/animscripts/zm_death::do_gib();
|
||||
self thread maps\mp\animscripts\zm_death::do_gib();
|
||||
}
|
||||
|
||||
self setclientfield( "fan_trap_blood_fx", 1 );
|
||||
self thread stop_fan_trap_blood_fx();
|
||||
self dodamage( self.health + 1000, self.origin );
|
||||
}
|
||||
|
||||
stop_fan_trap_blood_fx() //checked matches cerberus output
|
||||
stop_fan_trap_blood_fx()
|
||||
{
|
||||
wait 2;
|
||||
wait 2.0;
|
||||
self setclientfield( "fan_trap_blood_fx", 0 );
|
||||
}
|
||||
|
||||
init_acid_trap_trigs() //checked matches cerberus output
|
||||
init_acid_trap_trigs()
|
||||
{
|
||||
trap_trigs = getentarray( "acid_trap_trigger", "targetname" );
|
||||
array_thread( trap_trigs, ::acid_trap_think );
|
||||
level thread acid_trap_host_migration_listener();
|
||||
}
|
||||
|
||||
acid_trap_think() //checked changed to match cerberus output
|
||||
acid_trap_think()
|
||||
{
|
||||
triggers = getentarray( self.targetname, "targetname" );
|
||||
self.is_available = 1;
|
||||
@ -287,17 +299,17 @@ acid_trap_think() //checked changed to match cerberus output
|
||||
flag_wait_any( "activate_cafeteria", "activate_infirmary" );
|
||||
zapper_light_green( light_name );
|
||||
self hint_string( &"ZM_PRISON_ACID_TRAP", self.cost );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", who );
|
||||
|
||||
if ( who in_revive_trigger() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( !isDefined( self.is_available ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self.is_available ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( is_player_valid( who ) )
|
||||
{
|
||||
if ( who.score >= self.cost )
|
||||
@ -307,38 +319,39 @@ acid_trap_think() //checked changed to match cerberus output
|
||||
if ( !self.has_been_used )
|
||||
{
|
||||
self.has_been_used = 1;
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "trap" );
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "trap" );
|
||||
who do_player_general_vox( "general", "discover_trap" );
|
||||
}
|
||||
else
|
||||
{
|
||||
who do_player_general_vox( "general", "start_trap" );
|
||||
}
|
||||
|
||||
self.zombie_dmg_trig.in_use = 1;
|
||||
self.zombie_dmg_trig.active = 1;
|
||||
self playsound( "zmb_trap_activate" );
|
||||
self thread acid_trap_move_switch( self );
|
||||
|
||||
self waittill( "switch_activated" );
|
||||
|
||||
who minus_to_player_score( self.cost );
|
||||
level.trapped_track[ "acid" ] = 1;
|
||||
level.trapped_track["acid"] = 1;
|
||||
level notify( "trap_activated" );
|
||||
who maps/mp/zombies/_zm_stats::increment_client_stat( "prison_acid_trap_used", 0 );
|
||||
who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_acid_trap_used", 0 );
|
||||
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_ACTIVE" );
|
||||
self thread activate_acid_trap();
|
||||
|
||||
self.zombie_dmg_trig waittill( "acid_trap_fx_done" );
|
||||
|
||||
clientnotify( self.script_string + "off" );
|
||||
if ( isDefined( self.fx_org ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.fx_org ) )
|
||||
self.fx_org delete();
|
||||
}
|
||||
if ( isDefined( self.zapper_fx_org ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.zapper_fx_org ) )
|
||||
self.zapper_fx_org delete();
|
||||
}
|
||||
if ( isDefined( self.zapper_fx_switch_org ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.zapper_fx_switch_org ) )
|
||||
self.zapper_fx_switch_org delete();
|
||||
}
|
||||
|
||||
self.zombie_dmg_trig notify( "acid_trap_finished" );
|
||||
self.zombie_dmg_trig.active = 0;
|
||||
array_thread( triggers, ::hint_string, &"ZOMBIE_TRAP_COOLDOWN" );
|
||||
@ -353,7 +366,7 @@ acid_trap_think() //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
acid_trap_move_switch( parent ) //checked matches cerberus output
|
||||
acid_trap_move_switch( parent )
|
||||
{
|
||||
light_name = "";
|
||||
tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" );
|
||||
@ -361,48 +374,56 @@ acid_trap_move_switch( parent ) //checked matches cerberus output
|
||||
zapper_light_red( light_name );
|
||||
tswitch rotatepitch( -180, 0.5 );
|
||||
tswitch playsound( "amb_sparks_l_b" );
|
||||
|
||||
tswitch waittill( "rotatedone" );
|
||||
|
||||
self notify( "switch_activated" );
|
||||
|
||||
self waittill( "available" );
|
||||
|
||||
tswitch rotatepitch( 180, 0.5 );
|
||||
zapper_light_green( light_name );
|
||||
}
|
||||
|
||||
activate_acid_trap() //checked changed to match cerberus output
|
||||
activate_acid_trap()
|
||||
{
|
||||
clientnotify( self.target );
|
||||
fire_points = getstructarray( self.target, "targetname" );
|
||||
|
||||
for ( i = 0; i < fire_points.size; i++ )
|
||||
{
|
||||
wait_network_frame();
|
||||
fire_points[ i ] thread acid_trap_fx( self );
|
||||
fire_points[i] thread acid_trap_fx( self );
|
||||
}
|
||||
|
||||
self.zombie_dmg_trig thread acid_trap_damage();
|
||||
}
|
||||
|
||||
acid_trap_damage() //checked partially changed to match cerberus output
|
||||
acid_trap_damage()
|
||||
{
|
||||
if ( isDefined( level.custom_acid_trap_damage_func ) )
|
||||
if ( isdefined( level.custom_acid_trap_damage_func ) )
|
||||
{
|
||||
self thread [[ level.custom_acid_trap_damage_func ]]();
|
||||
return;
|
||||
}
|
||||
|
||||
self endon( "acid_trap_finished" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", ent );
|
||||
|
||||
if ( isplayer( ent ) )
|
||||
{
|
||||
ent thread player_acid_damage( self );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( is_true( ent.is_brutus ) )
|
||||
{
|
||||
ent maps/mp/zombies/_zm_ai_brutus::trap_damage_callback( self );
|
||||
ent maps\mp\zombies\_zm_ai_brutus::trap_damage_callback( self );
|
||||
return;
|
||||
}
|
||||
if ( !isDefined( ent.marked_for_death ) )
|
||||
|
||||
if ( !isdefined( ent.marked_for_death ) )
|
||||
{
|
||||
ent.marked_for_death = 1;
|
||||
ent thread zombie_acid_damage();
|
||||
@ -411,34 +432,38 @@ acid_trap_damage() //checked partially changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
zombie_acid_damage() //checked matches cerberus output
|
||||
zombie_acid_damage()
|
||||
{
|
||||
self endon( "death" );
|
||||
self setclientfield( "acid_trap_death_fx", 1 );
|
||||
wait randomfloatrange( 0.25, 2 );
|
||||
if ( !isDefined( self.is_brutus ) )
|
||||
wait( randomfloatrange( 0.25, 2.0 ) );
|
||||
|
||||
if ( !isdefined( self.is_brutus ) )
|
||||
{
|
||||
self.a.gib_ref = random( array( "right_arm", "left_arm", "head", "right_leg", "left_leg", "no_legs" ) );
|
||||
self thread maps/mp/animscripts/zm_death::do_gib();
|
||||
self thread maps\mp\animscripts\zm_death::do_gib();
|
||||
}
|
||||
|
||||
self dodamage( self.health + 1000, self.origin );
|
||||
}
|
||||
|
||||
stop_acid_death_fx() //checked matches cerberus output
|
||||
stop_acid_death_fx()
|
||||
{
|
||||
wait 3;
|
||||
wait 3.0;
|
||||
self setclientfield( "acid_trap_death_fx", 0 );
|
||||
}
|
||||
|
||||
player_acid_damage( t_damage ) //checked changed to match cerberus output
|
||||
player_acid_damage( t_damage )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
t_damage endon( "acid_trap_finished" );
|
||||
if ( !isDefined( self.is_in_acid ) && !self player_is_in_laststand() )
|
||||
|
||||
if ( !isdefined( self.is_in_acid ) && !self player_is_in_laststand() )
|
||||
{
|
||||
self.is_in_acid = 1;
|
||||
self thread player_acid_damage_cooldown();
|
||||
|
||||
while ( self istouching( t_damage ) && !self player_is_in_laststand() && !self.afterlife )
|
||||
{
|
||||
self dodamage( self.maxhealth / 2, self.origin );
|
||||
@ -447,34 +472,36 @@ player_acid_damage( t_damage ) //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
player_acid_damage_cooldown() //checked matches cerberus output
|
||||
player_acid_damage_cooldown()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
wait 1;
|
||||
if ( isDefined( self ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self ) )
|
||||
self.is_in_acid = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
acid_trap_fx( notify_ent ) //checked matches cerberus output
|
||||
acid_trap_fx( notify_ent )
|
||||
{
|
||||
wait 25;
|
||||
notify_ent.zombie_dmg_trig notify( "acid_trap_fx_done" );
|
||||
}
|
||||
|
||||
acid_trap_host_migration_listener() //checked changed to match cerberus output
|
||||
acid_trap_host_migration_listener()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
level notify( "acid_trap_hostmigration" );
|
||||
level endon( "acid_trap_hostmigration" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "host_migration_end" );
|
||||
|
||||
trap_trigs = getentarray( "acid_trap_trigger", "targetname" );
|
||||
|
||||
foreach ( trigger in trap_trigs )
|
||||
{
|
||||
if ( isDefined( trigger.zombie_dmg_trig ) && isDefined( trigger.zombie_dmg_trig.active ) )
|
||||
if ( isdefined( trigger.zombie_dmg_trig ) && isdefined( trigger.zombie_dmg_trig.active ) )
|
||||
{
|
||||
if ( trigger.zombie_dmg_trig.active == 1 )
|
||||
{
|
||||
@ -486,16 +513,15 @@ acid_trap_host_migration_listener() //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
init_tower_trap_trigs() //checked changed to match cerberus output
|
||||
init_tower_trap_trigs()
|
||||
{
|
||||
trap_trigs = getentarray( "tower_trap_activate_trigger", "targetname" );
|
||||
|
||||
foreach ( trigger in trap_trigs )
|
||||
{
|
||||
trigger thread tower_trap_trigger_think();
|
||||
}
|
||||
}
|
||||
|
||||
tower_trap_trigger_think() //checked changed to match cerberus output
|
||||
tower_trap_trigger_think()
|
||||
{
|
||||
self.range_trigger = getent( self.target, "targetname" );
|
||||
self.upgrade_trigger = getent( self.script_string, "script_noteworthy" );
|
||||
@ -506,18 +532,19 @@ tower_trap_trigger_think() //checked changed to match cerberus output
|
||||
self.in_use = 0;
|
||||
self.has_been_used = 0;
|
||||
self.sndtowerent = spawn( "script_origin", ( -21, 5584, 356 ) );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self hint_string( &"ZM_PRISON_TOWER_TRAP", self.cost );
|
||||
|
||||
self waittill( "trigger", who );
|
||||
|
||||
if ( who in_revive_trigger() )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( !isDefined( self.is_available ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self.is_available ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( is_player_valid( who ) )
|
||||
{
|
||||
if ( who.score >= self.cost )
|
||||
@ -530,19 +557,20 @@ tower_trap_trigger_think() //checked changed to match cerberus output
|
||||
who do_player_general_vox( "general", "discover_trap" );
|
||||
}
|
||||
else
|
||||
{
|
||||
who do_player_general_vox( "general", "start_trap" );
|
||||
}
|
||||
|
||||
self.in_use = 1;
|
||||
self.active = 1;
|
||||
play_sound_at_pos( "purchase", who.origin );
|
||||
self thread tower_trap_move_switch( self );
|
||||
self playsound( "zmb_trap_activate" );
|
||||
|
||||
self waittill( "switch_activated" );
|
||||
|
||||
who minus_to_player_score( self.cost );
|
||||
level.trapped_track[ "tower" ] = 1;
|
||||
level.trapped_track["tower"] = 1;
|
||||
level notify( "trap_activated" );
|
||||
who maps/mp/zombies/_zm_stats::increment_client_stat( "prison_sniper_tower_used", 0 );
|
||||
who maps\mp\zombies\_zm_stats::increment_client_stat( "prison_sniper_tower_used", 0 );
|
||||
self hint_string( &"ZOMBIE_TRAP_ACTIVE" );
|
||||
self.sndtowerent playsound( "zmb_trap_tower_start" );
|
||||
self.sndtowerent playloopsound( "zmb_trap_tower_loop", 1 );
|
||||
@ -551,7 +579,9 @@ tower_trap_trigger_think() //checked changed to match cerberus output
|
||||
self thread tower_upgrade_trigger_think();
|
||||
level thread open_tower_trap_upgrade_panel();
|
||||
level thread tower_trap_upgrade_panel_closes_early();
|
||||
|
||||
self waittill( "tower_trap_off" );
|
||||
|
||||
self.sndtowerent stoploopsound( 1 );
|
||||
self.sndtowerent playsound( "zmb_trap_tower_end" );
|
||||
self.upgrade_trigger notify( "afterlife_interact_reset" );
|
||||
@ -570,43 +600,49 @@ tower_trap_trigger_think() //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
tower_upgrade_trigger_think() //checked matches cerberus output
|
||||
tower_upgrade_trigger_think()
|
||||
{
|
||||
self endon( "tower_trap_off" );
|
||||
self.upgrade_trigger.cost = 1000;
|
||||
self.upgrade_trigger.in_use = 0;
|
||||
self.upgrade_trigger.is_available = 1;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( self.upgrade_trigger.script_string );
|
||||
level.trapped_track[ "tower_upgrade" ] = 1;
|
||||
|
||||
level.trapped_track["tower_upgrade"] = 1;
|
||||
level notify( "tower_trap_upgraded" );
|
||||
level notify( "close_tower_trap_upgrade_panel" );
|
||||
self upgrade_tower_trap_weapon();
|
||||
self notify( "tower_trap_reset_timer" );
|
||||
self thread tower_trap_timer();
|
||||
|
||||
self waittill( "tower_trap_off" );
|
||||
|
||||
wait 25;
|
||||
}
|
||||
}
|
||||
|
||||
open_tower_trap_upgrade_panel() //checked matches cerberus output
|
||||
open_tower_trap_upgrade_panel()
|
||||
{
|
||||
e_door = getent( "tower_shockbox_door", "targetname" );
|
||||
e_door moveto( e_door.origin + vectorScale( ( 0, 1, 0 ), 40 ), 1 );
|
||||
e_door moveto( e_door.origin + vectorscale( ( 0, -1, 0 ), 40.0 ), 1.0 );
|
||||
|
||||
level waittill( "close_tower_trap_upgrade_panel" );
|
||||
e_door moveto( e_door.origin + vectorScale( ( 0, 1, 0 ), 40 ), 1 );
|
||||
|
||||
e_door moveto( e_door.origin + vectorscale( ( 0, 1, 0 ), 40.0 ), 1.0 );
|
||||
}
|
||||
|
||||
tower_trap_upgrade_panel_closes_early() //checked matches cerberus output
|
||||
tower_trap_upgrade_panel_closes_early()
|
||||
{
|
||||
level endon( "tower_trap_upgraded" );
|
||||
n_waittime = 24;
|
||||
wait n_waittime;
|
||||
wait( n_waittime );
|
||||
level notify( "close_tower_trap_upgrade_panel" );
|
||||
}
|
||||
|
||||
tower_trap_move_switch( parent ) //checked matches cerberus output
|
||||
tower_trap_move_switch( parent )
|
||||
{
|
||||
light_name = "";
|
||||
tswitch = getent( "trap_handle_" + parent.script_linkto, "targetname" );
|
||||
@ -614,36 +650,41 @@ tower_trap_move_switch( parent ) //checked matches cerberus output
|
||||
zapper_light_red( light_name );
|
||||
tswitch rotatepitch( -180, 0.5 );
|
||||
tswitch playsound( "amb_sparks_l_b" );
|
||||
|
||||
tswitch waittill( "rotatedone" );
|
||||
|
||||
self notify( "switch_activated" );
|
||||
|
||||
self waittill( "available" );
|
||||
|
||||
tswitch rotatepitch( 180, 0.5 );
|
||||
if ( isDefined( parent.script_noteworthy ) )
|
||||
{
|
||||
|
||||
if ( isdefined( parent.script_noteworthy ) )
|
||||
zapper_light_green( light_name );
|
||||
}
|
||||
}
|
||||
|
||||
activate_tower_trap() //checked changed to match cerberus output
|
||||
activate_tower_trap()
|
||||
{
|
||||
self endon( "tower_trap_off" );
|
||||
self.weapon_name = "tower_trap_zm";
|
||||
self.tag_to_target = "J_Head";
|
||||
self.trap_reload_time = 0.75;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
zombies = getaiarray( level.zombie_team );
|
||||
zombies_sorted = [];
|
||||
foreach(zombie in zombies)
|
||||
|
||||
foreach ( zombie in zombies )
|
||||
{
|
||||
if ( zombie istouching( self.range_trigger ) )
|
||||
{
|
||||
zombies_sorted[ zombies_sorted.size ] = zombie;
|
||||
}
|
||||
zombies_sorted[zombies_sorted.size] = zombie;
|
||||
}
|
||||
|
||||
if ( zombies_sorted.size <= 0 )
|
||||
{
|
||||
wait_network_frame();
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -653,119 +694,103 @@ activate_tower_trap() //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
upgrade_tower_trap_weapon() //checked matches cerberus output
|
||||
upgrade_tower_trap_weapon()
|
||||
{
|
||||
self.weapon_name = "tower_trap_upgraded_zm";
|
||||
self.tag_to_target = "J_SpineLower";
|
||||
self.trap_reload_time = 1.5;
|
||||
}
|
||||
|
||||
tower_trap_timer() //checked matches cerberus output
|
||||
tower_trap_timer()
|
||||
{
|
||||
self endon( "tower_trap_reset_timer" );
|
||||
/*
|
||||
/#
|
||||
self thread debug_tower_trap_timer();
|
||||
#/
|
||||
*/
|
||||
wait 25;
|
||||
self notify( "tower_trap_off" );
|
||||
}
|
||||
|
||||
debug_tower_trap_timer() //checked changed to match cerberus output
|
||||
debug_tower_trap_timer()
|
||||
{
|
||||
self endon( "tower_trap_reset_timer" );
|
||||
|
||||
for ( i = 1; i <= 25; i++ )
|
||||
{
|
||||
/*
|
||||
/#
|
||||
iprintln( "Tower Trap Timer = " + i );
|
||||
#/
|
||||
*/
|
||||
wait 1;
|
||||
wait 1.0;
|
||||
}
|
||||
}
|
||||
|
||||
tower_trap_fires( a_zombies ) //checked changed to match cerberus output
|
||||
tower_trap_fires( a_zombies )
|
||||
{
|
||||
if ( isDefined( level.custom_tower_trap_fires_func ) )
|
||||
if ( isdefined( level.custom_tower_trap_fires_func ) )
|
||||
{
|
||||
self thread [[ level.custom_tower_trap_fires_func ]]( a_zombies );
|
||||
return;
|
||||
}
|
||||
|
||||
self endon( "tower_trap_off" );
|
||||
e_org = getstruct( self.range_trigger.target, "targetname" );
|
||||
n_index = randomintrange( 0, a_zombies.size );
|
||||
while ( isalive( a_zombies[ n_index ] ) )
|
||||
|
||||
for ( n_index = randomintrange( 0, a_zombies.size ); isalive( a_zombies[n_index] ); n_index = randomintrange( 0, a_zombies.size ) )
|
||||
{
|
||||
e_target = a_zombies[ n_index ];
|
||||
e_target = a_zombies[n_index];
|
||||
v_zombietarget = e_target gettagorigin( self.tag_to_target );
|
||||
if ( sighttracepassed( e_org.origin, v_zombietarget, 1, undefined ) )
|
||||
{
|
||||
magicbullet( self.weapon_name, e_org.origin, v_zombietarget );
|
||||
wait self.trap_reload_time;
|
||||
}
|
||||
else
|
||||
{
|
||||
arrayremovevalue( a_zombies, e_target, 0 );
|
||||
wait_network_frame();
|
||||
if ( a_zombies.size <= 0 )
|
||||
{
|
||||
break;
|
||||
}
|
||||
n_index = randomintrange( 0, a_zombies.size );
|
||||
}
|
||||
asm_cond( a_zombies.size <= 0, loc_2676 );
|
||||
asm_jump( loc_268A );
|
||||
}
|
||||
}
|
||||
|
||||
hint_string( string, cost ) //checked matches cerberus output
|
||||
hint_string( string, cost )
|
||||
{
|
||||
if ( isDefined( cost ) )
|
||||
{
|
||||
if ( isdefined( cost ) )
|
||||
self sethintstring( string, cost );
|
||||
}
|
||||
else
|
||||
{
|
||||
self sethintstring( string );
|
||||
}
|
||||
|
||||
self setcursorhint( "HINT_NOICON" );
|
||||
}
|
||||
|
||||
zapper_light_red( lightname ) //checked changed to match cerberus output
|
||||
zapper_light_red( lightname )
|
||||
{
|
||||
zapper_lights = getentarray( lightname, "targetname" );
|
||||
|
||||
for ( i = 0; i < zapper_lights.size; i++ )
|
||||
{
|
||||
zapper_lights[ i ] setmodel( "p6_zm_al_wall_trap_control_red" );
|
||||
}
|
||||
zapper_lights[i] setmodel( "p6_zm_al_wall_trap_control_red" );
|
||||
}
|
||||
|
||||
zapper_light_green( lightname ) //checked changed to match cerberus output
|
||||
zapper_light_green( lightname )
|
||||
{
|
||||
zapper_lights = getentarray( lightname, "targetname" );
|
||||
|
||||
for ( i = 0; i < zapper_lights.size; i++ )
|
||||
{
|
||||
zapper_lights[ i ] setmodel( "p6_zm_al_wall_trap_control" );
|
||||
}
|
||||
zapper_lights[i] setmodel( "p6_zm_al_wall_trap_control" );
|
||||
}
|
||||
|
||||
get_trap_light_name() //checked matches cerberus output
|
||||
get_trap_light_name()
|
||||
{
|
||||
tswitch = getent( "trap_handle_" + self.script_linkto, "targetname" );
|
||||
switch( tswitch.script_linkname )
|
||||
|
||||
switch ( tswitch.script_linkname )
|
||||
{
|
||||
case "1":
|
||||
case "2":
|
||||
case "1":
|
||||
light_name = "trap_control_wardens_office";
|
||||
break;
|
||||
case "3":
|
||||
case "4":
|
||||
case "5":
|
||||
case "4":
|
||||
case "3":
|
||||
light_name = "trap_control_cafeteria";
|
||||
break;
|
||||
case "99":
|
||||
light_name = "trap_control_docks";
|
||||
break;
|
||||
}
|
||||
|
||||
return light_name;
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
@ -1,90 +1,93 @@
|
||||
//checked includes match cerberus output
|
||||
#include maps/mp/zombies/_zm_powerups;
|
||||
#include maps/mp/zombies/_zm_score;
|
||||
#include maps/mp/zombies/_zm_zonemgr;
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/animscripts/shared;
|
||||
#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\animscripts\shared;
|
||||
#include maps\mp\zombies\_zm_audio;
|
||||
#include maps\mp\zombies\_zm_zonemgr;
|
||||
#include maps\mp\zombies\_zm_score;
|
||||
#include maps\mp\zombies\_zm_powerups;
|
||||
|
||||
//#using_animtree( "fxanim_props" ); //leave commented for now for compiling
|
||||
|
||||
init() //checked changed to match cerberus output
|
||||
init()
|
||||
{
|
||||
flag_init( "soul_catchers_charged" );
|
||||
level.soul_catchers = [];
|
||||
level.soul_catchers_vol = [];
|
||||
level.no_gib_in_wolf_area = ::check_for_zombie_in_wolf_area;
|
||||
level.soul_catcher_clip[ "rune_2" ] = getent( "wolf_clip_docks", "targetname" );
|
||||
level.soul_catcher_clip[ "rune_3" ] = getent( "wolf_clip_infirmary", "targetname" );
|
||||
level.soul_catcher_clip["rune_2"] = getent( "wolf_clip_docks", "targetname" );
|
||||
level.soul_catcher_clip["rune_3"] = getent( "wolf_clip_infirmary", "targetname" );
|
||||
|
||||
foreach ( e_clip in level.soul_catcher_clip )
|
||||
{
|
||||
e_clip setinvisibletoall();
|
||||
}
|
||||
|
||||
level thread create_anim_references_on_server();
|
||||
registerclientfield( "actor", "make_client_clone", 9000, 4, "int" );
|
||||
onplayerconnect_callback( ::toggle_redeemer_trigger );
|
||||
onplayerconnect_callback( ::hellhole_projectile_watch );
|
||||
onplayerconnect_callback( ::hellhole_tomahawk_watch );
|
||||
level.a_wolf_structs = getstructarray( "wolf_position", "targetname" );
|
||||
|
||||
for ( i = 0; i < level.a_wolf_structs.size; i++ )
|
||||
{
|
||||
registerclientfield( "world", level.a_wolf_structs[ i ].script_parameters, 9000, 3, "int" );
|
||||
level.soul_catchers[ i ] = level.a_wolf_structs[ i ];
|
||||
level.soul_catchers_vol[ i ] = getent( level.a_wolf_structs[ i ].target, "targetname" );
|
||||
registerclientfield( "world", level.a_wolf_structs[i].script_parameters, 9000, 3, "int" );
|
||||
level.soul_catchers[i] = level.a_wolf_structs[i];
|
||||
level.soul_catchers_vol[i] = getent( level.a_wolf_structs[i].target, "targetname" );
|
||||
}
|
||||
|
||||
for ( i = 0; i < level.soul_catchers.size; i++ )
|
||||
{
|
||||
level.soul_catchers[ i ].souls_received = 0;
|
||||
level.soul_catchers[ i ].is_eating = 0;
|
||||
level.soul_catchers[ i ] thread soul_catcher_check();
|
||||
level.soul_catchers[i].souls_received = 0;
|
||||
level.soul_catchers[i].is_eating = 0;
|
||||
level.soul_catchers[i] thread soul_catcher_check();
|
||||
|
||||
if ( is_classic() )
|
||||
{
|
||||
level.soul_catchers[ i ] thread soul_catcher_state_manager();
|
||||
}
|
||||
level.soul_catchers[i] thread soul_catcher_state_manager();
|
||||
else
|
||||
{
|
||||
level.soul_catchers[ i ] thread grief_soul_catcher_state_manager();
|
||||
}
|
||||
level.soul_catchers[ i ] thread wolf_head_removal( "tomahawk_door_sign_" + ( i + 1 ) );
|
||||
level.soul_catchers_vol[ i ] = getent( level.soul_catchers[ i ].target, "targetname" );
|
||||
level.soul_catchers[i] thread grief_soul_catcher_state_manager();
|
||||
|
||||
level.soul_catchers[i] thread wolf_head_removal( "tomahawk_door_sign_" + ( i + 1 ) );
|
||||
level.soul_catchers_vol[i] = getent( level.soul_catchers[i].target, "targetname" );
|
||||
}
|
||||
|
||||
level.soul_catchers_charged = 0;
|
||||
level thread soul_catchers_charged();
|
||||
array_thread( level.zombie_spawners, ::add_spawn_function, ::zombie_spawn_func );
|
||||
}
|
||||
|
||||
create_anim_references_on_server() //checked matches cerberus output
|
||||
#using_animtree("fxanim_props");
|
||||
|
||||
create_anim_references_on_server()
|
||||
{
|
||||
root = %root;
|
||||
wolfhead_intro_anim = %o_zombie_dreamcatcher_intro;
|
||||
wolfhead_outtro_anim = %o_zombie_dreamcatcher_outtro;
|
||||
woflhead_idle_anims = [];
|
||||
wolfhead_idle_anim[ 0 ] = %o_zombie_dreamcatcher_idle;
|
||||
wolfhead_idle_anim[ 1 ] = %o_zombie_dreamcatcher_idle_twitch_scan;
|
||||
wolfhead_idle_anim[ 2 ] = %o_zombie_dreamcatcher_idle_twitch_shake;
|
||||
wolfhead_idle_anim[ 3 ] = %o_zombie_dreamcatcher_idle_twitch_yawn;
|
||||
wolfhead_idle_anim[0] = %o_zombie_dreamcatcher_idle;
|
||||
wolfhead_idle_anim[1] = %o_zombie_dreamcatcher_idle_twitch_scan;
|
||||
wolfhead_idle_anim[2] = %o_zombie_dreamcatcher_idle_twitch_shake;
|
||||
wolfhead_idle_anim[3] = %o_zombie_dreamcatcher_idle_twitch_yawn;
|
||||
wolfhead_body_death = %ai_zombie_dreamcatch_impact;
|
||||
wolfhead_body_float = %ai_zombie_dreamcatch_rise;
|
||||
wolfhead_body_shrink = %ai_zombie_dreamcatch_shrink_a;
|
||||
wolfhead_pre_eat_anims = [];
|
||||
wolfhead_pre_eat_anims[ "right" ] = %o_zombie_dreamcatcher_wallconsume_pre_eat_r;
|
||||
wolfhead_pre_eat_anims[ "left" ] = %o_zombie_dreamcatcher_wallconsume_pre_eat_l;
|
||||
wolfhead_pre_eat_anims[ "front" ] = %o_zombie_dreamcatcher_wallconsume_pre_eat_f;
|
||||
wolfhead_eat_anims[ "right" ] = %o_zombie_dreamcatcher_wallconsume_align_r;
|
||||
wolfhead_eat_anims[ "left" ] = %o_zombie_dreamcatcher_wallconsume_align_l;
|
||||
wolfhead_eat_anims[ "front" ] = %o_zombie_dreamcatcher_wallconsume_align_f;
|
||||
wolfhead_body_anims[ "right" ] = %ai_zombie_dreamcatcher_wallconsume_align_r;
|
||||
wolfhead_body_anims[ "left" ] = %ai_zombie_dreamcatcher_wallconsume_align_l;
|
||||
wolfhead_body_anims[ "front" ] = %ai_zombie_dreamcatcher_wallconsume_align_f;
|
||||
wolfhead_pre_eat_anims["right"] = %o_zombie_dreamcatcher_wallconsume_pre_eat_r;
|
||||
wolfhead_pre_eat_anims["left"] = %o_zombie_dreamcatcher_wallconsume_pre_eat_l;
|
||||
wolfhead_pre_eat_anims["front"] = %o_zombie_dreamcatcher_wallconsume_pre_eat_f;
|
||||
wolfhead_eat_anims["right"] = %o_zombie_dreamcatcher_wallconsume_align_r;
|
||||
wolfhead_eat_anims["left"] = %o_zombie_dreamcatcher_wallconsume_align_l;
|
||||
wolfhead_eat_anims["front"] = %o_zombie_dreamcatcher_wallconsume_align_f;
|
||||
wolfhead_body_anims["right"] = %ai_zombie_dreamcatcher_wallconsume_align_r;
|
||||
wolfhead_body_anims["left"] = %ai_zombie_dreamcatcher_wallconsume_align_l;
|
||||
wolfhead_body_anims["front"] = %ai_zombie_dreamcatcher_wallconsume_align_f;
|
||||
}
|
||||
|
||||
soul_catcher_state_manager() //checked changed to match cerberus output
|
||||
soul_catcher_state_manager()
|
||||
{
|
||||
wait 1;
|
||||
wait 1.0;
|
||||
|
||||
if ( self.script_noteworthy == "rune_3" )
|
||||
{
|
||||
trigger = getent( "wolf_hurt_trigger", "targetname" );
|
||||
@ -95,8 +98,11 @@ soul_catcher_state_manager() //checked changed to match cerberus output
|
||||
trigger = getent( "wolf_hurt_trigger_docks", "targetname" );
|
||||
trigger hide();
|
||||
}
|
||||
|
||||
level setclientfield( self.script_parameters, 0 );
|
||||
|
||||
self waittill( "first_zombie_killed_in_zone" );
|
||||
|
||||
if ( self.script_noteworthy == "rune_3" )
|
||||
{
|
||||
trigger = getent( "wolf_hurt_trigger", "targetname" );
|
||||
@ -107,25 +113,27 @@ soul_catcher_state_manager() //checked changed to match cerberus output
|
||||
trigger = getent( "wolf_hurt_trigger_docks", "targetname" );
|
||||
trigger show();
|
||||
}
|
||||
if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) )
|
||||
{
|
||||
level.soul_catcher_clip[ self.script_noteworthy ] setvisibletoall();
|
||||
}
|
||||
|
||||
if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) )
|
||||
level.soul_catcher_clip[self.script_noteworthy] setvisibletoall();
|
||||
|
||||
level setclientfield( self.script_parameters, 1 );
|
||||
anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
|
||||
wait anim_length;
|
||||
wait( anim_length );
|
||||
|
||||
while ( !self.is_charged )
|
||||
{
|
||||
level setclientfield( self.script_parameters, 2 );
|
||||
self waittill_either( "fully_charged", "finished_eating" );
|
||||
}
|
||||
|
||||
level setclientfield( self.script_parameters, 6 );
|
||||
anim_length = getanimlength( %o_zombie_dreamcatcher_outtro );
|
||||
wait anim_length;
|
||||
if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) )
|
||||
{
|
||||
level.soul_catcher_clip[ self.script_noteworthy ] delete();
|
||||
}
|
||||
wait( anim_length );
|
||||
|
||||
if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) )
|
||||
level.soul_catcher_clip[self.script_noteworthy] delete();
|
||||
|
||||
if ( self.script_noteworthy == "rune_3" )
|
||||
{
|
||||
trigger = getent( "wolf_hurt_trigger", "targetname" );
|
||||
@ -136,35 +144,40 @@ soul_catcher_state_manager() //checked changed to match cerberus output
|
||||
trigger = getent( "wolf_hurt_trigger_docks", "targetname" );
|
||||
trigger delete();
|
||||
}
|
||||
|
||||
level setclientfield( self.script_parameters, 7 );
|
||||
}
|
||||
|
||||
grief_soul_catcher_state_manager() //checked matches cerberus output
|
||||
grief_soul_catcher_state_manager()
|
||||
{
|
||||
wait 1;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level setclientfield( self.script_parameters, 0 );
|
||||
|
||||
self waittill( "first_zombie_killed_in_zone" );
|
||||
if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) )
|
||||
{
|
||||
level.soul_catcher_clip[ self.script_noteworthy ] setvisibletoall();
|
||||
}
|
||||
|
||||
if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) )
|
||||
level.soul_catcher_clip[self.script_noteworthy] setvisibletoall();
|
||||
|
||||
level setclientfield( self.script_parameters, 1 );
|
||||
anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
|
||||
wait anim_length;
|
||||
wait( anim_length );
|
||||
|
||||
while ( !self.is_charged )
|
||||
{
|
||||
level setclientfield( self.script_parameters, 2 );
|
||||
self waittill_either( "fully_charged", "finished_eating" );
|
||||
}
|
||||
|
||||
level setclientfield( self.script_parameters, 6 );
|
||||
anim_length = getanimlength( %o_zombie_dreamcatcher_outtro );
|
||||
wait anim_length;
|
||||
if ( isDefined( level.soul_catcher_clip[ self.script_noteworthy ] ) )
|
||||
{
|
||||
level.soul_catcher_clip[ self.script_noteworthy ] delete();
|
||||
}
|
||||
wait( anim_length );
|
||||
|
||||
if ( isdefined( level.soul_catcher_clip[self.script_noteworthy] ) )
|
||||
level.soul_catcher_clip[self.script_noteworthy] delete();
|
||||
|
||||
self.souls_received = 0;
|
||||
level thread wolf_spit_out_powerup();
|
||||
wait 20;
|
||||
@ -172,18 +185,18 @@ grief_soul_catcher_state_manager() //checked matches cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
wolf_spit_out_powerup() //checked changed to match cerberus output
|
||||
wolf_spit_out_powerup()
|
||||
{
|
||||
if ( isDefined( level.enable_magic ) && !level.enable_magic )
|
||||
{
|
||||
if ( !( isdefined( level.enable_magic ) && level.enable_magic ) )
|
||||
return;
|
||||
}
|
||||
|
||||
power_origin_struct = getstruct( "wolf_puke_powerup_origin", "targetname" );
|
||||
|
||||
if ( randomint( 100 ) < 20 )
|
||||
{
|
||||
for ( i = 0; i < level.zombie_powerup_array.size; i++ )
|
||||
{
|
||||
if ( level.zombie_powerup_array[ i ] == "meat_stink" )
|
||||
if ( level.zombie_powerup_array[i] == "meat_stink" )
|
||||
{
|
||||
level.zombie_powerup_index = i;
|
||||
found = 1;
|
||||
@ -191,211 +204,204 @@ wolf_spit_out_powerup() //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
}
|
||||
while ( 1 )
|
||||
else
|
||||
{
|
||||
while ( true )
|
||||
{
|
||||
level.zombie_powerup_index = randomint( level.zombie_powerup_array.size );
|
||||
if ( level.zombie_powerup_array[ level.zombie_powerup_index ] == "nuke" )
|
||||
|
||||
if ( level.zombie_powerup_array[level.zombie_powerup_index] == "nuke" )
|
||||
{
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
spawn_infinite_powerup_drop( power_origin_struct.origin, level.zombie_powerup_array[ level.zombie_powerup_index ] );
|
||||
power_ups = get_array_of_closest( power_origin_struct.origin, level.active_powerups, undefined, undefined, 100 );
|
||||
if ( isDefined( power_ups[ 0 ] ) )
|
||||
{
|
||||
power_ups[ 0 ] movez( 120, 4 );
|
||||
}
|
||||
|
||||
spawn_infinite_powerup_drop( power_origin_struct.origin, level.zombie_powerup_array[level.zombie_powerup_index] );
|
||||
power_ups = get_array_of_closest( power_origin_struct.origin, level.active_powerups, undefined, undefined, 100 );
|
||||
|
||||
if ( isdefined( power_ups[0] ) )
|
||||
power_ups[0] movez( 120, 4 );
|
||||
}
|
||||
|
||||
zombie_spawn_func() //checked matches cerberus output
|
||||
zombie_spawn_func()
|
||||
{
|
||||
self.actor_killed_override = ::zombie_killed_override;
|
||||
}
|
||||
|
||||
zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime ) //checked changed to match cerberus output
|
||||
zombie_killed_override( einflictor, attacker, idamage, smeansofdeath, sweapon, vdir, shitloc, psoffsettime )
|
||||
{
|
||||
if ( !is_true( self.has_legs ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( isplayer( attacker ) )
|
||||
{
|
||||
for ( i = 0; i < level.soul_catchers.size; i++ )
|
||||
{
|
||||
if ( self istouching( level.soul_catchers_vol[ i ] ) )
|
||||
if ( self istouching( level.soul_catchers_vol[i] ) )
|
||||
{
|
||||
if ( !level.soul_catchers[ i ].is_charged )
|
||||
if ( !level.soul_catchers[i].is_charged )
|
||||
{
|
||||
self.deathfunction = ::zombie_soul_catcher_death;
|
||||
self.my_soul_catcher = level.soul_catchers[ i ];
|
||||
self.my_soul_catcher = level.soul_catchers[i];
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
check_for_zombie_in_wolf_area() //checked changed to match cerberus output
|
||||
check_for_zombie_in_wolf_area()
|
||||
{
|
||||
for ( i = 0; i < level.soul_catchers.size; i++ )
|
||||
{
|
||||
if ( self istouching( level.soul_catchers_vol[ i ] ) )
|
||||
if ( self istouching( level.soul_catchers_vol[i] ) )
|
||||
{
|
||||
if ( !level.soul_catchers[ i ].is_charged && !level.soul_catchers[ i ].is_eating )
|
||||
{
|
||||
return 1;
|
||||
if ( !level.soul_catchers[i].is_charged && !level.soul_catchers[i].is_eating )
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
zombie_soul_catcher_death() //checked matches cerberus output
|
||||
zombie_soul_catcher_death()
|
||||
{
|
||||
self thread maps/mp/zombies/_zm_spawner::zombie_death_animscript();
|
||||
if ( isDefined( self._race_team ) )
|
||||
{
|
||||
self thread maps\mp\zombies\_zm_spawner::zombie_death_animscript();
|
||||
|
||||
if ( isdefined( self._race_team ) )
|
||||
team = self._race_team;
|
||||
}
|
||||
level maps/mp/zombies/_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self, team );
|
||||
|
||||
level maps\mp\zombies\_zm_spawner::zombie_death_points( self.origin, self.damagemod, self.damagelocation, self.attacker, self, team );
|
||||
|
||||
if ( self.my_soul_catcher.is_eating )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return false;
|
||||
|
||||
if ( self.my_soul_catcher.souls_received >= 6 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return false;
|
||||
|
||||
self.my_soul_catcher.is_eating = 1;
|
||||
|
||||
if ( self.my_soul_catcher.souls_received == 0 )
|
||||
{
|
||||
self.my_soul_catcher notify( "first_zombie_killed_in_zone" );
|
||||
self thread notify_wolf_intro_anim_complete();
|
||||
}
|
||||
|
||||
client_notify_value = self get_correct_model_array();
|
||||
self setclientfield( "make_client_clone", client_notify_value );
|
||||
self setanimstatefromasd( "zm_portal_death" );
|
||||
self maps/mp/animscripts/shared::donotetracks( "portal_death" );
|
||||
self maps\mp\animscripts\shared::donotetracks( "portal_death" );
|
||||
|
||||
if ( self.my_soul_catcher.souls_received == 0 )
|
||||
{
|
||||
self waittill( "wolf_intro_anim_complete" );
|
||||
}
|
||||
|
||||
n_eating_anim = self which_eating_anim();
|
||||
self ghost();
|
||||
level setclientfield( self.my_soul_catcher.script_parameters, n_eating_anim );
|
||||
|
||||
if ( n_eating_anim == 3 )
|
||||
{
|
||||
total_wait_time = 3 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_f );
|
||||
}
|
||||
total_wait_time = 3.0 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_f );
|
||||
else if ( n_eating_anim == 4 )
|
||||
{
|
||||
total_wait_time = 3 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_r );
|
||||
}
|
||||
total_wait_time = 3.0 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_r );
|
||||
else
|
||||
{
|
||||
total_wait_time = 3 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_l );
|
||||
}
|
||||
wait ( total_wait_time - 0.5 );
|
||||
total_wait_time = 3.0 + getanimlength( %ai_zombie_dreamcatcher_wallconsume_align_l );
|
||||
|
||||
wait( total_wait_time - 0.5 );
|
||||
self.my_soul_catcher.souls_received++;
|
||||
wait 0.5;
|
||||
self.my_soul_catcher notify( "finished_eating" );
|
||||
self.my_soul_catcher.is_eating = 0;
|
||||
self delete();
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
|
||||
get_correct_model_array() //checked matches cerberus output
|
||||
get_correct_model_array()
|
||||
{
|
||||
mod = 0;
|
||||
if ( self.model == "c_zom_guard_body" && isDefined( self.hatmodel ) && self.hatmodel == "c_zom_guard_hat" )
|
||||
{
|
||||
|
||||
if ( self.model == "c_zom_guard_body" && isdefined( self.hatmodel ) && self.hatmodel == "c_zom_guard_hat" )
|
||||
mod = 4;
|
||||
}
|
||||
|
||||
if ( self.headmodel == "c_zom_zombie_barbwire_head" )
|
||||
{
|
||||
return 1 + mod;
|
||||
}
|
||||
|
||||
if ( self.headmodel == "c_zom_zombie_hellcatraz_head" )
|
||||
{
|
||||
return 2 + mod;
|
||||
}
|
||||
|
||||
if ( self.headmodel == "c_zom_zombie_mask_head" )
|
||||
{
|
||||
return 3 + mod;
|
||||
}
|
||||
|
||||
if ( self.headmodel == "c_zom_zombie_slackjaw_head" )
|
||||
{
|
||||
return 4 + mod;
|
||||
}
|
||||
|
||||
return 5;
|
||||
}
|
||||
|
||||
notify_wolf_intro_anim_complete() //checked matches cerberus output
|
||||
notify_wolf_intro_anim_complete()
|
||||
{
|
||||
anim_length = getanimlength( %o_zombie_dreamcatcher_intro );
|
||||
wait anim_length;
|
||||
wait( anim_length );
|
||||
self notify( "wolf_intro_anim_complete" );
|
||||
}
|
||||
|
||||
which_eating_anim() //checked matches cerberus output
|
||||
which_eating_anim()
|
||||
{
|
||||
soul_catcher = self.my_soul_catcher;
|
||||
forward_dot = vectordot( anglesToForward( soul_catcher.angles ), vectornormalize( self.origin - soul_catcher.origin ) );
|
||||
forward_dot = vectordot( anglestoforward( soul_catcher.angles ), vectornormalize( self.origin - soul_catcher.origin ) );
|
||||
|
||||
if ( forward_dot > 0.85 )
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
else
|
||||
{
|
||||
right_dot = vectordot( anglesToRight( soul_catcher.angles ), self.origin - soul_catcher.origin );
|
||||
right_dot = vectordot( anglestoright( soul_catcher.angles ), self.origin - soul_catcher.origin );
|
||||
|
||||
if ( right_dot > 0 )
|
||||
{
|
||||
return 4;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 5;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
soul_catcher_check() //checked changed to match cerberus output
|
||||
soul_catcher_check()
|
||||
{
|
||||
self.is_charged = 0;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( self.souls_received >= 6 )
|
||||
{
|
||||
level.soul_catchers_charged++;
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "tomahawk_" + level.soul_catchers_charged );
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "tomahawk_" + level.soul_catchers_charged );
|
||||
self.is_charged = 1;
|
||||
self notify( "fully_charged" );
|
||||
break;
|
||||
}
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
|
||||
if ( level.soul_catchers_charged == 1 )
|
||||
{
|
||||
self thread first_wolf_complete_vo();
|
||||
}
|
||||
else if ( level.soul_catchers_charged >= level.soul_catchers.size )
|
||||
{
|
||||
self thread final_wolf_complete_vo();
|
||||
}
|
||||
}
|
||||
|
||||
wolf_head_removal( wolf_head_model_string ) //checked matches cerberus output
|
||||
wolf_head_removal( wolf_head_model_string )
|
||||
{
|
||||
wolf_head_model = getent( wolf_head_model_string, "targetname" );
|
||||
wolf_head_model setmodel( "p6_zm_al_dream_catcher_off" );
|
||||
|
||||
self waittill( "fully_charged" );
|
||||
|
||||
wolf_head_model setmodel( "p6_zm_al_dream_catcher" );
|
||||
}
|
||||
|
||||
soul_catchers_charged() //checked changed to match cerberus output
|
||||
soul_catchers_charged()
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
if ( level.soul_catchers_charged >= level.soul_catchers.size )
|
||||
{
|
||||
@ -403,162 +409,171 @@ soul_catchers_charged() //checked changed to match cerberus output
|
||||
level notify( "soul_catchers_charged" );
|
||||
break;
|
||||
}
|
||||
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
|
||||
first_wolf_encounter_vo() //checked changed to match cerberus output
|
||||
first_wolf_encounter_vo()
|
||||
{
|
||||
if ( !is_classic() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
wait 2;
|
||||
|
||||
wait 2.0;
|
||||
a_players = getplayers();
|
||||
a_closest = get_array_of_closest( self.origin, a_players );
|
||||
|
||||
for ( i = 0; i < a_closest.size; i++ )
|
||||
{
|
||||
if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak )
|
||||
if ( !( isdefined( a_closest[i].dontspeak ) && a_closest[i].dontspeak ) )
|
||||
{
|
||||
a_closest[ i ] thread do_player_general_vox( "general", "wolf_encounter" );
|
||||
a_closest[i] thread do_player_general_vox( "general", "wolf_encounter" );
|
||||
level.wolf_encounter_vo_played = 1;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
first_wolf_complete_vo() //checked changed to match cerberus output
|
||||
first_wolf_complete_vo()
|
||||
{
|
||||
if ( !is_classic() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
wait 3.5;
|
||||
a_players = getplayers();
|
||||
a_closest = get_array_of_closest( self.origin, a_players );
|
||||
|
||||
for ( i = 0; i < a_closest.size; i++ )
|
||||
{
|
||||
if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak )
|
||||
if ( !( isdefined( a_closest[i].dontspeak ) && a_closest[i].dontspeak ) )
|
||||
{
|
||||
a_closest[ i ] thread do_player_general_vox( "general", "wolf_complete" );
|
||||
a_closest[i] thread do_player_general_vox( "general", "wolf_complete" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
final_wolf_complete_vo() //checked changed to match cerberus output
|
||||
final_wolf_complete_vo()
|
||||
{
|
||||
if ( !is_classic() )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
wait 3.5;
|
||||
a_players = getplayers();
|
||||
a_closest = get_array_of_closest( self.origin, a_players );
|
||||
|
||||
for ( i = 0; i < a_closest.size; i++ )
|
||||
{
|
||||
if ( isDefined( a_closest[ i ].dontspeak ) && !a_closest[ i ].dontspeak )
|
||||
if ( !( isdefined( a_closest[i].dontspeak ) && a_closest[i].dontspeak ) )
|
||||
{
|
||||
a_closest[ i ] thread do_player_general_vox( "general", "wolf_final" );
|
||||
a_closest[i] thread do_player_general_vox( "general", "wolf_final" );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tomahawk_upgrade_quest() //checked changed to match cerberus output
|
||||
tomahawk_upgrade_quest()
|
||||
{
|
||||
if ( isDefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
|
||||
{
|
||||
if ( isdefined( level.gamedifficulty ) && level.gamedifficulty == 0 )
|
||||
return;
|
||||
}
|
||||
|
||||
self endon( "disconnect" );
|
||||
|
||||
for ( self.tomahawk_upgrade_kills = 0; self.tomahawk_upgrade_kills < 15; self.tomahawk_upgrade_kills++ )
|
||||
{
|
||||
self waittill( "got_a_tomahawk_kill" );
|
||||
}
|
||||
wait 1;
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
|
||||
e_org = spawn( "script_origin", self.origin + vectorScale( ( 0, 0, 1 ), 64 ) );
|
||||
|
||||
wait 1.0;
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" );
|
||||
e_org = spawn( "script_origin", self.origin + vectorscale( ( 0, 0, 1 ), 64.0 ) );
|
||||
e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" );
|
||||
|
||||
e_org waittill( "easteregg_scream_complete" );
|
||||
|
||||
e_org delete();
|
||||
|
||||
while ( level.round_number < 10 )
|
||||
{
|
||||
wait 0.5;
|
||||
}
|
||||
|
||||
self ent_flag_init( "gg_round_done" );
|
||||
|
||||
while ( !self ent_flag( "gg_round_done" ) )
|
||||
{
|
||||
level waittill( "between_round_over" );
|
||||
|
||||
self.killed_with_only_tomahawk = 1;
|
||||
self.killed_something_thq = 0;
|
||||
if ( !self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
||||
{
|
||||
|
||||
if ( !self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
level waittill( "end_of_round" );
|
||||
|
||||
if ( !self.killed_with_only_tomahawk || !self.killed_something_thq )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( !self maps/mp/zombies/_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
||||
{
|
||||
|
||||
if ( !self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
self ent_flag_set( "gg_round_done" );
|
||||
}
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
|
||||
e_org = spawn( "script_origin", self.origin + vectorScale( ( 0, 0, 1 ), 64 ) );
|
||||
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" );
|
||||
e_org = spawn( "script_origin", self.origin + vectorscale( ( 0, 0, 1 ), 64.0 ) );
|
||||
e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" );
|
||||
|
||||
e_org waittill( "easteregg_scream_complete" );
|
||||
|
||||
e_org delete();
|
||||
self notify( "hellhole_time" );
|
||||
|
||||
self waittill( "tomahawk_in_hellhole" );
|
||||
if ( isDefined( self.retriever_trigger ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.retriever_trigger ) )
|
||||
self.retriever_trigger setinvisibletoplayer( self );
|
||||
}
|
||||
else
|
||||
{
|
||||
trigger = getent( "retriever_pickup_trigger", "script_noteworthy" );
|
||||
self.retriever_trigger = trigger;
|
||||
self.retriever_trigger setinvisibletoplayer( self );
|
||||
}
|
||||
|
||||
self takeweapon( "bouncing_tomahawk_zm" );
|
||||
self set_player_tactical_grenade( "none" );
|
||||
self notify( "tomahawk_upgraded_swap" );
|
||||
level thread maps/mp/zombies/_zm_audio::sndmusicstingerevent( "quest_generic" );
|
||||
e_org = spawn( "script_origin", self.origin + vectorScale( ( 0, 0, 1 ), 64 ) );
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "quest_generic" );
|
||||
e_org = spawn( "script_origin", self.origin + vectorscale( ( 0, 0, 1 ), 64.0 ) );
|
||||
e_org playsoundwithnotify( "zmb_easteregg_scream", "easteregg_scream_complete" );
|
||||
|
||||
e_org waittill( "easteregg_scream_complete" );
|
||||
|
||||
e_org delete();
|
||||
|
||||
level waittill( "end_of_round" );
|
||||
|
||||
tomahawk_pick = getent( "spinning_tomahawk_pickup", "targetname" );
|
||||
tomahawk_pick setclientfield( "play_tomahawk_fx", 2 );
|
||||
self.current_tomahawk_weapon = "upgraded_tomahawk_zm";
|
||||
}
|
||||
|
||||
toggle_redeemer_trigger() //checked changed to match cerberus output
|
||||
toggle_redeemer_trigger()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
flag_wait( "tomahawk_pickup_complete" );
|
||||
upgraded_tomahawk_trigger = getent( "redeemer_pickup_trigger", "script_noteworthy" );
|
||||
upgraded_tomahawk_trigger setinvisibletoplayer( self );
|
||||
tomahawk_model = getent( "spinning_tomahawk_pickup", "targetname" );
|
||||
while ( 1 )
|
||||
{
|
||||
if ( isDefined( self.current_tomahawk_weapon ) && self.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( isdefined( self.current_tomahawk_weapon ) && self.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( isDefined( self.afterlife ) && self.afterlife )
|
||||
if ( isdefined( self.afterlife ) && self.afterlife )
|
||||
{
|
||||
upgraded_tomahawk_trigger setvisibletoplayer( self );
|
||||
tomahawk_model setvisibletoplayer( self );
|
||||
@ -568,75 +583,72 @@ toggle_redeemer_trigger() //checked changed to match cerberus output
|
||||
upgraded_tomahawk_trigger setinvisibletoplayer( self );
|
||||
tomahawk_model setinvisibletoplayer( self );
|
||||
}
|
||||
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
|
||||
hellhole_projectile_watch() //checked matches cerberus output
|
||||
hellhole_projectile_watch()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "grenade_fire", grenade, weapname );
|
||||
|
||||
if ( weapname == "frag_grenade_zm" )
|
||||
{
|
||||
self thread hellhole_grenades( grenade );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hellhole_tomahawk_watch() //checked matches cerberus output
|
||||
hellhole_tomahawk_watch()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "hellhole_time" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "grenade_fire", grenade, weapname );
|
||||
|
||||
if ( weapname == "bouncing_tomahawk_zm" )
|
||||
{
|
||||
self thread hellhole_tomahawk( grenade );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
hellhole_grenades( grenade ) //checked matches cerberus output
|
||||
hellhole_grenades( grenade )
|
||||
{
|
||||
grenade endon( "death" );
|
||||
trig_hellhole = getent( "trig_cellblock_hellhole", "targetname" );
|
||||
|
||||
while ( !grenade istouching( trig_hellhole ) )
|
||||
{
|
||||
wait 0.05;
|
||||
}
|
||||
self maps/mp/zombies/_zm_score::add_to_player_score( 20 );
|
||||
playfx( level._effect[ "tomahawk_hellhole" ], grenade.origin );
|
||||
|
||||
self maps\mp\zombies\_zm_score::add_to_player_score( 20 );
|
||||
playfx( level._effect["tomahawk_hellhole"], grenade.origin );
|
||||
playsoundatposition( "wpn_grenade_poof", grenade.origin );
|
||||
grenade delete();
|
||||
}
|
||||
|
||||
hellhole_tomahawk( grenade ) //checked matches cerberus output
|
||||
hellhole_tomahawk( grenade )
|
||||
{
|
||||
grenade endon( "death" );
|
||||
trig_hellhole = getent( "trig_cellblock_hellhole", "targetname" );
|
||||
|
||||
while ( !grenade istouching( trig_hellhole ) )
|
||||
{
|
||||
wait 0.05;
|
||||
}
|
||||
|
||||
self notify( "tomahawk_in_hellhole" );
|
||||
grenade notify( "in_hellhole" );
|
||||
playfx( level._effect[ "tomahawk_hellhole" ], grenade.origin );
|
||||
playfx( level._effect["tomahawk_hellhole"], grenade.origin );
|
||||
playsoundatposition( "wpn_grenade_poof", grenade.origin );
|
||||
grenade delete();
|
||||
}
|
||||
|
||||
spawn_infinite_powerup_drop( v_origin, str_type ) //checked matches cerberus output
|
||||
spawn_infinite_powerup_drop( v_origin, str_type )
|
||||
{
|
||||
if ( isDefined( str_type ) )
|
||||
{
|
||||
intro_powerup = maps/mp/zombies/_zm_powerups::specific_powerup_drop( str_type, v_origin );
|
||||
}
|
||||
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 );
|
||||
}
|
||||
intro_powerup = maps\mp\zombies\_zm_powerups::powerup_drop( v_origin );
|
||||
}
|
||||
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,8 +1,10 @@
|
||||
#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()
|
||||
{
|
||||
@ -31,93 +33,88 @@ achievement_sound_func( achievement_name_lower )
|
||||
|
||||
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;
|
||||
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 ) )
|
||||
|
||||
foreach ( b_check in level.lockdown_track )
|
||||
{
|
||||
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 );
|
||||
}
|
||||
|
||||
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;
|
||||
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 ) )
|
||||
|
||||
foreach ( b_check in level.trapped_track )
|
||||
{
|
||||
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 );
|
||||
}
|
||||
|
||||
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 );
|
||||
}
|
||||
|
||||
@ -125,7 +122,9 @@ achievement_no_one_escapes_alive()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "player_at_bridge" );
|
||||
|
||||
self giveachievement_wrapper( "ZM_DLC2_PRISON_SIDEQUEST" );
|
||||
}
|
||||
|
||||
@ -133,7 +132,9 @@ achievement_feed_the_beast()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "player_obtained_tomahawk" );
|
||||
|
||||
self giveachievement_wrapper( "ZM_DLC2_FEED_THE_BEAST" );
|
||||
}
|
||||
|
||||
@ -141,12 +142,10 @@ achievement_making_the_rounds()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
n_completed_trips = 0;
|
||||
while ( n_completed_trips < 3 )
|
||||
{
|
||||
|
||||
for ( n_completed_trips = 0; n_completed_trips < 3; n_completed_trips++ )
|
||||
self waittill( "player_completed_cycle" );
|
||||
n_completed_trips++;
|
||||
}
|
||||
|
||||
self giveachievement_wrapper( "ZM_DLC2_MAKING_THE_ROUNDS" );
|
||||
}
|
||||
|
||||
@ -154,7 +153,9 @@ achievement_acid_drip()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "player_obtained_acidgat" );
|
||||
|
||||
self giveachievement_wrapper( "ZM_DLC2_ACID_DRIP" );
|
||||
}
|
||||
|
||||
@ -162,19 +163,19 @@ achievement_a_burst_of_flavor()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
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" );
|
||||
}
|
||||
|
||||
@ -182,7 +183,9 @@ achievement_paranormal_progress()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "player_opened_afterlife_door" );
|
||||
|
||||
self giveachievement_wrapper( "ZM_DLC2_PARANORMAL_PROGRESS" );
|
||||
}
|
||||
|
||||
@ -190,20 +193,19 @@ achievement_gg_bridge()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
while ( 1 )
|
||||
|
||||
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 )
|
||||
|
||||
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" ) )
|
||||
{
|
||||
|
||||
if ( self maps\mp\zombies\_zm_zonemgr::is_player_in_zone( "zone_golden_gate_bridge" ) )
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
}
|
||||
}
|
||||
|
||||
self giveachievement_wrapper( "ZM_DLC2_GG_BRIDGE" );
|
||||
}
|
||||
|
@ -1,9 +1,11 @@
|
||||
#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()
|
||||
{
|
||||
@ -12,38 +14,33 @@ main_start()
|
||||
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 = 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;
|
||||
@ -51,16 +48,13 @@ main_end()
|
||||
|
||||
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 ] )
|
||||
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;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return self maps/mp/zm_prison::equipment_safe_to_drop( weapon );
|
||||
|
||||
return self maps\mp\zm_prison::equipment_safe_to_drop( weapon );
|
||||
}
|
||||
|
||||
spawned_collision_ffotd()
|
||||
@ -72,7 +66,14 @@ spawned_collision_ffotd()
|
||||
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 ) );
|
||||
@ -81,15 +82,15 @@ spawned_collision_ffotd()
|
||||
collision1 ghost();
|
||||
collision2 = spawn( "script_model", ( -437, 6260, 121 ) );
|
||||
collision2 setmodel( "collision_wall_256x256x10_standard" );
|
||||
collision2.angles = vectorScale( ( 0, 0, 0 ), 11,8 );
|
||||
collision2.angles = vectorscale( ( 0, 1, 0 ), 11.8 );
|
||||
collision2 ghost();
|
||||
collision3 = spawn( "script_model", ( 1887,98, 9323, 1489,14 ) );
|
||||
collision3 = spawn( "script_model", ( 1887.98, 9323, 1489.14 ) );
|
||||
collision3 setmodel( "collision_wall_128x128x10_standard" );
|
||||
collision3.angles = ( 0, 270, 38,6 );
|
||||
collision3.angles = ( 0, 270, 38.6 );
|
||||
collision3 ghost();
|
||||
collision4 = spawn( "script_model", ( -261, 8512,02, 1153,14 ) );
|
||||
collision4 = spawn( "script_model", ( -261, 8512.02, 1153.14 ) );
|
||||
collision4 setmodel( "collision_geo_256x256x256_standard" );
|
||||
collision4.angles = vectorScale( ( 0, 0, 0 ), 180 );
|
||||
collision4.angles = vectorscale( ( 0, 1, 0 ), 180.0 );
|
||||
collision4 ghost();
|
||||
collision5a = spawn( "script_model", ( 792, 8302, 1620 ) );
|
||||
collision5a setmodel( "collision_geo_64x64x256_standard" );
|
||||
@ -101,7 +102,7 @@ spawned_collision_ffotd()
|
||||
collision5b ghost();
|
||||
collision6 = spawn( "script_model", ( 554, 8026, 698 ) );
|
||||
collision6 setmodel( "collision_wall_128x128x10_standard" );
|
||||
collision6.angles = vectorScale( ( 0, 0, 0 ), 22,2 );
|
||||
collision6.angles = vectorscale( ( 0, 1, 0 ), 22.2 );
|
||||
collision6 ghost();
|
||||
collision7 = spawn( "script_model", ( 1890, 9911, 1184 ) );
|
||||
collision7 setmodel( "collision_geo_64x64x256_standard" );
|
||||
@ -115,34 +116,63 @@ spawned_collision_ffotd()
|
||||
collision9 setmodel( "collision_ai_64x64x10" );
|
||||
collision9.angles = ( 270, 180, -180 );
|
||||
collision9 ghost();
|
||||
collision10 = spawn( "script_model", ( -756,5, 5730, -113,75 ) );
|
||||
collision10 = spawn( "script_model", ( -756.5, 5730, -113.75 ) );
|
||||
collision10 setmodel( "collision_geo_128x128x128_standard" );
|
||||
collision10.angles = ( 354,9, 11, 0 );
|
||||
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.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 maps\mp\zombies\_zm_afterlife::afterlife_give_loadout();
|
||||
}
|
||||
|
||||
afterlife_leave_freeze()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
level endon( "end_game" );
|
||||
self freezecontrols( 1 );
|
||||
wait 0,5;
|
||||
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();
|
||||
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,23 +1,23 @@
|
||||
//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 )
|
||||
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();
|
||||
@ -34,7 +34,7 @@ init() //checked matches cerberus output
|
||||
#/
|
||||
}
|
||||
|
||||
spoon_easy_cleanup() //checked matches cerberus output
|
||||
spoon_easy_cleanup()
|
||||
{
|
||||
spork_portal = getent( "afterlife_show_spork", "targetname" );
|
||||
spork_portal delete();
|
||||
@ -44,59 +44,50 @@ spoon_easy_cleanup() //checked matches cerberus output
|
||||
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();
|
||||
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 notify( "killed_by_a_blundersplat", self.attacker );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( self.damageweapon == "bouncing_tomahawk_zm" )
|
||||
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 ( 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 ) )
|
||||
{
|
||||
|
||||
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" ) )
|
||||
{
|
||||
|
||||
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 )
|
||||
{
|
||||
/#
|
||||
@ -106,36 +97,39 @@ zombie_spoon_func() //checked matches cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
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 )
|
||||
{
|
||||
|
||||
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" )
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( attacker ) && isplayer( attacker ) )
|
||||
attacker do_player_general_vox( "quest", "secret_poster", undefined, 100 );
|
||||
}
|
||||
wait 1;
|
||||
|
||||
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" );
|
||||
@ -145,10 +139,13 @@ wait_for_initial_conditions() //checked changed to match cerberus output
|
||||
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;
|
||||
@ -156,64 +153,66 @@ wait_for_initial_conditions() //checked changed to match cerberus output
|
||||
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;
|
||||
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;
|
||||
}
|
||||
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 = 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 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 true;
|
||||
}
|
||||
return 0;
|
||||
|
||||
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 ) )
|
||||
{
|
||||
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 ) )
|
||||
|
||||
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 );
|
||||
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 ] );
|
||||
}
|
||||
if ( issubstr( weapons[i], "knife" ) )
|
||||
self takeweapon( weapons[i] );
|
||||
}
|
||||
}
|
||||
|
||||
weapons = self getweaponslist();
|
||||
wait 1;
|
||||
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 );
|
||||
@ -223,26 +222,23 @@ bucket_init() //checked matches cerberus output
|
||||
level.t_bathtub setcursorhint( "HINT_NOICON" );
|
||||
}
|
||||
|
||||
wait_for_bucket_activated( player ) //checked matches cerberus output
|
||||
wait_for_bucket_activated( player )
|
||||
{
|
||||
if ( isDefined( player ) )
|
||||
if ( isdefined( player ) )
|
||||
{
|
||||
while ( 1 )
|
||||
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 );
|
||||
@ -254,12 +250,12 @@ dip_the_spoon() //checked matches cerberus output
|
||||
wait 5;
|
||||
level.b_spoon_in_tub = 1;
|
||||
flag_wait( "charged_spoon" );
|
||||
wait 1;
|
||||
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 );
|
||||
@ -269,37 +265,30 @@ thrust_the_spork() //checked matches cerberus output
|
||||
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 );
|
||||
level thread maps\mp\zombies\_zm_audio::sndmusicstingerevent( "spork", self );
|
||||
self.spoon_in_tub = undefined;
|
||||
self setclientfieldtoplayer( "spoon_visual_state", 3 );
|
||||
wait 1;
|
||||
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 )
|
||||
while ( true )
|
||||
{
|
||||
a_players = getplayers();
|
||||
_a377 = a_players;
|
||||
_k377 = getFirstArrayKey( _a377 );
|
||||
while ( isDefined( _k377 ) )
|
||||
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
player = _a377[ _k377 ];
|
||||
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
|
||||
{
|
||||
flag_set( "soul_catchers_charged" );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
_k377 = getNextArrayKey( _a377, _k377 );
|
||||
}
|
||||
|
||||
wait 1.0;
|
||||
}
|
||||
wait 1;
|
||||
#/
|
||||
}
|
||||
*/
|
||||
}
|
||||
|
@ -1,18 +1,21 @@
|
||||
#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 )
|
||||
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();
|
||||
@ -33,46 +36,49 @@ wait_for_initial_conditions()
|
||||
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 ) )
|
||||
|
||||
foreach ( struct in a_s_mcguffin )
|
||||
{
|
||||
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;
|
||||
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.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" );
|
||||
|
||||
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 thread maps\mp\zombies\_zm_afterlife::enable_afterlife_prop();
|
||||
self.health = 10000;
|
||||
self setcandamage( 1 );
|
||||
self setforcenocull();
|
||||
while ( 1 )
|
||||
|
||||
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 );
|
||||
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 maps\mp\zombies\_zm_afterlife::disable_afterlife_prop();
|
||||
self thread wait_and_hide_sq_bg_macguffin();
|
||||
}
|
||||
}
|
||||
@ -83,75 +89,76 @@ 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();
|
||||
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 )
|
||||
if ( !isdefined( level.sq_bg_macguffins ) || level.sq_bg_macguffins.size <= 0 )
|
||||
return false;
|
||||
|
||||
foreach ( macguffin in level.sq_bg_macguffins )
|
||||
{
|
||||
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 = 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 );
|
||||
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;
|
||||
return true;
|
||||
}
|
||||
_k119 = getNextArrayKey( _a119, _k119 );
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
give_player_macguffin_upon_receipt( m_tomahawk, m_macguffin )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
while ( isDefined( m_tomahawk ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
|
||||
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" );
|
||||
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 )
|
||||
|
||||
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 );
|
||||
else
|
||||
play_sq_bg_collected_vo( player );
|
||||
}
|
||||
wait 1;
|
||||
|
||||
wait 1.0;
|
||||
player playsound( "zmb_easteregg_laugh" );
|
||||
}
|
||||
|
||||
play_sq_bg_collected_vo( player )
|
||||
{
|
||||
player endon( "disconnect" );
|
||||
wait 1;
|
||||
wait 1.0;
|
||||
player thread do_player_general_vox( "quest", "pick_up_easter_egg" );
|
||||
}
|
||||
|
||||
@ -159,23 +166,25 @@ 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 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
t_near waittill( "trigger", ent );
|
||||
|
||||
if ( isplayer( ent ) )
|
||||
{
|
||||
t_near thread sq_bg_spawn_rumble();
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
|
||||
a_players = getplayers();
|
||||
|
||||
if ( a_players.size == 1 )
|
||||
{
|
||||
if ( a_players[ 0 ] hasweapon( "blundergat_zm" ) )
|
||||
if ( a_players[0] hasweapon( "blundergat_zm" ) )
|
||||
{
|
||||
str_reward_weapon = "blundersplat_zm";
|
||||
str_loc = &"ZM_PRISON_SQ_BS";
|
||||
@ -191,69 +200,67 @@ give_sq_bg_reward()
|
||||
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 );
|
||||
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 );
|
||||
for ( ;; )
|
||||
{
|
||||
while ( 1 )
|
||||
|
||||
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 && current_weapon != "none" && !player hacker_active() )
|
||||
|
||||
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" );
|
||||
#/
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else self delete();
|
||||
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 ) )
|
||||
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
player = _a285[ _k285 ];
|
||||
if ( player istouching( self ) )
|
||||
{
|
||||
player setclientfieldtoplayer( "rumble_sq_bg", 1 );
|
||||
}
|
||||
_k285 = getNextArrayKey( _a285, _k285 );
|
||||
}
|
||||
}
|
||||
|
||||
take_old_weapon_and_give_reward( current_weapon, reward_weapon, weapon_limit_override )
|
||||
{
|
||||
if ( !isDefined( 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 )
|
||||
{
|
||||
|
||||
if ( isdefined( primaries ) && primaries.size >= 2 )
|
||||
self takeweapon( current_weapon );
|
||||
}
|
||||
}
|
||||
|
||||
self giveweapon( reward_weapon );
|
||||
self switchtoweapon( reward_weapon );
|
||||
flag_set( "warden_blundergat_obtained" );
|
||||
@ -263,25 +270,20 @@ take_old_weapon_and_give_reward( current_weapon, reward_weapon, weapon_limit_ove
|
||||
debug_sq_bg_quest_starter()
|
||||
{
|
||||
/#
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
a_players = getplayers();
|
||||
_a327 = a_players;
|
||||
_k327 = getFirstArrayKey( _a327 );
|
||||
while ( isDefined( _k327 ) )
|
||||
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
player = _a327[ _k327 ];
|
||||
if ( player hasweapon( "bouncing_tomahawk_zm" ) )
|
||||
{
|
||||
level notify( "bouncing_tomahawk_zm_aquired" );
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
_k327 = getNextArrayKey( _a327, _k327 );
|
||||
}
|
||||
|
||||
wait 1.0;
|
||||
}
|
||||
wait 1;
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
@ -1,20 +1,20 @@
|
||||
#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 ) )
|
||||
{
|
||||
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();
|
||||
}
|
||||
|
||||
@ -22,44 +22,43 @@ 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_origin = ( self.origin[0], self.origin[1], 0 );
|
||||
v_original_angles = self.angles;
|
||||
v_forward_point = self.origin + ( anglesToForward( self.angles ) * 10 );
|
||||
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_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 )
|
||||
{
|
||||
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;
|
||||
}
|
||||
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 );
|
||||
}
|
||||
|
||||
foreach ( player in players )
|
||||
maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_audio_log", player );
|
||||
}
|
||||
|
||||
player_intermission_prison()
|
||||
@ -78,9 +77,11 @@ player_intermission_prison()
|
||||
self.psoffsettime = 0;
|
||||
self.friendlydamage = undefined;
|
||||
points = getstructarray( "dblock_cam", "targetname" );
|
||||
if ( !isDefined( points ) || points.size == 0 )
|
||||
|
||||
if ( !isdefined( points ) || points.size == 0 )
|
||||
{
|
||||
points = getentarray( "info_intermission", "classname" );
|
||||
|
||||
if ( points.size < 1 )
|
||||
{
|
||||
/#
|
||||
@ -89,74 +90,73 @@ player_intermission_prison()
|
||||
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 );
|
||||
visionsetnaked( "cheat_bw", 0.05 );
|
||||
org = undefined;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
points = array_randomize( points );
|
||||
i = 0;
|
||||
while ( i < points.size )
|
||||
{
|
||||
point = points[ i ];
|
||||
if ( !isDefined( org ) )
|
||||
|
||||
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( points[i].target ) )
|
||||
{
|
||||
if ( !isDefined( org ) )
|
||||
if ( !isdefined( org ) )
|
||||
{
|
||||
org = spawn( "script_model", self.origin + vectorScale( ( 0, 0, -1 ), 60 ) );
|
||||
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;
|
||||
j = 0;
|
||||
while ( j < get_players().size )
|
||||
|
||||
org.origin = points[i].origin;
|
||||
org.angles = points[i].angles;
|
||||
|
||||
for ( j = 0; j < get_players().size; j++ )
|
||||
{
|
||||
player = get_players()[ j ];
|
||||
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 );
|
||||
|
||||
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;
|
||||
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 );
|
||||
wait( time - q_time );
|
||||
self.game_over_bg fadeovertime( q_time );
|
||||
self.game_over_bg.alpha = 1;
|
||||
wait q_time;
|
||||
i++;
|
||||
wait( q_time );
|
||||
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++;
|
||||
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,15 +1,16 @@
|
||||
#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 ) )
|
||||
{
|
||||
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();
|
||||
}
|
||||
@ -18,15 +19,18 @@ 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;
|
||||
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 ) )
|
||||
|
||||
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 );
|
||||
@ -38,44 +42,43 @@ track_player_eyes()
|
||||
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;
|
||||
wait 0.05;
|
||||
}
|
||||
|
||||
self.wth_elem destroy();
|
||||
b_saw_the_wth = 1;
|
||||
}
|
||||
wait 0,05;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
sq_is_weapon_sniper( str_weapon )
|
||||
{
|
||||
a_snipers = array( "dsr50", "barretm82" );
|
||||
_a77 = a_snipers;
|
||||
_k77 = getFirstArrayKey( _a77 );
|
||||
while ( isDefined( _k77 ) )
|
||||
|
||||
foreach ( str_sniper in a_snipers )
|
||||
{
|
||||
str_sniper = _a77[ _k77 ];
|
||||
if ( issubstr( str_weapon, str_sniper ) && !issubstr( str_weapon, "+is" ) )
|
||||
{
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
_k77 = getNextArrayKey( _a77, _k77 );
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
play_scary_lightning()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
while ( 1 )
|
||||
|
||||
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;
|
||||
}
|
||||
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;
|
||||
@ -86,23 +89,24 @@ play_scary_lightning()
|
||||
self.sl_elem.vertalign = "fullscreen";
|
||||
self.sl_elem.sort = 1000;
|
||||
self.sl_elem.foreground = 0;
|
||||
self.sl_elem.alpha = 0,6;
|
||||
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 );
|
||||
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 );
|
||||
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 );
|
||||
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 );
|
||||
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;
|
||||
|
||||
|
@ -1,30 +1,26 @@
|
||||
#include maps/mp/zombies/_zm_powerups;
|
||||
#include maps/mp/gametypes_zm/zmeat;
|
||||
#include maps/mp/zombies/_zm_audio_announcer;
|
||||
#include maps/mp/zombies/_zm_laststand;
|
||||
#include maps/mp/zombies/_zm_game_module_utility;
|
||||
#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_utility;
|
||||
#include maps\mp\zombies\_zm_laststand;
|
||||
#include maps\mp\zombies\_zm_audio_announcer;
|
||||
#include maps\mp\gametypes_zm\zmeat;
|
||||
#include maps\mp\zombies\_zm_powerups;
|
||||
|
||||
award_grenades_for_team( team )
|
||||
{
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team )
|
||||
{
|
||||
i++;
|
||||
if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
lethal_grenade = players[ i ] get_player_lethal_grenade();
|
||||
players[ i ] giveweapon( lethal_grenade );
|
||||
players[ i ] setweaponammoclip( lethal_grenade, 4 );
|
||||
}
|
||||
i++;
|
||||
|
||||
lethal_grenade = players[i] get_player_lethal_grenade();
|
||||
players[i] giveweapon( lethal_grenade );
|
||||
players[i] setweaponammoclip( lethal_grenade, 4 );
|
||||
}
|
||||
}
|
||||
|
||||
@ -32,20 +28,15 @@ get_players_on_meat_team( team )
|
||||
{
|
||||
players = get_players();
|
||||
players_on_team = [];
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team )
|
||||
{
|
||||
i++;
|
||||
if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
|
||||
continue;
|
||||
|
||||
players_on_team[players_on_team.size] = players[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
players_on_team[ players_on_team.size ] = players[ i ];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
return players_on_team;
|
||||
}
|
||||
|
||||
@ -53,56 +44,44 @@ get_alive_players_on_meat_team( team )
|
||||
{
|
||||
players = get_players();
|
||||
players_on_team = [];
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( !isDefined( players[ i ]._meat_team ) || players[ i ]._meat_team != team )
|
||||
{
|
||||
i++;
|
||||
if ( !isdefined( players[i]._meat_team ) || players[i]._meat_team != team )
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( players[ i ].sessionstate == "spectator" || players[ i ] maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
||||
{
|
||||
i++;
|
||||
|
||||
if ( players[i].sessionstate == "spectator" || players[i] maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||
continue;
|
||||
|
||||
players_on_team[players_on_team.size] = players[i];
|
||||
}
|
||||
else
|
||||
{
|
||||
players_on_team[ players_on_team.size ] = players[ i ];
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
return players_on_team;
|
||||
}
|
||||
|
||||
init_minigun_ring()
|
||||
{
|
||||
if ( isDefined( level._minigun_ring ) )
|
||||
{
|
||||
if ( isdefined( level._minigun_ring ) )
|
||||
return;
|
||||
}
|
||||
|
||||
ring_pos = getstruct( level._meat_location + "_meat_minigun", "script_noteworthy" );
|
||||
if ( !isDefined( ring_pos ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( ring_pos ) )
|
||||
return;
|
||||
}
|
||||
|
||||
level._minigun_ring = spawn( "script_model", ring_pos.origin );
|
||||
level._minigun_ring.angles = ring_pos.angles;
|
||||
level._minigun_ring setmodel( ring_pos.script_parameters );
|
||||
level._minigun_ring_clip = getent( level._meat_location + "_meat_minigun_clip", "script_noteworthy" );
|
||||
if ( isDefined( level._minigun_ring_clip ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level._minigun_ring_clip ) )
|
||||
level._minigun_ring_clip linkto( level._minigun_ring );
|
||||
}
|
||||
else
|
||||
{
|
||||
iprintlnbold( "BUG: no level._minigun_ring_clip" );
|
||||
}
|
||||
|
||||
level._minigun_ring_trig = getent( level._meat_location + "_meat_minigun_trig", "targetname" );
|
||||
if ( isDefined( level._minigun_ring_trig ) )
|
||||
|
||||
if ( isdefined( level._minigun_ring_trig ) )
|
||||
{
|
||||
level._minigun_ring_trig enablelinkto();
|
||||
level._minigun_ring_trig linkto( level._minigun_ring );
|
||||
@ -113,41 +92,38 @@ init_minigun_ring()
|
||||
level thread ring_toss( level._minigun_ring_trig, "minigun" );
|
||||
}
|
||||
else
|
||||
{
|
||||
iprintlnbold( "BUG: no level._minigun_ring_trig" );
|
||||
}
|
||||
|
||||
level._minigun_ring thread move_ring( ring_pos );
|
||||
level._minigun_ring thread rotate_ring( 1 );
|
||||
}
|
||||
|
||||
init_ammo_ring()
|
||||
{
|
||||
if ( isDefined( level._ammo_ring ) )
|
||||
{
|
||||
if ( isdefined( level._ammo_ring ) )
|
||||
return;
|
||||
}
|
||||
|
||||
name = level._meat_location + "_meat_ammo";
|
||||
ring_pos = getstruct( name, "script_noteworthy" );
|
||||
if ( !isDefined( ring_pos ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( ring_pos ) )
|
||||
return;
|
||||
}
|
||||
|
||||
level._ammo_ring = spawn( "script_model", ring_pos.origin );
|
||||
level._ammo_ring.angles = ring_pos.angles;
|
||||
level._ammo_ring setmodel( ring_pos.script_parameters );
|
||||
name = level._meat_location + "_meat_ammo_clip";
|
||||
level._ammo_ring_clip = getent( name, "script_noteworthy" );
|
||||
if ( isDefined( level._ammo_ring_clip ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level._ammo_ring_clip ) )
|
||||
level._ammo_ring_clip linkto( level._ammo_ring );
|
||||
}
|
||||
else
|
||||
{
|
||||
iprintlnbold( "BUG: no level._ammo_ring_clip" );
|
||||
}
|
||||
|
||||
name = level._meat_location + "_meat_ammo_trig";
|
||||
level._ammo_ring_trig = getent( name, "targetname" );
|
||||
if ( isDefined( level._ammo_ring_clip ) )
|
||||
|
||||
if ( isdefined( level._ammo_ring_clip ) )
|
||||
{
|
||||
level._ammo_ring_trig enablelinkto();
|
||||
level._ammo_ring_trig linkto( level._ammo_ring );
|
||||
@ -158,63 +134,66 @@ init_ammo_ring()
|
||||
level thread ring_toss( level._ammo_ring_trig, "ammo" );
|
||||
}
|
||||
else
|
||||
{
|
||||
iprintlnbold( "BUG: no level._ammo_ring_trig" );
|
||||
}
|
||||
|
||||
level._ammo_ring thread move_ring( ring_pos );
|
||||
level._ammo_ring thread rotate_ring( 1 );
|
||||
}
|
||||
|
||||
init_splitter_ring()
|
||||
{
|
||||
if ( isDefined( level._splitter_ring ) )
|
||||
{
|
||||
if ( isdefined( level._splitter_ring ) )
|
||||
return;
|
||||
}
|
||||
|
||||
ring_pos = getstruct( level._meat_location + "_meat_splitter", "script_noteworthy" );
|
||||
if ( !isDefined( ring_pos ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( ring_pos ) )
|
||||
return;
|
||||
}
|
||||
|
||||
level._splitter_ring = spawn( "script_model", ring_pos.origin );
|
||||
level._splitter_ring.angles = ring_pos.angles;
|
||||
level._splitter_ring setmodel( ring_pos.script_parameters );
|
||||
level._splitter_ring_trig1 = getent( level._meat_location + "_meat_splitter_trig_1", "targetname" );
|
||||
level._splitter_ring_trig2 = getent( level._meat_location + "_meat_splitter_trig_2", "targetname" );
|
||||
if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) )
|
||||
|
||||
if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) )
|
||||
{
|
||||
level._splitter_ring_trig1 enablelinkto();
|
||||
level._splitter_ring_trig2 enablelinkto();
|
||||
}
|
||||
else
|
||||
{
|
||||
iprintlnbold( "BUG: missing at least one level._splitter_ring_trig" );
|
||||
}
|
||||
|
||||
level._splitter_ring notsolid();
|
||||
level._meat_icon = spawn( "script_model", level._splitter_ring.origin );
|
||||
level._meat_icon setmodel( getweaponmodel( get_gamemode_var( "item_meat_name" ) ) );
|
||||
level._meat_icon linkto( level._splitter_ring );
|
||||
level._meat_icon setclientfield( "ring_glow_meatfx", 1 );
|
||||
if ( isDefined( level._splitter_ring_trig1 ) && isDefined( level._splitter_ring_trig2 ) )
|
||||
|
||||
if ( isdefined( level._splitter_ring_trig1 ) && isdefined( level._splitter_ring_trig2 ) )
|
||||
{
|
||||
level._splitter_ring_trig1 linkto( level._splitter_ring );
|
||||
level._splitter_ring_trig2 linkto( level._splitter_ring );
|
||||
level thread ring_toss( level._splitter_ring_trig1, "splitter" );
|
||||
level thread ring_toss( level._splitter_ring_trig2, "splitter" );
|
||||
}
|
||||
|
||||
level._splitter_ring thread move_ring( ring_pos );
|
||||
}
|
||||
|
||||
ring_toss( trig, type )
|
||||
{
|
||||
level endon( "end_game" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
while ( isDefined( level._ring_triggered ) && level._ring_triggered )
|
||||
if ( isdefined( level._ring_triggered ) && level._ring_triggered )
|
||||
{
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving )
|
||||
|
||||
if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving ) )
|
||||
{
|
||||
if ( level.item_meat istouching( trig ) )
|
||||
{
|
||||
@ -223,7 +202,8 @@ ring_toss( trig, type )
|
||||
level thread ring_cooldown();
|
||||
}
|
||||
}
|
||||
wait 0,05;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
@ -235,7 +215,7 @@ ring_cooldown()
|
||||
|
||||
ring_toss_prize( type, trig )
|
||||
{
|
||||
switch( type )
|
||||
switch ( type )
|
||||
{
|
||||
case "splitter":
|
||||
level thread meat_splitter( trig );
|
||||
@ -253,43 +233,41 @@ meat_splitter( trig )
|
||||
{
|
||||
level endon( "meat_grabbed" );
|
||||
level endon( "meat_kicked" );
|
||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
|
||||
while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||
wait 0.05;
|
||||
|
||||
exit_trig = getent( trig.target, "targetname" );
|
||||
exit_struct = getstruct( trig.target, "targetname" );
|
||||
while ( isDefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( exit_trig ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
if ( !isDefined( level.item_meat ) )
|
||||
{
|
||||
|
||||
while ( isdefined( level.item_meat ) && !level.item_meat istouching( exit_trig ) )
|
||||
wait 0.05;
|
||||
|
||||
while ( isdefined( level.item_meat ) && level.item_meat istouching( exit_trig ) )
|
||||
wait 0.05;
|
||||
|
||||
if ( !isdefined( level.item_meat ) )
|
||||
return;
|
||||
}
|
||||
playfx( level._effect[ "fw_burst" ], exit_trig.origin );
|
||||
flare_dir = vectornormalize( anglesToForward( exit_struct.angles ) );
|
||||
velocity = vectorScale( flare_dir, randomintrange( 400, 600 ) );
|
||||
velocity1 = ( velocity[ 0 ] + 75, velocity[ 1 ] + 75, randomintrange( 75, 125 ) );
|
||||
velocity2 = ( velocity[ 0 ] - 75, velocity[ 1 ] - 75, randomintrange( 75, 125 ) );
|
||||
velocity3 = ( velocity[ 0 ], velocity[ 1 ], 100 );
|
||||
|
||||
playfx( level._effect["fw_burst"], exit_trig.origin );
|
||||
flare_dir = vectornormalize( anglestoforward( exit_struct.angles ) );
|
||||
velocity = vectorscale( flare_dir, randomintrange( 400, 600 ) );
|
||||
velocity1 = ( velocity[0] + 75, velocity[1] + 75, randomintrange( 75, 125 ) );
|
||||
velocity2 = ( velocity[0] - 75, velocity[1] - 75, randomintrange( 75, 125 ) );
|
||||
velocity3 = ( velocity[0], velocity[1], 100 );
|
||||
level._fake_meats = [];
|
||||
level._meat_splitter_activated = 1;
|
||||
org = exit_trig.origin;
|
||||
player = get_players()[ 0 ];
|
||||
player = get_players()[0];
|
||||
player._spawning_meat = 1;
|
||||
player endon( "disconnect" );
|
||||
thread split_meat( player, org, velocity1, velocity2, velocity );
|
||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 );
|
||||
wait 0,1;
|
||||
while ( isDefined( level.splitting_meat ) && level.splitting_meat )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_splitter", undefined, undefined, 1 );
|
||||
wait 0.1;
|
||||
|
||||
while ( isdefined( level.splitting_meat ) && level.splitting_meat )
|
||||
wait 0.05;
|
||||
|
||||
player._spawning_meat = 0;
|
||||
}
|
||||
|
||||
@ -298,86 +276,77 @@ split_meat( player, org, vel1, vel2, vel3 )
|
||||
level.splitting_meat = 1;
|
||||
level.item_meat cleanup_meat();
|
||||
wait_network_frame();
|
||||
level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel1 );
|
||||
level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel1 );
|
||||
wait_network_frame();
|
||||
level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel2 );
|
||||
level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel2 );
|
||||
wait_network_frame();
|
||||
level._fake_meats[ level._fake_meats.size ] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 );
|
||||
level._fake_meats[level._fake_meats.size] = player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, vel3 );
|
||||
real_meat = random( level._fake_meats );
|
||||
_a330 = level._fake_meats;
|
||||
_k330 = getFirstArrayKey( _a330 );
|
||||
while ( isDefined( _k330 ) )
|
||||
|
||||
foreach ( meat in level._fake_meats )
|
||||
{
|
||||
meat = _a330[ _k330 ];
|
||||
if ( real_meat != meat )
|
||||
{
|
||||
meat._fake_meat = 1;
|
||||
meat thread maps/mp/gametypes_zm/zmeat::delete_on_real_meat_pickup();
|
||||
meat thread maps\mp\gametypes_zm\zmeat::delete_on_real_meat_pickup();
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
meat._fake_meat = 0;
|
||||
level.item_meat = meat;
|
||||
}
|
||||
_k330 = getNextArrayKey( _a330, _k330 );
|
||||
}
|
||||
|
||||
level.splitting_meat = 0;
|
||||
}
|
||||
|
||||
minigun_prize( trig )
|
||||
{
|
||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
if ( !isDefined( level.item_meat ) )
|
||||
{
|
||||
while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||
wait 0.05;
|
||||
|
||||
if ( !isdefined( level.item_meat ) )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown )
|
||||
{
|
||||
|
||||
if ( isdefined( level._minigun_toss_cooldown ) && level._minigun_toss_cooldown )
|
||||
return;
|
||||
}
|
||||
|
||||
level thread minigun_toss_cooldown();
|
||||
|
||||
if ( !is_player_valid( level._last_person_to_throw_meat ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "minigun" );
|
||||
level thread maps/mp/zombies/_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat );
|
||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 );
|
||||
|
||||
level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "minigun" );
|
||||
level thread maps\mp\zombies\_zm_powerups::minigun_weapon_powerup( level._last_person_to_throw_meat );
|
||||
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_minigun", undefined, undefined, 1 );
|
||||
}
|
||||
|
||||
ammo_prize( trig )
|
||||
{
|
||||
while ( isDefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
if ( !isDefined( level.item_meat ) )
|
||||
{
|
||||
while ( isdefined( level.item_meat ) && level.item_meat istouching( trig ) )
|
||||
wait 0.05;
|
||||
|
||||
if ( !isdefined( level.item_meat ) )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown )
|
||||
{
|
||||
|
||||
if ( isdefined( level._ammo_toss_cooldown ) && level._ammo_toss_cooldown )
|
||||
return;
|
||||
}
|
||||
playfx( level._effect[ "poltergeist" ], trig.origin );
|
||||
|
||||
playfx( level._effect["poltergeist"], trig.origin );
|
||||
level thread ammo_toss_cooldown();
|
||||
level._last_person_to_throw_meat thread maps/mp/zombies/_zm_powerups::powerup_vo( "full_ammo" );
|
||||
level thread maps/mp/zombies/_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat );
|
||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 );
|
||||
level._last_person_to_throw_meat thread maps\mp\zombies\_zm_powerups::powerup_vo( "full_ammo" );
|
||||
level thread maps\mp\zombies\_zm_powerups::full_ammo_powerup( undefined, level._last_person_to_throw_meat );
|
||||
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_ring_ammo", undefined, undefined, 1 );
|
||||
}
|
||||
|
||||
minigun_toss_cooldown()
|
||||
{
|
||||
level._minigun_toss_cooldown = 1;
|
||||
if ( isDefined( level._minigun_icon ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level._minigun_icon ) )
|
||||
level._minigun_icon delete();
|
||||
}
|
||||
|
||||
waittill_any_or_timeout( 120, "meat_end" );
|
||||
playfx( level._effect[ "poltergeist" ], level._minigun_ring_trig.origin );
|
||||
playfx( level._effect["poltergeist"], level._minigun_ring_trig.origin );
|
||||
level._minigun_icon = spawn( "script_model", level._minigun_ring_trig.origin );
|
||||
level._minigun_icon setmodel( getweaponmodel( "minigun_zm" ) );
|
||||
level._minigun_icon linkto( level._minigun_ring );
|
||||
@ -388,12 +357,12 @@ minigun_toss_cooldown()
|
||||
ammo_toss_cooldown()
|
||||
{
|
||||
level._ammo_toss_cooldown = 1;
|
||||
if ( isDefined( level._ammo_icon ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level._ammo_icon ) )
|
||||
level._ammo_icon delete();
|
||||
}
|
||||
|
||||
waittill_any_or_timeout( 60, "meat_end" );
|
||||
playfx( level._effect[ "poltergeist" ], level._ammo_ring_trig.origin );
|
||||
playfx( level._effect["poltergeist"], level._ammo_ring_trig.origin );
|
||||
level._ammo_icon = spawn( "script_model", level._ammo_ring_trig.origin );
|
||||
level._ammo_icon setmodel( "zombie_ammocan" );
|
||||
level._ammo_icon linkto( level._ammo_ring );
|
||||
@ -405,119 +374,120 @@ wait_for_team_death( team )
|
||||
{
|
||||
level endon( "meat_end" );
|
||||
encounters_team = undefined;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
wait 1;
|
||||
while ( isDefined( level._checking_for_save ) && level._checking_for_save )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
|
||||
while ( isdefined( level._checking_for_save ) && level._checking_for_save )
|
||||
wait 0.1;
|
||||
|
||||
alive_team_players = get_alive_players_on_meat_team( team );
|
||||
while ( alive_team_players.size > 0 )
|
||||
|
||||
if ( alive_team_players.size > 0 )
|
||||
{
|
||||
encounters_team = alive_team_players[ 0 ]._encounters_team;
|
||||
encounters_team = alive_team_players[0]._encounters_team;
|
||||
continue;
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
if ( !isDefined( encounters_team ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( encounters_team ) )
|
||||
return;
|
||||
}
|
||||
|
||||
winning_team = "A";
|
||||
|
||||
if ( encounters_team == "A" )
|
||||
{
|
||||
winning_team = "B";
|
||||
}
|
||||
level notify( "meat_end" );
|
||||
|
||||
level notify( "meat_end", winning_team );
|
||||
}
|
||||
|
||||
check_should_save_player( team )
|
||||
{
|
||||
if ( !isDefined( level._meat_on_team ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !isdefined( level._meat_on_team ) )
|
||||
return false;
|
||||
|
||||
level._checking_for_save = 1;
|
||||
players = get_players_on_meat_team( team );
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
player = players[ i ];
|
||||
if ( isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
|
||||
player = players[i];
|
||||
|
||||
if ( isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
|
||||
{
|
||||
while ( isDefined( level.item_meat.meat_is_moving ) && !level.item_meat.meat_is_moving && isDefined( level._meat_splitter_activated ) || level._meat_splitter_activated && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying )
|
||||
while ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level._meat_splitter_activated ) && level._meat_splitter_activated || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying )
|
||||
{
|
||||
if ( level._meat_on_team != player._meat_team )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else if ( isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team )
|
||||
{
|
||||
|
||||
if ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == player._meat_team )
|
||||
break;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
}
|
||||
if ( !isDefined( player ) )
|
||||
|
||||
if ( !isdefined( player ) )
|
||||
{
|
||||
level._checking_for_save = 0;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
if ( isDefined( player.last_damage_from_zombie_or_player ) && !player.last_damage_from_zombie_or_player )
|
||||
|
||||
if ( !( isdefined( player.last_damage_from_zombie_or_player ) && player.last_damage_from_zombie_or_player ) )
|
||||
{
|
||||
level._checking_for_save = 0;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
if ( level._meat_on_team != player._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
|
||||
|
||||
if ( level._meat_on_team != player._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == player )
|
||||
{
|
||||
if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
||||
if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||
{
|
||||
level thread revive_saved_player( player );
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
level._checking_for_save = 0;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
watch_save_player()
|
||||
{
|
||||
if ( !isDefined( level._meat_on_team ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !isDefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( !isdefined( level._meat_on_team ) )
|
||||
return false;
|
||||
|
||||
if ( !isdefined( level._last_person_to_throw_meat ) || level._last_person_to_throw_meat != self )
|
||||
return false;
|
||||
|
||||
level._checking_for_save = 1;
|
||||
while ( isDefined( level.splitting_meat ) || level.splitting_meat && isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_moving ) || level.item_meat.meat_is_moving && isDefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying )
|
||||
|
||||
while ( isdefined( level.splitting_meat ) && level.splitting_meat || isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_moving ) && level.item_meat.meat_is_moving || isdefined( level.item_meat.meat_is_flying ) && level.item_meat.meat_is_flying ) )
|
||||
{
|
||||
if ( level._meat_on_team != self._meat_team )
|
||||
{
|
||||
break;
|
||||
|
||||
if ( isdefined( level.item_meat ) && ( isdefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling ) && level._meat_on_team == self._meat_team )
|
||||
break;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
else if ( isDefined( level.item_meat ) && isDefined( level.item_meat.meat_is_rolling ) && level.item_meat.meat_is_rolling && level._meat_on_team == self._meat_team )
|
||||
|
||||
if ( level._meat_on_team != self._meat_team && isdefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
}
|
||||
if ( level._meat_on_team != self._meat_team && isDefined( level._last_person_to_throw_meat ) && level._last_person_to_throw_meat == self )
|
||||
{
|
||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() )
|
||||
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() )
|
||||
{
|
||||
level thread revive_saved_player( self );
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
}
|
||||
|
||||
level._checking_for_save = 0;
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
|
||||
revive_saved_player( player )
|
||||
@ -525,11 +495,11 @@ revive_saved_player( player )
|
||||
player endon( "disconnect" );
|
||||
player iprintlnbold( &"ZOMBIE_PLAYER_SAVED" );
|
||||
player playsound( level.zmb_laugh_alias );
|
||||
wait 0,25;
|
||||
playfx( level._effect[ "poltergeist" ], player.origin );
|
||||
wait 0.25;
|
||||
playfx( level._effect["poltergeist"], player.origin );
|
||||
playsoundatposition( "zmb_bolt", player.origin );
|
||||
earthquake( 0,5, 0,75, player.origin, 1000 );
|
||||
player thread maps/mp/zombies/_zm_laststand::auto_revive( player );
|
||||
earthquake( 0.5, 0.75, player.origin, 1000 );
|
||||
player thread maps\mp\zombies\_zm_laststand::auto_revive( player );
|
||||
player._saved_by_throw++;
|
||||
level._checking_for_save = 0;
|
||||
}
|
||||
@ -542,11 +512,11 @@ get_game_module_players( player )
|
||||
item_meat_spawn( origin )
|
||||
{
|
||||
org = origin;
|
||||
player = get_players()[ 0 ];
|
||||
player = get_players()[0];
|
||||
player._spawning_meat = 1;
|
||||
player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 1 ) );
|
||||
player magicgrenadetype( get_gamemode_var( "item_meat_name" ), org, ( 0, 0, 0 ) );
|
||||
playsoundatposition( "zmb_spawn_powerup", org );
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
player._spawning_meat = undefined;
|
||||
}
|
||||
|
||||
@ -562,6 +532,7 @@ init_item_meat( gametype )
|
||||
set_gamemode_var_once( "item_meat_name", "item_head_zm" );
|
||||
set_gamemode_var_once( "item_meat_model", "t6_wpn_zmb_severedhead_world" );
|
||||
}
|
||||
|
||||
precacheitem( get_gamemode_var( "item_meat_name" ) );
|
||||
set_gamemode_var_once( "start_item_meat_name", get_gamemode_var( "item_meat_name" ) );
|
||||
level.meat_weaponidx = getweaponindexfromname( get_gamemode_var( "item_meat_name" ) );
|
||||
@ -576,42 +547,47 @@ meat_intro( launch_spot )
|
||||
level thread multi_launch( launch_spot );
|
||||
launch_meat( launch_spot );
|
||||
drop_meat( level._meat_start_point );
|
||||
level thread maps/mp/zombies/_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 );
|
||||
level thread maps\mp\zombies\_zm_audio_announcer::leaderdialog( "meat_drop", undefined, undefined, 1 );
|
||||
}
|
||||
|
||||
launch_meat( launch_spot )
|
||||
{
|
||||
level waittill( "launch_meat" );
|
||||
|
||||
spots = getstructarray( launch_spot, "targetname" );
|
||||
if ( isDefined( spots ) && spots.size > 0 )
|
||||
|
||||
if ( isdefined( spots ) && spots.size > 0 )
|
||||
{
|
||||
spot = random( spots );
|
||||
meat = spawn( "script_model", spot.origin );
|
||||
meat setmodel( "tag_origin" );
|
||||
wait_network_frame();
|
||||
playfxontag( level._effect[ "fw_trail" ], meat, "tag_origin" );
|
||||
meat playloopsound( "zmb_souls_loop", 0,75 );
|
||||
playfxontag( level._effect["fw_trail"], meat, "tag_origin" );
|
||||
meat playloopsound( "zmb_souls_loop", 0.75 );
|
||||
dest = spot;
|
||||
while ( isDefined( dest ) && isDefined( dest.target ) )
|
||||
|
||||
while ( isdefined( dest ) && isdefined( dest.target ) )
|
||||
{
|
||||
new_dest = getstruct( dest.target, "targetname" );
|
||||
dest = new_dest;
|
||||
dist = distance( new_dest.origin, meat.origin );
|
||||
time = dist / 700;
|
||||
meat moveto( new_dest.origin, time );
|
||||
|
||||
meat waittill( "movedone" );
|
||||
}
|
||||
|
||||
meat playsound( "zmb_souls_end" );
|
||||
playfx( level._effect[ "fw_burst" ], meat.origin );
|
||||
wait randomfloatrange( 0,2, 0,5 );
|
||||
playfx( level._effect["fw_burst"], meat.origin );
|
||||
wait( randomfloatrange( 0.2, 0.5 ) );
|
||||
meat playsound( "zmb_souls_end" );
|
||||
playfx( level._effect[ "fw_burst" ], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) );
|
||||
wait randomfloatrange( 0,5, 0,75 );
|
||||
playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( 50, 150 ), randomintrange( 50, 150 ), randomintrange( -20, 20 ) ) );
|
||||
wait( randomfloatrange( 0.5, 0.75 ) );
|
||||
meat playsound( "zmb_souls_end" );
|
||||
playfx( level._effect[ "fw_burst" ], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) );
|
||||
wait randomfloatrange( 0,5, 0,75 );
|
||||
playfx( level._effect["fw_burst"], meat.origin + ( randomintrange( -150, -50 ), randomintrange( -150, 50 ), randomintrange( -20, 20 ) ) );
|
||||
wait( randomfloatrange( 0.5, 0.75 ) );
|
||||
meat playsound( "zmb_souls_end" );
|
||||
playfx( level._effect[ "fw_burst" ], meat.origin );
|
||||
playfx( level._effect["fw_burst"], meat.origin );
|
||||
meat delete();
|
||||
}
|
||||
}
|
||||
@ -619,41 +595,42 @@ launch_meat( launch_spot )
|
||||
multi_launch( launch_spot )
|
||||
{
|
||||
spots = getstructarray( launch_spot, "targetname" );
|
||||
if ( isDefined( spots ) && spots.size > 0 )
|
||||
|
||||
if ( isdefined( spots ) && spots.size > 0 )
|
||||
{
|
||||
x = 0;
|
||||
while ( x < 3 )
|
||||
for ( x = 0; x < 3; x++ )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < spots.size )
|
||||
for ( i = 0; i < spots.size; i++ )
|
||||
{
|
||||
delay = randomfloatrange( 0,1, 0,25 );
|
||||
level thread fake_launch( spots[ i ], delay );
|
||||
i++;
|
||||
delay = randomfloatrange( 0.1, 0.25 );
|
||||
level thread fake_launch( spots[i], delay );
|
||||
}
|
||||
wait randomfloatrange( 0,25, 0,75 );
|
||||
|
||||
wait( randomfloatrange( 0.25, 0.75 ) );
|
||||
|
||||
if ( x > 1 )
|
||||
level notify( "launch_meat" );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wait( randomfloatrange( 0.25, 0.75 ) );
|
||||
level notify( "launch_meat" );
|
||||
}
|
||||
x++;
|
||||
}
|
||||
}
|
||||
else wait randomfloatrange( 0,25, 0,75 );
|
||||
level notify( "launch_meat" );
|
||||
}
|
||||
|
||||
fake_launch( launch_spot, delay )
|
||||
{
|
||||
wait delay;
|
||||
wait randomfloatrange( 0,1, 4 );
|
||||
wait( delay );
|
||||
wait( randomfloatrange( 0.1, 4 ) );
|
||||
meat = spawn( "script_model", launch_spot.origin + ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 ) );
|
||||
meat setmodel( "tag_origin" );
|
||||
wait_network_frame();
|
||||
playfxontag( level._effect[ "fw_trail_cheap" ], meat, "tag_origin" );
|
||||
meat playloopsound( "zmb_souls_loop", 0,75 );
|
||||
playfxontag( level._effect["fw_trail_cheap"], meat, "tag_origin" );
|
||||
meat playloopsound( "zmb_souls_loop", 0.75 );
|
||||
dest = launch_spot;
|
||||
while ( isDefined( dest ) && isDefined( dest.target ) )
|
||||
|
||||
while ( isdefined( dest ) && isdefined( dest.target ) )
|
||||
{
|
||||
random_offset = ( randomintrange( -60, 60 ), randomintrange( -60, 60 ), 0 );
|
||||
new_dest = getstruct( dest.target, "targetname" );
|
||||
@ -661,25 +638,29 @@ fake_launch( launch_spot, delay )
|
||||
dist = distance( new_dest.origin + random_offset, meat.origin );
|
||||
time = dist / 700;
|
||||
meat moveto( new_dest.origin + random_offset, time );
|
||||
|
||||
meat waittill( "movedone" );
|
||||
}
|
||||
|
||||
meat playsound( "zmb_souls_end" );
|
||||
playfx( level._effect[ "fw_pre_burst" ], meat.origin );
|
||||
playfx( level._effect["fw_pre_burst"], meat.origin );
|
||||
meat delete();
|
||||
}
|
||||
|
||||
drop_meat( drop_spot )
|
||||
{
|
||||
meat = spawn( "script_model", drop_spot + vectorScale( ( 0, 0, 1 ), 600 ) );
|
||||
meat = spawn( "script_model", drop_spot + vectorscale( ( 0, 0, 1 ), 600.0 ) );
|
||||
meat setmodel( "tag_origin" );
|
||||
dist = distance( meat.origin, drop_spot );
|
||||
time = dist / 400;
|
||||
wait 2;
|
||||
meat moveto( drop_spot, time );
|
||||
wait_network_frame();
|
||||
playfxontag( level._effect[ "fw_drop" ], meat, "tag_origin" );
|
||||
playfxontag( level._effect["fw_drop"], meat, "tag_origin" );
|
||||
|
||||
meat waittill( "movedone" );
|
||||
playfx( level._effect[ "fw_impact" ], drop_spot );
|
||||
|
||||
playfx( level._effect["fw_impact"], drop_spot );
|
||||
level notify( "reset_meat" );
|
||||
meat delete();
|
||||
}
|
||||
|
@ -1,41 +1,44 @@
|
||||
//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 );
|
||||
}
|
||||
|
||||
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 )
|
||||
|
||||
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 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self rotateyaw( dir, 9 );
|
||||
wait 9;
|
||||
|
@ -1,9 +1,11 @@
|
||||
#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()
|
||||
{
|
||||
@ -11,14 +13,14 @@ init()
|
||||
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._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 );
|
||||
@ -30,20 +32,24 @@ init()
|
||||
|
||||
custom_joker_movement()
|
||||
{
|
||||
v_origin = self.weapon_model.origin - vectorScale( ( 0, 1, 0 ), 5 );
|
||||
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 );
|
||||
wait 0,5;
|
||||
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 movez( 20, 0.5, 0.5 );
|
||||
|
||||
m_lock waittill( "movedone" );
|
||||
m_lock movez( -100, 0,5, 0,5 );
|
||||
|
||||
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" );
|
||||
@ -51,34 +57,24 @@ custom_joker_movement()
|
||||
|
||||
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 ];
|
||||
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 );
|
||||
_k92 = getNextArrayKey( _a92, _k92 );
|
||||
}
|
||||
}
|
||||
|
||||
set_magic_box_zbarrier_state( state )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < self getnumzbarrierpieces() )
|
||||
{
|
||||
for ( i = 0; i < self getnumzbarrierpieces(); i++ )
|
||||
self hidezbarrierpiece( i );
|
||||
i++;
|
||||
}
|
||||
|
||||
self notify( "zbarrier_state_change" );
|
||||
switch( state )
|
||||
|
||||
switch ( state )
|
||||
{
|
||||
case "away":
|
||||
self showzbarrierpiece( 0 );
|
||||
@ -93,7 +89,7 @@ set_magic_box_zbarrier_state( state )
|
||||
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 );
|
||||
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":
|
||||
@ -113,10 +109,9 @@ set_magic_box_zbarrier_state( state )
|
||||
self.owner.is_locked = 0;
|
||||
break;
|
||||
default:
|
||||
if ( isDefined( level.custom_magicbox_state_handler ) )
|
||||
{
|
||||
if ( isdefined( level.custom_magicbox_state_handler ) )
|
||||
self [[ level.custom_magicbox_state_handler ]]( state );
|
||||
}
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
@ -133,10 +128,10 @@ 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;
|
||||
}
|
||||
wait 0.05;
|
||||
|
||||
self notify( "arrived" );
|
||||
self.state = "close";
|
||||
}
|
||||
@ -147,10 +142,10 @@ magic_box_leaves()
|
||||
self setclientfield( "magicbox_open_fx", 0 );
|
||||
self setzbarrierpiecestate( 1, "closing" );
|
||||
self playsound( "zmb_hellbox_rise" );
|
||||
|
||||
while ( self getzbarrierpiecestate( 1 ) == "closing" )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
wait 0.1;
|
||||
|
||||
self notify( "left" );
|
||||
self setclientfield( "magicbox_amb_fx", 0 );
|
||||
}
|
||||
@ -160,10 +155,10 @@ 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;
|
||||
}
|
||||
wait 0.1;
|
||||
|
||||
self notify( "opened" );
|
||||
}
|
||||
|
||||
@ -171,10 +166,10 @@ magic_box_closes()
|
||||
{
|
||||
self setzbarrierpiecestate( 2, "closing" );
|
||||
self playsound( "zmb_hellbox_close" );
|
||||
|
||||
while ( self getzbarrierpiecestate( 2 ) == "closing" )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
wait 0.1;
|
||||
|
||||
self notify( "closed" );
|
||||
self setclientfield( "magicbox_open_fx", 0 );
|
||||
}
|
||||
@ -191,27 +186,24 @@ magic_box_do_weapon_rise()
|
||||
self showzbarrierpiece( 4 );
|
||||
self setzbarrierpiecestate( 3, "opening" );
|
||||
self setzbarrierpiecestate( 4, "opening" );
|
||||
|
||||
while ( self getzbarrierpiecestate( 3 ) != "open" )
|
||||
{
|
||||
wait 0,5;
|
||||
}
|
||||
wait 0.5;
|
||||
|
||||
self hidezbarrierpiece( 3 );
|
||||
self hidezbarrierpiece( 4 );
|
||||
}
|
||||
|
||||
handle_fire_sale()
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "fire_sale_off" );
|
||||
i = 0;
|
||||
while ( i < level.chests.size )
|
||||
|
||||
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 );
|
||||
}
|
||||
i++;
|
||||
if ( level.chest_index != i && isdefined( level.chests[i].was_temp ) )
|
||||
level.chests[i].zbarrier setclientfield( "magicbox_amb_fx", 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -1,61 +1,126 @@
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/zombies/_zm_score;
|
||||
#include maps/mp/zombies/_zm_laststand;
|
||||
#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_laststand;
|
||||
#include maps\mp\zombies\_zm_pers_upgrades_functions;
|
||||
#include maps\mp\zombies\_zm_score;
|
||||
#include maps\mp\zombies\_zm_audio;
|
||||
|
||||
init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn )
|
||||
init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||
{
|
||||
precacheitem( weapon_name );
|
||||
precacheitem( flourish_weapon_name );
|
||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon );
|
||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
|
||||
melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||
i = 0;
|
||||
while ( i < melee_weapon_triggers.size )
|
||||
{
|
||||
knife_model = getent( melee_weapon_triggers[ i ].target, "targetname" );
|
||||
if ( isDefined( knife_model ) )
|
||||
|
||||
for ( i = 0; i < melee_weapon_triggers.size; i++ )
|
||||
{
|
||||
knife_model = getent( melee_weapon_triggers[i].target, "targetname" );
|
||||
|
||||
if ( isdefined( knife_model ) )
|
||||
knife_model hide();
|
||||
|
||||
melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||
|
||||
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
|
||||
{
|
||||
melee_weapon_triggers[i] sethintstring( hint_string, cost );
|
||||
|
||||
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||
{
|
||||
cursor_hint = "HINT_WEAPON";
|
||||
cursor_hint_weapon = weapon_name;
|
||||
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||
}
|
||||
melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||
melee_weapon_triggers[ i ] sethintstring( hint_string, cost );
|
||||
melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" );
|
||||
melee_weapon_triggers[ i ] usetriggerrequirelookat();
|
||||
i++;
|
||||
else
|
||||
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
||||
}
|
||||
else
|
||||
{
|
||||
weapon_display = get_weapon_display_name( weapon_name );
|
||||
hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||
melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost );
|
||||
|
||||
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||
{
|
||||
cursor_hint = "HINT_WEAPON";
|
||||
cursor_hint_weapon = weapon_name;
|
||||
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||
}
|
||||
else
|
||||
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
||||
}
|
||||
|
||||
melee_weapon_triggers[i] usetriggerrequirelookat();
|
||||
}
|
||||
|
||||
melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" );
|
||||
i = 0;
|
||||
while ( i < melee_weapon_structs.size )
|
||||
{
|
||||
prepare_stub( melee_weapon_structs[ i ].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn );
|
||||
i++;
|
||||
}
|
||||
|
||||
for ( i = 0; i < melee_weapon_structs.size; i++ )
|
||||
prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
|
||||
|
||||
register_melee_weapon_for_level( weapon_name );
|
||||
if ( !isDefined( level.ballistic_weapon_name ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.ballistic_weapon_name ) )
|
||||
level.ballistic_weapon_name = [];
|
||||
}
|
||||
level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name;
|
||||
if ( !isDefined( level.ballistic_upgraded_weapon_name ) )
|
||||
{
|
||||
|
||||
level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name;
|
||||
|
||||
if ( !isdefined( level.ballistic_upgraded_weapon_name ) )
|
||||
level.ballistic_upgraded_weapon_name = [];
|
||||
|
||||
level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name;
|
||||
/#
|
||||
if ( !isdefined( level.zombie_weapons[weapon_name] ) )
|
||||
{
|
||||
if ( isdefined( level.devgui_add_weapon ) )
|
||||
[[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost );
|
||||
}
|
||||
level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name;
|
||||
#/
|
||||
}
|
||||
|
||||
prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn )
|
||||
prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||
{
|
||||
if ( isDefined( stub ) )
|
||||
if ( isdefined( stub ) )
|
||||
{
|
||||
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
|
||||
{
|
||||
stub.hint_string = hint_string;
|
||||
|
||||
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||
{
|
||||
stub.cursor_hint = "HINT_WEAPON";
|
||||
stub.cursor_hint_weapon = weapon_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
stub.cursor_hint = "HINT_NOICON";
|
||||
stub.cursor_hint_weapon = undefined;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
stub.hint_parm1 = get_weapon_display_name( weapon_name );
|
||||
stub.hint_parm2 = cost;
|
||||
stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||
|
||||
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||
{
|
||||
stub.cursor_hint = "HINT_WEAPON";
|
||||
stub.cursor_hint_weapon = weapon_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
stub.cursor_hint = "HINT_NOICON";
|
||||
stub.cursor_hint_weapon = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
stub.cost = cost;
|
||||
stub.weapon_name = weapon_name;
|
||||
stub.has_weapon = has_weapon;
|
||||
stub.give_weapon = give_weapon;
|
||||
stub.take_weapon = take_weapon;
|
||||
stub.vo_dialog_id = vo_dialog_id;
|
||||
stub.flourish_weapon_name = flourish_weapon_name;
|
||||
stub.ballistic_weapon_name = ballistic_weapon_name;
|
||||
@ -68,48 +133,38 @@ prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ba
|
||||
add_stub( stub, weapon_name )
|
||||
{
|
||||
melee_weapon = undefined;
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
{
|
||||
if ( level._melee_weapons[ i ].weapon_name == weapon_name )
|
||||
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
||||
{
|
||||
melee_weapon = level._melee_weapons[ i ];
|
||||
melee_weapon = level._melee_weapons[i];
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if ( isDefined( stub ) && isDefined( melee_weapon ) )
|
||||
{
|
||||
prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.has_weapon, melee_weapon.give_weapon, melee_weapon.take_weapon, melee_weapon.flourish_fn );
|
||||
}
|
||||
|
||||
if ( isdefined( stub ) && isdefined( melee_weapon ) )
|
||||
prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn );
|
||||
}
|
||||
|
||||
give_melee_weapon_by_name( weapon_name )
|
||||
{
|
||||
melee_weapon = undefined;
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
{
|
||||
if ( level._melee_weapons[ i ].weapon_name == weapon_name )
|
||||
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
||||
{
|
||||
melee_weapon = level._melee_weapons[ i ];
|
||||
melee_weapon = level._melee_weapons[i];
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if ( isDefined( melee_weapon ) )
|
||||
{
|
||||
self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.give_weapon, melee_weapon.flourish_fn, undefined );
|
||||
}
|
||||
|
||||
if ( isdefined( melee_weapon ) )
|
||||
self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined );
|
||||
}
|
||||
|
||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn )
|
||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||
{
|
||||
melee_weapon = spawnstruct();
|
||||
melee_weapon.weapon_name = weapon_name;
|
||||
@ -120,373 +175,343 @@ add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ball
|
||||
melee_weapon.wallbuy_targetname = wallbuy_targetname;
|
||||
melee_weapon.hint_string = hint_string;
|
||||
melee_weapon.vo_dialog_id = vo_dialog_id;
|
||||
melee_weapon.has_weapon = has_weapon;
|
||||
melee_weapon.give_weapon = give_weapon;
|
||||
melee_weapon.take_weapon = take_weapon;
|
||||
melee_weapon.flourish_fn = flourish_fn;
|
||||
if ( !isDefined( level._melee_weapons ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level._melee_weapons ) )
|
||||
level._melee_weapons = [];
|
||||
}
|
||||
level._melee_weapons[ level._melee_weapons.size ] = melee_weapon;
|
||||
|
||||
level._melee_weapons[level._melee_weapons.size] = melee_weapon;
|
||||
}
|
||||
|
||||
player_can_see_weapon_prompt( weapon_name )
|
||||
{
|
||||
if ( is_true( level._allow_melee_weapon_switching ) )
|
||||
return true;
|
||||
|
||||
if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
spectator_respawn_all()
|
||||
{
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
self [[ level._melee_weapons[ i ].take_weapon ]]();
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].take_weapon, level._melee_weapons[ i ].has_weapon );
|
||||
i++;
|
||||
}
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name );
|
||||
}
|
||||
|
||||
spectator_respawn( wallbuy_targetname, take_weapon, has_weapon )
|
||||
spectator_respawn( wallbuy_targetname, weapon_name )
|
||||
{
|
||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < melee_triggers.size )
|
||||
|
||||
for ( i = 0; i < melee_triggers.size; i++ )
|
||||
{
|
||||
melee_triggers[ i ] setvisibletoall();
|
||||
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
melee_triggers[i] setvisibletoall();
|
||||
|
||||
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||
{
|
||||
j = 0;
|
||||
while ( j < players.size )
|
||||
for ( j = 0; j < players.size; j++ )
|
||||
{
|
||||
if ( players[ j ] [[ has_weapon ]]() )
|
||||
{
|
||||
melee_triggers[ i ] setinvisibletoplayer( players[ j ] );
|
||||
}
|
||||
j++;
|
||||
if ( !players[j] player_can_see_weapon_prompt( weapon_name ) )
|
||||
melee_triggers[i] setinvisibletoplayer( players[j] );
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
trigger_hide_all()
|
||||
{
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
self trigger_hide( level._melee_weapons[ i ].wallbuy_targetname );
|
||||
i++;
|
||||
}
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
self trigger_hide( level._melee_weapons[i].wallbuy_targetname );
|
||||
}
|
||||
|
||||
trigger_hide( wallbuy_targetname )
|
||||
{
|
||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||
i = 0;
|
||||
while ( i < melee_triggers.size )
|
||||
{
|
||||
melee_triggers[ i ] setinvisibletoplayer( self );
|
||||
i++;
|
||||
}
|
||||
|
||||
for ( i = 0; i < melee_triggers.size; i++ )
|
||||
melee_triggers[i] setinvisibletoplayer( self );
|
||||
}
|
||||
|
||||
has_any_ballistic_knife()
|
||||
{
|
||||
if ( self hasweapon( "knife_ballistic_zm" ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return true;
|
||||
|
||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||
return true;
|
||||
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
{
|
||||
return 1;
|
||||
if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) )
|
||||
return true;
|
||||
|
||||
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
||||
return true;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
if ( self hasweapon( level._melee_weapons[ i ].ballistic_weapon_name ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
has_upgraded_ballistic_knife()
|
||||
{
|
||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||
return true;
|
||||
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
{
|
||||
return 1;
|
||||
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
||||
return true;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
give_ballistic_knife( weapon_string, upgraded )
|
||||
{
|
||||
current_melee_weapon = self get_player_melee_weapon();
|
||||
if ( isDefined( current_melee_weapon ) )
|
||||
|
||||
if ( isdefined( current_melee_weapon ) )
|
||||
{
|
||||
if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) )
|
||||
{
|
||||
weapon_string = level.ballistic_upgraded_weapon_name[ current_melee_weapon ];
|
||||
}
|
||||
if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) )
|
||||
{
|
||||
weapon_string = level.ballistic_weapon_name[ current_melee_weapon ];
|
||||
}
|
||||
if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) )
|
||||
weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon];
|
||||
|
||||
if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) )
|
||||
weapon_string = level.ballistic_weapon_name[current_melee_weapon];
|
||||
}
|
||||
|
||||
return weapon_string;
|
||||
}
|
||||
|
||||
change_melee_weapon( weapon_name, current_weapon )
|
||||
{
|
||||
current_melee_weapon = self get_player_melee_weapon();
|
||||
if ( isDefined( current_melee_weapon ) )
|
||||
|
||||
if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name )
|
||||
{
|
||||
self takeweapon( current_melee_weapon );
|
||||
unacquire_weapon_toggle( current_melee_weapon );
|
||||
}
|
||||
|
||||
self set_player_melee_weapon( weapon_name );
|
||||
had_ballistic = 0;
|
||||
had_ballistic_upgraded = 0;
|
||||
ballistic_was_primary = 0;
|
||||
primaryweapons = self getweaponslistprimaries();
|
||||
i = 0;
|
||||
while ( i < primaryweapons.size )
|
||||
|
||||
for ( i = 0; i < primaryweapons.size; i++ )
|
||||
{
|
||||
primary_weapon = primaryweapons[ i ];
|
||||
primary_weapon = primaryweapons[i];
|
||||
|
||||
if ( issubstr( primary_weapon, "knife_ballistic_" ) )
|
||||
{
|
||||
had_ballistic = 1;
|
||||
|
||||
if ( primary_weapon == current_weapon )
|
||||
{
|
||||
ballistic_was_primary = 1;
|
||||
}
|
||||
|
||||
self notify( "zmb_lost_knife" );
|
||||
self takeweapon( primary_weapon );
|
||||
unacquire_weapon_toggle( primary_weapon );
|
||||
|
||||
if ( issubstr( primary_weapon, "upgraded" ) )
|
||||
{
|
||||
had_ballistic_upgraded = 1;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
if ( had_ballistic )
|
||||
{
|
||||
if ( had_ballistic_upgraded )
|
||||
{
|
||||
new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ];
|
||||
new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name];
|
||||
|
||||
if ( ballistic_was_primary )
|
||||
{
|
||||
current_weapon = new_ballistic;
|
||||
}
|
||||
self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
|
||||
|
||||
self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
new_ballistic = level.ballistic_weapon_name[ weapon_name ];
|
||||
new_ballistic = level.ballistic_weapon_name[weapon_name];
|
||||
|
||||
if ( ballistic_was_primary )
|
||||
{
|
||||
current_weapon = new_ballistic;
|
||||
}
|
||||
|
||||
self giveweapon( new_ballistic, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
return current_weapon;
|
||||
}
|
||||
|
||||
melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
|
||||
melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
|
||||
{
|
||||
self.first_time_triggered = 0;
|
||||
while ( isDefined( self.stub ) )
|
||||
|
||||
if ( isdefined( self.stub ) )
|
||||
{
|
||||
self endon( "kill_trigger" );
|
||||
if ( isDefined( self.stub.first_time_triggered ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.stub.first_time_triggered ) )
|
||||
self.first_time_triggered = self.stub.first_time_triggered;
|
||||
}
|
||||
|
||||
weapon_name = self.stub.weapon_name;
|
||||
cost = self.stub.cost;
|
||||
has_weapon = self.stub.has_weapon;
|
||||
give_weapon = self.stub.give_weapon;
|
||||
flourish_fn = self.stub.flourish_fn;
|
||||
vo_dialog_id = self.stub.vo_dialog_id;
|
||||
flourish_weapon_name = self.stub.flourish_weapon_name;
|
||||
ballistic_weapon_name = self.stub.ballistic_weapon_name;
|
||||
ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name;
|
||||
players = getplayers();
|
||||
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
|
||||
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( players[ i ] [[ has_weapon ]]() )
|
||||
{
|
||||
self setinvisibletoplayer( players[ i ] );
|
||||
}
|
||||
i++;
|
||||
if ( !players[i] player_can_see_weapon_prompt( weapon_name ) )
|
||||
self setinvisibletoplayer( players[i] );
|
||||
}
|
||||
}
|
||||
}
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "trigger", player );
|
||||
|
||||
if ( !is_player_valid( player ) )
|
||||
{
|
||||
player thread ignore_triggers( 0,5 );
|
||||
player thread ignore_triggers( 0.5 );
|
||||
continue;
|
||||
}
|
||||
else if ( player in_revive_trigger() )
|
||||
|
||||
if ( player in_revive_trigger() )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else if ( player isthrowinggrenade() )
|
||||
|
||||
if ( player isthrowinggrenade() )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else if ( player.is_drinking > 0 )
|
||||
|
||||
if ( player.is_drinking > 0 )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
|
||||
|
||||
if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if ( player isswitchingweapons() )
|
||||
{
|
||||
wait 0,1;
|
||||
break;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else current_weapon = player getcurrentweapon();
|
||||
if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() )
|
||||
|
||||
current_weapon = player getcurrentweapon();
|
||||
|
||||
if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() )
|
||||
{
|
||||
wait 0,1;
|
||||
break;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
|
||||
if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission )
|
||||
{
|
||||
if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission )
|
||||
{
|
||||
wait 0,1;
|
||||
break;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
player_has_weapon = player [[ has_weapon ]]();
|
||||
|
||||
player_has_weapon = player hasweapon( weapon_name );
|
||||
|
||||
if ( !player_has_weapon )
|
||||
{
|
||||
cost = self.stub.cost;
|
||||
|
||||
if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() )
|
||||
cost = int( cost / 2 );
|
||||
|
||||
if ( player.score >= cost )
|
||||
{
|
||||
if ( self.first_time_triggered == 0 )
|
||||
{
|
||||
model = getent( self.target, "targetname" );
|
||||
if ( isDefined( model ) )
|
||||
{
|
||||
|
||||
if ( isdefined( model ) )
|
||||
model thread melee_weapon_show( player );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( self.clientfieldname ) )
|
||||
{
|
||||
else if ( isdefined( self.clientfieldname ) )
|
||||
level setclientfield( self.clientfieldname, 1 );
|
||||
}
|
||||
}
|
||||
|
||||
self.first_time_triggered = 1;
|
||||
if ( isDefined( self.stub ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.stub ) )
|
||||
self.stub.first_time_triggered = 1;
|
||||
}
|
||||
}
|
||||
player maps/mp/zombies/_zm_score::minus_to_player_score( cost );
|
||||
|
||||
player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 );
|
||||
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" );
|
||||
player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, self );
|
||||
player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self );
|
||||
}
|
||||
else
|
||||
{
|
||||
play_sound_on_ent( "no_purchase" );
|
||||
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 );
|
||||
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 );
|
||||
}
|
||||
break;
|
||||
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
{
|
||||
|
||||
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||
self setinvisibletoplayer( player );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
melee_weapon_show( player )
|
||||
{
|
||||
player_angles = vectorToAngle( player.origin - self.origin );
|
||||
player_yaw = player_angles[ 1 ];
|
||||
weapon_yaw = self.angles[ 1 ];
|
||||
yaw_diff = angleClamp180( player_yaw - weapon_yaw );
|
||||
player_angles = vectortoangles( player.origin - self.origin );
|
||||
player_yaw = player_angles[1];
|
||||
weapon_yaw = self.angles[1];
|
||||
yaw_diff = angleclamp180( player_yaw - weapon_yaw );
|
||||
|
||||
if ( yaw_diff > 0 )
|
||||
{
|
||||
yaw = weapon_yaw - 90;
|
||||
}
|
||||
else
|
||||
{
|
||||
yaw = weapon_yaw + 90;
|
||||
}
|
||||
|
||||
self.og_origin = self.origin;
|
||||
self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8;
|
||||
wait 0,05;
|
||||
self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8;
|
||||
wait 0.05;
|
||||
self show();
|
||||
play_sound_at_pos( "weapon_show", self.origin, self );
|
||||
time = 1;
|
||||
self moveto( self.og_origin, time );
|
||||
}
|
||||
|
||||
give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, trigger )
|
||||
give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger )
|
||||
{
|
||||
if ( isDefined( flourish_fn ) )
|
||||
{
|
||||
if ( isdefined( flourish_fn ) )
|
||||
self thread [[ flourish_fn ]]();
|
||||
}
|
||||
|
||||
gun = self do_melee_weapon_flourish_begin( flourish_weapon_name );
|
||||
self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
|
||||
self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
|
||||
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
|
||||
self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
|
||||
{
|
||||
|
||||
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
|
||||
return;
|
||||
}
|
||||
self [[ give_weapon ]]();
|
||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
{
|
||||
if ( isDefined( trigger ) )
|
||||
|
||||
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||
{
|
||||
if ( isdefined( trigger ) )
|
||||
trigger setinvisibletoplayer( self );
|
||||
}
|
||||
|
||||
self trigger_hide_all();
|
||||
}
|
||||
}
|
||||
@ -512,19 +537,21 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
|
||||
#/
|
||||
self enable_player_move_states();
|
||||
weapon = flourish_weapon_name;
|
||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
|
||||
|
||||
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
|
||||
{
|
||||
self takeweapon( weapon );
|
||||
self.lastactiveweapon = "none";
|
||||
return;
|
||||
}
|
||||
|
||||
self takeweapon( weapon );
|
||||
self giveweapon( weapon_name );
|
||||
gun = change_melee_weapon( weapon_name, gun );
|
||||
|
||||
if ( self hasweapon( "knife_zm" ) )
|
||||
{
|
||||
self takeweapon( "knife_zm" );
|
||||
}
|
||||
|
||||
if ( self is_multiple_drinking() )
|
||||
{
|
||||
self decrement_is_drinking();
|
||||
@ -537,20 +564,17 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
|
||||
return;
|
||||
}
|
||||
else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) )
|
||||
{
|
||||
self switchtoweapon( gun );
|
||||
}
|
||||
else
|
||||
{
|
||||
primaryweapons = self getweaponslistprimaries();
|
||||
if ( isDefined( primaryweapons ) && primaryweapons.size > 0 )
|
||||
{
|
||||
self switchtoweapon( primaryweapons[ 0 ] );
|
||||
}
|
||||
|
||||
if ( isdefined( primaryweapons ) && primaryweapons.size > 0 )
|
||||
self switchtoweapon( primaryweapons[0] );
|
||||
}
|
||||
|
||||
self waittill( "weapon_change_complete" );
|
||||
if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission )
|
||||
{
|
||||
|
||||
if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) )
|
||||
self decrement_is_drinking();
|
||||
}
|
||||
}
|
||||
|
@ -1,60 +1,62 @@
|
||||
//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" );
|
||||
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 ) )
|
||||
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";
|
||||
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" );
|
||||
}
|
||||
|
||||
divetonuke_set_clientfield( state ) //checked matches cerberus output
|
||||
divetonuke_set_clientfield( 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";
|
||||
@ -62,55 +64,59 @@ divetonuke_perk_machine_setup( use_trigger, perk_machine, bump_trigger, collisio
|
||||
use_trigger.target = "vending_divetonuke";
|
||||
perk_machine.script_string = "divetonuke_perk";
|
||||
perk_machine.targetname = "vending_divetonuke";
|
||||
if ( isDefined( bump_trigger ) )
|
||||
{
|
||||
|
||||
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 )
|
||||
|
||||
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 );
|
||||
}
|
||||
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();
|
||||
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 );
|
||||
}
|
||||
|
||||
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 );
|
||||
}
|
||||
|
||||
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 )
|
||||
if ( isdefined( perk.model ) && perk.model == level.machine_assets["divetonuke"].on_model )
|
||||
{
|
||||
perk perk_fx( undefined, 1 );
|
||||
perk thread perk_fx( "divetonuke_light" );
|
||||
@ -120,50 +126,47 @@ divetonuke_host_migration_func() //checked changed to match cerberus output
|
||||
|
||||
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" ];
|
||||
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" );
|
||||
}
|
||||
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 );
|
||||
|
||||
playfx( level._effect["divetonuke_groundhit"], origin );
|
||||
attacker playsound( "zmb_phdflop_explo" );
|
||||
maps/mp/_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
|
||||
maps\mp\_visionset_mgr::vsmgr_activate( "visionset", "zm_perk_divetonuke", attacker );
|
||||
wait 1;
|
||||
maps/mp/_visionset_mgr::vsmgr_deactivate( "visionset", "zm_perk_divetonuke", attacker );
|
||||
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 )
|
||||
for ( i = 0; i < a_zombies.size; i++ )
|
||||
{
|
||||
e_zombie = a_zombies[ i ];
|
||||
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);
|
||||
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 );
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -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" );
|
||||
}
|
@ -1,184 +1,172 @@
|
||||
//checked includes match cerberus output
|
||||
#include maps/mp/zombies/_zm_weapons;
|
||||
#include maps/mp/zombies/_zm_equipment;
|
||||
#include maps/mp/zombies/_zm_buildables;
|
||||
#include maps/mp/zombies/_zm_weap_riotshield_prison;
|
||||
#include common_scripts/utility;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
// T6 GSC SOURCE
|
||||
// Decompiled by https://github.com/xensik/gsc-tool
|
||||
#include maps\mp\_utility;
|
||||
#include maps\mp\zombies\_zm_utility;
|
||||
#include common_scripts\utility;
|
||||
#include maps\mp\zombies\_zm_weap_riotshield_prison;
|
||||
#include maps\mp\zombies\_zm_buildables;
|
||||
#include maps\mp\zombies\_zm_equipment;
|
||||
#include maps\mp\zombies\_zm_weapons;
|
||||
|
||||
init() //checked matches cerberus output
|
||||
init()
|
||||
{
|
||||
level.riotshield_name = "alcatraz_shield_zm";
|
||||
level.deployedshieldmodel = [];
|
||||
level.stowedshieldmodel = [];
|
||||
level.carriedshieldmodel = [];
|
||||
level.deployedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_dlc2_dmg0_world";
|
||||
level.deployedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dlc2_dmg1_world";
|
||||
level.deployedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dlc2_dmg2_world";
|
||||
level.stowedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_dlc2_dmg0_stow";
|
||||
level.stowedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dlc2_dmg1_stow";
|
||||
level.stowedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dlc2_dmg2_stow";
|
||||
level.carriedshieldmodel[ 0 ] = "t6_wpn_zmb_shield_dlc2_dmg0_world";
|
||||
level.carriedshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dlc2_dmg1_world";
|
||||
level.carriedshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dlc2_dmg2_world";
|
||||
level.viewshieldmodel[ 0 ] = "t6_wpn_zmb_shield_dlc2_dmg0_view";
|
||||
level.viewshieldmodel[ 2 ] = "t6_wpn_zmb_shield_dlc2_dmg1_view";
|
||||
level.viewshieldmodel[ 3 ] = "t6_wpn_zmb_shield_dlc2_dmg2_view";
|
||||
precachemodel( level.stowedshieldmodel[ 0 ] );
|
||||
precachemodel( level.stowedshieldmodel[ 2 ] );
|
||||
precachemodel( level.stowedshieldmodel[ 3 ] );
|
||||
precachemodel( level.carriedshieldmodel[ 0 ] );
|
||||
precachemodel( level.carriedshieldmodel[ 2 ] );
|
||||
precachemodel( level.carriedshieldmodel[ 3 ] );
|
||||
precachemodel( level.viewshieldmodel[ 0 ] );
|
||||
precachemodel( level.viewshieldmodel[ 2 ] );
|
||||
precachemodel( level.viewshieldmodel[ 3 ] );
|
||||
level.deployedshieldmodel[0] = "t6_wpn_zmb_shield_dlc2_dmg0_world";
|
||||
level.deployedshieldmodel[2] = "t6_wpn_zmb_shield_dlc2_dmg1_world";
|
||||
level.deployedshieldmodel[3] = "t6_wpn_zmb_shield_dlc2_dmg2_world";
|
||||
level.stowedshieldmodel[0] = "t6_wpn_zmb_shield_dlc2_dmg0_stow";
|
||||
level.stowedshieldmodel[2] = "t6_wpn_zmb_shield_dlc2_dmg1_stow";
|
||||
level.stowedshieldmodel[3] = "t6_wpn_zmb_shield_dlc2_dmg2_stow";
|
||||
level.carriedshieldmodel[0] = "t6_wpn_zmb_shield_dlc2_dmg0_world";
|
||||
level.carriedshieldmodel[2] = "t6_wpn_zmb_shield_dlc2_dmg1_world";
|
||||
level.carriedshieldmodel[3] = "t6_wpn_zmb_shield_dlc2_dmg2_world";
|
||||
level.viewshieldmodel[0] = "t6_wpn_zmb_shield_dlc2_dmg0_view";
|
||||
level.viewshieldmodel[2] = "t6_wpn_zmb_shield_dlc2_dmg1_view";
|
||||
level.viewshieldmodel[3] = "t6_wpn_zmb_shield_dlc2_dmg2_view";
|
||||
precachemodel( level.stowedshieldmodel[0] );
|
||||
precachemodel( level.stowedshieldmodel[2] );
|
||||
precachemodel( level.stowedshieldmodel[3] );
|
||||
precachemodel( level.carriedshieldmodel[0] );
|
||||
precachemodel( level.carriedshieldmodel[2] );
|
||||
precachemodel( level.carriedshieldmodel[3] );
|
||||
precachemodel( level.viewshieldmodel[0] );
|
||||
precachemodel( level.viewshieldmodel[2] );
|
||||
precachemodel( level.viewshieldmodel[3] );
|
||||
level.riotshield_placement_zoffset = 26;
|
||||
}
|
||||
|
||||
attachriotshield( model, tag ) //checked matches cerberus output
|
||||
attachriotshield( model, tag )
|
||||
{
|
||||
if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) )
|
||||
{
|
||||
if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) )
|
||||
self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag );
|
||||
}
|
||||
|
||||
self.prev_shield_model = model;
|
||||
self.prev_shield_tag = tag;
|
||||
if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) )
|
||||
self attachshieldmodel( self.prev_shield_model, self.prev_shield_tag );
|
||||
}
|
||||
}
|
||||
|
||||
removeriotshield() //checked matches cerberus output
|
||||
removeriotshield()
|
||||
{
|
||||
if ( isDefined( self.prev_shield_model ) && isDefined( self.prev_shield_tag ) )
|
||||
{
|
||||
if ( isdefined( self.prev_shield_model ) && isdefined( self.prev_shield_tag ) )
|
||||
self detachshieldmodel( self.prev_shield_model, self.prev_shield_tag );
|
||||
}
|
||||
|
||||
self.prev_shield_model = undefined;
|
||||
self.prev_shield_tag = undefined;
|
||||
|
||||
if ( self getcurrentweapon() != level.riotshield_name )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
self setheldweaponmodel( 0 );
|
||||
}
|
||||
|
||||
setriotshieldviewmodel( modelnum ) //checked matches cerberus output
|
||||
setriotshieldviewmodel( modelnum )
|
||||
{
|
||||
self.prev_shield_viewmodel = modelnum;
|
||||
|
||||
if ( self getcurrentweapon() != level.riotshield_name )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.prev_shield_viewmodel ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.prev_shield_viewmodel ) )
|
||||
self setheldweaponmodel( self.prev_shield_viewmodel );
|
||||
}
|
||||
else
|
||||
{
|
||||
self setheldweaponmodel( 0 );
|
||||
}
|
||||
}
|
||||
|
||||
specialriotshieldviewmodel() //checked matches cerberus output
|
||||
specialriotshieldviewmodel()
|
||||
{
|
||||
if ( self getcurrentweapon() != level.riotshield_name )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
self setheldweaponmodel( 3 );
|
||||
}
|
||||
|
||||
restoreriotshieldviewmodel() //checked matches cerberus output
|
||||
restoreriotshieldviewmodel()
|
||||
{
|
||||
if ( self getcurrentweapon() != level.riotshield_name )
|
||||
{
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.prev_shield_viewmodel ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.prev_shield_viewmodel ) )
|
||||
self setheldweaponmodel( self.prev_shield_viewmodel );
|
||||
}
|
||||
else
|
||||
{
|
||||
self setheldweaponmodel( 0 );
|
||||
}
|
||||
}
|
||||
|
||||
updateriotshieldmodel() //checked changed to match cerberus output
|
||||
updateriotshieldmodel()
|
||||
{
|
||||
if ( !isDefined( self.shield_damage_level ) )
|
||||
{
|
||||
if ( isDefined( self.player_shield_reset_health ) )
|
||||
if ( !isdefined( self.shield_damage_level ) )
|
||||
{
|
||||
if ( isdefined( self.player_shield_reset_health ) )
|
||||
self [[ self.player_shield_reset_health ]]();
|
||||
}
|
||||
}
|
||||
|
||||
update = 0;
|
||||
if ( !isDefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level )
|
||||
|
||||
if ( !isdefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level )
|
||||
{
|
||||
self.prev_shield_damage_level = self.shield_damage_level;
|
||||
update = 1;
|
||||
}
|
||||
if ( !isDefined( self.prev_shield_placement ) || self.prev_shield_placement != self.shield_placement )
|
||||
|
||||
if ( !isdefined( self.prev_shield_placement ) || self.prev_shield_placement != self.shield_placement )
|
||||
{
|
||||
self.prev_shield_placement = self.shield_placement;
|
||||
update = 1;
|
||||
}
|
||||
|
||||
if ( update )
|
||||
{
|
||||
if ( self.prev_shield_placement == 0 )
|
||||
{
|
||||
self attachriotshield();
|
||||
}
|
||||
else if ( self.prev_shield_placement == 1 )
|
||||
{
|
||||
self attachriotshield( level.carriedshieldmodel[ self.prev_shield_damage_level ], "tag_weapon_left" );
|
||||
self attachriotshield( level.carriedshieldmodel[self.prev_shield_damage_level], "tag_weapon_left" );
|
||||
self setriotshieldviewmodel( self.prev_shield_damage_level );
|
||||
}
|
||||
else if ( self.prev_shield_placement == 2 )
|
||||
{
|
||||
self attachriotshield( level.stowedshieldmodel[ self.prev_shield_damage_level ], "tag_stowed_back" );
|
||||
}
|
||||
self attachriotshield( level.stowedshieldmodel[self.prev_shield_damage_level], "tag_stowed_back" );
|
||||
else if ( self.prev_shield_placement == 3 )
|
||||
{
|
||||
self attachriotshield();
|
||||
if ( isDefined( self.shield_ent ) )
|
||||
{
|
||||
self.shield_ent setmodel( level.deployedshieldmodel[ self.prev_shield_damage_level ] );
|
||||
}
|
||||
|
||||
if ( isdefined( self.shield_ent ) )
|
||||
self.shield_ent setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
updatestandaloneriotshieldmodel() //checked matches cerberus output
|
||||
updatestandaloneriotshieldmodel()
|
||||
{
|
||||
update = 0;
|
||||
if ( !isDefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level )
|
||||
|
||||
if ( !isdefined( self.prev_shield_damage_level ) || self.prev_shield_damage_level != self.shield_damage_level )
|
||||
{
|
||||
self.prev_shield_damage_level = self.shield_damage_level;
|
||||
update = 1;
|
||||
}
|
||||
|
||||
if ( update )
|
||||
{
|
||||
self setmodel( level.deployedshieldmodel[ self.prev_shield_damage_level ] );
|
||||
}
|
||||
self setmodel( level.deployedshieldmodel[self.prev_shield_damage_level] );
|
||||
}
|
||||
|
||||
watchshieldlaststand() //checked matches cerberus output used is_true() instead
|
||||
watchshieldlaststand()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
self notify( "watchShieldLastStand" );
|
||||
self endon( "watchShieldLastStand" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "weapons_taken_for_last_stand" );
|
||||
|
||||
self.riotshield_hidden = 0;
|
||||
if ( is_true( self.hasriotshield ) )
|
||||
|
||||
if ( isdefined( self.hasriotshield ) && self.hasriotshield )
|
||||
{
|
||||
if ( self.prev_shield_placement == 1 || self.prev_shield_placement == 2 )
|
||||
{
|
||||
@ -187,39 +175,32 @@ watchshieldlaststand() //checked matches cerberus output used is_true() instead
|
||||
self updateriotshieldmodel();
|
||||
}
|
||||
}
|
||||
|
||||
str_notify = self waittill_any_return( "player_revived", "bled_out" );
|
||||
|
||||
if ( str_notify == "player_revived" )
|
||||
{
|
||||
if ( isDefined( self.riotshield_hidden ) && self.riotshield_hidden > 0 )
|
||||
if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden > 0 )
|
||||
{
|
||||
self.shield_placement = self.riotshield_hidden;
|
||||
self updateriotshieldmodel();
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
self maps/mp/zombies/_zm_weap_riotshield_prison::player_take_riotshield();
|
||||
}
|
||||
self maps\mp\zombies\_zm_weap_riotshield_prison::player_take_riotshield();
|
||||
|
||||
self.riotshield_hidden = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
trackriotshield() //checked changed to match cerberus output
|
||||
trackriotshield()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
self.hasriotshield = self hasweapon( level.riotshield_name );
|
||||
if ( self getcurrentweapon() == level.riotshield_name )
|
||||
{
|
||||
self.hasriotshieldequipped = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.hasriotshieldequipped = 0;
|
||||
}
|
||||
self.hasriotshieldequipped = self getcurrentweapon() == level.riotshield_name;
|
||||
self.shield_placement = 0;
|
||||
|
||||
if ( self.hasriotshield )
|
||||
{
|
||||
if ( self.hasriotshieldequipped )
|
||||
@ -233,66 +214,66 @@ trackriotshield() //checked changed to match cerberus output
|
||||
self updateriotshieldmodel();
|
||||
}
|
||||
}
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "weapon_change", newweapon );
|
||||
|
||||
if ( newweapon == level.riotshield_name )
|
||||
{
|
||||
if ( self.hasriotshieldequipped )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( self.riotshieldentity ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.riotshieldentity ) )
|
||||
self notify( "destroy_riotshield" );
|
||||
}
|
||||
|
||||
self.shield_placement = 1;
|
||||
self updateriotshieldmodel();
|
||||
|
||||
if ( self.hasriotshield )
|
||||
{
|
||||
break;
|
||||
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
self.hasriotshield = 1;
|
||||
self.hasriotshieldequipped = 1;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( self ismantling() && newweapon == "none" )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( self.hasriotshieldequipped )
|
||||
{
|
||||
/*
|
||||
/#
|
||||
assert( self.hasriotshield );
|
||||
#/
|
||||
*/
|
||||
self.hasriotshield = self hasweapon( level.riotshield_name );
|
||||
if ( isDefined( self.riotshield_hidden ) && self.riotshield_hidden )
|
||||
|
||||
if ( isdefined( self.riotshield_hidden ) && self.riotshield_hidden )
|
||||
{
|
||||
|
||||
}
|
||||
else if ( self.hasriotshield )
|
||||
{
|
||||
self.shield_placement = 2;
|
||||
break;
|
||||
}
|
||||
else if ( isDefined( self.shield_ent ) )
|
||||
else if ( isdefined( self.shield_ent ) )
|
||||
{
|
||||
/*
|
||||
/#
|
||||
assert( self.shield_placement == 3 );
|
||||
#/
|
||||
*/
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.shield_placement = 0;
|
||||
}
|
||||
|
||||
self updateriotshieldmodel();
|
||||
self.hasriotshieldequipped = 0;
|
||||
break;
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( self.hasriotshield )
|
||||
{
|
||||
if ( !self hasweapon( level.riotshield_name ) )
|
||||
@ -301,8 +282,10 @@ trackriotshield() //checked changed to match cerberus output
|
||||
self updateriotshieldmodel();
|
||||
self.hasriotshield = 0;
|
||||
}
|
||||
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( self hasweapon( level.riotshield_name ) )
|
||||
{
|
||||
self.shield_placement = 2;
|
||||
@ -312,28 +295,32 @@ trackriotshield() //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
trackequipmentchange() //checked changed to match cerberus output
|
||||
trackequipmentchange()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "equipment_dropped", equipname );
|
||||
|
||||
self notify( "weapon_change", self getcurrentweapon() );
|
||||
}
|
||||
}
|
||||
|
||||
updateriotshieldplacement() //checked matches cerberus output
|
||||
updateriotshieldplacement()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "deploy_riotshield" );
|
||||
self endon( "start_riotshield_deploy" );
|
||||
self endon( "weapon_change" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
placement = self canplaceriotshield( "raise_riotshield" );
|
||||
if ( placement[ "result" ] && riotshielddistancetest( placement[ "origin" ] ) )
|
||||
|
||||
if ( placement["result"] && riotshielddistancetest( placement["origin"] ) )
|
||||
{
|
||||
self restoreriotshieldviewmodel();
|
||||
self setplacementhint( 1 );
|
||||
@ -343,18 +330,19 @@ updateriotshieldplacement() //checked matches cerberus output
|
||||
self specialriotshieldviewmodel();
|
||||
self setplacementhint( 0 );
|
||||
}
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
startriotshielddeploy() //checked matches cerberus output
|
||||
startriotshielddeploy()
|
||||
{
|
||||
self notify( "start_riotshield_deploy" );
|
||||
self thread updateriotshieldplacement();
|
||||
self thread watchriotshielddeploy();
|
||||
}
|
||||
|
||||
spawnriotshieldcover( origin, angles ) //checked matches cerberus output
|
||||
spawnriotshieldcover( origin, angles )
|
||||
{
|
||||
shield_ent = spawn( "script_model", origin, 1 );
|
||||
shield_ent.angles = angles;
|
||||
@ -365,27 +353,29 @@ spawnriotshieldcover( origin, angles ) //checked matches cerberus output
|
||||
self.shield_placement = 3;
|
||||
self updateriotshieldmodel();
|
||||
shield_ent setscriptmoverflag( 0 );
|
||||
self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( shield_ent, "destroy_riotshield", 1 );
|
||||
maps/mp/zombies/_zm_equipment::destructible_equipment_list_add( shield_ent );
|
||||
self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( shield_ent, "destroy_riotshield", 1 );
|
||||
maps\mp\zombies\_zm_equipment::destructible_equipment_list_add( shield_ent );
|
||||
return shield_ent;
|
||||
}
|
||||
|
||||
watchriotshielddeploy() //checked matches cerberus output
|
||||
watchriotshielddeploy()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "start_riotshield_deploy" );
|
||||
|
||||
self waittill( "deploy_riotshield", deploy_attempt );
|
||||
|
||||
self restoreriotshieldviewmodel();
|
||||
self setplacementhint( 1 );
|
||||
placement_hint = 0;
|
||||
|
||||
if ( deploy_attempt )
|
||||
{
|
||||
placement = self canplaceriotshield( "deploy_riotshield" );
|
||||
if ( placement[ "result" ] && riotshielddistancetest( placement[ "origin" ] ) && self check_plant_position( placement[ "origin" ], placement[ "angles" ] ) )
|
||||
{
|
||||
self doriotshielddeploy( placement[ "origin" ], placement[ "angles" ] );
|
||||
}
|
||||
|
||||
if ( placement["result"] && riotshielddistancetest( placement["origin"] ) && self check_plant_position( placement["origin"], placement["angles"] ) )
|
||||
self doriotshielddeploy( placement["origin"], placement["angles"] );
|
||||
else
|
||||
{
|
||||
placement_hint = 1;
|
||||
@ -394,61 +384,57 @@ watchriotshielddeploy() //checked matches cerberus output
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
placement_hint = 1;
|
||||
}
|
||||
|
||||
if ( placement_hint )
|
||||
{
|
||||
self setriotshieldfailhint();
|
||||
}
|
||||
}
|
||||
|
||||
check_plant_position( origin, angles ) //checked matches cerberus output
|
||||
check_plant_position( origin, angles )
|
||||
{
|
||||
if ( isDefined( level.equipment_safe_to_drop ) )
|
||||
if ( isdefined( level.equipment_safe_to_drop ) )
|
||||
{
|
||||
ret = 1;
|
||||
test_ent = spawn( "script_model", origin );
|
||||
test_ent setmodel( level.deployedshieldmodel[ 0 ] );
|
||||
test_ent setmodel( level.deployedshieldmodel[0] );
|
||||
test_ent.angles = angles;
|
||||
|
||||
if ( !self [[ level.equipment_safe_to_drop ]]( test_ent ) )
|
||||
{
|
||||
ret = 0;
|
||||
}
|
||||
|
||||
test_ent delete();
|
||||
return ret;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
doriotshielddeploy( origin, angles ) //checked matches cerberus output
|
||||
doriotshielddeploy( origin, angles )
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "start_riotshield_deploy" );
|
||||
self notify( "deployed_riotshield" );
|
||||
self maps/mp/zombies/_zm_buildables::track_placed_buildables( level.riotshield_name );
|
||||
if ( isDefined( self.current_equipment ) && self.current_equipment == level.riotshield_name )
|
||||
{
|
||||
self maps/mp/zombies/_zm_equipment::equipment_to_deployed( level.riotshield_name );
|
||||
}
|
||||
self maps\mp\zombies\_zm_buildables::track_placed_buildables( level.riotshield_name );
|
||||
|
||||
if ( isdefined( self.current_equipment ) && self.current_equipment == level.riotshield_name )
|
||||
self maps\mp\zombies\_zm_equipment::equipment_to_deployed( level.riotshield_name );
|
||||
|
||||
zoffset = level.riotshield_placement_zoffset;
|
||||
shield_ent = self spawnriotshieldcover( origin + ( 0, 0, zoffset ), angles );
|
||||
item_ent = deployriotshield( self, shield_ent );
|
||||
primaries = self getweaponslistprimaries();
|
||||
/*
|
||||
/#
|
||||
assert( isDefined( item_ent ) );
|
||||
assert( !isDefined( self.riotshieldretrievetrigger ) );
|
||||
assert( !isDefined( self.riotshieldentity ) );
|
||||
assert( isdefined( item_ent ) );
|
||||
assert( !isdefined( self.riotshieldretrievetrigger ) );
|
||||
assert( !isdefined( self.riotshieldentity ) );
|
||||
#/
|
||||
*/
|
||||
self maps/mp/zombies/_zm_weapons::switch_back_primary_weapon( primaries[ 0 ] );
|
||||
if ( isDefined( level.equipment_planted ) )
|
||||
{
|
||||
self maps\mp\zombies\_zm_weapons::switch_back_primary_weapon( primaries[0] );
|
||||
|
||||
if ( isdefined( level.equipment_planted ) )
|
||||
self [[ level.equipment_planted ]]( shield_ent, level.riotshield_name, self );
|
||||
}
|
||||
if ( isDefined( level.equipment_safe_to_drop ) )
|
||||
|
||||
if ( isdefined( level.equipment_safe_to_drop ) )
|
||||
{
|
||||
if ( !self [[ level.equipment_safe_to_drop ]]( shield_ent ) )
|
||||
{
|
||||
@ -458,6 +444,7 @@ doriotshielddeploy( origin, angles ) //checked matches cerberus output
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
self.riotshieldretrievetrigger = item_ent;
|
||||
self.riotshieldentity = shield_ent;
|
||||
self thread watchdeployedriotshieldents();
|
||||
@ -469,196 +456,178 @@ doriotshielddeploy( origin, angles ) //checked matches cerberus output
|
||||
return shield_ent;
|
||||
}
|
||||
|
||||
riotshielddistancetest( origin ) //checked matches cerberus output
|
||||
riotshielddistancetest( origin )
|
||||
{
|
||||
/*
|
||||
/#
|
||||
assert( isDefined( origin ) );
|
||||
assert( isdefined( origin ) );
|
||||
#/
|
||||
*/
|
||||
min_dist_squared = getDvarFloat( "riotshield_deploy_limit_radius" );
|
||||
min_dist_squared = getdvarfloat( "riotshield_deploy_limit_radius" );
|
||||
min_dist_squared *= min_dist_squared;
|
||||
i = 0;
|
||||
while ( i < level.players.size )
|
||||
|
||||
for ( i = 0; i < level.players.size; i++ )
|
||||
{
|
||||
if ( isDefined( level.players[ i ].riotshieldentity ) )
|
||||
if ( isdefined( level.players[i].riotshieldentity ) )
|
||||
{
|
||||
dist_squared = distancesquared( level.players[ i ].riotshieldentity.origin, origin );
|
||||
dist_squared = distancesquared( level.players[i].riotshieldentity.origin, origin );
|
||||
|
||||
if ( min_dist_squared > dist_squared )
|
||||
{
|
||||
/*
|
||||
/#
|
||||
println( "Shield placement denied! Failed distance check to other riotshields." );
|
||||
#/
|
||||
*/
|
||||
return 0;
|
||||
return false;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 1;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
watchdeployedriotshieldents() //checked matches cerberus output
|
||||
watchdeployedriotshieldents()
|
||||
{
|
||||
/*
|
||||
/#
|
||||
assert( isDefined( self.riotshieldretrievetrigger ) );
|
||||
assert( isDefined( self.riotshieldentity ) );
|
||||
assert( isdefined( self.riotshieldretrievetrigger ) );
|
||||
assert( isdefined( self.riotshieldentity ) );
|
||||
#/
|
||||
*/
|
||||
riotshieldretrievetrigger = self.riotshieldretrievetrigger;
|
||||
riotshieldentity = self.riotshieldentity;
|
||||
self waittill_any( "destroy_riotshield", "disconnect", "alcatraz_shield_zm_taken" );
|
||||
if ( isDefined( self ) )
|
||||
|
||||
if ( isdefined( self ) )
|
||||
{
|
||||
self.shield_placement = 0;
|
||||
self updateriotshieldmodel();
|
||||
}
|
||||
if ( isDefined( riotshieldretrievetrigger ) )
|
||||
{
|
||||
|
||||
if ( isdefined( riotshieldretrievetrigger ) )
|
||||
riotshieldretrievetrigger delete();
|
||||
}
|
||||
if ( isDefined( riotshieldentity ) )
|
||||
{
|
||||
|
||||
if ( isdefined( riotshieldentity ) )
|
||||
riotshieldentity delete();
|
||||
}
|
||||
}
|
||||
|
||||
watchdeployedriotshielddamage() //checked changed to match cerberus output
|
||||
watchdeployedriotshielddamage()
|
||||
{
|
||||
self endon( "death" );
|
||||
damagemax = getDvarInt( "riotshield_deployed_health" );
|
||||
damagemax = getdvarint( "riotshield_deployed_health" );
|
||||
self.damagetaken = 0;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self.maxhealth = 100000;
|
||||
self.health = self.maxhealth;
|
||||
|
||||
self waittill( "damage", damage, attacker, direction, point, type, tagname, modelname, partname, weaponname, idflags );
|
||||
if ( isDefined( level.players_can_damage_riotshields ) && !level.players_can_damage_riotshields )
|
||||
{
|
||||
|
||||
if ( !( isdefined( level.players_can_damage_riotshields ) && level.players_can_damage_riotshields ) )
|
||||
continue;
|
||||
}
|
||||
if ( !isDefined( attacker ) || !isplayer( attacker ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( attacker ) || !isplayer( attacker ) )
|
||||
continue;
|
||||
}
|
||||
/#
|
||||
if ( isDefined( self.owner ) )
|
||||
{
|
||||
assert( isDefined( self.owner.team ) );
|
||||
}
|
||||
assert( isdefined( self.owner ) && isdefined( self.owner.team ) );
|
||||
#/
|
||||
if ( is_encounter() && attacker.team == self.owner.team && attacker != self.owner )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( level.riotshield_damage_callback ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level.riotshield_damage_callback ) )
|
||||
self.owner [[ level.riotshield_damage_callback ]]( damage, 0 );
|
||||
continue;
|
||||
}
|
||||
else if ( type == "MOD_MELEE" )
|
||||
else
|
||||
{
|
||||
damage *= getDvarFloat( "riotshield_melee_damage_scale" );
|
||||
}
|
||||
if ( type == "MOD_MELEE" )
|
||||
damage *= getdvarfloat( "riotshield_melee_damage_scale" );
|
||||
else if ( type == "MOD_PISTOL_BULLET" || type == "MOD_RIFLE_BULLET" )
|
||||
{
|
||||
damage *= getDvarFloat( "riotshield_bullet_damage_scale" );
|
||||
}
|
||||
if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" )
|
||||
{
|
||||
damage *= getDvarFloat( "riotshield_explosive_damage_scale" );
|
||||
break;
|
||||
}
|
||||
damage *= getdvarfloat( "riotshield_bullet_damage_scale" );
|
||||
else if ( type == "MOD_GRENADE" || type == "MOD_GRENADE_SPLASH" || type == "MOD_EXPLOSIVE" || type == "MOD_EXPLOSIVE_SPLASH" || type == "MOD_PROJECTILE" || type == "MOD_PROJECTILE_SPLASH" )
|
||||
damage *= getdvarfloat( "riotshield_explosive_damage_scale" );
|
||||
else if ( type == "MOD_IMPACT" )
|
||||
{
|
||||
damage *= getDvarFloat( "riotshield_projectile_damage_scale" );
|
||||
}
|
||||
damage *= getdvarfloat( "riotshield_projectile_damage_scale" );
|
||||
|
||||
self.damagetaken += damage;
|
||||
|
||||
if ( self.damagetaken >= damagemax )
|
||||
{
|
||||
self damagethendestroyriotshield();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
damagethendestroyriotshield() //checked matches cerberus output
|
||||
damagethendestroyriotshield()
|
||||
{
|
||||
self endon( "death" );
|
||||
self.owner.riotshieldretrievetrigger delete();
|
||||
self notsolid();
|
||||
self setclientflag( 14 );
|
||||
wait getDvarFloat( "riotshield_destroyed_cleanup_time" );
|
||||
wait( getdvarfloat( "riotshield_destroyed_cleanup_time" ) );
|
||||
self.owner notify( "destroy_riotshield" );
|
||||
}
|
||||
|
||||
deleteshieldondamage( shield_ent ) //checked matches cerberus output
|
||||
deleteshieldondamage( shield_ent )
|
||||
{
|
||||
shield_ent waittill( "death" );
|
||||
|
||||
self notify( "destroy_riotshield" );
|
||||
}
|
||||
|
||||
deleteshieldmodelonweaponpickup( shield_trigger ) //checked matches cerberus output
|
||||
deleteshieldmodelonweaponpickup( shield_trigger )
|
||||
{
|
||||
shield_trigger waittill( "trigger", player );
|
||||
self maps/mp/zombies/_zm_equipment::equipment_from_deployed( level.riotshield_name );
|
||||
|
||||
self maps\mp\zombies\_zm_equipment::equipment_from_deployed( level.riotshield_name );
|
||||
self notify( "destroy_riotshield" );
|
||||
|
||||
if ( self != player )
|
||||
{
|
||||
if ( isDefined( level.transferriotshield ) )
|
||||
{
|
||||
if ( isdefined( level.transferriotshield ) )
|
||||
[[ level.transferriotshield ]]( self, player );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
watchshieldtriggervisibility( trigger ) //checked partially changed to match cerberus output see compiler_limitations.md No. 2
|
||||
watchshieldtriggervisibility( trigger )
|
||||
{
|
||||
self endon( "death" );
|
||||
trigger endon( "death" );
|
||||
while ( isDefined( trigger ) )
|
||||
|
||||
while ( isdefined( trigger ) )
|
||||
{
|
||||
players = get_players();
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
pickup = 1;
|
||||
if ( !isDefined( player ) )
|
||||
{
|
||||
}
|
||||
else if ( is_true( player.afterlife ) )
|
||||
|
||||
if ( !isdefined( player ) )
|
||||
continue;
|
||||
|
||||
if ( is_true( player.afterlife ) )
|
||||
{
|
||||
trigger setinvisibletoplayer( player );
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( level.cantransferriotshield ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level.cantransferriotshield ) )
|
||||
pickup = [[ level.cantransferriotshield ]]( self, player );
|
||||
}
|
||||
if ( !isDefined( trigger ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( trigger ) )
|
||||
return;
|
||||
}
|
||||
|
||||
if ( pickup )
|
||||
{
|
||||
trigger setvisibletoplayer( player );
|
||||
}
|
||||
else
|
||||
{
|
||||
trigger setinvisibletoplayer( player );
|
||||
}
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
deleteriotshieldonplayerdeath() //checked matches cerberus output
|
||||
deleteriotshieldonplayerdeath()
|
||||
{
|
||||
self.riotshieldentity endon( "death" );
|
||||
|
||||
self waittill( "death" );
|
||||
|
||||
self notify( "destroy_riotshield" );
|
||||
}
|
||||
|
@ -1,10 +1,15 @@
|
||||
#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 )
|
||||
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" );
|
||||
@ -17,9 +22,12 @@ on_spawn( watcher, player )
|
||||
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 ) )
|
||||
|
||||
if ( isdefined( endpos ) )
|
||||
{
|
||||
retrievable_model = spawn( "script_model", endpos );
|
||||
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||
@ -27,47 +35,38 @@ on_spawn( watcher, player )
|
||||
retrievable_model.owner = player;
|
||||
retrievable_model.angles = angles;
|
||||
retrievable_model.name = watcher.weapon;
|
||||
if ( isDefined( prey ) )
|
||||
|
||||
if ( isdefined( prey ) )
|
||||
{
|
||||
if ( isplayer( prey ) && player.team == prey.team )
|
||||
{
|
||||
isfriendly = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isai( prey ) && player.team == prey.team )
|
||||
{
|
||||
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 )
|
||||
else if ( isfriendly )
|
||||
{
|
||||
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
||||
normal = ( 0, 0, 1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
|
||||
|
||||
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" );
|
||||
}
|
||||
player notify( "ballistic_knife_stationary", retrievable_model, normal );
|
||||
else
|
||||
{
|
||||
player notify( "ballistic_knife_stationary" );
|
||||
}
|
||||
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||
|
||||
retrievable_model thread wait_to_show_glowing_model( prey );
|
||||
}
|
||||
}
|
||||
@ -86,52 +85,59 @@ on_spawn_retrieve_trigger( watcher, player )
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( retrievable_model ) )
|
||||
return;
|
||||
}
|
||||
|
||||
trigger_pos = [];
|
||||
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
|
||||
|
||||
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;
|
||||
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 ] );
|
||||
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 ] ) );
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( prey ) )
|
||||
pickup_trigger linkto( prey );
|
||||
}
|
||||
else
|
||||
{
|
||||
pickup_trigger linkto( retrievable_model );
|
||||
}
|
||||
if ( isDefined( level.knife_planted ) )
|
||||
{
|
||||
|
||||
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 );
|
||||
}
|
||||
@ -140,12 +146,13 @@ debug_print( endpos )
|
||||
{
|
||||
/#
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
print3d( endpos, "pickup_trigger" );
|
||||
wait 0,05;
|
||||
#/
|
||||
wait 0.05;
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
||||
@ -153,54 +160,63 @@ watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundo
|
||||
self endon( "death" );
|
||||
self endon( "delete" );
|
||||
level endon( "game_ended" );
|
||||
while ( 1 )
|
||||
max_ammo = weaponmaxammo( weapon ) + 1;
|
||||
autorecover = is_true( level.ballistic_knife_autorecover );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
trigger waittill( "trigger", player );
|
||||
while ( !isalive( player ) )
|
||||
{
|
||||
|
||||
if ( !isalive( player ) )
|
||||
continue;
|
||||
}
|
||||
while ( !player isonground() )
|
||||
{
|
||||
|
||||
if ( !player isonground() && !is_true( trigger.force_pickup ) )
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||
{
|
||||
|
||||
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
|
||||
{
|
||||
|
||||
if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
|
||||
continue;
|
||||
}
|
||||
if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() )
|
||||
{
|
||||
if ( isDefined( playersoundonuse ) )
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( npcsoundonuse ) )
|
||||
player playsound( npcsoundonuse );
|
||||
}
|
||||
|
||||
player thread [[ callback ]]( weapon, model, trigger );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pick_up( weapon, model, trigger )
|
||||
{
|
||||
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;
|
||||
@ -212,27 +228,28 @@ pick_up( weapon, model, trigger )
|
||||
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" );
|
||||
}
|
||||
|
||||
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 ) )
|
||||
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" );
|
||||
self waittill_any( "death_or_disconnect", "zmb_lost_knife" );
|
||||
trigger destroy_ent();
|
||||
model destroy_ent();
|
||||
}
|
||||
@ -241,12 +258,14 @@ drop_knives_to_ground( player )
|
||||
{
|
||||
player endon( "death" );
|
||||
player endon( "zmb_lost_knife" );
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
level waittill( "drop_objects_to_ground", origin, radius );
|
||||
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
|
||||
|
||||
if ( distancesquared( origin, self.origin ) < radius * radius )
|
||||
{
|
||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
||||
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||
self thread update_retrieve_trigger( player );
|
||||
}
|
||||
}
|
||||
@ -256,9 +275,11 @@ 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 physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||
self thread update_retrieve_trigger( player );
|
||||
}
|
||||
|
||||
@ -266,13 +287,16 @@ update_retrieve_trigger( player )
|
||||
{
|
||||
self endon( "death" );
|
||||
player endon( "zmb_lost_knife" );
|
||||
if ( isDefined( level.custom_update_retrieve_trigger ) )
|
||||
|
||||
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.origin = ( self.origin[0], self.origin[1], self.origin[2] + 10 );
|
||||
trigger linkto( self );
|
||||
}
|
||||
|
@ -1,74 +1,75 @@
|
||||
//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" ) )
|
||||
{
|
||||
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" );
|
||||
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();
|
||||
}
|
||||
|
||||
zombie_wait_for_blundersplat_hit() //checked changed to match cerberus output
|
||||
zombie_wait_for_blundersplat_hit()
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
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 ) )
|
||||
if ( !isdefined( self.titus_tagged ) )
|
||||
{
|
||||
a_grenades = getentarray( "grenade", "classname" );
|
||||
if ( !isDefined( a_grenades ) || a_grenades.size <= 0 )
|
||||
{
|
||||
|
||||
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 ( 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 ) )
|
||||
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();
|
||||
}
|
||||
@ -76,13 +77,16 @@ zombie_wait_for_blundersplat_hit() //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
wait_for_blundersplat_fired() //checked matches cerberus output
|
||||
wait_for_blundersplat_fired()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "spawned_player" );
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "weapon_fired", str_weapon );
|
||||
|
||||
if ( str_weapon == "blundersplat_zm" )
|
||||
{
|
||||
wait_network_frame();
|
||||
@ -92,17 +96,21 @@ wait_for_blundersplat_fired() //checked matches cerberus output
|
||||
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 ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "weapon_fired", str_weapon );
|
||||
|
||||
if ( str_weapon == "blundersplat_upgraded_zm" )
|
||||
{
|
||||
wait_network_frame();
|
||||
@ -115,42 +123,40 @@ wait_for_blundersplat_upgraded_fired() //checked matches cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
_titus_locate_target( is_not_upgraded ) //checked changed to match cerberus output
|
||||
_titus_locate_target( is_not_upgraded )
|
||||
{
|
||||
if ( !isDefined( 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 );
|
||||
}
|
||||
n_fuse_timer = randomfloatrange( 1.0, 2.5 );
|
||||
else
|
||||
{
|
||||
n_fuse_timer = randomfloatrange( 3, 4 );
|
||||
}
|
||||
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 ) )
|
||||
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 ) ];
|
||||
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();
|
||||
@ -162,15 +168,16 @@ _titus_locate_target( is_not_upgraded ) //checked changed to match cerberus outp
|
||||
}
|
||||
}
|
||||
}
|
||||
vec = anglesToForward( fire_angles );
|
||||
trace_end = fire_origin + ( vec * 20000 );
|
||||
|
||||
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 );
|
||||
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 );
|
||||
@ -178,7 +185,7 @@ _titus_get_spread( n_spread ) //checked matches cerberus output
|
||||
return ( n_x, n_y, n_z );
|
||||
}
|
||||
|
||||
_titus_marked() //checked matches cerberus output
|
||||
_titus_marked()
|
||||
{
|
||||
self endon( "death" );
|
||||
self.titusmarked = 1;
|
||||
@ -186,138 +193,136 @@ _titus_marked() //checked matches cerberus output
|
||||
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" );
|
||||
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 )
|
||||
|
||||
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 ( 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;
|
||||
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" );
|
||||
}
|
||||
|
||||
_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 );
|
||||
}
|
||||
|
||||
_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 ) )
|
||||
{
|
||||
if ( !isdefined( is_not_upgraded ) )
|
||||
is_not_upgraded = 1;
|
||||
}
|
||||
if ( !isDefined( n_fuse_timer ) )
|
||||
{
|
||||
n_fuse_timer = randomfloatrange( 1, 1,5 );
|
||||
}
|
||||
|
||||
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 ) )
|
||||
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 ( 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 );
|
||||
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 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
ground_ent = self getgroundent();
|
||||
if ( isDefined( ground_ent ) && !is_true( ground_ent.classname == "worldspawn" ) )
|
||||
{
|
||||
|
||||
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 maps\mp\animscripts\zm_shared::donotetracks( "blundersplat_stunned_anim" );
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1,29 +1,30 @@
|
||||
#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 ) )
|
||||
{
|
||||
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 ) )
|
||||
|
||||
for ( i = 0; i < trigs.size; i++ )
|
||||
{
|
||||
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;
|
||||
@ -31,35 +32,37 @@ init()
|
||||
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" );
|
||||
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 setcursorhint( "HINT_WEAPON", "claymore_zm" );
|
||||
self endon( "kill_trigger" );
|
||||
if ( !isDefined( self.stub ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self.stub ) )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) )
|
||||
self.stub.claymores_triggered = 0;
|
||||
}
|
||||
|
||||
self.claymores_triggered = self.stub.claymores_triggered;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", who );
|
||||
while ( who in_revive_trigger() )
|
||||
|
||||
if ( who in_revive_trigger() )
|
||||
continue;
|
||||
|
||||
if ( who has_powerup_weapon() )
|
||||
{
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
while ( who has_powerup_weapon() )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
|
||||
if ( is_player_valid( who ) )
|
||||
{
|
||||
if ( who.score >= self.zombie_cost )
|
||||
@ -67,43 +70,41 @@ buy_claymores()
|
||||
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 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 ) )
|
||||
{
|
||||
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 );
|
||||
|
||||
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
|
||||
{
|
||||
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" );
|
||||
who play_sound_on_ent( "no_purchase" );
|
||||
who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -113,31 +114,32 @@ claymore_unitrigger_update_prompt( player )
|
||||
{
|
||||
if ( player is_player_placeable_mine( "claymore_zm" ) )
|
||||
{
|
||||
return 0;
|
||||
self sethintstring( "" );
|
||||
self setcursorhint( "HINT_NOICON" );
|
||||
return false;
|
||||
}
|
||||
return 1;
|
||||
|
||||
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 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
j = 0;
|
||||
while ( j < players.size )
|
||||
for ( j = 0; j < players.size; j++ )
|
||||
{
|
||||
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) )
|
||||
if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < trigs.size )
|
||||
{
|
||||
trigs[ i ] setinvisibletoplayer( players[ j ], 0 );
|
||||
i++;
|
||||
for ( i = 0; i < trigs.size; i++ )
|
||||
trigs[i] setinvisibletoplayer( players[j], 0 );
|
||||
}
|
||||
}
|
||||
j++;
|
||||
}
|
||||
|
||||
wait 1;
|
||||
players = get_players();
|
||||
}
|
||||
@ -146,60 +148,57 @@ set_claymore_visible()
|
||||
claymore_safe_to_plant()
|
||||
{
|
||||
if ( self.owner.claymores.size >= level.claymores_max_per_player )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( isDefined( level.claymore_safe_to_plant ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level.claymore_safe_to_plant ) )
|
||||
return self [[ level.claymore_safe_to_plant ]]();
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
claymore_wait_and_detonate()
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
self detonate( self.owner );
|
||||
}
|
||||
|
||||
claymore_watch()
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
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 ) )
|
||||
{
|
||||
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;
|
||||
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 ) )
|
||||
{
|
||||
if ( !isdefined( self.claymores ) )
|
||||
self.claymores = [];
|
||||
}
|
||||
|
||||
self thread claymore_watch();
|
||||
self giveweapon( "claymore_zm" );
|
||||
self set_player_placeable_mine( "claymore_zm" );
|
||||
@ -209,22 +208,22 @@ claymore_setup()
|
||||
|
||||
adjust_trigger_origin( origin )
|
||||
{
|
||||
origin += vectorScale( ( 0, 0, 1 ), 20 );
|
||||
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 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();
|
||||
@ -238,6 +237,7 @@ pickup_claymores()
|
||||
{
|
||||
clip_ammo = player getweaponammoclip( self.name );
|
||||
clip_max_ammo = weaponclipsize( self.name );
|
||||
|
||||
if ( clip_ammo >= clip_max_ammo )
|
||||
{
|
||||
self destroy_ent();
|
||||
@ -245,15 +245,16 @@ pickup_claymores()
|
||||
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 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 )
|
||||
@ -265,13 +266,15 @@ pickup_claymores_trigger_listener( trigger, player )
|
||||
pickup_claymores_trigger_listener_enable( trigger, player )
|
||||
{
|
||||
self endon( "delete" );
|
||||
while ( 1 )
|
||||
self endon( "death" );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
||||
if ( !isDefined( trigger ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( trigger ) )
|
||||
return;
|
||||
}
|
||||
|
||||
trigger trigger_on();
|
||||
trigger linkto( self );
|
||||
}
|
||||
@ -280,13 +283,15 @@ pickup_claymores_trigger_listener_enable( trigger, player )
|
||||
pickup_claymores_trigger_listener_disable( trigger, player )
|
||||
{
|
||||
self endon( "delete" );
|
||||
while ( 1 )
|
||||
self endon( "death" );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
player waittill( "zmb_disable_claymore_prompt" );
|
||||
if ( !isDefined( trigger ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( trigger ) )
|
||||
return;
|
||||
}
|
||||
|
||||
trigger unlink();
|
||||
trigger trigger_off();
|
||||
}
|
||||
@ -294,14 +299,14 @@ pickup_claymores_trigger_listener_disable( trigger, player )
|
||||
|
||||
shouldaffectweaponobject( object )
|
||||
{
|
||||
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 );
|
||||
pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 );
|
||||
dirtopos = pos - object.origin;
|
||||
objectforward = anglesToForward( object.angles );
|
||||
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;
|
||||
@ -316,44 +321,40 @@ claymore_detonation()
|
||||
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 )
|
||||
self.owner.claymores[self.owner.claymores.size] = self;
|
||||
|
||||
while ( true )
|
||||
{
|
||||
damagearea waittill( "trigger", ent );
|
||||
if ( isDefined( self.owner ) && ent == self.owner )
|
||||
{
|
||||
|
||||
if ( isdefined( self.owner ) && ent == self.owner )
|
||||
continue;
|
||||
}
|
||||
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
|
||||
{
|
||||
|
||||
if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team )
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
||||
{
|
||||
|
||||
if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
||||
continue;
|
||||
}
|
||||
while ( !ent shouldaffectweaponobject( self ) )
|
||||
{
|
||||
|
||||
if ( !ent shouldaffectweaponobject( self ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ent damageconetrace( self.origin, self ) > 0 )
|
||||
{
|
||||
self playsound( "wpn_claymore_alert" );
|
||||
wait 0,4;
|
||||
if ( isDefined( self.owner ) )
|
||||
{
|
||||
wait 0.4;
|
||||
|
||||
if ( isdefined( self.owner ) )
|
||||
self detonate( self.owner );
|
||||
}
|
||||
else
|
||||
{
|
||||
self detonate( undefined );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -362,53 +363,53 @@ claymore_detonation()
|
||||
delete_claymores_on_death( player, ent )
|
||||
{
|
||||
self waittill( "death" );
|
||||
if ( isDefined( player ) )
|
||||
{
|
||||
|
||||
if ( isdefined( player ) )
|
||||
arrayremovevalue( player.claymores, self );
|
||||
}
|
||||
wait 0,05;
|
||||
if ( isDefined( ent ) )
|
||||
{
|
||||
|
||||
wait 0.05;
|
||||
|
||||
if ( isdefined( ent ) )
|
||||
ent delete();
|
||||
}
|
||||
}
|
||||
|
||||
satchel_damage()
|
||||
{
|
||||
self endon( "death" );
|
||||
self setcandamage( 1 );
|
||||
self.health = 100000;
|
||||
self.maxhealth = self.health;
|
||||
attacker = undefined;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "damage", amount, attacker );
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self ) )
|
||||
return;
|
||||
}
|
||||
|
||||
self.health = self.maxhealth;
|
||||
while ( !isplayer( attacker ) )
|
||||
{
|
||||
|
||||
if ( !isplayer( attacker ) )
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( self.owner ) && attacker == self.owner )
|
||||
{
|
||||
|
||||
if ( isdefined( self.owner ) && attacker == self.owner )
|
||||
continue;
|
||||
}
|
||||
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
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 );
|
||||
@ -416,7 +417,7 @@ satchel_damage()
|
||||
|
||||
reset_satchel_explode_this_frame()
|
||||
{
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
level.satchelexplodethisframe = 0;
|
||||
}
|
||||
|
||||
@ -424,69 +425,42 @@ play_claymore_effects()
|
||||
{
|
||||
self endon( "death" );
|
||||
self waittill_not_moving();
|
||||
playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" );
|
||||
playfxontag( level._effect["claymore_laser"], self, "tag_fx" );
|
||||
}
|
||||
|
||||
give_claymores_after_rounds()
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "between_round_over" );
|
||||
while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
|
||||
|
||||
if ( !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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
setup_client_hintelem()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
if ( !isDefined( self.hintelem ) )
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
self.hintelem = newclienthudelem( self );
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 );
|
||||
}
|
||||
|
||||
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( "" );
|
||||
|
||||
show_equipment_hint_text( text );
|
||||
}
|
||||
|
@ -1,19 +1,22 @@
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/animscripts/zm_death;
|
||||
#include maps/mp/zombies/_zm_unitrigger;
|
||||
#include maps/mp/zombies/_zm_weapons;
|
||||
#include maps/mp/zombies/_zm_laststand;
|
||||
#include maps/mp/zombies/_zm_stats;
|
||||
#include maps/mp/gametypes_zm/_weaponobjects;
|
||||
#include maps/mp/zombies/_zm_equipment;
|
||||
#include maps/mp/zombies/_zm_spawner;
|
||||
#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_riotshield_prison;
|
||||
#include maps\mp\zombies\_zm_spawner;
|
||||
#include maps\mp\zombies\_zm_equipment;
|
||||
#include maps\mp\gametypes_zm\_weaponobjects;
|
||||
#include maps\mp\zombies\_zm_stats;
|
||||
#include maps\mp\zombies\_zm_laststand;
|
||||
#include maps\mp\zombies\_zm_weapons;
|
||||
#include maps\mp\zombies\_zm_unitrigger;
|
||||
#include maps\mp\animscripts\zm_death;
|
||||
#include maps\mp\zombies\_zm_audio;
|
||||
|
||||
init()
|
||||
{
|
||||
maps/mp/zombies/_zm_riotshield_prison::init();
|
||||
maps\mp\zombies\_zm_riotshield_prison::init();
|
||||
set_zombie_var( "riotshield_cylinder_radius", 360 );
|
||||
set_zombie_var( "riotshield_fling_range", 90 );
|
||||
set_zombie_var( "riotshield_gib_range", 90 );
|
||||
@ -25,16 +28,16 @@ init()
|
||||
set_zombie_var( "riotshield_knockdown_damage_shield", 15 );
|
||||
level.riotshield_network_choke_count = 0;
|
||||
level.riotshield_gib_refs = [];
|
||||
level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "guts";
|
||||
level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "right_arm";
|
||||
level.riotshield_gib_refs[ level.riotshield_gib_refs.size ] = "left_arm";
|
||||
level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "guts";
|
||||
level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "right_arm";
|
||||
level.riotshield_gib_refs[level.riotshield_gib_refs.size] = "left_arm";
|
||||
level.riotshield_damage_callback = ::player_damage_shield;
|
||||
level.deployed_riotshield_damage_callback = ::deployed_damage_shield;
|
||||
level.transferriotshield = ::transferriotshield;
|
||||
level.cantransferriotshield = ::cantransferriotshield;
|
||||
maps/mp/zombies/_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response );
|
||||
maps/mp/zombies/_zm_equipment::register_equipment( "alcatraz_shield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield );
|
||||
maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" );
|
||||
maps\mp\zombies\_zm_spawner::register_zombie_damage_callback( ::riotshield_zombie_damage_response );
|
||||
maps\mp\zombies\_zm_equipment::register_equipment( "alcatraz_shield_zm", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING", &"ZOMBIE_EQUIP_RIOTSHIELD_HOWTO", "riotshield_zm_icon", "riotshield", ::riotshield_activation_watcher_thread, undefined, ::dropshield, ::pickupshield );
|
||||
maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "riotshield", &"ZOMBIE_EQUIP_RIOTSHIELD_PICKUP_HINT_STRING" );
|
||||
onplayerconnect_callback( ::onplayerconnect );
|
||||
}
|
||||
|
||||
@ -51,9 +54,10 @@ onplayerconnect()
|
||||
dropshield()
|
||||
{
|
||||
self.shield_placement = 0;
|
||||
self maps/mp/zombies/_zm_riotshield_prison::updateriotshieldmodel();
|
||||
item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "t6_wpn_zmb_shield_dlc2_dmg0_world", "alcatraz_shield_zm", self.origin + vectorScale( ( 0, 0, 1 ), 30 ), self.angles );
|
||||
if ( isDefined( item ) )
|
||||
self maps\mp\zombies\_zm_riotshield_prison::updateriotshieldmodel();
|
||||
item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "t6_wpn_zmb_shield_dlc2_dmg0_world", "alcatraz_shield_zm", self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), self.angles );
|
||||
|
||||
if ( isdefined( item ) )
|
||||
{
|
||||
item.shielddamagetaken = self.shielddamagetaken;
|
||||
item.original_owner = self;
|
||||
@ -65,6 +69,7 @@ dropshield()
|
||||
item.requires_pickup = 1;
|
||||
item thread watchtoofriendly( self );
|
||||
}
|
||||
|
||||
self takeweapon( level.riotshield_name );
|
||||
return item;
|
||||
}
|
||||
@ -72,13 +77,13 @@ dropshield()
|
||||
watchtoofriendly( player )
|
||||
{
|
||||
wait 1;
|
||||
if ( isDefined( self ) && isDefined( player ) && distance2dsquared( self.origin, player.origin ) < 36 )
|
||||
|
||||
if ( isdefined( self ) && isdefined( player ) && distance2dsquared( self.origin, player.origin ) < 36 )
|
||||
{
|
||||
if ( isalive( player ) )
|
||||
{
|
||||
player playlocalsound( level.zmb_laugh_alias );
|
||||
}
|
||||
player maps/mp/zombies/_zm_stats::increment_client_stat( "cheat_total", 0 );
|
||||
|
||||
player maps\mp\zombies\_zm_stats::increment_client_stat( "cheat_total", 0 );
|
||||
self deployed_damage_shield( 2000 );
|
||||
}
|
||||
}
|
||||
@ -87,7 +92,7 @@ pickupshield( item )
|
||||
{
|
||||
item.owner = self;
|
||||
damage = item.shielddamagetaken;
|
||||
damagemax = level.zombie_vars[ "riotshield_hit_points" ];
|
||||
damagemax = level.zombie_vars["riotshield_hit_points"];
|
||||
self.shielddamagetaken = damage;
|
||||
self player_set_shield_health( damage, damagemax );
|
||||
}
|
||||
@ -97,49 +102,46 @@ placeshield( origin, angles )
|
||||
if ( self getcurrentweapon() != level.riotshield_name )
|
||||
{
|
||||
self switchtoweapon( level.riotshield_name );
|
||||
|
||||
self waittill( "weapon_change" );
|
||||
}
|
||||
item = self maps/mp/zombies/_zm_riotshield_prison::doriotshielddeploy( origin, angles );
|
||||
if ( isDefined( item ) )
|
||||
|
||||
item = self maps\mp\zombies\_zm_riotshield_prison::doriotshielddeploy( origin, angles );
|
||||
|
||||
if ( isdefined( item ) )
|
||||
{
|
||||
item.origin = self.origin + vectorScale( ( 0, 0, 1 ), 30 );
|
||||
item.origin = self.origin + vectorscale( ( 0, 0, 1 ), 30.0 );
|
||||
item.angles = self.angles;
|
||||
item.owner = self;
|
||||
}
|
||||
|
||||
return item;
|
||||
}
|
||||
|
||||
cantransferriotshield( fromplayer, toplayer )
|
||||
{
|
||||
if ( isDefined( toplayer.screecher_weapon ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( isDefined( toplayer.is_drinking ) && toplayer.is_drinking > 0 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( toplayer maps/mp/zombies/_zm_laststand::player_is_in_laststand() || toplayer in_revive_trigger() )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( isdefined( toplayer.screecher_weapon ) )
|
||||
return false;
|
||||
|
||||
if ( isdefined( toplayer.is_drinking ) && toplayer.is_drinking > 0 )
|
||||
return false;
|
||||
|
||||
if ( toplayer maps\mp\zombies\_zm_laststand::player_is_in_laststand() || toplayer in_revive_trigger() )
|
||||
return false;
|
||||
|
||||
if ( toplayer isthrowinggrenade() )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return false;
|
||||
|
||||
if ( fromplayer == toplayer )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return true;
|
||||
|
||||
if ( toplayer is_player_equipment( level.riotshield_name ) && toplayer.shield_placement != 3 )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return false;
|
||||
|
||||
if ( fromplayer.session_team != toplayer.session_team )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
transferriotshield( fromplayer, toplayer )
|
||||
@ -150,19 +152,21 @@ transferriotshield( fromplayer, toplayer )
|
||||
toplayer.shielddamagetaken = damage;
|
||||
toplayer.shield_placement = 3;
|
||||
toplayer.shield_damage_level = 0;
|
||||
toplayer maps/mp/zombies/_zm_equipment::equipment_give( "alcatraz_shield_zm" );
|
||||
toplayer maps\mp\zombies\_zm_equipment::equipment_give( "alcatraz_shield_zm" );
|
||||
toplayer switchtoweapon( "alcatraz_shield_zm" );
|
||||
damagemax = level.zombie_vars[ "riotshield_hit_points" ];
|
||||
damagemax = level.zombie_vars["riotshield_hit_points"];
|
||||
toplayer player_set_shield_health( damage, damagemax );
|
||||
}
|
||||
|
||||
player_take_riotshield()
|
||||
{
|
||||
self notify( "destroy_riotshield" );
|
||||
|
||||
if ( self getcurrentweapon() == "alcatraz_shield_zm" )
|
||||
{
|
||||
new_primary = "";
|
||||
if ( isDefined( self.laststand ) && self.laststand )
|
||||
|
||||
if ( isdefined( self.laststand ) && self.laststand )
|
||||
{
|
||||
new_primary = self.laststandpistol;
|
||||
self giveweapon( new_primary );
|
||||
@ -170,31 +174,31 @@ player_take_riotshield()
|
||||
else
|
||||
{
|
||||
primaryweapons = self getweaponslistprimaries();
|
||||
i = 0;
|
||||
while ( i < primaryweapons.size )
|
||||
|
||||
for ( i = 0; i < primaryweapons.size; i++ )
|
||||
{
|
||||
if ( primaryweapons[ i ] != "alcatraz_shield_zm" )
|
||||
if ( primaryweapons[i] != "alcatraz_shield_zm" )
|
||||
{
|
||||
new_primary = primaryweapons[ i ];
|
||||
new_primary = primaryweapons[i];
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
if ( new_primary == "" )
|
||||
{
|
||||
self maps/mp/zombies/_zm_weapons::give_fallback_weapon();
|
||||
self maps\mp\zombies\_zm_weapons::give_fallback_weapon();
|
||||
new_primary = "zombie_fists_zm";
|
||||
}
|
||||
}
|
||||
|
||||
self switchtoweaponimmediate( new_primary );
|
||||
self playsound( "wpn_riotshield_zm_destroy" );
|
||||
|
||||
self waittill( "weapon_change" );
|
||||
}
|
||||
self maps/mp/zombies/_zm_riotshield_prison::removeriotshield();
|
||||
self maps/mp/zombies/_zm_equipment::equipment_take( "alcatraz_shield_zm" );
|
||||
|
||||
self maps\mp\zombies\_zm_riotshield_prison::removeriotshield();
|
||||
self maps\mp\zombies\_zm_equipment::equipment_take( "alcatraz_shield_zm" );
|
||||
self.hasriotshield = 0;
|
||||
self.hasriotshieldequipped = 0;
|
||||
}
|
||||
@ -202,9 +206,11 @@ player_take_riotshield()
|
||||
player_watch_laststand()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "entering_last_stand" );
|
||||
|
||||
if ( self getcurrentweapon() == "alcatraz_shield_zm" )
|
||||
{
|
||||
new_primary = self.laststandpistol;
|
||||
@ -219,7 +225,7 @@ player_init_shield_health()
|
||||
retval = self.shielddamagetaken > 0;
|
||||
self.shielddamagetaken = 0;
|
||||
self.shield_damage_level = 0;
|
||||
self maps/mp/zombies/_zm_riotshield_prison::updateriotshieldmodel();
|
||||
self maps\mp\zombies\_zm_riotshield_prison::updateriotshieldmodel();
|
||||
return retval;
|
||||
}
|
||||
|
||||
@ -228,75 +234,65 @@ player_init_shield_location()
|
||||
self.hasriotshield = 1;
|
||||
self.hasriotshieldequipped = 0;
|
||||
self.shield_placement = 2;
|
||||
self maps/mp/zombies/_zm_riotshield_prison::updateriotshieldmodel();
|
||||
self maps\mp\zombies\_zm_riotshield_prison::updateriotshieldmodel();
|
||||
}
|
||||
|
||||
player_set_shield_health( damage, max_damage )
|
||||
{
|
||||
shieldhealth = int( ( 100 * ( max_damage - damage ) ) / max_damage );
|
||||
shieldhealth = int( 100 * ( max_damage - damage ) / max_damage );
|
||||
|
||||
if ( shieldhealth >= 50 )
|
||||
{
|
||||
self.shield_damage_level = 0;
|
||||
}
|
||||
else if ( shieldhealth >= 25 )
|
||||
{
|
||||
self.shield_damage_level = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.shield_damage_level = 3;
|
||||
}
|
||||
self maps/mp/zombies/_zm_riotshield_prison::updateriotshieldmodel();
|
||||
|
||||
self maps\mp\zombies\_zm_riotshield_prison::updateriotshieldmodel();
|
||||
}
|
||||
|
||||
deployed_set_shield_health( damage, max_damage )
|
||||
{
|
||||
shieldhealth = int( ( 100 * ( max_damage - damage ) ) / max_damage );
|
||||
shieldhealth = int( 100 * ( max_damage - damage ) / max_damage );
|
||||
|
||||
if ( shieldhealth >= 50 )
|
||||
{
|
||||
self.shield_damage_level = 0;
|
||||
}
|
||||
else if ( shieldhealth >= 25 )
|
||||
{
|
||||
self.shield_damage_level = 2;
|
||||
}
|
||||
else
|
||||
{
|
||||
self.shield_damage_level = 3;
|
||||
}
|
||||
self maps/mp/zombies/_zm_riotshield_prison::updatestandaloneriotshieldmodel();
|
||||
|
||||
self maps\mp\zombies\_zm_riotshield_prison::updatestandaloneriotshieldmodel();
|
||||
}
|
||||
|
||||
player_damage_shield( idamage, bheld )
|
||||
{
|
||||
damagemax = level.zombie_vars[ "riotshield_hit_points" ];
|
||||
if ( !isDefined( self.shielddamagetaken ) )
|
||||
{
|
||||
damagemax = level.zombie_vars["riotshield_hit_points"];
|
||||
|
||||
if ( !isdefined( self.shielddamagetaken ) )
|
||||
self.shielddamagetaken = 0;
|
||||
}
|
||||
|
||||
self.shielddamagetaken += idamage;
|
||||
|
||||
if ( self.shielddamagetaken >= damagemax )
|
||||
{
|
||||
if ( bheld || !isDefined( self.shield_ent ) )
|
||||
if ( bheld || !isdefined( self.shield_ent ) )
|
||||
{
|
||||
self playrumbleonentity( "damage_heavy" );
|
||||
earthquake( 1, 0,75, self.origin, 100 );
|
||||
earthquake( 1.0, 0.75, self.origin, 100 );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( self.shield_ent ) )
|
||||
else if ( isdefined( self.shield_ent ) )
|
||||
{
|
||||
if ( is_true( self.shield_ent.destroy_begun ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
self.shield_ent.destroy_begun = 1;
|
||||
shield_origin = self.shield_ent.origin;
|
||||
level thread maps/mp/zombies/_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx );
|
||||
level thread maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx );
|
||||
wait 1;
|
||||
playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin );
|
||||
}
|
||||
}
|
||||
|
||||
self thread player_take_riotshield();
|
||||
}
|
||||
else
|
||||
@ -304,8 +300,9 @@ player_damage_shield( idamage, bheld )
|
||||
if ( bheld )
|
||||
{
|
||||
self playrumbleonentity( "damage_light" );
|
||||
earthquake( 0,5, 0,5, self.origin, 100 );
|
||||
earthquake( 0.5, 0.5, self.origin, 100 );
|
||||
}
|
||||
|
||||
self player_set_shield_health( self.shielddamagetaken, damagemax );
|
||||
self playsound( "fly_riotshield_zm_impact_zombies" );
|
||||
}
|
||||
@ -313,31 +310,29 @@ player_damage_shield( idamage, bheld )
|
||||
|
||||
deployed_damage_shield( idamage )
|
||||
{
|
||||
damagemax = level.zombie_vars[ "riotshield_hit_points" ];
|
||||
if ( !isDefined( self.shielddamagetaken ) )
|
||||
{
|
||||
damagemax = level.zombie_vars["riotshield_hit_points"];
|
||||
|
||||
if ( !isdefined( self.shielddamagetaken ) )
|
||||
self.shielddamagetaken = 0;
|
||||
}
|
||||
|
||||
self.shielddamagetaken += idamage;
|
||||
|
||||
if ( self.shielddamagetaken >= damagemax )
|
||||
{
|
||||
shield_origin = self.origin;
|
||||
if ( isDefined( self.stub ) )
|
||||
{
|
||||
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.stub );
|
||||
}
|
||||
if ( isDefined( self.original_owner ) )
|
||||
{
|
||||
self.original_owner maps/mp/zombies/_zm_equipment::equipment_take( "alcatraz_shield_zm" );
|
||||
}
|
||||
maps/mp/zombies/_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx );
|
||||
|
||||
if ( isdefined( self.stub ) )
|
||||
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.stub );
|
||||
|
||||
if ( isdefined( self.original_owner ) )
|
||||
self.original_owner maps\mp\zombies\_zm_equipment::equipment_take( "alcatraz_shield_zm" );
|
||||
|
||||
maps\mp\zombies\_zm_equipment::equipment_disappear_fx( shield_origin, level._riotshield_dissapear_fx );
|
||||
playsoundatposition( "wpn_riotshield_zm_destroy", shield_origin );
|
||||
self_delete();
|
||||
}
|
||||
else
|
||||
{
|
||||
self deployed_set_shield_health( self.shielddamagetaken, damagemax );
|
||||
}
|
||||
}
|
||||
|
||||
riotshield_activation_watcher_thread()
|
||||
@ -345,10 +340,9 @@ riotshield_activation_watcher_thread()
|
||||
self endon( "zombified" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "alcatraz_shield_zm_taken" );
|
||||
while ( 1 )
|
||||
{
|
||||
|
||||
while ( true )
|
||||
self waittill_either( "alcatraz_shield_zm_activate", "alcatraz_shield_zm_deactivate" );
|
||||
}
|
||||
}
|
||||
|
||||
watchriotshielduse()
|
||||
@ -356,59 +350,60 @@ watchriotshielduse()
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
self.shielddamagetaken = 0;
|
||||
self thread maps/mp/zombies/_zm_riotshield_prison::trackriotshield();
|
||||
self thread maps/mp/zombies/_zm_riotshield_prison::trackequipmentchange();
|
||||
self thread maps/mp/zombies/_zm_riotshield_prison::watchshieldlaststand();
|
||||
self thread maps\mp\zombies\_zm_riotshield_prison::trackriotshield();
|
||||
self thread maps\mp\zombies\_zm_riotshield_prison::trackequipmentchange();
|
||||
self thread maps\mp\zombies\_zm_riotshield_prison::watchshieldlaststand();
|
||||
self thread trackstuckzombies();
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "raise_riotshield" );
|
||||
self thread maps/mp/zombies/_zm_riotshield_prison::startriotshielddeploy();
|
||||
|
||||
self thread maps\mp\zombies\_zm_riotshield_prison::startriotshielddeploy();
|
||||
}
|
||||
}
|
||||
|
||||
watchriotshieldmelee()
|
||||
{
|
||||
for ( ;; )
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "weapon_melee", weapon );
|
||||
|
||||
if ( weapon == level.riotshield_name )
|
||||
{
|
||||
self riotshield_melee();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
is_riotshield_damage( mod, player, amount )
|
||||
{
|
||||
if ( mod == "MOD_MELEE" && player hasweapon( level.riotshield_name ) && amount < 10 )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
riotshield_damage( amount )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
riotshield_fling_zombie( player, fling_vec, index )
|
||||
{
|
||||
if ( !isDefined( self ) || !isalive( self ) )
|
||||
{
|
||||
if ( !isdefined( self ) || !isalive( self ) )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.ignore_riotshield ) && self.ignore_riotshield )
|
||||
{
|
||||
|
||||
if ( isdefined( self.ignore_riotshield ) && self.ignore_riotshield )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.riotshield_fling_func ) )
|
||||
|
||||
if ( isdefined( self.riotshield_fling_func ) )
|
||||
{
|
||||
self [[ self.riotshield_fling_func ]]( player );
|
||||
return;
|
||||
}
|
||||
|
||||
damage = 2500;
|
||||
self dodamage( damage, player.origin, player, player, "", "MOD_IMPACT" );
|
||||
|
||||
if ( self.health < 1 )
|
||||
{
|
||||
self.riotshield_death = 1;
|
||||
@ -419,18 +414,18 @@ riotshield_fling_zombie( player, fling_vec, index )
|
||||
|
||||
zombie_knockdown( player, gib )
|
||||
{
|
||||
damage = level.zombie_vars[ "riotshield_knockdown_damage" ];
|
||||
if ( isDefined( level.override_riotshield_damage_func ) )
|
||||
{
|
||||
damage = level.zombie_vars["riotshield_knockdown_damage"];
|
||||
|
||||
if ( isdefined( level.override_riotshield_damage_func ) )
|
||||
self [[ level.override_riotshield_damage_func ]]( player, gib );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( gib )
|
||||
{
|
||||
self.a.gib_ref = random( level.riotshield_gib_refs );
|
||||
self thread maps/mp/animscripts/zm_death::do_gib();
|
||||
self thread maps\mp\animscripts\zm_death::do_gib();
|
||||
}
|
||||
|
||||
self dodamage( damage, player.origin, player );
|
||||
}
|
||||
}
|
||||
@ -440,114 +435,106 @@ riotshield_knockdown_zombie( player, gib )
|
||||
self endon( "death" );
|
||||
playsoundatposition( "vox_riotshield_forcehit", self.origin );
|
||||
playsoundatposition( "wpn_riotshield_proj_impact", self.origin );
|
||||
if ( !isDefined( self ) || !isalive( self ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self ) || !isalive( self ) )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.riotshield_knockdown_func ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.riotshield_knockdown_func ) )
|
||||
self [[ self.riotshield_knockdown_func ]]( player, gib );
|
||||
}
|
||||
else
|
||||
{
|
||||
self zombie_knockdown( player, gib );
|
||||
}
|
||||
self dodamage( level.zombie_vars[ "riotshield_knockdown_damage" ], player.origin, player );
|
||||
|
||||
self dodamage( level.zombie_vars["riotshield_knockdown_damage"], player.origin, player );
|
||||
self playsound( "fly_riotshield_forcehit" );
|
||||
}
|
||||
|
||||
riotshield_get_enemies_in_range()
|
||||
{
|
||||
view_pos = self geteye();
|
||||
zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, 2 * level.zombie_vars[ "riotshield_knockdown_range" ] );
|
||||
if ( !isDefined( zombies ) )
|
||||
{
|
||||
zombies = get_array_of_closest( view_pos, get_round_enemy_array(), undefined, undefined, 2 * level.zombie_vars["riotshield_knockdown_range"] );
|
||||
|
||||
if ( !isdefined( zombies ) )
|
||||
return;
|
||||
}
|
||||
knockdown_range_squared = level.zombie_vars[ "riotshield_knockdown_range" ] * level.zombie_vars[ "riotshield_knockdown_range" ];
|
||||
gib_range_squared = level.zombie_vars[ "riotshield_gib_range" ] * level.zombie_vars[ "riotshield_gib_range" ];
|
||||
fling_range_squared = level.zombie_vars[ "riotshield_fling_range" ] * level.zombie_vars[ "riotshield_fling_range" ];
|
||||
cylinder_radius_squared = level.zombie_vars[ "riotshield_cylinder_radius" ] * level.zombie_vars[ "riotshield_cylinder_radius" ];
|
||||
|
||||
knockdown_range_squared = level.zombie_vars["riotshield_knockdown_range"] * level.zombie_vars["riotshield_knockdown_range"];
|
||||
gib_range_squared = level.zombie_vars["riotshield_gib_range"] * level.zombie_vars["riotshield_gib_range"];
|
||||
fling_range_squared = level.zombie_vars["riotshield_fling_range"] * level.zombie_vars["riotshield_fling_range"];
|
||||
cylinder_radius_squared = level.zombie_vars["riotshield_cylinder_radius"] * level.zombie_vars["riotshield_cylinder_radius"];
|
||||
forward_view_angles = self getweaponforwarddir();
|
||||
end_pos = view_pos + vectorScale( forward_view_angles, level.zombie_vars[ "riotshield_knockdown_range" ] );
|
||||
end_pos = view_pos + vectorscale( forward_view_angles, level.zombie_vars["riotshield_knockdown_range"] );
|
||||
/#
|
||||
if ( getDvarInt( #"BF480CE9" ) == 2 )
|
||||
if ( 2 == getdvarint( _hash_BF480CE9 ) )
|
||||
{
|
||||
near_circle_pos = view_pos + vectorScale( forward_view_angles, 2 );
|
||||
circle( near_circle_pos, level.zombie_vars[ "riotshield_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 );
|
||||
near_circle_pos = view_pos + vectorscale( forward_view_angles, 2 );
|
||||
circle( near_circle_pos, level.zombie_vars["riotshield_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 );
|
||||
line( near_circle_pos, end_pos, ( 0, 0, 1 ), 1, 0, 100 );
|
||||
circle( end_pos, level.zombie_vars[ "riotshield_cylinder_radius" ], ( 0, 0, 1 ), 0, 0, 100 );
|
||||
circle( end_pos, level.zombie_vars["riotshield_cylinder_radius"], ( 1, 0, 0 ), 0, 0, 100 );
|
||||
}
|
||||
#/
|
||||
}
|
||||
i = 0;
|
||||
while ( i < zombies.size )
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
if ( !isDefined( zombies[ i ] ) || !isalive( zombies[ i ] ) )
|
||||
{
|
||||
i++;
|
||||
if ( !isdefined( zombies[i] ) || !isalive( zombies[i] ) )
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
test_origin = zombies[ i ] getcentroid();
|
||||
|
||||
test_origin = zombies[i] getcentroid();
|
||||
test_range_squared = distancesquared( view_pos, test_origin );
|
||||
|
||||
if ( test_range_squared > knockdown_range_squared )
|
||||
{
|
||||
zombies[ i ] riotshield_debug_print( "range", ( 0, 0, 1 ) );
|
||||
zombies[i] riotshield_debug_print( "range", ( 1, 0, 0 ) );
|
||||
return;
|
||||
}
|
||||
|
||||
normal = vectornormalize( test_origin - view_pos );
|
||||
dot = vectordot( forward_view_angles, normal );
|
||||
if ( dot <= 0 )
|
||||
|
||||
if ( 0 > dot )
|
||||
{
|
||||
zombies[ i ] riotshield_debug_print( "dot", ( 0, 0, 1 ) );
|
||||
i++;
|
||||
zombies[i] riotshield_debug_print( "dot", ( 1, 0, 0 ) );
|
||||
continue;
|
||||
}
|
||||
else radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
|
||||
|
||||
radial_origin = pointonsegmentnearesttopoint( view_pos, end_pos, test_origin );
|
||||
|
||||
if ( distancesquared( test_origin, radial_origin ) > cylinder_radius_squared )
|
||||
{
|
||||
zombies[ i ] riotshield_debug_print( "cylinder", ( 0, 0, 1 ) );
|
||||
i++;
|
||||
zombies[i] riotshield_debug_print( "cylinder", ( 1, 0, 0 ) );
|
||||
continue;
|
||||
}
|
||||
else if ( zombies[ i ] damageconetrace( view_pos, self ) == 0 )
|
||||
|
||||
if ( 0 == zombies[i] damageconetrace( view_pos, self ) )
|
||||
{
|
||||
zombies[ i ] riotshield_debug_print( "cone", ( 0, 0, 1 ) );
|
||||
i++;
|
||||
zombies[i] riotshield_debug_print( "cone", ( 1, 0, 0 ) );
|
||||
continue;
|
||||
}
|
||||
else if ( test_range_squared < fling_range_squared )
|
||||
|
||||
if ( test_range_squared < fling_range_squared )
|
||||
{
|
||||
level.riotshield_fling_enemies[ level.riotshield_fling_enemies.size ] = zombies[ i ];
|
||||
level.riotshield_fling_enemies[level.riotshield_fling_enemies.size] = zombies[i];
|
||||
dist_mult = ( fling_range_squared - test_range_squared ) / fling_range_squared;
|
||||
fling_vec = vectornormalize( test_origin - view_pos );
|
||||
if ( test_range_squared >= 5000 )
|
||||
{
|
||||
|
||||
if ( 5000 < test_range_squared )
|
||||
fling_vec += vectornormalize( test_origin - radial_origin );
|
||||
}
|
||||
fling_vec = ( fling_vec[ 0 ], fling_vec[ 1 ], abs( fling_vec[ 2 ] ) );
|
||||
fling_vec = vectorScale( fling_vec, 100 + ( 100 * dist_mult ) );
|
||||
level.riotshield_fling_vecs[ level.riotshield_fling_vecs.size ] = fling_vec;
|
||||
zombies[ i ] riotshield_debug_print( "fling", ( 0, 0, 1 ) );
|
||||
i++;
|
||||
|
||||
fling_vec = ( fling_vec[0], fling_vec[1], abs( fling_vec[2] ) );
|
||||
fling_vec = vectorscale( fling_vec, 100 + 100 * dist_mult );
|
||||
level.riotshield_fling_vecs[level.riotshield_fling_vecs.size] = fling_vec;
|
||||
zombies[i] riotshield_debug_print( "fling", ( 0, 1, 0 ) );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
level.riotshield_knockdown_enemies[ level.riotshield_knockdown_enemies.size ] = zombies[ i ];
|
||||
level.riotshield_knockdown_gib[ level.riotshield_knockdown_gib.size ] = 0;
|
||||
zombies[ i ] riotshield_debug_print( "knockdown", ( 0, 0, 1 ) );
|
||||
}
|
||||
}
|
||||
i++;
|
||||
|
||||
level.riotshield_knockdown_enemies[level.riotshield_knockdown_enemies.size] = zombies[i];
|
||||
level.riotshield_knockdown_gib[level.riotshield_knockdown_gib.size] = 0;
|
||||
zombies[i] riotshield_debug_print( "knockdown", ( 1, 1, 0 ) );
|
||||
}
|
||||
}
|
||||
|
||||
riotshield_network_choke()
|
||||
{
|
||||
level.riotshield_network_choke_count++;
|
||||
if ( level.riotshield_network_choke_count % 10 )
|
||||
|
||||
if ( !( level.riotshield_network_choke_count % 10 ) )
|
||||
{
|
||||
wait_network_frame();
|
||||
wait_network_frame();
|
||||
@ -557,57 +544,57 @@ riotshield_network_choke()
|
||||
|
||||
riotshield_melee()
|
||||
{
|
||||
if ( !isDefined( level.riotshield_knockdown_enemies ) )
|
||||
if ( !isdefined( level.riotshield_knockdown_enemies ) )
|
||||
{
|
||||
level.riotshield_knockdown_enemies = [];
|
||||
level.riotshield_knockdown_gib = [];
|
||||
level.riotshield_fling_enemies = [];
|
||||
level.riotshield_fling_vecs = [];
|
||||
}
|
||||
|
||||
self riotshield_get_enemies_in_range();
|
||||
shield_damage = 0;
|
||||
level.riotshield_network_choke_count = 0;
|
||||
i = 0;
|
||||
while ( i < level.riotshield_fling_enemies.size )
|
||||
|
||||
for ( i = 0; i < level.riotshield_fling_enemies.size; i++ )
|
||||
{
|
||||
riotshield_network_choke();
|
||||
if ( isDefined( level.riotshield_fling_enemies[ i ] ) )
|
||||
|
||||
if ( isdefined( level.riotshield_fling_enemies[i] ) )
|
||||
{
|
||||
level.riotshield_fling_enemies[ i ] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[ i ], i );
|
||||
shield_damage += level.zombie_vars[ "riotshield_fling_damage_shield" ];
|
||||
level.riotshield_fling_enemies[i] thread riotshield_fling_zombie( self, level.riotshield_fling_vecs[i], i );
|
||||
shield_damage += level.zombie_vars["riotshield_fling_damage_shield"];
|
||||
}
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level.riotshield_knockdown_enemies.size )
|
||||
|
||||
for ( i = 0; i < level.riotshield_knockdown_enemies.size; i++ )
|
||||
{
|
||||
riotshield_network_choke();
|
||||
level.riotshield_knockdown_enemies[ i ] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[ i ] );
|
||||
shield_damage += level.zombie_vars[ "riotshield_knockdown_damage_shield" ];
|
||||
i++;
|
||||
level.riotshield_knockdown_enemies[i] thread riotshield_knockdown_zombie( self, level.riotshield_knockdown_gib[i] );
|
||||
shield_damage += level.zombie_vars["riotshield_knockdown_damage_shield"];
|
||||
}
|
||||
|
||||
level.riotshield_knockdown_enemies = [];
|
||||
level.riotshield_knockdown_gib = [];
|
||||
level.riotshield_fling_enemies = [];
|
||||
level.riotshield_fling_vecs = [];
|
||||
|
||||
if ( shield_damage )
|
||||
{
|
||||
self player_damage_shield( shield_damage, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
trackstuckzombies()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "deployed_riotshield" );
|
||||
if ( isDefined( self.riotshieldentity ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.riotshieldentity ) )
|
||||
self thread watchstuckzombies();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
attack_shield( shield )
|
||||
@ -617,38 +604,36 @@ attack_shield( shield )
|
||||
shield.owner endon( "disconnect" );
|
||||
shield.owner endon( "start_riotshield_deploy" );
|
||||
shield.owner endon( "destroy_riotshield" );
|
||||
if ( isDefined( self.doing_shield_attack ) && self.doing_shield_attack )
|
||||
{
|
||||
|
||||
if ( isdefined( self.doing_shield_attack ) && self.doing_shield_attack )
|
||||
return 0;
|
||||
}
|
||||
|
||||
self.old_origin = self.origin;
|
||||
if ( getDvar( "zombie_shield_attack_freq" ) == "" )
|
||||
{
|
||||
|
||||
if ( getdvar( _hash_B253DFE7 ) == "" )
|
||||
setdvar( "zombie_shield_attack_freq", "15" );
|
||||
}
|
||||
freq = getDvarInt( "zombie_shield_attack_freq" );
|
||||
|
||||
freq = getdvarint( _hash_B253DFE7 );
|
||||
self.doing_shield_attack = 1;
|
||||
self.enemyoverride[ 0 ] = shield.origin;
|
||||
self.enemyoverride[ 1 ] = shield;
|
||||
wait ( randomint( 100 ) / 100 );
|
||||
self thread maps/mp/zombies/_zm_audio::do_zombies_playvocals( "attack", self.animname );
|
||||
self.enemyoverride[0] = shield.origin;
|
||||
self.enemyoverride[1] = shield;
|
||||
wait( randomint( 100 ) / 100.0 );
|
||||
self thread maps\mp\zombies\_zm_audio::do_zombies_playvocals( "attack", self.animname );
|
||||
attackanim = "zm_riotshield_melee";
|
||||
|
||||
if ( !self.has_legs )
|
||||
{
|
||||
attackanim += "_crawl";
|
||||
}
|
||||
|
||||
self orientmode( "face point", shield.origin );
|
||||
self animscripted( self.origin, flat_angle( vectorToAngle( shield.origin - self.origin ) ), attackanim );
|
||||
if ( isDefined( shield.owner.player_shield_apply_damage ) )
|
||||
{
|
||||
self animscripted( self.origin, flat_angle( vectortoangles( shield.origin - self.origin ) ), attackanim );
|
||||
|
||||
if ( isdefined( shield.owner.player_shield_apply_damage ) )
|
||||
shield.owner [[ shield.owner.player_shield_apply_damage ]]( 100, 0 );
|
||||
}
|
||||
else
|
||||
{
|
||||
shield.owner player_damage_shield( 100, 0 );
|
||||
}
|
||||
|
||||
self thread attack_shield_stop( shield );
|
||||
wait ( randomint( 100 ) / 100 );
|
||||
wait( randomint( 100 ) / 100.0 );
|
||||
self.doing_shield_attack = 0;
|
||||
self orientmode( "face default" );
|
||||
}
|
||||
@ -658,15 +643,18 @@ attack_shield_stop( shield )
|
||||
self notify( "attack_shield_stop" );
|
||||
self endon( "attack_shield_stop" );
|
||||
self endon( "death" );
|
||||
|
||||
shield waittill( "death" );
|
||||
|
||||
self stopanimscripted();
|
||||
if ( isDefined( self.doing_shield_attack ) && self.doing_shield_attack )
|
||||
|
||||
if ( isdefined( self.doing_shield_attack ) && self.doing_shield_attack )
|
||||
{
|
||||
breachanim = "zm_riotshield_breakthrough";
|
||||
|
||||
if ( !self.has_legs )
|
||||
{
|
||||
breachanim += "_crawl";
|
||||
}
|
||||
|
||||
self animscripted( self.origin, flat_angle( self.angles ), breachanim );
|
||||
}
|
||||
}
|
||||
@ -674,18 +662,17 @@ attack_shield_stop( shield )
|
||||
window_notetracks( msg, player )
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( msg, notetrack );
|
||||
|
||||
if ( notetrack == "end" )
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
if ( notetrack == "fire" )
|
||||
{
|
||||
player player_damage_shield( 100, 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
watchstuckzombies()
|
||||
@ -696,31 +683,30 @@ watchstuckzombies()
|
||||
self endon( "destroy_riotshield" );
|
||||
self endon( "deployed_riotshield" );
|
||||
level endon( "intermission" );
|
||||
self.riotshieldentity maps/mp/zombies/_zm_equipment::item_attract_zombies();
|
||||
self.riotshieldentity maps\mp\zombies\_zm_equipment::item_attract_zombies();
|
||||
}
|
||||
|
||||
riotshield_active()
|
||||
{
|
||||
return self maps/mp/zombies/_zm_equipment::is_equipment_active( "alcatraz_shield_zm" );
|
||||
return self maps\mp\zombies\_zm_equipment::is_equipment_active( "alcatraz_shield_zm" );
|
||||
}
|
||||
|
||||
riotshield_debug_print( msg, color )
|
||||
{
|
||||
/#
|
||||
if ( !getDvarInt( #"BF480CE9" ) )
|
||||
{
|
||||
if ( !getdvarint( _hash_BF480CE9 ) )
|
||||
return;
|
||||
}
|
||||
if ( !isDefined( color ) )
|
||||
{
|
||||
color = ( 0, 0, 1 );
|
||||
}
|
||||
print3d( self.origin + vectorScale( ( 0, 0, 1 ), 60 ), msg, color, 1, 1, 40 );
|
||||
|
||||
if ( !isdefined( color ) )
|
||||
color = ( 1, 1, 1 );
|
||||
|
||||
print3d( self.origin + vectorscale( ( 0, 0, 1 ), 60.0 ), msg, color, 1, 1, 40 );
|
||||
#/
|
||||
}
|
||||
|
||||
shield_zombie_attract_func( poi )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
shield_zombie_arrive_func( poi )
|
||||
@ -728,15 +714,16 @@ shield_zombie_arrive_func( poi )
|
||||
self endon( "death" );
|
||||
self endon( "zombie_acquire_enemy" );
|
||||
self endon( "path_timer_done" );
|
||||
|
||||
self waittill( "goal" );
|
||||
if ( isDefined( poi.owner ) )
|
||||
|
||||
if ( isdefined( poi.owner ) )
|
||||
{
|
||||
poi.owner player_damage_shield( 100, 0 );
|
||||
if ( isDefined( poi.owner.player_shield_apply_damage ) )
|
||||
{
|
||||
|
||||
if ( isdefined( poi.owner.player_shield_apply_damage ) )
|
||||
poi.owner [[ poi.owner.player_shield_apply_damage ]]( 100, 0 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
createriotshieldattractor()
|
||||
@ -751,9 +738,10 @@ riotshield_zombie_damage_response( mod, hit_location, hit_origin, player, amount
|
||||
if ( self is_riotshield_damage( mod, player, amount ) )
|
||||
{
|
||||
self riotshield_damage( amount );
|
||||
return 1;
|
||||
return true;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
watchriotshieldattractor()
|
||||
@ -770,9 +758,11 @@ trackriotshieldattractor()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "deployed_riotshield" );
|
||||
|
||||
self thread watchriotshieldattractor();
|
||||
}
|
||||
}
|
||||
|
@ -1,32 +1,33 @@
|
||||
//checked includes match cerberus output
|
||||
#include maps/mp/zombies/_zm_stats;
|
||||
#include maps/mp/zombies/_zm_score;
|
||||
#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_score;
|
||||
#include maps\mp\zombies\_zm_stats;
|
||||
|
||||
init() //checked matches cerberus output
|
||||
init()
|
||||
{
|
||||
registerclientfield( "toplayer", "tomahawk_in_use", 9000, 2, "int" );
|
||||
registerclientfield( "toplayer", "upgraded_tomahawk_in_use", 9000, 1, "int" );
|
||||
registerclientfield( "scriptmover", "play_tomahawk_fx", 9000, 2, "int" );
|
||||
registerclientfield( "actor", "play_tomahawk_hit_sound", 9000, 1, "int" );
|
||||
onplayerconnect_callback( ::tomahawk_on_player_connect );
|
||||
maps/mp/zombies/_zm_weapons::include_zombie_weapon( "bouncing_tomahawk_zm", 0 );
|
||||
maps/mp/zombies/_zm_weapons::include_zombie_weapon( "upgraded_tomahawk_zm", 0 );
|
||||
maps/mp/zombies/_zm_weapons::include_zombie_weapon( "zombie_tomahawk_flourish", 0 );
|
||||
maps/mp/zombies/_zm_weapons::add_zombie_weapon( "bouncing_tomahawk_zm", "zombie_tomahawk_flourish", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 );
|
||||
maps/mp/zombies/_zm_weapons::add_zombie_weapon( "upgraded_tomahawk_zm", "zombie_tomahawk_flourish", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 );
|
||||
maps\mp\zombies\_zm_weapons::include_zombie_weapon( "bouncing_tomahawk_zm", 0 );
|
||||
maps\mp\zombies\_zm_weapons::include_zombie_weapon( "upgraded_tomahawk_zm", 0 );
|
||||
maps\mp\zombies\_zm_weapons::include_zombie_weapon( "zombie_tomahawk_flourish", 0 );
|
||||
maps\mp\zombies\_zm_weapons::add_zombie_weapon( "bouncing_tomahawk_zm", "zombie_tomahawk_flourish", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 );
|
||||
maps\mp\zombies\_zm_weapons::add_zombie_weapon( "upgraded_tomahawk_zm", "zombie_tomahawk_flourish", &"ZOMBIE_WEAPON_SATCHEL_2000", 2000, "wpck_monkey", "", undefined, 1 );
|
||||
level thread tomahawk_pickup();
|
||||
level.zombie_weapons_no_max_ammo = [];
|
||||
level.zombie_weapons_no_max_ammo[ "bouncing_tomahawk_zm" ] = 1;
|
||||
level.zombie_weapons_no_max_ammo[ "upgraded_tomahawk_zm" ] = 1;
|
||||
level.zombie_weapons_no_max_ammo["bouncing_tomahawk_zm"] = 1;
|
||||
level.zombie_weapons_no_max_ammo["upgraded_tomahawk_zm"] = 1;
|
||||
level.a_tomahawk_pickup_funcs = [];
|
||||
}
|
||||
|
||||
tomahawk_on_player_connect() //checked matches cerberus output
|
||||
tomahawk_on_player_connect()
|
||||
{
|
||||
self.current_tomahawk_weapon = "bouncing_tomahawk_zm";
|
||||
self.current_tactical_grenade = "bouncing_tomahawk_zm";
|
||||
@ -34,143 +35,137 @@ tomahawk_on_player_connect() //checked matches cerberus output
|
||||
self thread watch_for_tomahawk_charge();
|
||||
}
|
||||
|
||||
watch_for_tomahawk_throw() //checked changed to match cerberus output
|
||||
watch_for_tomahawk_throw()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "grenade_fire", grenade, weapname );
|
||||
|
||||
if ( !issubstr( weapname, "tomahawk_zm" ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
grenade.use_grenade_special_bookmark = 1;
|
||||
grenade.grenade_multiattack_bookmark_count = 1;
|
||||
grenade.low_level_instant_kill_charge = 1;
|
||||
grenade.owner = self;
|
||||
self notify( "throwing_tomahawk" );
|
||||
if ( isDefined( self.n_tomahawk_cooking_time ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.n_tomahawk_cooking_time ) )
|
||||
grenade.n_cookedtime = grenade.birthtime - self.n_tomahawk_cooking_time;
|
||||
}
|
||||
else
|
||||
{
|
||||
grenade.n_cookedtime = 0;
|
||||
}
|
||||
|
||||
self thread check_for_time_out( grenade );
|
||||
self thread tomahawk_thrown( grenade );
|
||||
}
|
||||
}
|
||||
|
||||
watch_for_tomahawk_charge() //checked changed to match cerberus output
|
||||
watch_for_tomahawk_charge()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "grenade_pullback", weaponname );
|
||||
|
||||
if ( !issubstr( weaponname, "tomahawk_zm" ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
self thread watch_for_grenade_cancel();
|
||||
self thread play_charge_fx();
|
||||
self.n_tomahawk_cooking_time = getTime();
|
||||
self.n_tomahawk_cooking_time = gettime();
|
||||
self waittill_either( "grenade_fire", "grenade_throw_cancelled" );
|
||||
wait 0.1;
|
||||
self.n_tomahawk_cooking_time = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
watch_for_grenade_cancel() //checked matches cerberus output
|
||||
watch_for_grenade_cancel()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "grenade_fire" );
|
||||
waittillframeend;
|
||||
weapon = "none";
|
||||
|
||||
while ( self isthrowinggrenade() && weapon == "none" )
|
||||
{
|
||||
self waittill( "weapon_change", weapon );
|
||||
}
|
||||
|
||||
self notify( "grenade_throw_cancelled" );
|
||||
}
|
||||
|
||||
play_charge_fx() //checked changed to match cerberus output
|
||||
play_charge_fx()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
self endon( "grenade_fire" );
|
||||
waittillframeend;
|
||||
time_to_pulse = 1000;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
time = getTime() - self.n_tomahawk_cooking_time;
|
||||
time = gettime() - self.n_tomahawk_cooking_time;
|
||||
self.current_tactical_grenade = self get_player_tactical_grenade();
|
||||
|
||||
if ( time >= time_to_pulse )
|
||||
{
|
||||
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
|
||||
{
|
||||
playfxontag( level._effect[ "tomahawk_charge_up_ug" ], self, "tag_origin" );
|
||||
}
|
||||
playfxontag( level._effect["tomahawk_charge_up_ug"], self, "tag_origin" );
|
||||
else
|
||||
{
|
||||
playfxontag( level._effect[ "tomahawk_charge_up" ], self, "tag_origin" );
|
||||
}
|
||||
playfxontag( level._effect["tomahawk_charge_up"], self, "tag_origin" );
|
||||
|
||||
time_to_pulse += 1000;
|
||||
self playrumbleonentity( "reload_small" );
|
||||
}
|
||||
|
||||
if ( time_to_pulse > 2400 && self.current_tactical_grenade != "upgraded_tomahawk_zm" )
|
||||
{
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
if ( time_to_pulse >= 3400 )
|
||||
{
|
||||
return;
|
||||
}
|
||||
break;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
get_grenade_charge_power( player ) //checked changed to match cerberus output
|
||||
get_grenade_charge_power( player )
|
||||
{
|
||||
player endon( "disconnect" );
|
||||
|
||||
if ( self.n_cookedtime > 1000 && self.n_cookedtime < 2000 )
|
||||
{
|
||||
if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
||||
{
|
||||
return 4.5;
|
||||
}
|
||||
|
||||
return 1.5;
|
||||
}
|
||||
else if ( self.n_cookedtime > 2000 && self.n_cookedtime < 3000 )
|
||||
{
|
||||
if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
||||
{
|
||||
return 6;
|
||||
}
|
||||
|
||||
return 2;
|
||||
}
|
||||
else if ( self.n_cookedtime >= 3000 && player.current_tomahawk_weapon != "upgraded_tomahawk_zm" )
|
||||
{
|
||||
return 2;
|
||||
}
|
||||
else if ( self.n_cookedtime >= 3000 )
|
||||
{
|
||||
return 3;
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
tomahawk_thrown( grenade ) //checked changed to match cerberus output
|
||||
tomahawk_thrown( grenade )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
grenade endon( "in_hellhole" );
|
||||
grenade_owner = undefined;
|
||||
if ( isDefined( grenade.owner ) )
|
||||
{
|
||||
|
||||
if ( isdefined( grenade.owner ) )
|
||||
grenade_owner = grenade.owner;
|
||||
}
|
||||
playfxontag( level._effect[ "tomahawk_charged_trail" ], grenade, "tag_origin" );
|
||||
|
||||
playfxontag( level._effect["tomahawk_charged_trail"], grenade, "tag_origin" );
|
||||
self setclientfieldtoplayer( "tomahawk_in_use", 2 );
|
||||
grenade waittill_either( "death", "time_out" );
|
||||
grenade_origin = grenade.origin;
|
||||
@ -178,50 +173,56 @@ tomahawk_thrown( grenade ) //checked changed to match cerberus output
|
||||
n_grenade_charge_power = grenade get_grenade_charge_power( self );
|
||||
a_zombies = get_array_of_closest( grenade_origin, a_zombies, undefined, undefined, 200 );
|
||||
a_powerups = get_array_of_closest( grenade_origin, level.active_powerups, undefined, undefined, 200 );
|
||||
if ( isDefined( level.a_tomahawk_pickup_funcs ) )
|
||||
|
||||
if ( isdefined( level.a_tomahawk_pickup_funcs ) )
|
||||
{
|
||||
foreach ( tomahawk_func in level.a_tomahawk_pickup_funcs )
|
||||
{
|
||||
if ( [[ tomahawk_func ]]( grenade, n_grenade_charge_power ) )
|
||||
{
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
if ( isDefined( a_powerups ) && a_powerups.size > 0 )
|
||||
|
||||
if ( isdefined( a_powerups ) && a_powerups.size > 0 )
|
||||
{
|
||||
m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power );
|
||||
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
||||
|
||||
foreach ( powerup in a_powerups )
|
||||
{
|
||||
powerup.origin = grenade_origin;
|
||||
powerup linkto( m_tomahawk );
|
||||
m_tomahawk.a_has_powerup = a_powerups;
|
||||
}
|
||||
|
||||
self thread tomahawk_return_player( m_tomahawk, 0 );
|
||||
return;
|
||||
}
|
||||
if ( !isDefined( a_zombies ) )
|
||||
|
||||
if ( !isdefined( a_zombies ) )
|
||||
{
|
||||
m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power );
|
||||
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
||||
self thread tomahawk_return_player( m_tomahawk, 0 );
|
||||
return;
|
||||
}
|
||||
foreach ( ai_zombie in a_zombies )
|
||||
else
|
||||
{
|
||||
foreach ( ai_zombie in a_zombies )
|
||||
ai_zombie.hit_by_tomahawk = 0;
|
||||
}
|
||||
if ( isDefined( a_zombies[ 0 ] ) && isalive( a_zombies[ 0 ] ) )
|
||||
|
||||
if ( isdefined( a_zombies[0] ) && isalive( a_zombies[0] ) )
|
||||
{
|
||||
v_zombiepos = a_zombies[ 0 ].origin;
|
||||
v_zombiepos = a_zombies[0].origin;
|
||||
|
||||
if ( distancesquared( grenade_origin, v_zombiepos ) <= 4900 )
|
||||
{
|
||||
a_zombies[ 0 ] setclientfield( "play_tomahawk_hit_sound", 1 );
|
||||
n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[ 0 ], n_grenade_charge_power, grenade );
|
||||
a_zombies[ 0 ] dodamage( n_tomahawk_damage, grenade_origin, self, grenade, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" );
|
||||
a_zombies[ 0 ].hit_by_tomahawk = 1;
|
||||
self maps/mp/zombies/_zm_score::add_to_player_score( 10 );
|
||||
a_zombies[0] setclientfield( "play_tomahawk_hit_sound", 1 );
|
||||
n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[0], n_grenade_charge_power, grenade );
|
||||
a_zombies[0] dodamage( n_tomahawk_damage, grenade_origin, self, grenade, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" );
|
||||
a_zombies[0].hit_by_tomahawk = 1;
|
||||
self maps\mp\zombies\_zm_score::add_to_player_score( 10 );
|
||||
self thread tomahawk_ricochet_attack( grenade_origin, n_grenade_charge_power );
|
||||
}
|
||||
else
|
||||
@ -235,15 +236,15 @@ tomahawk_thrown( grenade ) //checked changed to match cerberus output
|
||||
{
|
||||
m_tomahawk = tomahawk_spawn( grenade_origin, n_grenade_charge_power );
|
||||
m_tomahawk.n_grenade_charge_power = n_grenade_charge_power;
|
||||
if ( isDefined( grenade ) )
|
||||
{
|
||||
|
||||
if ( isdefined( grenade ) )
|
||||
grenade delete();
|
||||
}
|
||||
|
||||
self thread tomahawk_return_player( m_tomahawk, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
check_for_time_out( grenade ) //checked matches cerberus output
|
||||
check_for_time_out( grenade )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
grenade endon( "death" );
|
||||
@ -251,107 +252,111 @@ check_for_time_out( grenade ) //checked matches cerberus output
|
||||
grenade notify( "time_out" );
|
||||
}
|
||||
|
||||
tomahawk_ricochet_attack( grenade_origin, tomahawk_charge_power ) //checked matches cerberus output
|
||||
tomahawk_ricochet_attack( grenade_origin, tomahawk_charge_power )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
a_zombies = getaispeciesarray( "axis", "all" );
|
||||
a_zombies = get_array_of_closest( grenade_origin, a_zombies, undefined, undefined, 300 );
|
||||
a_zombies = array_reverse( a_zombies );
|
||||
if ( !isDefined( a_zombies ) )
|
||||
|
||||
if ( !isdefined( a_zombies ) )
|
||||
{
|
||||
m_tomahawk = tomahawk_spawn( grenade_origin, tomahawk_charge_power );
|
||||
m_tomahawk.n_grenade_charge_power = tomahawk_charge_power;
|
||||
self thread tomahawk_return_player( m_tomahawk, 0 );
|
||||
return;
|
||||
}
|
||||
|
||||
m_tomahawk = tomahawk_spawn( grenade_origin, tomahawk_charge_power );
|
||||
m_tomahawk.n_grenade_charge_power = tomahawk_charge_power;
|
||||
self thread tomahawk_attack_zombies( m_tomahawk, a_zombies );
|
||||
}
|
||||
|
||||
tomahawk_attack_zombies( m_tomahawk, a_zombies ) //checked changed to match cerberus output
|
||||
tomahawk_attack_zombies( m_tomahawk, a_zombies )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
if ( !isDefined( a_zombies ) )
|
||||
|
||||
if ( !isdefined( a_zombies ) )
|
||||
{
|
||||
self thread tomahawk_return_player( m_tomahawk, 0 );
|
||||
return;
|
||||
}
|
||||
|
||||
if ( a_zombies.size <= 4 )
|
||||
{
|
||||
n_attack_limit = a_zombies.size;
|
||||
}
|
||||
else
|
||||
{
|
||||
n_attack_limit = 4;
|
||||
}
|
||||
|
||||
for ( i = 0; i < n_attack_limit; i++ )
|
||||
{
|
||||
if ( isDefined( a_zombies[ i ] ) && isalive( a_zombies[ i ] ) )
|
||||
if ( isdefined( a_zombies[i] ) && isalive( a_zombies[i] ) )
|
||||
{
|
||||
tag = "J_Head";
|
||||
if ( a_zombies[ i ].isdog )
|
||||
{
|
||||
|
||||
if ( a_zombies[i].isdog )
|
||||
tag = "J_Spine1";
|
||||
}
|
||||
if ( isDefined( a_zombies[ i ].hit_by_tomahawk ) && !a_zombies[ i ].hit_by_tomahawk )
|
||||
|
||||
if ( isdefined( a_zombies[i].hit_by_tomahawk ) && !a_zombies[i].hit_by_tomahawk )
|
||||
{
|
||||
v_target = a_zombies[ i ] gettagorigin( tag );
|
||||
v_target = a_zombies[i] gettagorigin( tag );
|
||||
m_tomahawk moveto( v_target, 0.3 );
|
||||
|
||||
m_tomahawk waittill( "movedone" );
|
||||
if ( isDefined( a_zombies[ i ] ) && isalive( a_zombies[ i ] ) )
|
||||
|
||||
if ( isdefined( a_zombies[i] ) && isalive( a_zombies[i] ) )
|
||||
{
|
||||
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
|
||||
{
|
||||
playfxontag( level._effect[ "tomahawk_impact_ug" ], a_zombies[ i ], tag );
|
||||
}
|
||||
playfxontag( level._effect["tomahawk_impact_ug"], a_zombies[i], tag );
|
||||
else
|
||||
{
|
||||
playfxontag( level._effect[ "tomahawk_impact" ], a_zombies[ i ], tag );
|
||||
}
|
||||
playfxontag( level._effect[ "tomahawk_fire_dot" ], a_zombies[ i ], "j_spineupper" );
|
||||
a_zombies[ i ] setclientfield( "play_tomahawk_hit_sound", 1 );
|
||||
n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[ i ], m_tomahawk.n_grenade_charge_power, m_tomahawk );
|
||||
a_zombies[ i ] dodamage( n_tomahawk_damage, m_tomahawk.origin, self, m_tomahawk, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" );
|
||||
a_zombies[ i ].hit_by_tomahawk = 1;
|
||||
self maps/mp/zombies/_zm_score::add_to_player_score( 10 );
|
||||
playfxontag( level._effect["tomahawk_impact"], a_zombies[i], tag );
|
||||
|
||||
playfxontag( level._effect["tomahawk_fire_dot"], a_zombies[i], "j_spineupper" );
|
||||
a_zombies[i] setclientfield( "play_tomahawk_hit_sound", 1 );
|
||||
n_tomahawk_damage = calculate_tomahawk_damage( a_zombies[i], m_tomahawk.n_grenade_charge_power, m_tomahawk );
|
||||
a_zombies[i] dodamage( n_tomahawk_damage, m_tomahawk.origin, self, m_tomahawk, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" );
|
||||
a_zombies[i].hit_by_tomahawk = 1;
|
||||
self maps\mp\zombies\_zm_score::add_to_player_score( 10 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
wait 0.2;
|
||||
}
|
||||
|
||||
self thread tomahawk_return_player( m_tomahawk, n_attack_limit );
|
||||
}
|
||||
|
||||
tomahawk_return_player( m_tomahawk, num_zombie_hit ) //checked changed to match cerberus output
|
||||
tomahawk_return_player( m_tomahawk, num_zombie_hit )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
n_dist = distance2dsquared( m_tomahawk.origin, self.origin );
|
||||
if ( !isDefined( num_zombie_hit ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( num_zombie_hit ) )
|
||||
num_zombie_hit = 5;
|
||||
}
|
||||
|
||||
while ( n_dist > 4096 )
|
||||
{
|
||||
m_tomahawk moveto( self geteye(), 0.25 );
|
||||
|
||||
if ( num_zombie_hit < 5 )
|
||||
{
|
||||
self tomahawk_check_for_zombie( m_tomahawk );
|
||||
num_zombie_hit++;
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
n_dist = distance2dsquared( m_tomahawk.origin, self geteye() );
|
||||
}
|
||||
if ( isDefined( m_tomahawk.a_has_powerup ) )
|
||||
|
||||
if ( isdefined( m_tomahawk.a_has_powerup ) )
|
||||
{
|
||||
foreach ( powerup in m_tomahawk.a_has_powerup )
|
||||
{
|
||||
if ( isDefined( powerup ) )
|
||||
{
|
||||
if ( isdefined( powerup ) )
|
||||
powerup.origin = self.origin;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_tomahawk delete();
|
||||
self playsoundtoplayer( "wpn_tomahawk_catch_plr", self );
|
||||
self playsound( "wpn_tomahawk_catch_npc" );
|
||||
@ -359,93 +364,90 @@ tomahawk_return_player( m_tomahawk, num_zombie_hit ) //checked changed to match
|
||||
self playsoundtoplayer( "wpn_tomahawk_cooldown_done", self );
|
||||
self givemaxammo( self.current_tomahawk_weapon );
|
||||
a_zombies = getaispeciesarray( "axis", "all" );
|
||||
|
||||
foreach ( ai_zombie in a_zombies )
|
||||
{
|
||||
ai_zombie.hit_by_tomahawk = 0;
|
||||
}
|
||||
|
||||
self setclientfieldtoplayer( "tomahawk_in_use", 3 );
|
||||
}
|
||||
|
||||
tomahawk_check_for_zombie( grenade ) //checked matches cerberus output
|
||||
tomahawk_check_for_zombie( grenade )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
grenade endon( "death" );
|
||||
a_zombies = getaispeciesarray( "axis", "all" );
|
||||
a_zombies = get_array_of_closest( grenade.origin, a_zombies, undefined, undefined, 100 );
|
||||
if ( isDefined( a_zombies[ 0 ] ) && distance2dsquared( grenade.origin, a_zombies[ 0 ].origin ) <= 10000 )
|
||||
|
||||
if ( isdefined( a_zombies[0] ) && distance2dsquared( grenade.origin, a_zombies[0].origin ) <= 10000 )
|
||||
{
|
||||
if ( isDefined( a_zombies[ 0 ].hit_by_tomahawk ) && !a_zombies[ 0 ].hit_by_tomahawk )
|
||||
{
|
||||
self tomahawk_hit_zombie( a_zombies[ 0 ], grenade );
|
||||
}
|
||||
if ( isdefined( a_zombies[0].hit_by_tomahawk ) && !a_zombies[0].hit_by_tomahawk )
|
||||
self tomahawk_hit_zombie( a_zombies[0], grenade );
|
||||
}
|
||||
}
|
||||
|
||||
tomahawk_hit_zombie( ai_zombie, grenade ) //checked matches cerberus output
|
||||
tomahawk_hit_zombie( ai_zombie, grenade )
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
if ( isDefined( ai_zombie ) && isalive( ai_zombie ) )
|
||||
|
||||
if ( isdefined( ai_zombie ) && isalive( ai_zombie ) )
|
||||
{
|
||||
tag = "J_Head";
|
||||
|
||||
if ( ai_zombie.isdog )
|
||||
{
|
||||
tag = "J_Spine1";
|
||||
}
|
||||
|
||||
v_target = ai_zombie gettagorigin( tag );
|
||||
grenade moveto( v_target, 0.3 );
|
||||
|
||||
grenade waittill( "movedone" );
|
||||
if ( isDefined( ai_zombie ) && isalive( ai_zombie ) )
|
||||
|
||||
if ( isdefined( ai_zombie ) && isalive( ai_zombie ) )
|
||||
{
|
||||
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
|
||||
{
|
||||
playfxontag( level._effect[ "tomahawk_impact_ug" ], ai_zombie, tag );
|
||||
}
|
||||
playfxontag( level._effect["tomahawk_impact_ug"], ai_zombie, tag );
|
||||
else
|
||||
{
|
||||
playfxontag( level._effect[ "tomahawk_impact" ], ai_zombie, tag );
|
||||
}
|
||||
playfxontag( level._effect["tomahawk_impact"], ai_zombie, tag );
|
||||
|
||||
ai_zombie setclientfield( "play_tomahawk_hit_sound", 1 );
|
||||
n_tomahawk_damage = calculate_tomahawk_damage( ai_zombie, grenade.n_grenade_charge_power, grenade );
|
||||
ai_zombie dodamage( n_tomahawk_damage, grenade.origin, self, grenade, "none", "MOD_GRENADE", 0, "bouncing_tomahawk_zm" );
|
||||
ai_zombie.hit_by_tomahawk = 1;
|
||||
self maps/mp/zombies/_zm_score::add_to_player_score( 10 );
|
||||
self maps\mp\zombies\_zm_score::add_to_player_score( 10 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tomahawk_spawn( grenade_origin, charged ) //checked matches cerberus output
|
||||
tomahawk_spawn( grenade_origin, charged )
|
||||
{
|
||||
m_tomahawk = spawn( "script_model", grenade_origin );
|
||||
m_tomahawk setmodel( "t6_wpn_zmb_tomahawk_world" );
|
||||
m_tomahawk thread tomahawk_spin();
|
||||
m_tomahawk playloopsound( "wpn_tomahawk_flying_loop" );
|
||||
|
||||
if ( self.current_tactical_grenade == "upgraded_tomahawk_zm" )
|
||||
{
|
||||
playfxontag( level._effect[ "tomahawk_trail_ug" ], m_tomahawk, "tag_origin" );
|
||||
}
|
||||
playfxontag( level._effect["tomahawk_trail_ug"], m_tomahawk, "tag_origin" );
|
||||
else
|
||||
{
|
||||
playfxontag( level._effect[ "tomahawk_trail" ], m_tomahawk, "tag_origin" );
|
||||
}
|
||||
if ( isDefined( charged ) && charged > 1 )
|
||||
{
|
||||
playfxontag( level._effect[ "tomahawk_charged_trail" ], m_tomahawk, "tag_origin" );
|
||||
}
|
||||
playfxontag( level._effect["tomahawk_trail"], m_tomahawk, "tag_origin" );
|
||||
|
||||
if ( isdefined( charged ) && charged > 1 )
|
||||
playfxontag( level._effect["tomahawk_charged_trail"], m_tomahawk, "tag_origin" );
|
||||
|
||||
m_tomahawk.low_level_instant_kill_charge = 1;
|
||||
return m_tomahawk;
|
||||
}
|
||||
|
||||
tomahawk_spin() //checked matches cerberus output
|
||||
tomahawk_spin()
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( isDefined( self ) )
|
||||
|
||||
while ( isdefined( self ) )
|
||||
{
|
||||
self rotatepitch( 90, 0.2 );
|
||||
wait 0.15;
|
||||
}
|
||||
}
|
||||
|
||||
tomahawk_pickup() //checked matches cerberus output
|
||||
tomahawk_pickup()
|
||||
{
|
||||
flag_wait( "soul_catchers_charged" );
|
||||
flag_init( "tomahawk_pickup_complete" );
|
||||
@ -472,102 +474,102 @@ tomahawk_pickup() //checked matches cerberus output
|
||||
trigger_upgraded.script_noteworthy = "redeemer_pickup_trigger";
|
||||
trigger_upgraded sethintstring( &"ZM_PRISON_TOMAHAWK_UPGRADED_PICKUP" );
|
||||
trigger_upgraded setcursorhint( "HINT_NOICON" );
|
||||
/*
|
||||
/#
|
||||
iprintlnbold( "GO FIND THE TOMAHAWK" );
|
||||
#/
|
||||
*/
|
||||
trigger thread tomahawk_pickup_trigger();
|
||||
trigger_upgraded thread tomahawk_pickup_trigger();
|
||||
flag_set( "tomahawk_pickup_complete" );
|
||||
}
|
||||
|
||||
tomahawk_pickup_trigger() //checked changed to match cerberus output
|
||||
tomahawk_pickup_trigger()
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", player );
|
||||
if ( isDefined( player.current_tactical_grenade ) && !issubstr( player.current_tactical_grenade, "tomahawk_zm" ) )
|
||||
{
|
||||
|
||||
if ( isdefined( player.current_tactical_grenade ) && !issubstr( player.current_tactical_grenade, "tomahawk_zm" ) )
|
||||
player takeweapon( player.current_tactical_grenade );
|
||||
}
|
||||
|
||||
if ( player.current_tomahawk_weapon == "upgraded_tomahawk_zm" )
|
||||
{
|
||||
if ( !is_true( player.afterlife ) )
|
||||
{
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
player disable_player_move_states( 1 );
|
||||
gun = player getcurrentweapon();
|
||||
level notify( "bouncing_tomahawk_zm_aquired" );
|
||||
player maps/mp/zombies/_zm_stats::increment_client_stat( "prison_tomahawk_acquired", 0 );
|
||||
player maps\mp\zombies\_zm_stats::increment_client_stat( "prison_tomahawk_acquired", 0 );
|
||||
player giveweapon( "zombie_tomahawk_flourish" );
|
||||
player thread tomahawk_update_hud_on_last_stand();
|
||||
player switchtoweapon( "zombie_tomahawk_flourish" );
|
||||
player waittill_any( "player_downed", "weapon_change_complete" );
|
||||
|
||||
if ( self.script_noteworthy == "redeemer_pickup_trigger" )
|
||||
{
|
||||
player.redeemer_trigger = self;
|
||||
player setclientfieldtoplayer( "upgraded_tomahawk_in_use", 1 );
|
||||
}
|
||||
|
||||
player switchtoweapon( gun );
|
||||
player enable_player_move_states();
|
||||
player.loadout.hastomahawk = 1;
|
||||
continue;
|
||||
}
|
||||
}
|
||||
|
||||
if ( !player hasweapon( "bouncing_tomahawk_zm" ) && !player hasweapon( "upgraded_tomahawk_zm" ) )
|
||||
{
|
||||
player disable_player_move_states( 1 );
|
||||
|
||||
if ( !is_true( player.afterlife ) )
|
||||
{
|
||||
player giveweapon( player.current_tomahawk_weapon );
|
||||
player thread tomahawk_update_hud_on_last_stand();
|
||||
player thread tomahawk_tutorial_hint();
|
||||
player set_player_tactical_grenade( player.current_tomahawk_weapon );
|
||||
|
||||
if ( self.script_noteworthy == "retriever_pickup_trigger" )
|
||||
{
|
||||
player.retriever_trigger = self;
|
||||
}
|
||||
|
||||
player notify( "tomahawk_picked_up" );
|
||||
player setclientfieldtoplayer( "tomahawk_in_use", 1 );
|
||||
gun = player getcurrentweapon();
|
||||
level notify( "bouncing_tomahawk_zm_aquired" );
|
||||
player notify( "player_obtained_tomahawk" );
|
||||
player maps/mp/zombies/_zm_stats::increment_client_stat( "prison_tomahawk_acquired", 0 );
|
||||
player maps\mp\zombies\_zm_stats::increment_client_stat( "prison_tomahawk_acquired", 0 );
|
||||
player giveweapon( "zombie_tomahawk_flourish" );
|
||||
player switchtoweapon( "zombie_tomahawk_flourish" );
|
||||
player waittill_any( "player_downed", "weapon_change_complete" );
|
||||
|
||||
if ( self.script_noteworthy == "redeemer_pickup_trigger" )
|
||||
{
|
||||
player setclientfieldtoplayer( "upgraded_tomahawk_in_use", 1 );
|
||||
}
|
||||
|
||||
player switchtoweapon( gun );
|
||||
}
|
||||
|
||||
player enable_player_move_states();
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
tomahawk_pickup_spin() //checked matches cerberus output
|
||||
tomahawk_pickup_spin()
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self rotateyaw( 90, 1 );
|
||||
wait 0.15;
|
||||
}
|
||||
}
|
||||
|
||||
calculate_tomahawk_damage( n_target_zombie, n_tomahawk_power, tomahawk ) //checked changed to match cerberus output
|
||||
calculate_tomahawk_damage( n_target_zombie, n_tomahawk_power, tomahawk )
|
||||
{
|
||||
if ( n_tomahawk_power > 2 )
|
||||
{
|
||||
return n_target_zombie.health + 1;
|
||||
}
|
||||
else if ( level.round_number >= 10 && level.round_number < 13 && tomahawk.low_level_instant_kill_charge <= 3 )
|
||||
{
|
||||
tomahawk.low_level_instant_kill_charge += 1;
|
||||
@ -579,12 +581,10 @@ calculate_tomahawk_damage( n_target_zombie, n_tomahawk_power, tomahawk ) //check
|
||||
return n_target_zombie.health + 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
return 1000 * n_tomahawk_power;
|
||||
}
|
||||
}
|
||||
|
||||
setting_tutorial_hud() //checked matches cerberus output
|
||||
setting_tutorial_hud()
|
||||
{
|
||||
client_hint = newclienthudelem( self );
|
||||
client_hint.alignx = "center";
|
||||
@ -600,7 +600,7 @@ setting_tutorial_hud() //checked matches cerberus output
|
||||
return client_hint;
|
||||
}
|
||||
|
||||
tomahawk_tutorial_hint() //checked matches cerberus output
|
||||
tomahawk_tutorial_hint()
|
||||
{
|
||||
hud = setting_tutorial_hud();
|
||||
hud settext( &"ZM_PRISON_TOMAHAWK_TUTORIAL" );
|
||||
@ -609,16 +609,19 @@ tomahawk_tutorial_hint() //checked matches cerberus output
|
||||
hud destroy();
|
||||
}
|
||||
|
||||
tomahawk_update_hud_on_last_stand() //checked matches cerberus output
|
||||
tomahawk_update_hud_on_last_stand()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self endon( "bled_out" );
|
||||
self endon( "tomahawk_upgraded_swap" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill_either( "entering_last_stand", "fake_death" );
|
||||
self setclientfieldtoplayer( "tomahawk_in_use", 0 );
|
||||
|
||||
self waittill( "player_revived" );
|
||||
|
||||
if ( isalive( self ) )
|
||||
{
|
||||
wait 0.1;
|
||||
@ -629,4 +632,3 @@ tomahawk_update_hud_on_last_stand() //checked matches cerberus output
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -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,7 +1,9 @@
|
||||
#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()
|
||||
{
|
||||
@ -18,13 +20,13 @@ achievement_sound_func( achievement_name_lower )
|
||||
|
||||
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()
|
||||
@ -39,6 +41,7 @@ onplayerconnect()
|
||||
achievement_highrise_sidequest()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
|
||||
level waittill( "highrise_sidequest_achieved" );
|
||||
/#
|
||||
iprintlnbold( "ZM_DLC1_HIGHRISE_SIDEQUEST achieved for the team" );
|
||||
@ -52,12 +55,15 @@ achievement_vertigoner()
|
||||
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;
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
/#
|
||||
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC1_VERTIGONER" );
|
||||
}
|
||||
@ -68,12 +74,15 @@ achievement_slippery_when_undead()
|
||||
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;
|
||||
|
||||
wait 0.01;
|
||||
}
|
||||
/#
|
||||
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC1_SLIPPERY_WHEN_UNDEAD" );
|
||||
}
|
||||
@ -86,29 +95,28 @@ achievement_facing_the_dragon()
|
||||
v_dragon_position = ( 971, 43, 3800 );
|
||||
is_touching_distance = 350;
|
||||
round_number_max = 2;
|
||||
while ( 1 )
|
||||
|
||||
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 )
|
||||
{
|
||||
|
||||
if ( dp > 0.95 )
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,01;
|
||||
}
|
||||
|
||||
wait 0.01;
|
||||
}
|
||||
/#
|
||||
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC1_FACING_THE_DRAGON" );
|
||||
}
|
||||
@ -117,8 +125,10 @@ achievement_im_my_own_best_friend()
|
||||
{
|
||||
level endon( "end_game" );
|
||||
self endon( "disconnect" );
|
||||
|
||||
self waittill( "whos_who_self_revive" );
|
||||
/#
|
||||
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC1_IM_MY_OWN_BEST_FRIEND" );
|
||||
}
|
||||
@ -127,15 +137,16 @@ 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;
|
||||
}
|
||||
}
|
||||
/#
|
||||
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC1_MAD_WITHOUT_POWER", 1 );
|
||||
}
|
||||
@ -146,48 +157,42 @@ achievement_shafted()
|
||||
self endon( "disconnect" );
|
||||
level.perk_bought_func = ::player_buys_perk_machine;
|
||||
max_unique_perk_machines = 6;
|
||||
while ( 1 )
|
||||
|
||||
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 )
|
||||
|
||||
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
|
||||
{
|
||||
}
|
||||
}
|
||||
/#
|
||||
|
||||
#/
|
||||
self giveachievement_wrapper( "ZM_DLC1_SHAFTED" );
|
||||
}
|
||||
|
||||
player_buys_perk_machine( perk )
|
||||
{
|
||||
if ( !isDefined( self.perk_machines_bought ) )
|
||||
{
|
||||
if ( !isdefined( self.perk_machines_bought ) )
|
||||
self.perk_machines_bought = [];
|
||||
}
|
||||
|
||||
found = 0;
|
||||
i = 0;
|
||||
while ( i < self.perk_machines_bought.size )
|
||||
|
||||
for ( i = 0; i < self.perk_machines_bought.size; i++ )
|
||||
{
|
||||
if ( perk == self.perk_machines_bought[ i ] )
|
||||
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.perk_machines_bought[self.perk_machines_bought.size] = perk;
|
||||
self notify( "player_buys_perk" );
|
||||
}
|
||||
}
|
||||
|
@ -1,8 +1,10 @@
|
||||
#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()
|
||||
{
|
||||
@ -12,35 +14,33 @@ main()
|
||||
sndmusicegg()
|
||||
{
|
||||
origins = [];
|
||||
origins[ 0 ] = ( 2724, 300, 1347 );
|
||||
origins[ 1 ] = ( 2639, 1831, 1359 );
|
||||
origins[ 2 ] = ( 1230, 1846, 3249 );
|
||||
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++;
|
||||
}
|
||||
|
||||
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 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;
|
||||
wait 1.5;
|
||||
temp_ent delete();
|
||||
}
|
||||
}
|
||||
@ -48,10 +48,9 @@ sndmusicegg_wait( bear_origin )
|
||||
sndmusicegg_override()
|
||||
{
|
||||
if ( is_true( level.music_override ) )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
return 1;
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
sndmuseggplay( ent, alias, time )
|
||||
@ -62,7 +61,7 @@ sndmuseggplay( ent, alias, time )
|
||||
level thread sndeggmusicwait( time );
|
||||
level waittill_either( "end_game", "sndSongDone" );
|
||||
ent stopsounds();
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
ent delete();
|
||||
level.music_override = 0;
|
||||
}
|
||||
@ -70,6 +69,6 @@ sndmuseggplay( ent, alias, time )
|
||||
sndeggmusicwait( time )
|
||||
{
|
||||
level endon( "end_game" );
|
||||
wait time;
|
||||
wait( time );
|
||||
level notify( "sndSongDone" );
|
||||
}
|
||||
|
@ -1,11 +1,13 @@
|
||||
#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()
|
||||
{
|
||||
@ -45,7 +47,7 @@ include_buildables()
|
||||
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 = 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();
|
||||
@ -53,19 +55,20 @@ include_buildables()
|
||||
key add_buildable_piece( key_chain );
|
||||
key.triggerthink = ::keysbuildable;
|
||||
key.onuseplantobject = ::onuseplantobject_escapepodkey;
|
||||
key.buildablepieces[ 0 ].onspawn = ::onspawn_keys;
|
||||
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;
|
||||
ekey.buildablepieces[0].onspawn = ::onspawn_keys;
|
||||
include_buildable( ekey );
|
||||
if ( !isDefined( level.gamedifficulty ) || level.gamedifficulty != 0 )
|
||||
|
||||
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_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();
|
||||
@ -76,46 +79,41 @@ include_buildables()
|
||||
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" );
|
||||
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 )
|
||||
{
|
||||
|
||||
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 );
|
||||
|
||||
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 = 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 ) )
|
||||
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 = _a143[ _k143 ];
|
||||
stub.prompt_and_visibility_func = ::elevator_key_prompt;
|
||||
stub.buildablezone.stat_name = "keys_zm";
|
||||
_k143 = getNextArrayKey( _a143, _k143 );
|
||||
}
|
||||
}
|
||||
|
||||
@ -140,33 +138,33 @@ onpickup_common( 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" );
|
||||
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.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"] = 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()
|
||||
@ -181,6 +179,7 @@ ondrop_keys( player )
|
||||
|
||||
onpickup_keys( player )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
escape_pod_key_prompt( player )
|
||||
@ -191,6 +190,7 @@ escape_pod_key_prompt( player )
|
||||
self sethintstring( self.stub.hint_string );
|
||||
return 0;
|
||||
}
|
||||
|
||||
return self buildabletrigger_update_prompt( player );
|
||||
}
|
||||
|
||||
@ -204,14 +204,16 @@ watch_elevator_prompt( player, trig )
|
||||
player notify( "watch_elevator_prompt" );
|
||||
player endon( "watch_elevator_prompt" );
|
||||
trig endon( "kill_trigger" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
trig.stub.elevator waittill( "floor_changed" );
|
||||
if ( isDefined( self.stub.elevator ) )
|
||||
|
||||
if ( isdefined( self.stub.elevator ) )
|
||||
{
|
||||
if ( trig.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( trig.stub.floor ) )
|
||||
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 );
|
||||
thread maps\mp\zombies\_zm_unitrigger::cleanup_trigger( trig, player );
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -220,73 +222,73 @@ watch_elevator_prompt( player, trig )
|
||||
|
||||
elevator_key_prompt( player )
|
||||
{
|
||||
if ( !isDefined( self.stub.elevator ) )
|
||||
if ( !isdefined( self.stub.elevator ) )
|
||||
{
|
||||
elevatorname = self.stub.script_noteworthy;
|
||||
if ( isDefined( elevatorname ) && isDefined( self.stub.script_parameters ) )
|
||||
|
||||
if ( isdefined( elevatorname ) && isdefined( self.stub.script_parameters ) )
|
||||
{
|
||||
elevator = level.elevators[ elevatorname ];
|
||||
elevator = level.elevators[elevatorname];
|
||||
floor = int( self.stub.script_parameters );
|
||||
flevel = elevator maps/mp/zm_highrise_elevators::elevator_level_for_floor( floor );
|
||||
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 ) )
|
||||
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 );
|
||||
color = vectorscale( ( 0, 0, 1 ), 0.7 );
|
||||
stop = self.stub.floor;
|
||||
floor = self.stub.elevator.floors[ "" + stop ].script_location;
|
||||
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 ( getdvarint( _hash_B67910B4 ) )
|
||||
print3d( self.stub.origin, text, color, 1, 0.5, 300 );
|
||||
}
|
||||
#/
|
||||
}
|
||||
}
|
||||
if ( isDefined( self.stub.elevator ) )
|
||||
if ( isdefined( self.stub.elevator ) )
|
||||
{
|
||||
if ( self.stub.elevator maps/mp/zm_highrise_elevators::elevator_is_on_floor( self.stub.floor ) )
|
||||
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 ) )
|
||||
|
||||
if ( isdefined( elevatorname ) && isdefined( self.script_parameters ) )
|
||||
{
|
||||
floor = int( self.script_parameters );
|
||||
elevator = level.elevators[ elevatorname ];
|
||||
if ( isDefined( elevator ) )
|
||||
elevator = level.elevators[elevatorname];
|
||||
|
||||
if ( isdefined( elevator ) )
|
||||
{
|
||||
elevator.body.force_starting_floor = floor;
|
||||
elevator.body notify( "forcego" );
|
||||
@ -296,32 +298,28 @@ onuseplantobject_elevatorkey( player )
|
||||
|
||||
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() )
|
||||
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 ) )
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.unitrigger ) )
|
||||
self.unitrigger.link_parent = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
onuseplantobject_slipgun( player )
|
||||
@ -332,22 +330,18 @@ onuseplantobject_slipgun( player )
|
||||
buildable = self.buildablezone;
|
||||
first_part = "TAG_COOKER";
|
||||
second_part = "TAG_BASE";
|
||||
i = 0;
|
||||
while ( i < buildable.pieces.size )
|
||||
|
||||
for ( i = 0; i < buildable.pieces.size; i++ )
|
||||
{
|
||||
if ( buildable.pieces[ i ].part_name == first_part )
|
||||
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 )
|
||||
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 );
|
||||
i++;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
buildable.stub.model hidepart( second_part );
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,129 +1,119 @@
|
||||
#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 ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.zombie_tracking_dist ) )
|
||||
level.zombie_tracking_dist = 1000;
|
||||
}
|
||||
if ( !isDefined( level.zombie_tracking_high ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.zombie_tracking_high ) )
|
||||
level.zombie_tracking_high = 500;
|
||||
}
|
||||
if ( !isDefined( level.zombie_tracking_wait ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.zombie_tracking_wait ) )
|
||||
level.zombie_tracking_wait = 10;
|
||||
}
|
||||
|
||||
building_trigs = getentarray( "zombie_fell_off", "targetname" );
|
||||
if ( isDefined( building_trigs ) )
|
||||
{
|
||||
|
||||
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 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
zombies = get_round_enemy_array();
|
||||
if ( !isDefined( zombies ) || isDefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
||||
|
||||
if ( !isdefined( zombies ) || isdefined( level.ignore_distance_tracking ) && level.ignore_distance_tracking )
|
||||
{
|
||||
wait level.zombie_tracking_wait;
|
||||
wait( level.zombie_tracking_wait );
|
||||
continue;
|
||||
}
|
||||
}
|
||||
else i = 0;
|
||||
while ( i < zombies.size )
|
||||
else
|
||||
{
|
||||
if ( isDefined( zombies[ i ] ) && isDefined( zombies[ i ].ignore_distance_tracking ) && !zombies[ i ].ignore_distance_tracking )
|
||||
for ( i = 0; i < zombies.size; i++ )
|
||||
{
|
||||
zombies[ i ] thread delete_zombie_noone_looking( level.zombie_tracking_dist, level.zombie_tracking_high );
|
||||
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;
|
||||
|
||||
wait( level.zombie_tracking_wait );
|
||||
}
|
||||
}
|
||||
|
||||
delete_zombie_noone_looking( how_close, how_high )
|
||||
{
|
||||
self endon( "death" );
|
||||
if ( !isDefined( how_close ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( how_close ) )
|
||||
how_close = 1000;
|
||||
}
|
||||
if ( !isDefined( how_high ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( players[ i ].sessionstate == "spectator" )
|
||||
if ( players[i].sessionstate == "spectator" )
|
||||
continue;
|
||||
|
||||
if ( isdefined( level.only_track_targeted_players ) )
|
||||
{
|
||||
i++;
|
||||
if ( !isdefined( self.favoriteenemy ) || self.favoriteenemy != players[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 )
|
||||
{
|
||||
|
||||
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 )
|
||||
{
|
||||
|
||||
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;
|
||||
|
||||
wait 0.1;
|
||||
|
||||
if ( self.inview == 0 && self.player_close == 0 )
|
||||
{
|
||||
if ( !isDefined( self.animname ) || isDefined( self.animname ) && self.animname != "zombie" )
|
||||
{
|
||||
if ( !isdefined( self.animname ) || isdefined( self.animname ) && self.animname != "zombie" )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.electrified ) && self.electrified == 1 )
|
||||
{
|
||||
|
||||
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 ( 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 )
|
||||
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;
|
||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = self.health;
|
||||
}
|
||||
}
|
||||
}
|
||||
self maps/mp/zombies/_zm_spawner::reset_attack_spot();
|
||||
|
||||
self maps\mp\zombies\_zm_spawner::reset_attack_spot();
|
||||
self notify( "zombie_delete" );
|
||||
self delete();
|
||||
recalc_zombie_array();
|
||||
@ -133,32 +123,28 @@ delete_zombie_noone_looking( how_close, how_high )
|
||||
player_can_see_me( player )
|
||||
{
|
||||
playerangles = player getplayerangles();
|
||||
playerforwardvec = anglesToForward( playerangles );
|
||||
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" );
|
||||
|
||||
playerfov = getdvarfloat( "cg_fov" );
|
||||
banzaivsplayerfovbuffer = getdvarfloat( _hash_BCB625CF );
|
||||
|
||||
if ( banzaivsplayerfovbuffer <= 0 )
|
||||
{
|
||||
banzaivsplayerfovbuffer = 0,2;
|
||||
}
|
||||
playercanseeme = anglefromcenter <= ( ( playerfov * 0,5 ) * ( 1 - banzaivsplayerfovbuffer ) );
|
||||
banzaivsplayerfovbuffer = 0.2;
|
||||
|
||||
playercanseeme = anglefromcenter <= playerfov * 0.5 * ( 1 - banzaivsplayerfovbuffer );
|
||||
return playercanseeme;
|
||||
}
|
||||
|
||||
@ -166,40 +152,42 @@ escaped_zombies_cleanup_init()
|
||||
{
|
||||
self endon( "death" );
|
||||
self.zombie_path_bad = 0;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
if ( !self.zombie_path_bad )
|
||||
{
|
||||
self waittill( "bad_path" );
|
||||
}
|
||||
|
||||
found_player = undefined;
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( self maymovetopoint( players[ i ].origin, 1 ) )
|
||||
if ( self maymovetopoint( players[i].origin, 1 ) )
|
||||
{
|
||||
self.favoriteenemy = players[ i ];
|
||||
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 )
|
||||
|
||||
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;
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -207,30 +195,26 @@ 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" ) )
|
||||
|
||||
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;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
return b_player_is_in_elevator_shaft;
|
||||
}
|
||||
|
||||
get_occupied_zones()
|
||||
{
|
||||
a_occupied_zones = [];
|
||||
i = 0;
|
||||
while ( i < level.active_zone_names.size )
|
||||
|
||||
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 ];
|
||||
}
|
||||
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;
|
||||
}
|
||||
|
||||
@ -238,12 +222,14 @@ get_escape_position()
|
||||
{
|
||||
self endon( "death" );
|
||||
str_zone = get_current_zone();
|
||||
if ( isDefined( str_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;
|
||||
}
|
||||
|
||||
@ -251,53 +237,41 @@ get_current_zone()
|
||||
{
|
||||
str_zone = undefined;
|
||||
a_zones = getarraykeys( level.zones );
|
||||
_a310 = a_zones;
|
||||
_k310 = getFirstArrayKey( _a310 );
|
||||
while ( isDefined( _k310 ) )
|
||||
|
||||
foreach ( zone in a_zones )
|
||||
{
|
||||
zone = _a310[ _k310 ];
|
||||
i = 0;
|
||||
while ( i < level.zones[ zone ].volumes.size )
|
||||
{
|
||||
if ( self istouching( level.zones[ zone ].volumes[ i ] ) )
|
||||
for ( i = 0; i < level.zones[zone].volumes.size; i++ )
|
||||
{
|
||||
if ( self istouching( level.zones[zone].volumes[i] ) )
|
||||
str_zone = zone;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
_k310 = getNextArrayKey( _a310, _k310 );
|
||||
}
|
||||
|
||||
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 )
|
||||
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 ];
|
||||
}
|
||||
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 );
|
||||
}
|
||||
|
||||
foreach ( zone in a_zones )
|
||||
a_dog_locations = arraycombine( a_dog_locations, level.zones[zone].dog_locations, 0, 0 );
|
||||
|
||||
return a_dog_locations;
|
||||
}
|
||||
|
||||
@ -305,18 +279,19 @@ get_farthest_dog_location( a_dog_locations )
|
||||
{
|
||||
n_farthest_index = 0;
|
||||
n_distance_farthest = 0;
|
||||
i = 0;
|
||||
while ( i < a_dog_locations.size )
|
||||
|
||||
for ( i = 0; i < a_dog_locations.size; i++ )
|
||||
{
|
||||
n_distance_sq = distancesquared( self.origin, a_dog_locations[ i ].origin );
|
||||
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 ];
|
||||
|
||||
return a_dog_locations[n_farthest_index];
|
||||
}
|
||||
|
||||
escaped_zombies_cleanup()
|
||||
@ -325,18 +300,19 @@ escaped_zombies_cleanup()
|
||||
s_escape = self get_escape_position();
|
||||
self notify( "stop_find_flesh" );
|
||||
self notify( "zombie_acquire_enemy" );
|
||||
if ( isDefined( s_escape ) )
|
||||
|
||||
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;
|
||||
wait 0.1;
|
||||
|
||||
if ( !self.zombie_path_bad )
|
||||
{
|
||||
self thread maps/mp/zombies/_zm_ai_basic::find_flesh();
|
||||
}
|
||||
self thread maps\mp\zombies\_zm_ai_basic::find_flesh();
|
||||
}
|
||||
|
||||
check_player_available()
|
||||
@ -346,70 +322,69 @@ 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 );
|
||||
|
||||
wait( randomfloatrange( 0.2, 0.5 ) );
|
||||
}
|
||||
}
|
||||
|
||||
can_zombie_path_to_any_player()
|
||||
{
|
||||
a_players = get_players();
|
||||
i = 0;
|
||||
while ( i < a_players.size )
|
||||
|
||||
for ( i = 0; i < a_players.size; i++ )
|
||||
{
|
||||
if ( findpath( self.origin, a_players[ i ].origin ) )
|
||||
{
|
||||
return 1;
|
||||
if ( findpath( self.origin, a_players[i].origin ) )
|
||||
return true;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
can_zombie_see_any_player()
|
||||
{
|
||||
a_players = get_players();
|
||||
i = 0;
|
||||
while ( i < a_players.size )
|
||||
|
||||
for ( i = 0; i < a_players.size; i++ )
|
||||
{
|
||||
if ( self maymovetopoint( a_players[ i ].origin, 1 ) )
|
||||
{
|
||||
return 1;
|
||||
if ( self maymovetopoint( a_players[i].origin, 1 ) )
|
||||
return true;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
zombies_off_building()
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", who );
|
||||
if ( !isplayer( who ) && isDefined( who.is_leaper ) && !who.is_leaper )
|
||||
|
||||
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 ( 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 )
|
||||
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;
|
||||
level.zombie_respawned_health[level.zombie_respawned_health.size] = who.health;
|
||||
}
|
||||
}
|
||||
}
|
||||
who maps/mp/zombies/_zm_spawner::reset_attack_spot();
|
||||
|
||||
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;
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -1,35 +1,37 @@
|
||||
//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();
|
||||
}
|
||||
|
||||
main_end() //checked matches cerberus output
|
||||
main_end()
|
||||
{
|
||||
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.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 );
|
||||
collision2.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||
collision2 ghost();
|
||||
collision3 = spawn( "script_model", ( 1768, 1507, 3075 ) );
|
||||
collision3 setmodel( "collision_wall_256x256x10_standard" );
|
||||
@ -45,11 +47,11 @@ spawned_collision_ffotd() //checked changed to match cerberus output
|
||||
collision3 ghost();
|
||||
collision4 = spawn( "script_model", ( 2257, 2374, 3101 ) );
|
||||
collision4 setmodel( "collision_wall_256x256x10_standard" );
|
||||
collision4.angles = vectorScale( ( 0, 1, 0 ), 270 );
|
||||
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.angles = vectorscale( ( 1, 0, 0 ), 347.6 );
|
||||
collision5 ghost();
|
||||
collision6b = spawn( "script_model", ( 3693, 1840, 1897 ) );
|
||||
collision6b setmodel( "collision_wall_256x256x10_standard" );
|
||||
@ -70,7 +72,7 @@ spawned_collision_ffotd() //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
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 );
|
||||
@ -86,26 +88,29 @@ eject_player_trigger_init() //checked matches cerberus output
|
||||
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 );
|
||||
}
|
||||
|
||||
player_eject_watcher() //checked matches cerberus output
|
||||
player_eject_watcher()
|
||||
{
|
||||
time = 0;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", who );
|
||||
|
||||
if ( is_player_valid( who ) )
|
||||
{
|
||||
while ( who istouching( self ) )
|
||||
{
|
||||
time++;
|
||||
|
||||
if ( time >= 6 )
|
||||
{
|
||||
if ( isDefined( self.point ) )
|
||||
if ( isdefined( self.point ) )
|
||||
{
|
||||
if ( !positionwouldtelefrag( self.point.origin ) )
|
||||
{
|
||||
@ -117,54 +122,64 @@ player_eject_watcher() //checked matches cerberus output
|
||||
}
|
||||
}
|
||||
}
|
||||
wait 1;
|
||||
|
||||
wait 1.0;
|
||||
}
|
||||
|
||||
time = 0;
|
||||
}
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
ejected_overrun( trig ) //checked changed to match cerberus output
|
||||
ejected_overrun( trig )
|
||||
{
|
||||
if ( !isDefined( trig.ejected ) )
|
||||
{
|
||||
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 != "" )
|
||||
|
||||
if ( isdefined( lethal ) && lethal != "" )
|
||||
{
|
||||
self takeweapon( lethal );
|
||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( lethal );
|
||||
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( lethal );
|
||||
}
|
||||
|
||||
tactical = self get_player_tactical_grenade();
|
||||
if ( isDefined( tactical ) && tactical != "" )
|
||||
|
||||
if ( isdefined( tactical ) && tactical != "" )
|
||||
{
|
||||
self takeweapon( tactical );
|
||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( tactical );
|
||||
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( tactical );
|
||||
}
|
||||
|
||||
mine = self get_player_placeable_mine();
|
||||
if ( isDefined( mine ) )
|
||||
|
||||
if ( isdefined( mine ) )
|
||||
{
|
||||
self takeweapon( mine );
|
||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( mine );
|
||||
maps\mp\zombies\_zm_weapons::unacquire_weapon_toggle( mine );
|
||||
}
|
||||
|
||||
melee_weapon = self get_player_melee_weapon();
|
||||
if ( isDefined( melee_weapon ) )
|
||||
|
||||
if ( isdefined( melee_weapon ) )
|
||||
{
|
||||
self takeweapon( melee_weapon );
|
||||
maps/mp/zombies/_zm_weapons::unacquire_weapon_toggle( 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 );
|
||||
@ -173,17 +188,17 @@ ejected_overrun( trig ) //checked changed to match cerberus output
|
||||
}
|
||||
}
|
||||
|
||||
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 ) )
|
||||
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();
|
||||
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,8 +1,10 @@
|
||||
#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()
|
||||
{
|
||||
@ -35,40 +37,39 @@ stage_logic()
|
||||
|
||||
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 ) )
|
||||
|
||||
foreach ( m_icon in a_dragon_icons )
|
||||
{
|
||||
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.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 ) )
|
||||
|
||||
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.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 );
|
||||
}
|
||||
_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 )
|
||||
|
||||
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 );
|
||||
a_atd2_lit_icons[ i ].angles = a_atd2_icons[ i ].angles;
|
||||
a_atd2_icons[ i ].lit_icon = a_atd2_lit_icons[ i ];
|
||||
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];
|
||||
}
|
||||
}
|
||||
|
||||
@ -76,27 +77,25 @@ 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 )
|
||||
|
||||
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 ] );
|
||||
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" ) )
|
||||
|
||||
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;
|
||||
wait 0.5;
|
||||
}
|
||||
/#
|
||||
iprintlnbold( "Standing on Elevators Complete" );
|
||||
#/
|
||||
a_dragon_icons = getentarray( "elevator_dragon_icon", "targetname" );
|
||||
_a105 = a_dragon_icons;
|
||||
_k105 = getFirstArrayKey( _a105 );
|
||||
while ( isDefined( _k105 ) )
|
||||
|
||||
foreach ( m_icon in a_dragon_icons )
|
||||
{
|
||||
m_icon = _a105[ _k105 ];
|
||||
v_off_pos = m_icon.m_lit_icon.origin;
|
||||
m_icon.m_lit_icon unlink();
|
||||
m_icon unlink();
|
||||
@ -105,8 +104,8 @@ sq_atd_elevators()
|
||||
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();
|
||||
@ -115,18 +114,22 @@ sq_atd_elevators()
|
||||
sq_atd_watch_elevator( str_flag )
|
||||
{
|
||||
level endon( "sq_atd_elevator_activated" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", e_who );
|
||||
while ( !isplayer( e_who ) )
|
||||
|
||||
if ( !isplayer( e_who ) )
|
||||
{
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
continue;
|
||||
}
|
||||
|
||||
flag_set( str_flag );
|
||||
|
||||
while ( isalive( e_who ) && e_who istouching( self ) )
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
wait 0.05;
|
||||
|
||||
flag_clear( str_flag );
|
||||
}
|
||||
}
|
||||
@ -136,16 +139,13 @@ 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++;
|
||||
}
|
||||
|
||||
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();
|
||||
/#
|
||||
@ -160,17 +160,19 @@ drg_puzzle_trig_think( n_order_id )
|
||||
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 )
|
||||
if ( self.drg_active )
|
||||
{
|
||||
level waittill_either( "sq_atd_drg_puzzle_complete", "drg_puzzle_reset" );
|
||||
while ( flag( "sq_atd_drg_puzzle_complete" ) )
|
||||
{
|
||||
|
||||
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;
|
||||
@ -187,27 +189,27 @@ drg_puzzle_trig_think( n_order_id )
|
||||
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" );
|
||||
#/
|
||||
wait 0,5;
|
||||
wait 0.5;
|
||||
}
|
||||
|
||||
while ( e_who istouching( self ) )
|
||||
{
|
||||
wait 0,5;
|
||||
}
|
||||
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" );
|
||||
@ -216,32 +218,32 @@ drg_puzzle_trig_watch_fade( m_lit, m_unlit, v_top, v_hidden )
|
||||
|
||||
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 );
|
||||
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" );
|
||||
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,11 +1,11 @@
|
||||
#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()
|
||||
{
|
||||
@ -45,9 +45,9 @@ stage_logic_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 );
|
||||
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 1 );
|
||||
wait_for_zombies_launched();
|
||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
||||
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
||||
stage_completed( "sq_1", "pts_1" );
|
||||
}
|
||||
|
||||
@ -56,10 +56,9 @@ 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;
|
||||
}
|
||||
wait 0.5;
|
||||
}
|
||||
|
||||
watch_zombie_flings()
|
||||
@ -68,15 +67,17 @@ watch_zombie_flings()
|
||||
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 )
|
||||
{
|
||||
|
||||
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;
|
||||
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
@ -88,9 +89,9 @@ stage_logic_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 );
|
||||
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 );
|
||||
maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
||||
level thread maxis_balls_placed();
|
||||
stage_completed( "sq_2", "pts_2" );
|
||||
}
|
||||
@ -99,31 +100,27 @@ 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 ) )
|
||||
|
||||
foreach ( s_lion_spot in a_lion_spots )
|
||||
{
|
||||
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 ) )
|
||||
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
player = _a145[ _k145 ];
|
||||
player.a_place_ball_trigs = [];
|
||||
if ( isDefined( player.zm_sq_has_ball ) )
|
||||
{
|
||||
|
||||
if ( isdefined( player.zm_sq_has_ball ) )
|
||||
player thread player_has_ball();
|
||||
}
|
||||
_k145 = getNextArrayKey( _a145, _k145 );
|
||||
}
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "zm_ball_picked_up", player );
|
||||
|
||||
player thread player_has_ball();
|
||||
}
|
||||
}
|
||||
@ -153,7 +150,9 @@ sq_pts_create_use_trigger( v_origin, radius, height, str_hint_string )
|
||||
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;
|
||||
@ -173,68 +172,64 @@ place_ball_think( t_place_ball, s_lion_spot )
|
||||
|
||||
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 ];
|
||||
|
||||
foreach ( player in a_players )
|
||||
player thread pts_watch_springpad_use( is_generator );
|
||||
_k240 = getNextArrayKey( _a240, _k240 );
|
||||
}
|
||||
}
|
||||
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
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 ) )
|
||||
|
||||
foreach ( s_spot in a_spots )
|
||||
{
|
||||
if ( isdefined( s_spot.springpad ) )
|
||||
n_count++;
|
||||
}
|
||||
_k279 = getNextArrayKey( _a279, _k279 );
|
||||
}
|
||||
|
||||
level notify( "sq_pts_springad_count" + n_count );
|
||||
}
|
||||
}
|
||||
@ -244,21 +239,20 @@ 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 ) )
|
||||
|
||||
foreach ( s_spot in a_spots )
|
||||
{
|
||||
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 ) );
|
||||
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 + ")" );
|
||||
#/
|
||||
if ( n_dot > 0,98 )
|
||||
if ( n_dot > 0.98 )
|
||||
{
|
||||
/#
|
||||
iprintlnbold( "Trample Steam IN PLACE: Dist(" + sqrt( n_dist ) + ") Dot(" + n_dot + ")" );
|
||||
@ -266,32 +260,31 @@ is_springpad_in_place( m_springpad, is_generator )
|
||||
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;
|
||||
wait 0.1;
|
||||
level thread pts_should_springpad_create_trigs( s_spot );
|
||||
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
||||
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 ) )
|
||||
|
||||
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 );
|
||||
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;
|
||||
|
||||
break;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
_k298 = getNextArrayKey( _a298, _k298 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@ -301,7 +294,8 @@ pts_springpad_fling( str_spot_name, m_buddy_springpad )
|
||||
n_anim_length1 = undefined;
|
||||
str_anim2 = undefined;
|
||||
n_anim_length2 = undefined;
|
||||
switch( str_spot_name )
|
||||
|
||||
switch ( str_spot_name )
|
||||
{
|
||||
case "lion_pair_1":
|
||||
str_anim1 = "dc";
|
||||
@ -320,6 +314,7 @@ pts_springpad_fling( str_spot_name, m_buddy_springpad )
|
||||
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" );
|
||||
@ -333,22 +328,23 @@ 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 ) )
|
||||
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;
|
||||
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 );
|
||||
}
|
||||
}
|
||||
|
||||
@ -368,24 +364,20 @@ pts_springpad_waittill_removed( m_springpad )
|
||||
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 ) )
|
||||
|
||||
foreach ( s_spot in a_spots )
|
||||
{
|
||||
if ( !isdefined( s_spot.springpad ) )
|
||||
is_clear = 1;
|
||||
}
|
||||
_k442 = getNextArrayKey( _a442, _k442 );
|
||||
}
|
||||
|
||||
if ( !is_clear )
|
||||
{
|
||||
flag_set( str_flag );
|
||||
}
|
||||
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
@ -393,54 +385,45 @@ wait_for_all_springpads_placed( str_type, str_flag )
|
||||
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 ) )
|
||||
|
||||
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 );
|
||||
}
|
||||
_k467 = getNextArrayKey( _a467, _k467 );
|
||||
}
|
||||
}
|
||||
|
||||
pts_should_springpad_create_trigs( s_lion_spot )
|
||||
{
|
||||
while ( isDefined( s_lion_spot.springpad ) && isDefined( s_lion_spot.springpad_buddy.springpad ) )
|
||||
if ( isdefined( s_lion_spot.springpad ) && isdefined( s_lion_spot.springpad_buddy.springpad ) )
|
||||
{
|
||||
a_players = getplayers();
|
||||
_a481 = a_players;
|
||||
_k481 = getFirstArrayKey( _a481 );
|
||||
while ( isDefined( _k481 ) )
|
||||
|
||||
foreach ( player in a_players )
|
||||
{
|
||||
player = _a481[ _k481 ];
|
||||
if ( isDefined( player.zm_sq_has_ball ) && player.zm_sq_has_ball )
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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 ) )
|
||||
{
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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;
|
||||
|
||||
s_lion_spot.pts_putdown_trigs[player.characterindex] = t_place_ball;
|
||||
level thread pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot );
|
||||
}
|
||||
|
||||
@ -454,117 +437,123 @@ pts_putdown_trigs_springpad_delete_watcher( player, s_lion_spot )
|
||||
|
||||
pts_reset_ball( s_lion_spot )
|
||||
{
|
||||
if ( isDefined( s_lion_spot.which_ball ) )
|
||||
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" ) );
|
||||
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 ) )
|
||||
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" ) );
|
||||
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 ) )
|
||||
|
||||
foreach ( s_lion_spot in a_lion_spots )
|
||||
{
|
||||
s_lion_spot = _a554[ _k554 ];
|
||||
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
|
||||
if ( !isdefined( s_lion_spot.pts_putdown_trigs ) )
|
||||
{
|
||||
continue;
|
||||
continue;
|
||||
}
|
||||
else if ( isDefined( s_lion_spot.pts_putdown_trigs[ player.characterindex ] ) )
|
||||
|
||||
if ( isdefined( s_lion_spot.pts_putdown_trigs[player.characterindex] ) )
|
||||
{
|
||||
s_lion_spot.pts_putdown_trigs[ player.characterindex ] delete();
|
||||
s_lion_spot.pts_putdown_trigs[player.characterindex] delete();
|
||||
arrayremoveindex( s_lion_spot.pts_putdown_trigs, player.characterindex, 1 );
|
||||
}
|
||||
_k554 = getNextArrayKey( _a554, _k554 );
|
||||
}
|
||||
}
|
||||
|
||||
pts_putdown_trigs_remove_for_spot( s_lion_spot )
|
||||
{
|
||||
if ( !isDefined( s_lion_spot.pts_putdown_trigs ) )
|
||||
{
|
||||
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 ];
|
||||
|
||||
foreach ( t_putdown in s_lion_spot.pts_putdown_trigs )
|
||||
t_putdown delete();
|
||||
_k575 = getNextArrayKey( _a575, _k575 );
|
||||
}
|
||||
|
||||
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" );
|
||||
|
||||
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" );
|
||||
|
||||
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" );
|
||||
|
||||
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" );
|
||||
|
||||
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" );
|
||||
|
||||
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" );
|
||||
|
||||
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" );
|
||||
|
||||
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" );
|
||||
|
||||
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" );
|
||||
|
||||
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" );
|
||||
|
||||
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,9 +1,11 @@
|
||||
#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()
|
||||
{
|
||||
@ -30,6 +32,7 @@ stage_logic()
|
||||
|
||||
exit_stage_1( success )
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
snipe_balls_wait()
|
||||
@ -37,22 +40,19 @@ 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 ) )
|
||||
|
||||
foreach ( m_ball in a_balls )
|
||||
{
|
||||
if ( isdefined( m_ball ) )
|
||||
is_complete = 0;
|
||||
}
|
||||
_k50 = getNextArrayKey( _a50, _k50 );
|
||||
}
|
||||
}
|
||||
/#
|
||||
iprintlnbold( "All Balls Shot" );
|
||||
@ -64,61 +64,65 @@ 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 )
|
||||
|
||||
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 ) )
|
||||
|
||||
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 );
|
||||
playfx( level._effect["sidequest_flash"], self.origin );
|
||||
str_noteworthy = self.script_noteworthy;
|
||||
self delete();
|
||||
wait 0,5;
|
||||
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 );
|
||||
|
||||
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();
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
lion_ball_enable_pickup()
|
||||
{
|
||||
self endon( "sq_sliquified" );
|
||||
while ( 1 )
|
||||
|
||||
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 ) )
|
||||
|
||||
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" );
|
||||
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 );
|
||||
@ -128,21 +132,24 @@ lion_ball_enable_pickup()
|
||||
self.player.t_putdown_ball = self.t_putdown;
|
||||
self ball_pickup_waittill_change();
|
||||
play_spark = 0;
|
||||
if ( !isDefined( self.t_putdown ) )
|
||||
|
||||
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 );
|
||||
playfx( level._effect["sidequest_flash"], self.origin );
|
||||
}
|
||||
|
||||
self show();
|
||||
self setcandamage( 1 );
|
||||
self.player.zm_sq_has_ball = undefined;
|
||||
@ -173,23 +180,23 @@ 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" );
|
||||
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()
|
||||
|
@ -1,9 +1,11 @@
|
||||
#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()
|
||||
{
|
||||
@ -20,7 +22,7 @@ init_2()
|
||||
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 );
|
||||
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 );
|
||||
}
|
||||
|
||||
@ -52,40 +54,39 @@ ssp1_sliquify_balls()
|
||||
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++;
|
||||
}
|
||||
|
||||
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;
|
||||
wait 0.5;
|
||||
}
|
||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
||||
|
||||
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 playloopsound( "zmb_sq_ball_rotate_loop", 0.25 );
|
||||
}
|
||||
|
||||
ssp1_rotate_ball()
|
||||
{
|
||||
while ( isDefined( self ) )
|
||||
while ( isdefined( self ) )
|
||||
{
|
||||
self rotateyaw( 360, 1 );
|
||||
wait 0,9;
|
||||
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 );
|
||||
maps\mp\zm_highrise_sq::light_dragon_fireworks( "r", 2 );
|
||||
}
|
||||
|
||||
stage_logic_2()
|
||||
@ -102,26 +103,22 @@ 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;
|
||||
level thread maps\mp\zm_highrise_sq::maxissay( "vox_maxi_sidequest_reincar_zombie_0" );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( n_count >= 15 )
|
||||
else if ( n_count >= 15 )
|
||||
{
|
||||
/#
|
||||
iprintlnbold( "Corpse Count Reached" );
|
||||
@ -132,53 +129,48 @@ corpse_room_watcher()
|
||||
level notify( "end_revive_watcher" );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
ssp_2_zombie_death_check()
|
||||
{
|
||||
self waittill( "death" );
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self ) )
|
||||
return;
|
||||
}
|
||||
|
||||
t_corpse_room = getent( "corpse_room_trigger", "targetname" );
|
||||
|
||||
if ( self istouching( t_corpse_room ) )
|
||||
{
|
||||
level notify( "ssp2_corpse_made" );
|
||||
}
|
||||
level notify( "ssp2_corpse_made", 1 );
|
||||
else
|
||||
{
|
||||
level notify( "ssp2_corpse_made" );
|
||||
}
|
||||
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 )
|
||||
|
||||
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;
|
||||
_a206 = a_corpses;
|
||||
_k206 = getFirstArrayKey( _a206 );
|
||||
while ( isDefined( _k206 ) )
|
||||
|
||||
foreach ( m_corpse in a_corpses )
|
||||
{
|
||||
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();
|
||||
@ -194,9 +186,11 @@ corpse_room_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;
|
||||
@ -213,9 +207,9 @@ corpse_room_revive_watcher()
|
||||
ssp2_advance_dragon()
|
||||
{
|
||||
flag_wait( "ssp2_corpses_in_place" );
|
||||
maps/mp/zm_highrise_sq::light_dragon_fireworks( "m", 1 );
|
||||
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 );
|
||||
maps\mp\zm_highrise_sq::light_dragon_fireworks( "m", 2 );
|
||||
}
|
||||
|
||||
exit_stage_1( success )
|
||||
@ -225,82 +219,80 @@ exit_stage_1( success )
|
||||
|
||||
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 )
|
||||
{
|
||||
/#
|
||||
iprintlnbold( "MODEL COMPLETE: " + str_complete_flag );
|
||||
#/
|
||||
self notify( "sq_sliquified" );
|
||||
if ( isDefined( self.t_pickup ) )
|
||||
{
|
||||
|
||||
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 )
|
||||
{
|
||||
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" );
|
||||
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_1" );
|
||||
}
|
||||
|
||||
vo_sliquify_fail_watch()
|
||||
{
|
||||
flag_wait( "sq_ball_picked_up" );
|
||||
maps/mp/zm_highrise_sq::richtofensay( "vox_zmba_sidequest_fail_1" );
|
||||
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" );
|
||||
|
||||
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" );
|
||||
|
||||
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" );
|
||||
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" );
|
||||
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" );
|
||||
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()
|
||||
@ -308,21 +300,19 @@ 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" );
|
||||
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,8 +1,10 @@
|
||||
#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()
|
||||
{
|
||||
@ -25,55 +27,56 @@ spawned_collision_fix()
|
||||
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.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, 0, 0 ), 330 );
|
||||
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, 0, 0 ), 330 );
|
||||
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, 0, 0 ), 330 );
|
||||
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, 0, 0 ), 330 );
|
||||
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, 0, 0 ), 330 );
|
||||
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, 0, 0 ), 330 );
|
||||
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, 0, 0 ), 330 );
|
||||
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, 0, 0 ), 330 );
|
||||
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, 0, 0 ), 330 );
|
||||
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, 0, 0 ), 330 );
|
||||
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, 0, 0 ), 330 );
|
||||
collision12.angles = vectorscale( ( 0, 1, 0 ), 330.0 );
|
||||
collision12 ghost();
|
||||
collisione1 = spawn( "script_model", ( 1649, 2164, 2843 ) );
|
||||
collisione1 setmodel( "collision_wall_256x256x10_standard" );
|
||||
@ -85,59 +88,59 @@ spawned_collision_fix()
|
||||
collisione2 ghost();
|
||||
collisione3 = spawn( "script_model", ( 1478, 1216, 2843 ) );
|
||||
collisione3 setmodel( "collision_wall_256x256x10_standard" );
|
||||
collisione3.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
||||
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, 0, 0 ), 270 );
|
||||
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, 0, 0 ), 270 );
|
||||
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, 0, 0 ), 270 );
|
||||
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, 0, 0 ), 270 );
|
||||
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, 0 ), 6,20013 );
|
||||
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.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.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.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.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, 0, 0 ), 330 );
|
||||
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, 0, 0 ), 330 );
|
||||
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, 0, 0 ), 8,6 );
|
||||
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( ( 0, 0, 0 ), 3,2 );
|
||||
collision22.angles = vectorscale( ( 1, 0, 0 ), 3.2 );
|
||||
collision22 ghost();
|
||||
collision23 = spawn( "script_model", ( 2222, 1488, 3280 ) );
|
||||
collision23 setmodel( "collision_geo_32x32x128_standard" );
|
||||
@ -152,33 +155,32 @@ spawned_collision_fix()
|
||||
|
||||
connect_zones_for_ffotd( zone_name_a, zone_name_b, one_way )
|
||||
{
|
||||
if ( !isDefined( 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 ( !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( 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.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 );
|
||||
@ -193,70 +195,64 @@ pathfinding_override_fix()
|
||||
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 );
|
||||
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 );
|
||||
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_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_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_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_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_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_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_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_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_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_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_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 );
|
||||
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 ) )
|
||||
|
||||
foreach ( node in all_nodes )
|
||||
{
|
||||
node = _a331[ _k331 ];
|
||||
if ( node.origin[ 0 ] == 3598,2 )
|
||||
if ( node.origin[0] == 3598.2 )
|
||||
{
|
||||
deletepathnode( node );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
_k331 = getNextArrayKey( _a331, _k331 );
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -264,17 +260,15 @@ pathfinding_override_fix()
|
||||
highrise_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 );
|
||||
}
|
||||
|
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 );
|
||||
#/
|
||||
}
|
@ -1,49 +1,48 @@
|
||||
#include maps/mp/zombies/_zm_buildables;
|
||||
#include maps/mp/zombies/_zm_power;
|
||||
#include maps/mp/zombies/_zm_unitrigger;
|
||||
#include maps/mp/zombies/_zm;
|
||||
#include maps/mp/gametypes_zm/_weaponobjects;
|
||||
#include maps/mp/zombies/_zm_equipment;
|
||||
#include maps/mp/zombies/_zm_utility;
|
||||
#include maps/mp/_utility;
|
||||
#include common_scripts/utility;
|
||||
|
||||
#using_animtree( "zombie_springpad" );
|
||||
// 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\gametypes_zm\_weaponobjects;
|
||||
#include maps\mp\zombies\_zm;
|
||||
#include maps\mp\zombies\_zm_unitrigger;
|
||||
#include maps\mp\zombies\_zm_power;
|
||||
#include maps\mp\zombies\_zm_buildables;
|
||||
|
||||
init( pickupstring, howtostring )
|
||||
{
|
||||
if ( !maps/mp/zombies/_zm_equipment::is_equipment_included( "equip_springpad_zm" ) )
|
||||
{
|
||||
if ( !maps\mp\zombies\_zm_equipment::is_equipment_included( "equip_springpad_zm" ) )
|
||||
return;
|
||||
}
|
||||
|
||||
level.springpad_name = "equip_springpad_zm";
|
||||
init_animtree();
|
||||
maps/mp/zombies/_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad );
|
||||
maps/mp/zombies/_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" );
|
||||
maps\mp\zombies\_zm_equipment::register_equipment( "equip_springpad_zm", pickupstring, howtostring, "zom_hud_trample_steam_complete", "springpad", undefined, ::transferspringpad, ::dropspringpad, ::pickupspringpad, ::placespringpad );
|
||||
maps\mp\zombies\_zm_equipment::add_placeable_equipment( "equip_springpad_zm", "p6_anim_zm_buildable_view_tramplesteam" );
|
||||
level thread onplayerconnect();
|
||||
maps/mp/gametypes_zm/_weaponobjects::createretrievablehint( "equip_springpad", pickupstring );
|
||||
level._effect[ "springpade_on" ] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" );
|
||||
if ( -1 )
|
||||
{
|
||||
setdvar( "player_useRadius_zm", 96 );
|
||||
}
|
||||
maps\mp\gametypes_zm\_weaponobjects::createretrievablehint( "equip_springpad", pickupstring );
|
||||
level._effect["springpade_on"] = loadfx( "maps/zombie_highrise/fx_highrise_trmpl_steam_os" );
|
||||
|
||||
if ( !isdefined( level.springpad_trigger_radius ) )
|
||||
level.springpad_trigger_radius = 72;
|
||||
|
||||
thread wait_init_damage();
|
||||
}
|
||||
|
||||
wait_init_damage()
|
||||
{
|
||||
while ( !isDefined( level.zombie_vars ) || !isDefined( level.zombie_vars[ "zombie_health_start" ] ) )
|
||||
{
|
||||
while ( !isdefined( level.zombie_vars ) || !isdefined( level.zombie_vars["zombie_health_start"] ) )
|
||||
wait 1;
|
||||
}
|
||||
level.springpad_damage = maps/mp/zombies/_zm::ai_zombie_health( 50 );
|
||||
|
||||
level.springpad_damage = maps\mp\zombies\_zm::ai_zombie_health( 50 );
|
||||
}
|
||||
|
||||
onplayerconnect()
|
||||
{
|
||||
for ( ;; )
|
||||
for (;;)
|
||||
{
|
||||
level waittill( "connecting", player );
|
||||
|
||||
player thread onplayerspawned();
|
||||
}
|
||||
}
|
||||
@ -52,9 +51,11 @@ onplayerspawned()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
self thread setupwatchers();
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
|
||||
self thread watchspringpaduse();
|
||||
}
|
||||
}
|
||||
@ -62,8 +63,9 @@ onplayerspawned()
|
||||
setupwatchers()
|
||||
{
|
||||
self waittill( "weapon_watchers_created" );
|
||||
watcher = maps/mp/gametypes_zm/_weaponobjects::getweaponobjectwatcher( "equip_springpad" );
|
||||
watcher.onspawnretrievetriggers = ::maps/mp/zombies/_zm_equipment::equipment_onspawnretrievableweaponobject;
|
||||
|
||||
watcher = maps\mp\gametypes_zm\_weaponobjects::getweaponobjectwatcher( "equip_springpad" );
|
||||
watcher.onspawnretrievetriggers = maps\mp\zombies\_zm_equipment::equipment_onspawnretrievableweaponobject;
|
||||
}
|
||||
|
||||
watchspringpaduse()
|
||||
@ -72,9 +74,11 @@ watchspringpaduse()
|
||||
self endon( "watchSpringPadUse" );
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "equipment_placed", weapon, weapname );
|
||||
|
||||
if ( weapname == level.springpad_name )
|
||||
{
|
||||
self cleanupoldspringpad();
|
||||
@ -86,17 +90,19 @@ watchspringpaduse()
|
||||
|
||||
cleanupoldspringpad()
|
||||
{
|
||||
if ( isDefined( self.buildablespringpad ) )
|
||||
if ( isdefined( self.buildablespringpad ) )
|
||||
{
|
||||
if ( isDefined( self.buildablespringpad.stub ) )
|
||||
if ( isdefined( self.buildablespringpad.stub ) )
|
||||
{
|
||||
thread maps/mp/zombies/_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
||||
thread maps\mp\zombies\_zm_unitrigger::unregister_unitrigger( self.buildablespringpad.stub );
|
||||
self.buildablespringpad.stub = undefined;
|
||||
}
|
||||
|
||||
self.buildablespringpad delete();
|
||||
self.springpad_kills = undefined;
|
||||
}
|
||||
if ( isDefined( level.springpad_sound_ent ) )
|
||||
|
||||
if ( isdefined( level.springpad_sound_ent ) )
|
||||
{
|
||||
level.springpad_sound_ent delete();
|
||||
level.springpad_sound_ent = undefined;
|
||||
@ -107,31 +113,41 @@ watchforcleanup()
|
||||
{
|
||||
self notify( "springpad_cleanup" );
|
||||
self endon( "springpad_cleanup" );
|
||||
self waittill_any( "death", "disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" );
|
||||
self waittill_any( "death_or_disconnect", "equip_springpad_zm_taken", "equip_springpad_zm_pickup" );
|
||||
cleanupoldspringpad();
|
||||
}
|
||||
|
||||
placespringpad( origin, angles )
|
||||
{
|
||||
item = self maps/mp/zombies/_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, 96, -32 );
|
||||
if ( isDefined( item ) )
|
||||
if ( isdefined( self.turret_placement ) && !self.turret_placement["result"] )
|
||||
{
|
||||
forward = anglestoforward( angles );
|
||||
origin -= -24 * forward;
|
||||
}
|
||||
|
||||
item = self maps\mp\zombies\_zm_equipment::placed_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", origin, angles, level.springpad_trigger_radius, -24 );
|
||||
|
||||
if ( isdefined( item ) )
|
||||
{
|
||||
item.springpad_kills = self.springpad_kills;
|
||||
item.requires_pickup = 1;
|
||||
item.zombie_attack_callback = ::springpad_add_fling_ent;
|
||||
item.zombie_attack_callback = ::springpad_fling_attacker;
|
||||
}
|
||||
|
||||
self.springpad_kills = undefined;
|
||||
return item;
|
||||
}
|
||||
|
||||
dropspringpad()
|
||||
{
|
||||
item = self maps/mp/zombies/_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, 96, -32 );
|
||||
if ( isDefined( item ) )
|
||||
item = self maps\mp\zombies\_zm_equipment::dropped_equipment_think( "p6_anim_zm_buildable_tramplesteam", "equip_springpad_zm", self.origin, self.angles, level.springpad_trigger_radius, -24 );
|
||||
|
||||
if ( isdefined( item ) )
|
||||
{
|
||||
item.springpad_kills = self.springpad_kills;
|
||||
item.requires_pickup = 1;
|
||||
}
|
||||
|
||||
self.springpad_kills = undefined;
|
||||
return item;
|
||||
}
|
||||
@ -146,22 +162,16 @@ transferspringpad( fromplayer, toplayer )
|
||||
{
|
||||
buildablespringpad = toplayer.buildablespringpad;
|
||||
toarmed = 0;
|
||||
if ( isDefined( buildablespringpad ) )
|
||||
{
|
||||
if ( isDefined( buildablespringpad.is_armed ) )
|
||||
{
|
||||
toarmed = buildablespringpad.is_armed;
|
||||
}
|
||||
}
|
||||
|
||||
if ( isdefined( buildablespringpad ) )
|
||||
toarmed = isdefined( buildablespringpad.is_armed ) && buildablespringpad.is_armed;
|
||||
|
||||
springpad_kills = toplayer.springpad_kills;
|
||||
fromarmed = 0;
|
||||
if ( isDefined( fromplayer.buildablespringpad ) )
|
||||
{
|
||||
if ( isDefined( fromplayer.buildablespringpad.is_armed ) )
|
||||
{
|
||||
fromarmed = fromplayer.buildablespringpad.is_armed;
|
||||
}
|
||||
}
|
||||
|
||||
if ( isdefined( fromplayer.buildablespringpad ) )
|
||||
fromarmed = isdefined( fromplayer.buildablespringpad.is_armed ) && fromplayer.buildablespringpad.is_armed;
|
||||
|
||||
toplayer.buildablespringpad = fromplayer.buildablespringpad;
|
||||
toplayer.buildablespringpad.original_owner = toplayer;
|
||||
toplayer.buildablespringpad.owner = toplayer;
|
||||
@ -171,25 +181,23 @@ transferspringpad( fromplayer, toplayer )
|
||||
fromplayer.buildablespringpad = buildablespringpad;
|
||||
fromplayer.springpad_kills = springpad_kills;
|
||||
fromplayer notify( "equip_springpad_zm_taken" );
|
||||
if ( isDefined( fromplayer.buildablespringpad ) )
|
||||
|
||||
if ( isdefined( fromplayer.buildablespringpad ) )
|
||||
{
|
||||
fromplayer thread startspringpaddeploy( fromplayer.buildablespringpad, toarmed );
|
||||
fromplayer.buildablespringpad.original_owner = fromplayer;
|
||||
fromplayer.buildablespringpad.owner = fromplayer;
|
||||
}
|
||||
else
|
||||
{
|
||||
fromplayer maps/mp/zombies/_zm_equipment::equipment_release( "equip_springpad_zm" );
|
||||
}
|
||||
fromplayer maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" );
|
||||
}
|
||||
|
||||
springpad_in_range( delta, origin, radius )
|
||||
{
|
||||
if ( distancesquared( self.target.origin, origin ) < ( radius * radius ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
if ( distancesquared( self.target.origin, origin ) < radius * radius )
|
||||
return true;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
springpad_power_on( origin, radius )
|
||||
@ -197,12 +205,11 @@ springpad_power_on( origin, radius )
|
||||
/#
|
||||
println( "^1ZM POWER: trap on\n" );
|
||||
#/
|
||||
if ( !isDefined( self.target ) )
|
||||
{
|
||||
if ( !isdefined( self.target ) )
|
||||
return;
|
||||
}
|
||||
|
||||
self.target.power_on = 1;
|
||||
self.target.power_on_time = getTime();
|
||||
self.target.power_on_time = gettime();
|
||||
}
|
||||
|
||||
springpad_power_off( origin, radius )
|
||||
@ -210,10 +217,9 @@ springpad_power_off( origin, radius )
|
||||
/#
|
||||
println( "^1ZM POWER: trap off\n" );
|
||||
#/
|
||||
if ( !isDefined( self.target ) )
|
||||
{
|
||||
if ( !isdefined( self.target ) )
|
||||
return;
|
||||
}
|
||||
|
||||
self.target.power_on = 0;
|
||||
}
|
||||
|
||||
@ -224,45 +230,50 @@ startspringpaddeploy( weapon, armed )
|
||||
self endon( "equip_springpad_zm_taken" );
|
||||
self thread watchforcleanup();
|
||||
electricradius = 45;
|
||||
if ( isDefined( self.springpad_kills ) )
|
||||
|
||||
if ( isdefined( self.springpad_kills ) )
|
||||
{
|
||||
weapon.springpad_kills = self.springpad_kills;
|
||||
self.springpad_kills = undefined;
|
||||
}
|
||||
if ( !isDefined( weapon.springpad_kills ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( weapon.springpad_kills ) )
|
||||
weapon.springpad_kills = 0;
|
||||
}
|
||||
if ( isDefined( weapon ) )
|
||||
|
||||
if ( isdefined( weapon ) )
|
||||
{
|
||||
/#
|
||||
weapon thread debugspringpad( electricradius );
|
||||
#/
|
||||
if ( isDefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power )
|
||||
if ( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power )
|
||||
{
|
||||
weapon.power_on = 0;
|
||||
maps/mp/zombies/_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, ::maps/mp/zombies/_zm_power::cost_high, 1, weapon.power_on, weapon );
|
||||
maps\mp\zombies\_zm_power::add_temp_powered_item( ::springpad_power_on, ::springpad_power_off, ::springpad_in_range, maps\mp\zombies\_zm_power::cost_high, 1, weapon.power_on, weapon );
|
||||
}
|
||||
else
|
||||
{
|
||||
weapon.power_on = 1;
|
||||
}
|
||||
|
||||
if ( !weapon.power_on )
|
||||
{
|
||||
self iprintlnbold( &"ZOMBIE_NEED_LOCAL_POWER" );
|
||||
}
|
||||
|
||||
self thread springpadthink( weapon, electricradius, armed );
|
||||
if ( isDefined( level.equipment_springpad_needs_power ) && !level.equipment_springpad_needs_power )
|
||||
|
||||
if ( !( isdefined( level.equipment_springpad_needs_power ) && level.equipment_springpad_needs_power ) )
|
||||
{
|
||||
|
||||
}
|
||||
self thread maps/mp/zombies/_zm_buildables::delete_on_disconnect( weapon );
|
||||
|
||||
self thread maps\mp\zombies\_zm_buildables::delete_on_disconnect( weapon );
|
||||
|
||||
weapon waittill( "death" );
|
||||
if ( isDefined( level.springpad_sound_ent ) )
|
||||
|
||||
if ( isdefined( level.springpad_sound_ent ) )
|
||||
{
|
||||
level.springpad_sound_ent playsound( "wpn_zmb_electrap_stop" );
|
||||
level.springpad_sound_ent delete();
|
||||
level.springpad_sound_ent = undefined;
|
||||
}
|
||||
|
||||
self notify( "springpad_cleanup" );
|
||||
}
|
||||
}
|
||||
@ -272,6 +283,8 @@ init_animtree()
|
||||
scriptmodelsuseanimtree( -1 );
|
||||
}
|
||||
|
||||
#using_animtree("zombie_springpad");
|
||||
|
||||
springpad_animate( weapon, armed )
|
||||
{
|
||||
self endon( "death" );
|
||||
@ -284,12 +297,13 @@ springpad_animate( weapon, armed )
|
||||
l_animlength = getanimlength( %o_zombie_buildable_tramplesteam_launch );
|
||||
weapon thread springpad_audio();
|
||||
prearmed = 0;
|
||||
if ( isDefined( armed ) && armed )
|
||||
{
|
||||
|
||||
if ( isdefined( armed ) && armed )
|
||||
prearmed = 1;
|
||||
}
|
||||
|
||||
fast_reset = 0;
|
||||
while ( isDefined( weapon ) )
|
||||
|
||||
while ( isdefined( weapon ) )
|
||||
{
|
||||
if ( !prearmed )
|
||||
{
|
||||
@ -297,32 +311,35 @@ springpad_animate( weapon, armed )
|
||||
{
|
||||
weapon setanim( %o_zombie_buildable_tramplesteam_reset_zombie );
|
||||
weapon thread playspringpadresetaudio( f_animlength );
|
||||
wait f_animlength;
|
||||
wait( f_animlength );
|
||||
}
|
||||
else
|
||||
{
|
||||
weapon setanim( %o_zombie_buildable_tramplesteam_reset );
|
||||
weapon thread playspringpadresetaudio( r_animlength );
|
||||
wait r_animlength;
|
||||
wait( r_animlength );
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,05;
|
||||
}
|
||||
wait 0.05;
|
||||
|
||||
prearmed = 0;
|
||||
weapon notify( "armed" );
|
||||
fast_reset = 0;
|
||||
if ( isDefined( weapon ) )
|
||||
|
||||
if ( isdefined( weapon ) )
|
||||
{
|
||||
weapon setanim( %o_zombie_buildable_tramplesteam_compressed_idle );
|
||||
|
||||
weapon waittill( "fling", fast );
|
||||
|
||||
fast_reset = fast;
|
||||
}
|
||||
if ( isDefined( weapon ) )
|
||||
|
||||
if ( isdefined( weapon ) )
|
||||
{
|
||||
weapon setanim( %o_zombie_buildable_tramplesteam_launch );
|
||||
wait l_animlength;
|
||||
wait( l_animlength );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -333,14 +350,16 @@ playspringpadresetaudio( time )
|
||||
ent = spawn( "script_origin", self.origin );
|
||||
ent playloopsound( "zmb_highrise_launcher_reset_loop" );
|
||||
self thread deleteentwhensounddone( time, ent );
|
||||
|
||||
self waittill( "death" );
|
||||
|
||||
ent delete();
|
||||
}
|
||||
|
||||
deleteentwhensounddone( time, ent )
|
||||
{
|
||||
self endon( "death" );
|
||||
wait time;
|
||||
wait( time );
|
||||
self notify( "springpadAudioCleanup" );
|
||||
ent delete();
|
||||
}
|
||||
@ -349,7 +368,9 @@ springpad_audio()
|
||||
{
|
||||
loop_ent = spawn( "script_origin", self.origin );
|
||||
loop_ent playloopsound( "zmb_highrise_launcher_loop" );
|
||||
|
||||
self waittill( "death" );
|
||||
|
||||
loop_ent delete();
|
||||
}
|
||||
|
||||
@ -357,9 +378,10 @@ springpad_fx( weapon )
|
||||
{
|
||||
weapon endon( "death" );
|
||||
self endon( "equip_springpad_zm_taken" );
|
||||
while ( isDefined( weapon ) )
|
||||
|
||||
while ( isdefined( weapon ) )
|
||||
{
|
||||
playfxontag( level._effect[ "springpade_on" ], weapon, "tag_origin" );
|
||||
playfxontag( level._effect["springpade_on"], weapon, "tag_origin" );
|
||||
wait 1;
|
||||
}
|
||||
}
|
||||
@ -372,96 +394,106 @@ springpadthink( weapon, electricradius, armed )
|
||||
weapon endon( "death" );
|
||||
radiussquared = electricradius * electricradius;
|
||||
trigger = spawn( "trigger_box", weapon getcentroid(), 1, 48, 48, 32 );
|
||||
trigger.origin += anglesToForward( flat_angle( weapon.angles ) ) * -15;
|
||||
trigger.origin += anglestoforward( flat_angle( weapon.angles ) ) * -15;
|
||||
trigger.angles = weapon.angles;
|
||||
trigger enablelinkto();
|
||||
trigger linkto( weapon );
|
||||
weapon.trigger = trigger;
|
||||
/#
|
||||
trigger.extent = ( 24, 24, 16 );
|
||||
trigger.extent = ( 24.0, 24.0, 16.0 );
|
||||
#/
|
||||
weapon thread springpadthinkcleanup( trigger );
|
||||
direction_forward = anglesToForward( flat_angle( weapon.angles ) + vectorScale( ( 0, 0, 1 ), 60 ) );
|
||||
direction_vector = vectorScale( direction_forward, 1024 );
|
||||
direction_forward = anglestoforward( flat_angle( weapon.angles ) + vectorscale( ( -1, 0, 0 ), 60.0 ) );
|
||||
direction_vector = vectorscale( direction_forward, 1024 );
|
||||
direction_origin = weapon.origin + direction_vector;
|
||||
home_angles = weapon.angles;
|
||||
weapon.is_armed = 0;
|
||||
self thread springpad_fx( weapon );
|
||||
self thread springpad_animate( weapon, armed );
|
||||
|
||||
weapon waittill( "armed" );
|
||||
|
||||
weapon.is_armed = 1;
|
||||
weapon.fling_targets = [];
|
||||
self thread targeting_thread( weapon, trigger );
|
||||
while ( isDefined( weapon ) )
|
||||
|
||||
while ( isdefined( weapon ) )
|
||||
{
|
||||
wait_for_targets( weapon );
|
||||
if ( isDefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
||||
|
||||
if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
||||
{
|
||||
weapon notify( "fling" );
|
||||
weapon notify( "fling", weapon.zombies_only );
|
||||
weapon.is_armed = 0;
|
||||
weapon.zombies_only = 1;
|
||||
_a520 = weapon.fling_targets;
|
||||
_k520 = getFirstArrayKey( _a520 );
|
||||
while ( isDefined( _k520 ) )
|
||||
|
||||
foreach ( ent in weapon.fling_targets )
|
||||
{
|
||||
ent = _a520[ _k520 ];
|
||||
if ( isplayer( ent ) )
|
||||
{
|
||||
ent thread player_fling( weapon.origin + vectorScale( ( 0, 0, 1 ), 30 ), weapon.angles, direction_vector );
|
||||
ent thread player_fling( weapon.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), weapon.angles, direction_vector, weapon );
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( ent ) )
|
||||
{
|
||||
if ( !isDefined( self.num_zombies_flung ) )
|
||||
|
||||
if ( isdefined( ent ) && isdefined( ent.custom_springpad_fling ) )
|
||||
{
|
||||
if ( !isdefined( self.num_zombies_flung ) )
|
||||
self.num_zombies_flung = 0;
|
||||
}
|
||||
|
||||
self.num_zombies_flung++;
|
||||
self notify( "zombie_flung" );
|
||||
if ( !isDefined( weapon.fling_scaler ) )
|
||||
ent thread [[ ent.custom_springpad_fling ]]( weapon, self );
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( isdefined( ent ) )
|
||||
{
|
||||
if ( !isdefined( self.num_zombies_flung ) )
|
||||
self.num_zombies_flung = 0;
|
||||
|
||||
self.num_zombies_flung++;
|
||||
self notify( "zombie_flung" );
|
||||
|
||||
if ( !isdefined( weapon.fling_scaler ) )
|
||||
weapon.fling_scaler = 1;
|
||||
}
|
||||
if ( isDefined( weapon.direction_vec_override ) )
|
||||
{
|
||||
|
||||
if ( isdefined( weapon.direction_vec_override ) )
|
||||
direction_vector = weapon.direction_vec_override;
|
||||
}
|
||||
|
||||
ent dodamage( ent.health + 666, ent.origin );
|
||||
ent startragdoll();
|
||||
ent launchragdoll( ( direction_vector / 4 ) * weapon.fling_scaler );
|
||||
ent launchragdoll( direction_vector / 4 * weapon.fling_scaler );
|
||||
weapon.springpad_kills++;
|
||||
}
|
||||
}
|
||||
_k520 = getNextArrayKey( _a520, _k520 );
|
||||
}
|
||||
|
||||
if ( weapon.springpad_kills >= 28 )
|
||||
{
|
||||
self thread springpad_expired( weapon );
|
||||
}
|
||||
|
||||
weapon.fling_targets = [];
|
||||
|
||||
weapon waittill( "armed" );
|
||||
|
||||
weapon.is_armed = 1;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
wait 0.1;
|
||||
}
|
||||
}
|
||||
|
||||
wait_for_targets( weapon )
|
||||
{
|
||||
weapon endon( "hi_priority_target" );
|
||||
while ( isDefined( weapon ) )
|
||||
|
||||
while ( isdefined( weapon ) )
|
||||
{
|
||||
if ( isDefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
||||
if ( isdefined( weapon.fling_targets ) && weapon.fling_targets.size > 0 )
|
||||
{
|
||||
wait 0,15;
|
||||
wait 0.15;
|
||||
return;
|
||||
}
|
||||
wait 0,05;
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
}
|
||||
|
||||
@ -472,55 +504,50 @@ targeting_thread( weapon, trigger )
|
||||
self endon( "equip_springpad_zm_taken" );
|
||||
weapon endon( "death" );
|
||||
weapon.zombies_only = 1;
|
||||
while ( isDefined( weapon ) )
|
||||
|
||||
while ( isdefined( weapon ) )
|
||||
{
|
||||
if ( weapon.is_armed )
|
||||
{
|
||||
zombies = getaiarray( level.zombie_team );
|
||||
_a594 = zombies;
|
||||
_k594 = getFirstArrayKey( _a594 );
|
||||
while ( isDefined( _k594 ) )
|
||||
{
|
||||
zombie = _a594[ _k594 ];
|
||||
if ( !isDefined( zombie ) || !isalive( zombie ) )
|
||||
{
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad )
|
||||
{
|
||||
break;
|
||||
}
|
||||
else
|
||||
|
||||
foreach ( zombie in zombies )
|
||||
{
|
||||
if ( !isdefined( zombie ) || !isalive( zombie ) )
|
||||
continue;
|
||||
|
||||
if ( isdefined( zombie.ignore_spring_pad ) && zombie.ignore_spring_pad )
|
||||
continue;
|
||||
|
||||
if ( zombie istouching( trigger ) )
|
||||
{
|
||||
weapon springpad_add_fling_ent( zombie );
|
||||
}
|
||||
}
|
||||
}
|
||||
_k594 = getNextArrayKey( _a594, _k594 );
|
||||
}
|
||||
|
||||
players = get_players();
|
||||
_a622 = players;
|
||||
_k622 = getFirstArrayKey( _a622 );
|
||||
while ( isDefined( _k622 ) )
|
||||
|
||||
foreach ( player in players )
|
||||
{
|
||||
player = _a622[ _k622 ];
|
||||
if ( is_player_valid( player ) && player istouching( trigger ) )
|
||||
{
|
||||
weapon springpad_add_fling_ent( player );
|
||||
weapon.zombies_only = 0;
|
||||
}
|
||||
_k622 = getNextArrayKey( _a622, _k622 );
|
||||
}
|
||||
|
||||
if ( !weapon.zombies_only )
|
||||
{
|
||||
weapon notify( "hi_priority_target" );
|
||||
}
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
wait 0,05;
|
||||
}
|
||||
}
|
||||
|
||||
springpad_fling_attacker( ent )
|
||||
{
|
||||
springpad_add_fling_ent( ent );
|
||||
|
||||
if ( isdefined( level.springpad_attack_delay ) )
|
||||
wait( level.springpad_attack_delay );
|
||||
}
|
||||
|
||||
springpad_add_fling_ent( ent )
|
||||
@ -530,15 +557,31 @@ springpad_add_fling_ent( ent )
|
||||
|
||||
springpad_expired( weapon )
|
||||
{
|
||||
weapon maps/mp/zombies/_zm_equipment::dropped_equipment_destroy( 1 );
|
||||
self maps/mp/zombies/_zm_equipment::equipment_release( "equip_springpad_zm" );
|
||||
weapon maps\mp\zombies\_zm_equipment::dropped_equipment_destroy( 1 );
|
||||
self maps\mp\zombies\_zm_equipment::equipment_release( "equip_springpad_zm" );
|
||||
self.springpad_kills = 0;
|
||||
}
|
||||
|
||||
player_fling( origin, angles, velocity )
|
||||
player_fling( origin, angles, velocity, weapon )
|
||||
{
|
||||
torigin = ( self.origin[ 0 ], self.origin[ 1 ], origin[ 2 ] );
|
||||
self setorigin( ( origin + torigin ) * 0,5 );
|
||||
torigin = ( self.origin[0], self.origin[1], origin[2] );
|
||||
aorigin = ( origin + torigin ) * 0.5;
|
||||
trace = physicstrace( origin, torigin, vectorscale( ( -1, -1, 0 ), 15.0 ), ( 15, 15, 30 ), self );
|
||||
|
||||
if ( !isdefined( trace ) || !isdefined( trace["fraction"] ) || trace["fraction"] < 1.0 )
|
||||
{
|
||||
if ( !isdefined( weapon.springpad_kills ) )
|
||||
weapon.springpad_kills = 0;
|
||||
|
||||
weapon.springpad_kills += 5;
|
||||
|
||||
if ( weapon.springpad_kills >= 28 )
|
||||
weapon.owner thread springpad_expired( weapon );
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
self setorigin( aorigin );
|
||||
wait_network_frame();
|
||||
self setvelocity( velocity );
|
||||
}
|
||||
@ -546,47 +589,44 @@ player_fling( origin, angles, velocity )
|
||||
springpadthinkcleanup( trigger )
|
||||
{
|
||||
self waittill( "death" );
|
||||
if ( isDefined( trigger ) )
|
||||
{
|
||||
|
||||
if ( isdefined( trigger ) )
|
||||
trigger delete();
|
||||
}
|
||||
}
|
||||
|
||||
debugspringpad( radius )
|
||||
{
|
||||
/#
|
||||
color_armed = ( 0, 0, 1 );
|
||||
color_unarmed = vectorScale( ( 0, 0, 1 ), 0,65 );
|
||||
while ( isDefined( self ) )
|
||||
color_armed = ( 0, 1, 0 );
|
||||
color_unarmed = vectorscale( ( 1, 1, 0 ), 0.65 );
|
||||
|
||||
while ( isdefined( self ) )
|
||||
{
|
||||
if ( getDvarInt( #"EB512CB7" ) )
|
||||
if ( getdvarint( _hash_EB512CB7 ) )
|
||||
{
|
||||
if ( isDefined( self.trigger ) )
|
||||
if ( isdefined( self.trigger ) )
|
||||
{
|
||||
color = color_unarmed;
|
||||
if ( isDefined( self.is_armed ) && self.is_armed )
|
||||
{
|
||||
|
||||
if ( isdefined( self.is_armed ) && self.is_armed )
|
||||
color = color_armed;
|
||||
}
|
||||
|
||||
vec = self.trigger.extent;
|
||||
box( self.trigger.origin, vec * -1, vec, self.trigger.angles[ 1 ], color, 1, 0, 1 );
|
||||
box( self.trigger.origin, vec * -1, vec, self.trigger.angles[1], color, 1, 0, 1 );
|
||||
}
|
||||
color = ( 0, 0, 1 );
|
||||
|
||||
color = ( 0, 1, 0 );
|
||||
text = "";
|
||||
if ( isDefined( self.springpad_kills ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.springpad_kills ) )
|
||||
text = "" + self.springpad_kills + "";
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( self.owner.springpad_kills ) )
|
||||
{
|
||||
else if ( isdefined( self.owner.springpad_kills ) )
|
||||
text = "[" + self.owner.springpad_kills + "]";
|
||||
|
||||
print3d( self.origin + vectorscale( ( 0, 0, 1 ), 30.0 ), text, color, 1, 0.5, 1 );
|
||||
}
|
||||
|
||||
wait 0.05;
|
||||
}
|
||||
print3d( self.origin + vectorScale( ( 0, 0, 1 ), 30 ), text, color, 1, 0,5, 1 );
|
||||
}
|
||||
wait 0,05;
|
||||
#/
|
||||
}
|
||||
}
|
||||
|
@ -1,61 +1,126 @@
|
||||
#include maps/mp/zombies/_zm_audio;
|
||||
#include maps/mp/zombies/_zm_score;
|
||||
#include maps/mp/zombies/_zm_laststand;
|
||||
#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_laststand;
|
||||
#include maps\mp\zombies\_zm_pers_upgrades_functions;
|
||||
#include maps\mp\zombies\_zm_score;
|
||||
#include maps\mp\zombies\_zm_audio;
|
||||
|
||||
init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn )
|
||||
init( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||
{
|
||||
precacheitem( weapon_name );
|
||||
precacheitem( flourish_weapon_name );
|
||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon );
|
||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
|
||||
melee_weapon_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||
i = 0;
|
||||
while ( i < melee_weapon_triggers.size )
|
||||
{
|
||||
knife_model = getent( melee_weapon_triggers[ i ].target, "targetname" );
|
||||
if ( isDefined( knife_model ) )
|
||||
|
||||
for ( i = 0; i < melee_weapon_triggers.size; i++ )
|
||||
{
|
||||
knife_model = getent( melee_weapon_triggers[i].target, "targetname" );
|
||||
|
||||
if ( isdefined( knife_model ) )
|
||||
knife_model hide();
|
||||
|
||||
melee_weapon_triggers[i] thread melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||
|
||||
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
|
||||
{
|
||||
melee_weapon_triggers[i] sethintstring( hint_string, cost );
|
||||
|
||||
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||
{
|
||||
cursor_hint = "HINT_WEAPON";
|
||||
cursor_hint_weapon = weapon_name;
|
||||
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||
}
|
||||
melee_weapon_triggers[ i ] thread melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||
melee_weapon_triggers[ i ] sethintstring( hint_string, cost );
|
||||
melee_weapon_triggers[ i ] setcursorhint( "HINT_NOICON" );
|
||||
melee_weapon_triggers[ i ] usetriggerrequirelookat();
|
||||
i++;
|
||||
else
|
||||
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
||||
}
|
||||
else
|
||||
{
|
||||
weapon_display = get_weapon_display_name( weapon_name );
|
||||
hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||
melee_weapon_triggers[i] sethintstring( hint_string, weapon_display, cost );
|
||||
|
||||
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||
{
|
||||
cursor_hint = "HINT_WEAPON";
|
||||
cursor_hint_weapon = weapon_name;
|
||||
melee_weapon_triggers[i] setcursorhint( cursor_hint, cursor_hint_weapon );
|
||||
}
|
||||
else
|
||||
melee_weapon_triggers[i] setcursorhint( "HINT_NOICON" );
|
||||
}
|
||||
|
||||
melee_weapon_triggers[i] usetriggerrequirelookat();
|
||||
}
|
||||
|
||||
melee_weapon_structs = getstructarray( wallbuy_targetname, "targetname" );
|
||||
i = 0;
|
||||
while ( i < melee_weapon_structs.size )
|
||||
{
|
||||
prepare_stub( melee_weapon_structs[ i ].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn );
|
||||
i++;
|
||||
}
|
||||
|
||||
for ( i = 0; i < melee_weapon_structs.size; i++ )
|
||||
prepare_stub( melee_weapon_structs[i].trigger_stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn );
|
||||
|
||||
register_melee_weapon_for_level( weapon_name );
|
||||
if ( !isDefined( level.ballistic_weapon_name ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level.ballistic_weapon_name ) )
|
||||
level.ballistic_weapon_name = [];
|
||||
}
|
||||
level.ballistic_weapon_name[ weapon_name ] = ballistic_weapon_name;
|
||||
if ( !isDefined( level.ballistic_upgraded_weapon_name ) )
|
||||
{
|
||||
|
||||
level.ballistic_weapon_name[weapon_name] = ballistic_weapon_name;
|
||||
|
||||
if ( !isdefined( level.ballistic_upgraded_weapon_name ) )
|
||||
level.ballistic_upgraded_weapon_name = [];
|
||||
|
||||
level.ballistic_upgraded_weapon_name[weapon_name] = ballistic_upgraded_weapon_name;
|
||||
/#
|
||||
if ( !isdefined( level.zombie_weapons[weapon_name] ) )
|
||||
{
|
||||
if ( isdefined( level.devgui_add_weapon ) )
|
||||
[[ level.devgui_add_weapon ]]( weapon_name, "", weapon_name, cost );
|
||||
}
|
||||
level.ballistic_upgraded_weapon_name[ weapon_name ] = ballistic_upgraded_weapon_name;
|
||||
#/
|
||||
}
|
||||
|
||||
prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn )
|
||||
prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||
{
|
||||
if ( isDefined( stub ) )
|
||||
if ( isdefined( stub ) )
|
||||
{
|
||||
if ( !( isdefined( level.monolingustic_prompt_format ) && level.monolingustic_prompt_format ) )
|
||||
{
|
||||
stub.hint_string = hint_string;
|
||||
|
||||
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||
{
|
||||
stub.cursor_hint = "HINT_WEAPON";
|
||||
stub.cursor_hint_weapon = weapon_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
stub.cursor_hint = "HINT_NOICON";
|
||||
stub.cursor_hint_weapon = undefined;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
stub.hint_parm1 = get_weapon_display_name( weapon_name );
|
||||
stub.hint_parm2 = cost;
|
||||
stub.hint_string = &"ZOMBIE_WEAPONCOSTONLY";
|
||||
|
||||
if ( getdvarint( "tu12_zombies_allow_hint_weapon_from_script" ) && !( isdefined( level.disable_melee_wallbuy_icons ) && level.disable_melee_wallbuy_icons ) )
|
||||
{
|
||||
stub.cursor_hint = "HINT_WEAPON";
|
||||
stub.cursor_hint_weapon = weapon_name;
|
||||
}
|
||||
else
|
||||
{
|
||||
stub.cursor_hint = "HINT_NOICON";
|
||||
stub.cursor_hint_weapon = undefined;
|
||||
}
|
||||
}
|
||||
|
||||
stub.cost = cost;
|
||||
stub.weapon_name = weapon_name;
|
||||
stub.has_weapon = has_weapon;
|
||||
stub.give_weapon = give_weapon;
|
||||
stub.take_weapon = take_weapon;
|
||||
stub.vo_dialog_id = vo_dialog_id;
|
||||
stub.flourish_weapon_name = flourish_weapon_name;
|
||||
stub.ballistic_weapon_name = ballistic_weapon_name;
|
||||
@ -68,48 +133,38 @@ prepare_stub( stub, weapon_name, flourish_weapon_name, ballistic_weapon_name, ba
|
||||
add_stub( stub, weapon_name )
|
||||
{
|
||||
melee_weapon = undefined;
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
{
|
||||
if ( level._melee_weapons[ i ].weapon_name == weapon_name )
|
||||
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
||||
{
|
||||
melee_weapon = level._melee_weapons[ i ];
|
||||
melee_weapon = level._melee_weapons[i];
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if ( isDefined( stub ) && isDefined( melee_weapon ) )
|
||||
{
|
||||
prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.has_weapon, melee_weapon.give_weapon, melee_weapon.take_weapon, melee_weapon.flourish_fn );
|
||||
}
|
||||
|
||||
if ( isdefined( stub ) && isdefined( melee_weapon ) )
|
||||
prepare_stub( stub, melee_weapon.weapon_name, melee_weapon.flourish_weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.cost, melee_weapon.wallbuy_targetname, melee_weapon.hint_string, melee_weapon.vo_dialog_id, melee_weapon.flourish_fn );
|
||||
}
|
||||
|
||||
give_melee_weapon_by_name( weapon_name )
|
||||
{
|
||||
melee_weapon = undefined;
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
{
|
||||
if ( level._melee_weapons[ i ].weapon_name == weapon_name )
|
||||
if ( level._melee_weapons[i].weapon_name == weapon_name )
|
||||
{
|
||||
melee_weapon = level._melee_weapons[ i ];
|
||||
melee_weapon = level._melee_weapons[i];
|
||||
break;
|
||||
}
|
||||
else
|
||||
{
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if ( isDefined( melee_weapon ) )
|
||||
{
|
||||
self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.give_weapon, melee_weapon.flourish_fn, undefined );
|
||||
}
|
||||
|
||||
if ( isdefined( melee_weapon ) )
|
||||
self thread give_melee_weapon( melee_weapon.vo_dialog_id, melee_weapon.flourish_weapon_name, melee_weapon.weapon_name, melee_weapon.ballistic_weapon_name, melee_weapon.ballistic_upgraded_weapon_name, melee_weapon.flourish_fn, undefined );
|
||||
}
|
||||
|
||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, has_weapon, give_weapon, take_weapon, flourish_fn )
|
||||
add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, cost, wallbuy_targetname, hint_string, vo_dialog_id, flourish_fn )
|
||||
{
|
||||
melee_weapon = spawnstruct();
|
||||
melee_weapon.weapon_name = weapon_name;
|
||||
@ -120,373 +175,343 @@ add_melee_weapon( weapon_name, flourish_weapon_name, ballistic_weapon_name, ball
|
||||
melee_weapon.wallbuy_targetname = wallbuy_targetname;
|
||||
melee_weapon.hint_string = hint_string;
|
||||
melee_weapon.vo_dialog_id = vo_dialog_id;
|
||||
melee_weapon.has_weapon = has_weapon;
|
||||
melee_weapon.give_weapon = give_weapon;
|
||||
melee_weapon.take_weapon = take_weapon;
|
||||
melee_weapon.flourish_fn = flourish_fn;
|
||||
if ( !isDefined( level._melee_weapons ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( level._melee_weapons ) )
|
||||
level._melee_weapons = [];
|
||||
}
|
||||
level._melee_weapons[ level._melee_weapons.size ] = melee_weapon;
|
||||
|
||||
level._melee_weapons[level._melee_weapons.size] = melee_weapon;
|
||||
}
|
||||
|
||||
player_can_see_weapon_prompt( weapon_name )
|
||||
{
|
||||
if ( is_true( level._allow_melee_weapon_switching ) )
|
||||
return true;
|
||||
|
||||
if ( isdefined( self get_player_melee_weapon() ) && self hasweapon( self get_player_melee_weapon() ) )
|
||||
return false;
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
spectator_respawn_all()
|
||||
{
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
self [[ level._melee_weapons[ i ].take_weapon ]]();
|
||||
i++;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
self spectator_respawn( level._melee_weapons[ i ].wallbuy_targetname, level._melee_weapons[ i ].take_weapon, level._melee_weapons[ i ].has_weapon );
|
||||
i++;
|
||||
}
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
self spectator_respawn( level._melee_weapons[i].wallbuy_targetname, level._melee_weapons[i].weapon_name );
|
||||
}
|
||||
|
||||
spectator_respawn( wallbuy_targetname, take_weapon, has_weapon )
|
||||
spectator_respawn( wallbuy_targetname, weapon_name )
|
||||
{
|
||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||
players = get_players();
|
||||
i = 0;
|
||||
while ( i < melee_triggers.size )
|
||||
|
||||
for ( i = 0; i < melee_triggers.size; i++ )
|
||||
{
|
||||
melee_triggers[ i ] setvisibletoall();
|
||||
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
melee_triggers[i] setvisibletoall();
|
||||
|
||||
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||
{
|
||||
j = 0;
|
||||
while ( j < players.size )
|
||||
for ( j = 0; j < players.size; j++ )
|
||||
{
|
||||
if ( players[ j ] [[ has_weapon ]]() )
|
||||
{
|
||||
melee_triggers[ i ] setinvisibletoplayer( players[ j ] );
|
||||
}
|
||||
j++;
|
||||
if ( !players[j] player_can_see_weapon_prompt( weapon_name ) )
|
||||
melee_triggers[i] setinvisibletoplayer( players[j] );
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
}
|
||||
|
||||
trigger_hide_all()
|
||||
{
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
self trigger_hide( level._melee_weapons[ i ].wallbuy_targetname );
|
||||
i++;
|
||||
}
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
self trigger_hide( level._melee_weapons[i].wallbuy_targetname );
|
||||
}
|
||||
|
||||
trigger_hide( wallbuy_targetname )
|
||||
{
|
||||
melee_triggers = getentarray( wallbuy_targetname, "targetname" );
|
||||
i = 0;
|
||||
while ( i < melee_triggers.size )
|
||||
{
|
||||
melee_triggers[ i ] setinvisibletoplayer( self );
|
||||
i++;
|
||||
}
|
||||
|
||||
for ( i = 0; i < melee_triggers.size; i++ )
|
||||
melee_triggers[i] setinvisibletoplayer( self );
|
||||
}
|
||||
|
||||
has_any_ballistic_knife()
|
||||
{
|
||||
if ( self hasweapon( "knife_ballistic_zm" ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
return true;
|
||||
|
||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||
return true;
|
||||
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
{
|
||||
return 1;
|
||||
if ( self hasweapon( level._melee_weapons[i].ballistic_weapon_name ) )
|
||||
return true;
|
||||
|
||||
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
||||
return true;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
if ( self hasweapon( level._melee_weapons[ i ].ballistic_weapon_name ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
has_upgraded_ballistic_knife()
|
||||
{
|
||||
if ( self hasweapon( "knife_ballistic_upgraded_zm" ) )
|
||||
return true;
|
||||
|
||||
for ( i = 0; i < level._melee_weapons.size; i++ )
|
||||
{
|
||||
return 1;
|
||||
if ( self hasweapon( level._melee_weapons[i].ballistic_upgraded_weapon_name ) )
|
||||
return true;
|
||||
}
|
||||
i = 0;
|
||||
while ( i < level._melee_weapons.size )
|
||||
{
|
||||
if ( self hasweapon( level._melee_weapons[ i ].ballistic_upgraded_weapon_name ) )
|
||||
{
|
||||
return 1;
|
||||
}
|
||||
i++;
|
||||
}
|
||||
return 0;
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
give_ballistic_knife( weapon_string, upgraded )
|
||||
{
|
||||
current_melee_weapon = self get_player_melee_weapon();
|
||||
if ( isDefined( current_melee_weapon ) )
|
||||
|
||||
if ( isdefined( current_melee_weapon ) )
|
||||
{
|
||||
if ( upgraded && isDefined( level.ballistic_upgraded_weapon_name ) && isDefined( level.ballistic_upgraded_weapon_name[ current_melee_weapon ] ) )
|
||||
{
|
||||
weapon_string = level.ballistic_upgraded_weapon_name[ current_melee_weapon ];
|
||||
}
|
||||
if ( !upgraded && isDefined( level.ballistic_weapon_name ) && isDefined( level.ballistic_weapon_name[ current_melee_weapon ] ) )
|
||||
{
|
||||
weapon_string = level.ballistic_weapon_name[ current_melee_weapon ];
|
||||
}
|
||||
if ( upgraded && isdefined( level.ballistic_upgraded_weapon_name ) && isdefined( level.ballistic_upgraded_weapon_name[current_melee_weapon] ) )
|
||||
weapon_string = level.ballistic_upgraded_weapon_name[current_melee_weapon];
|
||||
|
||||
if ( !upgraded && isdefined( level.ballistic_weapon_name ) && isdefined( level.ballistic_weapon_name[current_melee_weapon] ) )
|
||||
weapon_string = level.ballistic_weapon_name[current_melee_weapon];
|
||||
}
|
||||
|
||||
return weapon_string;
|
||||
}
|
||||
|
||||
change_melee_weapon( weapon_name, current_weapon )
|
||||
{
|
||||
current_melee_weapon = self get_player_melee_weapon();
|
||||
if ( isDefined( current_melee_weapon ) )
|
||||
|
||||
if ( isdefined( current_melee_weapon ) && current_melee_weapon != weapon_name )
|
||||
{
|
||||
self takeweapon( current_melee_weapon );
|
||||
unacquire_weapon_toggle( current_melee_weapon );
|
||||
}
|
||||
|
||||
self set_player_melee_weapon( weapon_name );
|
||||
had_ballistic = 0;
|
||||
had_ballistic_upgraded = 0;
|
||||
ballistic_was_primary = 0;
|
||||
primaryweapons = self getweaponslistprimaries();
|
||||
i = 0;
|
||||
while ( i < primaryweapons.size )
|
||||
|
||||
for ( i = 0; i < primaryweapons.size; i++ )
|
||||
{
|
||||
primary_weapon = primaryweapons[ i ];
|
||||
primary_weapon = primaryweapons[i];
|
||||
|
||||
if ( issubstr( primary_weapon, "knife_ballistic_" ) )
|
||||
{
|
||||
had_ballistic = 1;
|
||||
|
||||
if ( primary_weapon == current_weapon )
|
||||
{
|
||||
ballistic_was_primary = 1;
|
||||
}
|
||||
|
||||
self notify( "zmb_lost_knife" );
|
||||
self takeweapon( primary_weapon );
|
||||
unacquire_weapon_toggle( primary_weapon );
|
||||
|
||||
if ( issubstr( primary_weapon, "upgraded" ) )
|
||||
{
|
||||
had_ballistic_upgraded = 1;
|
||||
}
|
||||
}
|
||||
i++;
|
||||
}
|
||||
|
||||
if ( had_ballistic )
|
||||
{
|
||||
if ( had_ballistic_upgraded )
|
||||
{
|
||||
new_ballistic = level.ballistic_upgraded_weapon_name[ weapon_name ];
|
||||
new_ballistic = level.ballistic_upgraded_weapon_name[weapon_name];
|
||||
|
||||
if ( ballistic_was_primary )
|
||||
{
|
||||
current_weapon = new_ballistic;
|
||||
}
|
||||
self giveweapon( new_ballistic, 0, self maps/mp/zombies/_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
|
||||
|
||||
self giveweapon( new_ballistic, 0, self maps\mp\zombies\_zm_weapons::get_pack_a_punch_weapon_options( new_ballistic ) );
|
||||
}
|
||||
else
|
||||
{
|
||||
new_ballistic = level.ballistic_weapon_name[ weapon_name ];
|
||||
new_ballistic = level.ballistic_weapon_name[weapon_name];
|
||||
|
||||
if ( ballistic_was_primary )
|
||||
{
|
||||
current_weapon = new_ballistic;
|
||||
}
|
||||
|
||||
self giveweapon( new_ballistic, 0 );
|
||||
}
|
||||
}
|
||||
|
||||
return current_weapon;
|
||||
}
|
||||
|
||||
melee_weapon_think( weapon_name, cost, has_weapon, give_weapon, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
|
||||
melee_weapon_think( weapon_name, cost, flourish_fn, vo_dialog_id, flourish_weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name )
|
||||
{
|
||||
self.first_time_triggered = 0;
|
||||
while ( isDefined( self.stub ) )
|
||||
|
||||
if ( isdefined( self.stub ) )
|
||||
{
|
||||
self endon( "kill_trigger" );
|
||||
if ( isDefined( self.stub.first_time_triggered ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.stub.first_time_triggered ) )
|
||||
self.first_time_triggered = self.stub.first_time_triggered;
|
||||
}
|
||||
|
||||
weapon_name = self.stub.weapon_name;
|
||||
cost = self.stub.cost;
|
||||
has_weapon = self.stub.has_weapon;
|
||||
give_weapon = self.stub.give_weapon;
|
||||
flourish_fn = self.stub.flourish_fn;
|
||||
vo_dialog_id = self.stub.vo_dialog_id;
|
||||
flourish_weapon_name = self.stub.flourish_weapon_name;
|
||||
ballistic_weapon_name = self.stub.ballistic_weapon_name;
|
||||
ballistic_upgraded_weapon_name = self.stub.ballistic_upgraded_weapon_name;
|
||||
players = getplayers();
|
||||
while ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
|
||||
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < players.size )
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
if ( players[ i ] [[ has_weapon ]]() )
|
||||
{
|
||||
self setinvisibletoplayer( players[ i ] );
|
||||
}
|
||||
i++;
|
||||
if ( !players[i] player_can_see_weapon_prompt( weapon_name ) )
|
||||
self setinvisibletoplayer( players[i] );
|
||||
}
|
||||
}
|
||||
}
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "trigger", player );
|
||||
|
||||
if ( !is_player_valid( player ) )
|
||||
{
|
||||
player thread ignore_triggers( 0,5 );
|
||||
player thread ignore_triggers( 0.5 );
|
||||
continue;
|
||||
}
|
||||
else if ( player in_revive_trigger() )
|
||||
|
||||
if ( player in_revive_trigger() )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else if ( player isthrowinggrenade() )
|
||||
|
||||
if ( player isthrowinggrenade() )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else if ( player.is_drinking > 0 )
|
||||
|
||||
if ( player.is_drinking > 0 )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
|
||||
|
||||
if ( player hasweapon( weapon_name ) || player has_powerup_weapon() )
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if ( player isswitchingweapons() )
|
||||
{
|
||||
wait 0,1;
|
||||
break;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else current_weapon = player getcurrentweapon();
|
||||
if ( !is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) && player has_powerup_weapon() )
|
||||
|
||||
current_weapon = player getcurrentweapon();
|
||||
|
||||
if ( is_placeable_mine( current_weapon ) || is_equipment( current_weapon ) || player has_powerup_weapon() )
|
||||
{
|
||||
wait 0,1;
|
||||
break;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
|
||||
if ( player maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( player.intermission ) && player.intermission )
|
||||
{
|
||||
if ( player maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( player.intermission ) && player.intermission )
|
||||
{
|
||||
wait 0,1;
|
||||
break;
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
player_has_weapon = player [[ has_weapon ]]();
|
||||
|
||||
player_has_weapon = player hasweapon( weapon_name );
|
||||
|
||||
if ( !player_has_weapon )
|
||||
{
|
||||
cost = self.stub.cost;
|
||||
|
||||
if ( player maps\mp\zombies\_zm_pers_upgrades_functions::is_pers_double_points_active() )
|
||||
cost = int( cost / 2 );
|
||||
|
||||
if ( player.score >= cost )
|
||||
{
|
||||
if ( self.first_time_triggered == 0 )
|
||||
{
|
||||
model = getent( self.target, "targetname" );
|
||||
if ( isDefined( model ) )
|
||||
{
|
||||
|
||||
if ( isdefined( model ) )
|
||||
model thread melee_weapon_show( player );
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( self.clientfieldname ) )
|
||||
{
|
||||
else if ( isdefined( self.clientfieldname ) )
|
||||
level setclientfield( self.clientfieldname, 1 );
|
||||
}
|
||||
}
|
||||
|
||||
self.first_time_triggered = 1;
|
||||
if ( isDefined( self.stub ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.stub ) )
|
||||
self.stub.first_time_triggered = 1;
|
||||
}
|
||||
}
|
||||
player maps/mp/zombies/_zm_score::minus_to_player_score( cost );
|
||||
|
||||
player maps\mp\zombies\_zm_score::minus_to_player_score( cost, 1 );
|
||||
bbprint( "zombie_uses", "playername %s playerscore %d round %d cost %d name %s x %f y %f z %f type %s", player.name, player.score, level.round_number, cost, weapon_name, self.origin, "weapon" );
|
||||
player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, self );
|
||||
player thread give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, self );
|
||||
}
|
||||
else
|
||||
{
|
||||
play_sound_on_ent( "no_purchase" );
|
||||
player maps/mp/zombies/_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 );
|
||||
player maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon", undefined, 1 );
|
||||
}
|
||||
break;
|
||||
|
||||
continue;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
{
|
||||
|
||||
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||
self setinvisibletoplayer( player );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
melee_weapon_show( player )
|
||||
{
|
||||
player_angles = vectorToAngle( player.origin - self.origin );
|
||||
player_yaw = player_angles[ 1 ];
|
||||
weapon_yaw = self.angles[ 1 ];
|
||||
yaw_diff = angleClamp180( player_yaw - weapon_yaw );
|
||||
player_angles = vectortoangles( player.origin - self.origin );
|
||||
player_yaw = player_angles[1];
|
||||
weapon_yaw = self.angles[1];
|
||||
yaw_diff = angleclamp180( player_yaw - weapon_yaw );
|
||||
|
||||
if ( yaw_diff > 0 )
|
||||
{
|
||||
yaw = weapon_yaw - 90;
|
||||
}
|
||||
else
|
||||
{
|
||||
yaw = weapon_yaw + 90;
|
||||
}
|
||||
|
||||
self.og_origin = self.origin;
|
||||
self.origin += anglesToForward( ( 0, yaw, 0 ) ) * 8;
|
||||
wait 0,05;
|
||||
self.origin += anglestoforward( ( 0, yaw, 0 ) ) * 8;
|
||||
wait 0.05;
|
||||
self show();
|
||||
play_sound_at_pos( "weapon_show", self.origin, self );
|
||||
time = 1;
|
||||
self moveto( self.og_origin, time );
|
||||
}
|
||||
|
||||
give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, give_weapon, flourish_fn, trigger )
|
||||
give_melee_weapon( vo_dialog_id, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name, flourish_fn, trigger )
|
||||
{
|
||||
if ( isDefined( flourish_fn ) )
|
||||
{
|
||||
if ( isdefined( flourish_fn ) )
|
||||
self thread [[ flourish_fn ]]();
|
||||
}
|
||||
|
||||
gun = self do_melee_weapon_flourish_begin( flourish_weapon_name );
|
||||
self maps/mp/zombies/_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
|
||||
self maps\mp\zombies\_zm_audio::create_and_play_dialog( "weapon_pickup", vo_dialog_id );
|
||||
self waittill_any( "fake_death", "death", "player_downed", "weapon_change_complete" );
|
||||
self do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_weapon_name, ballistic_upgraded_weapon_name );
|
||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
|
||||
{
|
||||
|
||||
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
|
||||
return;
|
||||
}
|
||||
self [[ give_weapon ]]();
|
||||
if ( isDefined( level._allow_melee_weapon_switching ) && !level._allow_melee_weapon_switching )
|
||||
{
|
||||
if ( isDefined( trigger ) )
|
||||
|
||||
if ( !( isdefined( level._allow_melee_weapon_switching ) && level._allow_melee_weapon_switching ) )
|
||||
{
|
||||
if ( isdefined( trigger ) )
|
||||
trigger setinvisibletoplayer( self );
|
||||
}
|
||||
|
||||
self trigger_hide_all();
|
||||
}
|
||||
}
|
||||
@ -512,19 +537,21 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
|
||||
#/
|
||||
self enable_player_move_states();
|
||||
weapon = flourish_weapon_name;
|
||||
if ( self maps/mp/zombies/_zm_laststand::player_is_in_laststand() || isDefined( self.intermission ) && self.intermission )
|
||||
|
||||
if ( self maps\mp\zombies\_zm_laststand::player_is_in_laststand() || isdefined( self.intermission ) && self.intermission )
|
||||
{
|
||||
self takeweapon( weapon );
|
||||
self.lastactiveweapon = "none";
|
||||
return;
|
||||
}
|
||||
|
||||
self takeweapon( weapon );
|
||||
self giveweapon( weapon_name );
|
||||
gun = change_melee_weapon( weapon_name, gun );
|
||||
|
||||
if ( self hasweapon( "knife_zm" ) )
|
||||
{
|
||||
self takeweapon( "knife_zm" );
|
||||
}
|
||||
|
||||
if ( self is_multiple_drinking() )
|
||||
{
|
||||
self decrement_is_drinking();
|
||||
@ -537,20 +564,17 @@ do_melee_weapon_flourish_end( gun, flourish_weapon_name, weapon_name, ballistic_
|
||||
return;
|
||||
}
|
||||
else if ( gun != "none" && !is_placeable_mine( gun ) && !is_equipment( gun ) )
|
||||
{
|
||||
self switchtoweapon( gun );
|
||||
}
|
||||
else
|
||||
{
|
||||
primaryweapons = self getweaponslistprimaries();
|
||||
if ( isDefined( primaryweapons ) && primaryweapons.size > 0 )
|
||||
{
|
||||
self switchtoweapon( primaryweapons[ 0 ] );
|
||||
}
|
||||
|
||||
if ( isdefined( primaryweapons ) && primaryweapons.size > 0 )
|
||||
self switchtoweapon( primaryweapons[0] );
|
||||
}
|
||||
|
||||
self waittill( "weapon_change_complete" );
|
||||
if ( !self maps/mp/zombies/_zm_laststand::player_is_in_laststand() && isDefined( self.intermission ) && !self.intermission )
|
||||
{
|
||||
|
||||
if ( !self maps\mp\zombies\_zm_laststand::player_is_in_laststand() && !( isdefined( self.intermission ) && self.intermission ) )
|
||||
self decrement_is_drinking();
|
||||
}
|
||||
}
|
||||
|
@ -1,10 +1,15 @@
|
||||
#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 )
|
||||
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" );
|
||||
@ -17,9 +22,12 @@ on_spawn( watcher, player )
|
||||
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 ) )
|
||||
|
||||
if ( isdefined( endpos ) )
|
||||
{
|
||||
retrievable_model = spawn( "script_model", endpos );
|
||||
retrievable_model setmodel( "t5_weapon_ballistic_knife_blade_retrieve" );
|
||||
@ -27,47 +35,38 @@ on_spawn( watcher, player )
|
||||
retrievable_model.owner = player;
|
||||
retrievable_model.angles = angles;
|
||||
retrievable_model.name = watcher.weapon;
|
||||
if ( isDefined( prey ) )
|
||||
|
||||
if ( isdefined( prey ) )
|
||||
{
|
||||
if ( isplayer( prey ) && player.team == prey.team )
|
||||
{
|
||||
isfriendly = 1;
|
||||
}
|
||||
else
|
||||
{
|
||||
if ( isai( prey ) && player.team == prey.team )
|
||||
{
|
||||
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 )
|
||||
else if ( isfriendly )
|
||||
{
|
||||
retrievable_model physicslaunch( normal, ( randomint( 10 ), randomint( 10 ), randomint( 10 ) ) );
|
||||
normal = ( 0, 0, 1 );
|
||||
}
|
||||
}
|
||||
}
|
||||
watcher.objectarray[ watcher.objectarray.size ] = retrievable_model;
|
||||
|
||||
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" );
|
||||
}
|
||||
player notify( "ballistic_knife_stationary", retrievable_model, normal );
|
||||
else
|
||||
{
|
||||
player notify( "ballistic_knife_stationary" );
|
||||
}
|
||||
player notify( "ballistic_knife_stationary", retrievable_model, normal, prey );
|
||||
|
||||
retrievable_model thread wait_to_show_glowing_model( prey );
|
||||
}
|
||||
}
|
||||
@ -86,52 +85,59 @@ on_spawn_retrieve_trigger( watcher, player )
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( retrievable_model ) )
|
||||
return;
|
||||
}
|
||||
|
||||
trigger_pos = [];
|
||||
if ( isDefined( prey ) || isplayer( prey ) && isai( prey ) )
|
||||
|
||||
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;
|
||||
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 ] );
|
||||
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 ] ) );
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( prey ) )
|
||||
pickup_trigger linkto( prey );
|
||||
}
|
||||
else
|
||||
{
|
||||
pickup_trigger linkto( retrievable_model );
|
||||
}
|
||||
if ( isDefined( level.knife_planted ) )
|
||||
{
|
||||
|
||||
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 );
|
||||
}
|
||||
@ -140,12 +146,13 @@ debug_print( endpos )
|
||||
{
|
||||
/#
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
print3d( endpos, "pickup_trigger" );
|
||||
wait 0,05;
|
||||
#/
|
||||
wait 0.05;
|
||||
}
|
||||
#/
|
||||
}
|
||||
|
||||
watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundonuse )
|
||||
@ -153,54 +160,63 @@ watch_use_trigger( trigger, model, callback, weapon, playersoundonuse, npcsoundo
|
||||
self endon( "death" );
|
||||
self endon( "delete" );
|
||||
level endon( "game_ended" );
|
||||
while ( 1 )
|
||||
max_ammo = weaponmaxammo( weapon ) + 1;
|
||||
autorecover = is_true( level.ballistic_knife_autorecover );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
trigger waittill( "trigger", player );
|
||||
while ( !isalive( player ) )
|
||||
{
|
||||
|
||||
if ( !isalive( player ) )
|
||||
continue;
|
||||
}
|
||||
while ( !player isonground() )
|
||||
{
|
||||
|
||||
if ( !player isonground() && !is_true( trigger.force_pickup ) )
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||
{
|
||||
|
||||
if ( isdefined( trigger.triggerteam ) && player.team != trigger.triggerteam )
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( trigger.claimedby ) && player != trigger.claimedby )
|
||||
{
|
||||
|
||||
if ( isdefined( trigger.claimedby ) && player != trigger.claimedby )
|
||||
continue;
|
||||
}
|
||||
if ( player usebuttonpressed() && !player.throwinggrenade && !player meleebuttonpressed() )
|
||||
{
|
||||
if ( isDefined( playersoundonuse ) )
|
||||
|
||||
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 ) )
|
||||
{
|
||||
|
||||
if ( isdefined( npcsoundonuse ) )
|
||||
player playsound( npcsoundonuse );
|
||||
}
|
||||
|
||||
player thread [[ callback ]]( weapon, model, trigger );
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
pick_up( weapon, model, trigger )
|
||||
{
|
||||
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;
|
||||
@ -212,27 +228,28 @@ pick_up( weapon, model, trigger )
|
||||
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" );
|
||||
}
|
||||
|
||||
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 ) )
|
||||
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" );
|
||||
self waittill_any( "death_or_disconnect", "zmb_lost_knife" );
|
||||
trigger destroy_ent();
|
||||
model destroy_ent();
|
||||
}
|
||||
@ -241,12 +258,14 @@ drop_knives_to_ground( player )
|
||||
{
|
||||
player endon( "death" );
|
||||
player endon( "zmb_lost_knife" );
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
level waittill( "drop_objects_to_ground", origin, radius );
|
||||
if ( distancesquared( origin, self.origin ) < ( radius * radius ) )
|
||||
|
||||
if ( distancesquared( origin, self.origin ) < radius * radius )
|
||||
{
|
||||
self physicslaunch( ( 0, 0, 1 ), vectorScale( ( 0, 0, 1 ), 5 ) );
|
||||
self physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||
self thread update_retrieve_trigger( player );
|
||||
}
|
||||
}
|
||||
@ -256,9 +275,11 @@ 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 physicslaunch( ( 0, 0, 1 ), vectorscale( ( 1, 1, 1 ), 5.0 ) );
|
||||
self thread update_retrieve_trigger( player );
|
||||
}
|
||||
|
||||
@ -266,13 +287,16 @@ update_retrieve_trigger( player )
|
||||
{
|
||||
self endon( "death" );
|
||||
player endon( "zmb_lost_knife" );
|
||||
if ( isDefined( level.custom_update_retrieve_trigger ) )
|
||||
|
||||
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.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 ) )
|
||||
{
|
||||
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" );
|
||||
}
|
||||
|
||||
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,29 +1,30 @@
|
||||
#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 ) )
|
||||
{
|
||||
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 ) )
|
||||
|
||||
for ( i = 0; i < trigs.size; i++ )
|
||||
{
|
||||
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;
|
||||
@ -31,35 +32,37 @@ init()
|
||||
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" );
|
||||
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 setcursorhint( "HINT_WEAPON", "claymore_zm" );
|
||||
self endon( "kill_trigger" );
|
||||
if ( !isDefined( self.stub ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self.stub ) )
|
||||
return;
|
||||
}
|
||||
if ( isDefined( self.stub ) && !isDefined( self.stub.claymores_triggered ) )
|
||||
{
|
||||
|
||||
if ( isdefined( self.stub ) && !isdefined( self.stub.claymores_triggered ) )
|
||||
self.stub.claymores_triggered = 0;
|
||||
}
|
||||
|
||||
self.claymores_triggered = self.stub.claymores_triggered;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "trigger", who );
|
||||
while ( who in_revive_trigger() )
|
||||
|
||||
if ( who in_revive_trigger() )
|
||||
continue;
|
||||
|
||||
if ( who has_powerup_weapon() )
|
||||
{
|
||||
wait 0.1;
|
||||
continue;
|
||||
}
|
||||
while ( who has_powerup_weapon() )
|
||||
{
|
||||
wait 0,1;
|
||||
}
|
||||
|
||||
if ( is_player_valid( who ) )
|
||||
{
|
||||
if ( who.score >= self.zombie_cost )
|
||||
@ -67,43 +70,41 @@ buy_claymores()
|
||||
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 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 ) )
|
||||
{
|
||||
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 );
|
||||
|
||||
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
|
||||
{
|
||||
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" );
|
||||
who play_sound_on_ent( "no_purchase" );
|
||||
who maps\mp\zombies\_zm_audio::create_and_play_dialog( "general", "no_money_weapon" );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -113,31 +114,32 @@ claymore_unitrigger_update_prompt( player )
|
||||
{
|
||||
if ( player is_player_placeable_mine( "claymore_zm" ) )
|
||||
{
|
||||
return 0;
|
||||
self sethintstring( "" );
|
||||
self setcursorhint( "HINT_NOICON" );
|
||||
return false;
|
||||
}
|
||||
return 1;
|
||||
|
||||
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 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
j = 0;
|
||||
while ( j < players.size )
|
||||
for ( j = 0; j < players.size; j++ )
|
||||
{
|
||||
while ( !players[ j ] is_player_placeable_mine( "claymore_zm" ) )
|
||||
if ( !players[j] is_player_placeable_mine( "claymore_zm" ) )
|
||||
{
|
||||
i = 0;
|
||||
while ( i < trigs.size )
|
||||
{
|
||||
trigs[ i ] setinvisibletoplayer( players[ j ], 0 );
|
||||
i++;
|
||||
for ( i = 0; i < trigs.size; i++ )
|
||||
trigs[i] setinvisibletoplayer( players[j], 0 );
|
||||
}
|
||||
}
|
||||
j++;
|
||||
}
|
||||
|
||||
wait 1;
|
||||
players = get_players();
|
||||
}
|
||||
@ -146,60 +148,57 @@ set_claymore_visible()
|
||||
claymore_safe_to_plant()
|
||||
{
|
||||
if ( self.owner.claymores.size >= level.claymores_max_per_player )
|
||||
{
|
||||
return 0;
|
||||
}
|
||||
if ( isDefined( level.claymore_safe_to_plant ) )
|
||||
{
|
||||
|
||||
if ( isdefined( level.claymore_safe_to_plant ) )
|
||||
return self [[ level.claymore_safe_to_plant ]]();
|
||||
}
|
||||
|
||||
return 1;
|
||||
}
|
||||
|
||||
claymore_wait_and_detonate()
|
||||
{
|
||||
wait 0,1;
|
||||
wait 0.1;
|
||||
self detonate( self.owner );
|
||||
}
|
||||
|
||||
claymore_watch()
|
||||
{
|
||||
self endon( "death" );
|
||||
while ( 1 )
|
||||
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 ) )
|
||||
{
|
||||
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;
|
||||
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 ) )
|
||||
{
|
||||
if ( !isdefined( self.claymores ) )
|
||||
self.claymores = [];
|
||||
}
|
||||
|
||||
self thread claymore_watch();
|
||||
self giveweapon( "claymore_zm" );
|
||||
self set_player_placeable_mine( "claymore_zm" );
|
||||
@ -209,22 +208,22 @@ claymore_setup()
|
||||
|
||||
adjust_trigger_origin( origin )
|
||||
{
|
||||
origin += vectorScale( ( 0, 0, 1 ), 20 );
|
||||
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 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();
|
||||
@ -238,6 +237,7 @@ pickup_claymores()
|
||||
{
|
||||
clip_ammo = player getweaponammoclip( self.name );
|
||||
clip_max_ammo = weaponclipsize( self.name );
|
||||
|
||||
if ( clip_ammo >= clip_max_ammo )
|
||||
{
|
||||
self destroy_ent();
|
||||
@ -245,15 +245,16 @@ pickup_claymores()
|
||||
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 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 )
|
||||
@ -265,13 +266,15 @@ pickup_claymores_trigger_listener( trigger, player )
|
||||
pickup_claymores_trigger_listener_enable( trigger, player )
|
||||
{
|
||||
self endon( "delete" );
|
||||
while ( 1 )
|
||||
self endon( "death" );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
player waittill_any( "zmb_enable_claymore_prompt", "spawned_player" );
|
||||
if ( !isDefined( trigger ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( trigger ) )
|
||||
return;
|
||||
}
|
||||
|
||||
trigger trigger_on();
|
||||
trigger linkto( self );
|
||||
}
|
||||
@ -280,13 +283,15 @@ pickup_claymores_trigger_listener_enable( trigger, player )
|
||||
pickup_claymores_trigger_listener_disable( trigger, player )
|
||||
{
|
||||
self endon( "delete" );
|
||||
while ( 1 )
|
||||
self endon( "death" );
|
||||
|
||||
while ( true )
|
||||
{
|
||||
player waittill( "zmb_disable_claymore_prompt" );
|
||||
if ( !isDefined( trigger ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( trigger ) )
|
||||
return;
|
||||
}
|
||||
|
||||
trigger unlink();
|
||||
trigger trigger_off();
|
||||
}
|
||||
@ -294,14 +299,14 @@ pickup_claymores_trigger_listener_disable( trigger, player )
|
||||
|
||||
shouldaffectweaponobject( object )
|
||||
{
|
||||
pos = self.origin + vectorScale( ( 0, 0, 1 ), 32 );
|
||||
pos = self.origin + vectorscale( ( 0, 0, 1 ), 32.0 );
|
||||
dirtopos = pos - object.origin;
|
||||
objectforward = anglesToForward( object.angles );
|
||||
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;
|
||||
@ -316,44 +321,40 @@ claymore_detonation()
|
||||
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 )
|
||||
self.owner.claymores[self.owner.claymores.size] = self;
|
||||
|
||||
while ( true )
|
||||
{
|
||||
damagearea waittill( "trigger", ent );
|
||||
if ( isDefined( self.owner ) && ent == self.owner )
|
||||
{
|
||||
|
||||
if ( isdefined( self.owner ) && ent == self.owner )
|
||||
continue;
|
||||
}
|
||||
while ( isDefined( ent.pers ) && isDefined( ent.pers[ "team" ] ) && ent.pers[ "team" ] == self.team )
|
||||
{
|
||||
|
||||
if ( isdefined( ent.pers ) && isdefined( ent.pers["team"] ) && ent.pers["team"] == self.team )
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
||||
{
|
||||
|
||||
if ( isdefined( ent.ignore_claymore ) && ent.ignore_claymore )
|
||||
continue;
|
||||
}
|
||||
while ( !ent shouldaffectweaponobject( self ) )
|
||||
{
|
||||
|
||||
if ( !ent shouldaffectweaponobject( self ) )
|
||||
continue;
|
||||
}
|
||||
|
||||
if ( ent damageconetrace( self.origin, self ) > 0 )
|
||||
{
|
||||
self playsound( "wpn_claymore_alert" );
|
||||
wait 0,4;
|
||||
if ( isDefined( self.owner ) )
|
||||
{
|
||||
wait 0.4;
|
||||
|
||||
if ( isdefined( self.owner ) )
|
||||
self detonate( self.owner );
|
||||
}
|
||||
else
|
||||
{
|
||||
self detonate( undefined );
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
}
|
||||
@ -362,53 +363,53 @@ claymore_detonation()
|
||||
delete_claymores_on_death( player, ent )
|
||||
{
|
||||
self waittill( "death" );
|
||||
if ( isDefined( player ) )
|
||||
{
|
||||
|
||||
if ( isdefined( player ) )
|
||||
arrayremovevalue( player.claymores, self );
|
||||
}
|
||||
wait 0,05;
|
||||
if ( isDefined( ent ) )
|
||||
{
|
||||
|
||||
wait 0.05;
|
||||
|
||||
if ( isdefined( ent ) )
|
||||
ent delete();
|
||||
}
|
||||
}
|
||||
|
||||
satchel_damage()
|
||||
{
|
||||
self endon( "death" );
|
||||
self setcandamage( 1 );
|
||||
self.health = 100000;
|
||||
self.maxhealth = self.health;
|
||||
attacker = undefined;
|
||||
while ( 1 )
|
||||
|
||||
while ( true )
|
||||
{
|
||||
self waittill( "damage", amount, attacker );
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self ) )
|
||||
return;
|
||||
}
|
||||
|
||||
self.health = self.maxhealth;
|
||||
while ( !isplayer( attacker ) )
|
||||
{
|
||||
|
||||
if ( !isplayer( attacker ) )
|
||||
continue;
|
||||
}
|
||||
if ( isDefined( self.owner ) && attacker == self.owner )
|
||||
{
|
||||
|
||||
if ( isdefined( self.owner ) && attacker == self.owner )
|
||||
continue;
|
||||
}
|
||||
while ( isDefined( attacker.pers ) && isDefined( attacker.pers[ "team" ] ) && attacker.pers[ "team" ] != level.zombie_team )
|
||||
{
|
||||
|
||||
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 ) )
|
||||
{
|
||||
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 );
|
||||
@ -416,7 +417,7 @@ satchel_damage()
|
||||
|
||||
reset_satchel_explode_this_frame()
|
||||
{
|
||||
wait 0,05;
|
||||
wait 0.05;
|
||||
level.satchelexplodethisframe = 0;
|
||||
}
|
||||
|
||||
@ -424,69 +425,42 @@ play_claymore_effects()
|
||||
{
|
||||
self endon( "death" );
|
||||
self waittill_not_moving();
|
||||
playfxontag( level._effect[ "claymore_laser" ], self, "tag_fx" );
|
||||
playfxontag( level._effect["claymore_laser"], self, "tag_fx" );
|
||||
}
|
||||
|
||||
give_claymores_after_rounds()
|
||||
{
|
||||
while ( 1 )
|
||||
while ( true )
|
||||
{
|
||||
level waittill( "between_round_over" );
|
||||
while ( !level flag_exists( "teleporter_used" ) || !flag( "teleporter_used" ) )
|
||||
|
||||
if ( !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++;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
|
||||
setup_client_hintelem()
|
||||
{
|
||||
self endon( "death" );
|
||||
self endon( "disconnect" );
|
||||
if ( !isDefined( self.hintelem ) )
|
||||
for ( i = 0; i < players.size; i++ )
|
||||
{
|
||||
self.hintelem = newclienthudelem( self );
|
||||
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 );
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
self.hintelem init_hint_hudelem( 320, 220, "center", "bottom", 1,6, 1 );
|
||||
}
|
||||
|
||||
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( "" );
|
||||
|
||||
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,79 +1,73 @@
|
||||
#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 ) )
|
||||
{
|
||||
|
||||
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" );
|
||||
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._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;
|
||||
}
|
||||
|
||||
spectator_respawn()
|
||||
{
|
||||
maps/mp/zombies/_zm_melee_weapon::spectator_respawn( "tazer_upgrade", ::take_tazer, ::has_tazer );
|
||||
level.tazer_flourish_delay = 0.5;
|
||||
}
|
||||
|
||||
watch_bodily_functions()
|
||||
{
|
||||
if ( isDefined( self.isscreecher ) || self.isscreecher && isDefined( self.is_avogadro ) && self.is_avogadro )
|
||||
{
|
||||
if ( isdefined( self.isscreecher ) && self.isscreecher || isdefined( self.is_avogadro ) && self.is_avogadro )
|
||||
return;
|
||||
}
|
||||
while ( 1 )
|
||||
|
||||
while ( isdefined( self ) && isalive( self ) )
|
||||
{
|
||||
self waittill( "damage", amount, attacker, direction_vec, point, type );
|
||||
if ( !isDefined( self ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( self ) )
|
||||
return;
|
||||
}
|
||||
if ( !isDefined( attacker ) || !isplayer( attacker ) )
|
||||
{
|
||||
|
||||
if ( !isdefined( attacker ) || !isplayer( attacker ) )
|
||||
continue;
|
||||
}
|
||||
while ( type != "MOD_MELEE" )
|
||||
{
|
||||
|
||||
if ( type != "MOD_MELEE" )
|
||||
continue;
|
||||
}
|
||||
if ( !attacker hasweapon( "tazer_knuckles_zm" ) || isDefined( self.hasriotshieldequipped ) && self.hasriotshieldequipped )
|
||||
{
|
||||
|
||||
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" );
|
||||
}
|
||||
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 ) );
|
||||
tags[0] = "J_Head";
|
||||
tags[1] = "J_Neck";
|
||||
playfxontag( level._effect["fx_zmb_tazer_impact"], self, random( tags ) );
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -86,9 +80,11 @@ onplayerconnect()
|
||||
onplayerspawned()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
for ( ;; )
|
||||
|
||||
for (;;)
|
||||
{
|
||||
self waittill( "spawned_player" );
|
||||
|
||||
self thread watchtazerknucklemelee();
|
||||
}
|
||||
}
|
||||
@ -96,53 +92,30 @@ onplayerspawned()
|
||||
watchtazerknucklemelee()
|
||||
{
|
||||
self endon( "disconnect" );
|
||||
for ( ;; )
|
||||
|
||||
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" );
|
||||
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