iw6-scripts-dev/maps/mp/agents/_agent_common.gsc
2024-12-11 11:28:08 +01:00

129 lines
3.3 KiB
Plaintext

#include maps\mp\agents\_agent_utility;
#include common_scripts\utility;
#include maps\mp\_utility;
//=======================================================
// CodeCallback_AgentAdded
//=======================================================
CodeCallback_AgentAdded()
{
self initAgentScriptVariables();
agentTeam = "axis";
if( (level.numagents % 2) == 0 )
{
agentTeam = "allies";
}
level.numagents++;
self set_agent_team( agentTeam );
level.agentArray[ level.agentArray.size ] = self;
}
//=======================================================
// CodeCallback_AgentDamaged
//=======================================================
CodeCallback_AgentDamaged( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset )
{
eAttacker = _validateAttacker( eAttacker );
self [[ self agentFunc( "on_damaged" ) ]]( eInflictor, eAttacker, iDamage, iDFlags, sMeansOfDeath, sWeapon, vPoint, vDir, sHitLoc, timeOffset );
}
//=======================================================
// CodeCallback_AgentKilled
//=======================================================
CodeCallback_AgentKilled(eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration)
{
eAttacker = _validateAttacker( eAttacker );
self thread [[ self agentFunc("on_killed") ]](eInflictor, eAttacker, iDamage, sMeansOfDeath, sWeapon, vDir, sHitLoc, timeOffset, deathAnimDuration);
}
//========================================================
// init
//========================================================
init()
{
initAgentLevelVariables();
// add all the agents we're supposed to have in the game with us
level thread add_agents_to_game();
}
//=======================================================
// connectNewAgent
//=======================================================
connectNewAgent( agent_type, team, class )
{
agent = getFreeAgent( agent_type );
if ( IsDefined( agent ) )
{
agent.connectTime = GetTime();
if ( IsDefined( team ) )
agent set_agent_team( team );
else
agent set_agent_team( agent.team );
if ( IsDefined( class ) )
agent.class_override = class;
if( IsDefined(level.agent_funcs[agent_type]["onAIConnect"]) )
agent [[ agent agentFunc("onAIConnect") ]]();
agent maps\mp\gametypes\_spawnlogic::addToCharactersArray();
AssertEx(agent.connectTime == GetTime(), "Agent spawn took too long - there should be no waits in connectNewAgent");
}
return agent;
}
//========================================================
// initAgentLevelVariables
//========================================================
initAgentLevelVariables()
{
level.agentArray = [];
level.numagents = 0;
}
//========================================================
// add_agents_to_game
//========================================================
add_agents_to_game()
{
level endon( "game_ended" );
level waittill("connected", player);
maxagents = GetMaxAgents();
while( level.agentArray.size < maxagents )
{
agent = AddAgent();
if( !IsDefined( agent) )
{
waitframe();
continue;
}
}
}
//========================================================
// set_agent_health
//========================================================
set_agent_health( health )
{
self.agenthealth = health;
self.health = health;
self.maxhealth = health;
}