108 lines
11 KiB
Plaintext
108 lines
11 KiB
Plaintext
#using scripts\codescripts\struct;
|
|
|
|
#using scripts\shared\callbacks_shared;
|
|
#using scripts\shared\clientfield_shared;
|
|
#using scripts\shared\duplicaterender_mgr;
|
|
#using scripts\shared\filter_shared;
|
|
#using scripts\shared\visionset_mgr_shared;
|
|
#using scripts\shared\util_shared;
|
|
|
|
#using scripts\shared\abilities\_ability_player;
|
|
#using scripts\shared\abilities\_ability_power;
|
|
#using scripts\shared\abilities\_ability_util;
|
|
#using scripts\shared\abilities\gadgets\_gadget_clone_render;
|
|
|
|
|
|
|
|
|
|
#using scripts\shared\system_shared;
|
|
|
|
|
|
|
|
function autoexec __init__sytem__() { system::register("gadget_clone",&__init__,undefined,undefined); }
|
|
|
|
function __init__()
|
|
{
|
|
clientfield::register( "actor", "clone_activated", 1, 1, "int", &clone_activated, !true, true );
|
|
clientfield::register( "actor", "clone_damaged", 1, 1, "int", &clone_damaged, !true, !true );
|
|
|
|
clientfield::register( "allplayers", "clone_activated", 1, 1, "int", &player_clone_activated, !true, !true );
|
|
}
|
|
|
|
function set_shader( localClientNum, enabled, entity )
|
|
{
|
|
if( entity isfriendly( localclientnum ) )
|
|
{
|
|
self duplicate_render::update_dr_flag( localClientNum, "clone_ally_on", enabled );
|
|
}
|
|
else
|
|
{
|
|
self duplicate_render::update_dr_flag( localClientNum, "clone_enemy_on", enabled );
|
|
}
|
|
}
|
|
|
|
function clone_activated( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
if( newVal )
|
|
{
|
|
self._isClone = true;
|
|
self set_shader( localClientNum, true, self getowner( localClientNum ) );
|
|
if( isDefined( level._monitor_tracker ) )
|
|
{
|
|
self thread [[level._monitor_tracker]]( localClientNum );
|
|
}
|
|
self thread gadget_clone_render::transition_shader( localClientNum );
|
|
}
|
|
}
|
|
|
|
function player_clone_activated( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
if ( !isdefined( self ) )
|
|
return;
|
|
|
|
if( newVal )
|
|
{
|
|
self set_shader( localclientnum, true, self );
|
|
self thread gadget_clone_render::transition_shader( localClientNum );
|
|
}
|
|
else
|
|
{
|
|
self set_shader( localclientnum, false, self );
|
|
self notify ( "clone_shader_off" );
|
|
self MapShaderConstant( localClientNum, 0, "scriptVector3", 1, 0, 0, 1 );
|
|
}
|
|
}
|
|
|
|
function clone_damage_flicker( localClientNum )
|
|
{
|
|
self endon( "entityshutdown" );
|
|
self notify( "start_flicker" );
|
|
self endon( "start_flicker" );
|
|
|
|
self duplicate_render::update_dr_flag( localClientNum, "clone_damage", true );
|
|
self waittill( "stop_flicker" );
|
|
self duplicate_render::update_dr_flag( localClientNum, "clone_damage", false );
|
|
}
|
|
|
|
function clone_damage_finish()
|
|
{
|
|
self endon( "entityshutdown" );
|
|
self endon( "start_flicker" );
|
|
self endon( "stop_flicker" );
|
|
|
|
wait( .2 );
|
|
self notify( "stop_flicker" );
|
|
}
|
|
|
|
function clone_damaged( localClientNum, oldVal, newVal, bNewEnt, bInitialSnap, fieldName, bWasTimeJump )
|
|
{
|
|
if( newVal )
|
|
{
|
|
self thread clone_damage_flicker( localClientNum );
|
|
}
|
|
else
|
|
{
|
|
self thread clone_damage_finish();
|
|
}
|
|
}
|