#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 ); } }