967 lines
27 KiB
Plaintext
967 lines
27 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
#using_animtree("animated_props");
|
|
|
|
precache()
|
|
{
|
|
level.heli_anims = [];
|
|
level.heli_anims["heli_flyby_01"] = "mp_warhawk_heli_flyby_01";
|
|
level.heli_anims["heli_flyby_02"] = "mp_warhawk_heli_flyby_02";
|
|
level.heli_anims_length = [];
|
|
level.heli_anims_length["heli_flyby_01"] = getanimlength( %mp_warhawk_heli_flyby_01 );
|
|
level.heli_anims_length["heli_flyby_02"] = getanimlength( %mp_warhawk_heli_flyby_02 );
|
|
level.air_raid_active = 0;
|
|
precachempanim( "mp_warhawk_metal_door_open_in" );
|
|
precachempanim( "mp_warhawk_metal_door_open_in_loop" );
|
|
precachempanim( "mp_warhawk_metal_door_open_out" );
|
|
precachempanim( "mp_warhawk_metal_door_open_out_loop" );
|
|
precachempanim( "mp_frag_metal_door_chain" );
|
|
common_scripts\utility::flag_init( "chain_broken" );
|
|
}
|
|
|
|
random_destruction_wait( var_0, var_1 )
|
|
{
|
|
level endon( "random_destruction" );
|
|
|
|
if ( !level.createfx_enabled )
|
|
{
|
|
var_2 = randomfloatrange( var_0, var_1 );
|
|
wait( var_2 );
|
|
level.next_random_mortar_index++;
|
|
level notify( "random_destruction", level.randomdestructionindicies[level.next_random_mortar_index - 1] );
|
|
}
|
|
}
|
|
|
|
random_destruction( var_0, var_1 )
|
|
{
|
|
level endon( "stop_dynamic_events" );
|
|
common_scripts\utility::waitframe();
|
|
|
|
if ( !isdefined( level.destructible_array ) )
|
|
level.destructible_array = common_scripts\utility::getstructarray( "random_destructible", "targetname" );
|
|
|
|
random_destruction_preprocess( level.destructible_array );
|
|
|
|
for (;;)
|
|
{
|
|
thread random_destruction_wait( var_0, var_1 );
|
|
level waittill( "random_destruction", var_2 );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
continue;
|
|
|
|
var_2 = var_2 - 1;
|
|
|
|
if ( level.destructible_array[var_2].fired )
|
|
{
|
|
random_destruction_restore( var_2 );
|
|
level.destructible_array[var_2].fired = 0;
|
|
}
|
|
else
|
|
{
|
|
random_destruction_destroy( var_2 );
|
|
level.destructible_array[var_2].fired = 1;
|
|
}
|
|
|
|
if ( level.next_random_mortar_index >= level.randomdestructionindicies.size )
|
|
break;
|
|
}
|
|
}
|
|
|
|
random_destruction_restore( var_0 )
|
|
{
|
|
var_1 = getentarray( level.destructible_array[var_0].target, "targetname" );
|
|
|
|
foreach ( var_3 in var_1 )
|
|
{
|
|
switch ( var_3.script_noteworthy )
|
|
{
|
|
case "destructible_before":
|
|
var_3 common_scripts\utility::trigger_on();
|
|
break;
|
|
case "destructible_after":
|
|
var_3 common_scripts\utility::trigger_off();
|
|
break;
|
|
case "undefined":
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
exploders_explode_for_late_player()
|
|
{
|
|
self endon( "disconnect" );
|
|
|
|
if ( isdefined( level.exploders_cached ) )
|
|
{
|
|
var_0 = 0;
|
|
|
|
foreach ( var_2 in level.exploders_cached )
|
|
{
|
|
common_scripts\utility::exploder( var_2.index, self, var_2.time );
|
|
var_0++;
|
|
|
|
if ( var_0 >= 4 )
|
|
{
|
|
wait 0.05;
|
|
var_0 = 0;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
exploders_watch_late_players()
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( "connected", var_0 );
|
|
var_0 thread exploders_explode_for_late_player();
|
|
}
|
|
}
|
|
|
|
exploder_cache( var_0 )
|
|
{
|
|
if ( !isdefined( level.exploders_cached ) )
|
|
level.exploders_cached = [];
|
|
|
|
var_1 = spawnstruct();
|
|
var_1.index = var_0;
|
|
var_1.time = level.time;
|
|
level.exploders_cached[level.exploders_cached.size] = var_1;
|
|
}
|
|
|
|
random_destruction_destroy( var_0 )
|
|
{
|
|
if ( !level.destructible_array[var_0].mortar_starts.size || !level.destructible_array[var_0].mortar_ends.size )
|
|
return;
|
|
|
|
var_1 = common_scripts\utility::random( level.destructible_array[var_0].mortar_starts );
|
|
var_2 = common_scripts\utility::random( level.destructible_array[var_0].mortar_ends );
|
|
random_mortars_fire( var_1.origin, var_2.origin, var_1.script_duration, undefined, 0, 0 );
|
|
var_3 = getentarray( level.destructible_array[var_0].target, "targetname" );
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
switch ( var_5.script_noteworthy )
|
|
{
|
|
case "destructible_before":
|
|
var_5 maps\mp\_movers::notify_moving_platform_invalid();
|
|
var_5 common_scripts\utility::trigger_off();
|
|
break;
|
|
case "destructible_after":
|
|
var_5 common_scripts\utility::trigger_on();
|
|
break;
|
|
case "undefined":
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
common_scripts\utility::exploder( 50 + var_0 );
|
|
exploder_cache( 50 + var_0 );
|
|
var_7 = common_scripts\utility::getstructarray( level.destructible_array[var_0].target, "targetname" );
|
|
|
|
foreach ( var_5 in var_7 )
|
|
{
|
|
if ( isdefined( var_5.script_noteworthy ) && isdefined( level._effect[var_5.script_noteworthy] ) )
|
|
playfx( level._effect[var_5.script_noteworthy], var_5.origin );
|
|
}
|
|
|
|
if ( isdefined( level.destructible_array[var_0].script_parameters ) )
|
|
{
|
|
var_10 = strtok( level.destructible_array[var_0].script_parameters, ";" );
|
|
|
|
foreach ( var_12 in var_10 )
|
|
{
|
|
var_13 = strtok( var_12, "=" );
|
|
|
|
if ( var_13.size != 2 )
|
|
continue;
|
|
|
|
switch ( var_13[0] )
|
|
{
|
|
case "play_sound":
|
|
playsoundatpos( level.destructible_array[var_0].origin, var_13[1] );
|
|
break;
|
|
case "play_loopsound":
|
|
level.destructible_array[var_0].loop_sound_ent playloopsound( var_13[1] );
|
|
break;
|
|
case "play_fx":
|
|
playfx( level._effect[var_13[1]], level.destructible_array[var_0].origin );
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
random_destruction_preprocess( var_0 )
|
|
{
|
|
level.next_random_mortar_index = 0;
|
|
level.randomdestructionindicies = [];
|
|
|
|
for ( var_1 = 0; var_1 < var_0.size; var_1++ )
|
|
level.randomdestructionindicies[var_1] = var_1 + 1;
|
|
|
|
level.randomdestructionindicies = common_scripts\utility::array_randomize( level.randomdestructionindicies );
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
var_3.mortar_starts = [];
|
|
var_3.mortar_ends = [];
|
|
var_3.fired = 0;
|
|
var_4 = [];
|
|
var_5 = undefined;
|
|
var_6 = undefined;
|
|
var_7 = undefined;
|
|
var_8 = undefined;
|
|
var_9 = common_scripts\utility::getstructarray( var_3.target, "targetname" );
|
|
|
|
foreach ( var_11 in var_9 )
|
|
{
|
|
switch ( var_11.script_noteworthy )
|
|
{
|
|
case "before_start_origin":
|
|
var_5 = var_11.origin;
|
|
break;
|
|
case "before_end_origin":
|
|
var_6 = var_11.origin;
|
|
break;
|
|
case "after_start_origin":
|
|
var_7 = var_11.origin;
|
|
break;
|
|
case "after_end_origin":
|
|
var_8 = var_11.origin;
|
|
break;
|
|
case "mortar_start":
|
|
var_3.mortar_starts[var_3.mortar_starts.size] = var_11;
|
|
break;
|
|
case "mortar_end":
|
|
var_3.mortar_ends[var_3.mortar_ends.size] = var_11;
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
var_13 = undefined;
|
|
var_14 = undefined;
|
|
|
|
if ( isdefined( var_5 ) && isdefined( var_6 ) )
|
|
var_13 = var_6 - var_5;
|
|
|
|
if ( isdefined( var_7 ) && isdefined( var_8 ) )
|
|
var_14 = var_8 - var_7;
|
|
|
|
var_15 = getentarray( var_3.target, "targetname" );
|
|
|
|
foreach ( var_11 in var_15 )
|
|
{
|
|
switch ( var_11.script_noteworthy )
|
|
{
|
|
case "destructible_before":
|
|
var_4[var_4.size] = var_11;
|
|
|
|
if ( isdefined( var_13 ) )
|
|
var_11.origin = var_11.origin + var_13;
|
|
|
|
break;
|
|
case "destructible_after":
|
|
if ( isdefined( var_14 ) )
|
|
var_11.origin = var_11.origin + var_14;
|
|
|
|
var_11 common_scripts\utility::trigger_off();
|
|
break;
|
|
case "loop_sound_ent":
|
|
var_3.loop_sound_ent = var_11;
|
|
break;
|
|
case "delete":
|
|
var_11 delete();
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( var_3.mortar_starts.size == 0 )
|
|
var_3.mortar_starts = common_scripts\utility::getstructarray( "air_raid", "targetname" );
|
|
|
|
if ( var_3.mortar_ends.size == 0 )
|
|
var_3.mortar_ends = var_4;
|
|
}
|
|
}
|
|
|
|
plane_crash()
|
|
{
|
|
|
|
}
|
|
|
|
plane_crash_init()
|
|
{
|
|
if ( !isdefined( self.target ) )
|
|
return;
|
|
|
|
if ( !isdefined( self.script_animation ) || !isdefined( level.plane_crash_anims[self.script_animation] ) )
|
|
return;
|
|
|
|
var_0 = getentarray( self.target, "targetname" );
|
|
var_1 = common_scripts\utility::getstructarray( self.target, "targetname" );
|
|
var_2 = common_scripts\utility::array_combine( var_0, var_1 );
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
if ( !isdefined( var_4.script_noteworthy ) )
|
|
continue;
|
|
|
|
switch ( var_4.script_noteworthy )
|
|
{
|
|
case "plane":
|
|
self.plane = var_4;
|
|
thread run_func_on_notify( "end", ::delete_ent, var_4 );
|
|
break;
|
|
case "scene_node":
|
|
self.scene_node = var_4;
|
|
|
|
if ( !isdefined( self.scene_node.angles ) )
|
|
self.scene_node.angles = ( 0, 0, 0 );
|
|
|
|
break;
|
|
case "show":
|
|
var_4 hide();
|
|
thread run_func_on_notify( var_4.script_parameters, ::show_ent, var_4 );
|
|
break;
|
|
case "show_trigger":
|
|
var_4 common_scripts\utility::trigger_off();
|
|
thread run_func_on_notify( var_4.script_parameters, ::show_trigger, var_4 );
|
|
break;
|
|
case "kill_players":
|
|
thread run_func_on_notify( var_4.script_parameters, ::kill_players_touching_ent, var_4 );
|
|
break;
|
|
case "delete":
|
|
thread run_func_on_notify( var_4.script_parameters, ::delete_ent, var_4 );
|
|
break;
|
|
case "fx":
|
|
thread run_func_on_notify( var_4.script_parameters, ::play_fx, var_4 );
|
|
break;
|
|
case "trigger_fx":
|
|
if ( isdefined( var_4.script_fxid ) && isdefined( level._effect[var_4.script_fxid] ) )
|
|
{
|
|
var_5 = spawnfx( level._effect[var_4.script_fxid], var_4.origin, anglestoforward( var_4.angles ) );
|
|
thread run_func_on_notify( var_4.script_parameters, ::trigger_fx, var_5 );
|
|
}
|
|
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
}
|
|
|
|
if ( self.script_animation == "mp_warhawk_osprey_crash" )
|
|
{
|
|
thread run_func_on_notify( "start", ::play_fx_on_tag, "osprey_trail", "tag_engine_ri_fx2", self.plane );
|
|
thread run_func_on_notify( "crash_sound", ::play_sound_on_ent, self.plane, "osprey_crash" );
|
|
thread run_func_on_notify( "hit_watertower", ::play_sound_at_ent, self.plane, "osprey_hit_tower" );
|
|
thread run_func_on_notify( "hit_ground", ::stop_fx_on_tag, "osprey_trail", "tag_engine_ri_fx2", self.plane );
|
|
}
|
|
}
|
|
|
|
plan_crash_run( var_0 )
|
|
{
|
|
level endon( "stop_dynamic_events" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
wait( var_0 );
|
|
|
|
if ( isdefined( self.scene_node ) )
|
|
{
|
|
self.plane.origin = self.scene_node.origin;
|
|
self.plane.angles = self.scene_node.angles;
|
|
}
|
|
|
|
self.plane scriptmodelplayanimdeltamotion( self.script_animation );
|
|
thread run_anim_events( level.plane_crash_anims_events[self.script_animation] );
|
|
}
|
|
|
|
create_anim_event( var_0, var_1 )
|
|
{
|
|
var_2 = spawnstruct();
|
|
var_2.time = var_1;
|
|
var_2.note = var_0;
|
|
var_2.done = 0;
|
|
return var_2;
|
|
}
|
|
|
|
run_anim_events( var_0 )
|
|
{
|
|
var_1 = gettime();
|
|
|
|
for (;;)
|
|
{
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( var_3.done )
|
|
continue;
|
|
|
|
if ( ( gettime() - var_1 ) / 1000 >= var_3.time )
|
|
{
|
|
self notify( var_3.note );
|
|
var_3.done = 1;
|
|
|
|
if ( var_3.note == "end" )
|
|
return;
|
|
}
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
run_func_on_notify( var_0, var_1, var_2, var_3, var_4 )
|
|
{
|
|
self waittill( var_0 );
|
|
|
|
if ( isdefined( var_4 ) )
|
|
self thread [[ var_1 ]]( var_2, var_3, var_4 );
|
|
else if ( isdefined( var_3 ) )
|
|
self thread [[ var_1 ]]( var_2, var_3 );
|
|
else if ( isdefined( var_2 ) )
|
|
self thread [[ var_1 ]]( var_2 );
|
|
else
|
|
self thread [[ var_1 ]]();
|
|
}
|
|
|
|
show_ent( var_0 )
|
|
{
|
|
var_0 show();
|
|
}
|
|
|
|
show_trigger( var_0 )
|
|
{
|
|
var_0 common_scripts\utility::trigger_on();
|
|
}
|
|
|
|
delete_ent( var_0 )
|
|
{
|
|
var_0 delete();
|
|
}
|
|
|
|
play_sound_on_ent( var_0, var_1 )
|
|
{
|
|
var_0 playsound( var_1 );
|
|
}
|
|
|
|
play_sound_at_ent( var_0, var_1 )
|
|
{
|
|
playsoundatpos( var_0.origin, var_1 );
|
|
}
|
|
|
|
kill_players_touching_ent( var_0 )
|
|
{
|
|
foreach ( var_2 in level.players )
|
|
{
|
|
if ( var_2 istouching( var_0 ) )
|
|
var_2 maps\mp\_movers::mover_suicide();
|
|
}
|
|
}
|
|
|
|
play_fx( var_0 )
|
|
{
|
|
if ( !isdefined( var_0.script_fxid ) || !isdefined( level._effect[var_0.script_fxid] ) )
|
|
return;
|
|
|
|
playfx( level._effect[var_0.script_fxid], var_0.origin, anglestoforward( var_0.angles ) );
|
|
}
|
|
|
|
trigger_fx( var_0 )
|
|
{
|
|
triggerfx( var_0 );
|
|
}
|
|
|
|
play_fx_on_tag( var_0, var_1, var_2 )
|
|
{
|
|
playfxontag( common_scripts\utility::getfx( var_0 ), var_2, var_1 );
|
|
}
|
|
|
|
stop_fx_on_tag( var_0, var_1, var_2 )
|
|
{
|
|
stopfxontag( common_scripts\utility::getfx( var_0 ), var_2, var_1 );
|
|
}
|
|
|
|
random_mortars_fire( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = ( 0, 0, -800 );
|
|
|
|
if ( !isdefined( var_2 ) )
|
|
var_2 = randomfloatrange( 3, 4 );
|
|
|
|
var_7 = trajectorycalculateinitialvelocity( var_0, var_1, var_6, var_2 );
|
|
|
|
if ( isdefined( var_4 ) && var_4 )
|
|
{
|
|
var_8 = trajectorycomputedeltaheightattime( var_7[2], -1 * var_6[2], var_2 / 2 );
|
|
var_9 = ( var_1 - var_0 ) / 2 + var_0 + ( 0, 0, var_8 );
|
|
|
|
if ( bullettracepassed( var_9, var_1, 0, undefined ) )
|
|
{
|
|
thread random_mortars_fire_run( var_0, var_1, var_2, var_3, var_7, var_5 );
|
|
return 1;
|
|
}
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
random_mortars_fire_run( var_0, var_1, var_2, var_3, var_7, var_5 );
|
|
}
|
|
|
|
random_mortars_fire_run( var_0, var_1, var_2, var_3, var_4, var_5 )
|
|
{
|
|
var_6 = 350;
|
|
var_7 = random_mortars_get_model( var_0 );
|
|
var_7.origin = var_0;
|
|
var_7.in_use = 1;
|
|
common_scripts\utility::waitframe();
|
|
playfxontag( common_scripts\utility::getfx( "random_mortars_trail" ), var_7, "tag_fx" );
|
|
var_7.angles = vectortoangles( var_4 ) * ( -1, 1, 1 );
|
|
maps\mp\_utility::delaythread( var_2 - 2.0, ::random_mortars_incoming_sound, var_1 );
|
|
var_7 movegravity( var_4, var_2 - 0.05 );
|
|
var_7 waittill( "movedone" );
|
|
|
|
if ( level.createfx_enabled && !isdefined( level.players ) )
|
|
level.players = [];
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_7 radiusdamage( var_1, 250, 750, 500, var_3, "MOD_EXPLOSIVE", "warhawk_mortar_mp" );
|
|
else
|
|
var_7 radiusdamage( var_1, 140, 5, 5, undefined, "MOD_EXPLOSIVE", "warhawk_mortar_mp" );
|
|
|
|
playrumbleonposition( "artillery_rumble", var_1 );
|
|
|
|
foreach ( var_9 in level.players )
|
|
{
|
|
if ( var_9 maps\mp\_utility::isusingremote() )
|
|
continue;
|
|
|
|
if ( distance( var_1, var_9.origin ) > var_6 )
|
|
continue;
|
|
|
|
if ( var_9 damageconetrace( var_1 ) )
|
|
var_9 thread maps\mp\gametypes\_shellshock::dirteffect( var_1 );
|
|
}
|
|
|
|
if ( var_5 )
|
|
playfx( common_scripts\utility::getfx( "mortar_impact_00" ), var_1 );
|
|
|
|
var_7 delete();
|
|
}
|
|
|
|
random_mortars_incoming_sound( var_0 )
|
|
{
|
|
playsoundatpos( var_0, "mortar_incoming" );
|
|
}
|
|
|
|
random_mortars_get_target()
|
|
{
|
|
var_0 = common_scripts\utility::getstructarray( self.target, "targetname" );
|
|
|
|
if ( var_0.size == 0 )
|
|
return undefined;
|
|
|
|
var_1 = common_scripts\utility::random( var_0 );
|
|
var_2 = var_1.origin;
|
|
|
|
if ( isdefined( var_1.radius ) )
|
|
{
|
|
var_3 = anglestoforward( ( 0, randomfloatrange( 0, 360 ), 0 ) );
|
|
var_2 = var_2 + var_3 * randomfloatrange( 0, var_1.radius );
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
random_mortars_get_model( var_0 )
|
|
{
|
|
var_1 = spawn( "script_model", var_0 );
|
|
var_1 setmodel( "projectile_rpg7" );
|
|
return var_1;
|
|
}
|
|
|
|
draw_move_path()
|
|
{
|
|
self endon( "movedone" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 = self.origin;
|
|
wait 0.5;
|
|
thread maps\mp\_utility::drawline( var_0, self.origin, 600, ( 1, 0, 0 ) );
|
|
}
|
|
}
|
|
|
|
draw_model_path()
|
|
{
|
|
self endon( "movedone" );
|
|
var_0 = [];
|
|
|
|
for (;;)
|
|
{
|
|
wait 0.5;
|
|
var_1 = spawn( "script_model", self.origin );
|
|
var_1 setmodel( self.model );
|
|
var_1.angles = self.angles;
|
|
var_0[var_0.size] = var_1;
|
|
}
|
|
|
|
wait 10;
|
|
|
|
foreach ( var_1 in var_0 )
|
|
var_1 delete();
|
|
}
|
|
|
|
jet_flyby()
|
|
{
|
|
var_0 = [];
|
|
var_1 = common_scripts\utility::getstructarray( "jet_flyby_radial", "targetname" );
|
|
var_2 = common_scripts\utility::array_combine( var_0, var_1 );
|
|
|
|
foreach ( var_4 in var_2 )
|
|
var_4.radial = var_4.targetname == "jet_flyby_radial";
|
|
|
|
for (;;)
|
|
{
|
|
wait( randomfloatrange( 10, 20 ) );
|
|
var_2 = common_scripts\utility::array_randomize( var_2 );
|
|
|
|
for ( var_6 = 0; var_6 < var_2.size; var_6++ )
|
|
{
|
|
var_4 = var_2[var_6];
|
|
var_7 = undefined;
|
|
var_8 = undefined;
|
|
|
|
if ( var_4.radial )
|
|
{
|
|
var_7 = spawnstruct();
|
|
var_8 = spawnstruct();
|
|
|
|
if ( !isdefined( var_4.radius ) )
|
|
var_4.radius = 8000;
|
|
|
|
var_9 = ( 0, randomfloatrange( 0, 360 ), 0 );
|
|
var_10 = anglestoforward( var_9 );
|
|
var_7.origin = var_4.origin - var_4.radius * var_10;
|
|
var_7.angles = ( var_9[0] + 3, var_9[1], 0 );
|
|
var_8.origin = var_4.origin + var_4.radius * var_10;
|
|
var_8.angles = ( var_9[0] + 5, var_9[1], 0 );
|
|
|
|
if ( isdefined( var_4.height ) )
|
|
{
|
|
var_7.origin = var_7.origin + ( 0, 0, randomfloatrange( 0, var_4.height ) );
|
|
var_8.origin = var_8.origin + ( 0, 0, randomfloatrange( 0, var_4.height ) );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_11 = common_scripts\utility::getstructarray( var_4.target, "targetname" );
|
|
var_12 = common_scripts\utility::random( var_11 );
|
|
|
|
if ( !isdefined( var_12 ) )
|
|
continue;
|
|
|
|
var_7 = var_4;
|
|
var_8 = var_12;
|
|
}
|
|
|
|
var_13 = randomfloatrange( 1500, 1600 );
|
|
var_14 = distance( var_7.origin, var_8.origin );
|
|
var_15 = var_14 / var_13;
|
|
var_16 = spawn( "script_model", var_7.origin );
|
|
var_16.angles = var_8.angles;
|
|
var_16 setmodel( "vehicle_pavelow" );
|
|
common_scripts\utility::waitframe();
|
|
var_16 playloopsound( "cobra_helicopter_dying_loop" );
|
|
var_16 moveto( var_8.origin, var_15 );
|
|
var_16 rotateto( var_8.angles, var_15 );
|
|
var_16 waittill( "movedone" );
|
|
var_16 delete();
|
|
wait( randomfloatrange( 10, 20 ) );
|
|
}
|
|
}
|
|
}
|
|
|
|
air_raid()
|
|
{
|
|
level endon( "stop_dynamic_events" );
|
|
common_scripts\utility::waitframe();
|
|
level.air_raids = common_scripts\utility::getstructarray( "air_raid", "targetname" );
|
|
|
|
foreach ( var_1 in level.air_raids )
|
|
{
|
|
if ( !isdefined( var_1.radius ) )
|
|
var_1.radius = 300;
|
|
|
|
var_1.current_end = 0;
|
|
var_1.ends = [];
|
|
|
|
for ( var_2 = var_1; isdefined( var_2.target ); var_1.ends[var_1.ends.size] = var_2 )
|
|
{
|
|
var_2 = common_scripts\utility::getstruct( var_2.target, "targetname" );
|
|
|
|
if ( !isdefined( var_2.radius ) )
|
|
var_2.radius = 100;
|
|
}
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
level.air_raid_active = 0;
|
|
level.air_raid_team_called = "none";
|
|
level waittill( "warhawk_mortar_killstreak", var_4 );
|
|
level.air_raid_active = 1;
|
|
level.air_raid_team_called = var_4.team;
|
|
thread air_raid_siren( 10 );
|
|
wait 3;
|
|
air_raid_fire( 0.5, 0.6, 25, var_4 );
|
|
}
|
|
}
|
|
|
|
air_raid_siren( var_0 )
|
|
{
|
|
if ( !isdefined( level.air_raid_siren_ent ) )
|
|
level.air_raid_siren_ent = getent( "air_raid_siren", "targetname" );
|
|
|
|
if ( isdefined( level.air_raid_siren_ent ) )
|
|
level.air_raid_siren_ent playsound( "air_raid_siren" );
|
|
|
|
wait( var_0 );
|
|
|
|
if ( isdefined( level.air_raid_siren_ent ) )
|
|
level.air_raid_siren_ent stopsounds();
|
|
}
|
|
|
|
air_raid_fire( var_0, var_1, var_2, var_3 )
|
|
{
|
|
var_4 = gettime() + var_2 * 1000;
|
|
level.air_raids = common_scripts\utility::array_randomize( level.air_raids );
|
|
var_5 = 0;
|
|
|
|
while ( var_4 > gettime() )
|
|
{
|
|
var_6 = 12;
|
|
var_7 = 0;
|
|
|
|
foreach ( var_9 in level.players )
|
|
{
|
|
if ( !maps\mp\_utility::isreallyalive( var_9 ) )
|
|
continue;
|
|
|
|
if ( level.teambased )
|
|
{
|
|
if ( var_9.team == level.air_raid_team_called )
|
|
continue;
|
|
}
|
|
else if ( isdefined( var_3 ) && var_9 == var_3 )
|
|
continue;
|
|
|
|
if ( var_9.spawntime + 8000 > gettime() )
|
|
continue;
|
|
|
|
var_10 = var_9 getvelocity();
|
|
var_11 = randomfloatrange( 3, 4 );
|
|
var_12 = var_9.origin + var_10 * var_11;
|
|
var_13 = getnodesinradiussorted( var_12, 100, 0, 60 );
|
|
|
|
foreach ( var_15 in var_13 )
|
|
{
|
|
if ( nodeexposedtosky( var_15 ) )
|
|
{
|
|
var_16 = common_scripts\utility::random( level.air_raids );
|
|
|
|
if ( random_mortars_fire( var_16.origin, var_15.origin, undefined, var_3, 1, 1 ) )
|
|
{
|
|
wait( randomfloatrange( var_0, var_1 ) );
|
|
var_7++;
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
while ( var_7 < var_6 )
|
|
{
|
|
var_16 = level.air_raids[var_5];
|
|
var_5++;
|
|
|
|
if ( var_5 >= level.air_raids.size )
|
|
var_5 = 0;
|
|
|
|
var_19 = var_16.ends[var_16.current_end];
|
|
var_16.current_end++;
|
|
|
|
if ( var_16.current_end >= var_16.ends.size )
|
|
var_16.current_end = 0;
|
|
|
|
var_20 = random_point_in_circle( var_16.origin, var_16.radius );
|
|
var_21 = random_point_in_circle( var_19.origin, var_19.radius );
|
|
thread random_mortars_fire( var_20, var_21, undefined, var_3, 0, 1 );
|
|
wait( randomfloatrange( var_0, var_1 ) );
|
|
var_7++;
|
|
}
|
|
}
|
|
}
|
|
|
|
random_point_in_circle( var_0, var_1 )
|
|
{
|
|
if ( var_1 > 0 )
|
|
{
|
|
var_2 = anglestoforward( ( 0, randomfloatrange( 0, 360 ), 0 ) );
|
|
var_3 = randomfloatrange( 0, var_1 );
|
|
var_0 = var_0 + var_2 * var_3;
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
heli_anims()
|
|
{
|
|
level endon( "stop_dynamic_events" );
|
|
var_0 = common_scripts\utility::getstructarray( "heli_anim", "targetname" );
|
|
|
|
if ( var_0.size == 0 )
|
|
return;
|
|
|
|
var_1 = var_0.size;
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( !isdefined( var_3.angles ) )
|
|
var_3.angles = ( 0, 0, 0 );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
var_1++;
|
|
|
|
if ( var_1 >= var_0.size )
|
|
{
|
|
var_0 = common_scripts\utility::array_randomize( var_0 );
|
|
var_1 = 0;
|
|
}
|
|
|
|
wait( randomfloatrange( 10, 20 ) );
|
|
|
|
if ( level.air_raid_active )
|
|
continue;
|
|
|
|
var_3 = var_0[var_1];
|
|
|
|
if ( !isdefined( var_3.script_animation ) || !isdefined( level.heli_anims[var_3.script_animation] ) || !isdefined( level.heli_anims_length[var_3.script_animation] ) )
|
|
continue;
|
|
|
|
var_5 = spawn( "script_model", var_3.origin );
|
|
var_5.angles = var_3.angles;
|
|
var_5 setmodel( "vehicle_battle_hind" );
|
|
var_5 playloopsound( "heli_flyover" );
|
|
var_5 scriptmodelplayanimdeltamotion( level.heli_anims[var_3.script_animation] );
|
|
wait( level.heli_anims_length[var_3.script_animation] );
|
|
var_5 delete();
|
|
}
|
|
}
|
|
|
|
chain_gate_trigger_wait_damage( var_0 )
|
|
{
|
|
self endon( "chain_gate_trigger_damage" );
|
|
var_0 waittill( "damage", var_1, var_2, var_3, var_4, var_5 );
|
|
self notify( "chain_gate_trigger_damage", var_1, var_2, var_3, var_4, var_5 );
|
|
}
|
|
|
|
chain_gate()
|
|
{
|
|
var_0 = getent( "left_gate", "targetname" );
|
|
var_1 = getent( "right_gate", "targetname" );
|
|
var_2 = getent( "lock", "targetname" );
|
|
var_3 = getent( "gate_clip", "targetname" );
|
|
var_4 = getentarray( "gate_trigger", "targetname" );
|
|
var_5 = spawn( "script_model", var_0.origin );
|
|
var_5 setmodel( "generic_prop_raven" );
|
|
var_5.angles = var_0.angles;
|
|
common_scripts\utility::waitframe();
|
|
var_3 connectpaths();
|
|
common_scripts\utility::waitframe();
|
|
var_0 linkto( var_5, "j_prop_1" );
|
|
var_1 linkto( var_5, "j_prop_2" );
|
|
common_scripts\utility::waitframe();
|
|
var_6 = ( 0, 0, 0 );
|
|
var_7 = 0;
|
|
|
|
foreach ( var_9 in var_4 )
|
|
{
|
|
maps\mp\_utility::add_to_bot_damage_targets( var_9 );
|
|
var_6 = var_6 + var_9.origin;
|
|
var_7++;
|
|
}
|
|
|
|
var_6 = var_6 / var_7;
|
|
level thread bot_outside_gate_watch();
|
|
var_2 scriptmodelplayanim( "mp_frag_metal_door_chain" );
|
|
var_0 setcandamage( 0 );
|
|
var_0 setcanradiusdamage( 0 );
|
|
var_1 setcandamage( 0 );
|
|
var_1 setcanradiusdamage( 0 );
|
|
var_2 setcandamage( 0 );
|
|
var_2 setcanradiusdamage( 0 );
|
|
|
|
foreach ( var_9 in var_4 )
|
|
thread chain_gate_trigger_wait_damage( var_9 );
|
|
|
|
self waittill( "chain_gate_trigger_damage", var_13, var_14, var_15, var_16, var_17 );
|
|
var_2 playsound( "scn_breach_gate_lock" );
|
|
|
|
if ( isexplosivedamagemod( var_17 ) )
|
|
var_15 = var_6 - var_16;
|
|
|
|
var_18 = var_15[0] > 0;
|
|
var_2 delete();
|
|
|
|
foreach ( var_9 in var_4 )
|
|
{
|
|
maps\mp\_utility::remove_from_bot_damage_targets( var_9 );
|
|
var_9 delete();
|
|
}
|
|
|
|
common_scripts\utility::flag_set( "chain_broken" );
|
|
|
|
if ( var_18 )
|
|
var_5 scriptmodelplayanimdeltamotion( "mp_warhawk_metal_door_open_in" );
|
|
else
|
|
var_5 scriptmodelplayanimdeltamotion( "mp_warhawk_metal_door_open_out" );
|
|
|
|
var_0 playsound( "scn_breach_gate_open_left" );
|
|
var_1 playsound( "scn_breach_gate_open_right" );
|
|
wait 0.5;
|
|
common_scripts\utility::waitframe();
|
|
var_3 delete();
|
|
}
|
|
|
|
bot_outside_gate_watch()
|
|
{
|
|
level endon( "chain_broken" );
|
|
var_0 = getentarray( "gate_trigger", "targetname" );
|
|
var_1 = getent( "near_gate_volume", "targetname" );
|
|
|
|
for (;;)
|
|
{
|
|
if ( isdefined( level.participants ) )
|
|
{
|
|
foreach ( var_3 in level.participants )
|
|
{
|
|
if ( isai( var_3 ) && var_3 istouching( var_1 ) )
|
|
var_0[0] maps\mp\_utility::set_high_priority_target_for_bot( var_3 );
|
|
}
|
|
}
|
|
|
|
wait 1.0;
|
|
}
|
|
}
|