Available guns only for ADMINS

Unpaid Requests, Public Plugins
Post Reply
czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

guns only for ADMINS

#1

Post by czirimbolo » 5 years ago

Can someone covert this guns to 1,3version zombie escape and make it FOR ADMIN only?

Charger 7:

Code: Select all

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <fun>
#include <hamsandwich>
#include <xs>
#include <cstrike>
#include <zombieplague>

new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }

new g_event, Float:TargetOrigin[33][3]
new g_has[33], g_clip[33], oldweap[33]
new ammo[33], mode[33], damaged[33], sprite
new charger

public plugin_init()
{
	register_plugin("[Weapon]: Charger-7", "1.0", "YunusReyiz")	
	register_event("CurWeapon","CurrentWeapon","be","1=1")
	
	register_forward(FM_SetModel, "SetModel")
	register_forward(FM_UpdateClientData, "UpdateClientData_Post", 1)
	register_forward(FM_PlaybackEvent, "PlaybackEvent")
	register_forward(FM_CmdStart, "CmdStart")

	RegisterHam(Ham_TraceAttack, "worldspawn", "TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "player", "TraceAttack")
	RegisterHam(Ham_Item_AddToPlayer, "weapon_m249", "AddToPlayer")
	RegisterHam(Ham_Item_PostFrame, "weapon_m249", "ItemPostFrame")
	
	RegisterHam(Ham_Weapon_Reload, "weapon_m249", "Reload")
	RegisterHam(Ham_Weapon_Reload, "weapon_m249", "Reload_Post", 1)	
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "PrimaryAttack")
	RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "PrimaryAttack_Post", 1)
	RegisterHam(Ham_Weapon_WeaponIdle, "weapon_m249", "IdleAnim", 1)

	charger = zp_register_extra_item("Charger-7", 40, ZP_TEAM_HUMAN)
	//register_clcmd("say c7", "give_weapon")
}

public plugin_precache()
{
	precache_model("models/v_charger7.mdl")
	precache_model("models/p_charger7.mdl")
	precache_model("models/w_charger7.mdl")
	precache_sound("weapons/charger7-1.wav")
	precache_sound("weapons/charger7-2.wav")
	sprite = precache_model("sprites/laserbeam.spr")
	register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
}

public TraceAttack(ent, attacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
	if(!is_user_alive(attacker))
		return

	new g_currentweapon = get_user_weapon(attacker)

	if(g_currentweapon != CSW_M249) return
	
	if(!g_has[attacker]) return

	get_tr2(ptr, TR_vecEndPos, TargetOrigin[attacker])
	
	if(ent)
	{
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_DECAL)
		engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][0])
		engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][1])
		engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][2])
		write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
		write_short(ent)
		message_end()
	}
	else
	{
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_WORLDDECAL)
		engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][0])
		engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][1])
		engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][2])
		write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
		message_end()
	}
	
	if(mode[attacker])
	{
		SetHamParamFloat(3, float(390))
		static Float:StartOrigin[3]
		get_position(attacker, 40.0, 6.0, -7.0, StartOrigin)

		create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 1, 20, 0, 0, 255, 255, 175, 0)
		create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 2, 20, 0, 0, 225, 225, 150, 0)
		create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 3, 20, 0, 0, 200, 200, 130, 0)
		create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 4, 20, 0, 0, 175, 175, 110, 0)
		create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 5, 20, 0, 0, 150, 150, 90, 0)
		create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 6, 20, 0, 0, 125, 125, 70, 0)
		create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 7, 20, 0, 0, 100, 100, 50, 0)
		create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 8, 20, 0, 0, 75, 75, 40, 0)
		create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 9, 20, 0, 0, 50, 50, 20, 0)
		create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 10, 20, 0, 0, 25, 25, 10, 0)
	}
	else 
	{	
		SetHamParamFloat(3, float(39))
		damaged[attacker]++
	}
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_GUNSHOTDECAL)
	engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][0])
	engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][1])
	engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][2])	
	write_short(attacker)
	write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
	message_end()
}

public TakeDamage(victim, inflictor, attacker, Float:damage) if (victim != attacker && is_user_connected(attacker) && get_user_weapon(attacker) == CSW_M249 && g_has[attacker] && mode[attacker] == 0) damaged[attacker]++

public PrecacheEvent_Post(type, const name[]) if(equal("events/m249.sc", name)) g_event = get_orig_retval()

public client_disconnect(id) g_has[id] = false

public zp_extra_item_selected(id, itemid)
{
	if(itemid != charger)
		return

	give_weapon(id)
}

public SetModel(entity, model[])
{
	if(!is_valid_ent(entity))
		return FMRES_IGNORED
	
	static szClassName[33]
	entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
		
	if(!equal(szClassName, "weaponbox"))
		return FMRES_IGNORED
	
	static iOwner
	
	iOwner = entity_get_edict(entity, EV_ENT_owner)
	
	if(equal(model, "models/w_m249.mdl"))
	{
		static iStoredAugID
		
		iStoredAugID = find_ent_by_owner(-1, "weapon_m249", entity)
	
		if(!is_valid_ent(iStoredAugID))
			return FMRES_IGNORED
	
		if(g_has[iOwner])
		{
			entity_set_int(iStoredAugID, EV_INT_impulse, 45488)
			
			g_has[iOwner] = false
			
			entity_set_model(entity, "models/w_charger7.mdl")
			
			return FMRES_SUPERCEDE
		}
	}
	return FMRES_IGNORED
}

public CmdStart(id, uc_handle, seed)
{		
	if(!g_has[id])
		return

	if(!is_user_alive(id))
		return

	if(get_pdata_int(get_pdata_cbase(id, 373), 43, 4) != CSW_M249 || get_pdata_float(id, 83) > 0.0)
		return

	new iButtons = get_uc(uc_handle, UC_Buttons)
 
	if(/*!(iButtons & IN_ATTACK) && */(iButtons & IN_ATTACK2))
	{
		//iButtons &= ~IN_ATTACK2
		set_uc(uc_handle, UC_Buttons, iButtons)
		if(get_pdata_float(get_pdata_cbase(id, 373), 47, 4) <= 0.0 && ammo[id] > 0)
		{
			if(get_pdata_int(get_pdata_cbase(id, 373), 51) <= 0 && ammo[id] < 0)
				return
				
			set_pdata_float(id, 83, 1.2, 5)
 			mode[id] = 1
			ExecuteHamB(Ham_Weapon_PrimaryAttack, find_ent_by_owner(-1, "weapon_m249", id))
		}
	}
	else if(!(iButtons & IN_ATTACK2) && (iButtons & IN_ATTACK)) mode[id] = 0
}

public give_weapon(id)
{
	new iWep2 = give_item(id,"weapon_m249")
	if( iWep2 > 0 )
	{
		cs_set_weapon_ammo(iWep2, 100)
		cs_set_user_bpammo (id, CSW_M249, 200)	
		set_anim(id, 2)
		set_pdata_float(id, 83, 1.0, 5)
	}
	g_has[id] = true
	damaged[id] = 0
}

public AddToPlayer(wpn, id)
{
	if(!is_valid_ent(wpn) || !is_user_connected(id))
		return HAM_IGNORED
	
	if(entity_get_int(wpn, EV_INT_impulse) == 45488)
	{
		g_has[id] = true
		
		entity_set_int(wpn, EV_INT_impulse, 0)
	}
	return HAM_IGNORED
}

public IdleAnim(Weapon)
{
	new id = get_pdata_cbase(Weapon, 41, 4)

	if(!is_user_alive(id) || !g_has[id] || get_user_weapon(id) != CSW_M249)
		return HAM_IGNORED;
	
	if(get_pdata_float(Weapon, 48, 4) <= 0.25)
	{
		if(ammo[id] > 0) set_anim(id, 1)
		else if(ammo[id] == 0) set_anim(id, 0)
		set_pdata_float(Weapon, 48, 4.0, 4)
		return HAM_SUPERCEDE;
	}
	return HAM_IGNORED;
}

public CurrentWeapon(id) replace_weapon_models(id, read_data(2))

replace_weapon_models(id, weaponid)
{
	switch (weaponid)
	{
		case CSW_M249:
		{			
			if(g_has[id])
			{
				set_pev(id, pev_viewmodel2, "models/v_charger7.mdl")
				set_pev(id, pev_weaponmodel2, "models/p_charger7.mdl")
				if(oldweap[id] != CSW_M249) 
				{
					if(ammo[id] > 0) set_anim(id, 9)
					else if(ammo[id] == 0)  set_anim(id, 8)
					set_pdata_float(id, 83, 1.0, 5)
				}
			}
		}
	}
	oldweap[id] = weaponid
}

public UpdateClientData_Post(Player, SendWeapons, CD_Handle)
{
	if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_M249 || !g_has[Player]))
		return FMRES_IGNORED
	
	set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
	return FMRES_HANDLED
}

public PrimaryAttack(ent)
{
	new id = get_pdata_cbase(ent, 41, 4)
	
	if (!g_has[id]) return
}

public PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
	if ((eventid != g_event))
		return FMRES_IGNORED
	if (!(1 <= invoker <= get_maxplayers()))
	return FMRES_IGNORED

	playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
	return FMRES_SUPERCEDE
	
}

public PrimaryAttack_Post(ent)
{
	new id = get_pdata_cbase(ent, 41, 4)
	
	if(!is_user_alive(id) || !g_has[id])
		return

	if(damaged[id] >= 6 && ammo[id] < 20)
	{
		ammo[id]++
		damaged[id] = 0
	}
	if(mode[id] == 1)
	{
		static fm; fm = fm_find_ent_by_owner(-1, "weapon_m249", id)
		if(pev_valid(fm)) cs_set_weapon_ammo(fm, cs_get_weapon_ammo(fm) + 1)
		emit_sound(id, CHAN_WEAPON, "weapons/charger7-2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		ammo[id]--
	}
	else emit_sound(id, CHAN_WEAPON, "weapons/charger7-1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	if(ammo[id] > 0) set_anim(id, 3)
	else set_anim(id, 2)
}

stock create_beampoints(Float:StartPosition[3], Float:TargetPosition[3], SpritesID, StartFrame, Framerate, Life, LineWidth, Amplitude, Red, Green, Blue, Brightness, Speed)
{
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMPOINTS)
	engfunc(EngFunc_WriteCoord, StartPosition[0])
	engfunc(EngFunc_WriteCoord, StartPosition[1])
	engfunc(EngFunc_WriteCoord, StartPosition[2])
	engfunc(EngFunc_WriteCoord, TargetPosition[0])
	engfunc(EngFunc_WriteCoord, TargetPosition[1])
	engfunc(EngFunc_WriteCoord, TargetPosition[2])
	write_short(SpritesID)
	write_byte(StartFrame)
	write_byte(Framerate)
	write_byte(Life)
	write_byte(LineWidth)
	write_byte(Amplitude)
	write_byte(Red)
	write_byte(Green)
	write_byte(Blue)
	write_byte(Brightness)
	write_byte(Speed)
	message_end()
}

public client_PreThink(id)
{
	if(!is_user_alive(id) || !g_has[id] || get_user_weapon(id) != CSW_M249)
		return

	set_hudmessage(200, 200, 200, 0.45, 0.88, 0, 0.1, 0.1,0.0,0.0)
	show_hudmessage(id, "Ammo: %d", ammo[id])
}

stock set_anim(const Player, const Sequence)
{
	set_pev(Player, pev_weaponanim, Sequence)
	
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
	write_byte(Sequence)
	write_byte(pev(Player, pev_body))
	message_end()
}

public ItemPostFrame(weapon_entity) 
{
     new id = pev(weapon_entity, pev_owner)
     if (!is_user_connected(id))
          return HAM_IGNORED

     if (!g_has[id])
          return HAM_IGNORED

     static iClipExtra
     
     iClipExtra = 100
     new Float:flNextAttack = get_pdata_float(id, 83, 5)

     new iBpAmmo = cs_get_user_bpammo(id, CSW_M249)
     new iClip = get_pdata_int(weapon_entity, 51, 4)

     new fInReload = get_pdata_int(weapon_entity, 54, 4) 

     if( fInReload && flNextAttack <= 0.0 )
     {
	     new j = min(iClipExtra - iClip, iBpAmmo)
	
	     set_pdata_int(weapon_entity, 51, iClip + j, 4)
	     cs_set_user_bpammo(id, CSW_M249, iBpAmmo-j)
		
	     set_pdata_int(weapon_entity, 54, 0, 4)
	     fInReload = 0
     }
     return HAM_IGNORED
}

public Reload(weapon_entity) 
{
     new id = pev(weapon_entity, pev_owner)
     if (!is_user_connected(id))
          return HAM_IGNORED

     if (!g_has[id])
          return HAM_IGNORED

     static iClipExtra

     if(g_has[id])
          iClipExtra = 100

     g_clip[id] = -1

     new iBpAmmo = cs_get_user_bpammo(id, CSW_M249)
     new iClip = get_pdata_int(weapon_entity, 51, 4)

     if (iBpAmmo <= 0)
          return HAM_SUPERCEDE

     if (iClip >= iClipExtra)
          return HAM_SUPERCEDE

     g_clip[id] = iClip

     return HAM_IGNORED
}

public Reload_Post(weapon_entity) 
{
	new id = pev(weapon_entity, pev_owner)
	if (!is_user_connected(id))
		return HAM_IGNORED

	if (!g_has[id])
		return HAM_IGNORED

	if (g_clip[id] == -1)
		return HAM_IGNORED

	set_pdata_int(weapon_entity, 51, g_clip[id], 4)

	set_pdata_int(weapon_entity, 54, 1, 4)

	if(ammo[id] > 0) set_anim(id, 7)
	else if(ammo[id] == 0) set_anim(id, 6)

	return HAM_IGNORED
}

stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
{
	static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
	
	pev(id, pev_origin, vOrigin)
	pev(id, pev_view_ofs, vUp) //for player
	xs_vec_add(vOrigin, vUp, vOrigin)
	pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles
	
	angle_vector(vAngle, ANGLEVECTOR_FORWARD, vForward) //or use EngFunc_AngleVectors
	angle_vector(vAngle, ANGLEVECTOR_RIGHT, vRight)
	angle_vector(vAngle, ANGLEVECTOR_UP, vUp)
	
	vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
	vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
	vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1055\\ f0\\ fs16 \n\\ par }
*/
Knock Weapon

Code: Select all

/*
	[ZP] ExtraItem: Knock Weapon

	Plugin by Shidla [SGC]

	Credits:
	Idea: Koshak		| ICQ: 283-361-228	(zombie-mod.ru)
	Test: Koshak


	Shidla [SGC] | 2011 | ICQ: 312-298-513 | http://Shidla.Gm-Project.NET/ | http://Shidla.QuZ.SU/

	1.0 [Final Version]
*/

#include <amxmodx>
#include <hamsandwich>
#include <fakemeta_util>
#include <cstrike>
#include <zombieplague>

#define is_valid_player(%1) (1 <= %1 <= 32)
#define KNOCK_WEAP CSW_XM1014

new CNOC_V_MODEL[64] = "models/zombie_plague/v_knock_weap.mdl";
new CNOC_P_MODEL[64] = "models/zombie_plague/p_knock_weap.mdl";

new weap_push, weap_radius, weap_nofall, weap_fx, weap_iammo, weap_one_round, g_extra_weap;
new lastammo[33], lastweap[33];
new g_Explosion;
new NoFallDamage[33], g_Has_Cnoc_Weapon[33];

public plugin_init()
{
	register_plugin("[ZP] Knock Weapon", "1.0", "Emp` | Shidla");
	register_cvar("Shidla", "[ZP] Knock Weapon v.1.0", FCVAR_SERVER|FCVAR_SPONLY)
	register_cvar("zp_knock_weap", "[ZP] Knock Weapon v.1.0", FCVAR_SERVER|FCVAR_SPONLY)

	g_extra_weap = zp_register_extra_item("Cnoc XM1014", 25, ZP_TEAM_HUMAN);

	weap_push = register_cvar("zp_weap_knock","800.0");
	weap_radius = register_cvar("zp_weap_radius","400.0");
	weap_nofall = register_cvar("zp_weap_nofall","1");
	weap_fx = register_cvar("zp_weap_fx","3");
	weap_iammo = register_cvar("zp_weap_iammo","1");
	weap_one_round = register_cvar("zp_weap_oneround","1");

	register_event("CurWeapon","make_tracer", "be", "1=1");
	register_event("HLTV", "NewRound", "a", "1=0", "2=0");

	register_forward(FM_PlayerPreThink,"fw_playerprethink");
	register_forward(FM_PlayerPostThink,"fw_playerpostthink");
	RegisterHam(Ham_Killed, "player", "fw_PlayerKilled");
}

public plugin_precache()
{
	g_Explosion = precache_model("sprites/zerogxplode.spr");

	precache_model(CNOC_V_MODEL);
	precache_model(CNOC_P_MODEL);
}

public zp_extra_item_selected(id, item)
{
	if(item == g_extra_weap)
	{
		if(g_Has_Cnoc_Weapon[id])
		{
			client_print(id, print_chat, "[ZP] Already have Cnoc XM1014");
			return ZP_PLUGIN_HANDLED;
		}
		else
		{
			g_Has_Cnoc_Weapon[id] = true;
			fm_give_item(id, "weapon_xm1014")
			fm_give_item(id, "ammo_buckshot")
		}
	}

	return PLUGIN_CONTINUE;
}

public make_tracer(id)
{
	new weap = read_data(2);        // id of the weapon

	if(weap == KNOCK_WEAP && is_user_alive(id) && is_valid_player(id) && !zp_get_user_zombie(id) && g_Has_Cnoc_Weapon[id])
	{
		set_pev(id, pev_viewmodel2, CNOC_V_MODEL);
		set_pev(id, pev_weaponmodel2, CNOC_P_MODEL);
	}

	if(g_Has_Cnoc_Weapon[id] && is_user_alive(id) && is_valid_player(id) && !zp_get_user_zombie(id))
	{
		new Float:maxboost = get_pcvar_float(weap_push);
		if(!maxboost)
			return;

		new ammo = read_data(3);        // ammo left in clip

		if(weap == KNOCK_WEAP && is_user_alive(id) && is_valid_player(id) && !zp_get_user_zombie(id))
		{
			if(lastweap[id] == 0)
				lastweap[id] = weap;

			if(lastammo[id] > ammo && lastweap[id] == weap)
			{
				new Vec[3], Float:fVec[3], Float:origin[3];
				get_user_origin(id, Vec, 3);

				IVecFVec(Vec, fVec);

				pev(id, pev_origin, origin);
				new Float:dist = get_distance_f(origin, fVec);
				new Float:radius = get_pcvar_float(weap_radius);

				if(dist <= radius)
				{
					new Float:boost = maxboost -((maxboost * dist) / radius);
					set_velocity_from_origin(id, fVec, boost);
				}

				new fx = get_pcvar_num(weap_fx);

				if(fx & 1)
				{
					message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
					write_byte(TE_EXPLOSION);
					write_coord(Vec[0]);
					write_coord(Vec[1]);
					write_coord(Vec[2]);
					write_short(g_Explosion);
					write_byte(30);
					write_byte(15);
					write_byte(0);
					message_end();
				}

				if(fx & 2)
				{
					message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
					write_byte(TE_EXPLOSION2);
					write_coord(Vec[0]);
					write_coord(Vec[1]);
					write_coord(Vec[2]);
					write_byte(188); // start color
					write_byte(10); // num colors
					message_end();
				}

				if(get_pcvar_num(weap_iammo))
				{
					new wpn[32];
					get_weaponname(weap,wpn,31);

					if(ammo == 1)
					{
						new iWPNidx = -1;
						while((iWPNidx = fm_find_ent_by_class(iWPNidx, wpn)))
						{
							if(id == pev(iWPNidx, pev_owner))
							{
								cs_set_weapon_ammo(iWPNidx, 11);
								ammo = 11;
								break;
							}
						}
					}
				}
			}
			lastammo[id] = ammo;
			lastweap[id] = weap;
		}
	}

	return;
}

public fw_playerprethink(id)
{
	NoFallDamage[id] = get_pcvar_num(weap_nofall);
}

public fw_playerpostthink(id)
{
	if(NoFallDamage[id])
		set_pev(id, pev_watertype, -3);
}

public fw_PlayerKilled(victim, attacker, shouldgib)
{
	if(is_user_connected(victim) && is_valid_player(victim))
	{
		g_Has_Cnoc_Weapon[victim] = false;
	}
}

public zp_user_infected_post(id)
{
	if(zp_get_user_zombie(id))
	{
		g_Has_Cnoc_Weapon[id] = false;
	}
}

public NewRound()
{
	if(get_pcvar_num(weap_one_round))
		arrayset(g_Has_Cnoc_Weapon, false, 33);
}

public zp_user_humanized_post(player, survivor)
{
	g_Has_Cnoc_Weapon[survivor] = false;
}

/*==========================================*/
/*================== Stocks ==================*/
/*==========================================*/
stock get_velocity_from_origin(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3])
{
	new Float:fEntOrigin[3];
	pev(ent, pev_origin, fEntOrigin);

	// Velocity = Distance / Time

	new Float:fDistance[3];
	fDistance[0] = fEntOrigin[0] - fOrigin[0];
	fDistance[1] = fEntOrigin[1] - fOrigin[1];
	fDistance[2] = fEntOrigin[2] - fOrigin[2];

	new Float:fTime =(vector_distance(fEntOrigin,fOrigin) / fSpeed);

	fVelocity[0] = fDistance[0] / fTime;
	fVelocity[1] = fDistance[1] / fTime;
	fVelocity[2] = fDistance[2] / fTime;

	return(fVelocity[0] && fVelocity[1] && fVelocity[2]);
}


// Sets velocity of an entity(ent) away from origin with speed(speed)

stock set_velocity_from_origin(ent, Float:fOrigin[3], Float:fSpeed)
{
	new Float:fVelocity[3];
	get_velocity_from_origin(ent, fOrigin, fSpeed, fVelocity)

	set_pev(ent, pev_velocity, fVelocity);

	return(1);
}
Image

User avatar
Night Fury
Mod Developer
Mod Developer
Posts: 677
Joined: 7 years ago
Contact:

#2

Post by Night Fury » 5 years ago

Charger 7:
  1. #include <zombie_escape>
  2. #include <engine>
  3. #include <fakemeta>
  4. #include <fakemeta_util>
  5. #include <fun>
  6. #include <xs>
  7. #include <cstrike>
  8.  
  9. #define ADMIN_ACCESS ADMIN_LEVEL_H
  10.  
  11. new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
  12.  
  13. new g_event, Float:TargetOrigin[33][3]
  14. new g_has[33], g_clip[33], oldweap[33]
  15. new ammo[33], mode[33], damaged[33], sprite
  16. new charger
  17.  
  18. public plugin_init()
  19. {
  20.     register_plugin("[Weapon]: Charger-7", "1.0", "YunusReyiz")
  21.     register_event("CurWeapon","CurrentWeapon","be","1=1")
  22.    
  23.     register_forward(FM_SetModel, "SetModel")
  24.     register_forward(FM_UpdateClientData, "UpdateClientData_Post", 1)
  25.     register_forward(FM_PlaybackEvent, "PlaybackEvent")
  26.     register_forward(FM_CmdStart, "CmdStart")
  27.  
  28.     RegisterHam(Ham_TraceAttack, "worldspawn", "TraceAttack", 1)
  29.     RegisterHam(Ham_TraceAttack, "player", "TraceAttack")
  30.     RegisterHam(Ham_Item_AddToPlayer, "weapon_m249", "AddToPlayer")
  31.     RegisterHam(Ham_Item_PostFrame, "weapon_m249", "ItemPostFrame")
  32.    
  33.     RegisterHam(Ham_Weapon_Reload, "weapon_m249", "Reload")
  34.     RegisterHam(Ham_Weapon_Reload, "weapon_m249", "Reload_Post", 1)
  35.     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "PrimaryAttack")
  36.     RegisterHam(Ham_Weapon_PrimaryAttack, "weapon_m249", "PrimaryAttack_Post", 1)
  37.     RegisterHam(Ham_Weapon_WeaponIdle, "weapon_m249", "IdleAnim", 1)
  38.  
  39.     charger = ze_register_item("Charger-7", 40, 0)
  40.     //register_clcmd("say c7", "give_weapon")
  41. }
  42.  
  43. public plugin_precache()
  44. {
  45.     precache_model("models/v_charger7.mdl")
  46.     precache_model("models/p_charger7.mdl")
  47.     precache_model("models/w_charger7.mdl")
  48.     precache_sound("weapons/charger7-1.wav")
  49.     precache_sound("weapons/charger7-2.wav")
  50.     sprite = precache_model("sprites/laserbeam.spr")
  51.     register_forward(FM_PrecacheEvent, "fwPrecacheEvent_Post", 1)
  52. }
  53.  
  54. public TraceAttack(ent, attacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
  55. {
  56.     if(!is_user_alive(attacker))
  57.         return
  58.  
  59.     new g_currentweapon = get_user_weapon(attacker)
  60.  
  61.     if(g_currentweapon != CSW_M249) return
  62.    
  63.     if(!g_has[attacker]) return
  64.  
  65.     get_tr2(ptr, TR_vecEndPos, TargetOrigin[attacker])
  66.    
  67.     if(ent)
  68.     {
  69.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  70.         write_byte(TE_DECAL)
  71.         engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][0])
  72.         engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][1])
  73.         engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][2])
  74.         write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  75.         write_short(ent)
  76.         message_end()
  77.     }
  78.     else
  79.     {
  80.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  81.         write_byte(TE_WORLDDECAL)
  82.         engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][0])
  83.         engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][1])
  84.         engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][2])
  85.         write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  86.         message_end()
  87.     }
  88.    
  89.     if(mode[attacker])
  90.     {
  91.         SetHamParamFloat(3, float(390))
  92.         static Float:StartOrigin[3]
  93.         get_position(attacker, 40.0, 6.0, -7.0, StartOrigin)
  94.  
  95.         create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 1, 20, 0, 0, 255, 255, 175, 0)
  96.         create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 2, 20, 0, 0, 225, 225, 150, 0)
  97.         create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 3, 20, 0, 0, 200, 200, 130, 0)
  98.         create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 4, 20, 0, 0, 175, 175, 110, 0)
  99.         create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 5, 20, 0, 0, 150, 150, 90, 0)
  100.         create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 6, 20, 0, 0, 125, 125, 70, 0)
  101.         create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 7, 20, 0, 0, 100, 100, 50, 0)
  102.         create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 8, 20, 0, 0, 75, 75, 40, 0)
  103.         create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 9, 20, 0, 0, 50, 50, 20, 0)
  104.         create_beampoints(StartOrigin, TargetOrigin[attacker], sprite, 0, 0, 10, 20, 0, 0, 25, 25, 10, 0)
  105.     }
  106.     else
  107.     {  
  108.         SetHamParamFloat(3, float(39))
  109.         damaged[attacker]++
  110.     }
  111.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  112.     write_byte(TE_GUNSHOTDECAL)
  113.     engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][0])
  114.     engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][1])
  115.     engfunc(EngFunc_WriteCoord,TargetOrigin[attacker][2])  
  116.     write_short(attacker)
  117.     write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  118.     message_end()
  119. }
  120.  
  121. public TakeDamage(victim, inflictor, attacker, Float:damage) if (victim != attacker && is_user_connected(attacker) && get_user_weapon(attacker) == CSW_M249 && g_has[attacker] && mode[attacker] == 0) damaged[attacker]++
  122.  
  123. public PrecacheEvent_Post(type, const name[]) if(equal("events/m249.sc", name)) g_event = get_orig_retval()
  124.  
  125. public client_disconnected(id) g_has[id] = false
  126.  
  127. public ze_select_item_pre(id, itemid)
  128. {
  129.     if (itemid != charger)
  130.         return ZE_ITEM_AVAILABLE
  131.  
  132.     if (ze_is_user_zombie(id))
  133.         return ZE_ITEM_DONT_SHOW
  134.  
  135.     if (~get_user_flags(id) & ADMIN_ACCESS)
  136.         return ZE_ITEM_UNAVAILABLE
  137.  
  138.     return ZE_ITEM_AVAILABLE
  139. }
  140.  
  141. public ze_select_item_post(id, itemid)
  142. {
  143.     if(itemid != charger)
  144.         return
  145.  
  146.     give_weapon(id)
  147. }
  148.  
  149. public SetModel(entity, model[])
  150. {
  151.     if(!is_valid_ent(entity))
  152.         return FMRES_IGNORED
  153.    
  154.     static szClassName[33]
  155.     entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  156.        
  157.     if(!equal(szClassName, "weaponbox"))
  158.         return FMRES_IGNORED
  159.    
  160.     static iOwner
  161.    
  162.     iOwner = entity_get_edict(entity, EV_ENT_owner)
  163.    
  164.     if(equal(model, "models/w_m249.mdl"))
  165.     {
  166.         static iStoredAugID
  167.        
  168.         iStoredAugID = find_ent_by_owner(-1, "weapon_m249", entity)
  169.    
  170.         if(!is_valid_ent(iStoredAugID))
  171.             return FMRES_IGNORED
  172.    
  173.         if(g_has[iOwner])
  174.         {
  175.             entity_set_int(iStoredAugID, EV_INT_impulse, 45488)
  176.            
  177.             g_has[iOwner] = false
  178.            
  179.             entity_set_model(entity, "models/w_charger7.mdl")
  180.            
  181.             return FMRES_SUPERCEDE
  182.         }
  183.     }
  184.     return FMRES_IGNORED
  185. }
  186.  
  187. public CmdStart(id, uc_handle, seed)
  188. {      
  189.     if(!g_has[id])
  190.         return
  191.  
  192.     if(!is_user_alive(id))
  193.         return
  194.  
  195.     if(get_pdata_int(get_pdata_cbase(id, 373), 43, 4) != CSW_M249 || get_pdata_float(id, 83) > 0.0)
  196.         return
  197.  
  198.     new iButtons = get_uc(uc_handle, UC_Buttons)
  199.  
  200.     if(/*!(iButtons & IN_ATTACK) && */(iButtons & IN_ATTACK2))
  201.     {
  202.         //iButtons &= ~IN_ATTACK2
  203.         set_uc(uc_handle, UC_Buttons, iButtons)
  204.         if(get_pdata_float(get_pdata_cbase(id, 373), 47, 4) <= 0.0 && ammo[id] > 0)
  205.         {
  206.             if(get_pdata_int(get_pdata_cbase(id, 373), 51) <= 0 && ammo[id] < 0)
  207.                 return
  208.                
  209.             set_pdata_float(id, 83, 1.2, 5)
  210.             mode[id] = 1
  211.             ExecuteHamB(Ham_Weapon_PrimaryAttack, find_ent_by_owner(-1, "weapon_m249", id))
  212.         }
  213.     }
  214.     else if(!(iButtons & IN_ATTACK2) && (iButtons & IN_ATTACK)) mode[id] = 0
  215. }
  216.  
  217. public give_weapon(id)
  218. {
  219.     new iWep2 = give_item(id,"weapon_m249")
  220.     if( iWep2 > 0 )
  221.     {
  222.         cs_set_weapon_ammo(iWep2, 100)
  223.         cs_set_user_bpammo (id, CSW_M249, 200) 
  224.         set_anim(id, 2)
  225.         set_pdata_float(id, 83, 1.0, 5)
  226.     }
  227.     g_has[id] = true
  228.     damaged[id] = 0
  229. }
  230.  
  231. public AddToPlayer(wpn, id)
  232. {
  233.     if(!is_valid_ent(wpn) || !is_user_connected(id))
  234.         return HAM_IGNORED
  235.    
  236.     if(entity_get_int(wpn, EV_INT_impulse) == 45488)
  237.     {
  238.         g_has[id] = true
  239.        
  240.         entity_set_int(wpn, EV_INT_impulse, 0)
  241.     }
  242.     return HAM_IGNORED
  243. }
  244.  
  245. public IdleAnim(Weapon)
  246. {
  247.     new id = get_pdata_cbase(Weapon, 41, 4)
  248.  
  249.     if(!is_user_alive(id) || !g_has[id] || get_user_weapon(id) != CSW_M249)
  250.         return HAM_IGNORED;
  251.    
  252.     if(get_pdata_float(Weapon, 48, 4) <= 0.25)
  253.     {
  254.         if(ammo[id] > 0) set_anim(id, 1)
  255.         else if(ammo[id] == 0) set_anim(id, 0)
  256.         set_pdata_float(Weapon, 48, 4.0, 4)
  257.         return HAM_SUPERCEDE;
  258.     }
  259.     return HAM_IGNORED;
  260. }
  261.  
  262. public CurrentWeapon(id) replace_weapon_models(id, read_data(2))
  263.  
  264. replace_weapon_models(id, weaponid)
  265. {
  266.     switch (weaponid)
  267.     {
  268.         case CSW_M249:
  269.         {          
  270.             if(g_has[id])
  271.             {
  272.                 set_pev(id, pev_viewmodel2, "models/v_charger7.mdl")
  273.                 set_pev(id, pev_weaponmodel2, "models/p_charger7.mdl")
  274.                 if(oldweap[id] != CSW_M249)
  275.                 {
  276.                     if(ammo[id] > 0) set_anim(id, 9)
  277.                     else if(ammo[id] == 0)  set_anim(id, 8)
  278.                     set_pdata_float(id, 83, 1.0, 5)
  279.                 }
  280.             }
  281.         }
  282.     }
  283.     oldweap[id] = weaponid
  284. }
  285.  
  286. public UpdateClientData_Post(Player, SendWeapons, CD_Handle)
  287. {
  288.     if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_M249 || !g_has[Player]))
  289.         return FMRES_IGNORED
  290.    
  291.     set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
  292.     return FMRES_HANDLED
  293. }
  294.  
  295. public PrimaryAttack(ent)
  296. {
  297.     new id = get_pdata_cbase(ent, 41, 4)
  298.    
  299.     if (!g_has[id]) return
  300. }
  301.  
  302. public PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  303. {
  304.     if ((eventid != g_event))
  305.         return FMRES_IGNORED
  306.     if (!(1 <= invoker <= get_maxplayers()))
  307.     return FMRES_IGNORED
  308.  
  309.     playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  310.     return FMRES_SUPERCEDE
  311.    
  312. }
  313.  
  314. public PrimaryAttack_Post(ent)
  315. {
  316.     new id = get_pdata_cbase(ent, 41, 4)
  317.    
  318.     if(!is_user_alive(id) || !g_has[id])
  319.         return
  320.  
  321.     if(damaged[id] >= 6 && ammo[id] < 20)
  322.     {
  323.         ammo[id]++
  324.         damaged[id] = 0
  325.     }
  326.     if(mode[id] == 1)
  327.     {
  328.         static fm; fm = fm_find_ent_by_owner(-1, "weapon_m249", id)
  329.         if(pev_valid(fm)) cs_set_weapon_ammo(fm, cs_get_weapon_ammo(fm) + 1)
  330.         emit_sound(id, CHAN_WEAPON, "weapons/charger7-2.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  331.         ammo[id]--
  332.     }
  333.     else emit_sound(id, CHAN_WEAPON, "weapons/charger7-1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  334.     if(ammo[id] > 0) set_anim(id, 3)
  335.     else set_anim(id, 2)
  336. }
  337.  
  338. stock create_beampoints(Float:StartPosition[3], Float:TargetPosition[3], SpritesID, StartFrame, Framerate, Life, LineWidth, Amplitude, Red, Green, Blue, Brightness, Speed)
  339. {
  340.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  341.     write_byte(TE_BEAMPOINTS)
  342.     engfunc(EngFunc_WriteCoord, StartPosition[0])
  343.     engfunc(EngFunc_WriteCoord, StartPosition[1])
  344.     engfunc(EngFunc_WriteCoord, StartPosition[2])
  345.     engfunc(EngFunc_WriteCoord, TargetPosition[0])
  346.     engfunc(EngFunc_WriteCoord, TargetPosition[1])
  347.     engfunc(EngFunc_WriteCoord, TargetPosition[2])
  348.     write_short(SpritesID)
  349.     write_byte(StartFrame)
  350.     write_byte(Framerate)
  351.     write_byte(Life)
  352.     write_byte(LineWidth)
  353.     write_byte(Amplitude)
  354.     write_byte(Red)
  355.     write_byte(Green)
  356.     write_byte(Blue)
  357.     write_byte(Brightness)
  358.     write_byte(Speed)
  359.     message_end()
  360. }
  361.  
  362. public client_PreThink(id)
  363. {
  364.     if(!is_user_alive(id) || !g_has[id] || get_user_weapon(id) != CSW_M249)
  365.         return
  366.  
  367.     set_hudmessage(200, 200, 200, 0.45, 0.88, 0, 0.1, 0.1,0.0,0.0)
  368.     show_hudmessage(id, "Ammo: %d", ammo[id])
  369. }
  370.  
  371. stock set_anim(const Player, const Sequence)
  372. {
  373.     set_pev(Player, pev_weaponanim, Sequence)
  374.    
  375.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
  376.     write_byte(Sequence)
  377.     write_byte(pev(Player, pev_body))
  378.     message_end()
  379. }
  380.  
  381. public ItemPostFrame(weapon_entity)
  382. {
  383.      new id = pev(weapon_entity, pev_owner)
  384.      if (!is_user_connected(id))
  385.           return HAM_IGNORED
  386.  
  387.      if (!g_has[id])
  388.           return HAM_IGNORED
  389.  
  390.      static iClipExtra
  391.      
  392.      iClipExtra = 100
  393.      new Float:flNextAttack = get_pdata_float(id, 83, 5)
  394.  
  395.      new iBpAmmo = cs_get_user_bpammo(id, CSW_M249)
  396.      new iClip = get_pdata_int(weapon_entity, 51, 4)
  397.  
  398.      new fInReload = get_pdata_int(weapon_entity, 54, 4)
  399.  
  400.      if( fInReload && flNextAttack <= 0.0 )
  401.      {
  402.          new j = min(iClipExtra - iClip, iBpAmmo)
  403.    
  404.          set_pdata_int(weapon_entity, 51, iClip + j, 4)
  405.          cs_set_user_bpammo(id, CSW_M249, iBpAmmo-j)
  406.        
  407.          set_pdata_int(weapon_entity, 54, 0, 4)
  408.          fInReload = 0
  409.      }
  410.      return HAM_IGNORED
  411. }
  412.  
  413. public Reload(weapon_entity)
  414. {
  415.      new id = pev(weapon_entity, pev_owner)
  416.      if (!is_user_connected(id))
  417.           return HAM_IGNORED
  418.  
  419.      if (!g_has[id])
  420.           return HAM_IGNORED
  421.  
  422.      static iClipExtra
  423.  
  424.      if(g_has[id])
  425.           iClipExtra = 100
  426.  
  427.      g_clip[id] = -1
  428.  
  429.      new iBpAmmo = cs_get_user_bpammo(id, CSW_M249)
  430.      new iClip = get_pdata_int(weapon_entity, 51, 4)
  431.  
  432.      if (iBpAmmo <= 0)
  433.           return HAM_SUPERCEDE
  434.  
  435.      if (iClip >= iClipExtra)
  436.           return HAM_SUPERCEDE
  437.  
  438.      g_clip[id] = iClip
  439.  
  440.      return HAM_IGNORED
  441. }
  442.  
  443. public Reload_Post(weapon_entity)
  444. {
  445.     new id = pev(weapon_entity, pev_owner)
  446.     if (!is_user_connected(id))
  447.         return HAM_IGNORED
  448.  
  449.     if (!g_has[id])
  450.         return HAM_IGNORED
  451.  
  452.     if (g_clip[id] == -1)
  453.         return HAM_IGNORED
  454.  
  455.     set_pdata_int(weapon_entity, 51, g_clip[id], 4)
  456.  
  457.     set_pdata_int(weapon_entity, 54, 1, 4)
  458.  
  459.     if(ammo[id] > 0) set_anim(id, 7)
  460.     else if(ammo[id] == 0) set_anim(id, 6)
  461.  
  462.     return HAM_IGNORED
  463. }
  464.  
  465. stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
  466. {
  467.     static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
  468.    
  469.     pev(id, pev_origin, vOrigin)
  470.     pev(id, pev_view_ofs, vUp) //for player
  471.     xs_vec_add(vOrigin, vUp, vOrigin)
  472.     pev(id, pev_v_angle, vAngle) // if normal entity ,use pev_angles
  473.    
  474.     angle_vector(vAngle, ANGLEVECTOR_FORWARD, vForward) //or use EngFunc_AngleVectors
  475.     angle_vector(vAngle, ANGLEVECTOR_RIGHT, vRight)
  476.     angle_vector(vAngle, ANGLEVECTOR_UP, vUp)
  477.    
  478.     vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
  479.     vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
  480.     vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
  481. }
  482. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  483. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1055\\ f0\\ fs16 \n\\ par }
  484. */

Knockback:
  1. /*
  2.     [ZP] ExtraItem: Knock Weapon
  3.  
  4.     Plugin by Shidla [SGC]
  5.  
  6.     Credits:
  7.     Idea: Koshak        | ICQ: 283-361-228  (zombie-mod.ru)
  8.     Test: Koshak
  9.  
  10.  
  11.     Shidla [SGC] | 2011 | ICQ: 312-298-513 | http://Shidla.Gm-Project.NET/ | http://Shidla.QuZ.SU/
  12.  
  13.     1.0 [Final Version]
  14. */
  15.  
  16. #include <zombie_escape>
  17. #include <fakemeta_util>
  18. #include <cstrike>
  19.  
  20. #define ADMIN_ACCESS ADMIN_LEVEL_H
  21. #define is_valid_player(%1) (1 <= %1 <= 32)
  22. #define KNOCK_WEAP CSW_XM1014
  23.  
  24. new CNOC_V_MODEL[64] = "models/zombie_plague/v_knock_weap.mdl";
  25. new CNOC_P_MODEL[64] = "models/zombie_plague/p_knock_weap.mdl";
  26.  
  27. new weap_push, weap_radius, weap_nofall, weap_fx, weap_iammo, weap_one_round, g_extra_weap;
  28. new lastammo[33], lastweap[33];
  29. new g_Explosion;
  30. new NoFallDamage[33], g_Has_Cnoc_Weapon[33];
  31.  
  32. public plugin_init()
  33. {
  34.     register_plugin("[ZP] Knock Weapon", "1.0", "Emp` | Shidla");
  35.     register_cvar("Shidla", "[ZP] Knock Weapon v.1.0", FCVAR_SERVER|FCVAR_SPONLY)
  36.     register_cvar("zp_knock_weap", "[ZP] Knock Weapon v.1.0", FCVAR_SERVER|FCVAR_SPONLY)
  37.  
  38.     g_extra_weap = ze_register_item("Cnoc XM1014", 25, 0);
  39.  
  40.     weap_push = register_cvar("zp_weap_knock","800.0");
  41.     weap_radius = register_cvar("zp_weap_radius","400.0");
  42.     weap_nofall = register_cvar("zp_weap_nofall","1");
  43.     weap_fx = register_cvar("zp_weap_fx","3");
  44.     weap_iammo = register_cvar("zp_weap_iammo","1");
  45.     weap_one_round = register_cvar("zp_weap_oneround","1");
  46.  
  47.     register_event("CurWeapon","make_tracer", "be", "1=1");
  48.     register_event("HLTV", "NewRound", "a", "1=0", "2=0");
  49.  
  50.     register_forward(FM_PlayerPreThink,"fw_playerprethink");
  51.     register_forward(FM_PlayerPostThink,"fw_playerpostthink");
  52.     RegisterHam(Ham_Killed, "player", "fw_PlayerKilled");
  53. }
  54.  
  55. public plugin_precache()
  56. {
  57.     g_Explosion = precache_model("sprites/zerogxplode.spr");
  58.  
  59.     precache_model(CNOC_V_MODEL);
  60.     precache_model(CNOC_P_MODEL);
  61. }
  62.  
  63. public ze_select_item_pre(id, item)
  64. {
  65.     if (item != g_extra_weap)
  66.         return ZE_ITEM_AVAILABLE
  67.  
  68.     if (ze_is_user_zombie(id))
  69.         return ZE_ITEM_DONT_SHOW
  70.  
  71.     if ((~get_user_flags(id) & ADMIN_ACCESS) || g_Has_Cnoc_Weapon[id])
  72.         return ZE_ITEM_UNAVAILABLE
  73.  
  74.     return ZE_ITEM_AVAILABLE
  75. }
  76.  
  77. public ze_select_item_post(id, item)
  78. {
  79.     if(item != g_extra_weap)
  80.         return
  81.  
  82.  
  83.     g_Has_Cnoc_Weapon[id] = true;
  84.     fm_give_item(id, "weapon_xm1014")
  85.     fm_give_item(id, "ammo_buckshot")
  86. }
  87.  
  88. public make_tracer(id)
  89. {
  90.     new weap = read_data(2);        // id of the weapon
  91.  
  92.     if(weap == KNOCK_WEAP && is_user_alive(id) && is_valid_player(id) && !ze_is_user_zombie(id) && g_Has_Cnoc_Weapon[id])
  93.     {
  94.         set_pev(id, pev_viewmodel2, CNOC_V_MODEL);
  95.         set_pev(id, pev_weaponmodel2, CNOC_P_MODEL);
  96.     }
  97.  
  98.     if(g_Has_Cnoc_Weapon[id] && is_user_alive(id) && is_valid_player(id) && !ze_is_user_zombie(id))
  99.     {
  100.         new Float:maxboost = get_pcvar_float(weap_push);
  101.         if(!maxboost)
  102.             return;
  103.  
  104.         new ammo = read_data(3);        // ammo left in clip
  105.  
  106.         if(weap == KNOCK_WEAP && is_user_alive(id) && is_valid_player(id) && !ze_is_user_zombie(id))
  107.         {
  108.             if(lastweap[id] == 0)
  109.                 lastweap[id] = weap;
  110.  
  111.             if(lastammo[id] > ammo && lastweap[id] == weap)
  112.             {
  113.                 new Vec[3], Float:fVec[3], Float:origin[3];
  114.                 get_user_origin(id, Vec, 3);
  115.  
  116.                 IVecFVec(Vec, fVec);
  117.  
  118.                 pev(id, pev_origin, origin);
  119.                 new Float:dist = get_distance_f(origin, fVec);
  120.                 new Float:radius = get_pcvar_float(weap_radius);
  121.  
  122.                 if(dist <= radius)
  123.                 {
  124.                     new Float:boost = maxboost -((maxboost * dist) / radius);
  125.                     set_velocity_from_origin(id, fVec, boost);
  126.                 }
  127.  
  128.                 new fx = get_pcvar_num(weap_fx);
  129.  
  130.                 if(fx & 1)
  131.                 {
  132.                     message_begin(MSG_BROADCAST, SVC_TEMPENTITY);
  133.                     write_byte(TE_EXPLOSION);
  134.                     write_coord(Vec[0]);
  135.                     write_coord(Vec[1]);
  136.                     write_coord(Vec[2]);
  137.                     write_short(g_Explosion);
  138.                     write_byte(30);
  139.                     write_byte(15);
  140.                     write_byte(0);
  141.                     message_end();
  142.                 }
  143.  
  144.                 if(fx & 2)
  145.                 {
  146.                     message_begin(MSG_BROADCAST,SVC_TEMPENTITY);
  147.                     write_byte(TE_EXPLOSION2);
  148.                     write_coord(Vec[0]);
  149.                     write_coord(Vec[1]);
  150.                     write_coord(Vec[2]);
  151.                     write_byte(188); // start color
  152.                     write_byte(10); // num colors
  153.                     message_end();
  154.                 }
  155.  
  156.                 if(get_pcvar_num(weap_iammo))
  157.                 {
  158.                     new wpn[32];
  159.                     get_weaponname(weap,wpn,31);
  160.  
  161.                     if(ammo == 1)
  162.                     {
  163.                         new iWPNidx = -1;
  164.                         while((iWPNidx = fm_find_ent_by_class(iWPNidx, wpn)))
  165.                         {
  166.                             if(id == pev(iWPNidx, pev_owner))
  167.                             {
  168.                                 cs_set_weapon_ammo(iWPNidx, 11);
  169.                                 ammo = 11;
  170.                                 break;
  171.                             }
  172.                         }
  173.                     }
  174.                 }
  175.             }
  176.             lastammo[id] = ammo;
  177.             lastweap[id] = weap;
  178.         }
  179.     }
  180.  
  181.     return;
  182. }
  183.  
  184. public fw_playerprethink(id)
  185. {
  186.     NoFallDamage[id] = get_pcvar_num(weap_nofall);
  187. }
  188.  
  189. public fw_playerpostthink(id)
  190. {
  191.     if(NoFallDamage[id])
  192.         set_pev(id, pev_watertype, -3);
  193. }
  194.  
  195. public fw_PlayerKilled(victim, attacker, shouldgib)
  196. {
  197.     if(is_user_connected(victim) && is_valid_player(victim))
  198.     {
  199.         g_Has_Cnoc_Weapon[victim] = false;
  200.     }
  201. }
  202.  
  203. public ze_user_infected(id)
  204. {
  205.     if(ze_is_user_zombie(id))
  206.     {
  207.         g_Has_Cnoc_Weapon[id] = false;
  208.     }
  209. }
  210.  
  211. public NewRound()
  212. {
  213.     if(get_pcvar_num(weap_one_round))
  214.         arrayset(g_Has_Cnoc_Weapon, false, 33);
  215. }
  216.  
  217. /*==========================================*/
  218. /*================== Stocks ==================*/
  219. /*==========================================*/
  220. stock get_velocity_from_origin(ent, Float:fOrigin[3], Float:fSpeed, Float:fVelocity[3])
  221. {
  222.     new Float:fEntOrigin[3];
  223.     pev(ent, pev_origin, fEntOrigin);
  224.  
  225.     // Velocity = Distance / Time
  226.  
  227.     new Float:fDistance[3];
  228.     fDistance[0] = fEntOrigin[0] - fOrigin[0];
  229.     fDistance[1] = fEntOrigin[1] - fOrigin[1];
  230.     fDistance[2] = fEntOrigin[2] - fOrigin[2];
  231.  
  232.     new Float:fTime =(vector_distance(fEntOrigin,fOrigin) / fSpeed);
  233.  
  234.     fVelocity[0] = fDistance[0] / fTime;
  235.     fVelocity[1] = fDistance[1] / fTime;
  236.     fVelocity[2] = fDistance[2] / fTime;
  237.  
  238.     return(fVelocity[0] && fVelocity[1] && fVelocity[2]);
  239. }
  240.  
  241.  
  242. // Sets velocity of an entity(ent) away from origin with speed(speed)
  243.  
  244. stock set_velocity_from_origin(ent, Float:fOrigin[3], Float:fSpeed)
  245. {
  246.     new Float:fVelocity[3];
  247.     get_velocity_from_origin(ent, fOrigin, fSpeed, fVelocity)
  248.  
  249.     set_pev(ent, pev_velocity, fVelocity);
  250.  
  251.     return(1);
  252. }
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

czirimbolo
Veteran Member
Veteran Member
Poland
Posts: 598
Joined: 7 years ago
Contact:

#3

Post by czirimbolo » 5 years ago

Thanks. Solved
Image

Post Reply

Create an account or sign in to join the discussion

You need to be a member in order to post a reply

Create an account

Not a member? register to join our community
Members can start their own topics & subscribe to topics
It’s free and only takes a minute

Register

Sign in

Who is online

Users browsing this forum: No registered users and 7 guests