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

1135 lines
32 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
gas_station()
{
gas_station_precache();
common_scripts\utility::flag_init( "gas_station_exploded" );
common_scripts\utility::flag_init( "breach_connect_nodes" );
wait 0.05;
var_0 = common_scripts\utility::getstructarray( "gas", "targetname" );
common_scripts\utility::array_thread( var_0, ::gas_station_init );
}
#using_animtree("animated_props");
gas_station_init()
{
var_0 = getentarray( self.target, "targetname" );
var_1 = common_scripts\utility::getstructarray( self.target, "targetname" );
var_0 = common_scripts\utility::array_combine( var_0, var_1 );
var_2 = maps\mp\_utility::getlinknamenodes();
var_3 = common_scripts\utility::array_combine( var_0, var_2 );
self.clip_up = [];
self.clip_down = [];
self.launch_ents = [];
self.linked_ents = [];
if ( getdvar( "r_reflectionProbeGenerate" ) == "1" )
return;
foreach ( var_5 in var_3 )
{
if ( !isdefined( var_5.script_noteworthy ) )
continue;
if ( !isdefined( var_5.script_parameters ) )
var_5.script_parameters = "corner1_hit";
switch ( var_5.script_noteworthy )
{
case "clip_up":
self.clip_up[self.clip_up.size] = var_5;
self.linked_ents[self.linked_ents.size] = var_5;
break;
case "clip_down_traverse":
var_5.nodisconnect = 1;
case "clip_down":
self.clip_down[self.clip_down.size] = var_5;
var_5 setaisightlinevisible( 0 );
var_5 connectpaths();
var_5 common_scripts\utility::trigger_off();
break;
case "link_to_launch":
thread gas_station_run_func_on_notify( var_5.script_parameters, ::gas_station_launch_ent, var_5 );
self.launch_ents[self.launch_ents.size] = var_5;
case "link_to":
self.linked_ents[self.linked_ents.size] = var_5;
break;
case "fx":
thread gas_station_run_func_on_notify( var_5.script_parameters, ::gas_station_play_fx, var_5 );
break;
case "animated":
self.animated_model = var_5;
break;
case "earthquake":
thread gas_station_run_func_on_notify( var_5.script_parameters, ::gas_station_earthquake, var_5 );
break;
case "sound":
thread gas_station_run_func_on_notify( var_5.script_parameters, ::gas_station_playsound, var_5 );
break;
case "connect_node":
var_5 disconnectnode();
thread gas_station_run_func_on_notify( var_5.script_parameters, ::gas_station_connect_node, var_5 );
break;
case "disconnect_node":
thread gas_station_run_func_on_notify( var_5.script_parameters, ::gas_station_disconnect_node, var_5 );
break;
case "prone_kill_trigger":
self.prone_kill_trigger = var_5;
var_5 common_scripts\utility::trigger_off();
break;
case "killcam":
self.killcament = spawn( "script_model", var_5.origin );
self.killcament setmodel( "tag_origin" );
break;
default:
break;
}
}
if ( isdefined( self.animated_model ) )
{
foreach ( var_8 in self.linked_ents )
var_8 linkto( self.animated_model, "j_awning_main" );
}
thread care_package_watch();
var_10 = getscriptablearray( "gaspump", "targetname" );
level.last_player_to_damage_gas_pump = undefined;
level.player_who_caused_gas_station_explosion = undefined;
foreach ( var_12 in var_10 )
{
var_12 thread gas_pump_damage_monitor( self );
var_12 thread notify_explode( self, var_10 );
}
self waittill( "gas_station_explode", var_14 );
common_scripts\utility::flag_set( "gas_station_exploded" );
foreach ( var_16 in level.players )
var_16.present_for_gas_station_explosion = 1;
foreach ( var_12 in var_10 )
{
if ( var_12 == var_14 )
continue;
if ( isdefined( level.player_who_caused_gas_station_explosion ) )
{
var_12.attacker = level.player_who_caused_gas_station_explosion;
if ( isdefined( level.player_who_caused_gas_station_explosion.team ) )
var_12.team = level.player_who_caused_gas_station_explosion.team;
}
if ( isdefined( var_12.attacker ) )
var_12 setscriptabledamageowner( var_12.attacker );
var_12 setscriptablepartstate( 0, "destroyed" );
}
var_20 = getanimlength( %mp_dart_gas_awning_fall );
self.gas_station_events = [];
gas_station_add_event( "start", 0.0 );
gas_station_add_event( "beam_break", 0.1 );
gas_station_add_event( "corner1_hit", 1.9 );
gas_station_add_event( "corner2_hit", 2.15 );
gas_station_add_event( "sign_hit", 2.5 );
gas_station_add_event( "end", var_20 );
thread gas_station_run_func_on_notify( "corner1_hit", ::gas_station_update_clip );
thread gas_station_run_events();
if ( isdefined( self.animated_model ) )
{
self.animated_model scriptmodelplayanimdeltamotion( "mp_dart_gas_awning_fall" );
common_scripts\utility::exploder( 22 );
var_21 = getentarray( "gas_pump_fire_sound_origin", "targetname" );
foreach ( var_23 in var_21 )
var_23 playloopsound( "emt_dart_fire_small_ext_lp" );
}
}
gas_station_run_func_on_notify( var_0, var_1, var_2 )
{
self waittill( var_0 );
if ( isdefined( var_2 ) )
self thread [[ var_1 ]]( var_2 );
else
self thread [[ var_1 ]]();
}
gas_station_update_clip()
{
var_0 = common_scripts\utility::getstruct( "gas_station_killcam", "targetname" );
foreach ( var_2 in self.clip_up )
{
var_2 setaisightlinevisible( 0 );
var_2 delete();
}
foreach ( var_2 in self.clip_down )
{
var_2 setaisightlinevisible( 1 );
var_2.unresolved_collision_func = maps\mp\_movers::unresolved_collision_void;
var_2 common_scripts\utility::trigger_on();
if ( !isdefined( var_2.nodisconnect ) || !var_2.nodisconnect )
var_2 disconnectpaths();
foreach ( var_6 in level.characters )
{
if ( var_6 istouching( var_2 ) && isalive( var_6 ) )
{
if ( isdefined( self.attacker ) && isdefined( self.attacker.team ) && self.attacker.team == var_6.team )
{
var_6 maps\mp\_movers::mover_suicide();
continue;
}
var_2.killcament = self.killcament;
if ( isdefined( level.player_who_caused_gas_station_explosion ) )
{
var_6 dodamage( var_6.health + 10000, var_6.origin, level.player_who_caused_gas_station_explosion, var_2, "MOD_EXPLOSIVE" );
continue;
}
var_6 dodamage( var_6.health + 10000, var_6.origin, self.attacker, var_2, "MOD_EXPLOSIVE" );
}
}
foreach ( var_9 in level.remote_uav )
{
if ( var_9 istouching( var_2 ) )
var_9 notify( "death" );
}
}
if ( isdefined( self.prone_kill_trigger ) )
{
self.prone_kill_trigger common_scripts\utility::trigger_on();
foreach ( var_6 in level.characters )
{
if ( var_6 istouching( self.prone_kill_trigger ) && isalive( var_6 ) )
{
if ( isdefined( self.attacker ) && isdefined( self.attacker.team ) && self.attacker.team == var_6.team )
{
var_6 maps\mp\_movers::mover_suicide();
continue;
}
self.prone_kill_trigger.killcament = self.killcament;
if ( isdefined( level.player_who_caused_gas_station_explosion ) )
{
var_6 dodamage( var_6.health + 20, var_6.origin, level.player_who_caused_gas_station_explosion, self.prone_kill_trigger, "MOD_EXPLOSIVE" );
continue;
}
var_6 dodamage( var_6.health + 20, var_6.origin, self.attacker, self.prone_kill_trigger, "MOD_EXPLOSIVE" );
}
}
wait 10;
self.prone_kill_trigger delete();
}
}
gas_station_launch_ent( var_0 )
{
var_1 = self.animated_model gettagangles( "j_awning_main" );
var_2 = anglestoup( var_1 );
var_0 unlink();
var_3 = ( randomfloatrange( -1, 1 ), randomfloatrange( -1, 1 ), 0 );
var_0 physicslaunchclient( var_0.origin + var_3, var_2 * 15000 );
}
gas_station_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 ) );
}
gas_station_earthquake( var_0 )
{
earthquake( 0.3, 0.5, var_0.origin, 800 );
}
gas_station_playsound( var_0 )
{
if ( !isdefined( var_0.script_sound ) )
return;
playsoundatpos( var_0.origin, var_0.script_sound );
}
gas_station_connect_node( var_0 )
{
var_0 connectnode();
}
gas_station_disconnect_node( var_0 )
{
var_0 disconnectnode();
}
gas_station_run_events()
{
var_0 = gettime();
for (;;)
{
foreach ( var_2 in self.gas_station_events )
{
if ( var_2.done )
continue;
if ( ( gettime() - var_0 ) / 1000 >= var_2.time )
{
self notify( var_2.note );
var_2.done = 1;
if ( var_2.note == "end" )
return;
}
}
wait 0.05;
}
}
gas_station_add_event( var_0, var_1 )
{
if ( !isdefined( self.gas_station_events ) )
self.gas_station_events = [];
var_2 = spawnstruct();
var_2.time = var_1;
var_2.note = var_0;
var_2.done = 0;
self.gas_station_events[self.gas_station_events.size] = var_2;
}
gas_station_precache()
{
precachempanim( "mp_dart_gas_awning_fall" );
}
gas_pump_damage_monitor( var_0 )
{
var_0 endon( "gas_station_explode" );
self.killcament = var_0.killcament;
for (;;)
{
self waittill( "damage", var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9, var_10 );
if ( isplayer( var_2 ) || isagent( var_2 ) )
{
if ( isagent( var_2 ) && isdefined( var_2.owner ) )
var_2 = var_2.owner;
level.last_player_to_damage_gas_pump = var_2;
self setscriptabledamageowner( var_2 );
}
}
}
notify_explode( var_0, var_1 )
{
self waittill( "death", var_2, var_3, var_4 );
if ( !isdefined( level.player_who_caused_gas_station_explosion ) )
{
if ( isplayer( var_2 ) || isagent( var_2 ) )
{
if ( isagent( var_2 ) && isdefined( var_2.owner ) )
var_2 = var_2.owner;
level.player_who_caused_gas_station_explosion = var_2;
}
else if ( isdefined( level.last_player_to_damage_gas_pump ) )
level.player_who_caused_gas_station_explosion = level.last_player_to_damage_gas_pump;
self setscriptabledamageowner( level.player_who_caused_gas_station_explosion );
}
self.attacker = level.player_who_caused_gas_station_explosion;
var_0.attacker = level.player_who_caused_gas_station_explosion;
if ( isdefined( level.player_who_caused_gas_station_explosion.team ) )
{
self.team = level.player_who_caused_gas_station_explosion.team;
var_0.team = level.player_who_caused_gas_station_explosion.team;
}
var_0 notify( "gas_station_explode", self );
}
broken_walls()
{
var_0 = common_scripts\utility::getstructarray( "broken_wall", "targetname" );
common_scripts\utility::array_thread( var_0, ::broken_wall_init );
}
broken_wall_init( var_0 )
{
self.trigger_show = [];
self.delete_ents = [];
self.show_ents = [];
self.trigger_damage = [];
var_1 = getentarray( self.target, "targetname" );
foreach ( var_3 in var_1 )
{
if ( !isdefined( var_3.script_noteworthy ) )
var_3.script_noteworthy = var_3.classname;
switch ( var_3.script_noteworthy )
{
case "delete":
self.delete_ents[self.delete_ents.size] = var_3;
break;
case "trigger_damage":
self.trigger_damage[self.trigger_damage.size] = var_3;
thread broken_wall_damage_watch( var_3 );
break;
case "show":
var_3 hide();
self.show_ents[self.show_ents.size] = var_3;
break;
case "trigger_show":
var_3 common_scripts\utility::trigger_off();
self.trigger_show[self.trigger_show.size] = var_3;
break;
case "trigger_use_touch":
var_3 usetriggerrequirelookat();
var_3.script_noteworthy = "trigger_use";
break;
default:
break;
}
}
}
broken_wall_damage_watch( var_0, var_1 )
{
self endon( "break_wall" );
var_0 waittill( "trigger" );
common_scripts\utility::array_thread( self.show_ents, ::broken_wall_show );
common_scripts\utility::array_call( self.trigger_damage, ::delete );
common_scripts\utility::array_thread( self.delete_ents, ::broken_wall_delete );
common_scripts\utility::array_thread( self.trigger_show, common_scripts\utility::trigger_on );
self notify( "break_wall" );
}
broken_wall_delete()
{
if ( isdefined( self.script_index ) )
common_scripts\utility::exploder( self.script_index );
self setaisightlinevisible( 0 );
self delete();
}
broken_wall_show()
{
self setaisightlinevisible( 1 );
self show();
}
breach()
{
if ( getdvar( "r_reflectionProbeGenerate" ) == "1" )
return;
maps\mp\_breach::breach_precache();
dart_breach_precache();
dart_breach_anims_init();
common_scripts\utility::waitframe();
var_0 = common_scripts\utility::getstructarray( "breach", "targetname" );
var_1 = common_scripts\utility::getstructarray( "breach_proxy", "targetname" );
foreach ( var_3 in var_1 )
{
if ( !isdefined( var_3.target ) )
continue;
var_4 = common_scripts\utility::getstruct( var_3.target, "targetname" );
if ( !isdefined( var_4 ) )
continue;
var_4 = setextrabreachexceptions( var_4 );
var_0[var_0.size] = var_4;
}
common_scripts\utility::array_thread( var_0, ::breach_init );
common_scripts\utility::array_thread( var_0, maps\mp\_breach::breach_init );
}
setextrabreachexceptions( var_0 )
{
if ( !isdefined( var_0.script_noteworthy ) )
return var_0;
if ( level.gametype == "siege" )
var_0.script_noteworthy = var_0.script_noteworthy + "," + "not_in_siege";
return var_0;
}
dart_breach_precache()
{
precachempanim( "mp_dart_container_breach_side1" );
precachempanim( "mp_dart_container_breach_side2" );
precachempanim( "mp_dart_container_breach_top" );
precachempanim( "mp_dart_container_idle_side1" );
precachempanim( "mp_dart_container_idle_side2" );
precachempanim( "mp_dart_container_idle_top" );
}
dart_breach_anims_init()
{
level.breach_anims = [];
level.breach_anims["mp_dart_container_breach_side1"] = "mp_dart_container_breach_side1";
level.breach_anims["mp_dart_container_breach_side1_idle"] = "mp_dart_container_idle_side1";
level.breach_anims["mp_dart_container_breach_side2"] = "mp_dart_container_breach_side2";
level.breach_anims["mp_dart_container_breach_side2_idle"] = "mp_dart_container_idle_side2";
level.breach_anims["mp_dart_container_breach_top"] = "mp_dart_container_breach_top";
level.breach_anims["mp_dart_container_breach_top_idle"] = "mp_dart_container_idle_top";
}
breach_init()
{
self.animated_doors = [];
self.care_packages = [];
self.delete_ents = [];
self.doors = [];
self.notsolid_ents = [];
self.solid_ents = [];
var_0 = getentarray( self.target, "targetname" );
var_1 = common_scripts\utility::getstructarray( self.target, "targetname" );
var_2 = common_scripts\utility::array_combine( var_1, var_0 );
foreach ( var_4 in var_2 )
{
if ( isdefined( var_4.classname ) && var_4.classname == "trigger_use_touch" )
maps\mp\_utility::add_to_bot_use_targets( var_4, 1.5 );
if ( !isdefined( var_4.script_noteworthy ) )
continue;
switch ( var_4.script_noteworthy )
{
case "door":
self.doors[self.doors.size] = var_4;
breach_door_init( var_4 );
break;
case "triggers_with":
if ( isdefined( var_4.target ) )
{
var_5 = common_scripts\utility::getstruct( var_4.target, "targetname" );
if ( isdefined( var_5 ) )
thread breach_other_watch( var_5 );
}
break;
case "care_package":
self.care_packages[self.care_packages.size] = var_4;
break;
case "animated_door":
var_6 = getent( var_4.target, "targetname" );
self.animated_doors[self.animated_doors.size] = var_6;
breach_animated_door_init( var_6 );
break;
default:
break;
}
}
foreach ( var_6 in self.doors )
thread breach_close_door( var_6 );
thread breach_open_watch();
}
add_care_package( var_0, var_1, var_2, var_3, var_4, var_5 )
{
if ( !isdefined( var_5 ) )
{
var_5 = "airdrop_assault";
if ( isdefined( var_4 ) )
{
var_6 = [ "airdrop_assault", "airdrop_support" ];
foreach ( var_8 in var_6 )
{
if ( is_valid_cratetype( var_8, var_4 ) )
{
var_5 = var_8;
break;
}
}
}
}
if ( !is_valid_droptype( var_5 ) )
return;
if ( !isdefined( var_4 ) )
var_4 = common_scripts\utility::random( getarraykeys( level.cratetypes[var_5] ) );
if ( !is_valid_cratetype( var_5, var_4 ) )
return;
if ( !isdefined( var_1 ) )
var_1 = ( 0, 0, 0 );
var_10 = spawn( "script_model", var_0 );
var_10 setmodel( maps\mp\killstreaks\_airdrop::get_friendly_crate_model() );
var_10.angles = var_1;
var_10.cratetype = var_4;
var_10.owner = var_2;
if ( isdefined( var_3 ) )
var_10.team = var_3;
else
var_10.team = var_2.team;
var_10.targetname = "care_package";
var_10.droppingtoground = 0;
var_10.id = "care_package";
var_10 clonebrushmodeltoscriptmodel( level.airdropcratecollision );
var_10 thread common_scripts\utility::entity_path_disconnect_thread( 1.0 );
var_10 physicslaunchserver( ( 0, 0, 0 ), ( 0, 0, 1 ) );
var_10 thread [[ level.cratetypes[var_5][var_4].func ]]( var_5 );
if ( isbot( var_2 ) )
{
wait 0.1;
var_2 notify( "new_crate_to_take" );
}
}
is_valid_droptype( var_0 )
{
if ( !isdefined( var_0 ) )
return 0;
foreach ( var_3, var_2 in level.cratetypes )
{
if ( var_3 == var_0 )
return 1;
}
return 0;
}
is_valid_cratetype( var_0, var_1 )
{
if ( !is_valid_droptype( var_0 ) )
return 0;
if ( !isdefined( var_1 ) )
return 0;
foreach ( var_4, var_3 in level.cratetypes[var_0] )
{
if ( var_4 == var_1 )
return 1;
}
return 0;
}
breach_animated_door_init( var_0 )
{
var_1 = self;
if ( isdefined( level.breach_anims[var_0.script_noteworthy + "_idle"] ) )
var_0 scriptmodelplayanimdeltamotion( level.breach_anims[var_0.script_noteworthy + "_idle"] );
var_0 thread clear_attached_items( var_1 );
}
clear_attached_items( var_0 )
{
var_0 waittill( "breach_activated" );
maps\mp\_movers::notify_moving_platform_invalid();
}
breach_door_init( var_0 )
{
var_1 = getentarray( var_0.target, "targetname" );
var_2 = common_scripts\utility::getstructarray( var_0.target, "targetname" );
var_3 = common_scripts\utility::array_combine( var_2, var_1 );
var_4 = [];
var_5 = undefined;
foreach ( var_7 in var_3 )
{
if ( !isdefined( var_7.script_noteworthy ) )
continue;
switch ( var_7.script_noteworthy )
{
case "open":
var_0.open_pos = var_7;
break;
case "closed":
var_0.closed_pos = var_7;
break;
case "door_part":
var_4[var_4.size] = var_7;
break;
case "pivot":
var_5 = var_7;
break;
default:
break;
}
}
if ( !isdefined( var_0.open_pos ) || !isdefined( var_0.closed_pos ) || !isdefined( var_5 ) || var_4.size == 0 )
return 0;
var_0.closed_pos.move_angles = get_rotate_angle( var_0.open_pos.angles, var_0.closed_pos.angles, var_5.angles );
var_0.open_pos.move_angles = -1 * var_0.closed_pos.move_angles;
var_9 = spawn( "script_model", var_5.origin );
var_9 setmodel( "tag_origin" );
var_9.angles = var_5.angles;
foreach ( var_11 in var_4 )
var_11 linkto( var_9 );
var_0.link_ent = var_9;
return 1;
}
breach_other_watch( var_0 )
{
var_0 waittill( "breach_activated", var_1, var_2, var_3 );
self notify( "breach_activated", var_1, var_2, var_3 );
}
breach_open_watch()
{
self waittill( "breach_activated", var_0, var_1, var_2 );
var_3 = getentarray( self.target, "targetname" );
foreach ( var_5 in var_3 )
{
if ( isdefined( var_5.classname ) && var_5.classname == "trigger_use_touch" )
maps\mp\_utility::remove_from_bot_use_targets( var_5 );
}
if ( isdefined( var_0 ) && !maps\mp\_utility::ismlgmatch() )
{
foreach ( var_8 in self.care_packages )
{
var_9 = common_scripts\utility::random( [ "uplink_support", "deployable_vest", "deployable_ammo", "ball_drone_radar", "aa_launcher", "jammer", "ims" ] );
add_care_package( var_8.origin, var_8.angles, var_0, var_2, var_9 );
}
}
var_11 = 0.2;
foreach ( var_13 in self.doors )
thread breach_open_door( var_13, var_11 );
foreach ( var_16 in self.animated_doors )
{
var_16 scriptmodelplayanimdeltamotion( level.breach_anims[var_16.script_noteworthy] );
switch ( var_16.script_noteworthy )
{
case "mp_dart_container_breach_side1":
playsoundatpos( var_16.origin, "scn_dart_trailer_breach_side" );
break;
case "mp_dart_container_breach_side2":
playsoundatpos( var_16.origin, "scn_dart_trailer_breach_side" );
break;
case "mp_dart_container_breach_top":
playsoundatpos( var_16.origin, "scn_dart_trailer_breach_top" );
break;
default:
break;
}
}
wait( var_11 );
common_scripts\utility::array_call( self.notsolid_ents, ::notsolid );
common_scripts\utility::array_call( self.delete_ents, ::delete );
common_scripts\utility::array_call( self.solid_ents, ::solid );
foreach ( var_19 in self.solid_ents )
{
var_19 solid();
if ( isdefined( level.players ) )
{
foreach ( var_0 in level.players )
{
if ( var_0 istouching( var_19 ) )
thread breach_kill_player( var_0 );
}
}
}
common_scripts\utility::flag_set( "breach_connect_nodes" );
}
breach_kill_player( var_0 )
{
radiusdamage( var_0.origin, 8, 1000, 1000, self.owner, "MOD_CRUSH" );
}
breach_open_door( var_0, var_1 )
{
breach_move_door( var_0, var_0.open_pos, var_1 );
}
breach_close_door( var_0, var_1 )
{
breach_move_door( var_0, var_0.closed_pos, var_1 );
}
breach_move_door( var_0, var_1, var_2 )
{
var_3 = var_1.angles;
var_4 = var_1.origin;
if ( isdefined( var_2 ) && var_2 > 0 )
{
if ( isdefined( var_3 ) && var_3 != var_0.link_ent.angles )
var_0.link_ent rotateby( var_1.move_angles, var_2, var_2 );
if ( isdefined( var_4 ) && var_4 != var_0.link_ent.origin )
var_0.link_ent moveto( var_4, var_2 );
}
else
{
if ( isdefined( var_3 ) )
var_0.link_ent.angles = var_3;
if ( isdefined( var_4 ) )
var_0.link_ent.origin = var_4;
}
}
is_explosive( var_0 )
{
if ( !isdefined( var_0 ) )
return 0;
var_0 = tolower( var_0 );
switch ( var_0 )
{
case "mod_explosive":
case "mod_projectile_splash":
case "mod_grenade_splash":
case "splash":
return 1;
default:
return 0;
}
return 0;
}
normalize_angles_180( var_0 )
{
return ( angleclamp180( var_0[0] ), angleclamp180( var_0[1] ), angleclamp180( var_0[2] ) );
}
get_rotate_angle( var_0, var_1, var_2 )
{
var_3 = var_1 - var_0;
var_3 = normalize_angles_180( var_3 );
if ( isdefined( var_2 ) )
{
var_4 = var_2 - var_0;
var_4 = normalize_angles_180( var_4 );
for ( var_5 = 0; var_5 < 3; var_5++ )
{
if ( var_4[var_5] * var_3[var_5] < 0 )
{
var_6 = 360;
if ( var_4[var_5] < 0 )
var_6 = -360;
var_3 = ( var_3[0] + var_6 * ( var_5 == 0 ), var_3[1] + var_6 * ( var_5 == 1 ), var_3[2] + var_6 * ( var_5 == 2 ) );
}
}
}
return var_3;
}
ceiling_rubble()
{
level thread ceiling_rubble_onplayerconnect();
wait 0.05;
if ( !isdefined( level.fx_tag_origin ) )
level.fx_tag_origin = common_scripts\utility::spawn_tag_origin();
var_0 = [];
var_1 = getentarray( "fx_building_impact", "targetname" );
level thread do_rubble( var_1 );
}
wait_and_trigger_fx()
{
wait( randomfloatrange( 0.0, 0.4 ) );
triggerfx( self );
}
do_rubble( var_0 )
{
for (;;)
{
level waittill( "do_rubble", var_1 );
foreach ( var_3 in var_0 )
{
if ( isdefined( var_3.script_index ) )
{
level.fx_tag_origin.origin = var_1;
if ( level.fx_tag_origin istouching( var_3 ) )
{
if ( isdefined( var_3.script_index ) )
{
if ( !isdefined( var_3.playing_effect ) )
var_3.playing_effect = 0;
if ( var_3.playing_effect == 0 )
{
var_3.playing_effect = 1;
common_scripts\utility::exploder( var_3.script_index );
var_3 thread clear_volume_flag();
}
}
}
}
}
}
}
clear_volume_flag()
{
wait 1.5;
self.playing_effect = 0;
}
ceiling_rubble_onplayerconnect()
{
for (;;)
{
level waittill( "connected", var_0 );
var_0 thread ceiling_rubble_watchusage( "missile_fire" );
var_0 thread ceiling_rubble_watchusage( "grenade_fire" );
}
}
ceiling_rubble_watchusage( var_0 )
{
self endon( "disconnect" );
for (;;)
{
self waittill( var_0, var_1, var_2 );
if ( isdefined( var_2 ) )
{
switch ( var_2 )
{
case "ac130_25mm_mp":
case "concussion_grenade_mp":
case "smoke_grenadejugg_mp":
case "smoke_grenade_mp":
case "flash_grenade_mp":
continue;
default:
break;
}
}
var_1 thread ceiling_rubble_missile_explode_watch();
}
}
endondeath()
{
self waittill( "death" );
waittillframeend;
self notify( "end_of_frame_death" );
}
ceiling_rubble_missile_explode_watch()
{
thread endondeath();
self endon( "end_of_frame_death" );
self waittill( "explode", var_0 );
level notify( "do_rubble", var_0 );
}
search_bot()
{
while ( !isdefined( level.players ) || level.players.size == 0 )
wait 0.05;
var_0 = getallnodes();
var_1 = common_scripts\utility::random( var_0 );
var_2 = level.players[0];
var_3 = spawn( "script_model", var_1.origin );
var_3 setmodel( "com_deploy_ballistic_vest_friend_world" );
for (;;)
{
var_4 = getnodesonpath( var_1.origin, var_2.origin );
if ( !isdefined( var_4 ) || var_4.size == 0 )
{
wait 0.1;
continue;
}
var_5 = var_4[0];
if ( distance( var_3.origin, var_4[0].origin ) < 6 )
{
if ( var_4.size <= 1 )
{
wait 0.1;
continue;
}
var_5 = var_4[1];
}
var_6 = var_5.origin - var_1.origin;
var_7 = vectortoangles( var_6 );
var_8 = 180;
var_9 = length( var_6 );
var_10 = var_9 / var_8;
if ( var_10 <= 0 )
{
wait 0.1;
continue;
}
var_3 rotateto( var_7, min( 0.5, var_10 ) );
var_3 moveto( var_5.origin, var_10 );
var_3 waittill( "movedone" );
var_1 = var_5;
}
}
player_connect_watch()
{
for (;;)
{
level waittill( "connected", var_0 );
if ( common_scripts\utility::flag( "gas_station_exploded" ) )
hide_gas_station_physics_pieces();
}
}
hide_gas_station_physics_pieces()
{
var_0 = common_scripts\utility::getstructarray( "gas", "targetname" );
foreach ( var_2 in var_0 )
{
foreach ( var_4 in var_2.launch_ents )
{
var_4 hide();
foreach ( var_6 in level.players )
{
if ( isdefined( var_6.present_for_gas_station_explosion ) && var_6.present_for_gas_station_explosion == 1 )
var_4 showtoplayer( var_6 );
}
}
}
}
care_package_watch()
{
self endon( "end" );
var_0 = getent( "care_package_volume", "targetname" );
common_scripts\utility::flag_wait( "gas_station_exploded" );
var_1 = level.carepackages;
if ( isdefined( var_1 ) )
{
foreach ( var_3 in var_1 )
{
if ( isdefined( var_3.inuse ) && var_3.inuse )
continue;
if ( isdefined( var_3.droppingtoground ) && !var_3.droppingtoground && ( isdefined( var_3.friendlymodel ) && var_3.friendlymodel istouching( var_0 ) ) )
{
var_4 = var_3.owner;
var_5 = var_3.droptype;
var_6 = var_3.cratetype;
var_7 = var_3.origin;
var_3 maps\mp\killstreaks\_airdrop::deletecrate();
var_8 = var_4 maps\mp\killstreaks\_airdrop::createairdropcrate( var_4, var_5, var_6, var_7 + ( 0, 0, 250 ), var_7 + ( 0, 0, 250 ) );
var_8.droppingtoground = 1;
var_8 thread [[ level.cratetypes[var_8.droptype][var_8.cratetype].func ]]( var_8.droptype );
common_scripts\utility::waitframe();
var_8 clonebrushmodeltoscriptmodel( level.airdropcratecollision );
var_8 thread common_scripts\utility::entity_path_disconnect_thread( 1.0 );
var_8 physicslaunchserver( var_8.origin, ( 0, -20000, 20000 ) );
if ( isbot( var_8.owner ) )
{
wait 0.1;
var_8.owner notify( "new_crate_to_take" );
}
}
}
}
}
deleteonownerdeath( var_0 )
{
wait 0.25;
self linkto( var_0, "tag_origin", ( 0, 0, 0 ), ( 0, 0, 0 ) );
var_0 waittill( "death" );
self delete();
}
container_pathnode_watch()
{
var_0 = getnodearray( "disconnect_until_container_opens", "targetname" );
foreach ( var_2 in var_0 )
var_2 disconnectnode();
common_scripts\utility::flag_wait( "breach_connect_nodes" );
foreach ( var_2 in var_0 )
var_2 connectnode();
}