If anyone wants to work on this, here is some ugly code that works. It could definately use refinement, but I do not want to take the project on.
Code:
//code used is from mayhem,RichoDemus/AssKicR/T(+)rget
#include <amxmodx>
#include <fun>
#include <engine>
#include <fakemeta>
public plugin_init() {
register_plugin("Gas Nades", "1.0", "mixture")
register_forward(FM_PlaybackEvent, "smokeEvent")
register_cvar("amx_gasdmg", "1")
register_cvar("amx_gasradius", "200")
}
public plugin_precache()
{
precache_sound("player/gasp1.wav")
precache_sound("player/gasp2.wav")
}
public smokeEvent( flags, id, eventid, Float:delay, Float:Origin[3], Float:Angles[3], Float:fparam1, Float:fparam2, iparam1, iparam2,bparam1, bparam2 )
{
new smokeEnt = -1
while(smokeEnt = find_ent_by_class(smokeEnt,"grenade"))
{
new damage = get_cvar_num("amx_gasdmg")
new model[32], grenade[3], players[32]
entity_get_string(smokeEnt, EV_SZ_model, model, 31)
if(equal(model, "models/w_smokegrenade.mdl"))
{
new Float:smoke_origin[3]
entity_get_vector ( smokeEnt, EV_VEC_origin, smoke_origin )
grenade[0] = floatround(smoke_origin[0])
grenade[1] = floatround(smoke_origin[1])
grenade[2] = floatround(smoke_origin[2])
if((smoke_origin[0] == Origin[0]) && (smoke_origin[0] == Origin[0]) && (smoke_origin[0] == Origin[0]))
{
new player[3], inum
get_players(players, inum) // Get number of players
for(new i = 0; i < inum; ++i) // Loop through all players
{
get_user_origin(players[i], player) // Get the position of the player
new distance = get_distance(grenade, player)
if((distance < get_cvar_num("amx_gasradius"))) // Check who is standing close
{
new number = random_num(1, 2)
if(is_user_alive(players[i]))
{
switch (number)
{
case 1:emit_sound(players[i], CHAN_VOICE, "player/gasp1.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
case 2:emit_sound(players[i], CHAN_VOICE, "player/gasp2.wav", 1.0, ATTN_NORM, 0, PITCH_NORM)
}
new userHealth = get_user_health(players[i])
set_user_health(players[i], userHealth - damage)
}
message_begin(MSG_ONE, get_user_msgid("Damage"), {0,0,0}, players[i])
write_byte(30) // dmg_save
write_byte(30) // dmg_take
write_long((1 << 16)) // visibleDamageBits
write_coord(grenade[0]) // damageOrigin.x
write_coord(grenade[1]) // damageOrigin.y
write_coord(grenade[2]) // damageOrigin.z
message_end()
}
}
}
}
}
return FMRES_IGNORED
}