HLMOD.HU Forrás Megtekintés - www.hlmod.hu
  1.  
  2. #include < amxmodx >
  3.  
  4. #include < fakemeta >
  5. #include < engine >
  6. #include < fun >
  7. #include < hamsandwich >
  8.  
  9. #pragma semicolon 1
  10.  
  11. #define SMOKE_ID 071192
  12. #define pev_valid2(%1) ( pev( %1, pev_iuser4 ) == SMOKE_ID ) ? 1 : 0
  13.  
  14. new gSmokeLightEnable;
  15. new gLightTime;
  16. new gDeployTime;
  17. new gSpriteTrail;
  18. new gSpriteCircle;
  19. new gSpriteSmoke;
  20. new gTrailEnable;
  21. new gCylinderEnable;
  22. new gGlowColorCvar;
  23. new gSmokeCvar;
  24. new gSmokeBonus;
  25.  
  26. new Float:flOrigin[ 3 ];
  27. new iOrigin[ 3 ];
  28.  
  29. new const gSmokeModel[ ] = "models/w_smokegrenade.mdl";
  30.  
  31. new const gSmokeStartSound[ ] = "items/nvg_on.wav";
  32. new const gSmokeStopSound[ ] = "items/nvg_off.wav";
  33.  
  34. public plugin_init( )
  35. {
  36. register_plugin( "Light Smoke Grenade", "2.0.0", "tuty" );
  37.  
  38. register_forward( FM_SetModel, "forward_SetModel" );
  39. register_forward( FM_Think, "forward_Think" );
  40.  
  41. RegisterHam( Ham_Spawn, "player", "bacon_Spawn", 1 );
  42.  
  43. gSmokeLightEnable = register_cvar( "lightsmoke_enabled", "1" );
  44. gLightTime = register_cvar( "lightsmoke_light_duration", "20.0" );
  45. gDeployTime = register_cvar( "lightsmoke_deploytime", "3.0" );
  46. gTrailEnable = register_cvar( "lightsmoke_trail", "1" );
  47. gCylinderEnable = register_cvar( "lightsmoke_cylinder", "1" );
  48. gSmokeCvar = register_cvar( "lightsmoke_smoke", "1" );
  49. gGlowColorCvar = register_cvar( "lightsmoke_glow_color", "255 255 255" );
  50. gSmokeBonus = register_cvar( "lightsmoke_bonus", "1" );
  51. }
  52.  
  53. public plugin_precache( )
  54. {
  55. gSpriteTrail = precache_model( "sprites/laserbeam.spr" );
  56. gSpriteCircle = precache_model( "sprites/shockwave.spr" );
  57. gSpriteSmoke = precache_model( "sprites/steam1.spr" );
  58.  
  59. precache_model( gSmokeModel );
  60.  
  61. precache_sound( gSmokeStartSound );
  62. precache_sound( gSmokeStopSound );
  63. }
  64.  
  65. public bacon_Spawn( id )
  66. {
  67. if( is_user_alive( id )
  68. && get_pcvar_num( gSmokeLightEnable ) == 1
  69. && get_pcvar_num( gSmokeBonus ) == 1 )
  70. {
  71. give_item( id, "weapon_smokegrenade" );
  72. }
  73. }
  74.  
  75. public forward_SetModel( iEnt, const szModel[ ] )
  76. {
  77. if( !pev_valid( iEnt )
  78. || get_pcvar_num( gSmokeLightEnable ) == 0
  79. || !equal( szModel[ 9 ], "smokegrenade.mdl" ) )
  80. {
  81. return FMRES_IGNORED;
  82. }
  83.  
  84. static szClassname[ 32 ];
  85. pev( iEnt, pev_classname, szClassname, charsmax( szClassname ) );
  86.  
  87. if( equal( szClassname, "grenade" ) )
  88. {
  89. if( get_pcvar_num( gTrailEnable ) == 1 )
  90. {
  91. UTIL_TrailSprite( iEnt );
  92. }
  93.  
  94. engfunc( EngFunc_SetModel, iEnt, gSmokeModel );
  95. set_task( get_pcvar_float( gDeployTime ), "deploy_smoke", iEnt );
  96.  
  97. set_pev( iEnt, pev_iuser4, SMOKE_ID );
  98. set_pev( iEnt, pev_nextthink, get_gametime( ) + get_pcvar_float( gLightTime ) );
  99.  
  100. new szColor[ 12 ], iRgb[ 3 ][ 4 ], iR, iG, iB;
  101. get_pcvar_string( gGlowColorCvar, szColor, charsmax( szColor ) );
  102.  
  103. parse( szColor, iRgb[ 0 ], 3, iRgb[ 1 ], 3, iRgb[ 2 ], 3 );
  104.  
  105. iR = clamp( str_to_num( iRgb[ 0 ] ) , 0, 255 );
  106. iG = clamp( str_to_num( iRgb[ 1 ] ) , 0, 255 );
  107. iB = clamp( str_to_num( iRgb[ 2 ] ) , 0, 255 );
  108.  
  109. set_rendering( iEnt, kRenderFxGlowShell, iR, iG, iB, kRenderNormal, 18 );
  110.  
  111. return FMRES_SUPERCEDE;
  112. }
  113.  
  114. return FMRES_IGNORED;
  115. }
  116.  
  117. public deploy_smoke( iEnt )
  118. {
  119. if( pev_valid( iEnt ) )
  120. {
  121. if( get_pcvar_num( gCylinderEnable ) == 1 )
  122. {
  123. UTIL_BlastCircle( iEnt );
  124. }
  125.  
  126. set_pev( iEnt, pev_effects, EF_DIMLIGHT );
  127. emit_sound( iEnt, CHAN_ITEM, gSmokeStartSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
  128. }
  129. }
  130.  
  131. public forward_Think( iEnt )
  132. {
  133. if( pev_valid( iEnt )
  134. && get_pcvar_num( gSmokeLightEnable ) == 1
  135. && pev_valid2( iEnt ) )
  136. {
  137. if( get_pcvar_num( gSmokeCvar ) == 1 )
  138. {
  139. pev( iEnt, pev_origin, flOrigin );
  140. FVecIVec( flOrigin, iOrigin );
  141.  
  142. new x = iOrigin[ 0 ];
  143. new y = iOrigin[ 1 ];
  144. new z = iOrigin[ 2 ];
  145.  
  146. UTIL_Smoke( x + 50, y, z );
  147. UTIL_Smoke( x, y + 50, z );
  148. UTIL_Smoke( x - 50, y, z );
  149. UTIL_Smoke( x, y - 50, z );
  150. UTIL_Smoke( x + 35, y + 35, z );
  151. UTIL_Smoke( x + 35, y - 35, z );
  152. UTIL_Smoke( x - 35, y + 35, z );
  153. UTIL_Smoke( x - 35, y - 35, z );
  154. }
  155.  
  156. emit_sound( iEnt, CHAN_ITEM, gSmokeStopSound, VOL_NORM, ATTN_NORM, 0, PITCH_NORM );
  157. set_pev( iEnt, pev_flags, FL_KILLME );
  158. }
  159. }
  160.  
  161. stock UTIL_TrailSprite( ent )
  162. {
  163. message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
  164. write_byte( TE_BEAMFOLLOW );
  165. write_short( ent );
  166. write_short( gSpriteTrail );
  167. write_byte( 3 );
  168. write_byte( 7 );
  169. write_byte( 255 );
  170. write_byte( 255 );
  171. write_byte( 255 );
  172. write_byte( 100 );
  173. message_end( );
  174. }
  175.  
  176. stock UTIL_BlastCircle( ent )
  177. {
  178. pev( ent, pev_origin, flOrigin );
  179. FVecIVec( flOrigin, iOrigin );
  180.  
  181. message_begin( MSG_BROADCAST, SVC_TEMPENTITY, iOrigin );
  182. write_byte( TE_BEAMCYLINDER );
  183. write_coord( iOrigin[ 0 ] );
  184. write_coord( iOrigin[ 1 ] );
  185. write_coord( iOrigin[ 2 ] );
  186. write_coord( iOrigin[ 0 ] );
  187. write_coord( iOrigin[ 1 ] );
  188. write_coord( iOrigin[ 2 ] + 220 ) ;
  189. write_short( gSpriteCircle );
  190. write_byte( 0 );
  191. write_byte( 1 );
  192. write_byte( 6 );
  193. write_byte( 8 );
  194. write_byte( 1 );
  195. write_byte( 255 );
  196. write_byte( 255 );
  197. write_byte( 255 );
  198. write_byte( 128 );
  199. write_byte( 5 );
  200. message_end( );
  201. }
  202.  
  203. stock UTIL_Smoke( x, y, z )
  204. {
  205. message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
  206. write_byte( TE_SMOKE );
  207. write_coord( x );
  208. write_coord( y );
  209. write_coord( z );
  210. write_short( gSpriteSmoke );
  211. write_byte( 12 );
  212. write_byte( 3 );
  213. message_end( );
  214. }
  215.