View Single Post
zmd94
Veteran Member
Join Date: Nov 2013
Location: Malaysia (9w2zow).
Old 11-05-2014 , 22:50   Re: Colored Smokenades
Reply With Quote #99

Just use below. This will give 1 bomb at every respawn for free.
PHP Code:
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <hamsandwich>
#include <cstrike>
#include <fun>

#define VERSION "1.1"

new const g_szClassname[] = "colored_smokenade";

new 
g_szSmokeSprites];
new 
g_Cvar_Enabledg_Cvar_Amount

public plugin_init( ) {
    
register_plugin"Colored Smoke"VERSION"xPaw" );
    
    
register_cvar"colored_smoke"VERSIONFCVAR_SERVER FCVAR_SPONLY );
    
set_cvar_string"colored_smoke"VERSION );
    
    
g_Cvar_Enabled register_cvar"sv_colored_smoke""1" );
    
g_Cvar_Amount register_cvar"sv_grenade_amount""1" // Amount of grenade given
    
    
register_forwardFM_EmitSound"FwdEmitSound" );
    
register_touchg_szClassname"worldspawn""FwdTouch_FakeSmoke" );
    
register_thinkg_szClassname"FwdThink_FakeSmoke" );
    
    
RegisterHam(Ham_Spawn"player""fw_PlayerRespawn"1)
}

public 
plugin_precache( ) {
    
g_szSmokeSprites] = precache_model"sprites/gas_puff_01y.spr" );
    
g_szSmokeSprites] = precache_model"sprites/gas_puff_01r.spr" );
    
g_szSmokeSprites] = precache_model"sprites/gas_puff_01b.spr" );
    
g_szSmokeSprites] = precache_model"sprites/gas_puff_01g.spr" );
    
g_szSmokeSprites] = precache_model"sprites/gas_puff_01m.spr" );
    
g_szSmokeSprites] = precache_model"sprites/gas_puff_01o.spr" );
    
    
precache_sound"weapons/grenade_hit1.wav" );
}

public 
fw_PlayerRespawn(id)
{
    if (
is_user_alive(id))
    {
        
give_itemid"weapon_smokegrenade" )
        
cs_set_user_bpammo(idCSW_SMOKEGRENADEget_pcvar_num(g_Cvar_Amount))
    }
}

public 
FwdEmitSoundiOrigEntiChannel, const szSample[], Float:fVolFloat:fAttniFlagsiPitch ) {
    new 
iCvar get_pcvar_numg_Cvar_Enabled );
    if( 
iCvar ) {
        static const 
szSmokeSound[] = "weapons/sg_explode.wav";
        
        if( 
equalszSampleszSmokeSound ) ) {
            
// cache origin, angles and model
            
new Float:vOrigin], Float:vAngles], szModel64 ], iOwner;
            
iOwner entity_get_edictiOrigEntEV_ENT_owner );
            
entity_get_vectoriOrigEntEV_VEC_originvOrigin );
            
entity_get_vectoriOrigEntEV_VEC_anglesvAngles );
            
entity_get_stringiOrigEntEV_SZ_modelszModelcharsmaxszModel ) );
            
            
// remove entity from world
            
entity_set_vectoriOrigEntEV_VEC_originFloat:{ 9999.99999.99999.9 } );
            
entity_set_intiOrigEntEV_INT_flagsFL_KILLME );
            
            
// create new entity
            
new iEntity create_entity"info_target" );
            if( 
iEntity ) {
                
entity_set_stringiEntityEV_SZ_classnameg_szClassname );
                
                
entity_set_originiEntityvOrigin );
                
entity_set_vectoriEntityEV_VEC_anglesvAngles );
                
                
entity_set_intiEntityEV_INT_movetypeMOVETYPE_TOSS );
                
entity_set_intiEntityEV_INT_solidSOLID_BBOX );
                
                
entity_set_floatiEntityEV_FL_nextthinkget_gametime( ) + 21.5 );
                
entity_set_floatiEntityEV_FL_gravity0.5 );
                
entity_set_floatiEntityEV_FL_friction0.8 );
                
                
entity_set_modeliEntityszModel );
                
                new 
Float:vVelocity];
                
vVelocity] = random_float( -220.0220.0 );
                
vVelocity] = random_float( -220.0220.0 );
                
vVelocity] = random_float(  200.0300.0 );
                
entity_set_vectoriEntityEV_VEC_velocityvVelocity );
                
                
emit_soundiEntityiChannelszSamplefVolfAttniFlagsiPitch );
                
                
// Create fake smoke
                
new iSmoke;
                
                if( 
iCvar == )
                    
iSmoke get_user_teamiOwner ); // i did indexes as team, 1 - red, 2 - blue, 3 - green( spec oO )
                
else
                    
iSmoke random_num0);
                
                
// Store the smoke number in entity, we will use it later
                
entity_set_intiEntityEV_INT_iuser4iSmoke );
                
                
message_beginMSG_BROADCASTSVC_TEMPENTITY );
                
write_byteTE_FIREFIELD );
                
engfuncEngFunc_WriteCoordvOrigin] );
                
engfuncEngFunc_WriteCoordvOrigin] );
                
engfuncEngFunc_WriteCoordvOrigin] + 50 );
                
write_short100 );
                
write_shortg_szSmokeSpritesiSmoke ] );
                
write_byte100 );
                
write_byteTEFIRE_FLAG_ALPHA );
                
write_byte1000 );
                
message_end();
                
                
message_beginMSG_BROADCASTSVC_TEMPENTITY );
                
write_byteTE_FIREFIELD );
                
engfuncEngFunc_WriteCoordvOrigin] );
                
engfuncEngFunc_WriteCoordvOrigin] );
                
engfuncEngFunc_WriteCoordvOrigin] + 50 );
                
write_short150 );
                
write_shortg_szSmokeSpritesiSmoke ] );
                
write_byte10 );
                
write_byteTEFIRE_FLAG_ALPHA TEFIRE_FLAG_SOMEFLOAT );
                
write_byte1000 );
                
message_end( );
            }
        }
    }
}

public 
FwdTouch_FakeSmokeiEntityiWorld ) {
    if( !
is_valid_entiEntity ) )
        return 
PLUGIN_CONTINUE;
    
    
// Bounce sound
    
emit_soundiEntityCHAN_VOICE"weapons/grenade_hit1.wav"0.25ATTN_NORM0PITCH_NORM );
    
    new 
Float:vVelocity];
    
entity_get_vectoriEntityEV_VEC_velocityvVelocity );
    
    if( 
vVelocity] <= 0.0 && vVelocity] <= 0.0 ) {
        new 
Float:vOrigin];
        new 
iSmoke entity_get_intiEntityEV_INT_iuser4 );
        
entity_get_vectoriEntityEV_VEC_originvOrigin );
        
        
// Make small smoke near grenade on ground
        
message_beginMSG_BROADCASTSVC_TEMPENTITY );
        
write_byteTE_FIREFIELD );
        
engfuncEngFunc_WriteCoordvOrigin] );
        
engfuncEngFunc_WriteCoordvOrigin] );
        
engfuncEngFunc_WriteCoordvOrigin] + 10 );
        
write_short);
        
write_shortg_szSmokeSpritesiSmoke ] );
        
write_byte);
        
write_byteTEFIRE_FLAG_ALLFLOAT TEFIRE_FLAG_ALPHA );
        
write_byte30 );
        
message_end();
    }
    
    return 
PLUGIN_CONTINUE;
}

public 
FwdThink_FakeSmokeiEntity ) {
    if( !
is_valid_entiEntity ) )
        return 
PLUGIN_CONTINUE;
    
    
remove_entityiEntity );
    
    return 
PLUGIN_CONTINUE;

If you want to edit the value, just edit this part:
PHP Code:
g_Cvar_Amount register_cvar"sv_grenade_amount""1" // Amount of grenade given 

Last edited by zmd94; 11-05-2014 at 22:51.
zmd94 is offline