Правила форума Гаранты форума
Размещение рекламы AMX-X компилятор

Здравствуйте, гость Вход | Регистрация

Наши новости:

14-дек
24-апр
10-апр
11-апр

Цветной дым для дымовой (удушающей) гранаты.

, Нужно сделать для каждой команды, цвет дыма для удушающей гранаты :)
Статус пользователя maxe34
сообщение 13.9.2015, 19:20
Сообщение #1
Стаж: 10 лет

Сообщений: 79
Благодарностей: 5
Полезность: < 0

Помогите сделать цвета дымовой (удушающей) гранаты, для каждой команды свой цвет (CT - синий, T - красный). Плагин полностью рабочий, все прекрасно)

Ну и если не составит труда, пожалуйста сделайте блок на то чтобы граната не отнимала хп своим, а только противникам)

Идея хорошая, подойдет для CSDM ну и для Public'a тоже))

Прикрепленный файл  amx_gasnades.sma ( 8,16 килобайт ) Кол-во скачиваний: 28
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   Цитировать сообщение
Статус пользователя Immunity
сообщение 13.9.2015, 19:50
Сообщение #2
Стаж: 11 лет

Сообщений: 444
Благодарностей: 119
Полезность: 139

Такой плагин уже есть.
Cкрытый текст
http://cscontrol.ru/load/3-1-0-1203
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя maxe34
сообщение 13.9.2015, 19:55
Сообщение #3
Стаж: 10 лет

Сообщений: 79
Благодарностей: 5
Полезность: < 0

Цитата(Immunity @ 13.9.2015, 20:45) *
Такой плагин уже есть.
Cкрытый текст
http://cscontrol.ru/load/3-1-0-1203

А ты не внимательный :)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mefisto2009
сообщение 14.9.2015, 6:35
Сообщение #4


Стаж: 17 лет

Сообщений: 19
Благодарностей: 23
Полезность: 0

пытался как-то сделать дым только зеленым цветом, урон от газа то есть, то нет, забил на это,
з.ы. спрайт для команд добавил только что, скорей всего не будет вообще работать, исправляй строку -
Код:
new sprite_team = fm_get_user_team(iOwner) ? g_szSmokeSprite_red : g_szSmokeSprite_blue;	////


Cкрытый текст

Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <engine>

#pragma semicolon 1

#define PLUGIN "GasNades"
#define AUTHOR "ConnorMcLeod"
#define VERSION "2.0.0b_HosFix"

#define GASP_SOUND1 "player/gasp1.wav"
#define GASP_SOUND2 "player/gasp2.wav"

#define PEV_PDATA_SAFE 2

#define MAX_PLAYERS 32

#define m_bitsDamageType 76 // VEN

#define OFFSET_TEAM 114
#define fm_get_user_team(%1) get_pdata_int(%1,OFFSET_TEAM)

#define write_coord_f(%1) engfunc(EngFunc_WriteCoord, %1)

#define GASNADE_HURT -666
#define GASNADE_HEAL -777

new g_pCvarRadius, g_pCvarCheckTime, g_pCvarDmg, g_pCvarDmgHeal, g_pCvarFF, g_pCvarLife, g_pCvarGasp,
g_pCvarRestore, g_pCvarEnabled;
new mp_friendlyfire;

new g_iMaxPlayers;

new g_iHealer;

new Float:g_fLastHurt[MAX_PLAYERS+1];
new Float:g_fDmgToRestore[MAX_PLAYERS+1];

//new g_iForwardEmitSound;
new HamHook:g_iHamTouch, HamHook:g_iHamThink;

//native knife_only_on(id);

new g_szSmokeSprite_red, g_szSmokeSprite_blue;
#define FIRST_THINK 39546
#define FIRST_TOUCH 23921

new const g_szClassname[] = "colored_smokenade";

public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR );
register_cvar("gasnade", VERSION, FCVAR_SERVER);

g_pCvarEnabled = register_cvar("amx_gasnades", "1");

g_pCvarDmg = register_cvar("amx_gasdmg", "30");
g_pCvarDmgHeal = register_cvar("amx_gas_heal", "10");
g_pCvarRadius = register_cvar("amx_gasradius", "160");
g_pCvarCheckTime = register_cvar("amx_gascheck", "2");
g_pCvarFF = register_cvar("amx_gasobeyFF", "1");
g_pCvarLife = register_cvar("amx_gaslife", "25");
g_pCvarGasp = register_cvar("amx_smokegasp", "1");
g_pCvarRestore = register_cvar("amx_gas_restore", "0");

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_touch( "grenade", "worldspawn", "FwdTouch_Grenade" );
// 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_szSmokeSprite_red = precache_model("sprites/gas_puff_01r.spr" );
g_szSmokeSprite_blue = precache_model("sprites/gas_puff_01b.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);
}
Healer(0);
}

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);
}

for(new id=1; id<=g_iMaxPlayers; id++)
{
g_fLastHurt[id] = g_fDmgToRestore[id] = 0.0;
}

if( get_pcvar_num(g_pCvarEnabled) )
{
/* if( !g_iForwardEmitSound )
{
g_iForwardEmitSound = register_forward(FM_EmitSound, "EmitSound");
}*/

if( g_iHamTouch )
{
EnableHamForward(g_iHamTouch);
}
else
{
g_iHamTouch = RegisterHam(Ham_Touch, "trigger_hurt", "HurtTouch");
}

if( g_iHamThink )
{
EnableHamForward(g_iHamThink);
}
else
{
g_iHamThink = RegisterHam(Ham_Think, "trigger_hurt", "HurtThink");
}

Healer(get_pcvar_num(g_pCvarRestore) ? 1 : 0);
}
else
{/*
if( g_iForwardEmitSound )
{
unregister_forward(FM_EmitSound, g_iForwardEmitSound);
g_iForwardEmitSound = 0;
}*/

if( g_iHamTouch )
{
DisableHamForward(g_iHamTouch);
}

if( g_iHamThink )
{
DisableHamForward(g_iHamThink);
}

Healer(0);
}
}

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);
if( pev_valid(iOwner) == PEV_PDATA_SAFE )
{
set_pev(iEnt, pev_iuser2, fm_get_user_team(iOwner));
set_pev(iEnt, pev_owner, iOwner);
}

set_pev(iEnt, pev_nextthink, get_gametime() + get_pcvar_float(g_pCvarLife));

}

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 && iPod != GASNADE_HEAL )
{
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, pev_iuser2) == fm_get_user_team(id) )
{
return HAM_SUPERCEDE;
}


// if(knife_only_on(id))
// {
// return HAM_SUPERCEDE;
// }


if(pev(iEnt, pev_iuser2) == iOwner )
{
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);

if( iPod == GASNADE_HURT )
{
TakeDamage(id, iEnt, iOwner, flDmg, DMG_SLOWFREEZE);
g_fDmgToRestore[id] += flDmg;

if(get_pcvar_num(g_pCvarGasp))
{
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);
}
}
g_fLastHurt[id] = flTime;
}
else
{
if( flTime - g_fLastHurt[id] > flCheckTime && g_fDmgToRestore[id])
{
if( g_fDmgToRestore[id] < flDmg )
{
flDmg = g_fDmgToRestore[id];
}
g_fDmgToRestore[id] -= flDmg;
TakeHealth(id, flDmg);
}
}

set_pev(iEnt, pev_pain_finished, flTime);
set_pev(iEnt, pev_dmgtime, flTime + flCheckTime);

return HAM_SUPERCEDE;
}

Healer(iStatus)
{
if( iStatus )
{
if( !pev_valid(g_iHealer) )
{
g_iHealer = engfunc( EngFunc_CreateNamedEntity , engfunc( EngFunc_AllocString, "trigger_hurt") );
dllfunc(DLLFunc_Spawn, g_iHealer);
engfunc(EngFunc_SetSize , g_iHealer , Float:{-4096.0, -4096.0, -4096.0} , Float:{4096.0, 4096.0, 4096.0} );
set_pev(g_iHealer, pev_iuser1, GASNADE_HEAL);
}
set_pev(g_iHealer, pev_dmg, get_pcvar_float(g_pCvarDmgHeal));

}
else
{
if( pev_valid(g_iHealer) )
{
engfunc(EngFunc_RemoveEntity, g_iHealer);
g_iHealer = FM_NULLENT;
}
}
}

TakeHealth(id, Float:flDmg)
{
new Float:flHealth, Float:flMaxHealth;

pev(id, pev_health, flHealth);
pev(id, pev_max_health, flMaxHealth);

if( flMaxHealth <= flHealth )
return;

flHealth += flDmg;

if( flHealth > flMaxHealth )
flHealth = flMaxHealth;

set_pev(id, pev_health, flHealth);
}

TakeDamage(id, iEnt, iAttacker, Float:flDmg, iDmgBit)
{
if(!is_user_connected(id) || !is_user_connected(iAttacker) )
return PLUGIN_CONTINUE;

// new Float:dmg = get_pcvar_float(g_pCvarDmg);

new Float:flHealth;
pev(id, pev_health, flHealth);

flHealth -= flDmg;

if( flHealth < 1 )
{
// ExecuteHamB( Ham_Killed, id, iAttacker, 0 );
ExecuteHam( Ham_Killed, id, iAttacker, 0 );
return PLUGIN_CONTINUE;
}

set_pev(id, pev_health, flHealth);

set_pev(id, pev_dmg_take, flDmg);
set_pdata_int(id, m_bitsDamageType, iDmgBit);
set_pev(id, pev_dmg_inflictor, iEnt);

return PLUGIN_CONTINUE;
}




public FwdTouch_Grenade( iEntity, iWorld ) {

static const szSmoke[] = "models/w_smokegrenade.mdl";
static szModel[ 26 ];
entity_get_string( iEntity, EV_SZ_model, szModel, charsmax( szModel ) );

if( equali( szModel, szSmoke ) ) {
static Float:vVelocity[ 3 ];
entity_get_vector( iEntity, EV_VEC_velocity, vVelocity );

if( vector_length( vVelocity ) <= 200.0 ) {
new iFake = create_entity( "info_target" );

// If created smoke is not valid, let cs explode standart 1 then...
if( !is_valid_ent( iFake ) )
return PLUGIN_CONTINUE;


entity_set_string( iFake, EV_SZ_classname, g_szClassname );
entity_set_edict( iFake, EV_ENT_owner, entity_get_edict( iEntity, EV_ENT_owner ) );
entity_set_int( iFake, EV_INT_movetype, MOVETYPE_BOUNCE );
entity_set_int( iFake, EV_INT_solid, SOLID_NOT );

new Float:vOrigin[ 3 ], Float:vAngles[ 3 ];
entity_get_vector( iEntity, EV_VEC_origin, vOrigin );
entity_get_vector( iEntity, EV_VEC_angles, vAngles );

entity_set_vector( iFake, EV_VEC_origin, vOrigin );
vVelocity[ 2 ] += 150.0;
entity_set_vector( iFake, EV_VEC_velocity, vVelocity );
entity_set_vector( iFake, EV_VEC_angles, vAngles );
entity_set_int( iFake, EV_INT_fixangle, 1 );
entity_set_model( iFake, szModel );

entity_set_int( iFake, EV_INT_iuser3, FIRST_TOUCH );
entity_set_int( iFake, EV_INT_iuser4, FIRST_THINK );
entity_set_float( iFake, EV_FL_nextthink, get_gametime( ) + 0.6 );

// Delete Original Smoke
entity_set_int( iEntity, EV_INT_flags, FL_KILLME );


// Detonate Smoke
emit_sound( iFake, CHAN_WEAPON, "weapons/sg_explode.wav", 1.0, ATTN_NORM, 0, PITCH_NORM );

new iOrigin[ 3 ];
FVecIVec( vOrigin, iOrigin );

go_damage(iFake);

new iOwner = pev(iEntity, pev_owner);

new sprite_team = fm_get_user_team(iOwner) ? g_szSmokeSprite_red : g_szSmokeSprite_blue; ////

message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( TE_FIREFIELD );
write_coord( iOrigin[ 0 ] );
write_coord( iOrigin[ 1 ] );
write_coord( iOrigin[ 2 ] + 50 );
write_short( 100 );
write_short( sprite_team );
write_byte( 100 );
write_byte( TEFIRE_FLAG_ALPHA );
write_byte( 1000 );
message_end();

message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( TE_FIREFIELD );
write_coord( iOrigin[ 0 ] );
write_coord( iOrigin[ 1 ] );
write_coord( iOrigin[ 2 ] + 50 );
write_short( 150 );
write_short( sprite_team );
write_byte( 10 );
write_byte( TEFIRE_FLAG_ALLFLOAT | TEFIRE_FLAG_ALPHA );
write_byte( 1000 );
message_end( );
}

}

return PLUGIN_CONTINUE;
}


public go_damage(iEntity)
{

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);
if( pev_valid(iOwner) == PEV_PDATA_SAFE )
{
set_pev(iEnt, pev_iuser2, fm_get_user_team(iOwner));
set_pev(iEnt, pev_owner, iOwner);
}

set_pev(iEnt, pev_nextthink, get_gametime() + get_pcvar_float(g_pCvarLife));

}

public FwdTouch_FakeSmoke( iEntity, iWorld ) {
if( !is_valid_ent( iEntity ) )
return PLUGIN_CONTINUE;

if( entity_get_int( iEntity, EV_INT_iuser3 ) == FIRST_TOUCH ) {
// Touch sound
emit_sound( iEntity, CHAN_WEAPON, "weapons/grenade_hit1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM );
entity_set_int( iEntity, EV_INT_iuser3, 0 );
}

return PLUGIN_CONTINUE;
}

public FwdThink_FakeSmoke( iEntity ) {
if( !is_valid_ent( iEntity ) )
return PLUGIN_CONTINUE;

if( entity_get_int( iEntity, EV_INT_iuser4 ) == FIRST_THINK ) {
entity_set_int( iEntity, EV_INT_iuser4, 0 );
entity_set_int( iEntity, EV_INT_movetype, MOVETYPE_TOSS );
entity_set_float( iEntity, EV_FL_nextthink, get_gametime( ) + 21.0 );
} else
remove_entity( iEntity );

return PLUGIN_CONTINUE;
}
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя maxe34
сообщение 14.9.2015, 19:19
Сообщение #5
Стаж: 10 лет

Сообщений: 79
Благодарностей: 5
Полезность: < 0

Цитата(mefisto2009 @ 14.9.2015, 7:31) *
пытался как-то сделать дым только зеленым цветом, урон от газа то есть, то нет, забил на это,
з.ы. спрайт для команд добавил только что, скорей всего не будет вообще работать, исправляй строку -
Код:
new sprite_team = fm_get_user_team(iOwner) ? g_szSmokeSprite_red : g_szSmokeSprite_blue;	////


Cкрытый текст

Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <engine>

#pragma semicolon 1

#define PLUGIN "GasNades"
#define AUTHOR "ConnorMcLeod"
#define VERSION "2.0.0b_HosFix"

#define GASP_SOUND1 "player/gasp1.wav"
#define GASP_SOUND2 "player/gasp2.wav"

#define PEV_PDATA_SAFE 2

#define MAX_PLAYERS 32

#define m_bitsDamageType 76 // VEN

#define OFFSET_TEAM 114
#define fm_get_user_team(%1) get_pdata_int(%1,OFFSET_TEAM)

#define write_coord_f(%1) engfunc(EngFunc_WriteCoord, %1)

#define GASNADE_HURT -666
#define GASNADE_HEAL -777

new g_pCvarRadius, g_pCvarCheckTime, g_pCvarDmg, g_pCvarDmgHeal, g_pCvarFF, g_pCvarLife, g_pCvarGasp,
g_pCvarRestore, g_pCvarEnabled;
new mp_friendlyfire;

new g_iMaxPlayers;

new g_iHealer;

new Float:g_fLastHurt[MAX_PLAYERS+1];
new Float:g_fDmgToRestore[MAX_PLAYERS+1];

//new g_iForwardEmitSound;
new HamHook:g_iHamTouch, HamHook:g_iHamThink;

//native knife_only_on(id);

new g_szSmokeSprite_red, g_szSmokeSprite_blue;
#define FIRST_THINK 39546
#define FIRST_TOUCH 23921

new const g_szClassname[] = "colored_smokenade";

public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR );
register_cvar("gasnade", VERSION, FCVAR_SERVER);

g_pCvarEnabled = register_cvar("amx_gasnades", "1");

g_pCvarDmg = register_cvar("amx_gasdmg", "30");
g_pCvarDmgHeal = register_cvar("amx_gas_heal", "10");
g_pCvarRadius = register_cvar("amx_gasradius", "160");
g_pCvarCheckTime = register_cvar("amx_gascheck", "2");
g_pCvarFF = register_cvar("amx_gasobeyFF", "1");
g_pCvarLife = register_cvar("amx_gaslife", "25");
g_pCvarGasp = register_cvar("amx_smokegasp", "1");
g_pCvarRestore = register_cvar("amx_gas_restore", "0");

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_touch( "grenade", "worldspawn", "FwdTouch_Grenade" );
// 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_szSmokeSprite_red = precache_model("sprites/gas_puff_01r.spr" );
g_szSmokeSprite_blue = precache_model("sprites/gas_puff_01b.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);
}
Healer(0);
}

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);
}

for(new id=1; id<=g_iMaxPlayers; id++)
{
g_fLastHurt[id] = g_fDmgToRestore[id] = 0.0;
}

if( get_pcvar_num(g_pCvarEnabled) )
{
/* if( !g_iForwardEmitSound )
{
g_iForwardEmitSound = register_forward(FM_EmitSound, "EmitSound");
}*/

if( g_iHamTouch )
{
EnableHamForward(g_iHamTouch);
}
else
{
g_iHamTouch = RegisterHam(Ham_Touch, "trigger_hurt", "HurtTouch");
}

if( g_iHamThink )
{
EnableHamForward(g_iHamThink);
}
else
{
g_iHamThink = RegisterHam(Ham_Think, "trigger_hurt", "HurtThink");
}

Healer(get_pcvar_num(g_pCvarRestore) ? 1 : 0);
}
else
{/*
if( g_iForwardEmitSound )
{
unregister_forward(FM_EmitSound, g_iForwardEmitSound);
g_iForwardEmitSound = 0;
}*/

if( g_iHamTouch )
{
DisableHamForward(g_iHamTouch);
}

if( g_iHamThink )
{
DisableHamForward(g_iHamThink);
}

Healer(0);
}
}

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);
if( pev_valid(iOwner) == PEV_PDATA_SAFE )
{
set_pev(iEnt, pev_iuser2, fm_get_user_team(iOwner));
set_pev(iEnt, pev_owner, iOwner);
}

set_pev(iEnt, pev_nextthink, get_gametime() + get_pcvar_float(g_pCvarLife));

}

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 && iPod != GASNADE_HEAL )
{
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, pev_iuser2) == fm_get_user_team(id) )
{
return HAM_SUPERCEDE;
}


// if(knife_only_on(id))
// {
// return HAM_SUPERCEDE;
// }


if(pev(iEnt, pev_iuser2) == iOwner )
{
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);

if( iPod == GASNADE_HURT )
{
TakeDamage(id, iEnt, iOwner, flDmg, DMG_SLOWFREEZE);
g_fDmgToRestore[id] += flDmg;

if(get_pcvar_num(g_pCvarGasp))
{
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);
}
}
g_fLastHurt[id] = flTime;
}
else
{
if( flTime - g_fLastHurt[id] > flCheckTime && g_fDmgToRestore[id])
{
if( g_fDmgToRestore[id] < flDmg )
{
flDmg = g_fDmgToRestore[id];
}
g_fDmgToRestore[id] -= flDmg;
TakeHealth(id, flDmg);
}
}

set_pev(iEnt, pev_pain_finished, flTime);
set_pev(iEnt, pev_dmgtime, flTime + flCheckTime);

return HAM_SUPERCEDE;
}

Healer(iStatus)
{
if( iStatus )
{
if( !pev_valid(g_iHealer) )
{
g_iHealer = engfunc( EngFunc_CreateNamedEntity , engfunc( EngFunc_AllocString, "trigger_hurt") );
dllfunc(DLLFunc_Spawn, g_iHealer);
engfunc(EngFunc_SetSize , g_iHealer , Float:{-4096.0, -4096.0, -4096.0} , Float:{4096.0, 4096.0, 4096.0} );
set_pev(g_iHealer, pev_iuser1, GASNADE_HEAL);
}
set_pev(g_iHealer, pev_dmg, get_pcvar_float(g_pCvarDmgHeal));

}
else
{
if( pev_valid(g_iHealer) )
{
engfunc(EngFunc_RemoveEntity, g_iHealer);
g_iHealer = FM_NULLENT;
}
}
}

TakeHealth(id, Float:flDmg)
{
new Float:flHealth, Float:flMaxHealth;

pev(id, pev_health, flHealth);
pev(id, pev_max_health, flMaxHealth);

if( flMaxHealth <= flHealth )
return;

flHealth += flDmg;

if( flHealth > flMaxHealth )
flHealth = flMaxHealth;

set_pev(id, pev_health, flHealth);
}

TakeDamage(id, iEnt, iAttacker, Float:flDmg, iDmgBit)
{
if(!is_user_connected(id) || !is_user_connected(iAttacker) )
return PLUGIN_CONTINUE;

// new Float:dmg = get_pcvar_float(g_pCvarDmg);

new Float:flHealth;
pev(id, pev_health, flHealth);

flHealth -= flDmg;

if( flHealth < 1 )
{
// ExecuteHamB( Ham_Killed, id, iAttacker, 0 );
ExecuteHam( Ham_Killed, id, iAttacker, 0 );
return PLUGIN_CONTINUE;
}

set_pev(id, pev_health, flHealth);

set_pev(id, pev_dmg_take, flDmg);
set_pdata_int(id, m_bitsDamageType, iDmgBit);
set_pev(id, pev_dmg_inflictor, iEnt);

return PLUGIN_CONTINUE;
}




public FwdTouch_Grenade( iEntity, iWorld ) {

static const szSmoke[] = "models/w_smokegrenade.mdl";
static szModel[ 26 ];
entity_get_string( iEntity, EV_SZ_model, szModel, charsmax( szModel ) );

if( equali( szModel, szSmoke ) ) {
static Float:vVelocity[ 3 ];
entity_get_vector( iEntity, EV_VEC_velocity, vVelocity );

if( vector_length( vVelocity ) <= 200.0 ) {
new iFake = create_entity( "info_target" );

// If created smoke is not valid, let cs explode standart 1 then...
if( !is_valid_ent( iFake ) )
return PLUGIN_CONTINUE;


entity_set_string( iFake, EV_SZ_classname, g_szClassname );
entity_set_edict( iFake, EV_ENT_owner, entity_get_edict( iEntity, EV_ENT_owner ) );
entity_set_int( iFake, EV_INT_movetype, MOVETYPE_BOUNCE );
entity_set_int( iFake, EV_INT_solid, SOLID_NOT );

new Float:vOrigin[ 3 ], Float:vAngles[ 3 ];
entity_get_vector( iEntity, EV_VEC_origin, vOrigin );
entity_get_vector( iEntity, EV_VEC_angles, vAngles );

entity_set_vector( iFake, EV_VEC_origin, vOrigin );
vVelocity[ 2 ] += 150.0;
entity_set_vector( iFake, EV_VEC_velocity, vVelocity );
entity_set_vector( iFake, EV_VEC_angles, vAngles );
entity_set_int( iFake, EV_INT_fixangle, 1 );
entity_set_model( iFake, szModel );

entity_set_int( iFake, EV_INT_iuser3, FIRST_TOUCH );
entity_set_int( iFake, EV_INT_iuser4, FIRST_THINK );
entity_set_float( iFake, EV_FL_nextthink, get_gametime( ) + 0.6 );

// Delete Original Smoke
entity_set_int( iEntity, EV_INT_flags, FL_KILLME );


// Detonate Smoke
emit_sound( iFake, CHAN_WEAPON, "weapons/sg_explode.wav", 1.0, ATTN_NORM, 0, PITCH_NORM );

new iOrigin[ 3 ];
FVecIVec( vOrigin, iOrigin );

go_damage(iFake);

new iOwner = pev(iEntity, pev_owner);

new sprite_team = fm_get_user_team(iOwner) ? g_szSmokeSprite_red : g_szSmokeSprite_blue; ////

message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( TE_FIREFIELD );
write_coord( iOrigin[ 0 ] );
write_coord( iOrigin[ 1 ] );
write_coord( iOrigin[ 2 ] + 50 );
write_short( 100 );
write_short( sprite_team );
write_byte( 100 );
write_byte( TEFIRE_FLAG_ALPHA );
write_byte( 1000 );
message_end();

message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( TE_FIREFIELD );
write_coord( iOrigin[ 0 ] );
write_coord( iOrigin[ 1 ] );
write_coord( iOrigin[ 2 ] + 50 );
write_short( 150 );
write_short( sprite_team );
write_byte( 10 );
write_byte( TEFIRE_FLAG_ALLFLOAT | TEFIRE_FLAG_ALPHA );
write_byte( 1000 );
message_end( );
}

}

return PLUGIN_CONTINUE;
}


public go_damage(iEntity)
{

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);
if( pev_valid(iOwner) == PEV_PDATA_SAFE )
{
set_pev(iEnt, pev_iuser2, fm_get_user_team(iOwner));
set_pev(iEnt, pev_owner, iOwner);
}

set_pev(iEnt, pev_nextthink, get_gametime() + get_pcvar_float(g_pCvarLife));

}

public FwdTouch_FakeSmoke( iEntity, iWorld ) {
if( !is_valid_ent( iEntity ) )
return PLUGIN_CONTINUE;

if( entity_get_int( iEntity, EV_INT_iuser3 ) == FIRST_TOUCH ) {
// Touch sound
emit_sound( iEntity, CHAN_WEAPON, "weapons/grenade_hit1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM );
entity_set_int( iEntity, EV_INT_iuser3, 0 );
}

return PLUGIN_CONTINUE;
}

public FwdThink_FakeSmoke( iEntity ) {
if( !is_valid_ent( iEntity ) )
return PLUGIN_CONTINUE;

if( entity_get_int( iEntity, EV_INT_iuser4 ) == FIRST_THINK ) {
entity_set_int( iEntity, EV_INT_iuser4, 0 );
entity_set_int( iEntity, EV_INT_movetype, MOVETYPE_TOSS );
entity_set_float( iEntity, EV_FL_nextthink, get_gametime( ) + 21.0 );
} else
remove_entity( iEntity );

return PLUGIN_CONTINUE;
}

Ну так я сам ничего не понимаю... :( Я умею по мелочи что-то подправить, добавить, изменить но вот "такое" для меня нечто))))

А ты цвета дыма брал из плагина ColoredSmoke?
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя maxe34
сообщение 14.9.2015, 20:23
Сообщение #6
Стаж: 10 лет

Сообщений: 79
Благодарностей: 5
Полезность: < 0

Цитата(mefisto2009 @ 14.9.2015, 7:31) *
пытался как-то сделать дым только зеленым цветом, урон от газа то есть, то нет, забил на это,
з.ы. спрайт для команд добавил только что, скорей всего не будет вообще работать, исправляй строку -
Код:
new sprite_team = fm_get_user_team(iOwner) ? g_szSmokeSprite_red : g_szSmokeSprite_blue;	////


Cкрытый текст

Код:
#include <amxmodx>
#include <fakemeta>
#include <hamsandwich>
#include <engine>

#pragma semicolon 1

#define PLUGIN "GasNades"
#define AUTHOR "ConnorMcLeod"
#define VERSION "2.0.0b_HosFix"

#define GASP_SOUND1 "player/gasp1.wav"
#define GASP_SOUND2 "player/gasp2.wav"

#define PEV_PDATA_SAFE 2

#define MAX_PLAYERS 32

#define m_bitsDamageType 76 // VEN

#define OFFSET_TEAM 114
#define fm_get_user_team(%1) get_pdata_int(%1,OFFSET_TEAM)

#define write_coord_f(%1) engfunc(EngFunc_WriteCoord, %1)

#define GASNADE_HURT -666
#define GASNADE_HEAL -777

new g_pCvarRadius, g_pCvarCheckTime, g_pCvarDmg, g_pCvarDmgHeal, g_pCvarFF, g_pCvarLife, g_pCvarGasp,
g_pCvarRestore, g_pCvarEnabled;
new mp_friendlyfire;

new g_iMaxPlayers;

new g_iHealer;

new Float:g_fLastHurt[MAX_PLAYERS+1];
new Float:g_fDmgToRestore[MAX_PLAYERS+1];

//new g_iForwardEmitSound;
new HamHook:g_iHamTouch, HamHook:g_iHamThink;

//native knife_only_on(id);

new g_szSmokeSprite_red, g_szSmokeSprite_blue;
#define FIRST_THINK 39546
#define FIRST_TOUCH 23921

new const g_szClassname[] = "colored_smokenade";

public plugin_init()
{
register_plugin( PLUGIN, VERSION, AUTHOR );
register_cvar("gasnade", VERSION, FCVAR_SERVER);

g_pCvarEnabled = register_cvar("amx_gasnades", "1");

g_pCvarDmg = register_cvar("amx_gasdmg", "30");
g_pCvarDmgHeal = register_cvar("amx_gas_heal", "10");
g_pCvarRadius = register_cvar("amx_gasradius", "160");
g_pCvarCheckTime = register_cvar("amx_gascheck", "2");
g_pCvarFF = register_cvar("amx_gasobeyFF", "1");
g_pCvarLife = register_cvar("amx_gaslife", "25");
g_pCvarGasp = register_cvar("amx_smokegasp", "1");
g_pCvarRestore = register_cvar("amx_gas_restore", "0");

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_touch( "grenade", "worldspawn", "FwdTouch_Grenade" );
// 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_szSmokeSprite_red = precache_model("sprites/gas_puff_01r.spr" );
g_szSmokeSprite_blue = precache_model("sprites/gas_puff_01b.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);
}
Healer(0);
}

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);
}

for(new id=1; id<=g_iMaxPlayers; id++)
{
g_fLastHurt[id] = g_fDmgToRestore[id] = 0.0;
}

if( get_pcvar_num(g_pCvarEnabled) )
{
/* if( !g_iForwardEmitSound )
{
g_iForwardEmitSound = register_forward(FM_EmitSound, "EmitSound");
}*/

if( g_iHamTouch )
{
EnableHamForward(g_iHamTouch);
}
else
{
g_iHamTouch = RegisterHam(Ham_Touch, "trigger_hurt", "HurtTouch");
}

if( g_iHamThink )
{
EnableHamForward(g_iHamThink);
}
else
{
g_iHamThink = RegisterHam(Ham_Think, "trigger_hurt", "HurtThink");
}

Healer(get_pcvar_num(g_pCvarRestore) ? 1 : 0);
}
else
{/*
if( g_iForwardEmitSound )
{
unregister_forward(FM_EmitSound, g_iForwardEmitSound);
g_iForwardEmitSound = 0;
}*/

if( g_iHamTouch )
{
DisableHamForward(g_iHamTouch);
}

if( g_iHamThink )
{
DisableHamForward(g_iHamThink);
}

Healer(0);
}
}

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);
if( pev_valid(iOwner) == PEV_PDATA_SAFE )
{
set_pev(iEnt, pev_iuser2, fm_get_user_team(iOwner));
set_pev(iEnt, pev_owner, iOwner);
}

set_pev(iEnt, pev_nextthink, get_gametime() + get_pcvar_float(g_pCvarLife));

}

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 && iPod != GASNADE_HEAL )
{
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, pev_iuser2) == fm_get_user_team(id) )
{
return HAM_SUPERCEDE;
}


// if(knife_only_on(id))
// {
// return HAM_SUPERCEDE;
// }


if(pev(iEnt, pev_iuser2) == iOwner )
{
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);

if( iPod == GASNADE_HURT )
{
TakeDamage(id, iEnt, iOwner, flDmg, DMG_SLOWFREEZE);
g_fDmgToRestore[id] += flDmg;

if(get_pcvar_num(g_pCvarGasp))
{
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);
}
}
g_fLastHurt[id] = flTime;
}
else
{
if( flTime - g_fLastHurt[id] > flCheckTime && g_fDmgToRestore[id])
{
if( g_fDmgToRestore[id] < flDmg )
{
flDmg = g_fDmgToRestore[id];
}
g_fDmgToRestore[id] -= flDmg;
TakeHealth(id, flDmg);
}
}

set_pev(iEnt, pev_pain_finished, flTime);
set_pev(iEnt, pev_dmgtime, flTime + flCheckTime);

return HAM_SUPERCEDE;
}

Healer(iStatus)
{
if( iStatus )
{
if( !pev_valid(g_iHealer) )
{
g_iHealer = engfunc( EngFunc_CreateNamedEntity , engfunc( EngFunc_AllocString, "trigger_hurt") );
dllfunc(DLLFunc_Spawn, g_iHealer);
engfunc(EngFunc_SetSize , g_iHealer , Float:{-4096.0, -4096.0, -4096.0} , Float:{4096.0, 4096.0, 4096.0} );
set_pev(g_iHealer, pev_iuser1, GASNADE_HEAL);
}
set_pev(g_iHealer, pev_dmg, get_pcvar_float(g_pCvarDmgHeal));

}
else
{
if( pev_valid(g_iHealer) )
{
engfunc(EngFunc_RemoveEntity, g_iHealer);
g_iHealer = FM_NULLENT;
}
}
}

TakeHealth(id, Float:flDmg)
{
new Float:flHealth, Float:flMaxHealth;

pev(id, pev_health, flHealth);
pev(id, pev_max_health, flMaxHealth);

if( flMaxHealth <= flHealth )
return;

flHealth += flDmg;

if( flHealth > flMaxHealth )
flHealth = flMaxHealth;

set_pev(id, pev_health, flHealth);
}

TakeDamage(id, iEnt, iAttacker, Float:flDmg, iDmgBit)
{
if(!is_user_connected(id) || !is_user_connected(iAttacker) )
return PLUGIN_CONTINUE;

// new Float:dmg = get_pcvar_float(g_pCvarDmg);

new Float:flHealth;
pev(id, pev_health, flHealth);

flHealth -= flDmg;

if( flHealth < 1 )
{
// ExecuteHamB( Ham_Killed, id, iAttacker, 0 );
ExecuteHam( Ham_Killed, id, iAttacker, 0 );
return PLUGIN_CONTINUE;
}

set_pev(id, pev_health, flHealth);

set_pev(id, pev_dmg_take, flDmg);
set_pdata_int(id, m_bitsDamageType, iDmgBit);
set_pev(id, pev_dmg_inflictor, iEnt);

return PLUGIN_CONTINUE;
}




public FwdTouch_Grenade( iEntity, iWorld ) {

static const szSmoke[] = "models/w_smokegrenade.mdl";
static szModel[ 26 ];
entity_get_string( iEntity, EV_SZ_model, szModel, charsmax( szModel ) );

if( equali( szModel, szSmoke ) ) {
static Float:vVelocity[ 3 ];
entity_get_vector( iEntity, EV_VEC_velocity, vVelocity );

if( vector_length( vVelocity ) <= 200.0 ) {
new iFake = create_entity( "info_target" );

// If created smoke is not valid, let cs explode standart 1 then...
if( !is_valid_ent( iFake ) )
return PLUGIN_CONTINUE;


entity_set_string( iFake, EV_SZ_classname, g_szClassname );
entity_set_edict( iFake, EV_ENT_owner, entity_get_edict( iEntity, EV_ENT_owner ) );
entity_set_int( iFake, EV_INT_movetype, MOVETYPE_BOUNCE );
entity_set_int( iFake, EV_INT_solid, SOLID_NOT );

new Float:vOrigin[ 3 ], Float:vAngles[ 3 ];
entity_get_vector( iEntity, EV_VEC_origin, vOrigin );
entity_get_vector( iEntity, EV_VEC_angles, vAngles );

entity_set_vector( iFake, EV_VEC_origin, vOrigin );
vVelocity[ 2 ] += 150.0;
entity_set_vector( iFake, EV_VEC_velocity, vVelocity );
entity_set_vector( iFake, EV_VEC_angles, vAngles );
entity_set_int( iFake, EV_INT_fixangle, 1 );
entity_set_model( iFake, szModel );

entity_set_int( iFake, EV_INT_iuser3, FIRST_TOUCH );
entity_set_int( iFake, EV_INT_iuser4, FIRST_THINK );
entity_set_float( iFake, EV_FL_nextthink, get_gametime( ) + 0.6 );

// Delete Original Smoke
entity_set_int( iEntity, EV_INT_flags, FL_KILLME );


// Detonate Smoke
emit_sound( iFake, CHAN_WEAPON, "weapons/sg_explode.wav", 1.0, ATTN_NORM, 0, PITCH_NORM );

new iOrigin[ 3 ];
FVecIVec( vOrigin, iOrigin );

go_damage(iFake);

new iOwner = pev(iEntity, pev_owner);

new sprite_team = fm_get_user_team(iOwner) ? g_szSmokeSprite_red : g_szSmokeSprite_blue; ////

message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( TE_FIREFIELD );
write_coord( iOrigin[ 0 ] );
write_coord( iOrigin[ 1 ] );
write_coord( iOrigin[ 2 ] + 50 );
write_short( 100 );
write_short( sprite_team );
write_byte( 100 );
write_byte( TEFIRE_FLAG_ALPHA );
write_byte( 1000 );
message_end();

message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
write_byte( TE_FIREFIELD );
write_coord( iOrigin[ 0 ] );
write_coord( iOrigin[ 1 ] );
write_coord( iOrigin[ 2 ] + 50 );
write_short( 150 );
write_short( sprite_team );
write_byte( 10 );
write_byte( TEFIRE_FLAG_ALLFLOAT | TEFIRE_FLAG_ALPHA );
write_byte( 1000 );
message_end( );
}

}

return PLUGIN_CONTINUE;
}


public go_damage(iEntity)
{

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);
if( pev_valid(iOwner) == PEV_PDATA_SAFE )
{
set_pev(iEnt, pev_iuser2, fm_get_user_team(iOwner));
set_pev(iEnt, pev_owner, iOwner);
}

set_pev(iEnt, pev_nextthink, get_gametime() + get_pcvar_float(g_pCvarLife));

}

public FwdTouch_FakeSmoke( iEntity, iWorld ) {
if( !is_valid_ent( iEntity ) )
return PLUGIN_CONTINUE;

if( entity_get_int( iEntity, EV_INT_iuser3 ) == FIRST_TOUCH ) {
// Touch sound
emit_sound( iEntity, CHAN_WEAPON, "weapons/grenade_hit1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM );
entity_set_int( iEntity, EV_INT_iuser3, 0 );
}

return PLUGIN_CONTINUE;
}

public FwdThink_FakeSmoke( iEntity ) {
if( !is_valid_ent( iEntity ) )
return PLUGIN_CONTINUE;

if( entity_get_int( iEntity, EV_INT_iuser4 ) == FIRST_THINK ) {
entity_set_int( iEntity, EV_INT_iuser4, 0 );
entity_set_int( iEntity, EV_INT_movetype, MOVETYPE_TOSS );
entity_set_float( iEntity, EV_FL_nextthink, get_gametime( ) + 21.0 );
} else
remove_entity( iEntity );

return PLUGIN_CONTINUE;
}

Да вот только проверил, зашел на сервер за CT, бросил гранату, цвет дыма красный) и урон не наносит... :(
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mefisto2009
сообщение 14.9.2015, 20:45
Сообщение #7


Стаж: 17 лет

Сообщений: 19
Благодарностей: 23
Полезность: 0

Цитата(maxe34 @ 14.9.2015, 21:18) *
Да вот только проверил, зашел на сервер за CT, бросил гранату, цвет дыма красный) и урон не наносит... :(


да, спрайты из ColoredSmoke
исправленная строка
Код:
new sprite_team = get_user_team(iOwner) == 1 ? g_szSmokeSprite_red : g_szSmokeSprite_blue;	

видео демонстрация
https://youtu.be/KkS0RWjTT3c


Времени на эксперименты нет, вот и кинул сюда, может кто сможет допилить
Прикрепленные файлы:
Прикрепленный файл  amx_gasnades.sma ( 12,65 килобайт ) Кол-во скачиваний: 10
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя maxe34
сообщение 14.9.2015, 21:09
Сообщение #8
Стаж: 10 лет

Сообщений: 79
Благодарностей: 5
Полезность: < 0

Цитата(mefisto2009 @ 14.9.2015, 21:41) *
да, спрайты из ColoredSmoke
исправленная строка
Код:
new sprite_team = get_user_team(iOwner) == 1 ? g_szSmokeSprite_red : g_szSmokeSprite_blue;	

видео демонстрация
https://youtu.be/KkS0RWjTT3c


Времени на эксперименты нет, вот и кинул сюда, может кто сможет допилить

да спасибо все просто ОТЛИЧНО работает!!!! :DDDDD
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя maxe34
сообщение 20.9.2015, 17:54
Сообщение #9
Стаж: 10 лет

Сообщений: 79
Благодарностей: 5
Полезность: < 0

mefisto2009, поставил этот плаг, который ты мне сделал, и все вроде нормально работает, но и тут начал выключатся сервер не с того не с всего... Ну я начал искать какой плагин ложит сервер, выключил как по мне все подозрительные плагины, вроде ниче) 2 часа проработал сервер без падений, потом включил еще пару плагинов из которых удушающая граната, и тут я сам лично играя на сервере бросая дымовую гранату, серв сразу выключился.... Можешь посмотреть еще раз исход? :( Плаг всем на сервере понравился, но вот такая беда...((((

Вот на этом сервере есть такой же плагин удушающей гранаты: 95.31.17.38:27015 PFG | Sentry Lite

Отредактировал: maxe34, - 20.9.2015, 18:07
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mefisto2009
сообщение 20.9.2015, 19:34
Сообщение #10


Стаж: 17 лет

Сообщений: 19
Благодарностей: 23
Полезность: 0

Цитата(maxe34 @ 20.9.2015, 18:50) *
mefisto2009, поставил этот плаг, который ты мне сделал, и все вроде нормально работает, но и тут начал выключатся сервер не с того не с всего... Ну я начал искать какой плагин ложит сервер, выключил как по мне все подозрительные плагины, вроде ниче) 2 часа проработал сервер без падений, потом включил еще пару плагинов из которых удушающая граната, и тут я сам лично играя на сервере бросая дымовую гранату, серв сразу выключился.... Можешь посмотреть еще раз исход? :( Плаг всем на сервере понравился, но вот такая беда...((((

Вот на этом сервере есть такой же плагин удушающей гранаты: 95.31.17.38:27015 PFG | Sentry Lite


пробуй это, на том сервере аналогичный плагин, вроде без падений, - вырезан код восстановления хп
Прикрепленные файлы:
Прикрепленный файл  amx_gasnades.sma ( 9,61 килобайт ) Кол-во скачиваний: 8
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя maxe34
сообщение 21.9.2015, 20:11
Сообщение #11
Стаж: 10 лет

Сообщений: 79
Благодарностей: 5
Полезность: < 0

Цитата(mefisto2009 @ 20.9.2015, 20:29) *
пробуй это, на том сервере аналогичный плагин, вроде без падений, - вырезан код восстановления хп

можешь скинуть нормальный исход, а то там варнингов и ошибок много)) Я убираю одни ошибки, появляются другие :D
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mefisto2009
сообщение 21.9.2015, 21:51
Сообщение #12


Стаж: 17 лет

Сообщений: 19
Благодарностей: 23
Полезность: 0

просто предупреждения, на игру не влияют, убирается элементарно. По мимо этого, спрайт дыма может внезапно пропадать, что портит игру. Может еще кто-то захочет помочь, времени на тесты и исправление нет

забыл натив свой убрать, исправил
Прикрепленные файлы:
Прикрепленный файл  amx_gasnades.sma ( 8,49 килобайт ) Кол-во скачиваний: 6
Прикрепленный файл  amx_gasnades.sma ( 8,5 килобайт ) Кол-во скачиваний: 9
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя maxe34
сообщение 22.9.2015, 16:59
Сообщение #13
Стаж: 10 лет

Сообщений: 79
Благодарностей: 5
Полезность: < 0

Цитата(mefisto2009 @ 21.9.2015, 22:47) *
просто предупреждения, на игру не влияют, убирается элементарно. По мимо этого, спрайт дыма может внезапно пропадать, что портит игру. Может еще кто-то захочет помочь, времени на тесты и исправление нет

забыл натив свой убрать, исправил

Спасибо)) 1-ый исход не рабочий если что :) , а 2-ой вроде хорошо работает! :D
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя maxe34
сообщение 22.9.2015, 20:22
Сообщение #14
Стаж: 10 лет

Сообщений: 79
Благодарностей: 5
Полезность: < 0

Цитата(mefisto2009 @ 21.9.2015, 22:47) *
просто предупреждения, на игру не влияют, убирается элементарно. По мимо этого, спрайт дыма может внезапно пропадать, что портит игру. Может еще кто-то захочет помочь, времени на тесты и исправление нет

забыл натив свой убрать, исправил

После полу часа работы падает сервер, а то и меньше при этом в логах ошибок нет вообще!...((( Создам новую тему, может кто-то исправит))
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mefisto2009
сообщение 22.9.2015, 21:07
Сообщение #15


Стаж: 17 лет

Сообщений: 19
Благодарностей: 23
Полезность: 0

у меня с этим кодом пока не было падений (плагин в строю с 17 числа), вероятнее всего проблема в чем-то другом
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mefisto2009
сообщение 22.9.2015, 22:42
Сообщение #16


Стаж: 17 лет

Сообщений: 19
Благодарностей: 23
Полезность: 0

был дубляж синка HurtTouch, в связи с чем урон x2 наносился. убрал
Прикрепленные файлы:
Прикрепленный файл  amx_gasnades.sma ( 7,56 килобайт ) Кол-во скачиваний: 9
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя maxe34
сообщение 24.9.2015, 13:37
Сообщение #17
Стаж: 10 лет

Сообщений: 79
Благодарностей: 5
Полезность: < 0

Цитата(mefisto2009 @ 22.9.2015, 23:37) *
был дубляж синка HurtTouch, в связи с чем урон x2 наносился. убрал

в логах есть ошибка:

Ошибка

[HAMSANDWICH] Failed to retrieve classtype for "colored_smokenade", hook for "FwdThink_FakeSmoke" not active.
[AMXX] Displaying debug trace (plugin "amx_gasnades.amxx")
[AMXX] Run time error 10: native error (native "RegisterHam")
[AMXX] [0] amx_gasnades.sma::plugin_init (line 58)
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя mefisto2009
сообщение 24.9.2015, 18:20
Сообщение #18


Стаж: 17 лет

Сообщений: 19
Благодарностей: 23
Полезность: 0

:bucho:
Прикрепленные файлы:
Прикрепленный файл  amx_gasnades.sma ( 7,56 килобайт ) Кол-во скачиваний: 11
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
Статус пользователя maxe34
сообщение 29.1.2016, 20:39
Сообщение #19
Стаж: 10 лет

Сообщений: 79
Благодарностей: 5
Полезность: < 0

Увы, но приходится поднимать данную тему, так как мой сервер выключался каждые 30 - 60 мин. Проблему решил, после того как отключил этот плагин.... Прошу кого-то глянуть еще раз исходник на наличие каких-нибудь недочетов.

P.S Так же замечено было что дым не имел цвета, тобишь был дефолтный серый дым.

Исходник: Прикрепленный файл  amx_gasnades.sma ( 7,56 килобайт ) Кол-во скачиваний: 7
Перейти в начало страницы         Просмотр профиля    Отправить личное сообщение
   + Цитировать сообщение
  Ответить в данную темуНачать новую тему
 
0 пользователей и 1 гостей читают эту тему: