1446 lines
36 KiB
Plaintext
1446 lines
36 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
init()
|
|
{
|
|
common_scripts\utility::array_thread( getentarray( "com_wall_fan_blade_rotate_slow", "targetname" ), ::fan_blade_rotate, "veryslow" );
|
|
common_scripts\utility::array_thread( getentarray( "com_wall_fan_blade_rotate", "targetname" ), ::fan_blade_rotate, "slow" );
|
|
common_scripts\utility::array_thread( getentarray( "com_wall_fan_blade_rotate_fast", "targetname" ), ::fan_blade_rotate, "fast" );
|
|
var_0 = [];
|
|
var_0["trigger_multiple_dyn_metal_detector"] = ::metal_detector;
|
|
var_0["trigger_multiple_dyn_creaky_board"] = ::creaky_board;
|
|
var_0["trigger_multiple_dyn_photo_copier"] = ::photo_copier;
|
|
var_0["trigger_multiple_dyn_copier_no_light"] = ::photo_copier_no_light;
|
|
var_0["trigger_radius_motion_light"] = ::motion_light;
|
|
var_0["trigger_radius_dyn_motion_dlight"] = ::outdoor_motion_dlight;
|
|
var_0["trigger_multiple_dog_bark"] = ::dog_bark;
|
|
var_0["trigger_radius_bird_startle"] = ::bird_startle;
|
|
var_0["trigger_multiple_dyn_motion_light"] = ::motion_light;
|
|
var_0["trigger_multiple_dyn_door"] = ::trigger_door;
|
|
player_init();
|
|
|
|
foreach ( var_4, var_2 in var_0 )
|
|
{
|
|
var_3 = getentarray( var_4, "classname" );
|
|
common_scripts\utility::array_thread( var_3, ::triggertouchthink );
|
|
common_scripts\utility::array_thread( var_3, var_2 );
|
|
}
|
|
|
|
common_scripts\utility::array_thread( getentarray( "vending_machine", "targetname" ), ::vending_machine );
|
|
common_scripts\utility::array_thread( getentarray( "toggle", "targetname" ), ::use_toggle );
|
|
level thread onplayerconnect();
|
|
var_5 = getent( "civilian_jet_origin", "targetname" );
|
|
|
|
if ( isdefined( var_5 ) )
|
|
var_5 thread civilian_jet_flyby();
|
|
|
|
thread interactive_tv();
|
|
}
|
|
|
|
onplayerconnect()
|
|
{
|
|
for (;;)
|
|
{
|
|
level waittill( "connecting", var_0 );
|
|
var_0 thread movementtracker();
|
|
}
|
|
}
|
|
|
|
player_init()
|
|
{
|
|
if ( common_scripts\utility::issp() )
|
|
{
|
|
foreach ( var_1 in level.players )
|
|
{
|
|
var_1.touchtriggers = [];
|
|
var_1 thread movementtracker();
|
|
}
|
|
}
|
|
}
|
|
|
|
ai_init()
|
|
{
|
|
self.touchtriggers = [];
|
|
thread movementtracker();
|
|
}
|
|
|
|
civilian_jet_flyby()
|
|
{
|
|
level endon( "game_ended" );
|
|
jet_init();
|
|
level waittill( "prematch_over" );
|
|
|
|
for (;;)
|
|
{
|
|
thread jet_timer();
|
|
self waittill( "start_flyby" );
|
|
thread jet_flyby();
|
|
self waittill( "flyby_done" );
|
|
jet_reset();
|
|
}
|
|
}
|
|
|
|
jet_init()
|
|
{
|
|
self.jet_parts = getentarray( self.target, "targetname" );
|
|
self.jet_flyto = getent( "civilian_jet_flyto", "targetname" );
|
|
self.engine_fxs = getentarray( "engine_fx", "targetname" );
|
|
self.flash_fxs = getentarray( "flash_fx", "targetname" );
|
|
self.jet_engine_fx = loadfx( "fx/fire/jet_afterburner" );
|
|
self.jet_flash_fx_red = loadfx( "fx/misc/aircraft_light_wingtip_red" );
|
|
self.jet_flash_fx_green = loadfx( "fx/misc/aircraft_light_wingtip_green" );
|
|
self.jet_flash_fx_blink = loadfx( "fx/misc/aircraft_light_red_blink" );
|
|
level.civilianjetflyby = undefined;
|
|
var_0 = vectornormalize( self.origin - self.jet_flyto.origin ) * 20000;
|
|
self.jet_flyto.origin = self.jet_flyto.origin - var_0;
|
|
self.origin = self.origin + var_0;
|
|
|
|
foreach ( var_2 in self.jet_parts )
|
|
{
|
|
var_2.origin = var_2.origin + var_0;
|
|
var_2.old_origin = var_2.origin;
|
|
var_2 hide();
|
|
}
|
|
|
|
foreach ( var_5 in self.engine_fxs )
|
|
var_5.origin = var_5.origin + var_0;
|
|
|
|
foreach ( var_8 in self.flash_fxs )
|
|
var_8.origin = var_8.origin + var_0;
|
|
|
|
var_10 = self.origin;
|
|
var_11 = self.jet_flyto.origin;
|
|
self.jet_fly_vec = var_11 - var_10;
|
|
var_12 = 2000;
|
|
var_13 = abs( distance( var_10, var_11 ) );
|
|
self.jet_flight_time = var_13 / var_12;
|
|
}
|
|
|
|
jet_reset()
|
|
{
|
|
foreach ( var_1 in self.jet_parts )
|
|
{
|
|
var_1.origin = var_1.old_origin;
|
|
var_1 hide();
|
|
}
|
|
}
|
|
|
|
jet_timer()
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 = gettimeinterval();
|
|
var_1 = max( 10, var_0 );
|
|
var_1 = min( var_1, 100 );
|
|
|
|
if ( getdvar( "jet_flyby_timer" ) != "" )
|
|
level.civilianjetflyby_timer = 5 + getdvarint( "jet_flyby_timer" );
|
|
else
|
|
level.civilianjetflyby_timer = ( 0.25 + randomfloatrange( 0.3, 0.7 ) ) * 60 * var_1;
|
|
|
|
wait( level.civilianjetflyby_timer );
|
|
|
|
while ( isdefined( level.airstrikeinprogress ) || isdefined( level.ac130player ) || isdefined( level.chopper ) || isdefined( level.remotemissileinprogress ) )
|
|
wait 0.05;
|
|
|
|
self notify( "start_flyby" );
|
|
level.civilianjetflyby = 1;
|
|
self waittill( "flyby_done" );
|
|
level.civilianjetflyby = undefined;
|
|
}
|
|
|
|
gettimeinterval()
|
|
{
|
|
if ( common_scripts\utility::issp() )
|
|
return 10.0;
|
|
|
|
if ( isdefined( game["status"] ) && game["status"] == "overtime" )
|
|
return 1.0;
|
|
else
|
|
return getwatcheddvar( "timelimit" );
|
|
}
|
|
|
|
getwatcheddvar( var_0 )
|
|
{
|
|
var_0 = "scr_" + level.gametype + "_" + var_0;
|
|
|
|
if ( isdefined( level.overridewatchdvars ) && isdefined( level.overridewatchdvars[var_0] ) )
|
|
return level.overridewatchdvars[var_0];
|
|
|
|
return level.watchdvars[var_0].value;
|
|
}
|
|
|
|
jet_flyby()
|
|
{
|
|
foreach ( var_1 in self.jet_parts )
|
|
var_1 show();
|
|
|
|
var_3 = [];
|
|
var_4 = [];
|
|
|
|
foreach ( var_6 in self.engine_fxs )
|
|
{
|
|
var_7 = spawn( "script_model", var_6.origin );
|
|
var_7 setmodel( "tag_origin" );
|
|
var_7.angles = var_6.angles;
|
|
var_3[var_3.size] = var_7;
|
|
}
|
|
|
|
foreach ( var_10 in self.flash_fxs )
|
|
{
|
|
var_11 = spawn( "script_model", var_10.origin );
|
|
var_11 setmodel( "tag_origin" );
|
|
var_11.color = var_10.script_noteworthy;
|
|
var_11.angles = var_10.angles;
|
|
var_4[var_4.size] = var_11;
|
|
}
|
|
|
|
thread jet_planesound( self.jet_parts[0], level.mapcenter );
|
|
wait 0.05;
|
|
|
|
foreach ( var_7 in var_3 )
|
|
playfxontag( self.jet_engine_fx, var_7, "tag_origin" );
|
|
|
|
foreach ( var_11 in var_4 )
|
|
{
|
|
if ( isdefined( var_11.color ) && var_11.color == "blink" )
|
|
{
|
|
playfxontag( self.jet_flash_fx_blink, var_11, "tag_origin" );
|
|
continue;
|
|
}
|
|
|
|
if ( isdefined( var_11.color ) && var_11.color == "red" )
|
|
{
|
|
playfxontag( self.jet_flash_fx_red, var_11, "tag_origin" );
|
|
continue;
|
|
}
|
|
|
|
playfxontag( self.jet_flash_fx_green, var_11, "tag_origin" );
|
|
}
|
|
|
|
foreach ( var_1 in self.jet_parts )
|
|
var_1 moveto( var_1.origin + self.jet_fly_vec, self.jet_flight_time );
|
|
|
|
foreach ( var_7 in var_3 )
|
|
var_7 moveto( var_7.origin + self.jet_fly_vec, self.jet_flight_time );
|
|
|
|
foreach ( var_11 in var_4 )
|
|
var_11 moveto( var_11.origin + self.jet_fly_vec, self.jet_flight_time );
|
|
|
|
wait( self.jet_flight_time + 1 );
|
|
|
|
foreach ( var_7 in var_3 )
|
|
var_7 delete();
|
|
|
|
foreach ( var_11 in var_4 )
|
|
var_11 delete();
|
|
|
|
self notify( "flyby_done" );
|
|
}
|
|
|
|
jet_planesound( var_0, var_1 )
|
|
{
|
|
var_0 thread playsound_loop_on_ent( "veh_mig29_dist_loop" );
|
|
|
|
while ( !targetisclose( var_0, var_1 ) )
|
|
wait 0.05;
|
|
|
|
var_0 thread playsound_loop_on_ent( "veh_mig29_close_loop" );
|
|
|
|
while ( targetisinfront( var_0, var_1 ) )
|
|
wait 0.05;
|
|
|
|
wait 0.5;
|
|
var_0 thread playsound_float( "veh_mig29_sonic_boom" );
|
|
|
|
while ( targetisclose( var_0, var_1 ) )
|
|
wait 0.05;
|
|
|
|
var_0 notify( "stop soundveh_mig29_close_loop" );
|
|
self waittill( "flyby_done" );
|
|
var_0 notify( "stop soundveh_mig29_dist_loop" );
|
|
}
|
|
|
|
playsound_float( var_0, var_1, var_2 )
|
|
{
|
|
var_3 = spawn( "script_origin", ( 0, 0, 1 ) );
|
|
var_3 hide();
|
|
|
|
if ( !isdefined( var_1 ) )
|
|
var_1 = self.origin;
|
|
|
|
var_3.origin = var_1;
|
|
|
|
if ( isdefined( var_2 ) && var_2 )
|
|
var_3 playsoundasmaster( var_0 );
|
|
else
|
|
var_3 playsound( var_0 );
|
|
|
|
wait 10.0;
|
|
var_3 delete();
|
|
}
|
|
|
|
playsound_loop_on_ent( var_0, var_1 )
|
|
{
|
|
var_2 = spawn( "script_origin", ( 0, 0, 0 ) );
|
|
var_2 hide();
|
|
var_2 endon( "death" );
|
|
thread common_scripts\utility::delete_on_death( var_2 );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
{
|
|
var_2.origin = self.origin + var_1;
|
|
var_2.angles = self.angles;
|
|
var_2 linkto( self );
|
|
}
|
|
else
|
|
{
|
|
var_2.origin = self.origin;
|
|
var_2.angles = self.angles;
|
|
var_2 linkto( self );
|
|
}
|
|
|
|
var_2 playloopsound( var_0 );
|
|
self waittill( "stop sound" + var_0 );
|
|
var_2 stoploopsound( var_0 );
|
|
var_2 delete();
|
|
}
|
|
|
|
targetisinfront( var_0, var_1 )
|
|
{
|
|
var_2 = anglestoforward( common_scripts\utility::flat_angle( var_0.angles ) );
|
|
var_3 = vectornormalize( common_scripts\utility::flat_origin( var_1 ) - var_0.origin );
|
|
var_4 = vectordot( var_2, var_3 );
|
|
|
|
if ( var_4 > 0 )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
targetisclose( var_0, var_1 )
|
|
{
|
|
var_2 = targetisinfront( var_0, var_1 );
|
|
|
|
if ( var_2 )
|
|
var_3 = 1;
|
|
else
|
|
var_3 = -1;
|
|
|
|
var_4 = common_scripts\utility::flat_origin( var_0.origin );
|
|
var_5 = var_4 + anglestoforward( common_scripts\utility::flat_angle( var_0.angles ) ) * ( var_3 * 100000 );
|
|
var_6 = pointonsegmentnearesttopoint( var_4, var_5, var_1 );
|
|
var_7 = distance( var_4, var_6 );
|
|
|
|
if ( var_7 < 3000 )
|
|
return 1;
|
|
else
|
|
return 0;
|
|
}
|
|
|
|
vending_machine()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self setcursorhint( "HINT_ACTIVATE" );
|
|
self.vm_normal = getent( self.target, "targetname" );
|
|
var_0 = getent( self.vm_normal.target, "targetname" );
|
|
var_1 = getent( var_0.target, "targetname" );
|
|
var_2 = getent( var_1.target, "targetname" );
|
|
self.vm_launch_from = var_2.origin;
|
|
var_3 = getent( var_2.target, "targetname" );
|
|
self.vm_launch_to = var_3.origin;
|
|
|
|
if ( isdefined( var_3.target ) )
|
|
self.vm_fx_loc = getent( var_3.target, "targetname" ).origin;
|
|
|
|
self.vm_normal setcandamage( 1 );
|
|
self.vm_normal_model = self.vm_normal.model;
|
|
self.vm_damaged_model = self.vm_normal.script_noteworthy;
|
|
self.vm_soda_model = var_0.model;
|
|
self.vm_soda_start_pos = var_0.origin;
|
|
self.vm_soda_start_angle = var_0.angles;
|
|
self.vm_soda_stop_pos = var_1.origin;
|
|
self.vm_soda_stop_angle = var_1.angles;
|
|
precachemodel( self.vm_damaged_model );
|
|
var_0 delete();
|
|
var_1 delete();
|
|
var_2 delete();
|
|
var_3 delete();
|
|
self.soda_array = [];
|
|
self.soda_count = 12;
|
|
self.soda_slot = undefined;
|
|
self.hp = 400;
|
|
thread vending_machine_damage_monitor( self.vm_normal );
|
|
self playloopsound( "vending_machine_hum" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger", var_4 );
|
|
self playsound( "vending_machine_button_press" );
|
|
|
|
if ( !self.soda_count )
|
|
continue;
|
|
|
|
if ( isdefined( self.soda_slot ) )
|
|
soda_can_eject();
|
|
|
|
soda_can_drop( spawn_soda() );
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
vending_machine_damage_monitor( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_1 = "mod_grenade mod_projectile mod_explosive mod_grenade_splash mod_projectile_splash splash";
|
|
var_2 = loadfx( "fx/explosions/tv_explosion" );
|
|
|
|
for (;;)
|
|
{
|
|
var_3 = undefined;
|
|
var_4 = undefined;
|
|
var_5 = undefined;
|
|
var_6 = undefined;
|
|
var_7 = undefined;
|
|
var_0 waittill( "damage", var_3, var_4, var_5, var_6, var_7 );
|
|
|
|
if ( isdefined( var_7 ) )
|
|
{
|
|
if ( issubstr( var_1, tolower( var_7 ) ) )
|
|
var_3 = var_3 * 3;
|
|
|
|
self.hp = self.hp - var_3;
|
|
|
|
if ( self.hp > 0 )
|
|
continue;
|
|
|
|
self notify( "death" );
|
|
self.origin = self.origin + ( 0, 0, 10000 );
|
|
|
|
if ( !isdefined( self.vm_fx_loc ) )
|
|
var_8 = self.vm_normal.origin + ( 37, -31, 52 );
|
|
else
|
|
var_8 = self.vm_fx_loc;
|
|
|
|
playfx( var_2, var_8 );
|
|
self.vm_normal setmodel( self.vm_damaged_model );
|
|
|
|
while ( self.soda_count > 0 )
|
|
{
|
|
if ( isdefined( self.soda_slot ) )
|
|
soda_can_eject();
|
|
|
|
soda_can_drop( spawn_soda() );
|
|
wait 0.05;
|
|
}
|
|
|
|
self stoploopsound( "vending_machine_hum" );
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
spawn_soda()
|
|
{
|
|
var_0 = spawn( "script_model", self.vm_soda_start_pos );
|
|
var_0 setmodel( self.vm_soda_model );
|
|
var_0.origin = self.vm_soda_start_pos;
|
|
var_0.angles = self.vm_soda_start_angle;
|
|
return var_0;
|
|
}
|
|
|
|
soda_can_drop( var_0 )
|
|
{
|
|
var_0 moveto( self.vm_soda_stop_pos, 0.2 );
|
|
var_0 playsound( "vending_machine_soda_drop" );
|
|
wait 0.2;
|
|
self.soda_slot = var_0;
|
|
self.soda_count--;
|
|
}
|
|
|
|
soda_can_eject()
|
|
{
|
|
self endon( "death" );
|
|
|
|
if ( isdefined( self.soda_slot.ejected ) && self.soda_slot.ejected == 1 )
|
|
return;
|
|
|
|
var_0 = 1;
|
|
var_1 = var_0 * -999;
|
|
var_2 = int( 40000 );
|
|
var_3 = ( int( var_2 / 2 ), int( var_2 / 2 ), 0 ) - ( randomint( var_2 ), randomint( var_2 ), 0 );
|
|
var_4 = vectornormalize( self.vm_launch_to - self.vm_launch_from + var_3 );
|
|
var_5 = var_4 * randomfloatrange( var_1, var_0 );
|
|
self.soda_slot physicslaunchclient( self.vm_launch_from, var_5 );
|
|
self.soda_slot.ejected = 1;
|
|
}
|
|
|
|
freefall()
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 = "briefcase_bomb_mp";
|
|
precacheitem( var_0 );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger_enter", var_1 );
|
|
|
|
if ( !var_1 hasweapon( var_0 ) )
|
|
{
|
|
var_1 playsound( "freefall_death" );
|
|
var_1 giveweapon( var_0 );
|
|
var_1 setweaponammostock( var_0, 0 );
|
|
var_1 setweaponammoclip( var_0, 0 );
|
|
var_1 switchtoweapon( var_0 );
|
|
}
|
|
}
|
|
}
|
|
|
|
metal_detector()
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 = getent( self.target, "targetname" );
|
|
var_0 enablegrenadetouchdamage();
|
|
var_1 = getent( var_0.target, "targetname" );
|
|
var_2 = getent( var_1.target, "targetname" );
|
|
var_3 = getent( var_2.target, "targetname" );
|
|
var_4 = getent( var_3.target, "targetname" );
|
|
var_5 = [];
|
|
var_6 = min( var_1.origin[0], var_2.origin[0] );
|
|
var_5[0] = var_6;
|
|
var_7 = max( var_1.origin[0], var_2.origin[0] );
|
|
var_5[1] = var_7;
|
|
var_8 = min( var_1.origin[1], var_2.origin[1] );
|
|
var_5[2] = var_8;
|
|
var_9 = max( var_1.origin[1], var_2.origin[1] );
|
|
var_5[3] = var_9;
|
|
var_10 = min( var_1.origin[2], var_2.origin[2] );
|
|
var_5[4] = var_10;
|
|
var_11 = max( var_1.origin[2], var_2.origin[2] );
|
|
var_5[5] = var_11;
|
|
var_1 delete();
|
|
var_2 delete();
|
|
|
|
if ( !common_scripts\utility::issp() )
|
|
self.alarm_interval = 7;
|
|
else
|
|
self.alarm_interval = 2;
|
|
|
|
self.alarm_playing = 0;
|
|
self.alarm_annoyance = 0;
|
|
self.tolerance = 0;
|
|
thread metal_detector_dmg_monitor( var_0 );
|
|
thread metal_detector_touch_monitor();
|
|
thread metal_detector_weapons( var_5, "weapon_claymore", "weapon_c4" );
|
|
var_12 = ( var_3.origin[0], var_3.origin[1], var_11 );
|
|
var_13 = ( var_4.origin[0], var_4.origin[1], var_11 );
|
|
var_14 = loadfx( "fx/props/metal_detector_light" );
|
|
|
|
for (;;)
|
|
{
|
|
common_scripts\utility::waittill_any( "dmg_triggered", "touch_triggered", "weapon_triggered" );
|
|
thread playsound_and_light( "alarm_metal_detector", var_14, var_12, var_13 );
|
|
}
|
|
}
|
|
|
|
playsound_and_light( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
if ( !self.alarm_playing )
|
|
{
|
|
self.alarm_playing = 1;
|
|
thread annoyance_tracker();
|
|
|
|
if ( !self.alarm_annoyance )
|
|
self playsound( var_0 );
|
|
|
|
playfx( var_1, var_2 );
|
|
playfx( var_1, var_3 );
|
|
wait( self.alarm_interval );
|
|
self.alarm_playing = 0;
|
|
}
|
|
}
|
|
|
|
annoyance_tracker()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
if ( !self.tolerance )
|
|
return;
|
|
|
|
var_0 = self.alarm_interval + 0.15;
|
|
|
|
if ( self.tolerance )
|
|
self.tolerance--;
|
|
else
|
|
self.alarm_annoyance = 1;
|
|
|
|
var_1 = gettime();
|
|
var_2 = 7;
|
|
|
|
if ( common_scripts\utility::issp() )
|
|
var_2 = 2;
|
|
|
|
waittill_any_or_timeout( "dmg_triggered", "touch_triggered", "weapon_triggered", var_2 + 2 );
|
|
var_3 = gettime() - var_1;
|
|
|
|
if ( var_3 > var_2 * 1000 + 1150 )
|
|
{
|
|
self.alarm_annoyance = 0;
|
|
self.tolerance = 0;
|
|
}
|
|
}
|
|
|
|
waittill_any_or_timeout( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( var_0 );
|
|
self endon( var_1 );
|
|
self endon( var_2 );
|
|
wait( var_3 );
|
|
}
|
|
|
|
metal_detector_weapons( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
waittill_weapon_placed();
|
|
var_3 = getentarray( "grenade", "classname" );
|
|
|
|
foreach ( var_5 in var_3 )
|
|
{
|
|
if ( isdefined( var_5.model ) && ( var_5.model == var_1 || var_5.model == var_2 ) )
|
|
{
|
|
if ( isinbound( var_5, var_0 ) )
|
|
thread weapon_notify_loop( var_5, var_0 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
waittill_weapon_placed()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "dmg_triggered" );
|
|
self waittill( "touch_triggered" );
|
|
}
|
|
|
|
weapon_notify_loop( var_0, var_1 )
|
|
{
|
|
var_0 endon( "death" );
|
|
|
|
while ( isinbound( var_0, var_1 ) )
|
|
{
|
|
self notify( "weapon_triggered" );
|
|
wait( self.alarm_interval );
|
|
}
|
|
}
|
|
|
|
isinbound( var_0, var_1 )
|
|
{
|
|
var_2 = var_1[0];
|
|
var_3 = var_1[1];
|
|
var_4 = var_1[2];
|
|
var_5 = var_1[3];
|
|
var_6 = var_1[4];
|
|
var_7 = var_1[5];
|
|
var_8 = var_0.origin[0];
|
|
var_9 = var_0.origin[1];
|
|
var_10 = var_0.origin[2];
|
|
|
|
if ( isinbound_single( var_8, var_2, var_3 ) )
|
|
{
|
|
if ( isinbound_single( var_9, var_4, var_5 ) )
|
|
{
|
|
if ( isinbound_single( var_10, var_6, var_7 ) )
|
|
return 1;
|
|
}
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
isinbound_single( var_0, var_1, var_2 )
|
|
{
|
|
if ( var_0 > var_1 && var_0 < var_2 )
|
|
return 1;
|
|
|
|
return 0;
|
|
}
|
|
|
|
metal_detector_dmg_monitor( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
var_0 waittill( "damage", var_1, var_2, var_3, var_4, var_5 );
|
|
|
|
if ( isdefined( var_5 ) && alarm_validate_damage( var_5 ) )
|
|
self notify( "dmg_triggered" );
|
|
}
|
|
}
|
|
|
|
metal_detector_touch_monitor()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger_enter" );
|
|
|
|
while ( anythingtouchingtrigger( self ) )
|
|
{
|
|
self notify( "touch_triggered" );
|
|
wait( self.alarm_interval );
|
|
}
|
|
}
|
|
}
|
|
|
|
alarm_validate_damage( var_0 )
|
|
{
|
|
var_1 = "mod_melee melee mod_grenade mod_projectile mod_explosive mod_impact";
|
|
var_2 = strtok( var_1, " " );
|
|
|
|
foreach ( var_4 in var_2 )
|
|
{
|
|
if ( tolower( var_4 ) == tolower( var_0 ) )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
creaky_board()
|
|
{
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger_enter", var_0 );
|
|
var_0 thread do_creak( self );
|
|
}
|
|
}
|
|
|
|
do_creak( var_0 )
|
|
{
|
|
self endon( "disconnect" );
|
|
self endon( "death" );
|
|
self playsound( "step_walk_plr_woodcreak_on" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger_leave", var_1 );
|
|
|
|
if ( var_0 != var_1 )
|
|
continue;
|
|
|
|
self playsound( "step_walk_plr_woodcreak_off" );
|
|
return;
|
|
}
|
|
}
|
|
|
|
motion_light()
|
|
{
|
|
level endon( "game_ended" );
|
|
self.movetracker = 1;
|
|
self.lightson = 0;
|
|
var_0 = getentarray( self.target, "targetname" );
|
|
common_scripts\utility::noself_array_call( [ "com_two_light_fixture_off", "com_two_light_fixture_on" ], ::precachemodel );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_2.lightrigs = [];
|
|
var_3 = getent( var_2.target, "targetname" );
|
|
|
|
if ( !isdefined( var_3.target ) )
|
|
continue;
|
|
|
|
var_2.lightrigs = getentarray( var_3.target, "targetname" );
|
|
}
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger_enter" );
|
|
|
|
while ( anythingtouchingtrigger( self ) )
|
|
{
|
|
var_5 = 0;
|
|
|
|
foreach ( var_7 in self.touchlist )
|
|
{
|
|
if ( isdefined( var_7.distmoved ) && var_7.distmoved > 5.0 )
|
|
var_5 = 1;
|
|
}
|
|
|
|
if ( var_5 )
|
|
{
|
|
if ( !self.lightson )
|
|
{
|
|
self.lightson = 1;
|
|
var_0[0] playsound( "switch_auto_lights_on" );
|
|
|
|
foreach ( var_2 in var_0 )
|
|
{
|
|
var_2 setlightintensity( 1.0 );
|
|
|
|
if ( isdefined( var_2.lightrigs ) )
|
|
{
|
|
foreach ( var_11 in var_2.lightrigs )
|
|
var_11 setmodel( "com_two_light_fixture_on" );
|
|
}
|
|
}
|
|
}
|
|
|
|
thread motion_light_timeout( var_0, 10.0 );
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
}
|
|
|
|
motion_light_timeout( var_0, var_1 )
|
|
{
|
|
self notify( "motion_light_timeout" );
|
|
self endon( "motion_light_timeout" );
|
|
wait( var_1 );
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
var_3 setlightintensity( 0 );
|
|
|
|
if ( isdefined( var_3.lightrigs ) )
|
|
{
|
|
foreach ( var_5 in var_3.lightrigs )
|
|
var_5 setmodel( "com_two_light_fixture_off" );
|
|
}
|
|
}
|
|
|
|
var_0[0] playsound( "switch_auto_lights_off" );
|
|
self.lightson = 0;
|
|
}
|
|
|
|
outdoor_motion_dlight()
|
|
{
|
|
if ( !isdefined( level.outdoor_motion_light ) )
|
|
level.outdoor_motion_light = loadfx( "fx/misc/outdoor_motion_light" );
|
|
|
|
level endon( "game_ended" );
|
|
self.movetracker = 1;
|
|
self.lightson = 0;
|
|
var_0 = getent( self.target, "targetname" );
|
|
var_1 = getentarray( var_0.target, "targetname" );
|
|
common_scripts\utility::noself_array_call( [ "com_two_light_fixture_off", "com_two_light_fixture_on" ], ::precachemodel );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger_enter" );
|
|
|
|
while ( anythingtouchingtrigger( self ) )
|
|
{
|
|
var_2 = 0;
|
|
|
|
foreach ( var_4 in self.touchlist )
|
|
{
|
|
if ( isdefined( var_4.distmoved ) && var_4.distmoved > 5.0 )
|
|
var_2 = 1;
|
|
}
|
|
|
|
if ( var_2 )
|
|
{
|
|
if ( !self.lightson )
|
|
{
|
|
self.lightson = 1;
|
|
var_0 playsound( "switch_auto_lights_on" );
|
|
var_0 setmodel( "com_two_light_fixture_on" );
|
|
|
|
foreach ( var_7 in var_1 )
|
|
{
|
|
var_7.lightent = spawn( "script_model", var_7.origin );
|
|
var_7.lightent setmodel( "tag_origin" );
|
|
playfxontag( level.outdoor_motion_light, var_7.lightent, "tag_origin" );
|
|
}
|
|
}
|
|
|
|
thread outdoor_motion_dlight_timeout( var_0, var_1, 10.0 );
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
}
|
|
|
|
outdoor_motion_dlight_timeout( var_0, var_1, var_2 )
|
|
{
|
|
self notify( "motion_light_timeout" );
|
|
self endon( "motion_light_timeout" );
|
|
wait( var_2 );
|
|
|
|
foreach ( var_4 in var_1 )
|
|
var_4.lightent delete();
|
|
|
|
var_0 playsound( "switch_auto_lights_off" );
|
|
var_0 setmodel( "com_two_light_fixture_off" );
|
|
self.lightson = 0;
|
|
}
|
|
|
|
dog_bark()
|
|
{
|
|
level endon( "game_ended" );
|
|
self.movetracker = 1;
|
|
var_0 = getent( self.target, "targetname" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger_enter", var_1 );
|
|
|
|
while ( anythingtouchingtrigger( self ) )
|
|
{
|
|
var_2 = 0;
|
|
|
|
foreach ( var_4 in self.touchlist )
|
|
{
|
|
if ( isdefined( var_4.distmoved ) && var_4.distmoved > var_2 )
|
|
var_2 = var_4.distmoved;
|
|
}
|
|
|
|
if ( var_2 > 6.0 )
|
|
{
|
|
var_0 playsound( "dyn_anml_dog_bark" );
|
|
wait( randomfloatrange( 16 / var_2, 16 / var_2 + randomfloat( 1.0 ) ) );
|
|
continue;
|
|
}
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
}
|
|
|
|
trigger_door()
|
|
{
|
|
var_0 = getent( self.target, "targetname" );
|
|
self.doorent = var_0;
|
|
self.doorangle = getvectorrightangle( vectornormalize( self getorigin() - var_0 getorigin() ) );
|
|
var_0.baseyaw = var_0.angles[1];
|
|
var_1 = 1.0;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger_enter", var_2 );
|
|
var_0 thread dooropen( var_1, getdoorside( var_2 ) );
|
|
|
|
if ( anythingtouchingtrigger( self ) )
|
|
self waittill( "trigger_empty" );
|
|
|
|
wait 3.0;
|
|
|
|
if ( anythingtouchingtrigger( self ) )
|
|
self waittill( "trigger_empty" );
|
|
|
|
var_0 thread doorclose( var_1 );
|
|
}
|
|
}
|
|
|
|
dooropen( var_0, var_1 )
|
|
{
|
|
if ( var_1 )
|
|
self rotateto( ( 0, self.baseyaw + 90, 1 ), var_0, 0.1, 0.75 );
|
|
else
|
|
self rotateto( ( 0, self.baseyaw - 90, 1 ), var_0, 0.1, 0.75 );
|
|
|
|
self playsound( "door_generic_house_open" );
|
|
wait( var_0 + 0.05 );
|
|
}
|
|
|
|
doorclose( var_0 )
|
|
{
|
|
self rotateto( ( 0, self.baseyaw, 1 ), var_0 );
|
|
self playsound( "door_generic_house_close" );
|
|
wait( var_0 + 0.05 );
|
|
}
|
|
|
|
getdoorside( var_0 )
|
|
{
|
|
return vectordot( self.doorangle, vectornormalize( var_0.origin - self.doorent getorigin() ) ) > 0;
|
|
}
|
|
|
|
getvectorrightangle( var_0 )
|
|
{
|
|
return ( var_0[1], 0 - var_0[0], var_0[2] );
|
|
}
|
|
|
|
use_toggle()
|
|
{
|
|
if ( self.classname != "trigger_use_touch" )
|
|
return;
|
|
|
|
var_0 = getentarray( self.target, "targetname" );
|
|
self.lightson = 1;
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 setlightintensity( 1.5 * self.lightson );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger" );
|
|
self.lightson = !self.lightson;
|
|
|
|
if ( self.lightson )
|
|
{
|
|
foreach ( var_2 in var_0 )
|
|
var_2 setlightintensity( 1.5 );
|
|
|
|
self playsound( "switch_auto_lights_on" );
|
|
continue;
|
|
}
|
|
|
|
foreach ( var_2 in var_0 )
|
|
var_2 setlightintensity( 0 );
|
|
|
|
self playsound( "switch_auto_lights_off" );
|
|
}
|
|
}
|
|
|
|
bird_startle()
|
|
{
|
|
|
|
}
|
|
|
|
photo_copier_init( var_0 )
|
|
{
|
|
self.copier = get_photo_copier( var_0 );
|
|
var_1 = getent( self.copier.target, "targetname" );
|
|
var_2 = getent( var_1.target, "targetname" );
|
|
var_2.intensity = var_2 getlightintensity();
|
|
var_2 setlightintensity( 0 );
|
|
var_0.copy_bar = var_1;
|
|
var_0.start_pos = var_1.origin;
|
|
var_0.light = var_2;
|
|
var_3 = self.copier.angles + ( 0, 90, 0 );
|
|
var_4 = anglestoforward( var_3 );
|
|
var_0.end_pos = var_0.start_pos + var_4 * 30;
|
|
}
|
|
|
|
get_photo_copier( var_0 )
|
|
{
|
|
if ( !isdefined( var_0.target ) )
|
|
{
|
|
var_1 = getentarray( "destructible_toy", "targetname" );
|
|
var_2 = var_1[0];
|
|
|
|
foreach ( var_4 in var_1 )
|
|
{
|
|
if ( isdefined( var_4.destructible_type ) && var_4.destructible_type == "toy_copier" )
|
|
{
|
|
if ( distance( var_0.origin, var_2.origin ) > distance( var_0.origin, var_4.origin ) )
|
|
var_2 = var_4;
|
|
}
|
|
}
|
|
}
|
|
else
|
|
{
|
|
var_2 = getent( var_0.target, "targetname" );
|
|
var_2 setcandamage( 1 );
|
|
}
|
|
|
|
return var_2;
|
|
}
|
|
|
|
waittill_copier_copies()
|
|
{
|
|
self.copier endon( "FX_State_Change0" );
|
|
self.copier endon( "death" );
|
|
self waittill( "trigger_enter" );
|
|
}
|
|
|
|
photo_copier()
|
|
{
|
|
level endon( "game_ended" );
|
|
photo_copier_init( self );
|
|
self.copier endon( "FX_State_Change0" );
|
|
thread photo_copier_stop();
|
|
|
|
for (;;)
|
|
{
|
|
waittill_copier_copies();
|
|
self playsound( "mach_copier_run" );
|
|
|
|
if ( isdefined( self.copy_bar ) )
|
|
{
|
|
reset_copier( self );
|
|
thread photo_copier_copy_bar_goes();
|
|
thread photo_copier_light_on();
|
|
}
|
|
|
|
wait 3;
|
|
}
|
|
}
|
|
|
|
photo_copier_no_light()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
|
|
if ( common_scripts\utility::get_template_level() == "hamburg" )
|
|
return;
|
|
|
|
self.copier = get_photo_copier( self );
|
|
self.copier endon( "FX_State_Change0" );
|
|
|
|
for (;;)
|
|
{
|
|
waittill_copier_copies();
|
|
self playsound( "mach_copier_run" );
|
|
wait 3;
|
|
}
|
|
}
|
|
|
|
reset_copier( var_0 )
|
|
{
|
|
var_0.copy_bar moveto( var_0.start_pos, 0.2 );
|
|
var_0.light setlightintensity( 0 );
|
|
}
|
|
|
|
photo_copier_copy_bar_goes()
|
|
{
|
|
self.copier notify( "bar_goes" );
|
|
self.copier endon( "bar_goes" );
|
|
self.copier endon( "FX_State_Change0" );
|
|
self.copier endon( "death" );
|
|
var_0 = self.copy_bar;
|
|
wait 2.0;
|
|
var_0 moveto( self.end_pos, 1.6 );
|
|
wait 1.8;
|
|
var_0 moveto( self.start_pos, 1.6 );
|
|
wait 1.6;
|
|
var_1 = self.light;
|
|
var_2 = 0.2;
|
|
var_3 = var_2 / 0.05;
|
|
|
|
for ( var_4 = 0; var_4 < var_3; var_4++ )
|
|
{
|
|
var_5 = var_4 * 0.05;
|
|
var_5 = var_5 / var_2;
|
|
var_5 = 1 - var_5 * var_1.intensity;
|
|
|
|
if ( var_5 > 0 )
|
|
var_1 setlightintensity( var_5 );
|
|
|
|
wait 0.05;
|
|
}
|
|
}
|
|
|
|
photo_copier_light_on()
|
|
{
|
|
self.copier notify( "light_on" );
|
|
self.copier endon( "light_on" );
|
|
self.copier endon( "FX_State_Change0" );
|
|
self.copier endon( "death" );
|
|
var_0 = self.light;
|
|
var_1 = 0.2;
|
|
var_2 = var_1 / 0.05;
|
|
|
|
for ( var_3 = 0; var_3 < var_2; var_3++ )
|
|
{
|
|
var_4 = var_3 * 0.05;
|
|
var_4 = var_4 / var_1;
|
|
var_0 setlightintensity( var_4 * var_0.intensity );
|
|
wait 0.05;
|
|
}
|
|
|
|
photo_light_flicker( var_0 );
|
|
}
|
|
|
|
photo_copier_stop()
|
|
{
|
|
self.copier waittill( "FX_State_Change0" );
|
|
self.copier endon( "death" );
|
|
reset_copier( self );
|
|
}
|
|
|
|
photo_light_flicker( var_0 )
|
|
{
|
|
var_0 setlightintensity( 1 );
|
|
wait 0.05;
|
|
var_0 setlightintensity( 0 );
|
|
wait 0.1;
|
|
var_0 setlightintensity( 1 );
|
|
wait 0.05;
|
|
var_0 setlightintensity( 0 );
|
|
wait 0.1;
|
|
var_0 setlightintensity( 1 );
|
|
}
|
|
|
|
fan_blade_rotate( var_0 )
|
|
{
|
|
var_1 = 0;
|
|
var_2 = 20000;
|
|
var_3 = 1.0;
|
|
|
|
if ( isdefined( self.speed ) )
|
|
var_3 = self.speed;
|
|
|
|
if ( var_0 == "slow" )
|
|
{
|
|
if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "lockedspeed" )
|
|
var_1 = 180;
|
|
else
|
|
var_1 = randomfloatrange( 100 * var_3, 360 * var_3 );
|
|
}
|
|
else if ( var_0 == "fast" )
|
|
var_1 = randomfloatrange( 720 * var_3, 1000 * var_3 );
|
|
else if ( var_0 == "veryslow" )
|
|
var_1 = randomfloatrange( 1 * var_3, 2 * var_3 );
|
|
else
|
|
{
|
|
|
|
}
|
|
|
|
if ( isdefined( self.script_noteworthy ) && self.script_noteworthy == "lockedspeed" )
|
|
wait 0;
|
|
else
|
|
wait( randomfloatrange( 0, 1 ) );
|
|
|
|
var_4 = self.angles;
|
|
var_5 = anglestoright( self.angles ) * 100;
|
|
var_5 = vectornormalize( var_5 );
|
|
|
|
for (;;)
|
|
{
|
|
var_6 = abs( vectordot( var_5, ( 1, 0, 0 ) ) );
|
|
var_7 = abs( vectordot( var_5, ( 0, 1, 0 ) ) );
|
|
var_8 = abs( vectordot( var_5, ( 0, 0, 1 ) ) );
|
|
|
|
if ( var_6 > 0.9 )
|
|
self rotatevelocity( ( var_1, 0, 0 ), var_2 );
|
|
else if ( var_7 > 0.9 )
|
|
self rotatevelocity( ( var_1, 0, 0 ), var_2 );
|
|
else if ( var_8 > 0.9 )
|
|
self rotatevelocity( ( 0, var_1, 0 ), var_2 );
|
|
else
|
|
self rotatevelocity( ( 0, var_1, 0 ), var_2 );
|
|
|
|
wait( var_2 );
|
|
}
|
|
}
|
|
|
|
triggertouchthink( var_0, var_1 )
|
|
{
|
|
level endon( "game_ended" );
|
|
self.entnum = self getentitynumber();
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger", var_2 );
|
|
|
|
if ( !isplayer( var_2 ) && !isdefined( var_2.finished_spawning ) )
|
|
continue;
|
|
|
|
if ( !isalive( var_2 ) )
|
|
continue;
|
|
|
|
if ( !isdefined( var_2.touchtriggers[self.entnum] ) )
|
|
var_2 thread playertouchtriggerthink( self, var_0, var_1 );
|
|
}
|
|
}
|
|
|
|
playertouchtriggerthink( var_0, var_1, var_2 )
|
|
{
|
|
if ( !isplayer( self ) )
|
|
self endon( "death" );
|
|
|
|
if ( !common_scripts\utility::issp() )
|
|
var_3 = self.guid;
|
|
else
|
|
var_3 = "player" + gettime();
|
|
|
|
var_0.touchlist[var_3] = self;
|
|
|
|
if ( isdefined( var_0.movetracker ) )
|
|
self.movetrackers++;
|
|
|
|
var_0 notify( "trigger_enter", self );
|
|
self notify( "trigger_enter", var_0 );
|
|
|
|
if ( isdefined( var_1 ) )
|
|
self thread [[ var_1 ]]( var_0 );
|
|
|
|
self.touchtriggers[var_0.entnum] = var_0;
|
|
|
|
while ( isalive( self ) && self istouching( var_0 ) && ( common_scripts\utility::issp() || !level.gameended ) )
|
|
wait 0.05;
|
|
|
|
if ( isdefined( self ) )
|
|
{
|
|
self.touchtriggers[var_0.entnum] = undefined;
|
|
|
|
if ( isdefined( var_0.movetracker ) )
|
|
self.movetrackers--;
|
|
|
|
self notify( "trigger_leave", var_0 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
self thread [[ var_2 ]]( var_0 );
|
|
}
|
|
|
|
if ( !common_scripts\utility::issp() && level.gameended )
|
|
return;
|
|
|
|
var_0.touchlist[var_3] = undefined;
|
|
var_0 notify( "trigger_leave", self );
|
|
|
|
if ( !anythingtouchingtrigger( var_0 ) )
|
|
var_0 notify( "trigger_empty" );
|
|
}
|
|
|
|
movementtracker()
|
|
{
|
|
if ( isdefined( level.disablemovementtracker ) )
|
|
return;
|
|
|
|
self endon( "disconnect" );
|
|
|
|
if ( !isplayer( self ) )
|
|
self endon( "death" );
|
|
|
|
self.movetrackers = 0;
|
|
self.distmoved = 0;
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "trigger_enter" );
|
|
var_0 = self.origin;
|
|
|
|
while ( self.movetrackers )
|
|
{
|
|
self.distmoved = distance( var_0, self.origin );
|
|
var_0 = self.origin;
|
|
wait 0.05;
|
|
}
|
|
|
|
self.distmoved = 0;
|
|
}
|
|
}
|
|
|
|
anythingtouchingtrigger( var_0 )
|
|
{
|
|
return var_0.touchlist.size;
|
|
}
|
|
|
|
playertouchingtrigger( var_0, var_1 )
|
|
{
|
|
return isdefined( var_0.touchtriggers[var_1.entnum] );
|
|
}
|
|
|
|
interactive_tv()
|
|
{
|
|
var_0 = getentarray( "interactive_tv", "targetname" );
|
|
|
|
if ( var_0.size )
|
|
{
|
|
common_scripts\utility::noself_array_call( [ "com_tv2_d", "com_tv1_d", "com_tv1", "com_tv2", "com_tv1_testpattern", "com_tv2_testpattern" ], ::precachemodel );
|
|
level.breakables_fx["tv_explode"] = loadfx( "fx/explosions/tv_explosion" );
|
|
}
|
|
|
|
level.tv_lite_array = getentarray( "interactive_tv_light", "targetname" );
|
|
common_scripts\utility::array_thread( getentarray( "interactive_tv", "targetname" ), ::tv_logic );
|
|
}
|
|
|
|
tv_logic()
|
|
{
|
|
self setcandamage( 1 );
|
|
self.damagemodel = undefined;
|
|
self.offmodel = undefined;
|
|
self.damagemodel = "com_tv2_d";
|
|
self.offmodel = "com_tv2";
|
|
self.onmodel = "com_tv2_testpattern";
|
|
|
|
if ( issubstr( self.model, "1" ) )
|
|
{
|
|
self.offmodel = "com_tv1";
|
|
self.onmodel = "com_tv1_testpattern";
|
|
}
|
|
|
|
if ( isdefined( self.target ) )
|
|
{
|
|
if ( isdefined( level.disable_interactive_tv_use_triggers ) )
|
|
{
|
|
var_0 = getent( self.target, "targetname" );
|
|
|
|
if ( isdefined( var_0 ) )
|
|
var_0 delete();
|
|
}
|
|
else
|
|
{
|
|
self.usetrig = getent( self.target, "targetname" );
|
|
self.usetrig usetriggerrequirelookat();
|
|
self.usetrig setcursorhint( "HINT_NOICON" );
|
|
}
|
|
}
|
|
|
|
var_1 = common_scripts\utility::get_array_of_closest( self.origin, level.tv_lite_array, undefined, undefined, 64 );
|
|
|
|
if ( var_1.size )
|
|
{
|
|
self.lite = var_1[0];
|
|
level.tv_lite_array = common_scripts\utility::array_remove( level.tv_lite_array, self.lite );
|
|
self.liteintensity = self.lite getlightintensity();
|
|
}
|
|
|
|
thread tv_damage();
|
|
|
|
if ( isdefined( self.usetrig ) )
|
|
thread tv_off();
|
|
}
|
|
|
|
tv_off()
|
|
{
|
|
self.usetrig endon( "death" );
|
|
|
|
for (;;)
|
|
{
|
|
wait 0.2;
|
|
self.usetrig waittill( "trigger" );
|
|
self notify( "off" );
|
|
|
|
if ( self.model == self.offmodel )
|
|
{
|
|
self setmodel( self.onmodel );
|
|
|
|
if ( isdefined( self.lite ) )
|
|
self.lite setlightintensity( self.liteintensity );
|
|
|
|
continue;
|
|
}
|
|
|
|
self setmodel( self.offmodel );
|
|
|
|
if ( isdefined( self.lite ) )
|
|
self.lite setlightintensity( 0 );
|
|
}
|
|
}
|
|
|
|
tv_damage()
|
|
{
|
|
self waittill( "damage", var_0, var_1, var_2, var_3, var_4 );
|
|
self notify( "off" );
|
|
|
|
if ( isdefined( self.usetrig ) )
|
|
self.usetrig notify( "death" );
|
|
|
|
self setmodel( self.damagemodel );
|
|
|
|
if ( isdefined( self.lite ) )
|
|
self.lite setlightintensity( 0 );
|
|
|
|
playfxontag( level.breakables_fx["tv_explode"], self, "tag_fx" );
|
|
self playsound( "tv_shot_burst" );
|
|
|
|
if ( isdefined( self.usetrig ) )
|
|
self.usetrig delete();
|
|
}
|