703 lines
22 KiB
Plaintext
703 lines
22 KiB
Plaintext
// IW6 GSC SOURCE
|
|
// Generated by https://github.com/xensik/gsc-tool
|
|
|
|
init()
|
|
{
|
|
level.killstreakfuncs["littlebird_support"] = ::tryuselbsupport;
|
|
level.heliguardsettings = [];
|
|
level.heliguardsettings["littlebird_support"] = spawnstruct();
|
|
level.heliguardsettings["littlebird_support"].timeout = 60.0;
|
|
level.heliguardsettings["littlebird_support"].health = 999999;
|
|
level.heliguardsettings["littlebird_support"].maxhealth = 2000;
|
|
level.heliguardsettings["littlebird_support"].streakname = "littlebird_support";
|
|
level.heliguardsettings["littlebird_support"].vehicleinfo = "attack_littlebird_mp";
|
|
level.heliguardsettings["littlebird_support"].weaponinfo = "littlebird_guard_minigun_mp";
|
|
level.heliguardsettings["littlebird_support"].weaponmodelleft = "vehicle_little_bird_minigun_left";
|
|
level.heliguardsettings["littlebird_support"].weaponmodelright = "vehicle_little_bird_minigun_right";
|
|
level.heliguardsettings["littlebird_support"].weapontagleft = "tag_flash";
|
|
level.heliguardsettings["littlebird_support"].weapontagright = "tag_flash_2";
|
|
level.heliguardsettings["littlebird_support"].sentrymode = "auto_nonai";
|
|
level.heliguardsettings["littlebird_support"].modelbase = level.littlebird_model;
|
|
level.heliguardsettings["littlebird_support"].teamsplash = "used_littlebird_support";
|
|
lbsupport_setairstartnodes();
|
|
lbsupport_setairnodemesh();
|
|
}
|
|
|
|
tryuselbsupport( var_0, var_1 )
|
|
{
|
|
var_2 = "littlebird_support";
|
|
var_3 = 1;
|
|
|
|
if ( isdefined( level.littlebirdguard ) || maps\mp\killstreaks\_helicopter::exceededmaxlittlebirds( var_2 ) )
|
|
{
|
|
self iprintlnbold( &"KILLSTREAKS_AIR_SPACE_TOO_CROWDED" );
|
|
return 0;
|
|
}
|
|
else if ( !level.air_node_mesh.size )
|
|
{
|
|
self iprintlnbold( &"KILLSTREAKS_UNAVAILABLE_IN_LEVEL" );
|
|
return 0;
|
|
}
|
|
else if ( maps\mp\_utility::currentactivevehiclecount() >= maps\mp\_utility::maxvehiclesallowed() || level.fauxvehiclecount + var_3 >= maps\mp\_utility::maxvehiclesallowed() )
|
|
{
|
|
self iprintlnbold( &"KILLSTREAKS_TOO_MANY_VEHICLES" );
|
|
return 0;
|
|
}
|
|
|
|
maps\mp\_utility::incrementfauxvehiclecount();
|
|
var_4 = createlbguard( var_2 );
|
|
|
|
if ( !isdefined( var_4 ) )
|
|
{
|
|
maps\mp\_utility::decrementfauxvehiclecount();
|
|
return 0;
|
|
}
|
|
|
|
thread startlbsupport( var_4 );
|
|
level thread maps\mp\_utility::teamplayercardsplash( level.heliguardsettings[var_2].teamsplash, self, self.team );
|
|
return 1;
|
|
}
|
|
|
|
createlbguard( var_0 )
|
|
{
|
|
var_1 = lbsupport_getcloseststartnode( self.origin );
|
|
|
|
if ( isdefined( var_1.angles ) )
|
|
var_2 = var_1.angles;
|
|
else
|
|
var_2 = ( 0, 0, 0 );
|
|
|
|
var_3 = maps\mp\killstreaks\_airdrop::getflyheightoffset( self.origin );
|
|
var_4 = lbsupport_getclosestnode( self.origin );
|
|
var_5 = anglestoforward( self.angles );
|
|
var_6 = var_4.origin * ( 1, 1, 0 ) + ( 0, 0, 1 ) * var_3 + var_5 * -100;
|
|
var_7 = var_1.origin;
|
|
var_8 = spawnhelicopter( self, var_7, var_2, level.heliguardsettings[var_0].vehicleinfo, level.heliguardsettings[var_0].modelbase );
|
|
|
|
if ( !isdefined( var_8 ) )
|
|
return;
|
|
|
|
var_8 maps\mp\killstreaks\_helicopter::addtolittlebirdlist();
|
|
var_8 thread maps\mp\killstreaks\_helicopter::removefromlittlebirdlistondeath();
|
|
var_8.health = level.heliguardsettings[var_0].health;
|
|
var_8.maxhealth = level.heliguardsettings[var_0].maxhealth;
|
|
var_8.damagetaken = 0;
|
|
var_8.speed = 100;
|
|
var_8.followspeed = 40;
|
|
var_8.owner = self;
|
|
var_8 setotherent( self );
|
|
var_8.team = self.team;
|
|
var_8 setmaxpitchroll( 45, 45 );
|
|
var_8 vehicle_setspeed( var_8.speed, 100, 40 );
|
|
var_8 setyawspeed( 120, 60 );
|
|
var_8 setneargoalnotifydist( 512 );
|
|
var_8.killcount = 0;
|
|
var_8.helitype = "littlebird";
|
|
var_8.heliguardtype = "littlebird_support";
|
|
var_8.targettingradius = 2000;
|
|
var_8 common_scripts\utility::make_entity_sentient_mp( var_8.team );
|
|
var_8.targetpos = var_6;
|
|
var_8.currentnode = var_4;
|
|
var_9 = spawnturret( "misc_turret", var_8.origin, level.heliguardsettings[var_0].weaponinfo );
|
|
var_9 linkto( var_8, level.heliguardsettings[var_0].weapontagleft, ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
var_9 setmodel( level.heliguardsettings[var_0].weaponmodelleft );
|
|
var_9.angles = var_8.angles;
|
|
var_9.owner = var_8.owner;
|
|
var_9.team = self.team;
|
|
var_9 maketurretinoperable();
|
|
var_9.vehicle = var_8;
|
|
var_8.mgturretleft = var_9;
|
|
var_8.mgturretleft setdefaultdroppitch( 0 );
|
|
var_10 = var_8.origin + ( anglestoforward( var_8.angles ) * -100 + anglestoright( var_8.angles ) * -100 ) + ( 0, 0, 50 );
|
|
var_9.killcament = spawn( "script_model", var_10 );
|
|
var_9.killcament setscriptmoverkillcam( "explosive" );
|
|
var_9.killcament linkto( var_8, "tag_origin" );
|
|
var_9 = spawnturret( "misc_turret", var_8.origin, level.heliguardsettings[var_0].weaponinfo );
|
|
var_9 linkto( var_8, level.heliguardsettings[var_0].weapontagright, ( 0, 0, 0 ), ( 0, 0, 0 ) );
|
|
var_9 setmodel( level.heliguardsettings[var_0].weaponmodelright );
|
|
var_9.angles = var_8.angles;
|
|
var_9.owner = var_8.owner;
|
|
var_9.team = self.team;
|
|
var_9 maketurretinoperable();
|
|
var_9.vehicle = var_8;
|
|
var_8.mgturretright = var_9;
|
|
var_8.mgturretright setdefaultdroppitch( 0 );
|
|
var_10 = var_8.origin + ( anglestoforward( var_8.angles ) * -100 + anglestoright( var_8.angles ) * 100 ) + ( 0, 0, 50 );
|
|
var_9.killcament = spawn( "script_model", var_10 );
|
|
var_9.killcament setscriptmoverkillcam( "explosive" );
|
|
var_9.killcament linkto( var_8, "tag_origin" );
|
|
|
|
if ( level.teambased )
|
|
{
|
|
var_8.mgturretleft setturretteam( self.team );
|
|
var_8.mgturretright setturretteam( self.team );
|
|
}
|
|
|
|
var_8.mgturretleft setmode( level.heliguardsettings[var_0].sentrymode );
|
|
var_8.mgturretright setmode( level.heliguardsettings[var_0].sentrymode );
|
|
var_8.mgturretleft setsentryowner( self );
|
|
var_8.mgturretright setsentryowner( self );
|
|
var_8.mgturretleft thread lbsupport_attacktargets();
|
|
var_8.mgturretright thread lbsupport_attacktargets();
|
|
var_8.attract_strength = 10000;
|
|
var_8.attract_range = 150;
|
|
var_8.attractor = missile_createattractorent( var_8, var_8.attract_strength, var_8.attract_range );
|
|
var_8.hasdodged = 0;
|
|
var_8.empgrenaded = 0;
|
|
var_8 thread lbsupport_handledamage();
|
|
var_8 thread lbsupport_watchdeath();
|
|
var_8 thread lbsupport_watchtimeout();
|
|
var_8 thread lbsupport_watchownerloss();
|
|
var_8 thread lbsupport_watchownerdamage();
|
|
var_8 thread lbsupport_watchroundend();
|
|
var_8 thread lbsupport_lightfx();
|
|
level.littlebirdguard = var_8;
|
|
var_8.owner maps\mp\_matchdata::logkillstreakevent( level.heliguardsettings[var_8.heliguardtype].streakname, var_8.targetpos );
|
|
return var_8;
|
|
}
|
|
|
|
lbsupport_lightfx()
|
|
{
|
|
playfxontag( level.chopper_fx["light"]["left"], self, "tag_light_nose" );
|
|
wait 0.05;
|
|
playfxontag( level.chopper_fx["light"]["belly"], self, "tag_light_belly" );
|
|
wait 0.05;
|
|
playfxontag( level.chopper_fx["light"]["tail"], self, "tag_light_tail1" );
|
|
wait 0.05;
|
|
playfxontag( level.chopper_fx["light"]["tail"], self, "tag_light_tail2" );
|
|
}
|
|
|
|
startlbsupport( var_0 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_0 endon( "death" );
|
|
var_0 setlookatent( self );
|
|
var_0 setvehgoalpos( var_0.targetpos );
|
|
var_0 waittill( "near_goal" );
|
|
var_0 vehicle_setspeed( var_0.speed, 60, 30 );
|
|
var_0 waittill( "goal" );
|
|
var_0 setvehgoalpos( var_0.currentnode.origin, 1 );
|
|
var_0 waittill( "goal" );
|
|
var_0 thread lbsupport_followplayer();
|
|
var_0 thread maps\mp\killstreaks\_flares::flares_handleincomingsam( ::lbsupport_watchsamproximity );
|
|
var_0 thread maps\mp\killstreaks\_flares::flares_handleincomingstinger( ::lbsupport_watchstingerproximity );
|
|
}
|
|
|
|
lbsupport_followplayer()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "leaving" );
|
|
|
|
if ( !isdefined( self.owner ) )
|
|
{
|
|
thread lbsupport_leave();
|
|
return;
|
|
}
|
|
|
|
self.owner endon( "disconnect" );
|
|
self endon( "owner_gone" );
|
|
self vehicle_setspeed( self.followspeed, 20, 20 );
|
|
|
|
for (;;)
|
|
{
|
|
if ( isdefined( self.owner ) && isalive( self.owner ) )
|
|
{
|
|
var_0 = lbsupport_getclosestlinkednode( self.owner.origin );
|
|
|
|
if ( isdefined( var_0 ) && var_0 != self.currentnode )
|
|
{
|
|
self.currentnode = var_0;
|
|
lbsupport_movetoplayer();
|
|
continue;
|
|
}
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
lbsupport_movetoplayer()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "leaving" );
|
|
self.owner endon( "death" );
|
|
self.owner endon( "disconnect" );
|
|
self endon( "owner_gone" );
|
|
self notify( "lbSupport_moveToPlayer" );
|
|
self endon( "lbSupport_moveToPlayer" );
|
|
self.intransit = 1;
|
|
self setvehgoalpos( self.currentnode.origin + ( 0, 0, 100 ), 1 );
|
|
self waittill( "goal" );
|
|
self.intransit = 0;
|
|
self notify( "hit_goal" );
|
|
}
|
|
|
|
lbsupport_watchdeath()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "gone" );
|
|
self waittill( "death" );
|
|
thread maps\mp\killstreaks\_helicopter::lbonkilled();
|
|
}
|
|
|
|
lbsupport_watchtimeout()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self.owner endon( "disconnect" );
|
|
self endon( "owner_gone" );
|
|
var_0 = level.heliguardsettings[self.heliguardtype].timeout;
|
|
maps\mp\gametypes\_hostmigration::waitlongdurationwithhostmigrationpause( var_0 );
|
|
thread lbsupport_leave();
|
|
}
|
|
|
|
lbsupport_watchownerloss()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "leaving" );
|
|
self.owner waittill( "killstreak_disowned" );
|
|
self notify( "owner_gone" );
|
|
thread lbsupport_leave();
|
|
}
|
|
|
|
lbsupport_watchownerdamage()
|
|
{
|
|
level endon( "game_ended" );
|
|
self endon( "death" );
|
|
self endon( "leaving" );
|
|
self.owner endon( "disconnect" );
|
|
self endon( "owner_gone" );
|
|
|
|
for (;;)
|
|
{
|
|
self.owner waittill( "damage", var_0, var_1, var_2, var_3, var_4, var_5, var_6, var_7, var_8, var_9 );
|
|
|
|
if ( isplayer( var_1 ) )
|
|
{
|
|
if ( var_1 != self.owner && distance2d( var_1.origin, self.origin ) <= self.targettingradius && !var_1 maps\mp\_utility::_hasperk( "specialty_blindeye" ) && !( level.hardcoremode && level.teambased && var_1.team == self.team ) )
|
|
{
|
|
self setlookatent( var_1 );
|
|
|
|
if ( isdefined( self.mgturretleft ) )
|
|
self.mgturretleft settargetentity( var_1 );
|
|
|
|
if ( isdefined( self.mgturretright ) )
|
|
self.mgturretright settargetentity( var_1 );
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
lbsupport_watchroundend()
|
|
{
|
|
self endon( "death" );
|
|
self endon( "leaving" );
|
|
self.owner endon( "disconnect" );
|
|
self endon( "owner_gone" );
|
|
level common_scripts\utility::waittill_any( "round_end_finished", "game_ended" );
|
|
thread lbsupport_leave();
|
|
}
|
|
|
|
lbsupport_leave()
|
|
{
|
|
self endon( "death" );
|
|
self notify( "leaving" );
|
|
level.littlebirdguard = undefined;
|
|
self clearlookatent();
|
|
var_0 = maps\mp\killstreaks\_airdrop::getflyheightoffset( self.origin );
|
|
var_1 = self.origin + ( 0, 0, var_0 );
|
|
self vehicle_setspeed( self.speed, 60 );
|
|
self setmaxpitchroll( 45, 180 );
|
|
self setvehgoalpos( var_1 );
|
|
self waittill( "goal" );
|
|
var_1 = var_1 + anglestoforward( self.angles ) * 15000;
|
|
var_2 = spawn( "script_origin", var_1 );
|
|
|
|
if ( isdefined( var_2 ) )
|
|
{
|
|
self setlookatent( var_2 );
|
|
var_2 thread wait_and_delete( 3.0 );
|
|
}
|
|
|
|
self setvehgoalpos( var_1 );
|
|
self waittill( "goal" );
|
|
self notify( "gone" );
|
|
maps\mp\killstreaks\_helicopter::removelittlebird();
|
|
}
|
|
|
|
wait_and_delete( var_0 )
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
wait( var_0 );
|
|
self delete();
|
|
}
|
|
|
|
lbsupport_handledamage()
|
|
{
|
|
self endon( "death" );
|
|
level endon( "game_ended" );
|
|
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( self ) )
|
|
return;
|
|
|
|
if ( isdefined( var_8 ) && var_8 & level.idflags_penetration )
|
|
self.wasdamagedfrombulletpenetration = 1;
|
|
|
|
self.wasdamaged = 1;
|
|
var_10 = var_0;
|
|
|
|
if ( isplayer( var_1 ) )
|
|
{
|
|
if ( var_1 != self.owner && distance2d( var_1.origin, self.origin ) <= self.targettingradius && !var_1 maps\mp\_utility::_hasperk( "specialty_blindeye" ) && !( level.hardcoremode && level.teambased && var_1.team == self.team ) )
|
|
{
|
|
self setlookatent( var_1 );
|
|
|
|
if ( isdefined( self.mgturretleft ) )
|
|
self.mgturretleft settargetentity( var_1 );
|
|
|
|
if ( isdefined( self.mgturretright ) )
|
|
self.mgturretright settargetentity( var_1 );
|
|
}
|
|
|
|
var_1 maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "helicopter" );
|
|
|
|
if ( var_4 == "MOD_RIFLE_BULLET" || var_4 == "MOD_PISTOL_BULLET" )
|
|
{
|
|
if ( var_1 maps\mp\_utility::_hasperk( "specialty_armorpiercing" ) )
|
|
var_10 = var_10 + var_0 * level.armorpiercingmod;
|
|
}
|
|
}
|
|
|
|
if ( isdefined( var_1.owner ) && isplayer( var_1.owner ) )
|
|
var_1.owner maps\mp\gametypes\_damagefeedback::updatedamagefeedback( "helicopter" );
|
|
|
|
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 "sam_projectile_mp":
|
|
self.largeprojectiledamage = 1;
|
|
var_10 = self.maxhealth * 0.25;
|
|
break;
|
|
case "emp_grenade_mp":
|
|
var_10 = 0;
|
|
thread lbsupport_empgrenaded();
|
|
break;
|
|
case "osprey_player_minigun_mp":
|
|
self.largeprojectiledamage = 0;
|
|
var_10 = var_10 * 2;
|
|
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 notify( "destroyed_helicopter" );
|
|
var_1 notify( "destroyed_killstreak", var_9 );
|
|
thread maps\mp\_utility::teamplayercardsplash( "callout_destroyed_little_bird", var_1 );
|
|
var_1 thread maps\mp\gametypes\_rank::giverankxp( "kill", 300, var_9, var_4 );
|
|
var_1 thread maps\mp\gametypes\_rank::xpeventpopup( "destroyed_little_bird" );
|
|
thread maps\mp\gametypes\_missions::vehiclekilled( self.owner, self, undefined, var_1, var_0, var_4, var_9 );
|
|
}
|
|
|
|
if ( isdefined( self.owner ) )
|
|
self.owner thread maps\mp\_utility::leaderdialogonplayer( "lbguard_destroyed" );
|
|
|
|
self notify( "death" );
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
lbsupport_empgrenaded()
|
|
{
|
|
self notify( "lbSupport_EMPGrenaded" );
|
|
self endon( "lbSupport_EMPGrenaded" );
|
|
self endon( "death" );
|
|
self.owner endon( "disconnect" );
|
|
level endon( "game_ended" );
|
|
self.empgrenaded = 1;
|
|
|
|
if ( isdefined( self.mgturretright ) )
|
|
self.mgturretright notify( "stop_shooting" );
|
|
|
|
if ( isdefined( self.mgturretleft ) )
|
|
self.mgturretleft notify( "stop_shooting" );
|
|
|
|
if ( isdefined( level._effect["ims_sensor_explode"] ) )
|
|
{
|
|
if ( isdefined( self.mgturretright ) )
|
|
playfxontag( common_scripts\utility::getfx( "ims_sensor_explode" ), self.mgturretright, "tag_aim" );
|
|
|
|
if ( isdefined( self.mgturretleft ) )
|
|
playfxontag( common_scripts\utility::getfx( "ims_sensor_explode" ), self.mgturretleft, "tag_aim" );
|
|
}
|
|
|
|
wait 3.5;
|
|
self.empgrenaded = 0;
|
|
|
|
if ( isdefined( self.mgturretright ) )
|
|
self.mgturretright notify( "turretstatechange" );
|
|
|
|
if ( isdefined( self.mgturretleft ) )
|
|
self.mgturretleft notify( "turretstatechange" );
|
|
}
|
|
|
|
lbsupport_watchsamproximity( var_0, var_1, var_2, var_3 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_2 endon( "death" );
|
|
|
|
for ( var_4 = 0; var_4 < var_3.size; var_4++ )
|
|
{
|
|
if ( isdefined( var_3[var_4] ) && !var_2.hasdodged )
|
|
{
|
|
var_2.hasdodged = 1;
|
|
var_5 = spawn( "script_origin", var_2.origin );
|
|
var_5.angles = var_2.angles;
|
|
var_5 movegravity( anglestoright( var_3[var_4].angles ) * -1000, 0.05 );
|
|
var_5 thread maps\mp\killstreaks\_flares::flares_deleteaftertime( 5.0 );
|
|
|
|
for ( var_6 = 0; var_6 < var_3.size; var_6++ )
|
|
{
|
|
if ( isdefined( var_3[var_6] ) )
|
|
var_3[var_6] missile_settargetent( var_5 );
|
|
}
|
|
|
|
var_7 = var_2.origin + anglestoright( var_3[var_4].angles ) * 200;
|
|
var_2 vehicle_setspeed( var_2.speed, 100, 40 );
|
|
var_2 setvehgoalpos( var_7, 1 );
|
|
wait 2.0;
|
|
var_2 vehicle_setspeed( var_2.followspeed, 20, 20 );
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
|
|
lbsupport_watchstingerproximity( var_0, var_1, var_2 )
|
|
{
|
|
level endon( "game_ended" );
|
|
var_2 endon( "death" );
|
|
|
|
if ( isdefined( self ) && !var_2.hasdodged )
|
|
{
|
|
var_2.hasdodged = 1;
|
|
var_3 = spawn( "script_origin", var_2.origin );
|
|
var_3.angles = var_2.angles;
|
|
var_3 movegravity( anglestoright( self.angles ) * -1000, 0.05 );
|
|
var_3 thread maps\mp\killstreaks\_flares::flares_deleteaftertime( 5.0 );
|
|
self missile_settargetent( var_3 );
|
|
var_4 = var_2.origin + anglestoright( self.angles ) * 200;
|
|
var_2 vehicle_setspeed( var_2.speed, 100, 40 );
|
|
var_2 setvehgoalpos( var_4, 1 );
|
|
wait 2.0;
|
|
var_2 vehicle_setspeed( var_2.followspeed, 20, 20 );
|
|
}
|
|
}
|
|
|
|
lbsupport_getcloseststartnode( var_0 )
|
|
{
|
|
var_1 = undefined;
|
|
var_2 = 999999;
|
|
|
|
foreach ( var_4 in level.air_start_nodes )
|
|
{
|
|
var_5 = distance( var_4.origin, var_0 );
|
|
|
|
if ( var_5 < var_2 )
|
|
{
|
|
var_1 = var_4;
|
|
var_2 = var_5;
|
|
}
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
lbsupport_getclosestnode( var_0 )
|
|
{
|
|
var_1 = undefined;
|
|
var_2 = 999999;
|
|
|
|
foreach ( var_4 in level.air_node_mesh )
|
|
{
|
|
var_5 = distance( var_4.origin, var_0 );
|
|
|
|
if ( var_5 < var_2 )
|
|
{
|
|
var_1 = var_4;
|
|
var_2 = var_5;
|
|
}
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
lbsupport_getclosestlinkednode( var_0 )
|
|
{
|
|
var_1 = undefined;
|
|
var_2 = distance2d( self.currentnode.origin, var_0 );
|
|
var_3 = var_2;
|
|
|
|
foreach ( var_5 in self.currentnode.neighbors )
|
|
{
|
|
var_6 = distance2d( var_5.origin, var_0 );
|
|
|
|
if ( var_6 < var_2 && var_6 < var_3 )
|
|
{
|
|
var_1 = var_5;
|
|
var_3 = var_6;
|
|
}
|
|
}
|
|
|
|
return var_1;
|
|
}
|
|
|
|
lbsupport_arraycontains( var_0, var_1 )
|
|
{
|
|
if ( var_0.size <= 0 )
|
|
return 0;
|
|
|
|
foreach ( var_3 in var_0 )
|
|
{
|
|
if ( var_3 == var_1 )
|
|
return 1;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
lbsupport_getlinkedstructs()
|
|
{
|
|
var_0 = [];
|
|
|
|
if ( isdefined( self.script_linkto ) )
|
|
{
|
|
var_1 = common_scripts\utility::get_links();
|
|
|
|
for ( var_2 = 0; var_2 < var_1.size; var_2++ )
|
|
{
|
|
var_3 = common_scripts\utility::getstruct( var_1[var_2], "script_linkname" );
|
|
|
|
if ( isdefined( var_3 ) )
|
|
var_0[var_0.size] = var_3;
|
|
}
|
|
}
|
|
|
|
return var_0;
|
|
}
|
|
|
|
lbsupport_setairstartnodes()
|
|
{
|
|
level.air_start_nodes = common_scripts\utility::getstructarray( "chopper_boss_path_start", "targetname" );
|
|
|
|
foreach ( var_1 in level.air_start_nodes )
|
|
var_1.neighbors = var_1 lbsupport_getlinkedstructs();
|
|
}
|
|
|
|
lbsupport_setairnodemesh()
|
|
{
|
|
level.air_node_mesh = common_scripts\utility::getstructarray( "so_chopper_boss_path_struct", "script_noteworthy" );
|
|
|
|
foreach ( var_1 in level.air_node_mesh )
|
|
{
|
|
var_1.neighbors = var_1 lbsupport_getlinkedstructs();
|
|
|
|
foreach ( var_3 in level.air_node_mesh )
|
|
{
|
|
if ( var_1 == var_3 )
|
|
continue;
|
|
|
|
if ( !lbsupport_arraycontains( var_1.neighbors, var_3 ) && lbsupport_arraycontains( var_3 lbsupport_getlinkedstructs(), var_1 ) )
|
|
var_1.neighbors[var_1.neighbors.size] = var_3;
|
|
}
|
|
}
|
|
}
|
|
|
|
lbsupport_attacktargets()
|
|
{
|
|
self.vehicle endon( "death" );
|
|
level endon( "game_ended" );
|
|
|
|
for (;;)
|
|
{
|
|
self waittill( "turretstatechange" );
|
|
|
|
if ( self isfiringturret() && !self.vehicle.empgrenaded )
|
|
{
|
|
thread lbsupport_burstfirestart();
|
|
continue;
|
|
}
|
|
|
|
thread lbsupport_burstfirestop();
|
|
}
|
|
}
|
|
|
|
lbsupport_burstfirestart()
|
|
{
|
|
self.vehicle endon( "death" );
|
|
self.vehicle endon( "leaving" );
|
|
self endon( "stop_shooting" );
|
|
level endon( "game_ended" );
|
|
var_0 = 0.1;
|
|
var_1 = 40;
|
|
var_2 = 80;
|
|
var_3 = 1.0;
|
|
var_4 = 2.0;
|
|
|
|
for (;;)
|
|
{
|
|
var_5 = randomintrange( var_1, var_2 + 1 );
|
|
|
|
for ( var_6 = 0; var_6 < var_5; var_6++ )
|
|
{
|
|
var_7 = self getturrettarget( 0 );
|
|
|
|
if ( isdefined( var_7 ) && ( !isdefined( var_7.spawntime ) || ( gettime() - var_7.spawntime ) / 1000 > 5 ) && ( isdefined( var_7.team ) && var_7.team != "spectator" ) && maps\mp\_utility::isreallyalive( var_7 ) )
|
|
{
|
|
self.vehicle setlookatent( var_7 );
|
|
self shootturret();
|
|
}
|
|
|
|
wait( var_0 );
|
|
}
|
|
|
|
wait( randomfloatrange( var_3, var_4 ) );
|
|
}
|
|
}
|
|
|
|
lbsupport_burstfirestop()
|
|
{
|
|
self notify( "stop_shooting" );
|
|
|
|
if ( isdefined( self.vehicle.owner ) )
|
|
self.vehicle setlookatent( self.vehicle.owner );
|
|
}
|