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

311 lines
8.3 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
init()
{
if ( !isdefined( level.portableaoegeneratorsettings ) )
{
level.portableaoegeneratorsettings = [];
level.generators = [];
}
}
setweapon( var_0 )
{
var_1 = level.portableaoegeneratorsettings[var_0];
self setoffhandsecondaryclass( "flash" );
maps\mp\_utility::_giveweapon( var_1.weaponname, 0 );
self givestartammo( var_1.weaponname );
if ( !isdefined( self.deployedgenerators ) )
self.deployedgenerators = [];
thread monitorgeneratoruse( var_0 );
}
unsetweapon( var_0 )
{
self notify( "end_monitorUse_" + var_0 );
}
deletegenerator( var_0, var_1 )
{
if ( !isdefined( var_0 ) )
return;
foreach ( var_3 in level.players )
{
if ( isdefined( var_3 ) && isdefined( var_3.ingeneratoraoe ) )
var_3.ingeneratoraoe[var_1] = undefined;
}
registergenerator( var_0, var_1, undefined );
var_0 notify( "death" );
var_0 delete();
}
registergenerator( var_0, var_1, var_2 )
{
if ( isdefined( var_2 ) && var_2 )
self.deployedgenerators[var_1] = var_0;
else
{
self.deployedgenerators[var_1] = undefined;
var_2 = undefined;
}
var_3 = level.generators[var_1];
if ( !isdefined( var_3 ) )
{
level.generators[var_1] = [];
var_3 = level.generators[var_1];
}
var_4 = getid( var_0 );
var_3[var_4] = var_2;
}
monitorgeneratoruse( var_0 )
{
self notify( "end_monitorUse_" + var_0 );
self endon( "end_monitorUse_" + var_0 );
self endon( "disconnect" );
level endon( "game_ended" );
var_1 = level.portableaoegeneratorsettings[var_0];
for (;;)
{
self waittill( "grenade_fire", var_2, var_3 );
if ( var_3 == var_1.weaponname || var_3 == var_0 )
{
if ( !isalive( self ) )
{
var_2 delete();
return;
}
if ( checkgeneratorplacement( var_2, var_1.placementztolerance ) )
{
var_4 = self.deployedgenerators[var_0];
if ( isdefined( var_4 ) )
deletegenerator( var_4, var_0 );
var_5 = spawnnewgenerator( var_0, var_2.origin );
var_6 = var_2 getlinkedparent();
if ( isdefined( var_6 ) )
var_5 linkto( var_6 );
if ( isdefined( var_2 ) )
var_2 delete();
continue;
}
self setweaponammostock( var_1.weaponname, self getweaponammostock( "trophy_mp" ) + 1 );
}
}
}
checkgeneratorplacement( var_0, var_1 )
{
var_0 hide();
var_0 waittill( "missile_stuck", var_2 );
if ( var_1 * var_1 < distancesquared( var_0.origin, self.origin ) )
{
var_3 = bullettrace( self.origin, self.origin - ( 0, 0, var_1 ), 0, self );
if ( var_3["fraction"] == 1 )
{
var_0 delete();
return 0;
}
var_0.origin = var_3["position"];
}
var_0 show();
return 1;
}
spawnnewgenerator( var_0, var_1 )
{
var_2 = level.portableaoegeneratorsettings[var_0];
var_3 = spawn( "script_model", var_1 );
var_3.health = var_2.health;
var_3.team = self.team;
var_3.owner = self;
var_3 setcandamage( 1 );
var_3 setmodel( var_2.placedmodel );
if ( level.teambased )
var_3 maps\mp\_entityheadicons::setteamheadicon( self.team, ( 0, 0, var_2.headiconheight ) );
else
var_3 maps\mp\_entityheadicons::setplayerheadicon( self, ( 0, 0, var_2.headiconheight ) );
var_3 thread watchowner( self, var_0 );
var_3 thread watchdamage( self, var_0 );
var_3 thread watchuse( self, var_0 );
var_3 thread maps\mp\_utility::notusableforjoiningplayers( self );
if ( isdefined( var_2.ondeploycallback ) )
var_3 [[ var_2.ondeploycallback ]]( self, var_0 );
var_3 thread maps\mp\gametypes\_weapons::createbombsquadmodel( var_2.bombsquadmodel, "tag_origin", self );
registergenerator( var_3, var_0, 1 );
self.changingweapon = undefined;
wait 0.05;
if ( isdefined( var_3 ) && var_3 maps\mp\_utility::touchingbadtrigger() )
var_3 notify( "death" );
return var_3;
}
watchowner( var_0, var_1 )
{
self endon( "death" );
level endon( "game_ended" );
if ( maps\mp\_utility::bot_is_fireteam_mode() )
var_0 waittill( "killstreak_disowned" );
else
var_0 common_scripts\utility::waittill_either( "killstreak_disowned", "death" );
var_0 thread deletegenerator( self, var_1 );
}
watchdamage( var_0, var_1 )
{
self.generatortype = var_1;
var_2 = level.portableaoegeneratorsettings[var_1];
maps\mp\gametypes\_damage::monitordamage( var_2.health, var_2.damagefeedback, ::handledeathdamage, ::modifydamage, 0 );
}
modifydamage( var_0, var_1, var_2, var_3 )
{
var_4 = var_3;
var_4 = maps\mp\gametypes\_damage::handlemeleedamage( var_1, var_2, var_4 );
var_4 = maps\mp\gametypes\_damage::handleempdamage( var_1, var_2, var_4 );
var_4 = maps\mp\gametypes\_damage::handlemissiledamage( var_1, var_2, var_4 );
var_4 = maps\mp\gametypes\_damage::handlegrenadedamage( var_1, var_2, var_4 );
var_4 = maps\mp\gametypes\_damage::handleapdamage( var_1, var_2, var_4, var_0 );
return var_4;
}
handledeathdamage( var_0, var_1, var_2 )
{
var_3 = self.owner;
var_4 = level.portableaoegeneratorsettings[self.generatortype];
if ( isdefined( var_3 ) && var_0 != var_3 )
var_0 notify( "destroyed_equipment" );
if ( isdefined( var_4.ondestroycallback ) )
var_3 [[ var_4.ondestroycallback ]]( self, self.generatortype );
var_3 thread deletegenerator( self, self.generatortype );
}
watchuse( var_0, var_1 )
{
self endon( "death" );
level endon( "game_ended" );
var_0 endon( "disconnect" );
var_2 = level.portableaoegeneratorsettings[var_1];
self setcursorhint( "HINT_NOICON" );
self sethintstring( var_2.usehintstring );
maps\mp\_utility::setselfusable( var_0 );
for (;;)
{
self waittill( "trigger", var_3 );
var_3 playlocalsound( var_2.usesound );
if ( var_3 getammocount( var_2.weaponname ) == 0 && !var_3 maps\mp\_utility::isjuggernaut() )
var_3 setweapon( var_1 );
var_3 thread deletegenerator( self, var_1 );
}
}
generatoraoetracker()
{
self endon( "death" );
self endon( "disconnect" );
self endon( "faux_spawn" );
level endon( "game_ended" );
var_0 = randomfloat( 0.5 );
wait( var_0 );
self.ingeneratoraoe = [];
for (;;)
{
wait 0.05;
if ( level.generators.size > 0 || self.ingeneratoraoe.size > 0 )
{
foreach ( var_2 in level.portableaoegeneratorsettings )
checkallgeneratorsofthistype( var_2.generatortype );
}
}
}
checkallgeneratorsofthistype( var_0 )
{
var_1 = level.generators[var_0];
if ( isdefined( var_1 ) )
{
var_2 = level.portableaoegeneratorsettings[var_0];
var_3 = var_2.aoeradius * var_2.aoeradius;
var_4 = undefined;
foreach ( var_6 in var_1 )
{
if ( isdefined( var_6 ) && maps\mp\_utility::isreallyalive( var_6 ) )
{
if ( level.teambased && matchestargetteam( var_6.team, self.team, var_2.targettype ) || !level.teambased && matchesowner( var_6.owner, self, var_2.targettype ) )
{
var_7 = distancesquared( var_6.origin, self.origin );
if ( var_7 < var_3 )
{
var_4 = var_6;
break;
}
}
}
}
var_9 = isdefined( var_4 );
var_10 = isdefined( self.ingeneratoraoe[var_0] );
if ( var_9 && !var_10 )
self [[ var_2.onentercallback ]]();
else if ( !var_9 && var_10 )
self [[ var_2.onexitcallback ]]();
self.ingeneratoraoe[var_0] = var_4;
}
}
matchestargetteam( var_0, var_1, var_2 )
{
return var_2 == "all" || var_2 == "friendly" && var_0 == var_1 || var_2 == "enemy" && var_0 != var_1;
}
matchesowner( var_0, var_1, var_2 )
{
return var_2 == "all" || var_2 == "friendly" && var_0 == var_1 || var_2 == "enemy" && var_0 != var_1;
}
getid( var_0 )
{
return var_0.owner.guid + var_0.birthtime;
}