293 lines
16 KiB
Plaintext
293 lines
16 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
#using scripts\shared\callbacks_shared;
|
|
#using scripts\shared\clientfield_shared;
|
|
#using scripts\shared\duplicaterender_mgr;
|
|
#using scripts\shared\util_shared;
|
|
#using scripts\mp\_callbacks;
|
|
|
|
|
|
|
|
|
|
|
|
function main()
|
|
{
|
|
clientfield::register( "allplayers", "hideTeamPlayer", 27000, 2, "int", &hideShowPlayerFromTeam, false, false );
|
|
clientfield::register( "allplayers", "pingHighlight", 27000, 1, "int", &highlightPlayer, false, false );
|
|
|
|
callback::on_localplayer_spawned( &onLocalplayerSpawned );
|
|
|
|
level.retrievableChangedFunc = &hideProp;
|
|
level.enemyEquipChangedFunc = &highlightProp;
|
|
|
|
thread teamChangedReNotify();
|
|
}
|
|
|
|
function onLocalplayerSpawned( localClientNum )
|
|
{
|
|
level notify( "localPlayerSpectatingEnd" + localClientNum );
|
|
|
|
if ( IsSpectating( localClientNum, false ) )
|
|
{
|
|
level thread localPlayerSpectating( localClientNum );
|
|
}
|
|
|
|
level thread setupPropPlayerNames( localClientNum );
|
|
}
|
|
|
|
function localPlayerSpectating( localClientNum )
|
|
{
|
|
level notify( "localPlayerSpectating" + localClientNum );
|
|
level endon( "localPlayerSpectatingEnd" + localClientNum );
|
|
|
|
lastPlayerSpectated = PlayerBeingSpectated( localClientNum );
|
|
while ( true )
|
|
{
|
|
player = PlayerBeingSpectated( localClientNum );
|
|
|
|
if ( player != lastPlayerSpectated )
|
|
{
|
|
level notify( "localPlayerSpectating" + localClientNum );
|
|
}
|
|
|
|
wait 0.1;
|
|
}
|
|
}
|
|
|
|
function teamChangedReNotify()
|
|
{
|
|
while ( true )
|
|
{
|
|
level waittill( "team_changed", localClientNum );
|
|
level notify( "team_changed" + localClientNum );
|
|
}
|
|
}
|
|
|
|
function entityIsPlayerALinkedParent( player )
|
|
{
|
|
parent = self GetLinkedEnt();
|
|
while ( isdefined( parent ) )
|
|
{
|
|
if ( parent == player )
|
|
return true;
|
|
else
|
|
parent = parent GetLinkedEnt();
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function getPlayersProp( localClientNum, player )
|
|
{
|
|
if ( isdefined( player.prop ) )
|
|
return player.prop;
|
|
|
|
ents = GetEntArray( localClientNum );
|
|
foreach ( ent in ents )
|
|
{
|
|
if ( !ent IsPlayer() && isdefined( ent.owner ) && ent.owner == player && ent entityIsPlayerALinkedParent( player ) )
|
|
{
|
|
return ent;
|
|
}
|
|
}
|
|
}
|
|
|
|
function setupPropPlayerNames( localClientNum )
|
|
{
|
|
level notify( "setupPropPlayerNames" + localClientNum );
|
|
level endon( "setupPropPlayerNames" + localClientNum );
|
|
|
|
while ( true )
|
|
{
|
|
localPlayer = GetLocalPlayer( localClientNum );
|
|
|
|
spectating = IsSpectating( localClientNum, false );
|
|
|
|
players = GetPlayers( localClientNum );
|
|
foreach ( player in players )
|
|
{
|
|
if ( ( player != localPlayer || spectating ) && player IsHidden() && isdefined( player.team ) && ( player.team == localPlayer.team ) )
|
|
{
|
|
player.prop = getPlayersProp( localClientNum, player );
|
|
|
|
if ( isdefined( player.prop ) )
|
|
{
|
|
if ( !( isdefined( player.nameRendering ) && player.nameRendering ) )
|
|
{
|
|
player.prop SetDrawOwnerName( true, spectating );
|
|
player.nameRendering = true;
|
|
}
|
|
}
|
|
}
|
|
else if ( ( isdefined( player.nameRendering ) && player.nameRendering ) )
|
|
{
|
|
player.prop = getPlayersProp( localClientNum, player );
|
|
|
|
if ( isdefined( player.prop ) )
|
|
player.prop SetDrawOwnerName( false, spectating );
|
|
player.nameRendering = false;
|
|
}
|
|
}
|
|
|
|
wait 1;
|
|
}
|
|
}
|
|
|
|
function highlightProp( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
if ( newVal == 0 )
|
|
{
|
|
self notify( "highlightPropTeamChange" );
|
|
self duplicate_render::update_dr_flag( localClientNum, "prop_ally", false );
|
|
self duplicate_render::update_dr_flag( localClientNum, "prop_clone", false );
|
|
}
|
|
else
|
|
{
|
|
self thread highlightPropTeamChange( localClientNum, newVal );
|
|
}
|
|
}
|
|
|
|
function highlightPropTeamChange( localClientNum, highlightType )
|
|
{
|
|
self endon( "entityshutdown" );
|
|
level endon( "disconnect" );
|
|
self notify( "highlightPropTeamChange" );
|
|
self endon( "highlightPropTeamChange" );
|
|
|
|
while ( 1 )
|
|
{
|
|
localPlayer = GetLocalPlayer( localClientNum );
|
|
|
|
spectating = IsSpectating( localClientNum, false ) && !GetInKillcam( localClientNum );
|
|
isHighlighted = ( ( !isdefined( self.owner ) || ( self.owner != localPlayer ) || spectating ) && isdefined( self.team ) && isdefined( localPlayer.team ) && self.team == localPlayer.team );
|
|
|
|
if ( highlightType == 1 )
|
|
{
|
|
self duplicate_render::update_dr_flag( localClientNum, "prop_ally", isHighlighted );
|
|
self duplicate_render::update_dr_flag( localClientNum, "prop_clone", false );
|
|
}
|
|
else
|
|
{
|
|
self duplicate_render::update_dr_flag( localClientNum, "prop_clone", isHighlighted );
|
|
self duplicate_render::update_dr_flag( localClientNum, "prop_ally", false );
|
|
}
|
|
|
|
self duplicate_render::update_dr_filters( localClientNum );
|
|
|
|
level util::waittill_any( "team_changed" + localClientNum, "localPlayerSpectating" + localClientNum );
|
|
}
|
|
}
|
|
|
|
function highlightPlayer( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
if ( newVal == 0 )
|
|
{
|
|
self notify( "highlightPropTeamChange" );
|
|
self duplicate_render::update_dr_flag( localClientNum, "prop_clone", false );
|
|
}
|
|
else
|
|
{
|
|
self thread highlightPlayerTeamChange( localClientNum, newVal );
|
|
}
|
|
}
|
|
|
|
function highlightPlayerTeamChange( localClientNum, highlightType )
|
|
{
|
|
self endon( "entityshutdown" );
|
|
self notify( "highlightPlayerTeamChange" );
|
|
self endon( "highlightPlayerTeamChange" );
|
|
|
|
while ( 1 )
|
|
{
|
|
localPlayer = GetLocalPlayer( localClientNum );
|
|
|
|
isHighlighted = ( self != localPlayer && isdefined( self.team ) && isdefined( localPlayer.team ) && self.team == localPlayer.team );
|
|
|
|
self duplicate_render::update_dr_flag( localClientNum, "prop_clone", isHighlighted );
|
|
|
|
level util::waittill_any( "team_changed" + localClientNum, "localPlayerSpectating" + localClientNum );
|
|
}
|
|
}
|
|
|
|
function hideProp( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
localPlayer = GetLocalPlayer( localClientNum );
|
|
|
|
isHighlighted = ( newVal && isdefined( self.owner ) && self.owner == localPlayer );
|
|
|
|
if ( isHighlighted )
|
|
{
|
|
self duplicate_render::update_dr_flag( localClientNum, "prop_look_through", true );
|
|
self duplicate_render::set_dr_flag( "hide_model", true );
|
|
self duplicate_render::set_dr_flag( "active_camo_reveal", false );
|
|
self duplicate_render::set_dr_flag( "active_camo_on", true );
|
|
self duplicate_render::update_dr_filters( localClientNum );
|
|
}
|
|
else
|
|
{
|
|
self duplicate_render::update_dr_flag( localClientNum, "prop_look_through", false );
|
|
self duplicate_render::set_dr_flag( "hide_model", false );
|
|
self duplicate_render::set_dr_flag( "active_camo_reveal", false );
|
|
self duplicate_render::set_dr_flag( "active_camo_on", false );
|
|
self duplicate_render::update_dr_filters( localClientNum );
|
|
}
|
|
}
|
|
|
|
function hideShowPlayerFromTeam( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
if ( newVal == 0 )
|
|
{
|
|
self notify( "hideShowFromTeam" );
|
|
if ( !self IsPlayerProp( localClientNum ) )
|
|
self Show();
|
|
}
|
|
else
|
|
{
|
|
self hideShowFromTeamChange( localClientNum, newVal );
|
|
}
|
|
}
|
|
|
|
function IsPlayerProp( localClientNum )
|
|
{
|
|
if ( isdefined( self.prop ) )
|
|
return true;
|
|
|
|
if ( self IsPlayer() )
|
|
{
|
|
self.prop = getPlayersProp( localClientNum, self );
|
|
return ( isdefined( self.prop ) );
|
|
}
|
|
|
|
return false;
|
|
}
|
|
|
|
function hideShowFromTeamChange( localClientNum, teamInt )
|
|
{
|
|
self endon( "entityshutdown" );
|
|
self notify( "hideShowFromTeam" );
|
|
self endon( "hideShowFromTeam" );
|
|
|
|
assert( teamInt == 1 || teamInt == 2 );
|
|
|
|
team = "allies";
|
|
if ( teamInt == 2 )
|
|
team = "axis";
|
|
|
|
while ( 1 )
|
|
{
|
|
localPlayer = GetLocalPlayer( localClientNum );
|
|
|
|
isHidden = ( isdefined( localPlayer.team ) && team == localPlayer.team && !IsSpectating( localClientNum ) );
|
|
|
|
if ( isHidden )
|
|
{
|
|
self Hide();
|
|
}
|
|
else
|
|
{
|
|
if ( !self IsPlayerProp( localClientNum ) )
|
|
self Show();
|
|
}
|
|
|
|
level waittill( "team_changed" + localClientNum );
|
|
}
|
|
} |