Raised This Month: $12 Target: $400
 3% 

Add VIP Only to SMA Smoker Zombie plague


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Godofwar
AlliedModders Donor
Join Date: Dec 2015
Location: Germany
Old 02-27-2018 , 05:33   Add VIP Only to SMA Smoker Zombie plague
Reply With Quote #1

Can anyone edit it that only VIPS can use it? For ADMIN LEVEL H Flag F Please?

Code:
/*
*	---------------------------------------------------------------------------------------------------------
*	------------------------------------[ZP] Zombie Class: Smoker--------------------------------------------
*	---------------------------------------------------------------------------------------------------------
*	------------------------------------Author: SNAKER_BEATTER-----------------------------------------------
*	---------------------------------------------------------------------------------------------------------
*				About:
*		When Left4Dead2 i watched in youtube and i found smoker. I dont get hes command but when i played 
*		it, He drags players using hes long tongue, like a real monster that attacks pregnant mothers...
*		like from L4D2 when have to many damage long tongue ends
*	---------------------------------------------------------------------------------------------------------
*				Description:
*		Smoker is a zombie class for zombie plague 4.3 or later version. Like from L4D2 smoker can drag 
*		players by he's long tongue, After a long tongue use a cooldown starts, when take 500 damage 
*		long tongue is off and if falls with 50 damage long tongue is off too... you can use it on zombies
		too(bug)
*			You can use tha command with 'E' key (such as USE key) and when fall with 50 damage
*			smoke release and if damaged 100 release smokes 
*			you and you're long tongue's target will be 3rdperson view and a hudmessage will show
*			if you're zombie and not smoker you cant do anything
*			if the cooldown starts the thirdpeson view sets to firstperson
*
*			Well green smokes from 1.4 version is not good and not like smokes so i change it
*	---------------------------------------------------------------------------------------------------------
*				Credits:
*		L4D2 (game) - the very original zombie smoker
*	---------------------------------------------------------------------------------------------------------
*				Cvars:
*		Their are no new cvar than the old version
*		zp_smoker_tongue_max // how many times Smoker can use long tongue? default=999
*		zp_smoker_tongue_speed // speed of long tongue default=250
*		zp_smoker_tongue_cooldown // time in seconds before you can use long tongue again. default=15
*		zp_smoker_tongue_stop_damage // damage to stop using long tongue set 0 to disable it. default=300
*		zp_smoker_tongue_stop_damage_fall // damage to stop usng long tongue(only if falls) set 0 to disable it. default=50
*		zp_smoker_tongue_infecthook // additional hooks after Smoker infects smb. def=5
*		zp_smoker_tongue_unable_move // 0=human & Smoker can move / 1=unable human to move when dragging / 2=unable Smoker to move / 3=unable both
*		zp_smoker_tongue_reward .// How many reward gives to smoker when used long tongue to any. default=2
*		zp_smoker_tongue_target_zombie // Allow/disallow using long tongue to zombies / 1=enable for all zombies / 2=Only to smokers
*		zp_smoker_smoke_damage_by_player // how many damage by player should smoke release smokes. default=5
*		zp_smoker_smoke_damage_by_fall // how many damage by fall should smoke release. default=5
*		zp_smoker_smoke_death_distance // Smoke death distance
*		zp_smoker_smoke_death_blind // Smoke death set smoked all users around you're death body
*		zp_smoker_smoke_death_glow // Glow all you're death smoke victims
*
*	----------------------------------------------------------------------------------------------------------
*				Modules:
*		hamsandwich
*		fakemeta
*		engine
*	-----------------------------------------------------------------------------------------------------------
*				Change log:
*		1.0 (Sept 12, 2011)
*		{
*			First release
*		}
*		1.1 (Sept 12, 2011)
*		{
*			smoke death function rewritten 
*			Fix if a human is using smoker class, when dies smoke releases
*			(not sure) Fix if a survivor is using smoker class, when dies smoke releases
*		}
*		1.2 (Sept 16, 2011)
*		{
*			change autbind into e key
*			Fix if a nemesis is using smoker class, when dies smoke releases
*			Change print_chat on long tongue cooldown to Hudmessage
*		}
*		1.3 (Sept 17, 2011)
*		{
*			(new) thirdperson view when tongue start and firstperson when end
*			(new) rewritten tongue_start function
*			Fix new round human and survvor can use tongue abillity 
*			Fix damage smoke not working :: Now the damage tongue end and smoke damage have their own
*			Fix cooldown hudmessage bug
*		}
*		1.4 (Sept 18, 2011)
*		{
*			(best) added smoke damage : hes own cvars and with custom smokes
*			Smoker damage function rewritten
*			Fix smoker is human he can smoke damage and if survivor and nemesis too
*			Fix if player is zombie and he is not smoker he can smoke damage
*		}
*		1.5 (Sept 24, 2011)
*		{
*			Fix cooldown not working after smoker backs to human/survivor and get infected again
*			Fix when cooldown is working still 3rdperson view
*			Fix Floortarget's beam not working
*			Fix nemesis and survivor may not be tongued
*			Fix nemesis can use long tongue
*			Fix survivor can release smoke death
*			(best) Added bot support on smoke damage
*			(bestornot) replace damage and death smokes
*			(best) created my own smoker's tongue
*		}
*		1.6 (Sept 24, 2011 (Uploaded))
*		{
*			Added cfg dir
*			(best) Added sounds when using long tongue
*			(best) Added smoker models and v-models	
*			tongue_Start function rewritten
*		}
*		1.7 (Sept 24, 2011 (Uploaded))
*		{
*			(best) Added rewards when used long tongue to somebody
*			(best) Added death smoke damage and block sreen every players at his radius
*			Fix if zombie can smoked via death smoke command
*		}
*		1.8 (Sept 24, 2011 (Uploaded))
*		{
*			Fix nemesis can be smoked via death smoke
*			Added rewards when victim somebody victimed by death smoke
*			(bestornot) Removed/Fix if zombie or a nemesis is long tongued smoker rewarded
*			Fix smoke death victim's smoke not working
*			Wrewwritten tongue_Start function 
*		}
*		1.9 (Sept 24, 2011 (Uploaded))
*		{ 
*			(best) Fix smoke death not working
*			(best) renew sounds + smoke death sound
*			Increases smoker's knockback so no need to stop damage
*			Changed some humesssage mistypes
*		}
* 		2.0 (Forgotten) 
*		{
*			 Removed some useless codes
*			 (best) Fix smoke death victim = after smoking hes screens turns to darky
* 			 Changed all hudmessage to colorchat
* 		}
*		2.1 (Oct 12, 2011 (Created))
*		{
*			Added cvar to allow/disallow using tongue to zombie (as requested by survival)
*		}
*		2.2 (Oct 13, 2011 (Uploaded))
*		{
*			Optomized codes
*		}
*/

/******************************************************
		[Include files]
******************************************************/

#include <amxmodx>
#include <zombieplague>
#include <fakemeta>
#include <hamsandwich>
#include <engine>

//IMPORTANT (install cs_ham_bots.amxx to your server)
	#include <cs_ham_bots_api>

/******************************************************
		[Plugin infos]
******************************************************/

#define PLUGIN "[ZP] Zombie Class Smoker"
#define VERSION "2.2"
#define AUTHOR "Snaker_beatter"

/******************************************************
		[Id(s)]
******************************************************/
//Sounds
new const sound_drag[] = "barnacle/bcl_chew1.wav"
new const sound_smo_die[] = "weapons/explode5.wav"
//Main Class, modelT & Sprite
new g_zclass_smoker, g_Tongue , g_xsmoke1 , g_xsmoke2
//Some vars
new g_tongued[33], g_tonguesLeft[33], g_unable2move[33]
new Float:g_lastTongue[33]
new bool: g_Ltongue_i[33] = false , bool: g_bind_isuse[33] = false
//Cvars
new cvar_tongue_speed, cvar_tongue_cooldown, cvar_tongue_stop_damage, cvar_tongue_stop_damage_fall, cvar_tongue_unb2move , cvar_tongue_start_autobind , cvar_smoke_damage_byplayer, cvar_smoke_damage_byfall , cvar_smoke_death_distance, cvar_smoke_death_blind, cvar_smoke_death_victimglow, cvar_tongue_reward,
cvar_tongue_zombietarget
//Smoker Atributes
new const zclass_name[] = { "Smoker" }
new const zclass_info[] = { "Long tongue & smokes" }
new const zclass_model[] = { "zombie_smoker" }
new const zclass_clawmodel[] = { "v_knife_smoker.mdl" }
const zclass_health = 2602
const zclass_speed = 249
const Float:zclass_gravity = 1.0
const Float:zclass_knockback = 1.5
/******************************************************
		[Main event] + [PLugin cfg]
******************************************************/

public plugin_init()
{
	cvar_tongue_speed = register_cvar("zp_smoker_tongue_speed", "250")
	cvar_tongue_cooldown = register_cvar("zp_smoker_tongue_cooldown", "0")
	cvar_tongue_stop_damage = register_cvar("zp_smoker_tongue_stop_damage", "250")
	cvar_tongue_stop_damage_fall = register_cvar("zp_smoker_tongue_stop_damage_fall", "25")
	cvar_tongue_unb2move = register_cvar("zp_smoker_tongue_unable_move", "3")
	cvar_tongue_start_autobind = register_cvar("zp_smoker_autobind", "1")
	cvar_tongue_reward = register_cvar("zp_smoker_tongue_reward", "2")
	cvar_tongue_zombietarget = register_cvar("zp_smoker_tongue_target_zombie", "1")
	cvar_smoke_damage_byfall = register_cvar("zp_smoker_smoke_damage_byfall", "1")
	cvar_smoke_damage_byplayer = register_cvar("zp_smoker_smoke_damage_byplayer", "1")
	cvar_smoke_death_distance = register_cvar("zp_smoker_smoke_death_distance", "180")
	cvar_smoke_death_blind = register_cvar("zp_smoker_smoke_death_blind", "5")
	cvar_smoke_death_victimglow = register_cvar("zp_smoker_smoke_death_glow", "1")
	register_event("ResetHUD", "newSpawn", "b")
	register_event("DeathMsg", "smoker_death", "a")
	register_forward(FM_PlayerPreThink, "fw_PlayerPreThink")
	RegisterHam(Ham_TakeDamage, "player", "fw_TakeDamage")
	/* Bot support start */
	//RegisterHamBots(Ham_Killed, "smoker_botdeath") 
	RegisterHamBots(Ham_TakeDamage, "fw_TakeDamage")
	/* Bot support end */
	register_clcmd("+smoker_tongue","tongue_start")
	register_clcmd("-smoker_tongue","tongue_end")
	plugin_cfg()
}

public plugin_cfg()
{
	new const derectory[] = "addons/amxmodx/configs/zp_zclass_smoker.cfg"
	server_cmd("exec %s", derectory)
}

/******************************************************
		[Precache event]
******************************************************/

public plugin_precache()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	g_zclass_smoker = zp_register_zombie_class(zclass_name, zclass_info, zclass_model, zclass_clawmodel, zclass_health, zclass_speed, zclass_gravity, zclass_knockback)
	g_Tongue = precache_model("sprites/zbeam4.spr")
	g_xsmoke1 = precache_model("sprites/l4d_smoke_damage.spr")
	g_xsmoke2 = precache_model("sprites/l4d_smoke_death.spr")
	precache_sound(sound_drag)
	precache_sound(sound_smo_die)
}

/****************************************************
		[Events]
****************************************************/

public zp_user_infected_post(id, infector)
{
	if (zp_get_user_zombie_class(id) == g_zclass_smoker)
	{	
		g_tonguesLeft[id] = 999
		new bind_mode = get_pcvar_num(cvar_tongue_start_autobind)
		if (bind_mode == 1)
		{
			g_bind_isuse[id] = true
			client_print(id, print_chat, "[ZP] You can use long tongue with 'E' key")
		}
		else if (bind_mode == 0)
		{
			g_bind_isuse[id] = false
			client_print(id, print_chat, "[ZP] You can use long tongue, just bind 'KEY' +tongue_start")
		}
	}
}

public newSpawn(id)
{
	if (g_tongued[id])
	{
		tongue_end(id)
	}
}

public smoker_botdeath(victim, attacker, shouldgib)
{	
}
public smoker_death() // if smoker dies drag off
{
	new id = read_data(2)
	smoke_death(id)
	beam_remove(id)
	
	if (g_tongued[id])
		tongue_end(id)
}

public fw_TakeDamage(victim, inflictor, attacker, Float:damage) // if take damage drag off
{
	new g_cvar_falls = get_pcvar_num(cvar_tongue_stop_damage_fall) > 0 || get_pcvar_num(cvar_smoke_damage_byfall) > 0
	new g_cvar_players = get_pcvar_num(cvar_tongue_stop_damage) > 0 || get_pcvar_num(cvar_smoke_damage_byplayer) > 0
		
	if (zp_get_user_zombie_class(victim) == g_zclass_smoker)
	{
		new g_over_damage[33] 
		g_over_damage[victim] = g_over_damage[victim] + floatround(damage)

		if (victim == attacker || !is_user_connected(attacker) && (g_cvar_falls)) 
		{
			if (g_over_damage[victim] >= get_pcvar_num(cvar_tongue_stop_damage_fall))
			{
				g_over_damage[victim] = 0
				tongue_end(victim)
				return HAM_IGNORED;
			}
			if (damage > get_pcvar_num(cvar_smoke_damage_byfall))
			{
				g_over_damage[victim] = 0
				smoke_damage(victim)
				return HAM_IGNORED;
			}
		}
		
		if (is_user_alive(attacker) && (g_cvar_players))
		{
			if (g_over_damage[victim] >= get_pcvar_num(cvar_smoke_damage_byplayer))
			{
				g_over_damage[victim] = 0
				smoke_damage(victim)
			}
			
			if (g_over_damage[victim] >= get_pcvar_num(cvar_tongue_stop_damage))
			{
				g_over_damage[victim] = 0
				tongue_end(victim)
				return HAM_IGNORED;
			}
		}		
	}
	
	return HAM_IGNORED
}

public fw_PlayerPreThink(id)
{
	if (!is_user_alive(id))
	{
		return FMRES_IGNORED
	}
		
	new button = get_user_button(id)
	new oldbutton = get_user_oldbutton(id)
	
	if (g_bind_isuse[id] && zp_get_user_zombie(id) && (zp_get_user_zombie_class(id) == g_zclass_smoker))
	{
		if (!(oldbutton & IN_USE) && (button & IN_USE))
		{
			tongue_start(id)
		}
		if ((oldbutton & IN_USE) && !(button & IN_USE))
		{
			tongue_end(id)
		}
	}
	
	if (!g_Ltongue_i[id])
	{
		g_unable2move[id] = false
	}
		
	if (g_unable2move[id] && get_pcvar_num(cvar_tongue_unb2move) > 0)
	{
		set_pev(id, pev_maxspeed, 1.0)
	}
	
	return PLUGIN_CONTINUE
}

public client_disconnect(id) // if client disconnects drag off
{
	if (id <= 0 || id > 32)
		return
	
	if (g_tongued[id])
		tongue_end(id)
	
	if(g_unable2move[id])
		g_unable2move[id] = false
}

/*****************************************************
		[main commands]
*****************************************************/

public tongue_start(id) // starts drag, checks if player is Smoker, checks cvars
{	
	new g_unalive = is_user_alive(id)
	if (zp_get_user_survivor(id))
	{
		print_chatColor(id, "\g[ZP] \nYou can't use smoker's\tlong tongue if you're a survivor!")
		return PLUGIN_HANDLED
	}
	
	if (zp_get_user_nemesis(id))
	{
		print_chatColor(id, "\g[ZP] \nYou can't use \tlong tongue if you are nemesis!")
		return PLUGIN_HANDLED
	}
	
	if (!g_unalive)
	{
		print_chatColor(id, "\g[ZP] \nYou can't use \tlong tongue if you are death!")
		return PLUGIN_HANDLED
	}
			
	if (zp_get_user_zombie(id))
	{
		if (zp_get_user_zombie_class(id) == g_zclass_smoker)
		{	
			if (!g_Ltongue_i[id]) 
			{
				set_view(id, CAMERA_NONE)
				static Float:cdown
				cdown = get_pcvar_float(cvar_tongue_cooldown)

				if (!g_unalive) 
				{
					print_chatColor(id, "\g[ZP] \nYou can't use \tlong tongue if you are death!")
					return PLUGIN_HANDLED
				}
			
				if (g_tonguesLeft[id] <= 0) 
				{
					print_chatColor(id, "\g[ZP] \nYou use max \tlong tongue, you cant do anymore")
					return PLUGIN_HANDLED
				}

				if (get_gametime() - g_lastTongue[id] < cdown) 
				{
					print_chatColor(id, "\g[ZP] \nYou have to \twait %.f0  to use long tongue again!", get_pcvar_float(cvar_tongue_cooldown) - (get_gametime() - g_lastTongue[id]))
					set_view(id, CAMERA_NONE)
					return PLUGIN_HANDLED
				}

				new tonguetarget, targetbody
				get_user_aiming(id, tonguetarget, targetbody)
				
				if (is_user_alive(tonguetarget))
				{
					tonguetarget_classes(id, tonguetarget)
					
					if (get_pcvar_float(cvar_tongue_speed) <= 0.0)
						cvar_tongue_speed = 1
			
					new parm[2]
					parm[0] = id
					parm[1] = tonguetarget
					
					set_task(0.1, "smoker_reelin", id, parm, 2, "b")
					harpoon_target(parm)
						
					g_tonguesLeft[id]--
					g_Ltongue_i[id] = true
				
					if (get_pcvar_num(cvar_tongue_unb2move) == 1)
					{
						g_unable2move[tonguetarget] = true
					}	
				}
				else 
				{
					g_tongued[id] = 33
					FloorTarget(id)
					emit_sound(tonguetarget, CHAN_BODY, sound_drag, 1.0, ATTN_NORM, 0, PITCH_HIGH)
					g_Ltongue_i[id] = true
					g_tonguesLeft[id]--
				}		
			}
			else 
				return PLUGIN_HANDLED
		}	
	}
	else 
	{
		print_chatColor(id, "\g[ZP] \nYou can't use \tsmoker's long tongue if you're a  human!")	
		return PLUGIN_HANDLED
	}
	return PLUGIN_CONTINUE
}

public smoker_reelin(parm[]) // player to smoker
{
	new id = parm[0]
	new victim = parm[1]

	if (!g_tongued[id] || !is_user_alive(victim))
	{
		tongue_end(id)
		return
	}
	
	new Float:fl_Velocity[3]
	new idOrigin[3], vicOrigin[3]

	get_user_origin(victim, vicOrigin)
	get_user_origin(id, idOrigin)

	new distance = get_distance(idOrigin, vicOrigin)

	if (distance > 1)
	{
		new Float:fl_Time = distance / get_pcvar_float(cvar_tongue_speed)

		fl_Velocity[0] = (idOrigin[0] - vicOrigin[0]) / fl_Time
		fl_Velocity[1] = (idOrigin[1] - vicOrigin[1]) / fl_Time
		fl_Velocity[2] = (idOrigin[2] - vicOrigin[2]) / fl_Time
	} 
	else 
	{
		fl_Velocity[0] = 0.0
		fl_Velocity[1] = 0.0
		fl_Velocity[2] = 0.0
	}

	entity_set_vector(victim, EV_VEC_velocity, fl_Velocity)
}

public tongue_end(id) // drags end function
{
	g_tongued[id] = 0
	beam_remove(id)
	remove_task(id)
	set_view(id, CAMERA_NONE)
	
	if (g_Ltongue_i[id])
	{
		g_lastTongue[id] = get_gametime()
	}
	g_Ltongue_i[id] = false
	g_unable2move[id] = false
}

public harpoon_target(parm[]) // set long tongue if target is player
{
	new id = parm[0]
	new tonguetarget = parm[1]

	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(8)	// TE_BEAMENTS
	write_short(id)
	write_short(tonguetarget)
	write_short(g_Tongue)	// sprite index
	write_byte(0)	// start frame
	write_byte(0)	// framerate
	write_byte(200)	// life
	write_byte(12)	// width
	write_byte(1)	// noise
	write_byte(58)	// r, g, b
	write_byte(68)	// r, g, b
	write_byte(57)	// r, g, b
	write_byte(90)	// brightness
	write_byte(10)	// speed
	message_end()
}

public FloorTarget(id) // set long tongue target isn't player
{
	set_view(id, CAMERA_NONE)
	new endorigin[3]
	get_user_origin(id, endorigin, 3)

	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte (TE_BEAMENTPOINT); // TE_BEAMENTPOINT
	write_short(id)
	write_coord(endorigin[0])
	write_coord(endorigin[1])
	write_coord(endorigin[2])
	write_short(g_Tongue) // sprite index
	write_byte(0)	// start frame
	write_byte(0)	// framerate
	write_byte(200)	// life
	write_byte(15)	// width
	write_byte(1)	// noise
	write_byte(58)	// r, g, b
	write_byte(68)	// r, g, b
	write_byte(57)	// r, g, b
	write_byte(90)	// brightness
	write_byte(10)	// speed
	message_end()
}

public beam_remove(id) // remove beam
{
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(99)	//TE_KILLBEAM
	write_short(id)	//entity
	message_end()
}

public smoke_damage(id) // when smoker damaged create smoke
{
	if (zp_get_user_survivor(id))
	{
		return PLUGIN_HANDLED
	}
	if (zp_get_user_nemesis(id))
	{
		return PLUGIN_HANDLED
	}
	if (zp_get_user_zombie(id))
	{
		if (zp_get_user_zombie_class(id) == g_zclass_smoker)
		{
			new g_scale
			g_scale = random_num(60, 70)
			new Float:origin[3]
			pev(id, pev_origin, origin)
			create_sprite(origin, g_xsmoke1, 100, g_scale)
			screenshakeandflash(id)
		}
	}
	else
	{
		return PLUGIN_HANDLED
	}
	return PLUGIN_HANDLED
}

public smoke_death(id) // when smoker dies create smoke
{
	if (zp_get_user_survivor(id))
	{
		return PLUGIN_HANDLED
	}
	if (zp_get_user_nemesis(id))
	{
		return PLUGIN_HANDLED
	}
	if (zp_get_user_zombie(id))
	{
		if (zp_get_user_zombie_class(id) == g_zclass_smoker)
		{
			new Float:origin[3]
			pev(id, pev_origin, origin)
			create_sprite(origin, g_xsmoke2, 200, 180)
			deathh_smoke(id)
			emit_sound(id, CHAN_BODY, sound_smo_die, 1.0, ATTN_NORM, 0, PITCH_NORM)
		}
	}
	else
	{
		return PLUGIN_HANDLED
	}
	
	return PLUGIN_HANDLED
}

public screenshakeandflash(id)
{
	new g_msgScreenShake = get_user_msgid("ScreenShake")
	message_begin(MSG_ONE_UNRELIABLE, g_msgScreenShake, _, id)
	write_short(1<<12*4) // amplitude
	write_short(1<<12*2) // duration
	write_short(1<<12*10) // frequency
	message_end()
	new g_msgScreenFade = get_user_msgid("ScreenFade")
	message_begin(MSG_ONE, g_msgScreenFade, {0,0,0}, id)
	write_short( 1<<10) // fade lasts this long duration
	write_short( 1<<10) // fade lasts this long hold time
	write_short( 1<<12 ) // fade type (in / out)
	write_byte(255) // fade red
	write_byte(255) // fade green
	write_byte(255) // fade blue
	write_byte(100) // fade alpha
	message_end()
}

public tonguetarget_classes(id, target)
{
	/* Note: this targets are alive, if you want death go back to line "447" */
	new id_name[32], target_name[32]
	get_user_name(id, id_name, 31)
	get_user_name(target, target_name, 31)
				
	if (zp_get_user_survivor(target))
	{
		give_ammopacks(id)
		print_chatColor(id, "\g[ZP] \nYou are using you're \tlong tongue to enemy %s You are rewarded %d AP", target_name, get_pcvar_num(cvar_tongue_reward))
		print_chatColor(target, "\g[ZP] \tsmoker %s is using he's long tongue to you!", id_name)
		g_tongued[id] = target
		emit_sound(target, CHAN_BODY, sound_drag, 1.0, ATTN_NORM, 0, PITCH_NORM)
	}
	if (zp_get_user_nemesis(target))
	{
		print_chatColor(id, "\g[ZP] \nYou are using you're \tlong tongue to %s", target_name)
		print_chatColor(target, "\g[ZP] \nsmoker %s is using \the's long tongue to you!", id_name)
		g_tongued[id] = target
		emit_sound(target, CHAN_BODY, sound_drag, 1.0, ATTN_NORM, 0, PITCH_NORM)
	}
	
	if (zp_get_user_zombie(target))
	{
		if (get_pcvar_num(cvar_tongue_zombietarget) == 1)
		{
			print_chatColor(id, "\g[ZP] \nYou are using you're \tlong tongue to %s", target_name)
			print_chatColor(target, "\g[ZP] \nsmoker %s is using \the's long tongue to you!", id_name)
			g_tongued[id] = target
			emit_sound(target, CHAN_BODY, sound_drag, 1.0, ATTN_NORM, 0, PITCH_NORM)
		}
		else
		{
			g_tongued[id] = target = false
			print_chatColor(id, "\g[ZP] \nYou \tCant use long tongue to %s", target_name)
			emit_sound(target, CHAN_BODY, sound_drag, 1.0, ATTN_NORM, 0, PITCH_NORM) // still add some sound so it wont show as a bug
		}
		if (get_pcvar_num(cvar_tongue_zombietarget) == 2) // allow only for smoker zombies
		{
			if (zp_get_user_zombie_class(target) == g_zclass_smoker)
			{
				g_tongued[id] = target			
				print_chatColor(id, "\g[ZP] \nYou are using you're \tlong tongue to %s", target_name)
				print_chatColor(target, "\g[ZP] \nsmoker %s is using \the's long tongue to you!", id_name)				
				emit_sound(target, CHAN_BODY, sound_drag, 1.0, ATTN_NORM, 0, PITCH_NORM) // still add some sound so it wont show as a bug
			}
			//else { 
			if (zp_get_user_zombie_class(target) != g_zclass_smoker)
			{
				g_tongued[id] = target = false
				print_chatColor(id, "\g[ZP] \nYou \tCan only use long tongue to smokers")
				emit_sound(target, CHAN_BODY, sound_drag, 1.0, ATTN_NORM, 0, PITCH_NORM)
			}
			//} //else is end
		}
	}
	else
	{
		give_ammopacks(id)
		print_chatColor(id, "\g[ZP] \nYou are using you're \tlong tongue to enemy %s You rewarded %d AP", target_name, get_pcvar_num(cvar_tongue_reward))
		print_chatColor(target, "\g[ZP] \nsmoker %s is using \the's long tongue to you!", id_name)
		g_tongued[id] = target
		emit_sound(target, CHAN_BODY, sound_drag, 1.0, ATTN_NORM, 0, PITCH_NORM)
	}
}

public deathh_smoke(id)
{
	new bool:deathh_smoke_allowed[33]
	for(new i = 1; i <= get_maxplayers(); i ++)
	{
		if (zp_get_user_zombie(i) || get_entity_distance(id, i) > get_pcvar_num(cvar_smoke_death_distance))
		{
			return PLUGIN_HANDLED
		}
		
		if (is_user_bot(i))
		{
			deathh_smoke_allowed[id] = true
		}
		
		print_chatColor(id, "\g[ZP] \nYou rewarded \t2 ammopacks by using smoke death to a victim")
		give_ammopacks(id)

		new g_msgScreenFade = get_user_msgid("ScreenFade")
		message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, i)
		write_short(get_pcvar_num(cvar_smoke_death_blind)) // Time
		write_short(get_pcvar_num(cvar_smoke_death_blind)) // time
		write_short(0x0004)
		write_byte(255) // red
		write_byte(255) // green
		write_byte(255) // blue
		write_byte(135) // Alpha
		message_end()
		
		new Float:orgin[3]
		pev(i, pev_origin, orgin)
		new g_scale = random_num(40, 30)
		create_sprite(orgin, g_xsmoke1, 150, g_scale)
		
		if(get_pcvar_num(cvar_smoke_death_victimglow) == 1)
		{
			set_rendering(i, kRenderFxGlowShell, 255, 255, 255, kRenderNormal, 25)
			print_chatColor(i, "\g[ZP] \n You'd been \tsmoked by smoker's death smoke")
		}
		
		set_task(get_pcvar_float(cvar_smoke_death_blind), "deathh_smoke_unblind", i)
	}
	return PLUGIN_HANDLED
}

public deathh_smoke_unblind(user)
{
	new g_msgScreenFade = get_user_msgid("ScreenFade")
	message_begin(MSG_ONE_UNRELIABLE, g_msgScreenFade, _, user)
	write_short(1<<12) // Time
	write_short(0) // time
	write_short(0x0004)
	write_byte(0) // red
	write_byte(0) // green
	write_byte(0) // blue
	write_byte(1) // Alpha (if use 100 or upper will cause dark screen to user (not bug))
	message_end()
	
	new Float:orgin[3]
	pev(user, pev_origin, orgin)
	new g_scale = random_num(40, 30)
	create_sprite(orgin, g_xsmoke1, 130, g_scale)
	
	// plus remove glow
	if (get_pcvar_num(cvar_smoke_death_victimglow) == 1)
	{
		set_rendering(user)
	}
}

stock give_ammopacks(id)
{
	new get_ammopacks = zp_get_user_ammo_packs(id)
	new gives_ammopacks = get_pcvar_num(cvar_tongue_reward)
	zp_set_user_ammo_packs(id, get_ammopacks + gives_ammopacks)
}

stock create_sprite(const Float:XYZ_position[3], sprite_index, brightness, scale)
{
	// Sprite
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_SPRITE) // TE id (Additive sprite, plays 1 cycle)
	engfunc(EngFunc_WriteCoord, XYZ_position[0]) // x
	engfunc(EngFunc_WriteCoord, XYZ_position[1]) // y
	engfunc(EngFunc_WriteCoord, XYZ_position[2]) // z
	write_short(sprite_index) // sprite index
	write_byte(scale) // scale in 0.1's
	write_byte(brightness) // brightness
	message_end()
}

// Print chat color by x[L]eonn
stock print_chatColor(const id,const input[], any:...)
{
	new msg[191], players[32], count = 1;
	vformat(msg,190,input,3);
	replace_all(msg,190,"\g","^4");// green
	replace_all(msg,190,"\n","^1");// normal
	replace_all(msg,190,"\t","^3");// team
	
	if (id) players[0] = id; else get_players(players,count,"ch");
	for (new i=0;i<count;i++)
	if (is_user_connected(players[i]))
	{
		message_begin(MSG_ONE_UNRELIABLE,get_user_msgid("SayText"),_,players[i]);
		write_byte(players[i]);
		write_string(msg);
		message_end();
	}
}
Godofwar is offline
ExceLo
Junior Member
Join Date: Feb 2018
Location: Morocco
Old 02-28-2018 , 04:43   Re: Add VIP Only to SMA Smoker Zombie plague
Reply With Quote #2

Learn How From this Link : https://forums.alliedmods.net/showpo...&postcount=171

Don't Forget to add this include to your Includes File .
Attached Files
File Type: inc cs_ham_bots_api.inc (1.4 KB, 195 views)

Last edited by ExceLo; 02-28-2018 at 05:12.
ExceLo is offline
Godofwar
AlliedModders Donor
Join Date: Dec 2015
Location: Germany
Old 02-28-2018 , 13:48   Re: Add VIP Only to SMA Smoker Zombie plague
Reply With Quote #3

THX !!!!
Godofwar is offline
oussama90
Junior Member
Join Date: Mar 2018
Old 03-28-2018 , 06:44   Re: Add VIP Only to SMA Smoker Zombie plague
Reply With Quote #4

bro i want zm class only with who have flag "r" will use this ZM
this ZM can frezz human when he throw bullet by cliking "g"

name this ZM CLASS is ice revenat
pic of this ZM :
https://imgur.com/a/sS7Z1

and i want zm his name is "spendor" you can find that in server CLARION ZM ARMY
this ZM class when he press g will got ZM madness for 10 sec and shold wait 10 sec to use that power next
i want zm class only with who have flag "o" will use this ZM

and if you can i want to plugin for unlimited ammo packs with flag "r"
who have flag "r" will have unlimited ammo packs

zm plugin mod 5.0.8


and thx for help
oussama90 is offline
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off

Forum Jump


All times are GMT -4. The time now is 07:54.


Powered by vBulletin®
Copyright ©2000 - 2024, vBulletin Solutions, Inc.
Theme made by Freecode