225 lines
13 KiB
Plaintext
225 lines
13 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
|
|
#using scripts\shared\util_shared;
|
|
#using scripts\shared\array_shared;
|
|
#using scripts\shared\scene_shared;
|
|
|
|
#using scripts\shared\compass;
|
|
|
|
|
|
#using scripts\mp\gametypes\_spawnlogic;
|
|
|
|
#using scripts\mp\_load;
|
|
#using scripts\mp\_util;
|
|
|
|
#using scripts\mp\mp_cryogen_fx;
|
|
#using scripts\mp\mp_cryogen_sound;
|
|
|
|
#precache( "model", "collision_clip_wall_512x512x10" );
|
|
#precache( "model", "p7_crate_lab_plastic_locking_open" );
|
|
#precache( "model", "collision_clip_32x32x32" );
|
|
#precache( "model", "collision_clip_wall_128x128x10" );
|
|
#precache( "model", "collision_clip_ramp_64x24" );
|
|
#precache( "model", "p7_tank_nitrogen_metal" );
|
|
#precache( "model", "collision_clip_wall_64x64x10" );
|
|
|
|
function main()
|
|
{
|
|
precache();
|
|
|
|
spawnlogic::move_spawn_point( "mp_dm_spawn_start", ( 1197.14 , -979.058 , 37.625 ), ( 834.823 , -803.36 , 37.625 ), (0, 191, 0) );
|
|
|
|
mp_cryogen_fx::main();
|
|
mp_cryogen_sound::main();
|
|
|
|
load::main();
|
|
|
|
compass::setupMiniMap( "compass_map_mp_cryogen" );
|
|
SetDvar( "compassmaxrange", "2100" ); // Set up the default range of the compass
|
|
|
|
//Spawning clip over wall to prevent player from getting into umbra issue
|
|
spawncollision("collision_clip_wall_512x512x10","collider",( -1031.5, -451.5, -89 ), ( 0 , 270 , 0 ));
|
|
|
|
//Spawning clip over wall to prevent player from getting into umbra issue
|
|
spawncollision("collision_clip_32x32x32","collider",( 537, -453, 56 ), ( 0 , 0 , 0 ));
|
|
spawncollision("collision_clip_32x32x32","collider",( 569, -453, 56 ), ( 0 , 0 , 0 ));
|
|
|
|
//Spawning clip on overwatch platform to prevent crouching into umbra issues
|
|
// spawncollision("collision_clip_ramp_64x24","collider",( -1731 , -1121 , 101.5 ), ( 0 , 270 , 0));
|
|
// spawncollision("collision_clip_ramp_64x24","collider",( -1795 , -1121 , 101.5 ), ( 0 , 90 , 0 ));
|
|
spawncollision("collision_clip_ramp_64x24","collider",( -1763 , -1093.5 , 93.5 ), ( 0 , 0 , 0));
|
|
spawncollision("collision_clip_ramp_64x24","collider",( -1763 , -1148 , 93.5 ), ( 0 , 180 , 0 ));
|
|
|
|
// Spawn crate in corner to prevent umbra issue
|
|
block1 = spawn("script_model",( 551, -453, 40 ));
|
|
block1.angles = ( 0 , 0 , 0);
|
|
block1 SetModel("p7_crate_lab_plastic_locking_open");
|
|
|
|
// Spawn tanks on overwatch platform
|
|
grate1 = spawn("script_model",( -1751.33 , -1096.74 , 102 ));
|
|
grate1.angles = ( 270 , 358.909 , 25 );
|
|
grate1 SetModel("p7_tank_nitrogen_metal");
|
|
grate1 SetScale ( .7 );
|
|
grate2 = spawn("script_model",( -1723.16 , -1105.32 , 102 ));
|
|
grate2.angles = ( 270 , 0 , 26);
|
|
grate2 SetModel("p7_tank_nitrogen_metal");
|
|
grate2 SetScale ( .7 );
|
|
grate3 = spawn("script_model",( -1787.44 , -1135.93 , 100.3 ));
|
|
grate3.angles = ( 270 , 355.638 , 162 );
|
|
grate3 SetModel("p7_tank_nitrogen_metal");
|
|
grate3 SetScale ( .7 );
|
|
|
|
//Spawning clip over wall to prevent breaching into 839 building
|
|
spawncollision("collision_clip_wall_64x64x10","collider",( 1770.5 , -336.5 , 64 ), ( 0 , 0 , 0 ));
|
|
|
|
//Spawning clip over wall to prevent breaching into helipad wall
|
|
spawncollision("collision_clip_wall_64x64x10","collider",( -2560.5 , 452.5 , 81.5 ), ( 0 , 270 , 0 ));
|
|
|
|
//Spawning clip over wall to prevent breaching into column start spawn wall
|
|
spawncollision("collision_clip_wall_64x64x10","collider",( 2334.5 , -187.5 , 35 ), ( 0 , 270 , 0 ));
|
|
|
|
// Stockpile hub points
|
|
level.cleanDepositPoints = Array ( ( -115.486 , -454.185 , 0.125 ),
|
|
( 956.442 , -1586.68 , 0.125 ),
|
|
( 1214.72 , -76.1687 , 40.125 ),
|
|
( 167.401 , -1543.29 , -127.875 ) );
|
|
|
|
level thread scene_sequence( "p7_fxanim_mp_cry_vista_tower_01_bundle" );
|
|
|
|
level spawnKillTrigger();
|
|
}
|
|
|
|
function precache()
|
|
{
|
|
// DO ALL PRECACHING HERE
|
|
}
|
|
|
|
function scene_sequence(str_scene)
|
|
{
|
|
min_ring_time = 25;
|
|
max_ring_time = 35;
|
|
|
|
min_ring_tower_time = 0.5;
|
|
max_ring_tower_time = 3.0;
|
|
while(1)
|
|
{
|
|
wait( RandomFloatRange( min_ring_time, max_ring_time) );
|
|
level thread ring_sequence( str_scene, "ring_01_towers", min_ring_tower_time, max_ring_tower_time);
|
|
wait( RandomFloatRange( min_ring_time, max_ring_time) );
|
|
level thread ring_sequence( str_scene, "ring_02_towers", min_ring_tower_time, max_ring_tower_time);
|
|
wait( RandomFloatRange( min_ring_time, max_ring_time) );
|
|
level thread ring_sequence( str_scene, "ring_03_towers", min_ring_tower_time, max_ring_tower_time);
|
|
}
|
|
}
|
|
|
|
function ring_sequence(str_scene, str_ring, min_time, max_time)
|
|
{
|
|
level thread init_scene( str_scene, str_ring, min_time, max_time );
|
|
wait( 10 );
|
|
level thread run_scene( str_scene, str_ring, min_time, max_time );
|
|
}
|
|
|
|
function run_scene( str_scene, str_targetname, min_time, max_time )
|
|
{
|
|
b_found = false;
|
|
str_mode = ToLower( GetDvarString( "scene_menu_mode", "default" ) );
|
|
a_scenes = filter_targetname( struct::get_array( str_scene, "scriptbundlename" ), false, str_targetname) ;
|
|
|
|
foreach ( s_instance in a_scenes )
|
|
{
|
|
if ( isdefined( s_instance ) )
|
|
{
|
|
if ( !IsInArray( a_scenes, s_instance ) )
|
|
{
|
|
b_found = true;
|
|
s_instance thread play_with_wait( undefined, str_mode, min_time, max_time );
|
|
}
|
|
}
|
|
}
|
|
|
|
if ( isdefined(level.active_scenes[ str_scene ]) )
|
|
{
|
|
a_scenes = filter_targetname( level.active_scenes[ str_scene ], false, str_targetname) ;
|
|
if ( isdefined( a_scenes ) )
|
|
{
|
|
foreach ( s_instance in a_scenes )
|
|
{
|
|
b_found = true;
|
|
s_instance thread play_with_wait( str_scene, str_mode, min_time, max_time );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
function init_scene( str_scene, str_targetname, min_time, max_time )
|
|
{
|
|
str_mode = ToLower( GetDvarString( "scene_menu_mode", "default" ) );
|
|
b_found = false;
|
|
a_scenes = filter_targetname( struct::get_array( str_scene, "scriptbundlename" ), false, str_targetname) ;
|
|
foreach ( s_instance in a_scenes )
|
|
{
|
|
if ( isdefined( s_instance ) )
|
|
{
|
|
b_found = true;
|
|
s_instance thread init_with_wait( undefined, min_time, max_time );
|
|
}
|
|
}
|
|
|
|
if ( !b_found )
|
|
{
|
|
level.scene_test_struct thread init_with_wait( str_scene, min_time, max_time );
|
|
}
|
|
}
|
|
|
|
function filter_targetname( &array, b_keep_keys, str_targetname )
|
|
{
|
|
return array::filter( array, b_keep_keys, &_filter_targetname, str_targetname );
|
|
}
|
|
|
|
function _filter_targetname( val, arg )
|
|
{
|
|
return ( val.targetname === arg );
|
|
}
|
|
|
|
function play_with_wait( str_scene, str_mode, min_time, max_time )
|
|
{
|
|
if( min_time >= 0.0 && max_time > 0.0 )
|
|
{
|
|
wait( RandomFloatRange( min_time, max_time) );
|
|
}
|
|
self thread scene::play( str_scene, undefined, undefined, true, undefined, str_mode );
|
|
}
|
|
|
|
function init_with_wait( str_scene, min_time, max_time )
|
|
{
|
|
if( min_time >= 0.0 && max_time > 0.0 )
|
|
{
|
|
wait( RandomFloatRange( min_time, max_time) );
|
|
}
|
|
self thread scene::init( str_scene, undefined, undefined, true );
|
|
}
|
|
|
|
function spawnKillTrigger()
|
|
{
|
|
trigger = spawn( "trigger_radius", ( 1695 , -344 , -2 ), 0, 80, 40 );
|
|
trigger thread watchKillTrigger();
|
|
|
|
trigger = spawn( "trigger_radius", ( -2571.5 , 527.5 , 53 ), 0, 80, 100 );
|
|
trigger thread watchKillTrigger();
|
|
|
|
trigger = spawn( "trigger_radius", ( 2286.5 , -108 , -2 ), 0, 80, 100 );
|
|
trigger thread watchKillTrigger();
|
|
}
|
|
|
|
function watchKillTrigger()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
trigger = self;
|
|
|
|
while(1)
|
|
{
|
|
trigger waittill( "trigger", player );
|
|
player DoDamage(1000, trigger.origin + (0, 0, 0), trigger, trigger, "none", "MOD_SUICIDE", 0 );
|
|
}
|
|
} |