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

1046 lines
32 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
level.turrettype = [];
level.turrettype["mg_turret"] = "remote_mg_turret";
level.killstreakfuncs["remote_mg_turret"] = ::tryuseremotemgturret;
level.turretsettings = [];
level.turretsettings["mg_turret"] = spawnstruct();
level.turretsettings["mg_turret"].sentrymodeon = "manual";
level.turretsettings["mg_turret"].sentrymodeoff = "sentry_offline";
level.turretsettings["mg_turret"].timeout = 60.0;
level.turretsettings["mg_turret"].health = 999999;
level.turretsettings["mg_turret"].maxhealth = 1000;
level.turretsettings["mg_turret"].streakname = "remote_mg_turret";
level.turretsettings["mg_turret"].weaponinfo = "remote_turret_mp";
level.turretsettings["mg_turret"].modelbase = "mp_remote_turret";
level.turretsettings["mg_turret"].modelplacement = "mp_remote_turret_placement";
level.turretsettings["mg_turret"].modelplacementfailed = "mp_remote_turret_placement_failed";
level.turretsettings["mg_turret"].modeldestroyed = "mp_remote_turret";
level.turretsettings["mg_turret"].teamsplash = "used_remote_mg_turret";
level.turretsettings["mg_turret"].hintenter = &"KILLSTREAKS_ENTER_REMOTE_TURRET";
level.turretsettings["mg_turret"].hintexit = &"KILLSTREAKS_EARLY_EXIT";
level.turretsettings["mg_turret"].hintpickup = &"KILLSTREAKS_DOUBLE_TAP_TO_CARRY";
level.turretsettings["mg_turret"].placestring = &"KILLSTREAKS_TURRET_PLACE";
level.turretsettings["mg_turret"].cannotplacestring = &"KILLSTREAKS_TURRET_CANNOT_PLACE";
level.turretsettings["mg_turret"].vodestroyed = "remote_sentry_destroyed";
level.turretsettings["mg_turret"].laptopinfo = "killstreak_remote_turret_laptop_mp";
level.turretsettings["mg_turret"].remoteinfo = "killstreak_remote_turret_remote_mp";
level._effect["sentry_explode_mp"] = loadfx( "vfx/gameplay/mp/killstreaks/vfx_sentry_gun_explosion" );
level._effect["sentry_smoke_mp"] = loadfx( "vfx/gameplay/mp/killstreaks/vfx_sg_damage_blacksmoke" );
level._effect["antenna_light_mp"] = loadfx( "fx/lights/light_detonator_blink" );
}
tryuseremotemgturret( var_0, var_1 )
{
var_2 = tryuseremoteturret( var_0, "mg_turret" );
if ( var_2 )
maps\mp\_matchdata::logkillstreakevent( level.turretsettings["mg_turret"].streakname, self.origin );
self.iscarrying = 0;
return var_2;
}
takekillstreakweapons( var_0 )
{
self takeweapon( level.turretsettings[var_0].laptopinfo );
self takeweapon( level.turretsettings[var_0].remoteinfo );
}
tryuseremoteturret( var_0, var_1 )
{
if ( maps\mp\_utility::isusingremote() )
return 0;
var_2 = createturretforplayer( var_1, self );
removeperks();
setcarryingturret( var_2, 1 );
thread restoreperks();
if ( isdefined( var_2 ) )
return 1;
else
return 0;
}
setcarryingturret( var_0, var_1 )
{
self endon( "death" );
self endon( "disconnect" );
var_0 turret_setcarried( self );
common_scripts\utility::_disableweapon();
self notifyonplayercommand( "place_turret", "+attack" );
self notifyonplayercommand( "place_turret", "+attack_akimbo_accessible" );
self notifyonplayercommand( "cancel_turret", "+actionslot 4" );
if ( !level.console )
{
self notifyonplayercommand( "cancel_turret", "+actionslot 5" );
self notifyonplayercommand( "cancel_turret", "+actionslot 6" );
self notifyonplayercommand( "cancel_turret", "+actionslot 7" );
}
for (;;)
{
var_2 = common_scripts\utility::waittill_any_return( "place_turret", "cancel_turret", "force_cancel_placement" );
if ( var_2 == "cancel_turret" || var_2 == "force_cancel_placement" )
{
if ( var_2 == "cancel_turret" && !var_1 )
continue;
if ( level.console )
{
var_3 = maps\mp\_utility::getkillstreakweapon( level.turretsettings[var_0.turrettype].streakname );
if ( isdefined( self.killstreakindexweapon ) && var_3 == maps\mp\_utility::getkillstreakweapon( self.pers["killstreaks"][self.killstreakindexweapon].streakname ) && !self getweaponslistitems().size )
{
maps\mp\_utility::_giveweapon( var_3, 0 );
maps\mp\_utility::_setactionslot( 4, "weapon", var_3 );
}
}
var_0 turret_setcancelled();
common_scripts\utility::_enableweapon();
return 0;
}
if ( !var_0.canbeplaced )
continue;
var_0 turret_setplaced();
common_scripts\utility::_enableweapon();
return 1;
}
}
removeperks()
{
if ( maps\mp\_utility::_hasperk( "specialty_explosivebullets" ) )
{
self.restoreperk = "specialty_explosivebullets";
maps\mp\_utility::_unsetperk( "specialty_explosivebullets" );
}
}
restoreperks()
{
if ( isdefined( self.restoreperk ) )
{
maps\mp\_utility::giveperk( self.restoreperk, 0 );
self.restoreperk = undefined;
}
}
waitrestoreperks()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
wait 0.05;
restoreperks();
}
removeweapons()
{
foreach ( var_1 in self.weaponlist )
{
var_2 = strtok( var_1, "_" );
if ( var_2[0] == "alt" )
{
self.restoreweaponclipammo[var_1] = self getweaponammoclip( var_1 );
self.restoreweaponstockammo[var_1] = self getweaponammostock( var_1 );
continue;
}
self.restoreweaponclipammo[var_1] = self getweaponammoclip( var_1 );
self.restoreweaponstockammo[var_1] = self getweaponammostock( var_1 );
}
self.weaponstorestore = [];
foreach ( var_1 in self.weaponlist )
{
var_2 = strtok( var_1, "_" );
if ( var_2[0] == "alt" )
continue;
self.weaponstorestore[self.weaponstorestore.size] = var_1;
self takeweapon( var_1 );
}
}
restoreweapons()
{
if ( !isdefined( self.restoreweaponclipammo ) || !isdefined( self.restoreweaponstockammo ) || !isdefined( self.weaponstorestore ) )
return;
var_0 = [];
foreach ( var_2 in self.weaponstorestore )
{
var_3 = strtok( var_2, "_" );
if ( var_3[0] == "alt" )
{
var_0[var_0.size] = var_2;
continue;
}
maps\mp\_utility::_giveweapon( var_2 );
if ( isdefined( self.restoreweaponclipammo[var_2] ) )
self setweaponammoclip( var_2, self.restoreweaponclipammo[var_2] );
if ( isdefined( self.restoreweaponstockammo[var_2] ) )
self setweaponammostock( var_2, self.restoreweaponstockammo[var_2] );
}
foreach ( var_6 in var_0 )
{
if ( isdefined( self.restoreweaponclipammo[var_6] ) )
self setweaponammoclip( var_6, self.restoreweaponclipammo[var_6] );
if ( isdefined( self.restoreweaponstockammo[var_6] ) )
self setweaponammostock( var_6, self.restoreweaponstockammo[var_6] );
}
self.restoreweaponclipammo = undefined;
self.restoreweaponstockammo = undefined;
}
waitrestoreweapons()
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
wait 0.05;
restoreweapons();
}
turret_setplaced()
{
self setmodel( level.turretsettings[self.turrettype].modelbase );
self setsentrycarrier( undefined );
self setcandamage( 1 );
self.carriedby forceusehintoff();
self.carriedby = undefined;
if ( isdefined( self.owner ) )
{
self.owner.iscarrying = 0;
common_scripts\utility::make_entity_sentient_mp( self.owner.team );
}
self playsound( "sentry_gun_plant" );
thread turret_setactive();
self notify( "placed" );
}
turret_setcancelled()
{
self.carriedby forceusehintoff();
if ( isdefined( self.owner ) )
self.owner.iscarrying = 0;
self delete();
}
turret_setcarried( var_0 )
{
self setmodel( level.turretsettings[self.turrettype].modelplacement );
self setcandamage( 0 );
self setsentrycarrier( var_0 );
self setcontents( 0 );
self.carriedby = var_0;
var_0.iscarrying = 1;
var_0 thread updateturretplacement( self );
thread turret_oncarrierdeath( var_0 );
thread turret_oncarrierdisconnect( var_0 );
thread turret_oncarrierchangedteam( var_0 );
thread turret_ongameended();
self setdefaultdroppitch( -89.0 );
turret_setinactive();
self notify( "carried" );
}
updateturretplacement( var_0 )
{
self endon( "death" );
self endon( "disconnect" );
level endon( "game_ended" );
var_0 endon( "placed" );
var_0 endon( "death" );
var_0.canbeplaced = 1;
var_1 = -1;
for (;;)
{
var_2 = self canplayerplacesentry();
var_0.origin = var_2["origin"];
var_0.angles = var_2["angles"];
var_0.canbeplaced = self isonground() && var_2["result"] && abs( var_0.origin[2] - self.origin[2] ) < 10;
if ( var_0.canbeplaced != var_1 )
{
if ( var_0.canbeplaced )
{
var_0 setmodel( level.turretsettings[var_0.turrettype].modelplacement );
self forceusehinton( level.turretsettings[var_0.turrettype].placestring );
}
else
{
var_0 setmodel( level.turretsettings[var_0.turrettype].modelplacementfailed );
self forceusehinton( level.turretsettings[var_0.turrettype].cannotplacestring );
}
}
var_1 = var_0.canbeplaced;
wait 0.05;
}
}
turret_oncarrierdeath( var_0 )
{
self endon( "placed" );
self endon( "death" );
var_0 waittill( "death" );
if ( self.canbeplaced )
turret_setplaced();
else
self delete();
}
turret_oncarrierdisconnect( var_0 )
{
self endon( "placed" );
self endon( "death" );
var_0 waittill( "disconnect" );
self delete();
}
turret_oncarrierchangedteam( var_0 )
{
self endon( "placed" );
self endon( "death" );
var_0 common_scripts\utility::waittill_any( "joined_team", "joined_spectators" );
self delete();
}
turret_ongameended( var_0 )
{
self endon( "placed" );
self endon( "death" );
level waittill( "game_ended" );
self delete();
}
createturretforplayer( var_0, var_1 )
{
var_2 = spawnturret( "misc_turret", var_1.origin, level.turretsettings[var_0].weaponinfo );
var_2.angles = var_1.angles;
var_2 setmodel( level.turretsettings[var_0].modelbase );
var_2.owner = var_1;
var_2.health = level.turretsettings[var_0].health;
var_2.maxhealth = level.turretsettings[var_0].maxhealth;
var_2.damagetaken = 0;
var_2.turrettype = var_0;
var_2.stunned = 0;
var_2.stunnedtime = 5.0;
var_2 setturretmodechangewait( 1 );
var_2 turret_setinactive();
var_2 setsentryowner( var_1 );
var_2 setturretminimapvisible( 1, var_0 );
var_2 setdefaultdroppitch( -89.0 );
var_2 thread turret_handleownerdisconnect();
var_2.damagefade = 1.0;
var_2 thread turret_incrementdamagefade();
var_2 thread turret_watchlowhealth();
return var_2;
}
turret_setactive()
{
self endon( "death" );
self.owner endon( "disconnect" );
self setdefaultdroppitch( 0.0 );
self makeunusable();
self maketurretsolid();
if ( !isdefined( self.owner ) )
return;
var_0 = self.owner;
if ( isdefined( var_0.remoteturretlist ) )
{
foreach ( var_2 in var_0.remoteturretlist )
var_2 notify( "death" );
}
var_0.remoteturretlist = [];
var_0.remoteturretlist[0] = self;
var_0.using_remote_turret = 0;
var_0.pickup_message_deleted = 0;
var_0.enter_message_deleted = 1;
if ( isalive( var_0 ) )
var_0 maps\mp\_utility::setlowermessage( "pickup_remote_turret", level.turretsettings[self.turrettype].hintpickup, undefined, undefined, undefined, undefined, undefined, undefined, 1 );
var_0 thread watchownermessageondeath( self );
if ( level.teambased )
{
self.team = var_0.team;
self setturretteam( var_0.team );
maps\mp\_entityheadicons::setteamheadicon( self.team, ( 0, 0, 65 ) );
}
else
maps\mp\_entityheadicons::setplayerheadicon( self.owner, ( 0, 0, 65 ) );
self.ownertrigger = spawn( "trigger_radius", self.origin + ( 0, 0, 1 ), 0, 32, 64 );
self.ownertrigger enablelinkto();
self.ownertrigger linkto( self );
var_0 thread turret_handlepickup( self );
thread watchenterandexit();
thread turret_handledeath();
thread turret_handledamage();
thread turret_timeout();
thread turret_blinky_light();
}
startusingremoteturret()
{
var_0 = self.owner;
var_0 maps\mp\_utility::setusingremote( self.turrettype );
var_0 maps\mp\_utility::freezecontrolswrapper( 1 );
var_1 = var_0 maps\mp\killstreaks\_killstreaks::initridekillstreak();
if ( var_1 != "success" )
{
if ( var_1 != "disconnect" )
var_0 maps\mp\_utility::clearusingremote();
return 0;
}
var_0 maps\mp\_utility::_giveweapon( level.turretsettings[self.turrettype].remoteinfo );
var_0 switchtoweaponimmediate( level.turretsettings[self.turrettype].remoteinfo );
var_0 maps\mp\_utility::freezecontrolswrapper( 0 );
var_0 thread waitsetthermal( 1.0, self );
if ( isdefined( level.huditem["thermal_mode"] ) )
level.huditem["thermal_mode"] settext( "" );
if ( getdvarint( "camera_thirdPerson" ) )
var_0 maps\mp\_utility::setthirdpersondof( 0 );
var_0 playerlinkweaponviewtodelta( self, "tag_player", 0, 180, 180, 50, 25, 0 );
var_0 playerlinkedsetviewznear( 0 );
var_0 playerlinkedsetusebaseangleforviewclamp( 1 );
var_0 remotecontrolturret( self );
var_0 maps\mp\_utility::clearlowermessage( "enter_remote_turret" );
var_0 maps\mp\_utility::clearlowermessage( "pickup_remote_turret" );
var_0 maps\mp\_utility::setlowermessage( "early_exit", level.turretsettings[self.turrettype].hintexit, undefined, undefined, undefined, undefined, undefined, undefined, 1 );
}
waitsetthermal( var_0, var_1 )
{
self endon( "disconnect" );
var_1 endon( "death" );
wait( var_0 );
self visionsetthermalforplayer( game["thermal_vision"], 1.5 );
self thermalvisionon();
self thermalvisionfofoverlayon();
}
stopusingremoteturret()
{
var_0 = self.owner;
if ( var_0 maps\mp\_utility::isusingremote() )
{
var_0 thermalvisionoff();
var_0 thermalvisionfofoverlayoff();
var_0 remotecontrolturretoff( self );
var_0 unlink();
var_0 switchtoweapon( var_0 common_scripts\utility::getlastweapon() );
var_0 maps\mp\_utility::clearusingremote();
if ( getdvarint( "camera_thirdPerson" ) )
var_0 maps\mp\_utility::setthirdpersondof( 1 );
var_0 visionsetthermalforplayer( game["thermal_vision"], 0 );
var_1 = maps\mp\_utility::getkillstreakweapon( level.turretsettings[self.turrettype].streakname );
var_0 maps\mp\killstreaks\_killstreaks::takekillstreakweaponifnodupe( var_1 );
}
if ( self.stunned )
var_0 stopshellshock();
var_0 maps\mp\_utility::clearlowermessage( "early_exit" );
if ( !isdefined( var_0.using_remote_turret_when_died ) || !var_0.using_remote_turret_when_died )
var_0 maps\mp\_utility::setlowermessage( "enter_remote_turret", level.turretsettings[self.turrettype].hintenter, undefined, undefined, undefined, 1, 0.25, 1.5, 1 );
self notify( "exit" );
}
watchownermessageondeath( var_0 )
{
self endon( "disconnect" );
var_0 endon( "death" );
self.using_remote_turret_when_died = 0;
for (;;)
{
if ( isalive( self ) )
self waittill( "death" );
maps\mp\_utility::clearlowermessage( "enter_remote_turret" );
maps\mp\_utility::clearlowermessage( "pickup_remote_turret" );
if ( self.using_remote_turret )
self.using_remote_turret_when_died = 1;
else
self.using_remote_turret_when_died = 0;
self waittill( "spawned_player" );
if ( !self.using_remote_turret_when_died )
{
maps\mp\_utility::setlowermessage( "enter_remote_turret", level.turretsettings[var_0.turrettype].hintenter, undefined, undefined, undefined, 1, 0.25, 1.5, 1 );
continue;
}
var_0 notify( "death" );
}
}
watchenterandexit()
{
self endon( "death" );
self endon( "carried" );
level endon( "game_ended" );
var_0 = self.owner;
for (;;)
{
var_1 = var_0 getcurrentweapon();
if ( maps\mp\_utility::iskillstreakweapon( var_1 ) && var_1 != level.turretsettings[self.turrettype].weaponinfo && var_1 != level.turretsettings[self.turrettype].laptopinfo && var_1 != level.turretsettings[self.turrettype].remoteinfo && var_1 != "none" && ( !var_0 maps\mp\_utility::isjuggernaut() || var_0 maps\mp\_utility::isusingremote() ) )
{
if ( !isdefined( var_0.enter_message_deleted ) || !var_0.enter_message_deleted )
{
var_0.enter_message_deleted = 1;
var_0 maps\mp\_utility::clearlowermessage( "enter_remote_turret" );
}
wait 0.05;
continue;
}
if ( var_0 istouching( self.ownertrigger ) )
{
if ( !isdefined( var_0.enter_message_deleted ) || !var_0.enter_message_deleted )
{
var_0.enter_message_deleted = 1;
var_0 maps\mp\_utility::clearlowermessage( "enter_remote_turret" );
}
wait 0.05;
continue;
}
if ( isdefined( var_0.empgrenaded ) && var_0.empgrenaded )
{
if ( !isdefined( var_0.enter_message_deleted ) || !var_0.enter_message_deleted )
{
var_0.enter_message_deleted = 1;
var_0 maps\mp\_utility::clearlowermessage( "enter_remote_turret" );
}
wait 0.05;
continue;
}
if ( var_0 islinked() && !var_0.using_remote_turret )
{
if ( !isdefined( var_0.enter_message_deleted ) || !var_0.enter_message_deleted )
{
var_0.enter_message_deleted = 1;
var_0 maps\mp\_utility::clearlowermessage( "enter_remote_turret" );
}
wait 0.05;
continue;
}
if ( isdefined( var_0.enter_message_deleted ) && var_0.enter_message_deleted && var_1 != "none" )
{
var_0 maps\mp\_utility::setlowermessage( "enter_remote_turret", level.turretsettings[self.turrettype].hintenter, undefined, undefined, undefined, 1, 0.25, 1.5, 1 );
var_0.enter_message_deleted = 0;
}
var_2 = 0;
while ( var_0 usebuttonpressed() && !var_0 fragbuttonpressed() && !isdefined( var_0.throwinggrenade ) && !var_0 secondaryoffhandbuttonpressed() && !var_0 isusingturret() && var_0 isonground() && !var_0 istouching( self.ownertrigger ) && ( !isdefined( var_0.empgrenaded ) || !var_0.empgrenaded ) )
{
if ( isdefined( var_0.iscarrying ) && var_0.iscarrying )
break;
if ( isdefined( var_0.iscapturingcrate ) && var_0.iscapturingcrate )
break;
if ( !isalive( var_0 ) )
break;
if ( !var_0.using_remote_turret && var_0 maps\mp\_utility::isusingremote() )
break;
if ( var_0 islinked() && !var_0.using_remote_turret )
break;
var_2 = var_2 + 0.05;
if ( var_2 > 0.75 )
{
var_0.using_remote_turret = !var_0.using_remote_turret;
if ( var_0.using_remote_turret )
{
var_0 removeweapons();
var_0 takekillstreakweapons( self.turrettype );
var_0 maps\mp\_utility::_giveweapon( level.turretsettings[self.turrettype].laptopinfo );
var_0 switchtoweaponimmediate( level.turretsettings[self.turrettype].laptopinfo );
startusingremoteturret();
var_0 restoreweapons();
}
else
{
var_0 takekillstreakweapons( self.turrettype );
stopusingremoteturret();
}
wait 2.0;
break;
}
wait 0.05;
}
wait 0.05;
}
}
turret_handlepickup( var_0 )
{
self endon( "disconnect" );
level endon( "game_ended" );
var_0 endon( "death" );
if ( !isdefined( var_0.ownertrigger ) )
return;
if ( isdefined( self.pers["isBot"] ) && self.pers["isBot"] )
return;
var_1 = 0;
for (;;)
{
var_2 = self getcurrentweapon();
if ( maps\mp\_utility::iskillstreakweapon( var_2 ) && var_2 != "killstreak_remote_turret_mp" && var_2 != level.turretsettings[var_0.turrettype].weaponinfo && var_2 != level.turretsettings[var_0.turrettype].laptopinfo && var_2 != level.turretsettings[var_0.turrettype].remoteinfo && var_2 != "none" && ( !maps\mp\_utility::isjuggernaut() || maps\mp\_utility::isusingremote() ) )
{
if ( !isdefined( self.pickup_message_deleted ) || !self.pickup_message_deleted )
{
self.pickup_message_deleted = 1;
maps\mp\_utility::clearlowermessage( "pickup_remote_turret" );
}
wait 0.05;
continue;
}
if ( !self istouching( var_0.ownertrigger ) )
{
if ( !isdefined( self.pickup_message_deleted ) || !self.pickup_message_deleted )
{
self.pickup_message_deleted = 1;
maps\mp\_utility::clearlowermessage( "pickup_remote_turret" );
}
wait 0.05;
continue;
}
if ( maps\mp\_utility::isreallyalive( self ) && self istouching( var_0.ownertrigger ) && !isdefined( var_0.carriedby ) && self isonground() )
{
if ( isdefined( self.pickup_message_deleted ) && self.pickup_message_deleted && var_2 != "none" )
{
maps\mp\_utility::setlowermessage( "pickup_remote_turret", level.turretsettings[var_0.turrettype].hintpickup, undefined, undefined, undefined, undefined, undefined, undefined, 1 );
self.pickup_message_deleted = 0;
}
if ( self usebuttonpressed() )
{
if ( isdefined( self.using_remote_turret ) && self.using_remote_turret )
continue;
var_1 = 0;
while ( self usebuttonpressed() )
{
var_1 = var_1 + 0.05;
wait 0.05;
}
if ( var_1 >= 0.5 )
continue;
var_1 = 0;
while ( !self usebuttonpressed() && var_1 < 0.5 )
{
var_1 = var_1 + 0.05;
wait 0.05;
}
if ( var_1 >= 0.5 )
continue;
if ( !maps\mp\_utility::isreallyalive( self ) )
continue;
if ( isdefined( self.using_remote_turret ) && self.using_remote_turret )
continue;
var_0 setmode( level.turretsettings[var_0.turrettype].sentrymodeoff );
thread setcarryingturret( var_0, 0 );
var_0.ownertrigger delete();
self.remoteturretlist = undefined;
maps\mp\_utility::clearlowermessage( "pickup_remote_turret" );
return;
}
}
wait 0.05;
}
}
turret_blinky_light()
{
self endon( "death" );
self endon( "carried" );
for (;;)
{
playfxontag( common_scripts\utility::getfx( "antenna_light_mp" ), self, "tag_fx" );
wait 1.0;
stopfxontag( common_scripts\utility::getfx( "antenna_light_mp" ), self, "tag_fx" );
}
}
turret_setinactive()
{
self setmode( level.turretsettings[self.turrettype].sentrymodeoff );
if ( level.teambased )
maps\mp\_entityheadicons::setteamheadicon( "none", ( 0, 0, 0 ) );
else if ( isdefined( self.owner ) )
maps\mp\_entityheadicons::setplayerheadicon( undefined, ( 0, 0, 0 ) );
if ( !isdefined( self.owner ) )
return;
var_0 = self.owner;
if ( isdefined( var_0.using_remote_turret ) && var_0.using_remote_turret )
{
var_0 thermalvisionoff();
var_0 thermalvisionfofoverlayoff();
var_0 remotecontrolturretoff( self );
var_0 unlink();
var_0 switchtoweapon( var_0 common_scripts\utility::getlastweapon() );
var_0 maps\mp\_utility::clearusingremote();
if ( getdvarint( "camera_thirdPerson" ) )
var_0 maps\mp\_utility::setthirdpersondof( 1 );
var_0 maps\mp\killstreaks\_killstreaks::clearrideintro();
var_0 visionsetthermalforplayer( game["thermal_vision"], 0 );
if ( isdefined( var_0.disabledusability ) && var_0.disabledusability )
var_0 common_scripts\utility::_enableusability();
var_0 takekillstreakweapons( self.turrettype );
}
}
turret_handleownerdisconnect()
{
self endon( "death" );
level endon( "game_ended" );
self notify( "turret_handleOwner" );
self endon( "turret_handleOwner" );
self.owner common_scripts\utility::waittill_any( "disconnect", "joined_team", "joined_spectators" );
self notify( "death" );
}
turret_timeout()
{
self endon( "death" );
level endon( "game_ended" );
var_0 = level.turretsettings[self.turrettype].timeout;
while ( var_0 )
{
wait 1.0;
maps\mp\gametypes\_hostmigration::waittillhostmigrationdone();
if ( !isdefined( self.carriedby ) )
var_0 = max( 0, var_0 - 1.0 );
}
if ( isdefined( self.owner ) )
self.owner thread maps\mp\_utility::leaderdialogonplayer( "sentry_gone" );
self notify( "death" );
}
turret_handledeath()
{
self endon( "carried" );
var_0 = self getentitynumber();
maps\mp\killstreaks\_autosentry::addtoturretlist( var_0 );
self waittill( "death" );
maps\mp\killstreaks\_autosentry::removefromturretlist( var_0 );
if ( !isdefined( self ) )
return;
self setmodel( level.turretsettings[self.turrettype].modeldestroyed );
turret_setinactive();
self setdefaultdroppitch( 40 );
self setsentryowner( undefined );
self setturretminimapvisible( 0 );
if ( isdefined( self.ownertrigger ) )
self.ownertrigger delete();
var_1 = self.owner;
if ( isdefined( var_1 ) )
{
var_1.using_remote_turret = 0;
var_1 maps\mp\_utility::clearlowermessage( "enter_remote_turret" );
var_1 maps\mp\_utility::clearlowermessage( "early_exit" );
var_1 maps\mp\_utility::clearlowermessage( "pickup_remote_turret" );
var_1 restoreperks();
var_1 restoreweapons();
if ( var_1 getcurrentweapon() == "none" )
var_1 switchtoweapon( var_1 common_scripts\utility::getlastweapon() );
if ( self.stunned )
var_1 stopshellshock();
}
self playsound( "sentry_explode" );
playfxontag( common_scripts\utility::getfx( "sentry_explode_mp" ), self, "tag_aim" );
wait 1.5;
self playsound( "sentry_explode_smoke" );
for ( var_2 = 8; var_2 > 0; var_2 = var_2 - 0.4 )
{
playfxontag( common_scripts\utility::getfx( "sentry_smoke_mp" ), self, "tag_aim" );
wait 0.4;
}
self notify( "deleting" );
if ( isdefined( self.target_ent ) )
self.target_ent delete();
self delete();
}
turret_handledamage()
{
self endon( "death" );
self endon( "carried" );
self setcandamage( 1 );
for (;;)
{
self waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
if ( !maps\mp\gametypes\_weapons::friendlyfirecheck( self.owner, var_1 ) )
continue;
if ( isdefined( var_9 ) )
{
switch ( var_9 )
{
case "concussion_grenade_mp":
case "flash_grenade_mp":
if ( var_4 == "MOD_GRENADE_SPLASH" && self.owner.using_remote_turret )
{
self.stunned = 1;
thread turret_stun();
}
case "smoke_grenadejugg_mp":
case "smoke_grenade_mp":
continue;
}
}
if ( !isdefined( self ) )
return;
if ( var_4 == "MOD_MELEE" )
self.damagetaken = self.damagetaken + self.maxhealth;
if ( isdefined( var_8 ) && var_8 & level.idflags_penetration )
self.wasdamagedfrombulletpenetration = 1;
self.wasdamaged = 1;
self.damagefade = 0.0;
var_10 = var_0;
if ( isplayer( var_1 ) )
{
var_1 maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "remote_turret" );
if ( var_1 maps\mp\_utility::_hasperk( "specialty_armorpiercing" ) )
var_10 = var_0 * level.armorpiercingmod;
}
if ( isdefined( var_1.owner ) && isplayer( var_1.owner ) )
var_1.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "remote_turret" );
if ( isdefined( var_9 ) )
{
switch ( var_9 )
{
case "remotemissile_projectile_mp":
case "ac130_40mm_mp":
case "ac130_105mm_mp":
case "javelin_mp":
case "remote_mortar_missile_mp":
case "stinger_mp":
self.largeprojectiledamage = 1;
var_10 = self.maxhealth + 1;
break;
case "stealth_bomb_mp":
case "artillery_mp":
self.largeprojectiledamage = 0;
var_10 = var_10 + var_0 * 4;
break;
case "bomb_site_mp":
case "emp_grenade_mp":
self.largeprojectiledamage = 0;
var_10 = self.maxhealth + 1;
break;
}
maps\mp\killstreaks\_killstreaks::killstreakhit( var_1, var_9, self );
}
self.damagetaken = self.damagetaken + var_10;
if ( self.damagetaken >= self.maxhealth )
{
if ( isplayer( var_1 ) && ( !isdefined( self.owner ) || var_1 != self.owner ) )
{
var_1 thread maps\mp\gametypes\_rank::giverankxp( "kill", 100, var_9, var_4 );
var_1 notify( "destroyed_killstreak" );
}
if ( isdefined( self.owner ) )
self.owner thread maps\mp\_utility::leaderdialogonplayer( level.turretsettings[self.turrettype].vodestroyed, undefined, undefined, self.origin );
self notify( "death" );
return;
}
}
}
turret_incrementdamagefade()
{
self endon( "death" );
level endon( "game_ended" );
var_0 = 0;
for (;;)
{
if ( self.damagefade < 1.0 )
{
self.damagefade = self.damagefade + 0.1;
var_0 = 1;
}
else if ( var_0 )
{
self.damagefade = 1.0;
var_0 = 0;
}
wait 0.1;
}
}
turret_watchlowhealth()
{
self endon( "death" );
level endon( "game_ended" );
var_0 = 0.1;
var_1 = 1;
var_2 = 1;
for (;;)
{
if ( var_2 )
{
if ( self.damagetaken > 0 )
{
var_2 = 0;
var_1++;
}
}
else if ( self.damagetaken >= self.maxhealth * ( var_0 * var_1 ) )
var_1++;
wait 0.05;
}
}
turret_stun()
{
self notify( "stunned" );
self endon( "stunned" );
self endon( "death" );
while ( self.stunned )
{
self.owner shellshock( "concussion_grenade_mp", self.stunnedtime );
playfxontag( common_scripts\utility::getfx( "sentry_explode_mp" ), self, "tag_origin" );
var_0 = 0;
while ( var_0 < self.stunnedtime )
{
var_0 = var_0 + 0.05;
wait 0.05;
}
self.stunned = 0;
}
}