298 lines
17 KiB
Plaintext
298 lines
17 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
|
|
#using scripts\shared\array_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;
|
|
|
|
#namespace killstreak_detect;
|
|
|
|
function autoexec __init__sytem__() { system::register("killstreak_detect",&__init__,undefined,undefined); }
|
|
|
|
|
|
function __init__()
|
|
{
|
|
callback::on_localplayer_spawned( &watch_killstreak_detect_perks_changed );
|
|
|
|
clientfield::register( "scriptmover", "enemyvehicle", 1, 2, "int", &enemyScriptMoverVehicle_changed, !true, !true );
|
|
clientfield::register( "vehicle", "enemyvehicle", 1, 2, "int", &enemyvehicle_changed, !true, true );
|
|
clientfield::register( "helicopter", "enemyvehicle", 1, 2, "int", &enemyvehicle_changed, !true, true );
|
|
clientfield::register( "missile", "enemyvehicle", 1, 2, "int", &enemyMissileVehicle_changed, !true, true );
|
|
clientfield::register( "actor", "enemyvehicle", 1, 2, "int", &enemyvehicle_changed, !true, true );
|
|
|
|
clientfield::register( "vehicle", "vehicletransition", 1, 1, "int", &vehicle_transition, !true, true );
|
|
|
|
if(!isdefined(level.enemyvehicles))level.enemyvehicles=[];
|
|
if(!isdefined(level.enemymissiles))level.enemymissiles=[];
|
|
|
|
level.emp_killstreaks = [];
|
|
}
|
|
|
|
function vehicle_transition( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
player = GetLocalPlayer( local_client_num );
|
|
friend = self util::friend_not_foe( local_client_num, true );
|
|
|
|
if( friend && isdefined( player ) && player duplicate_render::show_friendly_outlines( local_client_num ) )
|
|
{
|
|
showOutlines = !(self IsLocalClientDriver( local_client_num ) );
|
|
self duplicate_render::set_item_friendly_vehicle( local_client_num, showOutlines );
|
|
}
|
|
}
|
|
|
|
function should_set_compass_icon( local_client_num )
|
|
{
|
|
local_player = GetLocalPlayer( local_client_num );
|
|
|
|
return ( isdefined( local_player ) && isdefined( self.team ) && ( local_player.team === self.team || local_player HasPerk( local_client_num, "specialty_showenemyvehicles" ) ) );
|
|
}
|
|
|
|
function enemyScriptMoverVehicle_changed( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
if ( isdefined( level.scriptMoverCompassIcons ) && isdefined( self.model ) )
|
|
{
|
|
if ( isdefined( level.scriptMoverCompassIcons[self.model] ) )
|
|
{
|
|
if ( self should_set_compass_icon( local_client_num ) )
|
|
{
|
|
self setCompassIcon( level.scriptMoverCompassIcons[self.model] );
|
|
}
|
|
}
|
|
}
|
|
|
|
enemyvehicle_changed( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump );
|
|
}
|
|
|
|
function enemyMissileVehicle_changed( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
if ( isdefined( level.missileCompassIcons ) && isdefined( self.weapon ) )
|
|
{
|
|
if ( isdefined( level.missileCompassIcons[self.weapon] ) )
|
|
{
|
|
if ( self should_set_compass_icon( local_client_num ) )
|
|
{
|
|
self setCompassIcon( level.missileCompassIcons[self.weapon] );
|
|
}
|
|
}
|
|
}
|
|
|
|
enemymissile_changed( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump );
|
|
}
|
|
|
|
function enemymissile_changed( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
self updateTeamMissiles( local_client_num, newVal );
|
|
self util::add_remove_list( level.enemymissiles, newVal );
|
|
self updateEnemyMissiles( local_client_num, newVal );
|
|
}
|
|
|
|
function enemyvehicle_changed( local_client_num, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
self updateTeamVehicles( local_client_num, newVal );
|
|
self util::add_remove_list( level.enemyvehicles, newVal );
|
|
|
|
self updateEnemyVehicles( local_client_num, newVal );
|
|
|
|
if ( isdefined( self.model ) && self.model == "wpn_t7_turret_emp_core" && self.type === "vehicle" )
|
|
{
|
|
if ( !isdefined( level.emp_killstreaks ) ) level.emp_killstreaks = []; else if ( !IsArray( level.emp_killstreaks ) ) level.emp_killstreaks = array( level.emp_killstreaks ); level.emp_killstreaks[level.emp_killstreaks.size]=self;;
|
|
}
|
|
}
|
|
|
|
function updateTeamVehicles( local_client_num, newVal )
|
|
{
|
|
self checkTeamVehicles( local_client_num );
|
|
}
|
|
|
|
function updateTeamMissiles( local_client_num, newVal )
|
|
{
|
|
self checkTeamMissiles( local_client_num );
|
|
}
|
|
|
|
function updateEnemyVehicles( local_client_num, newVal )
|
|
{
|
|
if ( !( isdefined( self ) ) )
|
|
{
|
|
return;
|
|
}
|
|
watcher = GetLocalPlayer( local_client_num );
|
|
friend = self util::friend_not_foe( local_client_num, true );
|
|
|
|
self duplicate_render::set_dr_flag( "enemyvehicle_fb", !friend );
|
|
|
|
self duplicate_render::set_item_enemy_vehicle( local_client_num, false );
|
|
self duplicate_render::set_item_friendly_vehicle( local_client_num, false );
|
|
self.isEnemyVehicle = false;
|
|
if ( !friend && IsDefined( watcher ) && watcher HasPerk( local_client_num, "specialty_showenemyvehicles" ) )
|
|
{
|
|
if ( !isdefined( self.isbreachingfirewall ) || self.isbreachingfirewall == false )
|
|
{
|
|
self duplicate_render::set_item_enemy_vehicle( local_client_num, newVal );
|
|
}
|
|
self.isEnemyVehicle = true;
|
|
self duplicate_render::set_item_friendly_vehicle( local_client_num, false );
|
|
}
|
|
else if( ( friend === true ) && isDefined( watcher ) && watcher duplicate_render::show_friendly_outlines(local_client_num) )
|
|
{
|
|
driver = ( self.type === "vehicle" ) && self IsLocalClientDriver( local_client_num );
|
|
showOutlines = ( driver === false ) && ( newVal === 1 || newVal === 2 );
|
|
self duplicate_render::set_item_friendly_vehicle( local_client_num, showOutlines );
|
|
}
|
|
else
|
|
{
|
|
self duplicate_render::set_item_friendly_vehicle( local_client_num, false );
|
|
}
|
|
|
|
if ( newVal == 2 )
|
|
{
|
|
//self duplicate_render::set_hacker_tool_hacked( local_client_num, true );
|
|
self.killstreakIsHacked = true;
|
|
}
|
|
|
|
self duplicate_render::update_dr_filters( local_client_num );
|
|
}
|
|
|
|
function updateEnemyMissiles( local_client_num, newVal )
|
|
{
|
|
if ( !( isdefined( self ) ) )
|
|
{
|
|
return;
|
|
}
|
|
watcher = GetLocalPlayer( local_client_num );
|
|
friend = self util::friend_not_foe( local_client_num, true );
|
|
|
|
self duplicate_render::set_dr_flag( "enemyvehicle_fb", !friend );
|
|
|
|
self duplicate_render::set_item_enemy_explosive( local_client_num, false );
|
|
self duplicate_render::set_item_friendly_explosive( local_client_num, false );
|
|
self.isEnemyVehicle = false;
|
|
if ( !friend && IsDefined( watcher ) && watcher HasPerk( local_client_num, "specialty_showenemyvehicles" ) )
|
|
{
|
|
if ( !isdefined( self.isbreachingfirewall ) || self.isbreachingfirewall == false )
|
|
{
|
|
self duplicate_render::set_item_enemy_explosive( local_client_num, newVal );
|
|
}
|
|
self.isEnemyVehicle = true;
|
|
self duplicate_render::set_item_friendly_explosive( local_client_num, false );
|
|
}
|
|
else if( ( friend === true ) && isDefined( watcher ) && watcher duplicate_render::show_friendly_outlines(local_client_num) )
|
|
{
|
|
showOutlines = ( newVal === 1 || newVal === 2 );
|
|
self duplicate_render::set_item_friendly_explosive( local_client_num, showOutlines );
|
|
}
|
|
else
|
|
{
|
|
self duplicate_render::set_item_friendly_explosive( local_client_num, false );
|
|
}
|
|
|
|
if ( newVal == 2 )
|
|
{
|
|
//self duplicate_render::set_hacker_tool_hacked( local_client_num, true );
|
|
self.killstreakIsHacked = true;
|
|
}
|
|
|
|
self duplicate_render::update_dr_filters( local_client_num );
|
|
}
|
|
|
|
function watch_killstreak_detect_perks_changed(local_client_num)
|
|
{
|
|
if( self != GetLocalPlayer( local_client_num ) )
|
|
return;
|
|
|
|
self notify( "watch_killstreak_detect_perks_changed" );
|
|
self endon( "watch_killstreak_detect_perks_changed" );
|
|
self endon( "death" );
|
|
self endon( "disconnect" );
|
|
self endon( "entityshutdown" );
|
|
|
|
while(IsDefined(self))
|
|
{
|
|
{wait(.016);};
|
|
util::clean_deleted(level.enemyvehicles);
|
|
util::clean_deleted(level.enemymissiles);
|
|
array::thread_all( level.enemyvehicles, &updateEnemyVehicles, local_client_num, 1 );
|
|
array::thread_all( level.enemymissiles, &updateEnemyMissiles, local_client_num, 1 );
|
|
self waittill("perks_changed");
|
|
}
|
|
}
|
|
|
|
|
|
function checkTeamVehicles( localClientNum )
|
|
{
|
|
if ( !isdefined ( self.owner ) || !isdefined ( self.owner.team ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( !isdefined( self.vehicleOldTeam ) )
|
|
{
|
|
self.vehicleOldTeam = self.team;
|
|
}
|
|
|
|
if ( !isdefined( self.vehicleOldOwnerTeam ) )
|
|
{
|
|
self.vehicleOldOwnerTeam = self.owner.team;
|
|
}
|
|
|
|
watcher = GetLocalPlayer( localClientNum );
|
|
|
|
if ( !isdefined( self.vehicleOldWatcherTeam ) )
|
|
{
|
|
self.vehicleOldWatcherTeam = watcher.team;
|
|
}
|
|
|
|
if ( self.vehicleOldTeam != self.team || self.vehicleOldOwnerTeam != self.owner.team || self.vehicleOldWatcherTeam != watcher.team)
|
|
{
|
|
self.vehicleOldTeam = self.team;
|
|
self.vehicleOldOwnerTeam = self.owner.team;
|
|
self.vehicleOldWatcherTeam = watcher.team;
|
|
|
|
self notify( "team_changed" );
|
|
}
|
|
}
|
|
|
|
function checkTeamMissiles( localClientNum )
|
|
{
|
|
if ( !isdefined ( self.owner ) || !isdefined ( self.owner.team ) )
|
|
{
|
|
return;
|
|
}
|
|
|
|
if ( !isdefined( self.missileOldTeam ) )
|
|
{
|
|
self.missileOldTeam = self.team;
|
|
}
|
|
|
|
if ( !isdefined( self.missileOldOwnerTeam ) )
|
|
{
|
|
self.missileOldOwnerTeam = self.owner.team;
|
|
}
|
|
|
|
watcher = GetLocalPlayer( localClientNum );
|
|
|
|
if ( !isdefined( self.missileOldWatcherTeam ) )
|
|
{
|
|
self.missileOldWatcherTeam = watcher.team;
|
|
}
|
|
|
|
if ( self.missileOldTeam != self.team || self.missileOldOwnerTeam != self.owner.team || self.missileOldWatcherTeam != watcher.team)
|
|
{
|
|
self.missileOldTeam = self.team;
|
|
self.missileOldOwnerTeam = self.owner.team;
|
|
self.missileOldWatcherTeam = watcher.team;
|
|
|
|
self notify( "team_changed" );
|
|
}
|
|
}
|