#include #include #include 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", "5") 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_grenade2(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_grenade2(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 } //----------------------------------------------------------------------------------------------