Please try this version. Now change method for remove frozen and semicolon is in function
PHP Code:
#include < amxmodx >
#include < engine >
#include < hamsandwich >
#include < xs >
#include < fakemeta >
#pragma semicolon 1
#define PI 3.14
#define SQRTTWO 1.41
#define CAM_HEIGHT 18.0
#define CAM_LIM 10.0
#define CAM_AIMING_OFFSET 10.0
#define CAM_CLASS "RotatingCam"
#define CAM_SPEED 2
#define CAM_RADIUS 50.0
new Float:gflLauchGameTime[ 32 + 1 ];
new Float:gflTimeToReachPosition;
public plugin_init( )
{
register_plugin( "Golden Eye Spawn Camera", "1.0.0", "Kid" );
register_think( CAM_CLASS, "thinkRotatingCam" );
RegisterHam( Ham_Spawn, "player", "spawn_effect", 1 );
RegisterHam( Ham_Spawn, "player", "spawn_effect2", 1 );
gflTimeToReachPosition = ( ( 1.5 * PI ) / ( CAM_SPEED * SQRTTWO ) );
}
public spawn_effect2(id)
{
if(is_user_alive(id))
{
set_pev( id, pev_flags, pev( id, pev_flags ) | FL_FROZEN );
}
}
public spawn_effect( id )
{
gflLauchGameTime[ id ] = ( get_gametime( ) + gflTimeToReachPosition );
new iEnt = create_entity( "info_target" );
if ( is_valid_ent( iEnt ) )
{
new Float:flOrigin[ 3 ], Float:flOffset[ 3 ];
flOffset[ 1 ] = CAM_RADIUS;
flOffset[ 2 ] = CAM_HEIGHT;
entity_set_string( iEnt, EV_SZ_classname, CAM_CLASS );
entity_set_model( iEnt, "models/w_usp.mdl" );
entity_set_byte( iEnt, EV_INT_solid, SOLID_NOT );
entity_set_int( iEnt, EV_INT_movetype, MOVETYPE_NOCLIP );
entity_set_edict( iEnt, EV_ENT_owner, id );
get_offset_origin( id, flOffset, flOrigin );
entity_set_vector( iEnt, EV_VEC_origin, flOrigin );
entity_set_int( iEnt, EV_INT_rendermode, kRenderTransTexture );
entity_set_float( iEnt, EV_FL_renderamt, 0.0 );
attach_view( id, iEnt );
entity_set_float( iEnt, EV_FL_nextthink, get_gametime( ) );
}
}
public thinkRotatingCam( iEnt )
{
static iOwner;
iOwner = entity_get_edict( iEnt, EV_ENT_owner );
new iFlags = pev( iOwner, pev_flags );
if ( !is_user_alive( iOwner ) )
{
remove_entity( iEnt );
set_pev( iOwner, pev_flags, iFlags & ~FL_FROZEN );
return PLUGIN_CONTINUE;
}
static Float:flOriginCamera[ 3 ], Float:flOriginPlayer[ 3 ], Float:flVelocity[ 3 ], Float:flAddVelocity[ 3 ], Float:flOffset[ 3 ], iHeightCheck;
entity_get_vector( iEnt, EV_VEC_origin, flOriginCamera );
flOffset[ 0 ] = CAM_AIMING_OFFSET;
get_offset_origin( iOwner, flOffset, flOriginPlayer );
if ( floatsqroot( floatpower( ( flOriginPlayer[ 0 ] - flOriginCamera[ 0 ] ), 2.0 ) + floatpower( ( flOriginPlayer[ 1 ] - flOriginCamera[ 1 ] ), 2.0 ) ) <= CAM_LIM )
{
remove_entity( iEnt );
attach_view( iOwner, iOwner );
set_pev( iOwner, pev_flags, iFlags & ~FL_FROZEN );
return PLUGIN_CONTINUE;
}
flVelocity[ 0 ] = ( ( flOriginCamera[ 1 ] - flOriginPlayer[ 1 ] ) * CAM_SPEED );
flVelocity[ 1 ] = ( ( flOriginPlayer[ 0 ] - flOriginCamera[ 0 ] ) * CAM_SPEED );
entity_get_vector( iEnt, EV_VEC_velocity, flAddVelocity );
flAddVelocity[ 0 ] = flAddVelocity[ 1 ] = 0.0;
if ( !( iHeightCheck = ( -0.25 <= ( flOriginCamera[ 2 ] - ( flOriginPlayer[ 2 ] + CAM_HEIGHT ) ) <= 0.25 ) ) && ( flAddVelocity[ 2 ] == 0.0 ) )
{
flAddVelocity[ 2 ] = ( ( flOriginPlayer[ 2 ] - flOriginCamera[ 2 ] ) * CAM_SPEED );
xs_vec_add( flVelocity, flAddVelocity, flVelocity );
}
else if ( iHeightCheck )
{
flVelocity[ 2 ] = 0.0;
}
flAddVelocity[ 2 ] = 0.0;
if ( gflLauchGameTime[ iOwner ] <= get_gametime( ) )
{
flAddVelocity[ 0 ] = ( ( flOriginPlayer[ 0 ] - flOriginCamera[ 0 ] ) * CAM_SPEED );
flAddVelocity[ 1 ] = ( ( flOriginPlayer[ 1 ] - flOriginCamera[ 1 ] ) * CAM_SPEED );
xs_vec_add( flVelocity, flAddVelocity, flVelocity );
}
entity_set_vector( iEnt, EV_VEC_velocity, flVelocity );
flOriginPlayer[ 2 ] += CAM_HEIGHT;
entity_set_aim( iEnt, flOriginCamera, flOriginPlayer );
entity_set_float( iEnt, EV_FL_nextthink, get_gametime( ) );
return PLUGIN_CONTINUE;
}
/* *** GHW_Chronic's Functions *** */
get_offset_origin( iEnt, const Float:flOffset[ 3 ], Float:flOrigin[ 3 ] )
{
if ( is_valid_ent( iEnt ) )
{
new Float:flAngle[ 3 ];
entity_get_vector( iEnt, EV_VEC_origin, flOrigin );
entity_get_vector( iEnt, EV_VEC_angles, flAngle );
flOrigin[ 0 ] += floatcos( flAngle[ 1 ], degrees ) * flOffset[ 0 ];
flOrigin[ 1 ] += floatsin( flAngle[ 1 ], degrees ) * flOffset[ 0 ];
flOrigin[ 2 ] += floatsin( flAngle[ 0 ], degrees ) * flOffset[ 0 ];
flOrigin[ 0 ] += floatcos( flAngle[ 0 ], degrees ) * flOffset[ 0 ];
flOrigin[ 1 ] += floatcos( flAngle[ 1 ], degrees ) * flOffset[ 1 ];
flOrigin[ 0 ] -= floatsin( flAngle[ 1 ], degrees ) * flOffset[ 1 ];
flOrigin[ 2 ] += floatsin( flAngle[ 2 ], degrees ) * flOffset[ 1 ];
flOrigin[ 1 ] += floatcos( flAngle[ 2 ], degrees ) * flOffset[ 1 ];
flOrigin[ 2 ] += floatcos( flAngle[ 2 ], degrees ) * flOffset[ 2 ];
flOrigin[ 1 ] -= floatsin( flAngle[ 2 ], degrees ) * flOffset[ 2 ];
flOrigin[ 2 ] += floatcos( flAngle[ 0 ], degrees ) * flOffset[ 2 ];
flOrigin[ 0 ] -= floatsin( flAngle[ 0 ], degrees ) * flOffset[ 2 ];
flOrigin[ 0 ] -= flOffset[ 0 ];
flOrigin[ 1 ] -= flOffset[ 1 ];
flOrigin[ 2 ] -= flOffset[ 2 ];
}
}
entity_set_aim( iEnt, const Float:flEntOrigin[ 3 ], const Float:flOrigin2[ 3 ] )
{
if ( is_valid_ent( iEnt ) )
{
static Float:flOrigin[ 3 ], Float:flVectorLength, Float:flAimVector[ 3 ], Float:flNewAngles[ 3 ];
flOrigin[ 0 ] = flOrigin2[ 0 ];
flOrigin[ 1 ] = flOrigin2[ 1 ];
flOrigin[ 2 ] = flOrigin2[ 2 ];
flOrigin[ 0 ] -= flEntOrigin[ 0 ];
flOrigin[ 1 ] -= flEntOrigin[ 1 ];
flOrigin[ 2 ] -= flEntOrigin[ 2 ];
flVectorLength = vector_length( flOrigin );
flAimVector[ 0 ] = flOrigin[ 0 ] / flVectorLength;
flAimVector[ 1 ] = flOrigin[ 1 ] / flVectorLength;
flAimVector[ 2 ] = flOrigin[ 2 ] / flVectorLength;
vector_to_angle( flAimVector, flNewAngles );
flNewAngles[ 0 ] *= -1;
if ( flNewAngles[ 1 ] > 180.0 )
{
flNewAngles[ 1 ] -= 360;
}
if ( flNewAngles[ 1 ] < -180.0 )
{
flNewAngles[ 1 ] += 360;
}
if ( flNewAngles[ 1 ] == 180.0 || flNewAngles[ 1 ] == -180.0 )
{
flNewAngles[ 1 ] = -179.999999;
}
entity_set_vector( iEnt, EV_VEC_angles, flNewAngles );
entity_set_int( iEnt, EV_INT_fixangle, 1 );
}
}
/* ******************************* */