Как то странно, нашел плагин с временем дыма, через квар
Ставлю 60 сек в кваре, дым все равно пропадает через 25 секунд
Вот это строка, которая отвечает за время дыма, но она почему то не работает, как исправить?
Код:
set_pev(iEnt, pev_nextthink, get_gametime() + get_pcvar_float(g_pCvarLife));
Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <engine>
#pragma semicolon 1
#define PLUGIN "GasNades"
#define AUTHOR "ConnorMcLeod / xPaw"
#define VERSION "2.0.0b_HosFix"
#define GASP_SOUND1 "player/gasp1.wav"
#define GASP_SOUND2 "player/gasp2.wav"
#define PEV_PDATA_SAFE 2
#define OFFSET_TEAM 114
#define fm_get_user_team(%1) get_pdata_int(%1,OFFSET_TEAM)
#define GASNADE_HURT -666
#define GASNADE_HEAL -777
new g_pCvarRadius, g_pCvarCheckTime, g_pCvarDmg, g_pCvarFF, g_pCvarLife;
new mp_friendlyfire;
new g_iMaxPlayers;
#define NADE_TEAM pev_iuser2
#define FIRST_THINK 39546
#define FIRST_TOUCH 23921
new g_szSmokeSprites[ 6 ];
new const g_szClassname[] = "colored_smokenade";
public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR );
g_pCvarDmg = register_cvar("amx_gasdmg", "5");
g_pCvarRadius = register_cvar("amx_gasradius", "160");
g_pCvarCheckTime = register_cvar("amx_gascheck", "10");
g_pCvarFF = register_cvar("amx_gasobeyFF", "1");
g_pCvarLife = register_cvar("amx_gaslife", "60");
register_event("HLTV", "Event_HLTV_NewRound", "a", "1=0", "2=0");
g_iMaxPlayers = get_maxplayers();
mp_friendlyfire = get_cvar_pointer("mp_friendlyfire");
Event_HLTV_NewRound();
register_forward(FM_EmitSound, "EmitSound");
RegisterHam(Ham_Touch, "trigger_hurt", "HurtTouch");
RegisterHam(Ham_Think, "trigger_hurt", "HurtThink");
// colored
register_touch( g_szClassname, "worldspawn", "FwdTouch_FakeSmoke" );
register_think( g_szClassname, "FwdThink_FakeSmoke" );
}
public plugin_precache()
{
precache_sound(GASP_SOUND1);
precache_sound(GASP_SOUND2);
g_szSmokeSprites[ 0 ] = precache_model( "sprites/gas_puff_01y.spr" );
g_szSmokeSprites[ 1 ] = precache_model( "sprites/gas_puff_01r.spr" );
g_szSmokeSprites[ 2 ] = precache_model( "sprites/gas_puff_01b.spr" );
g_szSmokeSprites[ 3 ] = precache_model( "sprites/gas_puff_01g.spr" );
g_szSmokeSprites[ 4 ] = precache_model( "sprites/gas_puff_01m.spr" );
g_szSmokeSprites[ 5 ] = precache_model( "sprites/gas_puff_01o.spr" );
}
public plugin_pause()
{
new iEnt = FM_NULLENT;
while( (iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "trigger_hurt")) > 0 )
{
if( pev(iEnt, pev_iuser1) == GASNADE_HURT )
engfunc(EngFunc_RemoveEntity, iEnt);
}
}
public Event_HLTV_NewRound()
{
new iEnt = FM_NULLENT;
while( (iEnt = engfunc(EngFunc_FindEntityByString, iEnt, "classname", "trigger_hurt")) > 0 )
{
if( pev(iEnt, pev_iuser1) == GASNADE_HURT )
engfunc(EngFunc_RemoveEntity, iEnt);
}
}
public EmitSound(iEntity, iChannel, const szSample[], Float:fVol, Float:fAttn, iFlags, iPitch)
{
if( !equal(szSample, "weapons/sg_explode.wav") )
return;
new iEnt = engfunc( EngFunc_CreateNamedEntity , engfunc( EngFunc_AllocString, "trigger_hurt") );
dllfunc(DLLFunc_Spawn, iEnt);
new Float:fRadius = get_pcvar_float(g_pCvarRadius);
new Float:fMins[3], Float:fMaxs[3];
for(new i; i<3; i++)
{
fMins[i] = -fRadius;
fMaxs[i] = fRadius;
}
engfunc(EngFunc_SetSize , iEnt , fMins , fMaxs );
new Float:fOrigin[3];
pev(iEntity, pev_origin, fOrigin);
engfunc(EngFunc_SetOrigin, iEnt, fOrigin);
set_pev(iEnt, pev_dmg, get_pcvar_float(g_pCvarDmg));
set_pev(iEnt, pev_iuser1, GASNADE_HURT);
//new iOwner = pev(iEntity, pev_owner);
new iOwner = entity_get_edict( iEntity, EV_ENT_owner );
if( pev_valid(iOwner) == PEV_PDATA_SAFE )
{
set_pev(iEnt, NADE_TEAM, fm_get_user_team(iOwner));
set_pev(iEnt, pev_owner, iOwner);
}
set_pev(iEnt, pev_nextthink, get_gametime() + get_pcvar_float(g_pCvarLife));
// colored
// cache origin, angles and model
new Float:vAngles[ 3 ], szModel[ 64 ];
entity_get_vector( iEntity, EV_VEC_origin, fOrigin );
entity_get_vector( iEntity, EV_VEC_angles, vAngles );
entity_get_string( iEntity, EV_SZ_model, szModel, charsmax( szModel ) );
// remove entity from world
entity_set_vector( iEntity, EV_VEC_origin, Float:{ 9999.9, 9999.9, 9999.9 } );
entity_set_int( iEntity, EV_INT_flags, FL_KILLME );
// create new entity
new lol = create_entity( "info_target" );
if( lol > 0 ) {
entity_set_string( lol, EV_SZ_classname, g_szClassname );
entity_set_origin( lol, fOrigin );
entity_set_vector( lol, EV_VEC_angles, vAngles );
entity_set_int( lol, EV_INT_movetype, MOVETYPE_PUSH );
entity_set_int( lol, EV_INT_solid, SOLID_BBOX );
entity_set_float( lol, EV_FL_nextthink, get_gametime( ) + get_pcvar_float(g_pCvarLife) + 0.5 );
entity_set_float( lol, EV_FL_gravity, 0.5 );
entity_set_float( lol, EV_FL_friction, 0.8 );
entity_set_model( lol, szModel );
new Float:vVelocity[ 3 ];
vVelocity[ 0 ] = random_float( -220.0, 220.0 );
vVelocity[ 1 ] = random_float( -220.0, 220.0 );
vVelocity[ 2 ] = random_float( 200.0, 300.0 );
entity_set_vector( lol, EV_VEC_velocity, vVelocity );
emit_sound( lol, iChannel, szSample, fVol, fAttn, iFlags, iPitch );
// Create fake smoke
new iSmoke = iSmoke = random_num( 0, 5 );
message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( TE_FIREFIELD );
engfunc( EngFunc_WriteCoord, fOrigin[ 0 ] );
engfunc( EngFunc_WriteCoord, fOrigin[ 1 ] );
engfunc( EngFunc_WriteCoord, fOrigin[ 2 ] + 50 );
write_short( 100 );
write_short( g_szSmokeSprites[ iSmoke ] );
write_byte( 100 );
write_byte( TEFIRE_FLAG_ALPHA );
write_byte( 1000 );
message_end();
message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( TE_FIREFIELD );
engfunc( EngFunc_WriteCoord, fOrigin[ 0 ] );
engfunc( EngFunc_WriteCoord, fOrigin[ 1 ] );
engfunc( EngFunc_WriteCoord, fOrigin[ 2 ] + 50 );
write_short( 150 );
write_short( g_szSmokeSprites[ iSmoke ] );
write_byte( 10 );
write_byte( TEFIRE_FLAG_ALPHA | TEFIRE_FLAG_SOMEFLOAT );
write_byte( 1000 );
message_end( );
}
}
public HurtThink(iEnt)
{
if( pev(iEnt, pev_iuser1) == GASNADE_HURT )
{
engfunc(EngFunc_RemoveEntity, iEnt);
}
}
public HurtTouch(iEnt, id)
{
new iPod;
iPod = pev(iEnt, pev_iuser1);
if( iPod != GASNADE_HURT)
{
return HAM_IGNORED;
}
if( !(1 <= id <= g_iMaxPlayers) )
{
return HAM_SUPERCEDE;
}
new iOwner = pev(iEnt, pev_owner);
if( iPod == GASNADE_HURT && get_pcvar_num(g_pCvarFF) && !get_pcvar_num(mp_friendlyfire) &&
pev(iEnt, NADE_TEAM) == fm_get_user_team(id) )
{
return HAM_SUPERCEDE;
}
static Float:flTime, Float:flDmgTime;
flTime = get_gametime();
pev(iEnt, pev_dmgtime, flDmgTime);
if( flDmgTime > flTime )
{
static Float:flPainFinished;
pev(iEnt, pev_pain_finished, flPainFinished);
if( flTime != flPainFinished )
{
static iImpulse;
iImpulse = pev(iEnt, pev_impulse);
if ( iImpulse & (1<<(id-1)) )
return HAM_SUPERCEDE;
set_pev(iEnt, pev_impulse, iImpulse | (1<<(id-1)));
}
}
else
{
set_pev(iEnt, pev_impulse, (1<<(id-1)));
}
static Float:flDmg, Float:flCheckTime;
pev(iEnt, pev_dmg, flDmg);
flCheckTime = get_pcvar_float(g_pCvarCheckTime);
TakeDamage(id, iOwner, flDmg, DMG_NERVEGAS);
switch (random_num(1, 2))
{
case 1: emit_sound(id, CHAN_VOICE, GASP_SOUND1, 1.0, ATTN_NORM, 0, PITCH_NORM);
case 2: emit_sound(id, CHAN_VOICE, GASP_SOUND2, 1.0, ATTN_NORM, 0, PITCH_NORM);
}
set_pev(iEnt, pev_pain_finished, flTime);
set_pev(iEnt, pev_dmgtime, flTime + flCheckTime);
return HAM_SUPERCEDE;
}
TakeDamage(id, iAttacker, Float:flDmg, iDmgBit)
{
if(!is_user_connected(id) || !is_user_connected(iAttacker) )
return PLUGIN_CONTINUE;
if(id != iAttacker){
ExecuteHam( Ham_TakeDamage, id, 0, iAttacker, flDmg, iDmgBit );}
return PLUGIN_CONTINUE;
}
public FwdTouch_FakeSmoke( iEntity, iWorld ) {
if( !is_valid_ent( iEntity ) )
return PLUGIN_CONTINUE;
// Bounce sound
emit_sound( iEntity, CHAN_VOICE, "weapons/grenade_hit1.wav", 0.25, ATTN_NORM, 0, PITCH_NORM );
return PLUGIN_CONTINUE;
}
public FwdThink_FakeSmoke( iEntity ) {
if( !is_valid_ent( iEntity ) )
return PLUGIN_CONTINUE;
engfunc(EngFunc_RemoveEntity, iEntity);
return PLUGIN_CONTINUE;
}