718 lines
17 KiB
Text
718 lines
17 KiB
Text
|
|
/*
|
|
===============================================================================
|
|
|
|
spawn_master.script
|
|
|
|
contains the spawn masters
|
|
|
|
===============================================================================
|
|
*/
|
|
|
|
object spawn_master {
|
|
void preinit();
|
|
void destroy();
|
|
|
|
void SetupCommandmapIcon();
|
|
void ClearCommandmapIcon();
|
|
void ClearCommandmapSelectedIcon();
|
|
|
|
void OnSpawnPointSelected( float isDefault );
|
|
void OnSpawnPointDeselected();
|
|
void OnGuiMessage( entity p );
|
|
void OnSetTeam( object oldTeam, object newTeam );
|
|
void OnHighlight( boolean set );
|
|
|
|
boolean CanSetSpawn() { return true; }
|
|
|
|
void DeployTeam( object team );
|
|
void UnDeployTeam( object team );
|
|
|
|
float commandmapIcon;
|
|
float commandmapSelectedIcon;
|
|
float commandmapHighlightIcon;
|
|
}
|
|
|
|
void spawn_master::preinit() {
|
|
commandmapIcon = -1;
|
|
commandmapSelectedIcon = -1;
|
|
commandmapHighlightIcon = -1;
|
|
}
|
|
|
|
void spawn_master::destroy() {
|
|
ClearCommandmapIcon();
|
|
ClearCommandmapSelectedIcon();
|
|
|
|
object team = getGameTeam();
|
|
if ( team != $null_entity ) {
|
|
team.unRegisterSpawnPoint( self );
|
|
}
|
|
if( commandmapHighlightIcon != -1 ) {
|
|
sys.freeCMIcon( self, commandmapHighlightIcon );
|
|
commandmapHighlightIcon = -1;
|
|
}
|
|
}
|
|
|
|
void spawn_master::OnSetTeam( object oldTeam, object newTeam ) {
|
|
if ( oldTeam != $null_entity ) {
|
|
oldTeam.unRegisterSpawnPoint( self );
|
|
}
|
|
|
|
UnDeployTeam( oldTeam );
|
|
DeployTeam( newTeam );
|
|
|
|
if ( newTeam == $null_entity ) {
|
|
ClearCommandmapIcon();
|
|
} else {
|
|
newTeam.registerSpawnPoint( self );
|
|
|
|
SetupCommandmapIcon();
|
|
}
|
|
}
|
|
|
|
void spawn_master::DeployTeam( object team ) {
|
|
if ( team == $null_entity ) {
|
|
return;
|
|
}
|
|
|
|
string teamName = team.getName();
|
|
string lastMatch;
|
|
entity targetEnt;
|
|
|
|
string targetPrefix = "target_" + teamName;
|
|
|
|
while ( true ) {
|
|
lastMatch = getNextKey( targetPrefix, lastMatch );
|
|
if ( lastMatch == "" ) {
|
|
break;
|
|
}
|
|
|
|
targetEnt = getEntityKey( lastMatch );
|
|
targetEnt.vOnDeploy();
|
|
}
|
|
}
|
|
|
|
void spawn_master::UnDeployTeam( object team ) {
|
|
if ( team == $null_entity ) {
|
|
return;
|
|
}
|
|
|
|
string teamName = team.getName();
|
|
string lastMatch;
|
|
entity targetEnt;
|
|
|
|
string targetPrefix = "target_" + teamName;
|
|
|
|
while ( true ) {
|
|
lastMatch = getNextKey( targetPrefix, lastMatch );
|
|
if ( lastMatch == "" ) {
|
|
break;
|
|
}
|
|
|
|
targetEnt = getEntityKey( lastMatch );
|
|
targetEnt.vOnUnDeploy();
|
|
}
|
|
}
|
|
|
|
void spawn_master::SetupCommandmapIcon() {
|
|
ClearCommandmapIcon();
|
|
|
|
object team = getGameTeam();
|
|
if ( team == $null_entity ) {
|
|
return;
|
|
}
|
|
|
|
commandmapIcon = sys.allocCMIcon( self, getFloatKey( "icon_sort_cm" ) );
|
|
|
|
sys.setCMIconMaterial( commandmapIcon, GetMaterial( getKey( "mtr_icon_" + team.getName() ) ) );
|
|
sys.setCMIconFlag( commandmapIcon, CMF_TEAMONLY );
|
|
sys.setCMIconFlag( commandmapIcon, CMF_ALWAYSKNOWN );
|
|
sys.setCMIconFlag( commandmapIcon, CMF_ONLYSHOWONFULLVIEW );
|
|
//sys.setCMIconColorMode( commandmapIcon, CM_ALLEGIANCE );
|
|
sys.setCMIconSize( commandmapIcon, getFloatKey( "icon_size_cm" ) );
|
|
sys.setCMIconGuiMessage( commandmapIcon, "selectspawn" );
|
|
}
|
|
|
|
void spawn_master::OnGuiMessage( entity p ) {
|
|
if ( getEntityAllegiance( p ) != TA_FRIEND ) {
|
|
return;
|
|
}
|
|
|
|
string message = sys.argv( 0 );
|
|
if ( message == "selectspawn" ) {
|
|
if ( !CanSetSpawn() ) {
|
|
return;
|
|
}
|
|
p.setSpawnPoint( self );
|
|
|
|
if ( p.isLocalPlayer() ) {
|
|
sys.startSoundDirect( getKey( "snd_selected" ), SND_STRUCTURE_ALARM );
|
|
}
|
|
}
|
|
}
|
|
|
|
void spawn_master::ClearCommandmapIcon() {
|
|
if ( commandmapIcon != -1 ) {
|
|
sys.freeCMIcon( self, commandmapIcon );
|
|
commandmapIcon = -1;
|
|
}
|
|
}
|
|
|
|
void spawn_master::ClearCommandmapSelectedIcon() {
|
|
if ( commandmapSelectedIcon != -1 ) {
|
|
sys.freeCMIcon( self, commandmapSelectedIcon );
|
|
commandmapSelectedIcon = -1;
|
|
}
|
|
}
|
|
|
|
void spawn_master::OnSpawnPointSelected( float isDefault ) {
|
|
ClearCommandmapSelectedIcon();
|
|
|
|
commandmapSelectedIcon = sys.allocCMIcon( self, getFloatKey( "icon_sort_selected_cm" ) );
|
|
|
|
if ( isDefault ) {
|
|
sys.setCMIconMaterial( commandmapSelectedIcon, GetMaterial( getKey( "mtr_icon_default" ) ) );
|
|
} else {
|
|
sys.setCMIconMaterial( commandmapSelectedIcon, GetMaterial( getKey( "mtr_icon_selected" ) ) );
|
|
}
|
|
sys.setCMIconFlag( commandmapSelectedIcon, CMF_ONLYSHOWONFULLVIEW );
|
|
sys.setCMIconFlag( commandmapSelectedIcon, CMF_ALWAYSKNOWN );
|
|
sys.setCMIconSize( commandmapSelectedIcon, getFloatKey( "icon_size_cm" ) );
|
|
}
|
|
|
|
void spawn_master::OnSpawnPointDeselected() {
|
|
ClearCommandmapSelectedIcon();
|
|
}
|
|
|
|
void spawn_master::OnHighlight( boolean set ) {
|
|
vector color;
|
|
color_x = 1;
|
|
color_y = 1;
|
|
color_z = 1;
|
|
|
|
if( commandmapHighlightIcon == -1 && set ) {
|
|
commandmapHighlightIcon = sys.allocCMIcon( self, getFloatKey( "icon_sort_cm" ) );
|
|
sys.setCMIconFlag( commandmapHighlightIcon, CMF_ONLYSHOWONFULLVIEW );
|
|
sys.setCMIconDrawMode( commandmapHighlightIcon, DM_CROSSHAIR );
|
|
sys.setCMIconColor( commandmapHighlightIcon, color, 0.5 );
|
|
sys.setCMIconMaterial( commandmapHighlightIcon, GetMaterial( getKey( "mtr_commandmapicon_tracking" ) ) );
|
|
return;
|
|
}
|
|
|
|
if( !set && commandmapHighlightIcon != -1 ) {
|
|
sys.freeCMIcon( self, commandmapHighlightIcon );
|
|
commandmapHighlightIcon = -1;
|
|
}
|
|
}
|
|
|
|
|
|
|
|
object spawn_host {
|
|
void preinit();
|
|
void init();
|
|
void destroy();
|
|
void syncFields();
|
|
|
|
void RemoveThread( float removeTime );
|
|
void Fizzle();
|
|
|
|
void Idle();
|
|
|
|
void vSetOwner( entity o );
|
|
|
|
float GetActivateCode( entity p, float distance );
|
|
|
|
boolean CanSetSpawn();
|
|
|
|
void FreeSelectTask();
|
|
void MakeSelectTask();
|
|
|
|
void CheckContextToolTip( float allegiance, float code, entity p );
|
|
|
|
void SetupCommandmapIcon();
|
|
void ClearCommandmapIcon();
|
|
|
|
// game callbacks
|
|
float OnUpdateCrosshairInfo( entity p );
|
|
float OnActivate( entity p, float distance );
|
|
void OnPlayerSpawned( entity p );
|
|
void OnKilled( entity inflictor, entity attacker, float damage, vector direction, float location );
|
|
|
|
void OnSpawnPointActivate( entity p );
|
|
void OnSpawnPointDeactivate( entity p );
|
|
|
|
void OnSpawnPointSelected( float isDefault );
|
|
void OnSpawnPointDeselected();
|
|
|
|
void OnTimeStartedChanged();
|
|
void OnSpawnerChanged();
|
|
|
|
void vOnLocalTeamChanged();
|
|
void UpdateVisualState();
|
|
|
|
string vGetQuickChatString( entity p );
|
|
|
|
void vOnContextDestroy( entity p );
|
|
|
|
void vSetBody( entity body );
|
|
|
|
void InitDestroyTask();
|
|
void FreeDestroyTask();
|
|
|
|
void CreatedVOThread();
|
|
|
|
entity owner;
|
|
float usedProficiency;
|
|
|
|
entity spawner;
|
|
boolean selectedModel;
|
|
|
|
entity originalBody;
|
|
|
|
boolean expired;
|
|
|
|
task selectTask;
|
|
|
|
float timeStarted;
|
|
|
|
float toolTip_gdf_1;
|
|
float toolTip_gdf_2;
|
|
float toolTip_strogg_use;
|
|
float toolTip_strogg_destroyed;
|
|
float toolTip_strogg_select;
|
|
float toolTip_strogg_already_selected_1;
|
|
float toolTip_strogg_already_selected_2;
|
|
|
|
float lastTooltipTime;
|
|
|
|
float commandmapIcon;
|
|
|
|
task destroyTask;
|
|
boolean spawnerLocal;
|
|
}
|
|
|
|
void spawn_host::preinit() {
|
|
usedProficiency = GetProficiency( getKey( "prof_used" ) );
|
|
timeStarted = -1;
|
|
commandmapIcon = -1;
|
|
|
|
toolTip_gdf_1 = GetToolTip( getKey( "tt_intro_gdf_1" ) );
|
|
toolTip_gdf_2 = GetToolTip( getKey( "tt_intro_gdf_2" ) );
|
|
toolTip_strogg_use = GetToolTip( getKey( "tt_intro_strogg_use" ) );
|
|
toolTip_strogg_destroyed = GetToolTip( getKey( "tt_strogg_destroyed" ) );
|
|
toolTip_strogg_select = GetToolTip( getKey( "tt_strogg_select" ) );
|
|
toolTip_strogg_already_selected_1 = GetToolTip( getKey( "tt_strogg_already_selected_1" ) );
|
|
toolTip_strogg_already_selected_2 = GetToolTip( getKey( "tt_strogg_already_selected_2" ) );
|
|
|
|
thread CreatedVOThread();
|
|
}
|
|
|
|
void spawn_host::init() {
|
|
|
|
if ( !sys.isClient() ) {
|
|
owner.setPlayerSpawnHostState( self, false );
|
|
|
|
if ( originalBody != $null_entity ) {
|
|
originalBody.vCancel();
|
|
}
|
|
}
|
|
|
|
if ( !sys.isClient() ) {
|
|
timeStarted = sys.getTime();
|
|
setState( "Idle" );
|
|
}
|
|
}
|
|
|
|
void spawn_host::destroy() {
|
|
if ( !sys.isClient() ) {
|
|
if ( owner != $null_entity ) {
|
|
owner.setPlayerSpawnHostState( self, true );
|
|
}
|
|
}
|
|
|
|
ClearCommandmapIcon();
|
|
FreeDestroyTask();
|
|
FreeSelectTask();
|
|
|
|
if ( spawner != $null_entity ) {
|
|
spawner.setSpawnPoint( $null_entity );
|
|
}
|
|
}
|
|
|
|
void spawn_host::syncFields() {
|
|
syncBroadcast( "spawner" );
|
|
syncCallback( "spawner", "OnSpawnerChanged" );
|
|
|
|
syncBroadcast( "timeStarted" );
|
|
syncCallback( "timeStarted", "OnTimeStartedChanged" );
|
|
}
|
|
|
|
void spawn_host::FreeSelectTask() {
|
|
if ( selectTask == $null ) {
|
|
return;
|
|
}
|
|
selectTask.free();
|
|
selectTask = $null;
|
|
}
|
|
|
|
void spawn_host::MakeSelectTask() {
|
|
if ( selectTask != $null ) {
|
|
return;
|
|
}
|
|
selectTask = taskManager.allocEntityTask( GetPlayerTask( getKey( "task_select" ) ), self );
|
|
}
|
|
|
|
void spawn_host::OnTimeStartedChanged() {
|
|
setState( "Idle" );
|
|
}
|
|
|
|
void spawn_host::OnSpawnerChanged() {
|
|
if ( spawner != $null_entity ) {
|
|
spawnerLocal = false;
|
|
if ( spawner == sys.getLocalPlayer() ) {
|
|
spawnerLocal = true;
|
|
}
|
|
}
|
|
UpdateVisualState();
|
|
}
|
|
|
|
void spawn_host::Idle() {
|
|
setContents( CONTENTS_RENDERMODEL );
|
|
setClipmask( 0 );
|
|
|
|
UpdateVisualState();
|
|
|
|
float timeLeft = ( sys.getTime() - timeStarted ) + 60.f;
|
|
if ( timeLeft > 0.f ) {
|
|
sys.wait( timeLeft );
|
|
}
|
|
|
|
expired = true;
|
|
|
|
if ( spawner == $null_entity ) {
|
|
Fizzle();
|
|
}
|
|
}
|
|
|
|
void spawn_host::OnPlayerSpawned( entity p ) {
|
|
if ( owner != $null_entity ) {
|
|
owner.giveProficiency( usedProficiency, 1.f, $null, "spawnhost used" );
|
|
}
|
|
|
|
p.vSetSpawnHostSpawned();
|
|
|
|
p.setSpawnPoint( $null_entity );
|
|
|
|
remove();
|
|
}
|
|
|
|
void spawn_host::OnKilled( entity inflictor, entity attacker, float damage, vector direction, float location ) {
|
|
Fizzle();
|
|
|
|
player playerAttacker = attacker;
|
|
if ( playerAttacker != $null_entity ) {
|
|
team_base team = playerAttacker.getGameTeam();
|
|
if ( team != $null ) {
|
|
string statName = team.getName() + "_spawnhosts_destroyed";
|
|
sys.increaseStatInt( sys.allocStatInt( statName ), playerAttacker.getEntityNumber(), 1 );
|
|
}
|
|
}
|
|
}
|
|
|
|
void spawn_host::vSetOwner( entity o ) {
|
|
owner = o;
|
|
}
|
|
|
|
float spawn_host::GetActivateCode( entity p, float distance ) {
|
|
if ( p.getViewingEntity() != p ) {
|
|
return AK_NONE;
|
|
}
|
|
|
|
if ( p.getHealth() <= 0 ) {
|
|
return AK_NONE;
|
|
}
|
|
|
|
if ( distance > DISTANCE_FOR_ACTION ) {
|
|
return AK_NONE;
|
|
}
|
|
|
|
if ( p.getGameTeam() == getGameTeam() ) {
|
|
if ( spawner != $null_entity ) {
|
|
return AK_NONE;
|
|
}
|
|
} else {
|
|
return AK_DISARM_SPAWNHOST;
|
|
}
|
|
|
|
return AK_USE;
|
|
}
|
|
|
|
float spawn_host::OnUpdateCrosshairInfo( entity p ) {
|
|
if ( !sys.doClientSideStuff() ) {
|
|
return 1.f;
|
|
}
|
|
|
|
float allegiance = getEntityAllegiance( p );
|
|
vector color = GetAllegianceColor( allegiance );
|
|
float distance = chGetDistance();
|
|
float range = InchesToMetres( distance );
|
|
|
|
chSetNumLines( 0 );
|
|
float index;
|
|
|
|
if ( p != $null_entity ) {
|
|
// see if theres a valid action to perform
|
|
float code = GetActivateCode( p, distance );
|
|
if ( code != AK_NONE && p.vHasActionItem( code ) ) {
|
|
index = chAddLine();
|
|
chSetLineMaterial( index, p.vGetActionIcon( code ) );
|
|
chSetLineType( index, CI_IMAGE );
|
|
chSetLineSize( index, 64, 64 );
|
|
chSetLineColor( index, g_colorWhite, 0.9f );
|
|
|
|
CheckContextToolTip( allegiance, code, p );
|
|
}
|
|
}
|
|
|
|
index = chAddLine();
|
|
chSetLineTextIndex( index, g_locStr_SpawnHost );
|
|
chSetLineColor( index, color, 1.f );
|
|
chSetLineType( index, CI_TEXT );
|
|
chSetLineSize( index, 0, 0 );
|
|
|
|
index = chAddLine();
|
|
chSetLineColor( index, color, 0.5f );
|
|
chSetLineType( index, CI_BAR );
|
|
chSetLineFraction( index, getHealth() / getMaxHealth() );
|
|
chSetLineSize( index, 75.f, CROSSHAIR_INFO_BAR_HEIGHT );
|
|
|
|
return 1.f;
|
|
}
|
|
|
|
float spawn_host::OnActivate( entity p, float distance ) {
|
|
if ( distance > 128.f ) {
|
|
return 0.f;
|
|
}
|
|
|
|
if ( p.getViewingEntity() != p ) {
|
|
return 0.0f;
|
|
}
|
|
|
|
if ( p.getHealth() <= 0.f ) {
|
|
return 0.f;
|
|
}
|
|
|
|
if ( p.getGameTeam() == gdfTeam ) {
|
|
float code = GetActivateCode( p, distance );
|
|
if ( code != AK_NONE ) {
|
|
p.vSelectActionItem( code );
|
|
}
|
|
|
|
return 1.0f;
|
|
}
|
|
|
|
if ( getEntityAllegiance( p ) != TA_FRIEND ) {
|
|
return 0.0f;
|
|
}
|
|
|
|
if ( spawner != $null_entity ) {
|
|
if( p.isLocalPlayer() ) {
|
|
if ( !p.isToolTipPlaying() ) {
|
|
if ( p != spawner ) {
|
|
p.sendToolTip( toolTip_strogg_already_selected_1 );
|
|
} else {
|
|
p.sendToolTip( toolTip_strogg_already_selected_2 );
|
|
}
|
|
}
|
|
}
|
|
return 0.0f;
|
|
}
|
|
|
|
p.setSpawnPoint( self );
|
|
if( p.isLocalPlayer() ) {
|
|
if ( !p.isToolTipPlaying() ) {
|
|
p.sendToolTip( toolTip_strogg_select );
|
|
}
|
|
}
|
|
|
|
return 1.f;
|
|
}
|
|
|
|
boolean spawn_host::CanSetSpawn() {
|
|
if ( spawner == $null_entity ) {
|
|
return true;
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
void spawn_host::Fizzle() {
|
|
playEffect( "fx_fizzle", "", 0 );
|
|
|
|
if ( spawnerLocal ) {
|
|
entity p = sys.getLocalPlayer();
|
|
p.sendToolTip( toolTip_strogg_destroyed );
|
|
}
|
|
|
|
if ( spawner != $null_entity ) {
|
|
spawner.setSpawnPoint( $null_entity );
|
|
}
|
|
|
|
if ( !sys.isClient() ) {
|
|
thread RemoveThread( 0.5 );
|
|
}
|
|
}
|
|
|
|
void spawn_host::RemoveThread( float removeTime ) {
|
|
sys.wait( removeTime );
|
|
remove();
|
|
}
|
|
|
|
void spawn_host::CheckContextToolTip( float allegiance, float code, entity p ) {
|
|
team_base team;
|
|
|
|
if ( p.isLocalPlayer() ) {
|
|
if ( !p.isToolTipPlaying() ) {
|
|
float time = sys.getTime();
|
|
if ( time - p.getCrosshairStartTime() > 0.5f ) {
|
|
if ( time - lastTooltipTime > 5.0f ) {
|
|
if ( allegiance == TA_FRIEND ) {
|
|
if ( CanSetSpawn() ) {
|
|
p.sendToolTip( toolTip_strogg_use );
|
|
}
|
|
} else {
|
|
if ( p.getCurrentWeapon() != p.vGetActionItem( code ) ) {
|
|
p.sendToolTip( toolTip_gdf_1 );
|
|
} else {
|
|
p.sendToolTip( toolTip_gdf_2 );
|
|
}
|
|
}
|
|
lastTooltipTime = time;
|
|
}
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
void spawn_host::OnSpawnPointActivate( entity p ) {
|
|
if ( spawner != $null_entity ) {
|
|
sys.warning( "spawn_host::OnSpawnPointActivate Multiple Spawners Set" );
|
|
}
|
|
|
|
spawner = p;
|
|
|
|
OnSpawnerChanged();
|
|
}
|
|
|
|
void spawn_host::OnSpawnPointDeactivate( entity p ) {
|
|
if ( spawner == p ) {
|
|
spawner = $null_entity;
|
|
|
|
if ( expired ) {
|
|
Fizzle();
|
|
}
|
|
|
|
OnSpawnerChanged();
|
|
}
|
|
}
|
|
|
|
void spawn_host::vOnLocalTeamChanged() {
|
|
UpdateVisualState();
|
|
}
|
|
|
|
void spawn_host::UpdateVisualState() {
|
|
if ( !sys.isClient() ) {
|
|
if ( spawner == $null_entity ) {
|
|
MakeSelectTask();
|
|
} else {
|
|
FreeSelectTask();
|
|
}
|
|
}
|
|
|
|
if ( spawner == $null_entity ) {
|
|
if ( selectedModel ) {
|
|
setModel( getKey( "model" ) );
|
|
selectedModel = false;
|
|
}
|
|
} else {
|
|
if ( !selectedModel ) {
|
|
setModel( getKey( "model_selected" ) );
|
|
selectedModel = true;
|
|
}
|
|
}
|
|
}
|
|
|
|
void spawn_host::SetupCommandmapIcon() {
|
|
ClearCommandmapIcon();
|
|
|
|
commandmapIcon = sys.allocCMIcon( self, getFloatKey( "icon_sort_cm" ) );
|
|
|
|
team_base team = getGameTeam();
|
|
|
|
sys.setCMIconMaterial( commandmapIcon, GetMaterial( getKey( "mtr_icon_" + team.getName() ) ) );
|
|
sys.setCMIconFlag( commandmapIcon, CMF_ALWAYSKNOWN );
|
|
sys.setCMIconFlag( commandmapIcon, CMF_ONLYSHOWONFULLVIEW );
|
|
sys.setCMIconColorMode( commandmapIcon, CM_ALLEGIANCE );
|
|
sys.setCMIconSize( commandmapIcon, getFloatKey( "icon_size_cm" ) );
|
|
}
|
|
|
|
void spawn_host::ClearCommandmapIcon() {
|
|
if ( commandmapIcon != -1 ) {
|
|
sys.freeCMIcon( self, commandmapIcon );
|
|
commandmapIcon = -1;
|
|
}
|
|
}
|
|
|
|
void spawn_host::OnSpawnPointSelected( float isDefault ) {
|
|
SetupCommandmapIcon();
|
|
|
|
sys.setGUIFloat( GUI_GLOBALS_HANDLE, "gameHud.spawnHostActive", 1 );
|
|
}
|
|
|
|
void spawn_host::OnSpawnPointDeselected() {
|
|
ClearCommandmapIcon();
|
|
|
|
sys.setGUIFloat( GUI_GLOBALS_HANDLE, "gameHud.spawnHostActive", 0 );
|
|
}
|
|
|
|
string spawn_host::vGetQuickChatString( entity p ) {
|
|
if ( getEntityAllegiance( p ) == TA_FRIEND ) {
|
|
return getKey( "contextmenu_quickchat_friendly" );
|
|
}
|
|
return getKey( "contextmenu_quickchat_enemy" );
|
|
}
|
|
|
|
void spawn_host::vOnContextDestroy( entity p ) {
|
|
if ( getEntityAllegiance( p ) != TA_FRIEND ) {
|
|
InitDestroyTask();
|
|
}
|
|
}
|
|
|
|
void spawn_host::FreeDestroyTask() {
|
|
if ( destroyTask != $null ) {
|
|
destroyTask.free();
|
|
}
|
|
}
|
|
|
|
void spawn_host::InitDestroyTask() {
|
|
if ( destroyTask != $null ) {
|
|
return;
|
|
}
|
|
|
|
float taskHandle = GetPlayerTask( getKey( "task_destroy" ) );
|
|
if ( taskHandle != -1 ) {
|
|
destroyTask = taskManager.allocEntityTask( taskHandle, self );
|
|
}
|
|
}
|
|
|
|
void spawn_host::CreatedVOThread() {
|
|
sys.wait( getFloatKey( "vo_created_delay" ) );
|
|
if ( spawner == $null_entity ) {
|
|
objManager.PlaySoundRanged( getKey( "snd_spawn_created" ), stroggTeam, getWorldOrigin(), 2048.f );
|
|
objManager.CPrintEventRanged( sys.localizeString( "game/misc/spawn_host_created" ), stroggTeam, getWorldOrigin(), 2048.f );
|
|
}
|
|
}
|
|
|
|
void spawn_host::vSetBody( entity body ) {
|
|
originalBody = body;
|
|
}
|