mirror of
https://github.com/JezuzLizard/Recompilable-gscs-for-BO2-zombies-and-multiplayer.git
synced 2025-07-06 07:27:52 -05:00
705 lines
19 KiB
Plaintext
705 lines
19 KiB
Plaintext
#include maps/mp/zombies/_zm;
|
|
#include maps/mp/gametypes_zm/_zm_gametype;
|
|
#include maps/mp/zm_buried;
|
|
#include maps/mp/zombies/_zm_zonemgr;
|
|
#include maps/mp/zombies/_zm_utility;
|
|
#include common_scripts/utility;
|
|
#include maps/mp/_utility;
|
|
|
|
main_start()
|
|
{
|
|
level thread spawned_collision_ffotd();
|
|
level thread ghost_round_override_init();
|
|
level thread init_push_triggers();
|
|
level thread init_dtp_triggers();
|
|
level thread spawned_slide_push_trigger();
|
|
level thread spawned_slide_prone_trigger();
|
|
level thread spawned_life_triggers();
|
|
onplayerconnect_callback( ::ffotd_player_threads );
|
|
}
|
|
|
|
main_end()
|
|
{
|
|
if ( is_gametype_active( "zgrief" ) )
|
|
{
|
|
level thread zgrief_mode_fix();
|
|
level.check_for_valid_spawn_near_team_callback = ::zgrief_respawn_override;
|
|
}
|
|
level.zombie_init_done = ::ffotd_zombie_init_done;
|
|
level thread bar_spawner_fix();
|
|
level thread maze_blocker_fix();
|
|
level thread door_clip_fix();
|
|
level thread player_respawn_fix();
|
|
}
|
|
|
|
ffotd_zombie_init_done()
|
|
{
|
|
self maps/mp/zm_buried::zombie_init_done();
|
|
self thread jail_traversal_fix();
|
|
}
|
|
|
|
jail_traversal_fix()
|
|
{
|
|
self endon( "death" );
|
|
window_pos = ( -837, 496, 8 );
|
|
fix_dist = 64;
|
|
while ( 1 )
|
|
{
|
|
dist = distancesquared( self.origin, window_pos );
|
|
if ( dist < fix_dist )
|
|
{
|
|
node = self getnegotiationstartnode();
|
|
if ( isDefined( node ) )
|
|
{
|
|
if ( node.animscript == "zm_jump_down_48" && node.type == "Begin" )
|
|
{
|
|
self setphysparams( 25, 0, 72 );
|
|
wait 1;
|
|
if ( is_true( self.has_legs ) )
|
|
{
|
|
self setphysparams( 15, 0, 72 );
|
|
break;
|
|
}
|
|
else
|
|
{
|
|
self setphysparams( 15, 0, 24 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
wait 0,25;
|
|
}
|
|
}
|
|
|
|
ghost_round_override_init()
|
|
{
|
|
origin = ( 2593, 562, 290 );
|
|
length = 512;
|
|
width = 91;
|
|
height = 290;
|
|
trig1 = spawn( "trigger_box", origin, 0, length, width, height );
|
|
trig1.angles = vectorScale( ( 0, 0, 0 ), 69 );
|
|
trig1.script_noteworthy = "ghost_round_override";
|
|
}
|
|
|
|
zgrief_mode_fix()
|
|
{
|
|
speed_trigger = getentarray( "specialty_fastreload", "script_noteworthy" );
|
|
_a98 = speed_trigger;
|
|
_k98 = getFirstArrayKey( _a98 );
|
|
while ( isDefined( _k98 ) )
|
|
{
|
|
trig = _a98[ _k98 ];
|
|
if ( trig.origin == ( -170,5, -328,25, 174 ) )
|
|
{
|
|
trig.origin += vectorScale( ( 0, 0, 0 ), 32 );
|
|
if ( isDefined( trig.clip ) )
|
|
{
|
|
trig.clip.origin += vectorScale( ( 0, 0, 0 ), 32 );
|
|
}
|
|
if ( isDefined( trig.machine ) )
|
|
{
|
|
trig.machine.origin += vectorScale( ( 0, 0, 0 ), 32 );
|
|
}
|
|
}
|
|
_k98 = getNextArrayKey( _a98, _k98 );
|
|
}
|
|
}
|
|
|
|
zgrief_respawn_override( revivee, return_struct )
|
|
{
|
|
players = get_players();
|
|
spawn_points = maps/mp/gametypes_zm/_zm_gametype::get_player_spawns_for_gametype();
|
|
grief_initial = getstructarray( "street_standard_player_spawns", "targetname" );
|
|
_a119 = grief_initial;
|
|
_k119 = getFirstArrayKey( _a119 );
|
|
while ( isDefined( _k119 ) )
|
|
{
|
|
struct = _a119[ _k119 ];
|
|
if ( isDefined( struct.script_int ) && struct.script_int == 2000 )
|
|
{
|
|
spawn_points[ spawn_points.size ] = struct;
|
|
initial_point = struct;
|
|
initial_point.locked = 0;
|
|
}
|
|
_k119 = getNextArrayKey( _a119, _k119 );
|
|
}
|
|
closest_group = undefined;
|
|
closest_distance = 100000000;
|
|
backup_group = undefined;
|
|
backup_distance = 100000000;
|
|
if ( spawn_points.size == 0 )
|
|
{
|
|
return undefined;
|
|
}
|
|
i = 0;
|
|
while ( i < players.size )
|
|
{
|
|
while ( is_player_valid( players[ i ], undefined, 1 ) && players[ i ] != self )
|
|
{
|
|
j = 0;
|
|
while ( j < spawn_points.size )
|
|
{
|
|
if ( isDefined( spawn_points[ j ].script_int ) )
|
|
{
|
|
ideal_distance = spawn_points[ j ].script_int;
|
|
}
|
|
else
|
|
{
|
|
ideal_distance = 1000;
|
|
}
|
|
if ( spawn_points[ j ].locked == 0 )
|
|
{
|
|
plyr_dist = distancesquared( players[ i ].origin, spawn_points[ j ].origin );
|
|
if ( plyr_dist < ( ideal_distance * ideal_distance ) )
|
|
{
|
|
if ( plyr_dist < closest_distance )
|
|
{
|
|
closest_distance = plyr_dist;
|
|
closest_group = j;
|
|
}
|
|
j++;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
if ( plyr_dist < backup_distance )
|
|
{
|
|
backup_group = j;
|
|
backup_distance = plyr_dist;
|
|
}
|
|
}
|
|
}
|
|
j++;
|
|
}
|
|
}
|
|
if ( !isDefined( closest_group ) )
|
|
{
|
|
closest_group = backup_group;
|
|
}
|
|
if ( isDefined( closest_group ) )
|
|
{
|
|
spawn_location = maps/mp/zombies/_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
|
|
if ( isDefined( spawn_location ) && !positionwouldtelefrag( spawn_location.origin ) )
|
|
{
|
|
if ( isDefined( spawn_location.plyr ) && spawn_location.plyr != revivee getentitynumber() )
|
|
{
|
|
i++;
|
|
continue;
|
|
}
|
|
else
|
|
{
|
|
return spawn_location;
|
|
}
|
|
}
|
|
}
|
|
i++;
|
|
}
|
|
while ( isDefined( initial_point ) )
|
|
{
|
|
k = 0;
|
|
while ( k < spawn_points.size )
|
|
{
|
|
if ( spawn_points[ k ] == initial_point )
|
|
{
|
|
closest_group = k;
|
|
spawn_location = maps/mp/zombies/_zm::get_valid_spawn_location( revivee, spawn_points, closest_group, return_struct );
|
|
return spawn_location;
|
|
}
|
|
k++;
|
|
}
|
|
}
|
|
return undefined;
|
|
}
|
|
|
|
spawned_slide_prone_trigger()
|
|
{
|
|
origin = ( -2820, -412, 1438 );
|
|
length = 216;
|
|
width = 216;
|
|
height = 108;
|
|
trig1 = spawn( "trigger_box", origin, 0, length, width, height );
|
|
trig1.angles = ( 0, 0, 0 );
|
|
trig1.targetname = "force_from_prone";
|
|
}
|
|
|
|
spawned_slide_push_trigger()
|
|
{
|
|
origin = ( -1416,5, -324, 428,5 );
|
|
length = 111;
|
|
width = 394;
|
|
height = 189;
|
|
trig1 = spawn( "trigger_box", origin, 0, length, width, height );
|
|
trig1.angles = ( 0, 0, 0 );
|
|
trig1.targetname = "push_from_prone";
|
|
trig1.push_player_towards_point = ( -1336, -320, 360 );
|
|
while ( 1 )
|
|
{
|
|
trig1 waittill( "trigger", who );
|
|
if ( who getstance() == "prone" && isplayer( who ) )
|
|
{
|
|
who setstance( "crouch" );
|
|
}
|
|
trig1 thread slide_push_think( who );
|
|
wait 0,1;
|
|
}
|
|
}
|
|
|
|
slide_push_think( who )
|
|
{
|
|
whopos = ( 0, 0, 0 );
|
|
while ( who istouching( self ) )
|
|
{
|
|
if ( who.origin == whopos )
|
|
{
|
|
who setvelocity( self get_push_vector() );
|
|
}
|
|
whopos = who.origin;
|
|
wait 2;
|
|
}
|
|
}
|
|
|
|
slide_push_in_trigger( player )
|
|
{
|
|
if ( !player is_player_using_thumbstick() )
|
|
{
|
|
player setvelocity( self get_push_vector() );
|
|
}
|
|
}
|
|
|
|
spawned_life_triggers()
|
|
{
|
|
origin = ( 6637, 516, -580 );
|
|
length = 1110;
|
|
width = 982;
|
|
height = 824;
|
|
trig1 = spawn( "trigger_box", origin, 0, length, width, height );
|
|
trig1.angles = ( 0, 0, 0 );
|
|
trig1.script_noteworthy = "life_brush";
|
|
}
|
|
|
|
spawned_collision_ffotd()
|
|
{
|
|
precachemodel( "collision_geo_64x64x10_slick" );
|
|
precachemodel( "collision_geo_64x64x128_slick" );
|
|
precachemodel( "collision_geo_128x128x10_slick" );
|
|
precachemodel( "collision_geo_64x64x10_standard" );
|
|
precachemodel( "collision_geo_64x64x64_standard" );
|
|
precachemodel( "collision_geo_128x128x10_standard" );
|
|
precachemodel( "collision_geo_128x128x128_standard" );
|
|
precachemodel( "collision_geo_256x256x10_standard" );
|
|
precachemodel( "collision_geo_256x256x256_standard" );
|
|
precachemodel( "p6_zm_bu_rock_strata_column_01" );
|
|
precachemodel( "p6_zm_bu_rock_strata_01" );
|
|
precachemodel( "p6_zm_bu_rock_strata_04" );
|
|
precachemodel( "p6_zm_bu_wood_planks_106x171" );
|
|
flag_wait( "start_zombie_round_logic" );
|
|
if ( isDefined( level.optimise_for_splitscreen ) && !level.optimise_for_splitscreen )
|
|
{
|
|
collision1 = spawn( "script_model", ( 3731,5, 736, 6,5 ) );
|
|
collision1 setmodel( "collision_geo_64x64x128_slick" );
|
|
collision1.angles = ( 4,54625, 313,41, -4,78954 );
|
|
collision1 ghost();
|
|
collision2 = spawn( "script_model", ( 34, -1691, 375 ) );
|
|
collision2 setmodel( "collision_geo_256x256x10_standard" );
|
|
collision2.angles = vectorScale( ( 0, 0, 0 ), 3,80002 );
|
|
collision2 ghost();
|
|
collision3 = spawn( "script_model", ( 641, 545, -1,21359 ) );
|
|
collision3 setmodel( "collision_geo_64x64x128_slick" );
|
|
collision3.angles = ( 1,27355, 320,806, -5,38137 );
|
|
collision3 ghost();
|
|
saloon1 = spawn( "script_model", ( 1032,22, -1744,09, 309 ) );
|
|
saloon1 setmodel( "collision_geo_64x64x64_standard" );
|
|
saloon1.angles = vectorScale( ( 0, 0, 0 ), 40,8 );
|
|
saloon1 ghost();
|
|
saloon2 = spawn( "script_model", ( 1005,78, -1766,91, 309 ) );
|
|
saloon2 setmodel( "collision_geo_64x64x64_standard" );
|
|
saloon2.angles = vectorScale( ( 0, 0, 0 ), 40,8 );
|
|
saloon2 ghost();
|
|
gs1 = spawn( "script_model", ( 118,001, -537,037, 236 ) );
|
|
gs1 setmodel( "collision_geo_64x64x64_standard" );
|
|
gs1.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
|
gs1 ghost();
|
|
gs1 thread delete_upon_flag( "general_store_porch_door1" );
|
|
gs2 = spawn( "script_model", ( 117,999, -571,963, 236 ) );
|
|
gs2 setmodel( "collision_geo_64x64x64_standard" );
|
|
gs2.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
|
gs2 ghost();
|
|
gs2 thread delete_upon_flag( "general_store_porch_door1" );
|
|
collision4 = spawn( "script_model", ( 1672, 692, 99 ) );
|
|
collision4 setmodel( "collision_geo_128x128x10_slick" );
|
|
collision4.angles = ( 280,6, 270, 86,6 );
|
|
collision4 ghost();
|
|
cw1 = spawn( "script_model", ( 320, -1988, 116 ) );
|
|
cw1 setmodel( "collision_geo_128x128x128_standard" );
|
|
cw1.angles = ( 0, 0, 0 );
|
|
cw1 ghost();
|
|
rock1 = spawn( "script_model", ( 311, -1945, 104 ) );
|
|
rock1 setmodel( "p6_zm_bu_rock_strata_column_01" );
|
|
rock1.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
|
st1 = spawn( "script_model", ( -736, -2, 25 ) );
|
|
st1 setmodel( "collision_geo_128x128x10_standard" );
|
|
st1.angles = ( 270, 45, 0 );
|
|
st1 ghost();
|
|
ml1 = spawn( "script_model", ( 2831, 440, 405 ) );
|
|
ml1 setmodel( "collision_geo_128x128x128_standard" );
|
|
ml1.angles = ( 0, 0, 0 );
|
|
ml1 ghost();
|
|
ml2 = spawn( "script_model", ( 2831, 680, 420 ) );
|
|
ml2 setmodel( "collision_geo_128x128x128_standard" );
|
|
ml2.angles = ( 0, 0, 0 );
|
|
ml2 ghost();
|
|
mr1 = spawn( "script_model", ( 2380, 1123, 350 ) );
|
|
mr1 setmodel( "collision_geo_256x256x10_standard" );
|
|
mr1.angles = ( 0, 13,8, -90 );
|
|
mr1 ghost();
|
|
th1 = spawn( "script_model", ( 2072, 1168, 360 ) );
|
|
th1 setmodel( "collision_geo_128x128x128_standard" );
|
|
th1.angles = ( 0, 0, 0 );
|
|
th1 ghost();
|
|
th1a = spawn( "script_model", ( 2296, 1088, 400 ) );
|
|
th1a setmodel( "collision_geo_128x128x128_standard" );
|
|
th1a.angles = ( 0, 0, 0 );
|
|
th1a ghost();
|
|
th2 = spawn( "script_model", ( -544, 510, 286 ) );
|
|
th2 setmodel( "collision_geo_256x256x10_standard" );
|
|
th2.angles = ( 0, 7,2, -7,8 );
|
|
th2 ghost();
|
|
th2a = spawn( "script_model", ( -296,95, 537,996, 312,557 ) );
|
|
th2a setmodel( "collision_geo_256x256x10_standard" );
|
|
th2a.angles = ( 347,355, 6,47392, -7,41809 );
|
|
th2a ghost();
|
|
th3 = spawn( "script_model", ( 864, 872, 420 ) );
|
|
th3 setmodel( "collision_geo_256x256x256_standard" );
|
|
th3.angles = ( 0, 0, 0 );
|
|
th3 ghost();
|
|
th4 = spawn( "script_model", ( 2361, 1056, 398 ) );
|
|
th4 setmodel( "collision_geo_256x256x10_standard" );
|
|
th4.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
|
th4 ghost();
|
|
ch1 = spawn( "script_model", ( 1954, 1996, 222 ) );
|
|
ch1 setmodel( "collision_geo_256x256x10_standard" );
|
|
ch1.angles = ( 270, 340, 0,32 );
|
|
ch1 ghost();
|
|
ch2 = spawn( "script_model", ( 1945, 1972, 222 ) );
|
|
ch2 setmodel( "collision_geo_256x256x10_standard" );
|
|
ch2.angles = ( 270, 340, 0,32 );
|
|
ch2 ghost();
|
|
rock1 = spawn( "script_model", ( 3259,54, -189,38, 146,23 ) );
|
|
rock1 setmodel( "p6_zm_bu_rock_strata_column_01" );
|
|
rock1.angles = ( 7,87264, 94,015, 4,57899 );
|
|
rock2 = spawn( "script_model", ( 3351,97, -254,58, 95 ) );
|
|
rock2 setmodel( "p6_zm_bu_rock_strata_01" );
|
|
rock2.angles = vectorScale( ( 0, 0, 0 ), 169,1 );
|
|
yt1 = spawn( "script_model", ( 671, -1412, 214 ) );
|
|
yt1 setmodel( "collision_geo_64x64x10_slick" );
|
|
yt1.angles = ( 62,8, 315, 0 );
|
|
yt1 ghost();
|
|
yt2 = spawn( "script_model", ( 676, -1407, 214 ) );
|
|
yt2 setmodel( "collision_geo_64x64x10_slick" );
|
|
yt2.angles = ( 62,8, 315, 0 );
|
|
yt2 ghost();
|
|
stb1 = spawn( "script_model", ( -807, 59, 127 ) );
|
|
stb1 setmodel( "collision_geo_64x64x10_standard" );
|
|
stb1.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
|
stb1 ghost();
|
|
stb2 = spawn( "script_model", ( -807, 59, 191 ) );
|
|
stb2 setmodel( "collision_geo_64x64x10_standard" );
|
|
stb2.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
|
stb2 ghost();
|
|
stb3 = spawn( "script_model", ( -861, 59, 31 ) );
|
|
stb3 setmodel( "collision_geo_128x128x10_standard" );
|
|
stb3.angles = vectorScale( ( 0, 0, 0 ), 90 );
|
|
stb3 ghost();
|
|
j162 = spawn( "script_model", ( 912, -936, 214 ) );
|
|
j162 setmodel( "collision_geo_128x128x10_standard" );
|
|
j162.angles = ( 0, 0, 0 );
|
|
j162 ghost();
|
|
j156 = spawn( "script_model", ( 434, 1213, 184 ) );
|
|
j156 setmodel( "collision_geo_128x128x10_standard" );
|
|
j156.angles = vectorScale( ( 0, 0, 0 ), 273 );
|
|
j156 ghost();
|
|
j163_1 = spawn( "script_model", ( 1663, 68, 29 ) );
|
|
j163_1 setmodel( "collision_geo_128x128x10_slick" );
|
|
j163_1.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
|
j163_1 ghost();
|
|
j163_2 = spawn( "script_model", ( 1663, 259, 29 ) );
|
|
j163_2 setmodel( "collision_geo_128x128x10_slick" );
|
|
j163_2.angles = vectorScale( ( 0, 0, 0 ), 270 );
|
|
j163_2 ghost();
|
|
j125_1 = spawn( "script_model", ( 2443,65, 1013,54, 236,213 ) );
|
|
j125_1 setmodel( "p6_zm_bu_rock_strata_04" );
|
|
j125_1.angles = ( 13,345, 103,42, -13,4657 );
|
|
j125_3 = spawn( "script_model", ( 2448,7, 852,791, 272,051 ) );
|
|
j125_3 setmodel( "p6_zm_bu_wood_planks_106x171" );
|
|
j125_3.angles = ( 0, 270, 19,4 );
|
|
j125_4 = spawn( "script_model", ( 2313,21, 872,54, 241,01 ) );
|
|
j125_4 setmodel( "p6_zm_bu_wood_planks_106x171" );
|
|
j125_4.angles = ( 0, 0, 0 );
|
|
}
|
|
}
|
|
|
|
delete_upon_flag( flag_notify )
|
|
{
|
|
level flag_wait( flag_notify );
|
|
self delete();
|
|
}
|
|
|
|
init_push_triggers()
|
|
{
|
|
ghost_mansion_to_maze_push_trigger_left();
|
|
ghost_mansion_to_maze_push_trigger_right();
|
|
ghost_mansion_from_maze_push_trigger();
|
|
a_push_triggers = getentarray( "push_trigger", "script_noteworthy" );
|
|
array_thread( a_push_triggers, ::push_players_standing_in_trigger_volumes );
|
|
}
|
|
|
|
ghost_mansion_to_maze_push_trigger_left()
|
|
{
|
|
origin = ( 2656, 689, 183 );
|
|
length = 128;
|
|
width = 8;
|
|
height = 64;
|
|
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
|
|
trig1.angles = vectorScale( ( 0, 0, 0 ), 325,6 );
|
|
trig1.script_noteworthy = "push_trigger";
|
|
trig1.push_player_towards_point = ( 2666, 685, 183 );
|
|
}
|
|
|
|
ghost_mansion_to_maze_push_trigger_right()
|
|
{
|
|
origin = ( 2592, 453, 183 );
|
|
length = 32;
|
|
width = 16;
|
|
height = 64;
|
|
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
|
|
trig1.angles = vectorScale( ( 0, 0, 0 ), 325,6 );
|
|
trig1.script_noteworthy = "push_trigger";
|
|
trig1.push_player_towards_point = ( 2686, 440, 174 );
|
|
}
|
|
|
|
ghost_mansion_from_maze_push_trigger()
|
|
{
|
|
origin = ( 3425, 1067, 53 );
|
|
length = 128;
|
|
width = 16;
|
|
height = 64;
|
|
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
|
|
trig1.angles = ( 0, 0, 0 );
|
|
trig1.script_noteworthy = "push_trigger";
|
|
trig1.push_player_towards_point = ( 3337, 1067, 90 );
|
|
}
|
|
|
|
push_players_standing_in_trigger_volumes()
|
|
{
|
|
/#
|
|
assert( isDefined( self.push_player_towards_point ), "push_player_towards_point field is undefined on push_trigger! This is required for the push functionality to work" );
|
|
#/
|
|
while ( 1 )
|
|
{
|
|
self waittill( "trigger", player );
|
|
if ( !player is_player_using_thumbstick() )
|
|
{
|
|
player setvelocity( self get_push_vector() );
|
|
}
|
|
}
|
|
}
|
|
|
|
is_player_using_thumbstick()
|
|
{
|
|
b_using_thumbstick = 1;
|
|
v_thumbstick = self getnormalizedmovement();
|
|
if ( length( v_thumbstick ) < 0,3 )
|
|
{
|
|
b_using_thumbstick = 0;
|
|
}
|
|
return b_using_thumbstick;
|
|
}
|
|
|
|
get_push_vector()
|
|
{
|
|
return vectornormalize( self.push_player_towards_point - self.origin ) * 100;
|
|
}
|
|
|
|
bar_spawner_fix()
|
|
{
|
|
bad_pos = ( 459,5, -1984, 84 );
|
|
dist_fix = 64;
|
|
bar_spawners = getstructarray( "zone_bar_spawners", "targetname" );
|
|
_a586 = bar_spawners;
|
|
_k586 = getFirstArrayKey( _a586 );
|
|
while ( isDefined( _k586 ) )
|
|
{
|
|
spawner = _a586[ _k586 ];
|
|
if ( isDefined( spawner.script_string ) && spawner.script_string == "bar2" )
|
|
{
|
|
dist = distancesquared( spawner.origin, bad_pos );
|
|
if ( dist < dist_fix )
|
|
{
|
|
spawner.origin = ( 459,5, -2020, 84 );
|
|
}
|
|
}
|
|
_k586 = getNextArrayKey( _a586, _k586 );
|
|
}
|
|
}
|
|
|
|
player_respawn_fix()
|
|
{
|
|
maze_spawners = getstructarray( "maze_spawn_points", "targetname" );
|
|
_a602 = maze_spawners;
|
|
_k602 = getFirstArrayKey( _a602 );
|
|
while ( isDefined( _k602 ) )
|
|
{
|
|
spawner = _a602[ _k602 ];
|
|
if ( spawner.origin == ( 3469, 1026, 20 ) )
|
|
{
|
|
spawner.origin = ( 3509, 1032, 76 );
|
|
}
|
|
_k602 = getNextArrayKey( _a602, _k602 );
|
|
}
|
|
}
|
|
|
|
door_clip_fix()
|
|
{
|
|
bank1 = getentarray( "pf728_auto2510", "targetname" );
|
|
i = 0;
|
|
while ( i < bank1.size )
|
|
{
|
|
if ( isDefined( bank1[ i ].script_noteworthy ) && bank1[ i ].script_noteworthy == "clip" )
|
|
{
|
|
bank1[ i ] delete();
|
|
}
|
|
i++;
|
|
}
|
|
bank2 = getentarray( "pf728_auto2507", "targetname" );
|
|
i = 0;
|
|
while ( i < bank2.size )
|
|
{
|
|
if ( isDefined( bank2[ i ].script_noteworthy ) && bank2[ i ].script_noteworthy == "clip" )
|
|
{
|
|
bank2[ i ] delete();
|
|
}
|
|
i++;
|
|
}
|
|
}
|
|
|
|
maze_blocker_fix()
|
|
{
|
|
node_org = ( 4732, 960, 32 );
|
|
node_target_org = ( 4734, 1198, 32 );
|
|
blocker_node = getnearestnode( node_org );
|
|
blocker_node_target = getnearestnode( node_target_org );
|
|
while ( 1 )
|
|
{
|
|
level waittill( "zm_buried_maze_changed" );
|
|
found = 0;
|
|
perm_list = level._maze._perms[ level._maze._cur_perm ];
|
|
_a648 = perm_list;
|
|
_k648 = getFirstArrayKey( _a648 );
|
|
while ( isDefined( _k648 ) )
|
|
{
|
|
blocker = _a648[ _k648 ];
|
|
if ( blocker == "blocker_10" )
|
|
{
|
|
found = 1;
|
|
if ( isDefined( blocker_node ) && isDefined( blocker_node_target ) )
|
|
{
|
|
unlink_nodes( blocker_node, blocker_node_target, 0 );
|
|
unlink_nodes( blocker_node_target, blocker_node, 0 );
|
|
}
|
|
}
|
|
_k648 = getNextArrayKey( _a648, _k648 );
|
|
}
|
|
if ( !found )
|
|
{
|
|
if ( isDefined( blocker_node ) && isDefined( blocker_node_target ) )
|
|
{
|
|
link_nodes( blocker_node, blocker_node_target, 1 );
|
|
link_nodes( blocker_node_target, blocker_node, 1 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
time_bomb_takeaway()
|
|
{
|
|
self endon( "disconnect" );
|
|
while ( 1 )
|
|
{
|
|
self waittill( "new_tactical_grenade", new_weapon );
|
|
if ( isDefined( new_weapon ) && new_weapon != "time_bomb_zm" && self hasweapon( "time_bomb_detonator_zm" ) )
|
|
{
|
|
self takeweapon( "time_bomb_detonator_zm" );
|
|
}
|
|
}
|
|
}
|
|
|
|
ffotd_player_threads()
|
|
{
|
|
self thread time_bomb_takeaway();
|
|
}
|
|
|
|
init_dtp_triggers()
|
|
{
|
|
barn_hay_push_trigger();
|
|
barn_rail_push_trigger();
|
|
church_fence_push_trigger();
|
|
a_push_triggers = getentarray( "push_from_dtp", "script_noteworthy" );
|
|
array_thread( a_push_triggers, ::dtp_push );
|
|
}
|
|
|
|
barn_hay_push_trigger()
|
|
{
|
|
origin = ( -1137, -190, 188 );
|
|
length = 48;
|
|
width = 64;
|
|
height = 64;
|
|
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
|
|
trig1.angles = ( 0, 0, 0 );
|
|
trig1.script_noteworthy = "push_from_dtp";
|
|
trig1.push_player_towards_point = ( -1137, -264, 200 );
|
|
}
|
|
|
|
barn_rail_push_trigger()
|
|
{
|
|
origin = ( -1137, -211, 188 );
|
|
length = 32;
|
|
width = 128;
|
|
height = 64;
|
|
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
|
|
trig1.angles = ( 0, 0, 0 );
|
|
trig1.script_noteworthy = "push_from_dtp";
|
|
trig1.push_player_towards_point = ( -1137, -285, 200 );
|
|
}
|
|
|
|
church_fence_push_trigger()
|
|
{
|
|
origin = ( 900, 1000, 54 );
|
|
length = 64;
|
|
width = 192;
|
|
height = 64;
|
|
trig1 = spawn( "trigger_box", origin, 0, width, length, height );
|
|
trig1.angles = ( 0, 0, 0 );
|
|
trig1.script_noteworthy = "push_from_dtp";
|
|
trig1.push_player_towards_point = ( 929, 943, 64 );
|
|
}
|
|
|
|
dtp_push()
|
|
{
|
|
pos = ( 0, 0, 0 );
|
|
while ( 1 )
|
|
{
|
|
self waittill( "trigger", player );
|
|
if ( pos == player.origin )
|
|
{
|
|
if ( player getstance() == "prone" )
|
|
{
|
|
player setstance( "crouch" );
|
|
}
|
|
player setvelocity( self get_push_vector() );
|
|
}
|
|
pos = player.origin;
|
|
wait 0,5;
|
|
}
|
|
}
|