141 lines
14 KiB
Plaintext
141 lines
14 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
|
|
#using scripts\shared\clientfield_shared;
|
|
#using scripts\shared\system_shared;
|
|
#using scripts\shared\util_shared;
|
|
|
|
|
|
|
|
|
|
#using scripts\mp\_util;
|
|
|
|
|
|
|
|
|
|
#namespace remotemissile;
|
|
|
|
function autoexec __init__sytem__() { system::register("remotemissile",&__init__,undefined,undefined); }
|
|
|
|
function __init__()
|
|
{
|
|
clientfield::register( "missile", "remote_missile_bomblet_fired", 1, 1, "int",&bomblets_deployed, !true, !true );
|
|
clientfield::register( "missile", "remote_missile_fired", 1, 2, "int",&missile_fired, !true, !true );
|
|
}
|
|
|
|
function missile_fired( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
if( newVal == ( 1 ) )
|
|
{
|
|
player = getlocalplayer( localClientNum );
|
|
owner = self GetOwner( localClientNum );
|
|
|
|
clientObjID = util::getNextObjID( localClientNum );
|
|
|
|
objective_add( localClientNum, clientObjID, "invisible", self.origin, self.team, owner );
|
|
Objective_OnEntity( localClientNum, clientObjID, self, true, false, true );
|
|
self.hellfireObjId = clientObjID;
|
|
self thread destruction_watcher( localClientNum, clientObjID );
|
|
|
|
|
|
objective_state( localClientNum, clientObjID, "active" );
|
|
if( player hasPerk( localClientNum, "specialty_showenemyequipment" ) || self.team == player.team )
|
|
{
|
|
objective_SetIcon( localClientNum, clientObjID, "remotemissile_target" );
|
|
objective_SetIconSize( localClientNum, clientObjID, 50 );
|
|
}
|
|
|
|
self thread hud_update( localClientNum );
|
|
}
|
|
else if ( newVal == ( 2 ) )
|
|
{
|
|
if( isdefined( self.hellfireObjId ) )
|
|
{
|
|
self notify( "hellfire_detonated" );
|
|
objective_delete( localClientNum, self.hellfireObjId );
|
|
util::releaseObjID( localClientNum, self.hellfireObjId );
|
|
}
|
|
}
|
|
else
|
|
self notify( "cleanup_objectives" );
|
|
|
|
|
|
ammo_ui_data_model = GetUIModel( GetUIModelForController( localClientNum ), "vehicle.ammo" );
|
|
if ( isdefined( ammo_ui_data_model ) )
|
|
SetUIModelValue( ammo_ui_data_model, 1 );
|
|
}
|
|
|
|
function bomblets_deployed( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
if ( bNewEnt && oldVal == newVal )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if( newVal == ( 1 ) )
|
|
{
|
|
player = getlocalplayer( localClientNum );
|
|
owner = self GetOwner( localClientNum );
|
|
|
|
clientObjID = util::getNextObjID( localClientNum );
|
|
|
|
objective_add( localClientNum, clientObjID, "invisible", self.origin, self.team, owner );
|
|
Objective_OnEntity( localClientNum, clientObjID, self, true, false, true );
|
|
self thread destruction_watcher( localClientNum, clientObjID );
|
|
|
|
|
|
objective_state( localClientNum, clientObjID, "active" );
|
|
if( player hasPerk( localClientNum, "specialty_showenemyequipment" ) || player.team == self.team )
|
|
objective_SetIcon( localClientNum, clientObjID, "remotemissile_target" );
|
|
}
|
|
else
|
|
self notify( "cleanup_objectives" );
|
|
|
|
ammo_ui_data_model = GetUIModel( GetUIModelForController( localClientNum ), "vehicle.ammo" );
|
|
if ( isdefined( ammo_ui_data_model ) )
|
|
SetUIModelValue( ammo_ui_data_model, 0 );
|
|
}
|
|
|
|
function destruction_watcher( localClientNum, clientObjID )
|
|
{
|
|
self util::waittill_any( "death", "entityshutdown", "cleanup_objectives" );
|
|
wait( 0.1 );
|
|
if( isdefined( clientObjID ) )
|
|
{
|
|
objective_delete( localClientNum, clientObjID );
|
|
util::releaseObjID( localClientNum, clientObjID );
|
|
}
|
|
}
|
|
|
|
function hud_update( localClientNum )
|
|
{
|
|
self endon( "entityshutdown" );
|
|
self notify( "remote_missile_singeton");
|
|
self endon( "remote_missile_singeton");
|
|
missile = self;
|
|
|
|
altitude_ui_data_model = GetUIModel( GetUIModelForController( localClientNum ), "vehicle.altitude" );
|
|
speed_ui_data_model = GetUIModel( GetUIModelForController( localClientNum ), "vehicle.speed" );
|
|
|
|
if( !isdefined( altitude_ui_data_model ) || !isdefined( speed_ui_data_model ) )
|
|
return;
|
|
|
|
prev_z = missile.origin[2];
|
|
|
|
fps = 20.0;
|
|
delay = 1.0 / fps;
|
|
|
|
while( 1 )
|
|
{
|
|
cur_z = missile.origin[2];
|
|
SetUIModelValue( altitude_ui_data_model, cur_z );
|
|
|
|
dist = ( prev_z - cur_z ) * fps;
|
|
val = dist / 17.6;
|
|
SetUIModelValue( speed_ui_data_model, val );
|
|
|
|
prev_z = cur_z;
|
|
|
|
wait ( delay );
|
|
}
|
|
}
|