HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1. #include < amxmodx >
  2. #include < engine >
  3. #include < hamsandwich >
  4. #include < xs >
  5. #include < fakemeta >
  6.  
  7. #pragma semicolon 1
  8.  
  9. #define PI 3.14
  10. #define SQRTTWO 1.41
  11. #define CAM_HEIGHT 18.0
  12. #define CAM_LIM 10.0
  13. #define CAM_AIMING_OFFSET 10.0
  14. #define CAM_CLASS "RotatingCam"
  15.  
  16. #define CAM_SPEED 2
  17. #define CAM_RADIUS 50.0
  18.  
  19. new Float:gflLauchGameTime[ 32 + 1 ];
  20. new Float:gflTimeToReachPosition;
  21.  
  22. public plugin_init( )
  23. {
  24. register_plugin( "Golden Eye Spawn Camera", "1.0.0", "Kid" );
  25.  
  26. register_think( CAM_CLASS, "thinkRotatingCam" );
  27. RegisterHam( Ham_Spawn, "player", "spawn_effect", 1 );
  28. RegisterHam( Ham_Spawn, "player", "spawn_effect2", 1 );
  29.  
  30. gflTimeToReachPosition = ( ( 1.5 * PI ) / ( CAM_SPEED * SQRTTWO ) );
  31. }
  32.  
  33. public spawn_effect2(id)
  34. {
  35. if(is_user_alive(id))
  36. {
  37. set_pev( id, pev_flags, pev( id, pev_flags ) | FL_FROZEN );
  38. }
  39. }
  40.  
  41. public spawn_effect( id )
  42. {
  43. gflLauchGameTime[ id ] = ( get_gametime( ) + gflTimeToReachPosition );
  44.  
  45. new iEnt = create_entity( "info_target" );
  46. if ( is_valid_ent( iEnt ) && is_user_alive( id ) )
  47. {
  48. new Float:flOrigin[ 3 ], Float:flOffset[ 3 ];
  49. flOffset[ 1 ] = CAM_RADIUS;
  50. flOffset[ 2 ] = CAM_HEIGHT;
  51.  
  52. entity_set_string( iEnt, EV_SZ_classname, CAM_CLASS );
  53. entity_set_model( iEnt, "models/w_usp.mdl" );
  54. entity_set_byte( iEnt, EV_INT_solid, SOLID_NOT );
  55. entity_set_int( iEnt, EV_INT_movetype, MOVETYPE_NOCLIP );
  56. entity_set_edict( iEnt, EV_ENT_owner, id );
  57.  
  58. get_offset_origin( id, flOffset, flOrigin );
  59. entity_set_vector( iEnt, EV_VEC_origin, flOrigin );
  60.  
  61. entity_set_int( iEnt, EV_INT_rendermode, kRenderTransTexture );
  62. entity_set_float( iEnt, EV_FL_renderamt, 0.0 );
  63.  
  64. attach_view( id, iEnt );
  65. entity_set_float( iEnt, EV_FL_nextthink, get_gametime( ) );
  66. }
  67. }
  68.  
  69. public thinkRotatingCam( iEnt )
  70. {
  71. static iOwner;
  72. iOwner = entity_get_edict( iEnt, EV_ENT_owner );
  73.  
  74. new iFlags = pev( iOwner, pev_flags );
  75.  
  76. if ( !is_user_alive( iOwner ) )
  77. {
  78. remove_entity( iEnt );
  79. set_pev( iOwner, pev_flags, iFlags & ~FL_FROZEN );
  80. return PLUGIN_CONTINUE;
  81. }
  82.  
  83. static Float:flOriginCamera[ 3 ], Float:flOriginPlayer[ 3 ], Float:flVelocity[ 3 ], Float:flAddVelocity[ 3 ], Float:flOffset[ 3 ], iHeightCheck;
  84. entity_get_vector( iEnt, EV_VEC_origin, flOriginCamera );
  85. flOffset[ 0 ] = CAM_AIMING_OFFSET;
  86. get_offset_origin( iOwner, flOffset, flOriginPlayer );
  87.  
  88. if ( floatsqroot( floatpower( ( flOriginPlayer[ 0 ] - flOriginCamera[ 0 ] ), 2.0 ) + floatpower( ( flOriginPlayer[ 1 ] - flOriginCamera[ 1 ] ), 2.0 ) ) <= CAM_LIM )
  89. {
  90. remove_entity( iEnt );
  91. attach_view( iOwner, iOwner );
  92. set_pev( iOwner, pev_flags, iFlags & ~FL_FROZEN );
  93. return PLUGIN_CONTINUE;
  94. }
  95.  
  96. flVelocity[ 0 ] = ( ( flOriginCamera[ 1 ] - flOriginPlayer[ 1 ] ) * CAM_SPEED );
  97. flVelocity[ 1 ] = ( ( flOriginPlayer[ 0 ] - flOriginCamera[ 0 ] ) * CAM_SPEED );
  98.  
  99. entity_get_vector( iEnt, EV_VEC_velocity, flAddVelocity );
  100. flAddVelocity[ 0 ] = flAddVelocity[ 1 ] = 0.0;
  101. if ( !( iHeightCheck = ( -0.25 <= ( flOriginCamera[ 2 ] - ( flOriginPlayer[ 2 ] + CAM_HEIGHT ) ) <= 0.25 ) ) && ( flAddVelocity[ 2 ] == 0.0 ) )
  102. {
  103. flAddVelocity[ 2 ] = ( ( flOriginPlayer[ 2 ] - flOriginCamera[ 2 ] ) * CAM_SPEED );
  104. xs_vec_add( flVelocity, flAddVelocity, flVelocity );
  105. }
  106. else if ( iHeightCheck )
  107. {
  108. flVelocity[ 2 ] = 0.0;
  109. }
  110. flAddVelocity[ 2 ] = 0.0;
  111.  
  112. if ( gflLauchGameTime[ iOwner ] <= get_gametime( ) )
  113. {
  114. flAddVelocity[ 0 ] = ( ( flOriginPlayer[ 0 ] - flOriginCamera[ 0 ] ) * CAM_SPEED );
  115. flAddVelocity[ 1 ] = ( ( flOriginPlayer[ 1 ] - flOriginCamera[ 1 ] ) * CAM_SPEED );
  116. xs_vec_add( flVelocity, flAddVelocity, flVelocity );
  117. }
  118.  
  119. entity_set_vector( iEnt, EV_VEC_velocity, flVelocity );
  120.  
  121. flOriginPlayer[ 2 ] += CAM_HEIGHT;
  122. entity_set_aim( iEnt, flOriginCamera, flOriginPlayer );
  123.  
  124. entity_set_float( iEnt, EV_FL_nextthink, get_gametime( ) );
  125.  
  126. return PLUGIN_CONTINUE;
  127. }
  128.  
  129. /* *** GHW_Chronic's Functions *** */
  130. get_offset_origin( iEnt, const Float:flOffset[ 3 ], Float:flOrigin[ 3 ] )
  131. {
  132. if ( is_valid_ent( iEnt ) )
  133. {
  134. new Float:flAngle[ 3 ];
  135. entity_get_vector( iEnt, EV_VEC_origin, flOrigin );
  136. entity_get_vector( iEnt, EV_VEC_angles, flAngle );
  137.  
  138. flOrigin[ 0 ] += floatcos( flAngle[ 1 ], degrees ) * flOffset[ 0 ];
  139. flOrigin[ 1 ] += floatsin( flAngle[ 1 ], degrees ) * flOffset[ 0 ];
  140.  
  141. flOrigin[ 2 ] += floatsin( flAngle[ 0 ], degrees ) * flOffset[ 0 ];
  142. flOrigin[ 0 ] += floatcos( flAngle[ 0 ], degrees ) * flOffset[ 0 ];
  143.  
  144. flOrigin[ 1 ] += floatcos( flAngle[ 1 ], degrees ) * flOffset[ 1 ];
  145. flOrigin[ 0 ] -= floatsin( flAngle[ 1 ], degrees ) * flOffset[ 1 ];
  146.  
  147. flOrigin[ 2 ] += floatsin( flAngle[ 2 ], degrees ) * flOffset[ 1 ];
  148. flOrigin[ 1 ] += floatcos( flAngle[ 2 ], degrees ) * flOffset[ 1 ];
  149.  
  150. flOrigin[ 2 ] += floatcos( flAngle[ 2 ], degrees ) * flOffset[ 2 ];
  151. flOrigin[ 1 ] -= floatsin( flAngle[ 2 ], degrees ) * flOffset[ 2 ];
  152.  
  153. flOrigin[ 2 ] += floatcos( flAngle[ 0 ], degrees ) * flOffset[ 2 ];
  154. flOrigin[ 0 ] -= floatsin( flAngle[ 0 ], degrees ) * flOffset[ 2 ];
  155.  
  156. flOrigin[ 0 ] -= flOffset[ 0 ];
  157. flOrigin[ 1 ] -= flOffset[ 1 ];
  158. flOrigin[ 2 ] -= flOffset[ 2 ];
  159. }
  160. }
  161.  
  162. entity_set_aim( iEnt, const Float:flEntOrigin[ 3 ], const Float:flOrigin2[ 3 ] )
  163. {
  164. if ( is_valid_ent( iEnt ) )
  165. {
  166. static Float:flOrigin[ 3 ], Float:flVectorLength, Float:flAimVector[ 3 ], Float:flNewAngles[ 3 ];
  167.  
  168. flOrigin[ 0 ] = flOrigin2[ 0 ];
  169. flOrigin[ 1 ] = flOrigin2[ 1 ];
  170. flOrigin[ 2 ] = flOrigin2[ 2 ];
  171.  
  172. flOrigin[ 0 ] -= flEntOrigin[ 0 ];
  173. flOrigin[ 1 ] -= flEntOrigin[ 1 ];
  174. flOrigin[ 2 ] -= flEntOrigin[ 2 ];
  175.  
  176. flVectorLength = vector_length( flOrigin );
  177.  
  178. flAimVector[ 0 ] = flOrigin[ 0 ] / flVectorLength;
  179. flAimVector[ 1 ] = flOrigin[ 1 ] / flVectorLength;
  180. flAimVector[ 2 ] = flOrigin[ 2 ] / flVectorLength;
  181.  
  182. vector_to_angle( flAimVector, flNewAngles );
  183.  
  184. flNewAngles[ 0 ] *= -1;
  185.  
  186. if ( flNewAngles[ 1 ] > 180.0 )
  187. {
  188. flNewAngles[ 1 ] -= 360;
  189. }
  190. if ( flNewAngles[ 1 ] < -180.0 )
  191. {
  192. flNewAngles[ 1 ] += 360;
  193. }
  194. if ( flNewAngles[ 1 ] == 180.0 || flNewAngles[ 1 ] == -180.0 )
  195. {
  196. flNewAngles[ 1 ] = -179.999999;
  197. }
  198.  
  199. entity_set_vector( iEnt, EV_VEC_angles, flNewAngles );
  200. entity_set_int( iEnt, EV_INT_fixangle, 1 );
  201. }
  202. }
  203. /* ******************************* */
  204.