Advertisement
useless28

Untitled

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