boiii-scripts/mp/killstreaks/_killstreak_detect.csc
2023-04-13 17:30:38 +02:00

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" );
}
}