
   #include <amxmod>
   #include <Vexd_Utilities>
   new const SMOKEGRENADE_MODEL[] = "models/w_smokegrenade.mdl"
   //--------------------------------------------------------------------
   --------------------------
   public plugin_init()
   {
       register_plugin("Gasgrenades", "1.2",
   "RichoDemus/AssKicR/T(+)rget")
       register_event("TextMsg",    "TextMsg",    "b",   "2&#Game_radio",
   "4&#Fire_in_the_hole")
       register_cvar("amx_gasnades", "1")
       register_cvar("amx_gasdmg", "10")
       register_cvar("amx_gascheck", "3")
       register_cvar("amx_gasradius", "200")
       register_cvar("amx_smokegasp", "1")
       register_cvar("amx_gasobeyFF", "1")
   }
   //--------------------------------------------------------------------
   --------------------------
   public plugin_precache()
   {
      precache_sound("player/gasp1.wav")
      precache_sound("player/gasp2.wav")
   }
   public gas(id)
   {
       new grenadeid
       new string[32]
       grenadeid = get_grenade(id) // Find a smokegrenade
       if(grenadeid > 0)
       {
           Entvars_Get_String(grenadeid, EV_SZ_model, string, 31)
           if(grenadeid  &&  equali(SMOKEGRENADE_MODEL, string)) // If we
   find the same smokegrenade as the last time
           {
               new  player[3],  inum,  Float:temp_grenade[3], grenade[3],
   players[32]
               if(get_cvar_num("amx_gasobeyFF") != 1)
                   get_players(players, inum) // Get number of players
               else
               {
                   new FFOn = get_cvar_num("mp_friendlyfire")
                   if(FFOn == 0)
                   {
                       new team[33]
                       get_user_team(id, team, 32)
                       if(equali(team, "CT"))
                           get_players(players, inum, "ae", "TERRORIST")
                       else
                           get_players(players, inum, "ae", "CT")
                   }
                   else
                       get_players(players,   inum)   //  Get  number  of
   players
               }
               Entvars_Get_Vector(grenadeid, EV_VEC_origin, temp_grenade)
   // Get the position of the grenade
               grenade[0] = floatround(temp_grenade[0])
               grenade[1] = floatround(temp_grenade[1])
               grenade[2] = floatround(temp_grenade[2])
               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
                   {
                       if(get_cvar_num("amx_smokegasp") != 0)
                       {
                           if(get_cvar_num("amx_gascheck") >= 1)
                           {
                               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)
                                   }
                               }
                           }
                       }
                       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()
                       if(is_user_alive(id))
                           ExtraDamage(players[i],                    id,
   get_cvar_num("amx_gasdmg"), "gasgrenade")
                   }
               }
               set_task(get_cvar_float("amx_gascheck"),  "gas", id) // If
   the    grenade    still    exists    we    do    a    new   check   in
   get_cvar_num("amx_gascheck") second
           }
       }
   }
   //--------------------------------------------------------------------
   --------------------------
   public grenid(id)
   {
       new string[32], grenadeid
       grenadeid = get_grenade(id)
       Entvars_Get_String(grenadeid, EV_SZ_model, string, 31)
       if(grenadeid && equali(SMOKEGRENADE_MODEL, string))
           set_task(0.8, "gas", id)
   }
   //--------------------------------------------------------------------
   --------------------------
   public TextMsg()
   {
       if(get_cvar_num("amx_gasnades") !=1)
           return PLUGIN_HANDLED
       new name[32]
       read_data(3, name, 31)
       new id = get_user_index(name)
       set_task(1.0, "grenid", id)
       return PLUGIN_HANDLED
   }
   //--------------------------------------------------------------------
   --------------------------
   ExtraDamage(id, attacker, damage, weaponDescription[])
   {
       if(is_user_alive(id))
       {
           new userHealth = get_user_health(id)
           set_user_health(id, userHealth - damage)
           if(userHealth - damage <= 0)
           {
               logKill(attacker, id, weaponDescription)
               if(get_user_team(id) != get_user_team(attacker))
               {
                   //  The person dying shouldn't get negative credit for
   this kill (so add it back)
                   set_user_frags(id, get_user_frags(id) + 1)
                   // The killing should get credit for the frag
                   set_user_frags(attacker, get_user_frags(attacker) + 1)
               }
               else
               {
                   //  The person dying shouldn't get negative credit for
   this kill (so add it back)
                   set_user_frags(id, get_user_frags(id) + 1)
                   // The killer killed a teammember or self
                   // Engine gives credit for the kill so let's take away
   that + 1
                   set_user_frags(attacker, get_user_frags(attacker) - 2)
               }
           }
       }
   }
   //--------------------------------------------------------------------
   --------------------------
   /* Log a kill using standard HL-logging format */
   logKill(attacker, victim, weaponDescription[])
   {
       // Save Hummiliation
       new  namea[24],  namev[24],  authida[20],  authidv[20], teama[10],
   teamv[10]
       // Info On Attacker
       get_user_name(attacker, namea, 23)
       get_user_team(attacker, teama, 9)
       get_user_authid(attacker, authida, 19)
       // Info On Victim
       get_user_name(victim, namev, 23)
       get_user_team(victim, teamv, 9)
       get_user_authid(victim, authidv, 19)
       // Log This Kill
       log_message("^"%s<%d><%s><%s>^"   killed  ^"%s<%d><%s><%s>^"  with
   ^"%s^"",
       namea,    get_user_userid(attacker),    authida,   teama,   namev,
   get_user_userid(victim), authidv, teamv, weaponDescription)
   }
   //--------------------------------------------------------------------
   --------------------------
   get_grenade(id)
   {
       new iGrenade = FindEntity(-1, "grenade")
       while(iGrenade > 0)
       {
           //   client_print(id,  2,  "Found  Entity  (Grenade)  id  %d",
   iGrenade)
           new GrenOwner = Entvars_Get_Edict(iGrenade, EV_ENT_owner)
           if(GrenOwner == id)
               return iGrenade
           iGrenade = FindEntity(iGrenade, "grenade")
       }
       return 0
   }
   //--------------------------------------------------------------------
   --------------------------AMXMOD?>
