362 lines
18 KiB
Plaintext
362 lines
18 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
|
|
#using scripts\shared\array_shared;
|
|
#using scripts\shared\audio_shared;
|
|
#using scripts\shared\callbacks_shared;
|
|
#using scripts\shared\clientfield_shared;
|
|
#using scripts\shared\duplicaterender_mgr;
|
|
#using scripts\shared\filter_shared;
|
|
#using scripts\shared\util_shared;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#using scripts\shared\system_shared;
|
|
|
|
#precache( "client_fx", "weapon/fx_equip_light_os" );
|
|
|
|
#namespace weaponobjects;
|
|
|
|
function init_shared()
|
|
{
|
|
callback::on_localplayer_spawned( &on_localplayer_spawned );
|
|
|
|
clientfield::register( "toplayer", "proximity_alarm", 1, 2, "int", &proximity_alarm_changed, !true, true );
|
|
|
|
clientfield::register( "missile", "retrievable", 1, 1, "int", &retrievable_changed, !true, true );
|
|
clientfield::register( "scriptmover", "retrievable", 1, 1, "int", &retrievable_changed, !true, !true );
|
|
clientfield::register( "missile", "enemyequip", 1, 2, "int", &enemyequip_changed, !true, true );
|
|
clientfield::register( "scriptmover", "enemyequip", 1, 2, "int", &enemyequip_changed, !true, !true );
|
|
clientfield::register( "missile", "teamequip", 1, 1, "int", &teamequip_changed, !true, true );
|
|
|
|
level._effect[ "powerLight" ] = "weapon/fx_equip_light_os";
|
|
|
|
if(!isdefined(level.retrievable))level.retrievable=[];
|
|
if(!isdefined(level.enemyequip))level.enemyequip=[];
|
|
}
|
|
|
|
function on_localplayer_spawned( local_client_num )
|
|
{
|
|
if( self != GetLocalPlayer( local_client_num ) )
|
|
return;
|
|
|
|
self thread watch_perks_changed(local_client_num);
|
|
|
|
self thread watch_killstreak_tap_activation( local_client_num );
|
|
}
|
|
|
|
function watch_killstreak_tap_activation( local_client_num )
|
|
{
|
|
self notify( "watch_killstreak_tap_activation" );
|
|
self endon( "watch_killstreak_tap_activation" );
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
self endon( "entityshutdown" );
|
|
|
|
while ( IsDefined( self ) )
|
|
{
|
|
self waittill( "notetrack", note );
|
|
if ( note == "activate_datapad" )
|
|
{
|
|
uimodel = CreateUIModel( GetUIModelForController( local_client_num ), "hudItems.killstreakActivated" );
|
|
SetUIModelValue( uimodel, 1 );
|
|
}
|
|
|
|
if ( note == "deactivate_datapad" )
|
|
{
|
|
uimodel = CreateUIModel( GetUIModelForController( local_client_num ), "hudItems.killstreakActivated" );
|
|
SetUIModelValue( uimodel, 0 );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function proximity_alarm_changed( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
update_sound( local_client_num, bNewEnt, newVal, oldVal );
|
|
}
|
|
|
|
function update_sound( local_client_num, bNewEnt, newVal, oldVal )
|
|
{
|
|
if ( newVal == 2 )
|
|
{
|
|
if ( !IsDefined( self._proximity_alarm_snd_ent ) )
|
|
{
|
|
self._proximity_alarm_snd_ent = Spawn( local_client_num, self.origin, "script_origin" );
|
|
self thread sndProxAlert_EntCleanup(local_client_num, self._proximity_alarm_snd_ent);
|
|
}
|
|
|
|
playsound( local_client_num, "uin_c4_proximity_alarm_start", (0,0,0) );
|
|
self._proximity_alarm_snd_ent PlayLoopSound( "uin_c4_proximity_alarm_loop", .1 );
|
|
}
|
|
else if ( newVal == 1 )
|
|
{
|
|
//playsound( local_client_num, "uin_c4_proximity_alarm_deploy", (0,0,0) );
|
|
}
|
|
else if( newVal == 0 && isdefined( oldVal ) && oldVal != newVal )
|
|
{
|
|
playsound( local_client_num, "uin_c4_proximity_alarm_stop", (0,0,0) );
|
|
if ( IsDefined( self._proximity_alarm_snd_ent ) )
|
|
{
|
|
self._proximity_alarm_snd_ent StopAllLoopSounds( 0.5 );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
function teamequip_changed( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
self updateTeamEquipment( local_client_num, newVal );
|
|
}
|
|
|
|
function updateTeamEquipment( local_client_num, newVal )
|
|
{
|
|
self checkTeamEquipment( local_client_num );
|
|
}
|
|
|
|
function retrievable_changed( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
if ( isdefined( level.retrievableChangedFunc ) )
|
|
{
|
|
self [[ level.retrievableChangedFunc ]]( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump );
|
|
}
|
|
else
|
|
{
|
|
self util::add_remove_list( level.retrievable, newVal );
|
|
|
|
self updateRetrievable( local_client_num, newVal );
|
|
}
|
|
}
|
|
|
|
function updateRetrievable( local_client_num, newVal )
|
|
{
|
|
if ( IsDefined(self.owner) && self.owner == getlocalplayer( local_client_num ) )
|
|
{
|
|
self duplicate_render::set_item_retrievable( local_client_num, newVal );
|
|
}
|
|
else
|
|
{
|
|
if ( IsDefined(self.currentdrfilter))
|
|
self duplicate_render::set_item_retrievable( local_client_num, false );
|
|
}
|
|
}
|
|
|
|
function enemyequip_changed( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
if ( isdefined( level.enemyEquipChangedFunc ) )
|
|
{
|
|
self [[ level.enemyEquipChangedFunc ]]( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump );
|
|
}
|
|
else
|
|
{
|
|
newVal = ( newVal != 0 );
|
|
|
|
self util::add_remove_list( level.enemyequip, newVal );
|
|
|
|
self updateEnemyEquipment( local_client_num, newVal );
|
|
}
|
|
}
|
|
|
|
function updateEnemyEquipment( local_client_num, newVal )
|
|
{
|
|
watcher = GetLocalPlayer( local_client_num );
|
|
friend = self util::friend_not_foe( local_client_num, true );
|
|
|
|
if ( !friend && IsDefined( watcher ) && watcher HasPerk( local_client_num, "specialty_showenemyequipment" ) )
|
|
{
|
|
self duplicate_render::set_item_friendly_equipment( local_client_num, false );
|
|
self duplicate_render::set_item_enemy_equipment( local_client_num, newVal );
|
|
}
|
|
else if( friend && isDefined( watcher ) && watcher duplicate_render::show_friendly_outlines(local_client_num) )
|
|
{
|
|
self duplicate_render::set_item_enemy_equipment( local_client_num, false );
|
|
self duplicate_render::set_item_friendly_equipment( local_client_num, newVal );
|
|
}
|
|
else
|
|
{
|
|
self duplicate_render::set_item_enemy_equipment( local_client_num, false );
|
|
self duplicate_render::set_item_friendly_equipment( local_client_num, false );
|
|
}
|
|
}
|
|
|
|
function equipmentDR( local_client_num )
|
|
{
|
|
}
|
|
|
|
function watch_perks_changed(local_client_num)
|
|
{
|
|
self notify( "watch_perks_changed" );
|
|
self endon( "watch_perks_changed" );
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
self endon( "entityshutdown" );
|
|
|
|
while(IsDefined(self))
|
|
{
|
|
{wait(.016);};
|
|
util::clean_deleted(level.retrievable);
|
|
util::clean_deleted(level.enemyequip);
|
|
array::thread_all( level.retrievable, &updateRetrievable, local_client_num, 1 );
|
|
array::thread_all( level.enemyequip, &updateEnemyEquipment, local_client_num, 1 );
|
|
self waittill("perks_changed");
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function checkTeamEquipment( localClientNum )
|
|
{
|
|
if ( !isdefined( self.owner ) )
|
|
{
|
|
return;
|
|
}
|
|
if ( !isdefined( self.equipmentOldTeam ) )
|
|
{
|
|
self.equipmentOldTeam = self.team;
|
|
}
|
|
|
|
if ( !isdefined( self.equipmentOldOwnerTeam ) )
|
|
{
|
|
self.equipmentOldOwnerTeam = self.owner.team;
|
|
}
|
|
|
|
watcher = GetLocalPlayer( localClientNum );
|
|
|
|
if ( !isdefined( self.equipmentOldWatcherTeam ) )
|
|
{
|
|
self.equipmentOldWatcherTeam = watcher.team;
|
|
}
|
|
|
|
if ( self.equipmentOldTeam != self.team || self.equipmentOldOwnerTeam != self.owner.team || self.equipmentOldWatcherTeam != watcher.team)
|
|
{
|
|
self.equipmentOldTeam = self.team;
|
|
self.equipmentOldOwnerTeam = self.owner.team;
|
|
self.equipmentOldWatcherTeam = watcher.team;
|
|
|
|
self notify( "team_changed" );
|
|
}
|
|
}
|
|
|
|
//******************************************************************
|
|
// *
|
|
// *
|
|
//******************************************************************
|
|
function equipmentTeamObject( localClientNum )
|
|
{
|
|
if ( ( isdefined( level.disable_equipment_team_object ) && level.disable_equipment_team_object ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
self endon( "entityshutdown" );
|
|
|
|
self util::waittill_dobj(localClientNum);
|
|
|
|
wait( 0.05 );
|
|
|
|
fx_handle = self thread playFlareFX( localClientNum );
|
|
|
|
self thread equipmentWatchTeamFX( localClientNum, fx_handle );
|
|
|
|
self thread equipmentWatchPlayerTeamChanged( localClientNum, fx_handle );
|
|
|
|
self thread equipmentDR();
|
|
}
|
|
|
|
//******************************************************************
|
|
// *
|
|
// *
|
|
//******************************************************************
|
|
function playFlareFX( localClientNum ) // self is the equipment entity
|
|
{
|
|
self endon( "entityshutdown" );
|
|
level endon( "player_switch" );
|
|
|
|
if ( !isdefined( self.equipmentTagFX ) )
|
|
{
|
|
self.equipmentTagFX = "tag_origin";
|
|
}
|
|
|
|
if ( !isdefined( self.equipmentFriendFX ) )
|
|
{
|
|
self.equipmentTagFX = level._effect[ "powerLightGreen" ];
|
|
}
|
|
|
|
if ( !isdefined( self.equipmentEnemyFX ) )
|
|
{
|
|
self.equipmentTagFX = level._effect[ "powerLight" ];
|
|
}
|
|
|
|
if ( self util::friend_not_foe( localClientNum, true ) )
|
|
{
|
|
fx_handle = PlayFXOnTag( localClientNum, self.equipmentFriendFX, self, self.equipmentTagFX );
|
|
}
|
|
else
|
|
{
|
|
fx_handle = PlayFXOnTag( localClientNum, self.equipmentEnemyFX, self, self.equipmentTagFX );
|
|
}
|
|
|
|
return fx_handle;
|
|
}
|
|
|
|
//******************************************************************
|
|
// equipmentWatchTeamFX *
|
|
// handles notifies that may cause the FX to change *
|
|
//******************************************************************
|
|
function equipmentWatchTeamFX( localClientNum, fxHandle ) // self is the equipment entity
|
|
{
|
|
msg = self util::waittill_any_return( "entityshutdown", "team_changed", "player_switch" );
|
|
|
|
if ( isdefined( fxHandle ) )
|
|
{
|
|
stopFx( localClientNum, fxHandle );
|
|
}
|
|
|
|
waittillframeend;
|
|
|
|
if ( msg != "entityshutdown" && isdefined( self ) )
|
|
{
|
|
self thread equipmentTeamObject( localClientNum );
|
|
}
|
|
}
|
|
|
|
//*****************************************************************
|
|
// equipmentWatchPlayerTeamChanged *
|
|
// handles the player changing teams and notifies the equipment *
|
|
//*****************************************************************
|
|
function equipmentWatchPlayerTeamChanged( localClientNum, fxHandle ) // self is the equipment entity
|
|
{
|
|
self endon( "entityshutdown" );
|
|
self notify( "team_changed_watcher" );
|
|
self endon( "team_changed_watcher" );
|
|
|
|
watcherPlayer = GetLocalPlayer( localClientNum );
|
|
|
|
while ( 1 )
|
|
{
|
|
level waittill( "team_changed", clientNum );
|
|
|
|
player = GetLocalPlayer( clientNum );
|
|
|
|
if ( watcherPlayer == player )
|
|
{
|
|
self notify( "team_changed" );
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function sndProxAlert_EntCleanup( localClientNum, ent )
|
|
{
|
|
level util::waittill_any( "sndDEDe", "demo_jump", "player_switch", "killcam_begin", "killcam_end" );
|
|
|
|
if ( isdefined(ent) )
|
|
{
|
|
ent StopAllLoopSounds( 0.5 );
|
|
ent delete();
|
|
}
|
|
} |