244 lines
15 KiB
Plaintext
244 lines
15 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
|
|
#using scripts\shared\callbacks_shared;
|
|
#using scripts\shared\clientfield_shared;
|
|
#using scripts\shared\duplicaterender_mgr;
|
|
#using scripts\shared\math_shared;
|
|
#using scripts\shared\system_shared;
|
|
#using scripts\shared\util_shared;
|
|
#using scripts\shared\visionset_mgr_shared;
|
|
#using scripts\shared\weapons\_flashgrenades;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
#namespace hacker_tool;
|
|
|
|
function init_shared()
|
|
{
|
|
clientfield::register( "toplayer", "hacker_tool", 1, 2, "int", &player_hacking, !true, !true );
|
|
level.hackingSoundId = [];
|
|
level.hackingSweetSpotId = [];
|
|
level.friendlyHackingSoundId = [];
|
|
callback::on_localplayer_spawned( &on_localplayer_spawned );
|
|
}
|
|
|
|
function on_localplayer_spawned( localClientNum )
|
|
{
|
|
if( self != GetLocalPlayer( localClientNum ) )
|
|
return;
|
|
|
|
player = self;
|
|
|
|
if ( isdefined( level.hackingSoundId[localclientnum] ) )
|
|
{
|
|
player stopLoopSound( level.hackingSoundId[localclientnum] );
|
|
level.hackingSoundId[localclientnum] = undefined;
|
|
}
|
|
if ( isdefined( level.hackingSweetSpotId[localclientnum] ) )
|
|
{
|
|
player stopLoopSound(level.hackingSweetSpotId[localclientnum] );
|
|
level.hackingSweetSpotId[localclientnum] = undefined;
|
|
}
|
|
if ( isdefined( level.friendlyHackingSoundId[localclientnum] ) )
|
|
{
|
|
player stopLoopSound( level.friendlyHackingSoundId[localclientnum] );
|
|
level.friendlyHackingSoundId[localclientnum] = undefined;
|
|
}
|
|
}
|
|
|
|
|
|
function player_hacking( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
self notify( "player_hacking_callback" );
|
|
player = self;
|
|
if ( isdefined( level.hackingSoundId[localclientnum] ) )
|
|
{
|
|
player stopLoopSound( level.hackingSoundId[localclientnum] );
|
|
level.hackingSoundId[localclientnum] = undefined;
|
|
}
|
|
if ( isdefined( level.hackingSweetSpotId[localclientnum] ) )
|
|
{
|
|
player stopLoopSound(level.hackingSweetSpotId[localclientnum] );
|
|
level.hackingSweetSpotId[localclientnum] = undefined;
|
|
}
|
|
if ( isdefined( level.friendlyHackingSoundId[localclientnum] ) )
|
|
{
|
|
player stopLoopSound( level.friendlyHackingSoundId[localclientnum] );
|
|
level.friendlyHackingSoundId[localclientnum] = undefined;
|
|
}
|
|
if ( isdefined( player.targetEnt ) )
|
|
{
|
|
player.targetEnt duplicate_render::set_hacker_tool_hacking( localClientNum, false );
|
|
player.targetEnt duplicate_render::set_hacker_tool_breaching( localClientNum,false );
|
|
player.targetEnt.isbreachingfirewall = false;
|
|
player.targetEnt = undefined;
|
|
}
|
|
|
|
if ( newVal == 2 )
|
|
{
|
|
player thread watchHackSpeed( localClientNum, false );
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "hudItems.blackhat.status" ), 2 );
|
|
}
|
|
else if ( newVal == 3 )
|
|
{
|
|
player thread watchHackSpeed( localClientNum, true );
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "hudItems.blackhat.status" ), 1 );
|
|
}
|
|
else if ( newVal == 1 )
|
|
{
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "hudItems.blackhat.status" ), 0 );
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "hudItems.blackhat.perc" ), 0 );
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "hudItems.blackhat.offsetShaderValue" ), 0 + " " + 0 + " 0 0" );
|
|
self thread watchForEMP( localClientNum );
|
|
}
|
|
else
|
|
{
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "hudItems.blackhat.status" ), 0 );
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "hudItems.blackhat.perc" ), 0 );
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "hudItems.blackhat.offsetShaderValue" ), 0 + " " + 0 + " 0 0" );
|
|
}
|
|
}
|
|
|
|
|
|
function watchHackSpeed( localClientNum, isBreachingFirewall )
|
|
{
|
|
self endon( "entityshutdown" );
|
|
self endon( "player_hacking_callback" );
|
|
player = self;
|
|
|
|
for ( ;; )
|
|
{
|
|
targetEntArray = self GetTargetLockEntityArray();
|
|
if ( targetEntArray.size > 0 )
|
|
{
|
|
targetEnt = targetEntArray[0];
|
|
break;
|
|
}
|
|
wait ( 0.02 );
|
|
}
|
|
targetEnt watchTargetHack( localclientNum, player, isBreachingFirewall );
|
|
}
|
|
|
|
function watchTargetHack( localclientnum, player, isBreachingFirewall )
|
|
{
|
|
self endon( "entityshutdown" );
|
|
player endon( "entityshutdown" );
|
|
self endon( "player_hacking_callback" );
|
|
|
|
targetEnt = self;
|
|
player.targetEnt = targetEnt;
|
|
if ( isBreachingFirewall )
|
|
{
|
|
targetEnt.isbreachingfirewall = true;
|
|
targetEnt duplicate_render::set_hacker_tool_breaching( localclientnum, true );
|
|
}
|
|
|
|
targetEnt thread watchHackerPlayerShutdown( localclientnum, player, targetEnt );
|
|
|
|
for( ;; )
|
|
{
|
|
distanceFromCenter = targetent getDistanceFromScreenCenter( localClientNum );
|
|
inverse = 40 - distancefromcenter;
|
|
ratio = inverse / 40;
|
|
heatVal = GetWeaponHackRatio( localclientnum );
|
|
ratio = ratio * ratio * ratio * ratio;
|
|
if ( ratio > 1.0 || ratio < 0.001 )
|
|
{
|
|
ratio = 0;
|
|
horizontal = 0;
|
|
}
|
|
else
|
|
{
|
|
horizontal = targetent getHorizontalOffsetFromScreenCenter( localClientNum, 40 );
|
|
}
|
|
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "hudItems.blackhat.offsetShaderValue" ), horizontal + " " + ratio + " 0 0" );
|
|
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "hudItems.blackhat.perc" ), heatVal );
|
|
|
|
if ( ratio > 0.8 )
|
|
{
|
|
if ( !isdefined( level.hackingSweetSpotId[localclientnum] ) )
|
|
{
|
|
level.hackingSweetSpotId[localclientnum] = player playloopsound( "evt_hacker_hacking_sweet" );
|
|
}
|
|
}
|
|
else
|
|
{
|
|
if ( isdefined( level.hackingSweetSpotId[localclientnum] ) )
|
|
{
|
|
player stopLoopSound( level.hackingSweetSpotId[localclientnum] );
|
|
level.hackingSweetSpotId[localclientnum] = undefined;
|
|
}
|
|
if ( !isdefined( level.hackingSoundId[localclientnum] ) )
|
|
{
|
|
level.hackingSoundId[localclientnum] = player playloopsound( "evt_hacker_hacking_loop" );
|
|
}
|
|
if ( isdefined( level.hackingSoundId[localclientnum] ) )
|
|
{
|
|
setSoundPitch( level.hackingSoundId[localclientnum], ratio );
|
|
}
|
|
}
|
|
|
|
if ( !isBreachingFirewall )
|
|
{
|
|
friendlyHacking = WeaponFriendlyHacking( localclientnum );
|
|
|
|
if ( friendlyHacking && !isdefined( level.friendlyHackingSoundId[localclientnum] ) )
|
|
{
|
|
level.friendlyHackingSoundId[localclientnum] = player playloopsound( "evt_hacker_hacking_loop_mult" );
|
|
}
|
|
else if ( !friendlyHacking && isdefined( level.friendlyHackingSoundId[localclientnum] ) )
|
|
{
|
|
player stopLoopSound( level.friendlyHackingSoundId[localclientnum] );
|
|
level.friendlyHackingSoundId[localclientnum] = undefined;
|
|
}
|
|
}
|
|
|
|
wait ( 0.1 );
|
|
}
|
|
}
|
|
|
|
function watchHackerPlayerShutdown( localClientNum, hackerPlayer, targetEnt )
|
|
{
|
|
self endon( "entityshutdown" );
|
|
killstreakEntity = self;
|
|
hackerPlayer endon( "player_hacking_callback" );
|
|
|
|
hackerPlayer waittill( "entityshutdown" );
|
|
|
|
if ( isdefined( targetEnt ) )
|
|
{
|
|
targetEnt.isbreachingfirewall = true;
|
|
}
|
|
killstreakEntity duplicate_render::set_hacker_tool_hacking( localClientNum, false );
|
|
killstreakEntity duplicate_render::set_hacker_tool_breaching( localClientNum, false );
|
|
}
|
|
|
|
|
|
function watchForEMP( localClientNum )
|
|
{
|
|
self endon( "entityshutdown" );
|
|
self endon( "player_hacking_callback" );
|
|
|
|
while ( 1 )
|
|
{
|
|
if ( self IsEMPJammed() )
|
|
{
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "hudItems.blackhat.status" ), 3 );
|
|
}
|
|
else
|
|
{
|
|
SetUIModelValue( CreateUIModel( GetUIModelForController( localClientNum ), "hudItems.blackhat.status" ), 0 );
|
|
}
|
|
wait( 0.1 );
|
|
}
|
|
|
|
}
|