// IW6 GSC SOURCE // Generated by https://github.com/xensik/gsc-tool main() { var_0 = getentarray( "tesla_trap_switch", "targetname" ); level.tesla_traps = []; foreach ( var_2 in var_0 ) { maps\mp\alien\_outline_proto::add_to_outline_watch_list( var_2, 750 ); var_3 = getentarray( var_2.target, "targetname" ); common_scripts\utility::array_thread( var_3, ::init_tesla_trap ); var_2.teslas = var_3; var_2 thread wait_for_tesla_switch_activation( var_3 ); level.tesla_traps[level.tesla_traps.size] = var_2; } if ( !maps\mp\alien\_utility::is_chaos_mode() ) { level thread disable_traps_when_ancestor_attacks(); level thread setup_trap_repair_generator(); } } init_tesla_trap() { self hidepart( "tag_tesla_swap_small" ); self hidepart( "tag_tesla_swap_med" ); self.tesla_type = "tesla_trap"; } wait_for_tesla_switch_activation( var_0 ) { self endon( "stop_tesla_trap" ); self setcursorhint( "HINT_NOICON" ); self sethintstring( &"MP_ALIEN_LAST_USE_TESLA" ); self makeusable(); for (;;) { self waittill( "trigger", var_1 ); if ( !isdefined( var_1 ) || !isalive( var_1 ) ) continue; if ( var_1 maps\mp\alien\_utility::is_holding_deployable() || var_1 maps\mp\alien\_utility::has_special_weapon() ) { var_1 maps\mp\_utility::setlowermessage( "cant_buy", &"ALIEN_COLLECTIBLES_PLAYER_HOLDING", 3 ); continue; } if ( !var_1 maps\mp\alien\_persistence::player_has_enough_currency( 750 ) ) { var_1 maps\mp\_utility::setlowermessage( "no_money", &"ALIEN_COLLECTIBLES_NO_MONEY", 3 ); continue; } var_1 maps\mp\alien\_persistence::take_player_currency( 750, 0, "trap" ); self.owner = var_1; level thread maps\mp\alien\_music_and_dialog::playvofortrapactivation( var_1, "tesla_trap" ); if ( !isdefined( self.script_noteworthy ) || self.script_noteworthy != "tesla_generator" ) self setmodel( "mp_zeb_garage_switch_on" ); else self playloopsound( "alien_fence_gen_lp" ); self makeunusable(); maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self ); foreach ( var_3 in var_0 ) { var_3.owner = var_1; var_3 thread run_tesla_trap(); } wait 150; if ( !isdefined( self.script_noteworthy ) || self.script_noteworthy != "tesla_generator" ) self setmodel( "mp_zeb_garage_switch_off" ); else self stoploopsound( "alien_fence_gen_lp" ); if ( isdefined( var_0[0].owner ) && isalive( var_0[0].owner ) && var_0[0].owner.sessionstate == "playing" ) var_0[0].owner maps\mp\_utility::setlowermessage( "electric_fence_offline", &"ALIENS_PATCH_ELECTRIC_TRAP_OFFLINE", 3 ); foreach ( var_3 in var_0 ) { var_3 notify( "trap_done" ); wait 0.5; var_3 stoploopsound(); var_3.owner = undefined; stopfxontag( level._effect["tesla_idle3"], var_3, "tag_fx_01" ); if ( isdefined( var_3.attack_bolt ) ) var_3.attack_bolt delete(); } maps\mp\alien\_outline_proto::add_to_outline_watch_list( self, 750 ); self makeusable(); } } run_tesla_trap() { self endon( "trap_done" ); if ( !maps\mp\alien\_utility::is_true( self.playing_loopsound ) ) { self.playing_loopsound = 1; self playloopsound( "alien_fence_hum_lp" ); } self.fire_rate = 1.5; self.damage_amount = 1800; if ( !isdefined( self.attack_bolt ) ) { self.attack_bolt = spawn( "script_model", self.origin + ( 0, 0, 40 ) ); self.attack_bolt setmodel( "tag_origin" ); } wait 0.5; playfxontag( level._effect["tesla_idle3"], self, "tag_fx_01" ); var_0 = 750; var_1 = 250; var_2 = -64; var_3 = 128; var_4 = self.origin + ( 0, 0, 30 ); for (;;) { var_5 = 0; foreach ( var_7 in level.agentarray ) { if ( !isdefined( var_7.alien_type ) ) continue; if ( !maps\mp\alien\_utility::is_true( var_7.isactive ) || !isalive( var_7 ) ) continue; if ( maps\mp\alien\_utility::is_true( var_7.pet ) ) continue; if ( maps\mp\alien\_utility::is_true( var_7.is_electrified ) ) continue; if ( var_7.alien_type == "ancestor" && ( isdefined( var_7.shield_state ) && var_7.shield_state != 0 ) ) continue; var_8 = var_7.origin + ( 0, 0, 30 ); if ( var_7.alien_type == "ancestor" ) var_8 = var_7 gettagorigin( "tag_weapon_chest" ); else if ( var_7.alien_type == "elite" ) var_8 = var_7 gettagorigin( "tag_eye" ); var_9 = var_8[2] - var_4[2]; var_10 = distance2d( var_8, var_4 ); var_11 = 0; if ( var_9 >= 100 && var_9 <= var_0 && var_10 <= var_1 * 2 ) var_11 = 1; else if ( var_9 >= 40 && var_9 <= var_0 && var_10 <= var_1 ) var_11 = 1; else if ( var_9 > 0 && var_9 <= 40 && var_10 <= var_1 ) var_11 = 1; else if ( var_9 <= 0 && var_9 > var_2 && var_10 <= var_1 ) var_11 = 1; if ( var_11 && bullettracepassed( var_8, var_4 + ( 0, 0, 50 ), 0, self ) ) { var_7.is_electrified = 1; var_7 thread tesla_trap_attack( self, var_8 ); reset_attack_bolt(); wait( self.fire_rate ); } } wait 0.1; } } tesla_trap_attack( var_0, var_1 ) { self endon( "death" ); playfxontag( level._effect["tesla_attack"], var_0.attack_bolt, "TAG_ORIGIN" ); var_0.attack_bolt moveto( var_1, 0.05 ); var_0.attack_bolt waittill( "movedone" ); playfxontag( level._effect["tesla_shock"], var_0.attack_bolt, "tag_origin" ); self playsound( "tesla_shock" ); if ( isdefined( var_0.owner ) && isalive( var_0.owner ) ) self dodamage( var_0.damage_amount, self.origin, var_0.owner, var_0, "MOD_UNKNOWN" ); else { var_2 = undefined; var_3 = undefined; self dodamage( var_0.damage_amount, self.origin, var_2, var_3, "MOD_UNKNOWN" ); } wait 0.05; if ( isdefined( var_0.attack_bolt ) ) var_0.attack_bolt delete(); wait 2; self.is_electrified = undefined; } reset_attack_bolt( var_0 ) { self endon( "death" ); self endon( "carried" ); var_1 = self.origin + ( 0, 0, 40 ); if ( isdefined( var_0 ) ) var_1 = var_0; var_2 = 0; while ( isdefined( self.attack_bolt ) ) { wait 0.1; var_2++; if ( var_2 > 1.1 ) break; } if ( isdefined( self.attack_bolt ) ) self.attack_bolt delete(); self.attack_bolt = spawn( "script_model", var_1 ); self.attack_bolt setmodel( "tag_origin" ); } disable_traps_when_ancestor_attacks() { common_scripts\utility::flag_init( "engineer_repaired_generator" ); common_scripts\utility::flag_wait( "disable_all_traps" ); level notify( "traps_disabled" ); foreach ( var_1 in level.fire_traps ) { var_1 thread maps\mp\alien\_trap::kill_fire( var_1.fire_fx_array ); var_1 notify( "fire_trap_exhausted" ); var_1 notify( "disable_fire_trap" ); var_1.barrel makeusable(); var_1.barrel sethintstring( &"MP_ALIEN_LAST_TRAPS_OFFLINE" ); maps\mp\alien\_outline_proto::remove_from_outline_watch_list( var_1.barrel ); maps\mp\alien\_outline_proto::enable_outline( var_1.barrel, 4, 1 ); markdangerousnodesintrigger( var_1.burn_trig, 0 ); var_1.burning = 0; level thread play_disabled_fx( var_1.barrel ); } foreach ( var_4 in level.electric_fences ) { var_4 notify( "death" ); var_4.generator makeusable(); var_4.generator sethintstring( &"MP_ALIEN_LAST_TRAPS_OFFLINE" ); var_4.running = 0; var_4.capacity = 0; var_4.generator stoploopsound( "alien_fence_gen_lp" ); var_4.generator playsound( "alien_fence_gen_off" ); var_4.shock_trig stoploopsound( "alien_fence_hum_lp" ); maps\mp\alien\_outline_proto::remove_from_outline_watch_list( var_4.generator ); maps\mp\alien\_outline_proto::enable_outline( var_4.generator, 4, 1 ); level thread play_disabled_fx( var_4.generator ); } foreach ( var_7 in level.tesla_traps ) { if ( !isdefined( var_7.script_noteworthy ) || var_7.script_noteworthy != "tesla_generator" ) var_7 setmodel( "mp_zeb_garage_switch_off" ); else var_7 stoploopsound( "alien_fence_gen_lp" ); var_7 sethintstring( &"MP_ALIEN_LAST_TRAPS_OFFLINE" ); var_7 notify( "stop_tesla_trap" ); level thread play_disabled_fx( var_7 ); maps\mp\alien\_outline_proto::remove_from_outline_watch_list( var_7 ); maps\mp\alien\_outline_proto::enable_outline( var_7, 4, 1 ); foreach ( var_9 in var_7.teslas ) level thread disable_tesla( var_9 ); } common_scripts\utility::array_thread( getentarray( "misc_turret", "classname" ), ::disable_turrets ); while ( common_scripts\utility::flag( "disable_all_traps" ) && !common_scripts\utility::flag( "engineer_repaired_generator" ) ) wait 0.25; if ( isdefined( level.ancestor_generator ) ) { maps\mp\alien\_outline_proto::disable_outline_for_players( level.ancestor_generator, level.players ); level.ancestor_generator makeunusable(); } level notify( "traps_reenabled" ); common_scripts\utility::array_thread( getentarray( "misc_turret", "classname" ), ::reenable_turrets ); foreach ( var_1 in level.fire_traps ) { maps\mp\alien\_outline_proto::disable_outline( var_1.barrel ); var_1.barrel makeusable(); var_1.barrel sethintstring( var_1.hintstring ); maps\mp\alien\_outline_proto::add_to_outline_watch_list( var_1.barrel, var_1.cost ); var_1 thread maps\mp\alien\_trap::fire_trap_think(); } foreach ( var_4 in level.electric_fences ) { var_4.generator makeusable(); var_4.generator sethintstring( var_4.hintstring ); var_4 thread maps\mp\alien\_trap::run_electric_trap( maps\mp\alien\_trap::play_fence_on_fx, maps\mp\alien\_trap::play_fence_off_fx, maps\mp\alien\_trap::ambient_fence_shocks ); maps\mp\alien\_outline_proto::add_to_outline_watch_list( var_4.generator, var_4.cost ); } foreach ( var_7 in level.tesla_traps ) { var_7 notify( "stop_tesla_trap" ); maps\mp\alien\_outline_proto::add_to_outline_watch_list( var_7, 750 ); var_7 enable_tesla(); } } disable_tesla( var_0 ) { var_0 notify( "trap_done" ); wait 0.5; var_0 stoploopsound(); var_0.owner = undefined; stopfxontag( level._effect["tesla_idle3"], var_0, "tag_fx_01" ); if ( isdefined( var_0.attack_bolt ) ) var_0.attack_bolt delete(); } enable_tesla() { self setcursorhint( "HINT_NOICON" ); self sethintstring( &"MP_ALIEN_LAST_USE_TESLA" ); self makeusable(); thread wait_for_tesla_switch_activation( getentarray( self.target, "targetname" ) ); } play_disabled_fx( var_0, var_1, var_2 ) { level endon( "traps_reenabled" ); for (;;) { if ( isdefined( var_2 ) ) { playfxontag( common_scripts\utility::getfx( "sentry_smoke_mp" ), var_0, "tag_aim" ); wait 0.05; playfxontag( common_scripts\utility::getfx( "ims_sensor_explode" ), var_0, "tag_aim" ); } else { if ( !isdefined( var_1 ) ) playfx( common_scripts\utility::getfx( "ims_sensor_explode" ), var_0.origin ); wait 0.05; playfx( common_scripts\utility::getfx( "sentry_smoke_mp" ), var_0.origin ); wait 0.05; var_0 playsound( "sentry_explode_smoke" ); } wait( randomfloatrange( 1.5, 3 ) ); } } disable_turrets() { if ( !isdefined( self ) || !isdefined( self.weaponinfo ) || self.weaponinfo != "turret_minigun_alien" ) return; self.enabled = 0; self notify( "disable_turret" ); var_0 = self getturretowner(); if ( isdefined( var_0 ) ) disable_when_owner_exits_turret(); level thread play_disabled_fx( self, undefined, 1 ); maps\mp\alien\_trap::disable_turret(); self makeunusable(); self sethintstring( &"MP_ALIEN_LAST_TURRET_OFFLINE" ); maps\mp\alien\_outline_proto::remove_from_outline_watch_list( self ); maps\mp\alien\_outline_proto::enable_outline( self, 4, 1 ); } disable_when_owner_exits_turret() { level endon( "traps_reenabled" ); while ( isdefined( self getturretowner() ) ) wait 0.1; } reenable_turrets() { if ( !isdefined( self ) || !isdefined( self.weaponinfo ) || self.weaponinfo != "turret_minigun_alien" ) return; self setcursorhint( "HINT_NOICON" ); self makeusable(); self.enabled = 0; self sethintstring( &"ALIEN_COLLECTIBLES_ACTIVATE_TURRET" ); self turretfiredisable(); self maketurretinoperable(); maps\mp\alien\_outline_proto::add_to_outline_watch_list( self, 750 ); } setup_trap_repair_generator() { level.ancestor_generator = getent( "ancestor_left_generator", "targetname" ); if ( !isdefined( level.ancestor_generator ) ) return; wait 5; common_scripts\utility::flag_wait( "disable_all_traps" ); maps\mp\alien\_outline_proto::enable_outline( level.ancestor_generator, 4, 1 ); level.ancestor_generator thread watch_to_repair(); } watch_to_repair() { level endon( "traps_reenabled" ); self makeunusable(); var_0 = 20000; var_1 = 2000; for (;;) { self makeusable(); self sethintstring( &"MP_ALIEN_LAST_REPAIRGENERATOR" ); self waittill( "trigger", var_2 ); if ( maps\mp\alien\_utility::is_true( var_2.iscarrying ) ) continue; self makeunusable(); var_3 = level.players.size; var_2.isrepairing = 1; var_4 = int( var_0 * var_2 maps\mp\alien\_perk_utility::perk_getdrilltimescalar() * var_2.drillspeedmodifier ); if ( var_3 > 1 ) var_4 = int( ( var_0 + ( var_3 - 1 ) * var_1 ) * var_2 maps\mp\alien\_perk_utility::perk_getdrilltimescalar() * var_2.drillspeedmodifier ); var_5 = useholdthink( var_2, var_4 ); if ( !var_5 ) { var_2.isrepairing = 0; self makeusable(); continue; } var_2.isrepairing = 0; common_scripts\utility::flag_set( "engineer_repaired_generator" ); thread maps\mp\mp_alien_last_final_battle::repair_trap_gen_sfx(); thread maps\mp\mp_alien_last_fx::conduit_fx_on_no_ff(); break; } } useholdthink( var_0, var_1 ) { thread cancel_repair_on_traps_renabled( var_0 ); self.curprogress = 0; self.inuse = 1; self.userate = 1; if ( isdefined( var_1 ) ) self.usetime = var_1; else self.usetime = 3000; if ( !var_0 maps\mp\alien\_perk_utility::has_perk( "perk_rigger", [ 0, 1, 2, 3, 4 ] ) ) var_0 maps\mp\alien\_utility::disable_weapon_timeout( var_1 + 0.05, "drill_repair_weapon_management" ); var_0 thread maps\mp\alien\_drill::personalusebar( self ); var_0.hasprogressbar = 1; var_2 = useholdthinkloop( var_0, self, 18496 ); if ( isalive( var_0 ) ) { var_0.hasprogressbar = 0; if ( !var_0 maps\mp\alien\_perk_utility::has_perk( "perk_rigger", [ 0, 1, 2, 3, 4 ] ) ) var_0 maps\mp\alien\_utility::enable_weapon_wrapper( "drill_repair_weapon_management" ); } if ( !isdefined( self ) ) return 0; self.inuse = 0; self.curprogress = 0; return var_2; } useholdthinkloop( var_0, var_1, var_2 ) { level endon( "traps_reenabled" ); while ( !level.gameended && isdefined( self ) && maps\mp\_utility::isreallyalive( var_0 ) && var_0 usebuttonpressed() && ( !isdefined( var_0.laststand ) || !var_0.laststand ) && self.curprogress < self.usetime ) { if ( isdefined( var_1 ) && isdefined( var_2 ) ) { if ( distancesquared( var_0.origin, var_1.origin ) > var_2 ) return 0; } self.curprogress = self.curprogress + 50 * self.userate; self.userate = 1; if ( self.curprogress >= self.usetime ) return maps\mp\_utility::isreallyalive( var_0 ); wait 0.05; } return 0; } cancel_repair_on_traps_renabled( var_0 ) { var_0 endon( "disconnect" ); self notify( "cancel_repair_on_hive_death" ); self endon( "cancel_repair_on_hive_death" ); level endon( "engineer_repaired_generator" ); level waittill( "traps_reenabled" ); if ( isalive( var_0 ) ) { var_0 notify( "drill_repair_weapon_management" ); if ( var_0.disabledweapon > 0 ) var_0 common_scripts\utility::_enableweapon(); if ( maps\mp\alien\_utility::is_true( var_0.hasprogressbar ) ) var_0.hasprogressbar = 0; var_0.isrepairing = 0; } }