iw6-scripts/maps/mp/mp_warhawk_events.gsc
2024-02-13 13:20:49 +01:00

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