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

[REQ]How to turn ZP weapon into Normal .


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
benqcon
Member
Join Date: Jul 2020
Old 07-15-2020 , 13:12   [REQ]How to turn ZP weapon into Normal .
Reply With Quote #1

Hello,
I'm trying to conver this plugin to work in normal mod but I didn't know how!
So please any help???


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

#define V_MODEL "models/v_kronos3.mdl"
#define P_MODEL "models/p_kronos3.mdl"
#define W_MODEL "models/w_kronos3.mdl"
#define SIGHT_MODEL "models/ef_kronos5.mdl"

#define CSW_BASEDON CSW_P90
#define weapon_basedon "weapon_p90"

#define DAMAGE_A 25.0
#define DAMAGE_B 75.0
#define CLIP 50
#define BPAMMO 500
#define SPEED_A 1.0
#define SPEED_B 1.0
#define RECOIL 0.5
#define RELOAD_TIME 3.0
#define	RESULT_HIT_NONE 			0
#define	RESULT_HIT_PLAYER			1
#define	RESULT_HIT_WORLD			2
#define MAX_SHOOT 25
#define ACCURATE 80
#define RANGE 1096.0
#define ANGLE 180.0
#define KNOCKBACK 2.5
#define BODY_NUM 0
#define mf_spr "sprites/muzzleflash3.spr"
#define mf_cls "duarrmemek"
#define WEAPON_SECRETCODE 156851222222035
#define WEAPON_EVENT "events/p90.sc"
#define OLD_W_MODEL "models/w_p90.mdl"

enum
{
	ANIM_IDLE = 0,
	ANIM_IDLE2,
	ANIM_IDLE3,
	ANIM_RELOAD,
	ANIM_RELOAD2,
	ANIM_DRAW,
	ANIM_DRAW2,
	ANIM_SHOOT1,
	ANIM_SHOOT2,
	ANIM_SHOOT3,
	ANIM_SCAN_ACTIVATE,
	ANIM_ZOOM,
	ANIM_SCAN_DEACTIVATE
}

new const ExtraSounds[][] =
{
	"weapons/kronos3_boltpull.wav",
	"weapons/kronos3_clipin1.wav",
	"weapons/kronos3_clipin2.wav",
	"weapons/kronos3_clipout.wav",
	"weapons/kronos3_scan_activate.wav",
	"weapons/kronos3_scan_deacivate.wav",
	"weapons/kronos3_takeaim.wav",
	"weapons/kronos3_zoom.wav",
	"weapons/kronos3-1.wav",
	"weapons/kronos3_beep.wav"
}
new g_System, Max_Shoot, Float:TargetLock[33], g_holding_attack[33], g_Shoot_Count[33]
new g_Had_Weapon2, g_Old_Weapon[33], Float:g_Recoil[33][3], g_Clip[33]
new g_weapon_event, g_ShellId, g_SmokePuff_SprId,spr_blood_spray,spr_blood_drop
new g_HamBot, g_Msg_CurWeapon, laser, m_spriteTexture
new g_MaxPlayers, x90
// MACROS
#define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
#define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
#define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))

#define TASK_USE 10920+10
#define TASK_RESET 10920+11
#define MAX_TARGET 6

public plugin_init()
{
	register_plugin("Hunter Killer X90", "version1", "Mellowzy")
	
	register_event("CurWeapon", "Event_CurWeapon", "be", "1=1")
	register_message(get_user_msgid("DeathMsg"), "Message_DeathMsg")
	
	register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)	
	register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
	register_forward(FM_CmdStart, "fw_CmdStart")
	register_forward(FM_SetModel, "fw_SetModel")	
	register_forward(FM_Think, "fw_MF_Think2")
	
	RegisterHam(Ham_TraceAttack, "worldspawn", "fw_TraceAttack_World")
	RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Player")
	
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_basedon, "fw_Weapon_PrimaryAttack")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_basedon, "fw_Weapon_PrimaryAttack_Post", 1)
	RegisterHam(Ham_Item_AddToPlayer, weapon_basedon, "fw_Item_AddToPlayer_Post", 1)
	RegisterHam(Ham_Weapon_Reload, weapon_basedon, "fw_Weapon_Reload")
	RegisterHam(Ham_Weapon_Reload, weapon_basedon, "fw_Weapon_Reload_Post", 1)
	RegisterHam(Ham_Weapon_WeaponIdle, weapon_basedon, "fw_WeaponIdle", 1)
	RegisterHam(Ham_Item_PostFrame, weapon_basedon, "fw_Item_PostFrame")	
	
	RegisterHam(Ham_Spawn, "player", "Remove_Weapon", 1)
	RegisterHam(Ham_Killed, "player", "Remove_Weapon", 1)
	
	g_MaxPlayers =  get_maxplayers()
	
	g_Msg_CurWeapon = get_user_msgid("CurWeapon")
	
	x90 = zp_register_extra_item("Hunter Killer X-90", 0, ZP_TEAM_HUMAN)
	register_clcmd("weapon_kronos3", "weapon_hook")
}

public plugin_precache()
{
	engfunc(EngFunc_PrecacheModel, V_MODEL)
	engfunc(EngFunc_PrecacheModel, P_MODEL)
	engfunc(EngFunc_PrecacheModel, W_MODEL)
	precache_model(mf_spr)
	spr_blood_spray = precache_model("sprites/bloodspray.spr")
	spr_blood_drop = precache_model("sprites/blood.spr")
	
	g_SmokePuff_SprId = engfunc(EngFunc_PrecacheModel, "sprites/wall_puff1.spr")
	g_ShellId = engfunc(EngFunc_PrecacheModel, "models/rshell.mdl")
	laser = precache_model("sprites/zbeam3.spr")
	m_spriteTexture = precache_model( "sprites/laserbeam.spr" )
	
	register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
	
	for(new i = 0; i < sizeof(ExtraSounds); i++)
		precache_sound(ExtraSounds[i])
}

public fw_PrecacheEvent_Post(type, const name[])
{
	if(equal(WEAPON_EVENT, name))
		g_weapon_event = get_orig_retval()		
}

public client_putinserver(id)
{
	if(!g_HamBot && is_user_bot(id))
	{
		g_HamBot = 1
		set_task(0.1, "Do_RegisterHam", id)
	}
}

public Do_RegisterHam(id)
{
	RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack_Player")	
}
public zp_extra_item_selected(id, itemid)
{
	if(itemid == x90) Get_Weapon(id)
}

public zp_user_infected_post(id)Remove_Weapon(id)
public Get_Weapon(id)
{
	if(!is_user_alive(id) || zp_get_user_zombie(id))
		return
		
	Stock_DropSlot(id, 1)
	UnSet_BitVar(g_System, id)
	UnSet_BitVar(Max_Shoot, id)
	g_holding_attack[id] = 0
	g_Shoot_Count[id] = 0
		
	Set_BitVar(g_Had_Weapon2, id)
	fm_give_item(id, weapon_basedon)	
	
	// Set Ammo
	static Ent; Ent = fm_get_user_weapon_entity(id, CSW_BASEDON)
	if(pev_valid(Ent)) cs_set_weapon_ammo(Ent, CLIP)
	
	cs_set_user_bpammo(id, CSW_BASEDON, BPAMMO)
	
	engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, g_Msg_CurWeapon, {0, 0, 0}, id)
	write_byte(1)
	write_byte(CSW_BASEDON)
	write_byte(CLIP)
	message_end()	
}

public Remove_Weapon(id)
{
	set_fov(id)
	ScreenFade(id, 0, 0, 0, 0, 0)
	UnSet_BitVar(g_Had_Weapon2, id)
	remove_task(id+TASK_USE)
	remove_task(id+TASK_RESET)
}
public weapon_hook(id)
{
	engclient_cmd(id, weapon_basedon) 
	return PLUGIN_HANDLED
}
public client_connect(id)Remove_Weapon(id)
public client_disconnected(id)Remove_Weapon(id)
public Event_CurWeapon(id)
{
	if(!is_user_alive(id))
		return
	
	static CSWID; CSWID = read_data(2)
	
	if((CSWID == CSW_BASEDON && g_Old_Weapon[id] != CSW_BASEDON) && Get_BitVar(g_Had_Weapon2, id))
	{
		set_pev(id, pev_viewmodel2, V_MODEL)
		set_pev(id, pev_weaponmodel2, "")
		if(Get_BitVar(g_System, id))
		{
			g_holding_attack[id] = 0
			g_Shoot_Count[id] = 0
			UnSet_BitVar(Max_Shoot, id)
			UnSet_BitVar(g_System, id)
			set_fov(id)
			ScreenFade(id, 0, 0, 0, 0, 0)
			remove_task(id+TASK_USE)
			remove_task(id+TASK_RESET)
			set_weapon_anim(id, ANIM_DRAW)
		} 
		else set_weapon_anim(id, Get_BitVar(Max_Shoot, id)? ANIM_DRAW2 : ANIM_DRAW)
		Draw_NewWeapon(id, CSWID)
	} else if((CSWID == CSW_BASEDON && g_Old_Weapon[id] == CSW_BASEDON) && Get_BitVar(g_Had_Weapon2, id)) {
		static Ent; Ent = fm_get_user_weapon_entity(id, CSW_BASEDON)
		if(!pev_valid(Ent))
		{
			g_Old_Weapon[id] = get_user_weapon(id)
			return
		}
		new Float:flSpeed[33]
		if(Get_BitVar(g_System, id))
		{
			flSpeed[id] = SPEED_B
		}
		else flSpeed[id] = SPEED_A
		set_pdata_float(Ent, 46, get_pdata_float(Ent, 46, 4) * flSpeed[id], 4)
		set_pdata_float(Ent, 47, get_pdata_float(Ent, 47, 4) * flSpeed[id], 4) 
	} else if(CSWID != CSW_BASEDON && g_Old_Weapon[id] == CSW_BASEDON) Draw_NewWeapon(id, CSWID)
	
	g_Old_Weapon[id] = get_user_weapon(id)
}
public Message_DeathMsg(msg_id, msg_dest, id)
{
	static szTruncatedWeapon[33], iAttacker, iVictim
        
	get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
        
	iAttacker = get_msg_arg_int(1)
	iVictim = get_msg_arg_int(2)
        
	if(!is_user_connected(iAttacker) || iAttacker == iVictim) return PLUGIN_CONTINUE
        
	if(get_user_weapon(iAttacker) == CSW_BASEDON)
	{
		if(Get_BitVar(g_Had_Weapon2, iAttacker))
			set_msg_arg_string(4, "p90")
	}
                
	return PLUGIN_CONTINUE
}
public Draw_NewWeapon(id, CSW_ID)
{
	if(CSW_ID == CSW_BASEDON)
	{
		static ent
		ent = fm_get_user_weapon_entity(id, CSW_BASEDON)
		
		if(pev_valid(ent) && Get_BitVar(g_Had_Weapon2, id))
		{
			set_pev(ent, pev_effects, pev(ent, pev_effects) &~ EF_NODRAW) 
			engfunc(EngFunc_SetModel, ent, P_MODEL)	
			set_pev(ent, pev_body, BODY_NUM)
		}
	} else {
		static ent
		ent = fm_get_user_weapon_entity(id, CSW_BASEDON)
		
		if(pev_valid(ent)) set_pev(ent, pev_effects, pev(ent, pev_effects) | EF_NODRAW) 			
	}
	
}

public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
	if(!is_user_alive(id))
		return FMRES_IGNORED	
	if(get_user_weapon(id) == CSW_BASEDON && Get_BitVar(g_Had_Weapon2, id))
		set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001) 
	
	return FMRES_HANDLED
}

public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
	if (!is_user_connected(invoker))
		return FMRES_IGNORED	
	if(get_user_weapon(invoker) != CSW_BASEDON || !Get_BitVar(g_Had_Weapon2, invoker))
		return FMRES_IGNORED
	if(eventid != g_weapon_event)
		return FMRES_IGNORED
	
	engfunc(EngFunc_PlaybackEvent, flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
			
	Eject_Shell(invoker, g_ShellId, 0.0)
		
	return FMRES_SUPERCEDE
}

public fw_SetModel(entity, model[])
{
	if(!pev_valid(entity))
		return FMRES_IGNORED
	
	static Classname[32]
	pev(entity, pev_classname, Classname, sizeof(Classname))
	
	if(!equal(Classname, "weaponbox"))
		return FMRES_IGNORED
	
	static iOwner
	iOwner = pev(entity, pev_owner)
	
	if(equal(model, OLD_W_MODEL))
	{
		static weapon; weapon = fm_find_ent_by_owner(-1, weapon_basedon, entity)
		
		if(!pev_valid(weapon))
			return FMRES_IGNORED;
		
		if(Get_BitVar(g_Had_Weapon2, iOwner))
		{
			set_fov(iOwner)
			ScreenFade(iOwner, 0, 0, 0, 0, 0)
			UnSet_BitVar(g_Had_Weapon2, iOwner)
			
			set_pev(weapon, pev_impulse, WEAPON_SECRETCODE)
			engfunc(EngFunc_SetModel, entity, W_MODEL)
			set_pev(entity, pev_body, BODY_NUM)
			
			return FMRES_SUPERCEDE
		}
	}

	return FMRES_IGNORED;
}

public fw_TraceAttack_World(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits)
{
	if(!is_user_connected(Attacker))
		return HAM_IGNORED	
	if(get_user_weapon(Attacker) != CSW_BASEDON || !Get_BitVar(g_Had_Weapon2, Attacker))
		return HAM_IGNORED
		
	static Float:flEnd[3], Float:vecPlane[3]
	
	get_tr2(Ptr, TR_vecEndPos, flEnd)
	get_tr2(Ptr, TR_vecPlaneNormal, vecPlane)		
		
	Make_BulletHole(Attacker, flEnd, Damage)
	Make_BulletSmoke(Attacker, Ptr)

	SetHamParamFloat(3, Get_BitVar(g_System, Attacker) ? DAMAGE_B : DAMAGE_A)
	
	return HAM_IGNORED
}

public fw_TraceAttack_Player(Victim, Attacker, Float:Damage, Float:Direction[3], Ptr, DamageBits)
{
	if(!is_user_connected(Attacker))
		return HAM_IGNORED	
	if(get_user_weapon(Attacker) != CSW_BASEDON || !Get_BitVar(g_Had_Weapon2, Attacker))
		return HAM_IGNORED
	if(get_user_team(Victim) == get_user_team(Attacker))
		return HAM_IGNORED
	
	static Float:flEnd[3]
	get_tr2(Ptr, TR_vecEndPos, flEnd)
	
	if(g_holding_attack[Attacker]) g_Shoot_Count[Attacker]++

	if(g_Shoot_Count[Attacker] >= MAX_SHOOT)
	{
		g_Shoot_Count[Attacker] = 0
		Set_BitVar(Max_Shoot, Attacker)
	}
	
	SetHamParamFloat(3, Get_BitVar(g_System, Attacker) ? DAMAGE_B : DAMAGE_A)

	return HAM_IGNORED
}
public Create_Tracer(id, Float:Target[3])
{
	static Float:Start[3]; 
	Get_Position(id, 48.0, 0.0, -6.0, Start)
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMPOINTS)
	write_coord_f(Start[0]) 
	write_coord_f(Start[1]) 
	write_coord_f(Start[2]) 
	write_coord_f(Target[0]) 
	write_coord_f(Target[1]) 
	write_coord_f(Target[2]) 
	write_short(m_spriteTexture)
	write_byte(0) // framerate
	write_byte(0) // framerate
	write_byte(5) // life
	write_byte(2)  // width
	write_byte(0)   // noise
	write_byte(200)   // r, g, b
	write_byte(200)   // r, g, b
	write_byte(200)   // r, g, b
	write_byte(40)	// brightness
	write_byte(1)		// speed
	message_end()
}

public fw_WeaponIdle(Ent)
{
	static id; id = get_pdata_cbase(Ent, 41, 4)
	if(!Get_BitVar(g_Had_Weapon2, id))return HAM_IGNORED
	
	static Float:flTimeWeaponIdle; flTimeWeaponIdle = get_pdata_float(Ent,48, 4)
	if(!(flTimeWeaponIdle < 0.1)) return HAM_IGNORED
	
	if(Get_BitVar(g_System, id))Stock_SetAnimIdle(id, Ent, ANIM_IDLE3, 2.5)
	else Stock_SetAnimIdle(id, Ent, Get_BitVar(Max_Shoot, id)? ANIM_IDLE2 : ANIM_IDLE, 2.5)
	
	return HAM_IGNORED
}
	
public fw_Weapon_PrimaryAttack(Ent)
{
	static id; id = pev(Ent, pev_owner)
	pev(id, pev_punchangle, g_Recoil[id])
	if(!Get_BitVar(g_Had_Weapon2, id))return HAM_IGNORED
	
	static iClip; iClip = get_pdata_int(Ent, 51, 4)
	set_pdata_int(Ent, 14, iClip, 4)
	set_pdata_int(Ent, 16, iClip?1:0, 4)
	
	return HAM_IGNORED
}
public fw_Weapon_PrimaryAttack_Post(Ent)
{
	static id; id = pev(Ent, pev_owner)
	if(!Get_BitVar(g_Had_Weapon2, id))return HAM_IGNORED
	if(get_pdata_int(Ent, 14, 4) <= get_pdata_int(Ent, 51, 4)) return HAM_SUPERCEDE
	
	/*if(!get_pdata_int(Ent, 16, 4)) return HAM_IGNORED
	set_pdata_int(Ent, 16, 0, 4)*/
	static Accena; Accena = ACCURATE
	if(Accena != -1)
	{
		static Float:Accuracy
		Accuracy = (float(100 - ACCURATE) * 1.5) / 100.0

		set_pdata_float(Ent, 62, Accuracy, 4);
	}
	set_pdata_int(Ent, 64, 0, 4)
	
	static Float:Push[3]
	pev(id, pev_punchangle, Push)
	xs_vec_sub(Push, g_Recoil[id], Push)
		
	xs_vec_mul_scalar(Push, RECOIL, Push)
	xs_vec_add(Push, g_Recoil[id], Push)
	set_pev(id, pev_punchangle, Push)
	
	MakeMuzzleFlash(id)
	emit_sound(id, CHAN_WEAPON, ExtraSounds[8], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	
	AutoLockSystem(id,Get_BitVar(g_System, id)? true : false)
	
	if(Get_BitVar(g_System, id)) set_weapon_anim(id, ANIM_SHOOT3)
	else set_weapon_anim(id, Get_BitVar(Max_Shoot, id)? ANIM_SHOOT2 : ANIM_SHOOT1)
	
	return HAM_IGNORED
}
public AutoLockSystem(iPlayer,bool:active)
{
	if(!IsAlive(iPlayer) || !Get_BitVar(g_Had_Weapon2, iPlayer))
		return 1;
	if(zp_get_user_zombie(iPlayer))
		return 1;
		
	if(active)
	{
		for(new i = MAX_TARGET; i < g_MaxPlayers; i++)
		{
			if(entity_range(i, iPlayer) <= RANGE)
			{
				KnifeAttack_Global(iPlayer, true, RANGE, ANGLE, DAMAGE_B, KNOCKBACK)
			}
		}
	}
	else
	{
		return 1;
	}
	
	return 0;
}
public fw_CmdStart(id, uc_handle, seed)
{
	if(!is_user_alive(id))return FMRES_IGNORED	
	if(get_user_weapon(id) != CSW_BASEDON || !Get_BitVar(g_Had_Weapon2, id))return FMRES_IGNORED	
	
	static PressButton; PressButton = get_uc(uc_handle, UC_Buttons)
	static OldButton; OldButton = pev(id, pev_oldbuttons)
	
	if((PressButton & IN_RELOAD) && Get_BitVar(g_System, id))
		return FMRES_SUPERCEDE
	
	if((PressButton & IN_ATTACK))
	{
		if(!g_holding_attack[id]) g_holding_attack[id] = 1
	} else {
		if(OldButton & IN_ATTACK)
		{
			g_holding_attack[id] = 0
		}
	}
		
	if((PressButton & IN_ATTACK2))
	{
		PressButton &= ~IN_ATTACK2
		set_uc(uc_handle, UC_Buttons, PressButton)
		
		if((pev(id, pev_oldbuttons) & IN_ATTACK2))
			return FMRES_IGNORED
		if(!Get_BitVar(Max_Shoot, id) || Get_BitVar(g_System, id))
			return FMRES_IGNORED
			
		set_weapon_anim(id, ANIM_ZOOM)
		set_pdata_float(id, 83, 1.0, 5)
		set_task(0.7, "Activate_Kronos5System", id+TASK_USE)
	}
	if(get_gametime() - 1.0 > TargetLock[id])
	{
		static Body, Target; get_user_aiming(id, Target, Body, 99999)
		
		if(Get_BitVar(g_System, id))
		{
			if(is_user_alive(Target))
			{
				emit_sound(id, CHAN_BODY, ExtraSounds[6], 1.0, ATTN_NORM, 0, PITCH_NORM)
			} else {
				//Do nothing
			}
		}
		TargetLock[id] = get_gametime()
	}
	return FMRES_IGNORED
}
public client_PreThink(id)
{
	if(!is_user_alive(id))return
	if(get_user_weapon(id) != CSW_BASEDON || !Get_BitVar(g_Had_Weapon2, id))return
	
	if(Get_BitVar(g_System, id))
	{
		Create_CheatEsp(id, 1)
	}
	else 
	{
		Create_CheatEsp(id, 0)
	}
}
public Activate_Kronos5System(id)
{
	id -= TASK_USE
	if(!Get_BitVar(g_Had_Weapon2, id))return
	if(!Get_BitVar(Max_Shoot, id))return
	
	Set_BitVar(g_System, id)
	UnSet_BitVar(Max_Shoot, id)
	client_cmd(id, "spk %s", ExtraSounds[6])
	
	set_task(5.0, "Deactivate_Kronos5System_Stage01", id+TASK_RESET)
	ScreenFade(id, 1, 246, 155, 0, 80)
	set_fov(id, 60)
}
public Deactivate_Kronos5System_Stage01(id)
{
	id -= TASK_RESET
	if(!Get_BitVar(g_Had_Weapon2, id))return
	if(!Get_BitVar(g_System, id))return
	
	set_task(0.5, "Deactivate_Kronos5System_Stage02", id+TASK_RESET)
	
	set_weapon_anim(id, ANIM_SCAN_DEACTIVATE)
	set_fov(id)
	ScreenFade(id, 0, 0, 0, 0, 0)
	set_pdata_float(id, 83, 1.0, 5)
}
public Deactivate_Kronos5System_Stage02(id)
{
	id -= TASK_RESET
	if(!Get_BitVar(g_Had_Weapon2, id))return
	if(!Get_BitVar(g_System, id))return
	
	set_weapon_anim(id, ANIM_IDLE)
	
	g_holding_attack[id] = 0
	g_Shoot_Count[id] = 0
	UnSet_BitVar(Max_Shoot, id)
	UnSet_BitVar(g_System, id)
}
public fw_Item_AddToPlayer_Post(ent, id)
{
	if(!pev_valid(ent))
		return HAM_IGNORED
		
	if(pev(ent, pev_impulse) == WEAPON_SECRETCODE)
	{
		Set_BitVar(g_Had_Weapon2, id)
		set_pev(ent, pev_impulse, 0)
	}

	return HAM_HANDLED	
}

public fw_Item_PostFrame(ent)
{
	if(!pev_valid(ent))
		return HAM_IGNORED
	
	static id
	id = pev(ent, pev_owner)
	
	if(is_user_alive(id) && Get_BitVar(g_Had_Weapon2, id))
	{	
		static Float:flNextAttack; flNextAttack = get_pdata_float(id, 83, 5)
		static bpammo; bpammo = cs_get_user_bpammo(id, CSW_BASEDON)
		static iClip; iClip = get_pdata_int(ent, 51, 4)
		static fInReload; fInReload = get_pdata_int(ent, 54, 4)
		
		if(fInReload && flNextAttack <= 0.0)
		{
			static temp1; temp1 = min(CLIP - iClip, bpammo)

			set_pdata_int(ent, 51, iClip + temp1, 4)
			cs_set_user_bpammo(id, CSW_BASEDON, bpammo - temp1)		
			
			set_pdata_int(ent, 54, 0, 4)
			
			fInReload = 0
		}		
	}
	
	return HAM_IGNORED	
}
public fw_MF_Think2(ent)
{
	if(!pev_valid(ent))
		return
	
	static Classname[32]
	pev(ent, pev_classname, Classname, sizeof(Classname))
	
	if(equal(Classname, mf_cls))
	{
		new Float:iFrame, Float:iFramemax
		if(iFramemax >= 3.0)
		{
			iFrame = 0.0
			set_pev(ent, pev_flags, pev(ent, pev_flags) | FL_KILLME)
		}
		else
		{
			iFrame += 1.0
			set_pev(ent, pev_frame, iFrame)
		}
	}
}
stock MakeMuzzleFlash(id)
{
	static iMuz
	iMuz = Stock_CreateEntityBase(id, "env_sprite", MOVETYPE_FOLLOW, mf_spr, mf_cls, SOLID_NOT,0.15,Float:{0.0,0.0,0.0},Float:{0.0,0.0,0.0})

	set_pev(iMuz, pev_body, 1)
	set_pev(iMuz, pev_rendermode, kRenderTransAdd)
	set_pev(iMuz, pev_renderamt, 255.0)
	set_pev(iMuz, pev_aiment, id)
	set_pev(iMuz, pev_scale, 0.1)
	set_pev(iMuz, pev_frame, 0.0)
	dllfunc(DLLFunc_Spawn, iMuz)
}
public fw_Weapon_Reload(ent)
{
	static id; id = pev(ent, pev_owner)
	if(!is_user_alive(id))
		return HAM_IGNORED
	if(!Get_BitVar(g_Had_Weapon2, id))
		return HAM_IGNORED
	
	g_Clip[id] = -1
	
	static bpammo; bpammo = cs_get_user_bpammo(id, CSW_BASEDON)
	static iClip; iClip = get_pdata_int(ent, 51, 4)
	
	if(bpammo <= 0) return HAM_SUPERCEDE
	
	if(iClip >= CLIP) return HAM_SUPERCEDE		
		
	g_Clip[id] = iClip

	return HAM_HANDLED
}

public fw_Weapon_Reload_Post(ent)
{
	static id; id = pev(ent, pev_owner)
	if(!is_user_alive(id))
		return HAM_IGNORED
	if(!Get_BitVar(g_Had_Weapon2, id))
		return HAM_IGNORED

	if (g_Clip[id] == -1)
		return HAM_IGNORED
	
	set_pdata_int(ent, 51, g_Clip[id], 4)
	set_pdata_int(ent, 54, 1, 4)
	
	if(Get_BitVar(g_System, id))
	{
		g_holding_attack[id] = 0
		g_Shoot_Count[id] = 0
		UnSet_BitVar(Max_Shoot, id)
		UnSet_BitVar(g_System, id)
		set_fov(id)
		remove_task(id+TASK_USE)
		remove_task(id+TASK_RESET)
		ScreenFade(id, 0, 0, 0, 0, 0)
		set_weapon_anim(id, ANIM_RELOAD)
	}
	else set_weapon_anim(id, Get_BitVar(Max_Shoot, id)? ANIM_RELOAD2 : ANIM_RELOAD)
	
	set_pdata_float(id, 83, RELOAD_TIME, 5)

	return HAM_HANDLED
}

stock Make_BulletHole(id, Float:Origin[3], Float:Damage)
{
	// Find target
	static Decal; Decal = random_num(41, 45)
	static LoopTime; 
	
	if(Damage > 100.0) LoopTime = 2
	else LoopTime = 1
	
	for(new i = 0; i < LoopTime; i++)
	{
		// Put decal on "world" (a wall)
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_WORLDDECAL)
		engfunc(EngFunc_WriteCoord, Origin[0])
		engfunc(EngFunc_WriteCoord, Origin[1])
		engfunc(EngFunc_WriteCoord, Origin[2])
		write_byte(Decal)
		message_end()
		
		// Show sparcles
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_GUNSHOTDECAL)
		engfunc(EngFunc_WriteCoord, Origin[0])
		engfunc(EngFunc_WriteCoord, Origin[1])
		engfunc(EngFunc_WriteCoord, Origin[2])
		write_short(id)
		write_byte(Decal)
		message_end()
	}
}

public Make_BulletSmoke(id, TrResult)
{
	static Float:vecSrc[3], Float:vecEnd[3], TE_FLAG
	
	get_weapon_attachment(id, vecSrc)
	global_get(glb_v_forward, vecEnd)
    
	xs_vec_mul_scalar(vecEnd, 8192.0, vecEnd)
	xs_vec_add(vecSrc, vecEnd, vecEnd)

	get_tr2(TrResult, TR_vecEndPos, vecSrc)
	get_tr2(TrResult, TR_vecPlaneNormal, vecEnd)
    
	xs_vec_mul_scalar(vecEnd, 2.5, vecEnd)
	xs_vec_add(vecSrc, vecEnd, vecEnd)
    
	TE_FLAG |= TE_EXPLFLAG_NODLIGHTS
	TE_FLAG |= TE_EXPLFLAG_NOSOUND
	TE_FLAG |= TE_EXPLFLAG_NOPARTICLES
	
	engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEnd, 0)
	write_byte(TE_EXPLOSION)
	engfunc(EngFunc_WriteCoord, vecEnd[0])
	engfunc(EngFunc_WriteCoord, vecEnd[1])
	engfunc(EngFunc_WriteCoord, vecEnd[2] - 10.0)
	write_short(g_SmokePuff_SprId)
	write_byte(2)
	write_byte(50)
	write_byte(TE_FLAG)
	message_end()
}

// Stock
stock Stock_DropSlot(iPlayer, Slot)
{
	new item = get_pdata_cbase(iPlayer, 367+Slot, 4)
	while(item > 0)
	{
		static classname[24]
		pev(item, pev_classname, classname, charsmax(classname))
		engclient_cmd(iPlayer, "drop", classname)
		item = get_pdata_cbase(item, 42, 5)
	}
	set_pdata_cbase(iPlayer, 367, -1, 4)
}
stock Stock_CreateEntityBase(id, classtype[], mvtyp, mdl[], class[], solid, Float:fNext,Float:vOrg[3], Float:vAng[3])
{
	new pEntity = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, classtype))
	set_pev(pEntity, pev_movetype, mvtyp);
	set_pev(pEntity, pev_owner, id);
	engfunc(EngFunc_SetModel, pEntity, mdl);
	set_pev(pEntity, pev_classname, class);
	set_pev(pEntity, pev_solid, solid);
	if(vOrg[0]) set_pev(pEntity, pev_origin, vOrg)
	if(vAng[0]) set_pev(pEntity, pev_angles, vAng)
	if(fNext) set_pev(pEntity, pev_nextthink, get_gametime() + fNext)
	return pEntity
}
stock hook_ent2(ent, Float:VicOrigin[3], Float:speed, Float:multi, type)
{
	static Float:fl_Velocity[3]
	static Float:EntOrigin[3]
	static Float:EntVelocity[3]
	
	pev(ent, pev_velocity, EntVelocity)
	pev(ent, pev_origin, EntOrigin)
	static Float:distance_f
	distance_f = get_distance_f(EntOrigin, VicOrigin)
	
	static Float:fl_Time; fl_Time = distance_f / speed
	static Float:fl_Time2; fl_Time2 = distance_f / (speed * multi)
	
	if(type == 1)
	{
		fl_Velocity[0] = ((VicOrigin[0] - EntOrigin[0]) / fl_Time2) * 1.5
		fl_Velocity[1] = ((VicOrigin[1] - EntOrigin[1]) / fl_Time2) * 1.5
		fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time		
	} else if(type == 2) {
		fl_Velocity[0] = ((EntOrigin[0] - VicOrigin[0]) / fl_Time2) * 1.5
		fl_Velocity[1] = ((EntOrigin[1] - VicOrigin[1]) / fl_Time2) * 1.5
		fl_Velocity[2] = (EntOrigin[2] - VicOrigin[2]) / fl_Time
	}

	xs_vec_add(EntVelocity, fl_Velocity, fl_Velocity)
	set_pev(ent, pev_velocity, fl_Velocity)
}

stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0)
{ 
	static Float:vfEnd[3], viEnd[3] 
	get_user_origin(id, viEnd, 3)  
	IVecFVec(viEnd, vfEnd) 
	
	static Float:fOrigin[3], Float:fAngle[3]
	
	pev(id, pev_origin, fOrigin) 
	pev(id, pev_view_ofs, fAngle)
	
	xs_vec_add(fOrigin, fAngle, fOrigin) 
	
	static Float:fAttack[3]
	
	xs_vec_sub(vfEnd, fOrigin, fAttack)
	xs_vec_sub(vfEnd, fOrigin, fAttack) 
	
	static Float:fRate
	
	fRate = fDis / vector_length(fAttack)
	xs_vec_mul_scalar(fAttack, fRate, fAttack)
	
	xs_vec_add(fOrigin, fAttack, output)
}

stock Eject_Shell(id, Shell_ModelIndex, Float:Time) // By Dias
{
	static Ent; Ent = get_pdata_cbase(id, 373, 5)
	if(!pev_valid(Ent))
		return

        set_pdata_int(Ent, 57, Shell_ModelIndex, 4)
        set_pdata_float(id, 111, get_gametime() + Time)
}

stock set_weapon_anim(id, anim)
{
	if(!is_user_alive(id))
		return
	
	set_pev(id, pev_weaponanim, anim)
	
	message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0, 0, 0}, id)
	write_byte(anim)
	write_byte(pev(id, pev_body))
	message_end()
}
stock set_fov(id, fov = 90)
{
	message_begin(MSG_ONE, get_user_msgid("SetFOV"), {0,0,0}, id)
	write_byte(fov)
	message_end()
}
stock Stock_SetAnimIdle(id, iEnt, iAnim, Float:flTime) //NST Ed Cyti
{
	if(iAnim == -1) return
	if(pev(id, pev_weaponanim) != iAnim) set_weapon_anim(id, iAnim)
	set_pdata_float(iEnt, 48, flTime, 4)
}
stock get_position(id,Float:forw, Float:right, Float:up, Float:vStart[])
{
	new 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
}
stock Create_CheatEsp(id, active)
{
	new Float:fStartOrigin [ 3 ] , Float:fView [ 3 ] , Float:fEnd [ 3 ] , Float:fOrginPlayer [ 3 ] ,bool:bSee = false , Float:fEndPosEsp [ 3 ] ,Float: fVectorTmp2 [ 3 ] , Float: fAnglesEsp [ 3 ] , Float: fRight[ 3 ], Float: fUp [ 3 ]
	if(!is_user_alive(id))return
	if(get_user_weapon(id) != CSW_BASEDON || !Get_BitVar(g_Had_Weapon2, id))return
	if(!active)return
	
	pev( id ,pev_origin , fStartOrigin );
	pev( id ,pev_view_ofs , fView ) ;
		
	pev( id , pev_v_angle , fAnglesEsp );
		
	angle_vector( fAnglesEsp , ANGLEVECTOR_UP , fUp )
	angle_vector( fAnglesEsp , ANGLEVECTOR_RIGHT , fRight )
		
	xs_vec_normalize( fRight , fRight );
	xs_vec_normalize( fUp , fUp )
		
	xs_vec_add( fStartOrigin , fView , fStartOrigin );
	
	for ( new i = 1 ; i <= 32 ; i++ ){
		if( !is_user_alive( i ))continue;
		if( cs_get_user_team(i) == cs_get_user_team(id) )continue
		
		bSee = false
		pev( i , pev_origin , fEnd );
			
		new tr	=	create_tr2();
			
		engfunc( EngFunc_TraceLine , fStartOrigin , fEnd , IGNORE_GLASS | IGNORE_MONSTERS , id , tr ); 
			
		if( pev_valid( get_tr2( tr , TR_pHit ) ) && ( get_tr2( tr , TR_pHit ) == i || pev( get_tr2( tr , TR_pHit ) , pev_owner ) == i )){
			bSee	=	true;
			get_tr2( tr , TR_vecEndPos , fEndPosEsp );
		}
			
		free_tr2( tr );
		if( !bSee ){
				
			pev( i ,pev_view_ofs , fView );
				
			xs_vec_add( fEnd , fView , fEnd );
				
			tr	=	create_tr2();
				
			engfunc( EngFunc_TraceLine , fStartOrigin , fEnd , IGNORE_GLASS | IGNORE_MONSTERS , id , tr ); 
				
			if( pev_valid( get_tr2( tr , TR_pHit ) ) && ( get_tr2( tr , TR_pHit ) == i || pev( get_tr2( tr , TR_pHit ) , pev_owner ) == i )){
				bSee	=	true;
				get_tr2( tr , TR_vecEndPos , fEndPosEsp );
			}
				
			free_tr2( tr );
		}
		if( bSee || entity_range( i , id ) < 750.0){
			if( !bSee ){
				pev( i , pev_origin , fEnd );
					
				new tr	=	create_tr2();
				
				engfunc( EngFunc_TraceLine , fStartOrigin , fEnd , IGNORE_GLASS | IGNORE_MONSTERS , id , tr ); 
					
				get_tr2( tr , TR_vecEndPos , fEndPosEsp );
					
				free_tr2( tr );
			}
				
			new Float: fVector [ 3 ] , Float:fVectorTmp [ 3 ];
				
			xs_vec_sub( fEndPosEsp , fStartOrigin , fVector );
			xs_vec_normalize( fVector , fVector );
			xs_vec_mul_scalar( fVector , 5.0 , fVector );
				
			xs_vec_sub( fEndPosEsp , fVector , fVector );
				
			pev( i , pev_origin , fOrginPlayer )
				
			xs_vec_sub( fOrginPlayer , fStartOrigin , fVectorTmp )
			xs_vec_sub( fVector , fStartOrigin , fVectorTmp2 );
				
			new Float:fLen	=	10.0 * ( xs_vec_len(fVectorTmp2) / xs_vec_len( fVectorTmp ));
				
			new Float: fFourPoints [ 4 ][ 3 ] , Float: fTmpUp [ 3 ] , Float: fTmpRight[ 3 ];
				
			xs_vec_copy( fUp , fTmpUp );
			xs_vec_copy( fRight , fTmpRight );
				
			xs_vec_mul_scalar( fTmpUp , fLen , fTmpUp );
			xs_vec_mul_scalar( fTmpRight , fLen , fTmpRight );
				
			xs_vec_copy( fVector , fFourPoints [ 0 ] );
			xs_vec_add( fFourPoints [ 0 ] , fTmpUp , fFourPoints [ 0 ] );
			xs_vec_add( fFourPoints [ 0 ] , fTmpRight , fFourPoints [ 0 ] );
				
			xs_vec_copy( fVector , fFourPoints [ 1 ] );
			xs_vec_add( fFourPoints [ 1 ] , fTmpUp , fFourPoints [ 1 ] );
			xs_vec_sub( fFourPoints [ 1 ] , fTmpRight , fFourPoints [ 1 ] );
				
			xs_vec_copy( fVector , fFourPoints [ 2 ] );
			xs_vec_sub( fFourPoints [ 2 ] , fTmpUp , fFourPoints [ 2 ] );
			xs_vec_add( fFourPoints [ 2 ] , fTmpRight , fFourPoints [ 2 ] );
				
			xs_vec_copy( fVector , fFourPoints [ 3 ] );
			xs_vec_sub( fFourPoints [ 3 ] , fTmpUp , fFourPoints [ 3 ] );
			xs_vec_sub( fFourPoints [ 3 ] , fTmpRight , fFourPoints [ 3 ] );
				
			new iRed , iBlue , iGreen, Brightness ;
			iRed	=	255;
			iBlue	=	0;
			iGreen	=	0;
			Brightness = 160
				
			message_begin(MSG_ONE_UNRELIABLE ,SVC_TEMPENTITY,{0,0,0},id) //message begin
			write_byte(0)
			engfunc( EngFunc_WriteCoord , fFourPoints [ 0 ][ 0 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 0 ][ 1 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 0 ][ 2 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 1 ][ 0 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 1 ][ 1 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 1 ][ 2 ] )
			write_short(laser) // sprite index
			write_byte(3) // starting frame
			write_byte(0) // frame rate in 0.1's
			write_byte(1) // life in 0.1's
			write_byte(10) // line width in 0.1's
			write_byte(0) // noise amplitude in 0.01's
			write_byte(iRed)
			write_byte(iGreen)
			write_byte(iBlue)
			write_byte(Brightness)
			write_byte(0) // scroll speed in 0.1's
			message_end()
				
			message_begin(MSG_ONE_UNRELIABLE ,SVC_TEMPENTITY,{0,0,0},id) //message begin
			write_byte(0)
			engfunc( EngFunc_WriteCoord , fFourPoints [ 0 ][ 0 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 0 ][ 1 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 0 ][ 2 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 2 ][ 0 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 2 ][ 1 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 2 ][ 2 ] )
			write_short(laser) // sprite index
			write_byte(3) // starting frame
			write_byte(0) // frame rate in 0.1's
			write_byte(1) // life in 0.1's
			write_byte(10) // line width in 0.1's
			write_byte(0) // noise amplitude in 0.01's
			write_byte(iRed)
			write_byte(iGreen)
			write_byte(iBlue)
			write_byte(Brightness)
			write_byte(0) // scroll speed in 0.1's
			message_end()
				
			message_begin(MSG_ONE_UNRELIABLE ,SVC_TEMPENTITY,{0,0,0},id) //message begin
			write_byte(0)
			engfunc( EngFunc_WriteCoord , fFourPoints [ 2 ][ 0 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 2 ][ 1 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 2 ][ 2 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 3 ][ 0 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 3 ][ 1 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 3 ][ 2 ] )
			write_short(laser) // sprite index
			write_byte(3) // starting frame
			write_byte(0) // frame rate in 0.1's
			write_byte(1) // life in 0.1's
			write_byte(10) // line width in 0.1's
			write_byte(0) // noise amplitude in 0.01's
			write_byte(iRed)
			write_byte(iGreen)
			write_byte(iBlue)
			write_byte(Brightness)
			write_byte(0) // scroll speed in 0.1's
			message_end()
			
			message_begin(MSG_ONE_UNRELIABLE ,SVC_TEMPENTITY,{0,0,0},id) //message begin
			write_byte(0)
			engfunc( EngFunc_WriteCoord , fFourPoints [ 3 ][ 0 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 3 ][ 1 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 3 ][ 2 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 1 ][ 0 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 1 ][ 1 ] )
			engfunc( EngFunc_WriteCoord , fFourPoints [ 1 ][ 2 ] )
			write_short(laser) // sprite index
			write_byte(3) // starting frame
			write_byte(0) // frame rate in 0.1's
			write_byte(1) // life in 0.1's
			write_byte(10) // line width in 0.1's
			write_byte(0) // noise amplitude in 0.01's
			write_byte(iRed)
			write_byte(iGreen)
			write_byte(iBlue)
			write_byte(Brightness)
			write_byte(0) // scroll speed in 0.1's
			message_end()
		}
	}
}
stock ScreenFade(id, active, red, green, blue, alpha)
{
	if(!active || get_user_weapon(id) != CSW_BASEDON || !Get_BitVar(g_Had_Weapon2, id) ||!Get_BitVar(g_System, id))
	{
		message_begin(MSG_ONE, get_user_msgid( "ScreenFade"), _, id)
		write_short(0) // duration
		write_short(0) // hold time
		write_short(0x0000) // fade type
		write_byte(255) // red
		write_byte(100) // green
		write_byte(100) // blue
		write_byte(140) // alpha
		message_end()
		
	} else {
		
		message_begin(MSG_ONE, get_user_msgid( "ScreenFade"), _, id)
		write_short((1<<12)*2) // duration
		write_short((1<<10)*10) // hold time
		write_short(0x0004) // fade type
		write_byte(red) // red
		write_byte(green) // green
		write_byte(blue) // blue
		write_byte(alpha) // alpha
		message_end()
	}
}
public Stock_Fake_KnockBack(id, iVic, Float:iKb)
{
	if(iVic > 32) return
	
	new Float:vAttacker[3], Float:vVictim[3], Float:vVelocity[3], flags
	pev(id, pev_origin, vAttacker)
	pev(iVic, pev_origin, vVictim)
	vAttacker[2] = vVictim[2] = 0.0
	flags = pev(id, pev_flags)
	
	xs_vec_sub(vVictim, vAttacker, vVictim)
	new Float:fDistance
	fDistance = xs_vec_len(vVictim)
	xs_vec_mul_scalar(vVictim, 1 / fDistance, vVictim)
	
	pev(iVic, pev_velocity, vVelocity)
	xs_vec_mul_scalar(vVictim, iKb, vVictim)
	xs_vec_mul_scalar(vVictim, 50.0, vVictim)
	vVictim[2] = xs_vec_len(vVictim) * 0.15
	
	if(flags &~ FL_ONGROUND)
	{
		xs_vec_mul_scalar(vVictim, 1.2, vVictim)
		vVictim[2] *= 0.4
	}
	if(xs_vec_len(vVictim) > xs_vec_len(vVelocity)) set_pev(iVic, pev_velocity, vVictim)
}	
stock KnifeAttack_Global(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
{
	new iHitResult
	if(fAngle > 0.0) iHitResult = KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack)
	else iHitResult = KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack)

	return iHitResult
}
stock KnifeAttack(id, bStab, Float:flRange, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bitsDamageType = DMG_NEVERGIB | DMG_CLUB)
{
	new Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
	GetGunPosition(id, vecSrc);

	pev(id, pev_v_angle, v_angle);
	engfunc(EngFunc_MakeVectors, v_angle);

	global_get(glb_v_forward, vecForward);
	xs_vec_mul_scalar(vecForward, flRange, vecForward);
	xs_vec_add(vecSrc, vecForward, vecEnd);

	new tr = create_tr2();
	engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);

	new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
	if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
	
	get_tr2(tr, TR_flFraction, flFraction);

	new iHitResult = RESULT_HIT_NONE;
	
	if (flFraction < 1.0)
	{
		new pEntity = get_tr2(tr, TR_pHit);
		iHitResult = RESULT_HIT_WORLD;
		
		if (pev_valid(pEntity) && (IsPlayer(pEntity) || IsHostage(pEntity)))
		{
			if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
				flDamage *= 1.0;

			iHitResult = RESULT_HIT_PLAYER;
		}

		if (pev_valid(pEntity))
		{
			engfunc(EngFunc_MakeVectors, v_angle);
			global_get(glb_v_forward, vecForward);

			if (iHitgroup != -1)
				set_tr2(tr, TR_iHitgroup, iHitgroup);

			ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, bitsDamageType);
			ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, bitsDamageType)
			Stock_Fake_KnockBack(id, pEntity, flKnockBack)
			
			if (IsAlive(pEntity))
			{
				free_tr2(tr);
				return iHitResult;
			}
		}
	}
	free_tr2(tr);
	return iHitResult;
}
stock KnifeAttack2(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0)
{
	new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
	pev(id, pev_origin, vecOrigin);

	new iHitResult = RESULT_HIT_NONE;
	GetGunPosition(id, vecSrc);

	pev(id, pev_v_angle, v_angle);
	engfunc(EngFunc_MakeVectors, v_angle);

	global_get(glb_v_forward, vecForward);
	xs_vec_mul_scalar(vecForward, flRange, vecForward);
	xs_vec_add(vecSrc, vecForward, vecEnd);

	new tr = create_tr2();
	engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
	
	new Float:EndPos2[3]
	get_tr2(tr, TR_vecEndPos, EndPos2)
	
	new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
	if (flFraction < 1.0) 
	{
		iHitResult = RESULT_HIT_WORLD;
	}
	
	new Float:vecEndZ = vecEnd[2];
	
	new pEntity = -1;
	while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0)
	{
		if (!pev_valid(pEntity))
			continue;
		if (IsPlayerTeam(id) == IsPlayerTeam(pEntity))
			continue;
		if (!IsAlive(pEntity))
			continue;
		if (!CheckAngle(id, pEntity, fAngle))
			continue;

		GetGunPosition(id, vecSrc);
		Stock_Get_Origin(pEntity, vecEnd);

		vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange);

		xs_vec_sub(vecEnd, vecSrc, vecForward);
		xs_vec_normalize(vecForward, vecForward);
		xs_vec_mul_scalar(vecForward, flRange, vecForward);
		xs_vec_add(vecSrc, vecForward, vecEnd);

		engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
		get_tr2(tr, TR_flFraction, flFraction);

		if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
		get_tr2(tr, TR_flFraction, flFraction);

		if (flFraction < 1.0)
		{
			if (IsPlayer(pEntity) || IsHostage(pEntity))
			{
				iHitResult = RESULT_HIT_PLAYER;
				
				if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
					flDamage *= 1.0;
			}

			if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck)
			{
				engfunc(EngFunc_MakeVectors, v_angle);
				global_get(glb_v_forward, vecForward);

				if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup);
				
				new Float:VecVic[3]; pev(pEntity, pev_origin, VecVic)
				if(IsAlive(pEntity) && zp_get_user_zombie(pEntity)) Create_Tracer(id, VecVic)

				ExecuteHamB(Ham_TraceAttack, pEntity, id, flDamage, vecForward, tr, DMG_NEVERGIB | DMG_BULLET);
				ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_BULLET)
				
				Stock_Fake_KnockBack(id, pEntity, flKnockBack)
			}
		}
		free_tr2(tr);
	}
	return iHitResult;
}
stock KnifeAttack3(id, bStab, Float:flRange, Float:fAngle, Float:flDamage, Float:flKnockBack, iHitgroup = -1, bNoTraceCheck = 0)
{
	new Float:vecOrigin[3], Float:vecSrc[3], Float:vecEnd[3], Float:v_angle[3], Float:vecForward[3];
	pev(id, pev_origin, vecOrigin);

	new iHitResult = RESULT_HIT_NONE;
	GetGunPosition(id, vecSrc);

	pev(id, pev_v_angle, v_angle);
	engfunc(EngFunc_MakeVectors, v_angle);

	global_get(glb_v_forward, vecForward);
	xs_vec_mul_scalar(vecForward, flRange, vecForward);
	xs_vec_add(vecSrc, vecForward, vecEnd);

	new tr = create_tr2();
	engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
	
	new Float:EndPos2[3]
	get_tr2(tr, TR_vecEndPos, EndPos2)
	
	new Float:flFraction; get_tr2(tr, TR_flFraction, flFraction);
	if (flFraction < 1.0) iHitResult = RESULT_HIT_WORLD;
	
	new Float:vecEndZ = vecEnd[2];
	
	new pEntity = -1;
	while ((pEntity = engfunc(EngFunc_FindEntityInSphere, pEntity, vecOrigin, flRange)) != 0)
	{
		if (!pev_valid(pEntity))
			continue;
		if (IsPlayerTeam(id) == IsPlayerTeam(pEntity))
			continue;
		if (!IsAlive(pEntity) && !zp_get_user_zombie(pEntity))
			continue;
		if (!can_damage(id, pEntity))
			continue
		if (Stock_CheckAngle(id, pEntity) > floatcos(fAngle,degrees))
			continue;

		GetGunPosition(id, vecSrc);
		pev(pEntity, pev_origin, vecEnd);

		vecEnd[2] = vecSrc[2] + (vecEndZ - vecSrc[2]) * (get_distance_f(vecSrc, vecEnd) / flRange);

		xs_vec_sub(vecEnd, vecSrc, vecForward);
		xs_vec_normalize(vecForward, vecForward);
		xs_vec_mul_scalar(vecForward, flRange, vecForward);
		xs_vec_add(vecSrc, vecForward, vecEnd);

		engfunc(EngFunc_TraceLine, vecSrc, vecEnd, 0, id, tr);
		get_tr2(tr, TR_flFraction, flFraction);

		if (flFraction >= 1.0) engfunc(EngFunc_TraceHull, vecSrc, vecEnd, 0, 3, id, tr);
		get_tr2(tr, TR_flFraction, flFraction);

		if (flFraction < 1.0)
		{
			if (IsPlayer(pEntity) || IsHostage(pEntity))
			{
				iHitResult = RESULT_HIT_PLAYER;
				
				if (CheckBack(id, pEntity) && bStab && iHitgroup == -1)
					flDamage *= 1.0;
			}

			if (get_tr2(tr, TR_pHit) == pEntity || bNoTraceCheck)
			{
				engfunc(EngFunc_MakeVectors, v_angle);
				global_get(glb_v_forward, vecForward);

				if (iHitgroup != -1) set_tr2(tr, TR_iHitgroup, iHitgroup);
				ExecuteHamB(Ham_TraceAttack, pEntity, id, 1.0, vecForward, tr, DMG_NEVERGIB | DMG_CLUB);
				ExecuteHamB(Ham_TakeDamage, pEntity, id, id, flDamage, DMG_NEVERGIB | DMG_CLUB)
				Stock_Fake_KnockBack(id, pEntity, flKnockBack)
			}
		}
		free_tr2(tr);
	}
	return iHitResult;
}
stock can_damage(id1, id2)
{
	if(id1 <= 0 || id1 >= 33 || id2 <= 0 || id2 >= 33)
		return 1
		
	// Check team
	return(get_pdata_int(id1, 114, 5) != get_pdata_int(id2, 114, 5))
}
stock Stock_Get_Origin(id, Float:origin[3])
{
	new Float:maxs[3],Float:mins[3]
	if (pev(id, pev_solid) == SOLID_BSP)
	{
		pev(id,pev_maxs,maxs)
		pev(id,pev_mins,mins)
		origin[0] = (maxs[0] - mins[0]) / 2 + mins[0]
		origin[1] = (maxs[1] - mins[1]) / 2 + mins[1]
		origin[2] = (maxs[2] - mins[2]) / 2 + mins[2]
	} else pev(id, pev_origin, origin)
}
stock GetGunPosition(id, Float:vecScr[3])
{
	new Float:vecViewOfs[3]
	pev(id, pev_origin, vecScr)
	pev(id, pev_view_ofs, vecViewOfs)
	xs_vec_add(vecScr, vecViewOfs, vecScr)
}

stock CheckBack(iEnemy,id)
{
	new Float:anglea[3], Float:anglev[3]
	pev(iEnemy, pev_v_angle, anglea)
	pev(id, pev_v_angle, anglev)
	new Float:angle = anglea[1] - anglev[1] 
	if (angle < -180.0) angle += 360.0
	if (angle <= 45.0 && angle >= -45.0) return 1
	return 0
}

stock CheckAngle(iAttacker, iVictim, Float:fAngle)  return(Stock_CheckAngle(iAttacker, iVictim) > floatcos(fAngle,degrees))

stock Float:Stock_CheckAngle(id,iTarget)
{
	new Float:vOricross[2],Float:fRad,Float:vId_ori[3],Float:vTar_ori[3],Float:vId_ang[3],Float:fLength,Float:vForward[3]
	Stock_Get_Origin(id, vId_ori)
	Stock_Get_Origin(iTarget, vTar_ori)
	
	pev(id,pev_angles,vId_ang)
	for(new i=0;i<2;i++) vOricross[i] = vTar_ori[i] - vId_ori[i]
	
	fLength = floatsqroot(vOricross[0]*vOricross[0] + vOricross[1]*vOricross[1])
	
	if (fLength<=0.0)
	{
		vOricross[0]=0.0
		vOricross[1]=0.0
	} else {
		vOricross[0]=vOricross[0]*(1.0/fLength)
		vOricross[1]=vOricross[1]*(1.0/fLength)
	}
	
	engfunc(EngFunc_MakeVectors,vId_ang)
	global_get(glb_v_forward,vForward)
	
	fRad = vOricross[0]*vForward[0]+vOricross[1]*vForward[1]
	
	return fRad   //->   RAD 90' = 0.5rad
}
stock IsPlayer(pEntity) return is_user_connected(pEntity)
stock IsPlayerTeam(pEntity) return get_user_team(pEntity)
stock Stock_BloodEffect(Float:vecOri[3], scale)
{
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY) 
	write_byte(TE_BLOODSPRITE)
	engfunc(EngFunc_WriteCoord,vecOri[0])
	engfunc(EngFunc_WriteCoord,vecOri[1])
	engfunc(EngFunc_WriteCoord,vecOri[2])
	write_short(spr_blood_spray)
	write_short(spr_blood_drop)
	write_byte(75)
	write_byte(scale)
	message_end()
}
stock IsHostage(pEntity)
{
	new classname[32]; pev(pEntity, pev_classname, classname, charsmax(classname))
	return equal(classname, "hostage_entity")
}

stock IsAlive(pEntity)
{
	if (pEntity < 1) return 0
	return (pev(pEntity, pev_deadflag) == DEAD_NO && pev(pEntity, pev_health) > 0)
}
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
}
stock Set_WeaponIdleTime(id, WeaponId ,Float:TimeIdle)
{
	static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
	if(!pev_valid(entwpn)) 
		return
		
	set_pdata_float(entwpn, 46, TimeIdle, 4)
	set_pdata_float(entwpn, 47, TimeIdle, 4)
	set_pdata_float(entwpn, 48, TimeIdle, 4)
}

stock Set_PlayerNextAttack(id, Float:nexttime)
{
	set_pdata_float(id, 83, nexttime, 5)
}
benqcon is offline
benqcon
Member
Join Date: Jul 2020
Old 07-15-2020 , 13:14   Re: [REQ]How to turn ZP weapon into Normal .
Reply With Quote #2

What are the codes I should delete???
benqcon is offline
Reply



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 09:49.


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