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

336 lines
8.2 KiB
Plaintext

// IW6 GSC SOURCE
// Generated by https://github.com/xensik/gsc-tool
agentfunc( var_0 )
{
return level.agent_funcs[self.agent_type][var_0];
}
set_agent_team( var_0, var_1 )
{
self.team = var_0;
self.agentteam = var_0;
self.pers["team"] = var_0;
self.owner = var_1;
self setotherent( var_1 );
self setentityowner( var_1 );
}
initagentscriptvariables()
{
self.agent_type = "player";
self.pers = [];
self.hasdied = 0;
self.isactive = 0;
self.isagent = 1;
self.wasti = 0;
self.issniper = 0;
self.spawntime = 0;
self.entity_number = self getentitynumber();
self.agent_teamparticipant = 0;
self.agent_gameparticipant = 0;
self.canperformclienttraces = 0;
self.agentname = undefined;
self detachall();
initplayerscriptvariables( 0 );
}
initplayerscriptvariables( var_0 )
{
if ( !var_0 )
{
self.class = undefined;
self.lastclass = undefined;
self.movespeedscaler = undefined;
self.avoidkillstreakonspawntimer = undefined;
self.guid = undefined;
self.name = undefined;
self.saved_actionslotdata = undefined;
self.perks = undefined;
self.weaponlist = undefined;
self.omaclasschanged = undefined;
self.objectivescaler = undefined;
self.touchtriggers = undefined;
self.carryobject = undefined;
self.claimtrigger = undefined;
self.canpickupobject = undefined;
self.killedinuse = undefined;
self.sessionteam = undefined;
self.sessionstate = undefined;
self.lastspawntime = undefined;
self.lastspawnpoint = undefined;
self.disabledweapon = undefined;
self.disabledweaponswitch = undefined;
self.disabledoffhandweapons = undefined;
self.disabledusability = undefined;
self.shielddamage = undefined;
self.shieldbullethits = undefined;
self.recentshieldxp = undefined;
}
else
{
self.movespeedscaler = 1;
self.avoidkillstreakonspawntimer = 5;
self.guid = maps\mp\_utility::getuniqueid();
self.name = self.guid;
self.sessionteam = self.team;
self.sessionstate = "playing";
self.shielddamage = 0;
self.shieldbullethits = 0;
self.recentshieldxp = 0;
self.agent_gameparticipant = 1;
maps\mp\gametypes\_playerlogic::setupsavedactionslots();
thread maps\mp\perks\_perks::onplayerspawned();
if ( maps\mp\_utility::isgameparticipant( self ) )
{
self.objectivescaler = 1;
maps\mp\gametypes\_gameobjects::init_player_gameobjects();
self.disabledweapon = 0;
self.disabledweaponswitch = 0;
self.disabledoffhandweapons = 0;
}
}
self.disabledusability = 1;
}
getfreeagent( var_0 )
{
var_1 = undefined;
if ( isdefined( level.agentarray ) )
{
foreach ( var_3 in level.agentarray )
{
if ( !isdefined( var_3.isactive ) || !var_3.isactive )
{
if ( isdefined( var_3.waitingtodeactivate ) && var_3.waitingtodeactivate )
continue;
var_1 = var_3;
var_1 initagentscriptvariables();
if ( isdefined( var_0 ) )
var_1.agent_type = var_0;
break;
}
}
}
return var_1;
}
activateagent()
{
self.isactive = 1;
}
deactivateagent()
{
thread deactivateagentdelayed();
}
deactivateagentdelayed()
{
self notify( "deactivateAgentDelayed" );
self endon( "deactivateAgentDelayed" );
if ( maps\mp\_utility::isgameparticipant( self ) )
maps\mp\gametypes\_spawnlogic::removefromparticipantsarray();
maps\mp\gametypes\_spawnlogic::removefromcharactersarray();
wait 0.05;
self.isactive = 0;
self.hasdied = 0;
self.owner = undefined;
self.connecttime = undefined;
self.waitingtodeactivate = undefined;
foreach ( var_1 in level.characters )
{
if ( isdefined( var_1.attackers ) )
{
foreach ( var_4, var_3 in var_1.attackers )
{
if ( var_3 == self )
var_1.attackers[var_4] = undefined;
}
}
}
if ( isdefined( self.headmodel ) )
{
self detach( self.headmodel );
self.headmodel = undefined;
}
self notify( "disconnect" );
}
getnumactiveagents( var_0 )
{
if ( !isdefined( var_0 ) )
var_0 = "all";
var_1 = getactiveagentsoftype( var_0 );
return var_1.size;
}
getactiveagentsoftype( var_0 )
{
var_1 = [];
if ( !isdefined( level.agentarray ) )
return var_1;
foreach ( var_3 in level.agentarray )
{
if ( isdefined( var_3.isactive ) && var_3.isactive )
{
if ( var_0 == "all" || var_3.agent_type == var_0 )
var_1[var_1.size] = var_3;
}
}
return var_1;
}
getnumownedactiveagents( var_0 )
{
return getnumownedactiveagentsbytype( var_0, "all" );
}
getnumownedactiveagentsbytype( var_0, var_1 )
{
var_2 = 0;
if ( !isdefined( level.agentarray ) )
return var_2;
foreach ( var_4 in level.agentarray )
{
if ( isdefined( var_4.isactive ) && var_4.isactive )
{
if ( isdefined( var_4.owner ) && var_4.owner == var_0 )
{
if ( var_1 == "all" && var_4.agent_type != "alien" || var_4.agent_type == var_1 )
var_2++;
}
}
}
return var_2;
}
getvalidspawnpathnodenearplayer( var_0, var_1 )
{
var_2 = getnodesinradius( self.origin, 350, 64, 128, "Path" );
if ( !isdefined( var_2 ) || var_2.size == 0 )
return undefined;
if ( isdefined( level.waterdeletez ) && isdefined( level.trigunderwater ) )
{
var_3 = var_2;
var_2 = [];
foreach ( var_5 in var_3 )
{
if ( var_5.origin[2] > level.waterdeletez || !ispointinvolume( var_5.origin, level.trigunderwater ) )
var_2[var_2.size] = var_5;
}
}
var_7 = anglestoforward( self.angles );
var_8 = -10;
var_9 = maps\mp\gametypes\_spawnlogic::getplayertraceheight( self );
var_10 = ( 0, 0, var_9 );
if ( !isdefined( var_0 ) )
var_0 = 0;
if ( !isdefined( var_1 ) )
var_1 = 0;
var_11 = [];
var_12 = [];
foreach ( var_14 in var_2 )
{
if ( !var_14 doesnodeallowstance( "stand" ) || isdefined( var_14.no_agent_spawn ) )
continue;
var_15 = vectornormalize( var_14.origin - self.origin );
var_16 = vectordot( var_7, var_15 );
for ( var_17 = 0; var_17 < var_12.size; var_17++ )
{
if ( var_16 > var_12[var_17] )
{
for ( var_18 = var_12.size; var_18 > var_17; var_18-- )
{
var_12[var_18] = var_12[var_18 - 1];
var_11[var_18] = var_11[var_18 - 1];
}
break;
}
}
var_11[var_17] = var_14;
var_12[var_17] = var_16;
}
for ( var_17 = 0; var_17 < var_11.size; var_17++ )
{
var_14 = var_11[var_17];
var_20 = self.origin + var_10;
var_21 = var_14.origin + var_10;
if ( var_17 > 0 )
wait 0.05;
if ( !sighttracepassed( var_20, var_21, 0, self ) )
continue;
if ( var_1 )
{
if ( var_17 > 0 )
wait 0.05;
var_22 = playerphysicstrace( var_14.origin + var_10, var_14.origin );
if ( distancesquared( var_22, var_14.origin ) > 1 )
continue;
}
if ( var_0 )
{
if ( var_17 > 0 )
wait 0.05;
var_22 = physicstrace( var_20, var_21 );
if ( distancesquared( var_22, var_21 ) > 1 )
continue;
}
return var_14;
}
if ( var_11.size > 0 && isdefined( level.ishorde ) )
return var_11[0];
}
killagent( var_0 )
{
var_0 dodamage( var_0.health + 500000, var_0.origin );
}
killdog()
{
self [[ agentfunc( "on_damaged" ) ]]( level, undefined, self.health + 1, 0, "MOD_CRUSH", "none", ( 0, 0, 0 ), ( 0, 0, 0 ), "none", 0 );
}