278 lines
16 KiB
Plaintext
278 lines
16 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
|
|
#using scripts\shared\callbacks_shared;
|
|
#using scripts\shared\clientfield_shared;
|
|
#using scripts\shared\flagsys_shared;
|
|
#using scripts\shared\visionset_mgr_shared;
|
|
#using scripts\shared\spawner_shared;
|
|
#using scripts\shared\system_shared;
|
|
#using scripts\shared\util_shared;
|
|
|
|
#using scripts\shared\abilities\_ability_player;
|
|
#using scripts\shared\abilities\_ability_util;
|
|
#using scripts\shared\abilities\gadgets\_gadget_camo;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
function autoexec __init__sytem__() { system::register("gadget_vision_pulse",&__init__,undefined,undefined); }
|
|
|
|
function __init__()
|
|
{
|
|
ability_player::register_gadget_activation_callbacks( 6, &gadget_vision_pulse_on, &gadget_vision_pulse_off );
|
|
ability_player::register_gadget_possession_callbacks( 6, &gadget_vision_pulse_on_give, &gadget_vision_pulse_on_take );
|
|
ability_player::register_gadget_flicker_callbacks( 6, &gadget_vision_pulse_on_flicker );
|
|
ability_player::register_gadget_is_inuse_callbacks( 6, &gadget_vision_pulse_is_inuse );
|
|
ability_player::register_gadget_is_flickering_callbacks( 6, &gadget_vision_pulse_is_flickering );
|
|
|
|
callback::on_connect( &gadget_vision_pulse_on_connect );
|
|
callback::on_spawned( &gadget_vision_pulse_on_spawn );
|
|
|
|
clientfield::register( "toplayer", "vision_pulse_active" , 1, 1, "int" );
|
|
|
|
if ( !IsDefined( level.vsmgr_prio_visionset_visionpulse ) )
|
|
{
|
|
level.vsmgr_prio_visionset_visionpulse = 61;
|
|
}
|
|
|
|
visionset_mgr::register_info( "visionset", "vision_pulse", 1, level.vsmgr_prio_visionset_visionpulse, 12, true, &visionset_mgr::ramp_in_out_thread_per_player_death_shutdown, false );
|
|
}
|
|
|
|
function gadget_vision_pulse_is_inuse( slot )
|
|
{
|
|
// returns true when the gadget is on
|
|
return self flagsys::get( "gadget_vision_pulse_on" );
|
|
}
|
|
|
|
function gadget_vision_pulse_is_flickering( slot )
|
|
{
|
|
// returns true when the gadget is flickering
|
|
return self GadgetFlickering( slot );
|
|
}
|
|
|
|
function gadget_vision_pulse_on_flicker( slot, weapon )
|
|
{
|
|
// excuted when the gadget flickers
|
|
self thread gadget_vision_pulse_flicker( slot, weapon );
|
|
}
|
|
|
|
function gadget_vision_pulse_on_give( slot, weapon )
|
|
{
|
|
// executed when gadget is added to the players inventory
|
|
}
|
|
|
|
function gadget_vision_pulse_on_take( slot, weapon )
|
|
{
|
|
// executed when gadget is removed from the players inventory
|
|
}
|
|
|
|
//self is the player
|
|
function gadget_vision_pulse_on_connect()
|
|
{
|
|
// setup up stuff on player connect
|
|
}
|
|
|
|
function gadget_vision_pulse_on_spawn()
|
|
{
|
|
self.visionPulseActivateTime = 0;
|
|
self.visionPulseArray = [];
|
|
self.visionPulseOrigin = undefined;
|
|
self.visionPulseOriginArray = [];
|
|
|
|
if( isDefined( self._pulse_ent ) )
|
|
{
|
|
self._pulse_ent delete();
|
|
}
|
|
}
|
|
|
|
function gadget_vision_pulse_ramp_hold_func()
|
|
{
|
|
self util::waittill_any_timeout( ( 4000 / 1000 + 1 ), "ramp_out_visionset" );
|
|
}
|
|
|
|
function gadget_vision_pulse_watch_death()
|
|
{
|
|
self notify ( "vision_pulse_watch_death" );
|
|
self endon ( "vision_pulse_watch_death" );
|
|
self endon ( "disconnect" );
|
|
self waittill ( "death" );
|
|
visionset_mgr::deactivate( "visionset", "vision_pulse", self );
|
|
if( isDefined( self._pulse_ent ) )
|
|
{
|
|
self._pulse_ent delete();
|
|
}
|
|
}
|
|
|
|
function gadget_vision_pulse_watch_emp()
|
|
{
|
|
self notify ( "vision_pulse_watch_emp" );
|
|
self endon ( "vision_pulse_watch_emp" );
|
|
self endon ( "disconnect" );
|
|
|
|
while( 1 )
|
|
{
|
|
if( self IsEMPJammed() )
|
|
{
|
|
visionset_mgr::deactivate( "visionset", "vision_pulse", self );
|
|
self notify ( "emp_vp_jammed" );
|
|
break;
|
|
}
|
|
{wait(.05);};
|
|
}
|
|
|
|
if( isDefined( self._pulse_ent ) )
|
|
{
|
|
self._pulse_ent delete();
|
|
}
|
|
}
|
|
|
|
function gadget_vision_pulse_on( slot, weapon )
|
|
{
|
|
if ( IsDefined( self._pulse_ent ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
// excecutes when the gadget is turned on
|
|
self flagsys::set( "gadget_vision_pulse_on" );
|
|
|
|
self thread gadget_vision_pulse_start( slot, weapon );
|
|
visionset_mgr::activate( "visionset", "vision_pulse", self, ( .25 ), &gadget_vision_pulse_ramp_hold_func, ( .75 ) );
|
|
self thread gadget_vision_pulse_watch_death();
|
|
self thread gadget_vision_pulse_watch_emp();
|
|
self clientfield::set_to_player( "vision_pulse_active", 1 );
|
|
}
|
|
|
|
function gadget_vision_pulse_off( slot, weapon )
|
|
{
|
|
// excecutes when the gadget is turned off`
|
|
self flagsys::clear( "gadget_vision_pulse_on" );
|
|
|
|
self clientfield::set_to_player( "vision_pulse_active", 0 );
|
|
}
|
|
|
|
function gadget_vision_pulse_start( slot, weapon )
|
|
{
|
|
self endon ( "disconnect" );
|
|
self endon ( "death" );
|
|
self endon ( "emp_vp_jammed" );
|
|
|
|
wait 0.1;
|
|
|
|
if ( IsDefined( self._pulse_ent ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
self._pulse_ent = spawn( "script_model", self.origin );
|
|
self._pulse_ent SetModel( "tag_origin" );
|
|
|
|
self GadgetSetEntity( slot, self._pulse_ent );
|
|
self GadgetSetActivateTime( slot, GetTime() );
|
|
|
|
self set_gadget_vision_pulse_status( "Activated" );
|
|
//self PlaySound ( "gdt_vision_pulse" );
|
|
self.visionPulseActivateTime = getTime();
|
|
enemyArray = level.players;
|
|
|
|
gadget = GetWeapon( "gadget_vision_pulse" );
|
|
visionPulseArray = ArraySort( enemyArray, self._pulse_ent.origin, true, undefined, gadget.gadget_pulse_max_range );
|
|
self.visionPulseOrigin = self._pulse_ent.origin;
|
|
self.visionPulseArray = [];
|
|
self.visionPulseOriginArray = [];
|
|
spottedEnemy = false;
|
|
self.visionPulseSpottedEnemy = [];
|
|
self.visionPulseSpottedEnemyTime = getTime();
|
|
for ( i = 0; i < visionPulseArray.size; i++ )
|
|
{
|
|
if ( visionPulseArray[i] _gadget_camo::camo_is_inuse() == false )
|
|
{
|
|
self.visionPulseArray[self.visionPulseArray.size] = visionPulseArray[i];
|
|
self.visionPulseOriginArray[self.visionPulseOriginArray.size] = visionPulseArray[i].origin;
|
|
|
|
if ( IsAlive( visionPulseArray[i] ) && visionPulseArray[i].team != self.team )
|
|
{
|
|
spottedEnemy = true;
|
|
self.visionPulseSpottedEnemy[self.visionPulseSpottedEnemy.size] = visionPulseArray[i];
|
|
}
|
|
}
|
|
}
|
|
|
|
self wait_until_is_done( slot, self._gadgets_player[slot].gadget_pulse_duration );
|
|
|
|
if ( spottedEnemy && isdefined( level.playGadgetSuccess ) )
|
|
{
|
|
self [[ level.playGadgetSuccess ]]( weapon );
|
|
}
|
|
else
|
|
{
|
|
self playsoundtoplayer( "gdt_vision_pulse_no_hits", self );
|
|
self notify( "ramp_out_visionset" );
|
|
}
|
|
|
|
self set_gadget_vision_pulse_status( "Done" );
|
|
|
|
self._pulse_ent delete();
|
|
}
|
|
|
|
function wait_until_is_done( slot, timePulse )
|
|
{
|
|
startTime = GetTime();
|
|
|
|
while ( 1 )
|
|
{
|
|
wait 0.25;
|
|
|
|
currentTime = GetTime();
|
|
if ( currentTime > startTime + timePulse )
|
|
{
|
|
return;
|
|
}
|
|
}
|
|
}
|
|
|
|
function gadget_vision_pulse_flicker( slot, weapon )
|
|
{
|
|
self endon( "disconnect" );
|
|
|
|
time = GetTime();
|
|
|
|
if ( !self gadget_vision_pulse_is_inuse( slot ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
eventTime = self._gadgets_player[slot].gadget_flickertime;
|
|
|
|
self set_gadget_vision_pulse_status( "^1" + "Flickering.", eventTime );
|
|
|
|
while( 1 )
|
|
{
|
|
if ( !self GadgetFlickering( slot ) )
|
|
{
|
|
set_gadget_vision_pulse_status( "^2" + "Normal" );
|
|
return;
|
|
}
|
|
|
|
wait( 0.25 );
|
|
}
|
|
}
|
|
|
|
|
|
function set_gadget_vision_pulse_status( status, time )
|
|
{
|
|
timeStr = "";
|
|
|
|
if ( IsDefined( time ) )
|
|
{
|
|
timeStr = "^3" + ", time: " + time;
|
|
}
|
|
|
|
if ( GetDvarInt( "scr_cpower_debug_prints" ) > 0 )
|
|
self IPrintlnBold( "Vision Pulse:" + status + timeStr );
|
|
} |