Advertisement
Guest User

Untitled

a guest
Feb 18th, 2020
2,012
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.99 KB | None | 0 0
  1. #include <amxmodx>
  2. #include <engine>
  3. #include <fakemeta>
  4.  
  5. #if !defined write_coord_f
  6. #define write_coord_f(%1) engfunc( EngFunc_WriteCoord, %1 )
  7. #endif
  8.  
  9. #define VERSION "1.06"
  10. #define SMOKE_SPRITE "sprites/gas_puff_01y.spr"
  11.  
  12. new const g_szClassname[] = "custom_smoke";
  13. new g_fwid
  14. new g_evCreateSmoke;
  15. new g_szSmokeSprite;
  16. new g_Cvar_Enabled;
  17. new g_Cvar_Duration;
  18. new g_Cvar_CountSprites;
  19. new g_Clear;
  20. new g_iCvar_Enebled;
  21. new g_iCountSprites;
  22.  
  23. public plugin_init( )
  24. {
  25. register_plugin( "Custom Smoke", VERSION, "bionext" );
  26.  
  27. g_Clear = 0;
  28. g_iCvar_Enebled = 0;
  29. g_Cvar_Enabled = register_cvar( "sv_customsmoke", "1" );
  30. g_Cvar_Duration = register_cvar( "sv_smokeduration", "10.0" );
  31. g_Cvar_CountSprites = register_cvar( "sv_smokespritescount", "100" );
  32.  
  33. unregister_forward(FM_PrecacheEvent, g_fwid, 1);
  34.  
  35. register_think( g_szClassname, "FwdThink_BlackSmoke" );
  36. register_forward(FM_PlaybackEvent, "FwdPlaybackEvent");
  37. register_logevent("FwdClear", 2, "1=Round_End");
  38. register_logevent("FwdStart", 2, "1=Round_Start");
  39. register_event("TextMsg", "FwdClear", "a", "2=#Game_will_restart_in","2=#Game_Commencing");
  40. }
  41.  
  42. public FwdClear( )
  43. {
  44. g_Clear = 1;
  45. }
  46.  
  47. public FwdStart( )
  48. {
  49. g_iCvar_Enebled = get_pcvar_num( g_Cvar_Enabled );
  50. g_Clear = 0;
  51. }
  52.  
  53. public plugin_precache( )
  54. {
  55. g_szSmokeSprite = precache_model( SMOKE_SPRITE );
  56. g_fwid = register_forward(FM_PrecacheEvent, "FwdPrecacheEvent", 1);
  57. force_unmodified(force_exactfile, {0,0,0},{0,0,0}, SMOKE_SPRITE);
  58. }
  59.  
  60. public FwdPlaybackEvent( iFlags , iEntity , iEventindex, Float:fDelay, Float:vOrigin[3], Float:vAngles[3], Float:fParam1, Float:fParam2, iParam1, iParam2, iBparam1, iBparam2 )
  61. {
  62. if(iEventindex != g_evCreateSmoke || iBparam2 || !g_iCvar_Enebled)
  63. return FMRES_IGNORED;
  64.  
  65. new iEnt = create_entity( "info_target" );
  66.  
  67. if( !iEnt )
  68. return FMRES_IGNORED;
  69.  
  70. g_iCountSprites = get_pcvar_num( g_Cvar_CountSprites );
  71. new Float:fDuration = get_pcvar_float( g_Cvar_Duration );
  72.  
  73. entity_set_string( iEnt, EV_SZ_classname, g_szClassname );
  74. entity_set_float( iEnt, EV_FL_nextthink, get_gametime( ));
  75. entity_set_vector( iEnt, EV_VEC_origin, vOrigin );
  76. entity_set_float( iEnt, EV_FL_animtime, fDuration );
  77.  
  78. return FMRES_SUPERCEDE;
  79. }
  80.  
  81. public FwdPrecacheEvent(type, const name[])
  82. {
  83. if (equal("events/createsmoke.sc", name))
  84. {
  85. g_evCreateSmoke = get_orig_retval();
  86. return FMRES_HANDLED;
  87. }
  88.  
  89. return FMRES_IGNORED;
  90. }
  91.  
  92. public FwdThink_BlackSmoke( iEntity )
  93. {
  94. if( !is_valid_ent( iEntity ) )
  95. return PLUGIN_CONTINUE;
  96.  
  97. if( g_Clear > 0 )
  98. {
  99. entity_set_int( iEntity,EV_INT_flags, FL_KILLME );
  100. return PLUGIN_CONTINUE;
  101. }
  102.  
  103. new Float:vOrigin[3];
  104. entity_get_vector( iEntity, EV_VEC_origin, vOrigin );
  105.  
  106. message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
  107. write_byte( TE_FIREFIELD );
  108. write_coord_f( vOrigin[ 0 ] );
  109. write_coord_f( vOrigin[ 1 ] );
  110. write_coord_f( vOrigin[ 2 ] + 50 );
  111. write_short( 100 );
  112. write_short( g_szSmokeSprite );
  113. write_byte( g_iCountSprites );
  114. write_byte( TEFIRE_FLAG_ALPHA );
  115. write_byte( 11 );
  116. message_end();
  117.  
  118. message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
  119. write_byte( TE_FIREFIELD );
  120. write_coord_f( vOrigin[ 0 ] );
  121. write_coord_f( vOrigin[ 1 ] );
  122. write_coord_f( vOrigin[ 2 ] + 50 );
  123. write_short( 150 );
  124. write_short( g_szSmokeSprite );
  125. write_byte( 10 );
  126. write_byte( TEFIRE_FLAG_ALPHA | TEFIRE_FLAG_SOMEFLOAT );
  127. write_byte( 11 );
  128. message_end( );
  129.  
  130. new Float:time = entity_get_float(iEntity,EV_FL_animtime);
  131. time = time - 1.0;
  132.  
  133. if( time > 0.0 )
  134. {
  135. entity_set_float( iEntity, EV_FL_nextthink, get_gametime( ) + 1.0 );
  136. entity_set_float( iEntity, EV_FL_animtime, time );
  137. }
  138. else
  139. {
  140. entity_set_int( iEntity,EV_INT_flags, FL_KILLME );
  141. }
  142.  
  143. return PLUGIN_CONTINUE;
  144. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement