Available x15 gun

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

x15 gun

#1

Post by czirimbolo » 5 years ago

Can someone covert this?

Code: Select all

/* Plugin generated by AMXX-Studio */

#pragma compress 1

#include <amxmodx>
#include <fakemeta>
#include <fakemeta_util>
#include <engine>
#include <hamsandwich>
#include <xs> 
#include <dhudmessage>

#define PLUGIN "Hunter Killer X-15"
#define VERSION "1.0"
#define AUTHOR "Bim Bim Cay"

// Models
#define v_model "models/v_kronos5.mdl"
#define p_model "models/p_kronos5.mdl"
#define w_model "models/w_kronos5.mdl"
#define ef_model "models/ef_kronos5.mdl"

// Sounds
new const Kronos5_Sounds[2][] =
{
	"weapons/kronos5-1.wav",	
	"weapons/kronos5_takeaim.wav"
}

// Sprites
#define ef_esp "sprites/laserbeam.spr"
#define ef_laser "sprites/lgtning.spr"

// Animations 
#define ANIM_IDLE		0
#define ANIM_IDLE2		1
#define ANIM_IDLE3		2
#define ANIM_SHOOT1		3
#define ANIM_SHOOT2		4
#define ANIM_SHOOT3		5
#define ANIM_RELOAD1		6
#define ANIM_RELOAD2		7
#define ANIM_DRAW1		8
#define ANIM_DRAW2		9
#define ANIM_SCANACTIVATE	10
#define ANIM_ZOOM		11
#define ANIM_SCANDEACTIVATE	12

#define ANIM_EXTENSION 	"carbine"

// Entity Classname
#define ZOOM_CLASSNAME "Kronos5_Zoom"

// Configs
#define WEAPON_NAME 		"weapon_kronos5"
#define WEAPON_BASE		"weapon_famas"

#define WEAPON_MAX_CLIP		30
#define WEAPON_DEFAULT_AMMO	90

#define WEAPON_SHOOT_DAMAGE	113.0
#define WEAPON_SHOOT_DAMAGEZ	726.0

#define WEAPON_TIME_NEXT_ATTACK	0.09
#define WEAPON_TIME_NEXT_ATTACKZ 0.75

#define ACTIVATE_AMMO		30
#define SCANMODE_DURATION	5		
#define WALLHACK_DISTACE	2000.0

new const TargetColor[3] = {255, 0, 0}

// 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 INSTANCE(%0) ((%0 == -1) ? 0 : %0)
#define IsValidPev(%0) (pev_valid(%0) == 2)
#define IsObserver(%0) pev(%0,pev_iuser1)
#define MUZZLE_INTOLERANCE 100
#define OBS_IN_EYE 4

new g_iszWeaponKey
new g_iForwardDecalIndex
new g_SprLaser, g_SprESP
new g_MaxPlayers 
new g_MsgBarTime

// Safety
new g_HamBot
new g_IsConnected, g_IsAlive

public plugin_init() 
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	// Safety
	Register_SafetyFunc()
	
	// Forward
	register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
	register_forward(FM_AddToFullPack, "fw_AddToFullPack_Post", 1)
	register_forward(FM_TraceLine, "fw_TraceLine_Post", 1)
	register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
	register_forward(FM_SetModel, "fw_SetModel")
	
	unregister_forward(FM_DecalIndex, g_iForwardDecalIndex, 1)
	
	// Think
	register_think(ZOOM_CLASSNAME, "fw_Zoom_Think") 
	
	// Ham
	RegisterHam(Ham_Spawn, "weaponbox", "fw_Weaponbox_Spawn_Post", 1)
	
	RegisterHam(Ham_Think, WEAPON_BASE, "fw_Item_Think")
	RegisterHam(Ham_Item_Deploy, WEAPON_BASE, "fw_Item_Deploy_Post", 1)
	RegisterHam(Ham_Item_Holster, WEAPON_BASE, "fw_Item_Holster_Post", 1)
	RegisterHam(Ham_Item_PostFrame, WEAPON_BASE, "fw_Item_PostFrame")
	RegisterHam(Ham_Weapon_Reload, WEAPON_BASE, "fw_Weapon_Reload")
	RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_BASE, "fw_Weapon_WeaponIdle")
	RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_BASE, "fw_Weapon_PrimaryAttack")
	RegisterHam(Ham_Weapon_SecondaryAttack, WEAPON_BASE, "fw_Weapon_SecondaryAttack")
	
	RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack_Entity")
	RegisterHam(Ham_TraceAttack, "info_target", "fw_TraceAttack_Entity")
	RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Entity")
	
	// Get Maxplayers
	g_MaxPlayers = get_maxplayers()
	
	// Get Message ID
	g_MsgBarTime = get_user_msgid("BarTime")
	
	// Get the weapon now
	register_clcmd("say /get", "Get_MyWeapon")
}

public plugin_precache()
{
	precache_model(v_model)
	precache_model(p_model)
	precache_model(w_model)
	precache_model(ef_model)
	
	for(new i = 0; i < sizeof(Kronos5_Sounds); i++)
		precache_sound(Kronos5_Sounds[i])
	
	g_SprESP = precache_model(ef_esp)
	g_SprLaser = precache_model(ef_laser) 

	g_iszWeaponKey = engfunc(EngFunc_AllocString, WEAPON_NAME)
	g_iForwardDecalIndex = register_forward(FM_DecalIndex, "fw_DecalIndex_Post", 1)	
}

public client_putinserver(iPlayer)
{
	Safety_Connected(iPlayer)
	
	if(!g_HamBot && is_user_bot(iPlayer))
	{
		g_HamBot = 1
		set_task(0.1, "Register_HamBot", iPlayer)
	}
}
 
public Register_HamBot(iPlayer)
{
	Register_SafetyFuncBot(iPlayer)
	RegisterHamFromEntity(Ham_TraceAttack, iPlayer, "fw_TraceAttack_Entity")	
}

public client_disconnect(iPlayer)
{
	Safety_Disconnected(iPlayer)
}

public Get_MyWeapon(iPlayer)
{
	Weapon_Give(iPlayer)
} 

//**********************************************
//* Forward Hooking                            *
//********************************************** 
public fw_UpdateClientData_Post(iPlayer, sendweapons, CD_Handle)
{
	enum
	{
		SPEC_MODE,
		SPEC_TARGET,
		SPEC_END
	}
	 
	static aSpecInfo[33][SPEC_END]
	
	static iTarget
	static iSpecMode 
	static iActiveItem
	
	iTarget = (iSpecMode = IsObserver(iPlayer)) ? pev(iPlayer, pev_iuser2) : iPlayer
	
	if(!is_alive(iTarget))
		return FMRES_IGNORED
	
	iActiveItem = get_pdata_cbase(iTarget, 373, 5)
	
	if(!IsValidPev(iActiveItem) || !IsCustomItem(iActiveItem))
		return FMRES_IGNORED
	
	if(iSpecMode)
	{
		if(aSpecInfo[iPlayer][SPEC_MODE] != iSpecMode)
		{
			aSpecInfo[iPlayer][SPEC_MODE] = iSpecMode
			aSpecInfo[iPlayer][SPEC_TARGET] = 0
		}
		
		if(iSpecMode == OBS_IN_EYE && aSpecInfo[iPlayer][SPEC_TARGET] != iTarget)
		{
			aSpecInfo[iPlayer][SPEC_TARGET] = iTarget
			
			static Mode; Mode = get_pdata_int(iActiveItem, 30, 4)
			
			switch(Mode)
			{
				case 0: Weapon_SendAnim(iPlayer, iActiveItem, ANIM_IDLE)
				case 1: Weapon_SendAnim(iPlayer, iActiveItem, ANIM_IDLE2)
				case 2: Weapon_SendAnim(iPlayer, iActiveItem, ANIM_IDLE3)
			}
		}
	}
	
	set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001)
	
	return FMRES_HANDLED
}

public fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
{
	if(!pev_valid(iEnt))
		return
	
	static Classname[24] 
	pev(iEnt, pev_classname, Classname, charsmax(Classname))
	
	if(equali(Classname, ZOOM_CLASSNAME))
	{
		if(iHost == pev(iEnt, pev_owner))
		{
			set_es(esState, ES_Effects, get_es(esState, ES_Effects) | EF_NODRAW)
		}
	}
	
	if(!is_alive(iEnt) || !is_alive(iHost))
		return
		
	static iActiveItem; iActiveItem = get_pdata_cbase(iHost, 373, 5)	
	
	if(!IsValidPev(iActiveItem) || !IsCustomItem(iActiveItem))
		return 
		
	if(get_pdata_int(iActiveItem, 30, 4) >= 2)
	{
		if(get_pdata_int(iHost, 114, 5) == get_pdata_int(iEnt, 114, 5))
			return
		
		set_es(esState, ES_RenderFx, kRenderFxGlowShell)
		set_es(esState, ES_RenderMode, kRenderTransAdd)
		set_es(esState, ES_RenderColor, TargetColor)
		set_es(esState, ES_RenderAmt, 8)
	}
}

public fw_TraceLine_Post(Float:TraceStart[3], Float:TraceEnd[3], fNoMonsters, iEntToSkip, iTrace) <FireBullets: Enabled>
{
	static Float:vecEndPos[3]
	
	get_tr2(iTrace, TR_vecEndPos, vecEndPos)
	engfunc(EngFunc_TraceLine, vecEndPos, TraceStart, fNoMonsters, iEntToSkip, 0)
	
	UTIL_GunshotDecalTrace(0)
	UTIL_GunshotDecalTrace(iTrace, true)
}

public fw_TraceLine_Post() </* Empty statement */>
{
	/* Fallback */
}

public fw_TraceLine_Post() <FireBullets: Disabled>	
{
	/* Do notning */
}

public fw_PlaybackEvent() <FireBullets: Enabled>
{
	return FMRES_SUPERCEDE
}

public fw_PlaybackEvent() </* Empty statement */>		
{ 
	return FMRES_IGNORED 
}

public fw_PlaybackEvent() <FireBullets: Disabled>		
{ 
	return FMRES_IGNORED 
}

//**********************************************
//* Weaponbox world model.                     *
//**********************************************
public fw_SetModel(iEntity) <WeaponBox: Enabled>
{
	state WeaponBox: Disabled
	
	if(!IsValidPev(iEntity))
		return FMRES_IGNORED
	
	#define MAX_ITEM_TYPES	6
	for(new i, iItem; i < MAX_ITEM_TYPES; i++)
	{
		iItem = get_pdata_cbase(iEntity, 34 + i, 4)
		
		if(IsValidPev(iItem) && IsCustomItem(iItem))
		{
			engfunc(EngFunc_SetModel, iEntity, w_model)
			return FMRES_SUPERCEDE
		}
	}
	
	return FMRES_IGNORED
}

public fw_SetModel() </* Empty statement */>	
{ 
	/*  Fallback  */ 
	return FMRES_IGNORED 
}
public fw_SetModel() <WeaponBox: Disabled>	
{ 
	/* Do nothing */ 
	return FMRES_IGNORED 
}

public fw_Weaponbox_Spawn_Post(iWeaponBox)
{
	if(IsValidPev(iWeaponBox))
	{
		state (IsValidPev(pev(iWeaponBox, pev_owner))) WeaponBox: Enabled
	}
	
	return HAM_IGNORED
}

//**********************************************
//* Weapon's codes.                    	       *
//**********************************************
public fw_Item_Deploy_Post(iItem)
{
	if(!IsCustomItem(iItem))
		return
		
	static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)	
	
	set_pev(iPlayer, pev_viewmodel2, v_model)
	set_pev(iPlayer, pev_weaponmodel2, p_model)
	
	if(get_pdata_int(iItem, 30, 4))
	{
		Weapon_SendAnim(iPlayer, iItem, ANIM_DRAW2)
	}
	else
	{
		Weapon_SendAnim(iPlayer, iItem, ANIM_DRAW1)
	}
	
	set_pdata_string(iPlayer, (492) * 4, ANIM_EXTENSION, -1 , 20)
}

public fw_Item_Holster_Post(iItem)
{
	if(!IsCustomItem(iItem))
		return
	
	static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)
		
	set_pdata_int(iItem, 55, 0, 4)
	set_pdata_int(iItem, 39, 0, 4)	
	
	if(get_pdata_int(iItem, 30, 4) >= 2)
	{
		set_pdata_int(iItem, 30, 0, 4)
		Set_ProgessBarTime(iPlayer, 0)
	}
}

public fw_Item_PostFrame(iItem)
{
	if(!IsCustomItem(iItem))
		return HAM_IGNORED
	
	static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)
	
	if(get_pdata_int(iItem, 54, 4))
	{
		static iClip; iClip = get_pdata_int(iItem, 51, 4)
		static iPrimaryAmmoIndex; iPrimaryAmmoIndex = PrimaryAmmoIndex(iItem)
		static iAmmoPrimary; iAmmoPrimary = GetAmmoInventory(iPlayer, iPrimaryAmmoIndex)
		static iAmount; iAmount = min(WEAPON_MAX_CLIP - iClip, iAmmoPrimary)
		
		set_pdata_int(iItem, 51, iClip + iAmount, 4)
		SetAmmoInventory(iPlayer, iPrimaryAmmoIndex, iAmmoPrimary - iAmount)
		
		set_pdata_int(iItem, 54, 0, 4)
	}	
	
	if(get_pdata_int(iItem, 30, 4) >= 2)
	{
		static Float:flLastEventCheck; flLastEventCheck = get_pdata_float(iItem, 38, 4)
	
		if(flLastEventCheck < get_gametime())
		{
			flLastEventCheck = get_gametime() + 0.1
			set_pdata_float(iItem, 38, flLastEventCheck, 4)
		
			Scan_Enemies(iPlayer)
			Show_FakeCrosshair(iPlayer)
		}
	}
	
	return HAM_IGNORED
}

public fw_Weapon_Reload(iItem)
{
	if(!IsCustomItem(iItem))
		return HAM_IGNORED
		
	static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)	
	
	static iClip; iClip = get_pdata_int(iItem, 51, 4)
	static iPrimaryAmmoIndex; iPrimaryAmmoIndex = PrimaryAmmoIndex(iItem)
	static iAmmoPrimary; iAmmoPrimary = GetAmmoInventory(iPlayer, iPrimaryAmmoIndex)
	
	if(min(WEAPON_MAX_CLIP - iClip, iAmmoPrimary) <= 0)
		return HAM_SUPERCEDE
	
	static Mode; Mode = get_pdata_int(iItem, 30, 4)
	
	if(Mode >= 2)
		return HAM_SUPERCEDE

	set_pdata_int(iItem, 51, 0, 4)
	
	ExecuteHam(Ham_Weapon_Reload, iItem)
	
	set_pdata_int(iItem, 51, iClip, 4)
	
	set_pdata_float(iPlayer, 83, 3.0, 5)
	set_pdata_float(iItem, 48, 3.0, 4)
	
	if(Mode)
	{
		Weapon_SendAnim(iPlayer, iItem, ANIM_RELOAD2)
	}
	else
	{
		Weapon_SendAnim(iPlayer, iItem, ANIM_RELOAD1)
	}
	
	// Cancel ANIM_SCANACTIVATE
	set_pdata_int(iItem, 39, 0, 4)	
	
	return HAM_SUPERCEDE	
}

public fw_Weapon_WeaponIdle(iItem)
{
	if(!IsCustomItem(iItem))
		return HAM_IGNORED
		
	static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)	
	
	ExecuteHamB(Ham_Weapon_ResetEmptySound, iItem)

	if(get_pdata_float(iItem, 48, 4) > 0.0)
		return HAM_SUPERCEDE
	
	set_pdata_float(iItem, 48, 10.0, 4)
	
	static Mode; Mode = get_pdata_int(iItem, 30, 4)
			
	switch(Mode)
	{
		case 0: Weapon_SendAnim(iPlayer, iItem, ANIM_IDLE)
		case 1: Weapon_SendAnim(iPlayer, iItem, ANIM_IDLE2)
		case 2: Weapon_SendAnim(iPlayer, iItem, ANIM_IDLE3)
	}
	
	return HAM_SUPERCEDE
}

public fw_Item_Think(iItem)
{
	if(!IsValidPev(iItem) || !IsCustomItem(iItem))
		return HAM_IGNORED
	
	static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)
	
	if(!is_alive(iPlayer))
		return HAM_SUPERCEDE
	
	if(get_pdata_cbase(iPlayer, 373, 5) != iItem)
		return HAM_SUPERCEDE
		
	switch(get_pdata_int(iItem, 39, 4))
	{
		case 1:
		{
			set_pdata_int(iItem, 39, 0, 4)
			
			Weapon_SendAnim(iPlayer, iItem, ANIM_SCANACTIVATE)
			set_pdata_float(iItem, 48, 0.87, 4)
		}
		case 2:
		{
			set_pdata_int(iItem, 30, 2, 4)
			
			set_pdata_int(iPlayer, 363, 55, 5)
			Set_ProgessBarTime(iPlayer, SCANMODE_DURATION)
			
			set_pdata_int(iItem, 39, 3, 4)
			set_pev(iItem, pev_nextthink, get_gametime() + float(SCANMODE_DURATION))
			
			Create_EfZoom(iPlayer)
			emit_sound(iPlayer, CHAN_ITEM, Kronos5_Sounds[1], 1.0, 0.4, 0, 94 + random_num(0, 15))
		}
		case 3:
		{
			set_pdata_int(iItem, 39, 0, 4)
			set_pdata_int(iItem, 30, 0, 4)
			
			set_pdata_int(iPlayer, 363, 90, 5)
			set_pdata_float(iPlayer, 83, 0.87, 5)
			
			Weapon_SendAnim(iPlayer, iItem, ANIM_SCANDEACTIVATE)
			set_pdata_float(iItem, 48, 0.87, 4)
		}
		case 4:
		{
			set_pdata_int(iItem, 39, 0, 4)
			set_pdata_int(iItem, 30, 0, 4)
			
			Set_ProgessBarTime(iPlayer, 0)
			set_pdata_int(iPlayer, 363, 90, 5)
			
			Weapon_SendAnim(iPlayer, iItem, ANIM_SCANDEACTIVATE)
			set_pdata_float(iItem, 48, 0.87, 4)
		}
	}
	
	return HAM_SUPERCEDE
}

public fw_Weapon_PrimaryAttack(iItem)
{
	if(!IsCustomItem(iItem))
		return HAM_IGNORED
		
	static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)	
	static iClip; iClip = get_pdata_int(iItem, 51, 4)
	
	if(iClip <= 0)
	{
		// No ammo, play empty sound and cancel
		if(get_pdata_int(iItem, 45, 4))
		{
			ExecuteHamB(Ham_Weapon_PlayEmptySound, iItem)
			set_pdata_float(iItem, 46, 0.2, 4)
		}
	
		return HAM_SUPERCEDE
	}
	
	CallOriginalFireBullets(iItem, iPlayer)
	
	static iFlags
	static szAnimation[64]

	iFlags = pev(iPlayer, pev_flags)
	
	if(iFlags & FL_DUCKING)
	{
		formatex(szAnimation, charsmax(szAnimation), "crouch_shoot_%s", ANIM_EXTENSION)
	}
	else
	{
		formatex(szAnimation, charsmax(szAnimation), "ref_shoot_%s", ANIM_EXTENSION)
	}
	
	Player_SetAnimation(iPlayer, szAnimation)
	
	static Mode; Mode = get_pdata_int(iItem, 30, 4)
	
	if(Mode >= 2)
	{
		Weapon_SendAnim(iPlayer, iItem, ANIM_SHOOT3)	
		set_pdata_float(iItem, 48, 0.76, 4)
		
		set_pdata_float(iItem, 46, WEAPON_TIME_NEXT_ATTACKZ, 4)
		set_pdata_float(iItem, 47, WEAPON_TIME_NEXT_ATTACKZ, 4)
		
		set_pdata_float(iItem, 62, 0.0, 4)
		
		Create_Laser(iPlayer)
		
		if(--iClip <= 0)
		{
			set_pdata_float(iPlayer, 83, 1.7, 5)
			
			set_pdata_int(iItem, 39, 4, 4)
			set_pev(iItem, pev_nextthink, get_gametime() + 0.83)
		}
	}
	else
	{
		Weapon_SendAnim(iPlayer, iItem, Mode ? ANIM_SHOOT2 : ANIM_SHOOT1)
		set_pdata_float(iItem, 48, 0.83, 4)
		
		set_pdata_float(iItem, 46, WEAPON_TIME_NEXT_ATTACK, 4)
		set_pdata_float(iItem, 47, WEAPON_TIME_NEXT_ATTACK, 4)
		
		// Cancel ANIM_SCANACTIVATE
		set_pdata_int(iItem, 39, 0, 4)
		
		static Float:Velocity[3]
		
		pev(iPlayer, pev_velocity, Velocity)
		
		if(xs_vec_len(Velocity) > 0)
		{
			Weapon_KickBack(iItem, iPlayer, 0.5, 0.275, 0.2, 0.03, 3.0, 2.0, 10)
		}
		else if(!(iFlags & FL_ONGROUND))
		{
			Weapon_KickBack(iItem, iPlayer, 0.9, 0.475, 0.35, 0.0425, 5.0, 3.0, 6)
		}
		else if(iFlags & FL_DUCKING)
		{
			Weapon_KickBack(iItem, iPlayer, 0.225, 0.15, 0.1, 0.015, 2.0, 1.0, 10)
		}
		else
		{
			Weapon_KickBack(iItem, iPlayer, 0.25, 0.175, 0.125, 0.02, 2.25, 1.25, 10)
		}
	}
	
	emit_sound(iPlayer, CHAN_WEAPON, Kronos5_Sounds[0], 1.0, 0.4, 0, 94 + random_num(0, 15))
	
	return HAM_SUPERCEDE
}

public fw_Weapon_SecondaryAttack(iItem)
{
	if(!IsCustomItem(iItem))
		return HAM_IGNORED
		
	static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)	
	static iClip; iClip = get_pdata_int(iItem, 51, 4)
	
	if(iClip <= 0)
		return HAM_SUPERCEDE
		
	static Mode; Mode = get_pdata_int(iItem, 30, 4)
	
	if(Mode >= 2 || Mode <= 0)
		return HAM_SUPERCEDE
	
	set_pdata_float(iPlayer, 83, 0.84, 5)
	
	Weapon_SendAnim(iPlayer, iItem, ANIM_ZOOM)
	set_pdata_float(iItem, 48, 0.83, 4)
	
	set_pdata_int(iItem, 39, 2, 4)
	set_pev(iItem, pev_nextthink, get_gametime() + 0.83)
	
	return HAM_SUPERCEDE
}

public fw_TraceAttack_Entity(iEntity, iAttacker, Float: flDamage) <FireBullets: Enabled>
{
	if(!is_connected(iAttacker))
		return
	
	static iActiveItem; iActiveItem = get_pdata_cbase(iAttacker, 373, 5)
	
	if(!IsValidPev(iActiveItem))
		return 
		
	switch(get_pdata_int(iActiveItem, 30, 4))
	{
		case 2:
		{
			SetHamParamFloat(3, WEAPON_SHOOT_DAMAGEZ)
			return
		}
		case 1:
		{
			SetHamParamFloat(3, WEAPON_SHOOT_DAMAGE)
			return
		}
		case 0:
		{
			SetHamParamFloat(3, WEAPON_SHOOT_DAMAGE)
		}
	}	
		
	if(!is_connected(iEntity))
		return
		
	if(get_pdata_int(iEntity, 114, 5) == get_pdata_int(iAttacker, 114, 5))
		return	
		
	static CheckShoots; CheckShoots = get_pdata_int(iActiveItem, 55, 4)
	
	if(CheckShoots < ACTIVATE_AMMO)
	{
		CheckShoots++
		set_pdata_int(iActiveItem, 55, CheckShoots, 4)
	}
	else
	{
		set_pdata_int(iActiveItem, 55, 0, 4)
		set_pdata_int(iActiveItem, 30, 1 ,4)
		
		set_pdata_int(iActiveItem, 39, 1, 4)
		set_pev(iActiveItem, pev_nextthink, get_gametime() + 0.83)
	}	
}

public fw_TraceAttack_Entity() </* Empty statement */>		
{ 
	/* Fallback */ 
}

public fw_TraceAttack_Entity() <FireBullets: Disabled>		
{ 
	/* Do notning */ 
}

//**********************************************
//* Effects                                    *
//**********************************************
Scan_Enemies(iPlayer)
{
	static Team; Team = get_pdata_int(iPlayer, 114, 5)
	static Float:Origin[3]; pev(iPlayer, pev_origin, Origin)
	static Float:TargetOrigin[3], Float:TargetDistance
	static Float:VecMiddle[3], Float:HitPoint[3], Float:ScaleBoneLen, Float:ScaleBoneWid, Float:DistanceToHitPoint
	static Flags, Float:BoneStart[3], Float:BoneEnd[3], Float:OffsetVec[3], Float:EyeLevel[3], Float:TargetHitPointDistance
	static Brightness
	
	for(new Target = 1; Target <= g_MaxPlayers; Target++)
	{
		if(!is_alive(Target))
			continue
		
		if(get_pdata_int(Target, 114, 5) == Team)
			continue
		
		pev(Target, pev_origin, TargetOrigin)
		
		if(!fm_is_in_viewcone(iPlayer, TargetOrigin))
			continue
		
		TargetDistance = get_distance_f(Origin, TargetOrigin)
		
		if(TargetDistance > WALLHACK_DISTACE)
			continue
		
		// Trace from me to target, getting hitpoint
		engfunc(EngFunc_TraceLine, Origin, TargetOrigin, IGNORE_MONSTERS, 0, 0)
		get_tr2(0, TR_vecEndPos, HitPoint)
		
		// I don't want wallhack when I can see the enemy
		if(xs_vec_equal(HitPoint, TargetOrigin))
			continue
		
		// Get vector from me to target
		xs_vec_sub(TargetOrigin, Origin, VecMiddle)
								
		// Get distance from me to hitpoint (nearest wall)
		DistanceToHitPoint = vector_distance(Origin, HitPoint)
		
		// Get player flags
		Flags = pev(iPlayer, pev_flags)
		
		// Scale
		ScaleBoneLen = DistanceToHitPoint / TargetDistance * 50.0
		ScaleBoneWid = DistanceToHitPoint / TargetDistance * 150.0
								
		// Get the point 10.0 units away from wall
		xs_vec_normalize(VecMiddle, OffsetVec)
		xs_vec_mul_scalar(OffsetVec, DistanceToHitPoint - 10.0, OffsetVec)
		
		// Set to eye level
		xs_vec_copy(Origin, EyeLevel)
		
		if(Flags & FL_DUCKING)
		{
			EyeLevel[2] += 12.3
		}
		else
		{
			EyeLevel[2] += 17.5
		}
								
		xs_vec_add(OffsetVec, EyeLevel, OffsetVec)					
		
		// Start and End of a box
		xs_vec_copy(OffsetVec, BoneStart)
		xs_vec_copy(OffsetVec, BoneEnd)
		BoneEnd[2] -= ScaleBoneLen
		
		TargetHitPointDistance = TargetDistance - DistanceToHitPoint
		
		// This is to make the box darker if distance is larger
		Brightness = 255
		
		if(TargetHitPointDistance < 2040.0)
		{
			Brightness = (255 - floatround(TargetHitPointDistance / 12.0))
										
		}
		else
		{
			Brightness = 85
		}	
						
		Send_BeamPointMessage(iPlayer, BoneStart, BoneEnd, floatround(ScaleBoneWid), Brightness)
	}
}

Send_BeamPointMessage(iPlayer, Float:Origin1[3], Float:Origin2[3], Width, Brightness)
{
	engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0,0,0}, iPlayer) //message begin
	write_byte(0)
	engfunc(EngFunc_WriteCoord, Origin1[0]) // start position
	engfunc(EngFunc_WriteCoord, Origin1[1])
	engfunc(EngFunc_WriteCoord, Origin1[2])
	engfunc(EngFunc_WriteCoord, Origin2[0]) // end position
	engfunc(EngFunc_WriteCoord, Origin2[1])
	engfunc(EngFunc_WriteCoord, Origin2[2])
	write_short(g_SprESP) // 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(Width) // line width in 0.1's
	write_byte(0) // noise amplitude in 0.01's
	write_byte(TargetColor[0])
	write_byte(TargetColor[1])
	write_byte(TargetColor[2])
	write_byte(Brightness) // brightness)
	write_byte(0) // scroll speed in 0.1's
	message_end()
}	

Show_FakeCrosshair(iPlayer)
{
	set_dhudmessage(236, 135, 14, -1.0, -1.0, 0, 0.11, 0.11, 0.0, 0.0)
	show_dhudmessage(iPlayer, "+")	
}

Create_Laser(iPlayer)
{
	static Float:StartOrigin[3], Float:EndOrigin[3]
	
	Get_Position(iPlayer, 40.0, 0.0, 0.0, StartOrigin)
	fm_get_aim_origin(iPlayer, EndOrigin)
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMPOINTS)
	engfunc(EngFunc_WriteCoord, StartOrigin[0]) 
	engfunc(EngFunc_WriteCoord, StartOrigin[1]) 
	engfunc(EngFunc_WriteCoord, StartOrigin[2]) 
	engfunc(EngFunc_WriteCoord, EndOrigin[0]) 
	engfunc(EngFunc_WriteCoord, EndOrigin[1]) 
	engfunc(EngFunc_WriteCoord, EndOrigin[2]) 
	write_short(g_SprLaser)
	write_byte(0) // framerate
	write_byte(0) // framerate
	write_byte(5) // life
	write_byte(10)  // width
	write_byte(0)   // noise
	write_byte(255)   // r, g, b
	write_byte(255)   // r, g, b
	write_byte(255)   // r, g, b
	write_byte(175)	// brightness
	write_byte(0)		// speed
	message_end()
}

Set_ProgessBarTime(iPlayer, Time)
{
	message_begin(MSG_ONE_UNRELIABLE, g_MsgBarTime, {0, 0, 0}, iPlayer)
	write_byte(Time)
	write_byte(0)
	message_end()
}

Create_EfZoom(iPlayer)
{
	static Float:Origin[3], Float:Angles[3]
	
	pev(iPlayer, pev_origin, Origin)
	pev(iPlayer, pev_angles, Angles)
	
	static Ent; Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
	
	if(!pev_valid(Ent))
		return
		
	set_pev(Ent, pev_classname, ZOOM_CLASSNAME)
	set_pev(Ent, pev_owner, iPlayer)
	set_pev(Ent, pev_movetype, MOVETYPE_FLY)
	set_pev(Ent, pev_solid, SOLID_NOT)
	
	engfunc(EngFunc_SetModel, Ent, ef_model)
	fm_set_rendering(Ent, kRenderNormal, 255, 255, 255, kRenderTransAdd, 255)
	
	set_pev(Ent, pev_origin, Origin)
	set_pev(Ent, pev_angles, Angles)
	
	set_pev(Ent, pev_nextthink, get_gametime() + 0.001)
}

public fw_Zoom_Think(Ent)
{
	static Owner; Owner = pev(Ent, pev_owner)
	
	if(!is_alive(Owner))
	{
		set_pev(Ent, pev_flags, FL_KILLME)
		return
	}
	
	static iActiveItem; iActiveItem = get_pdata_cbase(Owner, 373, 5)
	
	if(!IsValidPev(iActiveItem) || !IsCustomItem(iActiveItem))
	{
		set_pev(Ent, pev_flags, FL_KILLME)
		return
	}
	
	if(get_pdata_int(iActiveItem, 30, 4) < 2)
	{
		set_pev(Ent, pev_flags, FL_KILLME)
		return
	}
	
	static Float:Origin[3], Float:Angles[3]
	
	pev(Owner, pev_origin, Origin)
	pev(Owner, pev_angles, Angles)
	
	set_pev(Ent, pev_origin, Origin)
	set_pev(Ent, pev_angles, Angles)
	
	set_pev(Ent, pev_nextthink, get_gametime() + 0.001)
}

//**********************************************
//* Safety Functions        		       *
//**********************************************
public Register_SafetyFunc()
{
	RegisterHam(Ham_Spawn, "player", "fw_Safety_Spawn_Post", 1)
	RegisterHam(Ham_Killed, "player", "fw_Safety_Killed_Post", 1)
}

public Register_SafetyFuncBot(iPlayer)
{
	RegisterHamFromEntity(Ham_Spawn, iPlayer, "fw_Safety_Spawn_Post", 1)
	RegisterHamFromEntity(Ham_Killed, iPlayer, "fw_Safety_Killed_Post", 1)
}

public Safety_Connected(iPlayer)
{
	Set_BitVar(g_IsConnected, iPlayer)
	UnSet_BitVar(g_IsAlive, iPlayer)
}

public Safety_Disconnected(iPlayer)
{
	UnSet_BitVar(g_IsConnected, iPlayer)
	UnSet_BitVar(g_IsAlive, iPlayer)
}

public fw_Safety_Spawn_Post(iPlayer)
{
	if(!is_user_alive(iPlayer))
		return
		
	Set_BitVar(g_IsAlive, iPlayer)
}

public fw_Safety_Killed_Post(iPlayer)
{
	UnSet_BitVar(g_IsAlive, iPlayer)
}

public is_connected(iPlayer)
{
	if(!(1 <= iPlayer <= 32))
		return 0
	if(!Get_BitVar(g_IsConnected, iPlayer))
		return 0

	return 1
}

public is_alive(iPlayer)
{
	if(!is_connected(iPlayer))
		return 0
	if(!Get_BitVar(g_IsAlive, iPlayer))
		return 0
		
	return 1
}

//**********************************************
//* Create and check our custom weapon.        *
//**********************************************
IsCustomItem(iItem)
{
	return (pev(iItem, pev_impulse) == g_iszWeaponKey)
}

Weapon_Create(Float: Origin[3] = {0.0, 0.0, 0.0}, Float: Angles[3] = {0.0, 0.0, 0.0})
{
	new iWeapon

	static iszAllocStringCached
	if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, WEAPON_BASE)))
	{
		iWeapon = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached)
	}
	
	if(!IsValidPev(iWeapon))
		return FM_NULLENT
	
	dllfunc(DLLFunc_Spawn, iWeapon)
	set_pev(iWeapon, pev_origin, Origin)

	set_pdata_int(iWeapon, 51, WEAPON_MAX_CLIP, 4)
	set_pdata_int(iWeapon, 55, 0, 4)
	set_pdata_int(iWeapon, 30, 0, 4)
	set_pdata_int(iWeapon, 39, 0, 4)
	
	set_pev(iWeapon, pev_impulse, g_iszWeaponKey)
	set_pev(iWeapon, pev_angles, Angles)
	
	engfunc(EngFunc_SetModel, iWeapon, w_model)

	return iWeapon
}

Weapon_Give(iPlayer)
{
	if(!IsValidPev(iPlayer))
	{
		return FM_NULLENT
	}
	
	new iWeapon, Float: vecOrigin[3]
	pev(iPlayer, pev_origin, vecOrigin)
	
	if((iWeapon = Weapon_Create(vecOrigin)) != FM_NULLENT)
	{
		Player_DropWeapons(iPlayer, ExecuteHamB(Ham_Item_ItemSlot, iWeapon))
		
		set_pev(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN)
		dllfunc(DLLFunc_Touch, iWeapon, iPlayer)
		
		SetAmmoInventory(iPlayer, PrimaryAmmoIndex(iWeapon), WEAPON_DEFAULT_AMMO)
		
		return iWeapon
	}
	
	return FM_NULLENT
}

Player_DropWeapons(iPlayer, iSlot)
{
	new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, 367 + iSlot, 5)

	while(IsValidPev(iItem))
	{
		pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName))
		engclient_cmd(iPlayer, "drop", szWeaponName)

		iItem = get_pdata_cbase(iItem, 42, 4)
	}
}

//**********************************************
//* Ammo Inventory.                            *
//**********************************************
PrimaryAmmoIndex(iItem)
{
	return get_pdata_int(iItem, 49, 4)
}

GetAmmoInventory(iPlayer, iAmmoIndex)
{
	if(iAmmoIndex == -1)
		return -1
	
	return get_pdata_int(iPlayer, 376 + iAmmoIndex, 5)
}

SetAmmoInventory(iPlayer, iAmmoIndex, iAmount)
{
	if(iAmmoIndex == -1)
		return 0
	
	set_pdata_int(iPlayer, 376 + iAmmoIndex, iAmount, 5)
	
	return 1
}

//**********************************************
//* Fire Bullets.                              *
//**********************************************
CallOriginalFireBullets(iItem, iPlayer)
{
	state FireBullets: Enabled
	static Float:g_Recoil[3]

	pev(iPlayer, pev_punchangle, g_Recoil)
	ExecuteHam(Ham_Weapon_PrimaryAttack, iItem)
	set_pev(iPlayer, pev_punchangle, g_Recoil)
	
	state FireBullets: Disabled
}

//**********************************************
//* Decals.                                    *
//**********************************************
new Array: g_hDecals

public fw_DecalIndex_Post()
{
	if(!g_hDecals)
	{
		g_hDecals = ArrayCreate(1, 1)
	}
	
	ArrayPushCell(g_hDecals, get_orig_retval())
}

UTIL_GunshotDecalTrace(iTrace, bool: bIsGunshot = false)
{
	static iHit
	static iMessage
	static iDecalIndex
	
	static Float:flFraction 
	static Float:vecEndPos[3]
	
	iHit = INSTANCE(get_tr2(iTrace, TR_pHit))
	
	if(iHit && !IsValidPev(iHit) || (pev(iHit, pev_flags) & FL_KILLME))
		return
	
	if(pev(iHit, pev_solid) != SOLID_BSP && pev(iHit, pev_movetype) != MOVETYPE_PUSHSTEP)
		return
	
	iDecalIndex = ExecuteHamB(Ham_DamageDecal, iHit, 0)
	
	if(iDecalIndex < 0 || iDecalIndex >=  ArraySize(g_hDecals))
		return
	
	iDecalIndex = ArrayGetCell(g_hDecals, iDecalIndex)
	
	get_tr2(iTrace, TR_flFraction, flFraction)
	get_tr2(iTrace, TR_vecEndPos, vecEndPos)
	
	if(iDecalIndex < 0 || flFraction >= 1.0)
		return
	
	if(bIsGunshot)
	{
		iMessage = TE_GUNSHOTDECAL
	}
	else
	{
		iMessage = TE_DECAL
		
		if(iHit != 0)
		{
			if(iDecalIndex > 255)
			{
				iMessage = TE_DECALHIGH
				iDecalIndex -= 256
			}
		}
		else
		{
			iMessage = TE_WORLDDECAL
			
			if(iDecalIndex > 255)
			{
				iMessage = TE_WORLDDECALHIGH
				iDecalIndex -= 256
			}
		}
	}
	
	engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEndPos, 0)
	write_byte(iMessage)
	engfunc(EngFunc_WriteCoord, vecEndPos[0])
	engfunc(EngFunc_WriteCoord, vecEndPos[1])
	engfunc(EngFunc_WriteCoord, vecEndPos[2])

	if(bIsGunshot)
	{
		write_short(iHit)
		write_byte(iDecalIndex)
	}
	else 
	{
		write_byte(iDecalIndex)
		
		if(iHit)
		{
			write_short(iHit)
		}
	}
    
	message_end()
}

//**********************************************
//* Set Animations.                            *
//**********************************************
stock Weapon_SendAnim(iPlayer, iItem, iAnim)
{
	static i, iCount, iSpectator, aSpectators[32]
	
	set_pev(iPlayer, pev_weaponanim, iAnim)

	message_begin(MSG_ONE, SVC_WEAPONANIM, .player = iPlayer)
	write_byte(iAnim)
	write_byte(pev(iItem, pev_body))
	message_end()
	
	if(IsObserver(iPlayer))
		return
	
	get_players(aSpectators, iCount, "bch")

	for(i = 0; i < iCount; i++)
	{
		iSpectator = aSpectators[i]
		
		if(IsObserver(iSpectator) != OBS_IN_EYE || pev(iSpectator, pev_iuser2) != iPlayer)
			continue
		
		set_pev(iSpectator, pev_weaponanim, iAnim)

		message_begin(MSG_ONE, SVC_WEAPONANIM, .player = iSpectator)
		write_byte(iAnim)
		write_byte(pev(iItem, pev_body))
		message_end()
	}
}

stock Player_SetAnimation(iPlayer, szAnim[])
{
	#define ACT_RANGE_ATTACK1   28
   
	// Linux extra offsets
	#define extra_offset_animating   4
	#define extra_offset_player 5
   
	// CBaseAnimating
	#define m_flFrameRate      36
	#define m_flGroundSpeed      37
	#define m_flLastEventCheck   38
	#define m_fSequenceFinished   39
	#define m_fSequenceLoops   40
   
	// CBaseMonster
	#define m_Activity      73
	#define m_IdealActivity      74
   
	// CBasePlayer
	#define m_flLastAttackTime   220
   
	new iAnimDesired, Float:flFrameRate, Float:flGroundSpeed, bool:bLoops
      
	if((iAnimDesired = lookup_sequence(iPlayer, szAnim, flFrameRate, bLoops, flGroundSpeed)) == -1)
	{
		iAnimDesired = 0
	}
   
	static Float:flGametime; flGametime = get_gametime()

	set_pev(iPlayer, pev_frame, 0.0)
	set_pev(iPlayer, pev_framerate, 1.0)
	set_pev(iPlayer, pev_animtime, flGametime)
	set_pev(iPlayer, pev_sequence, iAnimDesired)
   
	set_pdata_int(iPlayer, m_fSequenceLoops, bLoops, extra_offset_animating)
	set_pdata_int(iPlayer, m_fSequenceFinished, 0, extra_offset_animating)
   
	set_pdata_float(iPlayer, m_flFrameRate, flFrameRate, extra_offset_animating)
	set_pdata_float(iPlayer, m_flGroundSpeed, flGroundSpeed, extra_offset_animating)
	set_pdata_float(iPlayer, m_flLastEventCheck, flGametime , extra_offset_animating)
   
	set_pdata_int(iPlayer, m_Activity, ACT_RANGE_ATTACK1, extra_offset_player)
	set_pdata_int(iPlayer, m_IdealActivity, ACT_RANGE_ATTACK1, extra_offset_player)  
	set_pdata_float(iPlayer, m_flLastAttackTime, flGametime , extra_offset_player)
}

//**********************************************
//* Kick back.                                 *
//**********************************************
Weapon_KickBack(iItem, iPlayer, Float:upBase, Float:lateralBase, Float:upMod, Float:lateralMod, Float:upMax, Float:lateralMax, directionChange)
{
	static iDirection
	static iShotsFired 
	
	static Float: Punchangle[3]
	pev(iPlayer, pev_punchangle, Punchangle)
	
	if((iShotsFired = get_pdata_int(iItem, 64, 4)) != 1)
	{
		upBase += iShotsFired * upMod
		lateralBase += iShotsFired * lateralMod
	}
	
	upMax *= -1.0
	Punchangle[0] -= upBase
 
	if(upMax >= Punchangle[0])
	{
		Punchangle[0] = upMax
	}
	
	if((iDirection = get_pdata_int(iItem, 60, 4)))
	{
		Punchangle[1] += lateralBase
		
		if(lateralMax < Punchangle[1])
		{
			Punchangle[1] = lateralMax
		}
	}
	else
	{
		lateralMax *= -1.0;
		Punchangle[1] -= lateralBase
		
		if(lateralMax > Punchangle[1])
		{
			Punchangle[1] = lateralMax
		}
	}
	
	if(!random_num(0, directionChange))
	{
		set_pdata_int(iItem, 60, !iDirection, 4)
	}
	
	set_pev(iPlayer, pev_punchangle, Punchangle)
}

//**********************************************
//* Some useful stocks.                        *
//**********************************************
stock Get_Position(iPlayer, Float:forw, Float:right, Float:up, Float:vStart[])
{
	new Float:Origin[3], Float:Angles[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
	
	pev(iPlayer, pev_origin, Origin)
	pev(iPlayer, pev_view_ofs,vUp) //for player
	xs_vec_add(Origin, vUp, Origin)
	pev(iPlayer, pev_v_angle, Angles) // if normal entity ,use pev_angles
	
	angle_vector(Angles, ANGLEVECTOR_FORWARD, vForward) //or use EngFunc_AngleVectors
	angle_vector(Angles, ANGLEVECTOR_RIGHT, vRight)
	angle_vector(Angles, ANGLEVECTOR_UP, vUp)
	
	vStart[0] = Origin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
	vStart[1] = Origin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
	vStart[2] = Origin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
}
Please remove /get command. Thanks
Image

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

#2

Post by Night Fury » 5 years ago

  1. /* Plugin generated by AMXX-Studio */
  2.  
  3. #pragma compress 1
  4.  
  5. #include <zombie_escape>
  6. #include <fakemeta_util>
  7. #include <engine>
  8. #include <xs>
  9.  
  10. #define PLUGIN "Hunter Killer X-15"
  11. #define VERSION "1.0"
  12. #define AUTHOR "Bim Bim Cay"
  13.  
  14. // Models
  15. #define v_model "models/v_kronos5.mdl"
  16. #define p_model "models/p_kronos5.mdl"
  17. #define w_model "models/w_kronos5.mdl"
  18. #define ef_model "models/ef_kronos5.mdl"
  19.  
  20. // Sounds
  21. new const Kronos5_Sounds[2][] =
  22. {
  23.     "weapons/kronos5-1.wav",  
  24.     "weapons/kronos5_takeaim.wav"
  25. }
  26.  
  27. // Sprites
  28. #define ef_esp "sprites/laserbeam.spr"
  29. #define ef_laser "sprites/lgtning.spr"
  30.  
  31. // Animations
  32. #define ANIM_IDLE       0
  33. #define ANIM_IDLE2      1
  34. #define ANIM_IDLE3      2
  35. #define ANIM_SHOOT1     3
  36. #define ANIM_SHOOT2     4
  37. #define ANIM_SHOOT3     5
  38. #define ANIM_RELOAD1        6
  39. #define ANIM_RELOAD2        7
  40. #define ANIM_DRAW1      8
  41. #define ANIM_DRAW2      9
  42. #define ANIM_SCANACTIVATE   10
  43. #define ANIM_ZOOM       11
  44. #define ANIM_SCANDEACTIVATE 12
  45.  
  46. #define ANIM_EXTENSION  "carbine"
  47.  
  48. // Entity Classname
  49. #define ZOOM_CLASSNAME "Kronos5_Zoom"
  50.  
  51. // Configs
  52. #define WEAPON_NAME         "weapon_kronos5"
  53. #define WEAPON_BASE     "weapon_famas"
  54.  
  55. #define WEAPON_MAX_CLIP     30
  56. #define WEAPON_DEFAULT_AMMO 90
  57.  
  58. #define WEAPON_SHOOT_DAMAGE 113.0
  59. #define WEAPON_SHOOT_DAMAGEZ    726.0
  60.  
  61. #define WEAPON_TIME_NEXT_ATTACK 0.09
  62. #define WEAPON_TIME_NEXT_ATTACKZ 0.75
  63.  
  64. #define ACTIVATE_AMMO       30
  65. #define SCANMODE_DURATION   5      
  66. #define WALLHACK_DISTACE    2000.0
  67.  
  68. new const TargetColor[3] = {255, 0, 0}
  69.  
  70. // MACROS
  71. #define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
  72. #define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
  73. #define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))
  74.  
  75. #define INSTANCE(%0) ((%0 == -1) ? 0 : %0)
  76. #define IsValidPev(%0) (pev_valid(%0) == 2)
  77. #define IsObserver(%0) pev(%0,pev_iuser1)
  78. #define MUZZLE_INTOLERANCE 100
  79. #define OBS_IN_EYE 4
  80.  
  81. new g_iszWeaponKey
  82. new g_iForwardDecalIndex
  83. new g_SprLaser, g_SprESP
  84. new g_MaxPlayers
  85. new g_MsgBarTime
  86.  
  87. // Safety
  88. new g_HamBot
  89. new g_IsConnected, g_IsAlive
  90. new g_iItemID
  91.  
  92. public plugin_init()
  93. {
  94.     register_plugin(PLUGIN, VERSION, AUTHOR)
  95.    
  96.     // Safety
  97.     Register_SafetyFunc()
  98.    
  99.     // Forward
  100.     register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)
  101.     register_forward(FM_AddToFullPack, "fw_AddToFullPack_Post", 1)
  102.     register_forward(FM_TraceLine, "fw_TraceLine_Post", 1)
  103.     register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
  104.     register_forward(FM_SetModel, "fw_SetModel")
  105.    
  106.     unregister_forward(FM_DecalIndex, g_iForwardDecalIndex, 1)
  107.    
  108.     // Think
  109.     register_think(ZOOM_CLASSNAME, "fw_Zoom_Think")
  110.    
  111.     // Ham
  112.     RegisterHam(Ham_Spawn, "weaponbox", "fw_Weaponbox_Spawn_Post", 1)
  113.    
  114.     RegisterHam(Ham_Think, WEAPON_BASE, "fw_Item_Think")
  115.     RegisterHam(Ham_Item_Deploy, WEAPON_BASE, "fw_Item_Deploy_Post", 1)
  116.     RegisterHam(Ham_Item_Holster, WEAPON_BASE, "fw_Item_Holster_Post", 1)
  117.     RegisterHam(Ham_Item_PostFrame, WEAPON_BASE, "fw_Item_PostFrame")
  118.     RegisterHam(Ham_Weapon_Reload, WEAPON_BASE, "fw_Weapon_Reload")
  119.     RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_BASE, "fw_Weapon_WeaponIdle")
  120.     RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_BASE, "fw_Weapon_PrimaryAttack")
  121.     RegisterHam(Ham_Weapon_SecondaryAttack, WEAPON_BASE, "fw_Weapon_SecondaryAttack")
  122.    
  123.     RegisterHam(Ham_TraceAttack, "func_breakable", "fw_TraceAttack_Entity")
  124.     RegisterHam(Ham_TraceAttack, "info_target", "fw_TraceAttack_Entity")
  125.     RegisterHam(Ham_TraceAttack, "player", "fw_TraceAttack_Entity")
  126.    
  127.     // Get Maxplayers
  128.     g_MaxPlayers = get_member_game(m_nMaxPlayers)
  129.    
  130.     // Get Message ID
  131.     g_MsgBarTime = get_user_msgid("BarTime")
  132.    
  133.     g_iItemID = ze_register_item("Hunter Killer", 0, 0)
  134. }
  135.  
  136. public ze_select_item_pre(id, itemid)
  137. {
  138.     if (itemid != g_iItemID)
  139.         return ZE_ITEM_AVAILABLE
  140.  
  141.     if (ze_is_user_zombie(id))
  142.         return ZE_ITEM_DONT_SHOW
  143.  
  144.     return ZE_ITEM_AVAILABLE
  145. }
  146.  
  147. public ze_select_item_post(id, itemid)
  148. {
  149.     if (itemid != g_iItemID)
  150.         return
  151.  
  152.     Get_MyWeapon(id)
  153. }
  154.  
  155. public plugin_precache()
  156. {
  157.     precache_model(v_model)
  158.     precache_model(p_model)
  159.     precache_model(w_model)
  160.     precache_model(ef_model)
  161.    
  162.     for(new i = 0; i < sizeof(Kronos5_Sounds); i++)
  163.         precache_sound(Kronos5_Sounds[i])
  164.    
  165.     g_SprESP = precache_model(ef_esp)
  166.     g_SprLaser = precache_model(ef_laser)
  167.  
  168.     g_iszWeaponKey = engfunc(EngFunc_AllocString, WEAPON_NAME)
  169.     g_iForwardDecalIndex = register_forward(FM_DecalIndex, "fw_DecalIndex_Post", 1)
  170. }
  171.  
  172. public client_putinserver(iPlayer)
  173. {
  174.     Safety_Connected(iPlayer)
  175.    
  176.     if(!g_HamBot && is_user_bot(iPlayer))
  177.     {
  178.         g_HamBot = 1
  179.         set_task(0.1, "Register_HamBot", iPlayer)
  180.     }
  181. }
  182.  
  183. public Register_HamBot(iPlayer)
  184. {
  185.     Register_SafetyFuncBot(iPlayer)
  186.     RegisterHamFromEntity(Ham_TraceAttack, iPlayer, "fw_TraceAttack_Entity")  
  187. }
  188.  
  189. public client_disconnect(iPlayer)
  190. {
  191.     Safety_Disconnected(iPlayer)
  192. }
  193.  
  194. public Get_MyWeapon(iPlayer)
  195. {
  196.     Weapon_Give(iPlayer)
  197. }
  198.  
  199. //**********************************************
  200. //* Forward Hooking                            *
  201. //**********************************************
  202. public fw_UpdateClientData_Post(iPlayer, sendweapons, CD_Handle)
  203. {
  204.     enum
  205.     {
  206.         SPEC_MODE,
  207.         SPEC_TARGET,
  208.         SPEC_END
  209.     }
  210.      
  211.     static aSpecInfo[33][SPEC_END]
  212.    
  213.     static iTarget
  214.     static iSpecMode
  215.     static iActiveItem
  216.    
  217.     iTarget = (iSpecMode = IsObserver(iPlayer)) ? pev(iPlayer, pev_iuser2) : iPlayer
  218.    
  219.     if(!is_alive(iTarget))
  220.         return FMRES_IGNORED
  221.    
  222.     iActiveItem = get_pdata_cbase(iTarget, 373, 5)
  223.    
  224.     if(!IsValidPev(iActiveItem) || !IsCustomItem(iActiveItem))
  225.         return FMRES_IGNORED
  226.    
  227.     if(iSpecMode)
  228.     {
  229.         if(aSpecInfo[iPlayer][SPEC_MODE] != iSpecMode)
  230.         {
  231.             aSpecInfo[iPlayer][SPEC_MODE] = iSpecMode
  232.             aSpecInfo[iPlayer][SPEC_TARGET] = 0
  233.         }
  234.        
  235.         if(iSpecMode == OBS_IN_EYE && aSpecInfo[iPlayer][SPEC_TARGET] != iTarget)
  236.         {
  237.             aSpecInfo[iPlayer][SPEC_TARGET] = iTarget
  238.            
  239.             static Mode; Mode = get_pdata_int(iActiveItem, 30, 4)
  240.            
  241.             switch(Mode)
  242.             {
  243.                 case 0: Weapon_SendAnim(iPlayer, iActiveItem, ANIM_IDLE)
  244.                 case 1: Weapon_SendAnim(iPlayer, iActiveItem, ANIM_IDLE2)
  245.                 case 2: Weapon_SendAnim(iPlayer, iActiveItem, ANIM_IDLE3)
  246.             }
  247.         }
  248.     }
  249.    
  250.     set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001)
  251.    
  252.     return FMRES_HANDLED
  253. }
  254.  
  255. public fw_AddToFullPack_Post(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
  256. {
  257.     if(!pev_valid(iEnt))
  258.         return
  259.    
  260.     static Classname[24]
  261.     pev(iEnt, pev_classname, Classname, charsmax(Classname))
  262.    
  263.     if(equali(Classname, ZOOM_CLASSNAME))
  264.     {
  265.         if(iHost == pev(iEnt, pev_owner))
  266.         {
  267.             set_es(esState, ES_Effects, get_es(esState, ES_Effects) | EF_NODRAW)
  268.         }
  269.     }
  270.    
  271.     if(!is_alive(iEnt) || !is_alive(iHost))
  272.         return
  273.        
  274.     static iActiveItem; iActiveItem = get_pdata_cbase(iHost, 373, 5)  
  275.    
  276.     if(!IsValidPev(iActiveItem) || !IsCustomItem(iActiveItem))
  277.         return
  278.        
  279.     if(get_pdata_int(iActiveItem, 30, 4) >= 2)
  280.     {
  281.         if(get_pdata_int(iHost, 114, 5) == get_pdata_int(iEnt, 114, 5))
  282.             return
  283.        
  284.         set_es(esState, ES_RenderFx, kRenderFxGlowShell)
  285.         set_es(esState, ES_RenderMode, kRenderTransAdd)
  286.         set_es(esState, ES_RenderColor, TargetColor)
  287.         set_es(esState, ES_RenderAmt, 8)
  288.     }
  289. }
  290.  
  291. public fw_TraceLine_Post(Float:TraceStart[3], Float:TraceEnd[3], fNoMonsters, iEntToSkip, iTrace) <FireBullets: Enabled>
  292. {
  293.     static Float:vecEndPos[3]
  294.    
  295.     get_tr2(iTrace, TR_vecEndPos, vecEndPos)
  296.     engfunc(EngFunc_TraceLine, vecEndPos, TraceStart, fNoMonsters, iEntToSkip, 0)
  297.    
  298.     UTIL_GunshotDecalTrace(0)
  299.     UTIL_GunshotDecalTrace(iTrace, true)
  300. }
  301.  
  302. public fw_TraceLine_Post() </* Empty statement */>
  303. {
  304.     /* Fallback */
  305. }
  306.  
  307. public fw_TraceLine_Post() <FireBullets: Disabled>
  308. {
  309.     /* Do notning */
  310. }
  311.  
  312. public fw_PlaybackEvent() <FireBullets: Enabled>
  313. {
  314.     return FMRES_SUPERCEDE
  315. }
  316.  
  317. public fw_PlaybackEvent() </* Empty statement */>      
  318. {
  319.     return FMRES_IGNORED
  320. }
  321.  
  322. public fw_PlaybackEvent() <FireBullets: Disabled>      
  323. {
  324.     return FMRES_IGNORED
  325. }
  326.  
  327. //**********************************************
  328. //* Weaponbox world model.                     *
  329. //**********************************************
  330. public fw_SetModel(iEntity) <WeaponBox: Enabled>
  331. {
  332.     state WeaponBox: Disabled
  333.    
  334.     if(!IsValidPev(iEntity))
  335.         return FMRES_IGNORED
  336.    
  337.     #define MAX_ITEM_TYPES  6
  338.     for(new i, iItem; i < MAX_ITEM_TYPES; i++)
  339.     {
  340.         iItem = get_pdata_cbase(iEntity, 34 + i, 4)
  341.        
  342.         if(IsValidPev(iItem) && IsCustomItem(iItem))
  343.         {
  344.             engfunc(EngFunc_SetModel, iEntity, w_model)
  345.             return FMRES_SUPERCEDE
  346.         }
  347.     }
  348.    
  349.     return FMRES_IGNORED
  350. }
  351.  
  352. public fw_SetModel() </* Empty statement */>  
  353. {
  354.     /*  Fallback  */
  355.     return FMRES_IGNORED
  356. }
  357. public fw_SetModel() <WeaponBox: Disabled>
  358. {
  359.     /* Do nothing */
  360.     return FMRES_IGNORED
  361. }
  362.  
  363. public fw_Weaponbox_Spawn_Post(iWeaponBox)
  364. {
  365.     if(IsValidPev(iWeaponBox))
  366.     {
  367.         state (IsValidPev(pev(iWeaponBox, pev_owner))) WeaponBox: Enabled
  368.     }
  369.    
  370.     return HAM_IGNORED
  371. }
  372.  
  373. //**********************************************
  374. //* Weapon's codes.                            *
  375. //**********************************************
  376. public fw_Item_Deploy_Post(iItem)
  377. {
  378.     if(!IsCustomItem(iItem))
  379.         return
  380.        
  381.     static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)
  382.    
  383.     set_pev(iPlayer, pev_viewmodel2, v_model)
  384.     set_pev(iPlayer, pev_weaponmodel2, p_model)
  385.    
  386.     if(get_pdata_int(iItem, 30, 4))
  387.     {
  388.         Weapon_SendAnim(iPlayer, iItem, ANIM_DRAW2)
  389.     }
  390.     else
  391.     {
  392.         Weapon_SendAnim(iPlayer, iItem, ANIM_DRAW1)
  393.     }
  394.    
  395.     set_pdata_string(iPlayer, (492) * 4, ANIM_EXTENSION, -1 , 20)
  396. }
  397.  
  398. public fw_Item_Holster_Post(iItem)
  399. {
  400.     if(!IsCustomItem(iItem))
  401.         return
  402.    
  403.     static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)
  404.        
  405.     set_pdata_int(iItem, 55, 0, 4)
  406.     set_pdata_int(iItem, 39, 0, 4)
  407.    
  408.     if(get_pdata_int(iItem, 30, 4) >= 2)
  409.     {
  410.         set_pdata_int(iItem, 30, 0, 4)
  411.         Set_ProgessBarTime(iPlayer, 0)
  412.     }
  413. }
  414.  
  415. public fw_Item_PostFrame(iItem)
  416. {
  417.     if(!IsCustomItem(iItem))
  418.         return HAM_IGNORED
  419.    
  420.     static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)
  421.    
  422.     if(get_pdata_int(iItem, 54, 4))
  423.     {
  424.         static iClip; iClip = get_pdata_int(iItem, 51, 4)
  425.         static iPrimaryAmmoIndex; iPrimaryAmmoIndex = PrimaryAmmoIndex(iItem)
  426.         static iAmmoPrimary; iAmmoPrimary = GetAmmoInventory(iPlayer, iPrimaryAmmoIndex)
  427.         static iAmount; iAmount = min(WEAPON_MAX_CLIP - iClip, iAmmoPrimary)
  428.        
  429.         set_pdata_int(iItem, 51, iClip + iAmount, 4)
  430.         SetAmmoInventory(iPlayer, iPrimaryAmmoIndex, iAmmoPrimary - iAmount)
  431.        
  432.         set_pdata_int(iItem, 54, 0, 4)
  433.     }  
  434.    
  435.     if(get_pdata_int(iItem, 30, 4) >= 2)
  436.     {
  437.         static Float:flLastEventCheck; flLastEventCheck = get_pdata_float(iItem, 38, 4)
  438.    
  439.         if(flLastEventCheck < get_gametime())
  440.         {
  441.             flLastEventCheck = get_gametime() + 0.1
  442.             set_pdata_float(iItem, 38, flLastEventCheck, 4)
  443.        
  444.             Scan_Enemies(iPlayer)
  445.             Show_FakeCrosshair(iPlayer)
  446.         }
  447.     }
  448.    
  449.     return HAM_IGNORED
  450. }
  451.  
  452. public fw_Weapon_Reload(iItem)
  453. {
  454.     if(!IsCustomItem(iItem))
  455.         return HAM_IGNORED
  456.        
  457.     static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)
  458.    
  459.     static iClip; iClip = get_pdata_int(iItem, 51, 4)
  460.     static iPrimaryAmmoIndex; iPrimaryAmmoIndex = PrimaryAmmoIndex(iItem)
  461.     static iAmmoPrimary; iAmmoPrimary = GetAmmoInventory(iPlayer, iPrimaryAmmoIndex)
  462.    
  463.     if(min(WEAPON_MAX_CLIP - iClip, iAmmoPrimary) <= 0)
  464.         return HAM_SUPERCEDE
  465.    
  466.     static Mode; Mode = get_pdata_int(iItem, 30, 4)
  467.    
  468.     if(Mode >= 2)
  469.         return HAM_SUPERCEDE
  470.  
  471.     set_pdata_int(iItem, 51, 0, 4)
  472.    
  473.     ExecuteHam(Ham_Weapon_Reload, iItem)
  474.    
  475.     set_pdata_int(iItem, 51, iClip, 4)
  476.    
  477.     set_pdata_float(iPlayer, 83, 3.0, 5)
  478.     set_pdata_float(iItem, 48, 3.0, 4)
  479.    
  480.     if(Mode)
  481.     {
  482.         Weapon_SendAnim(iPlayer, iItem, ANIM_RELOAD2)
  483.     }
  484.     else
  485.     {
  486.         Weapon_SendAnim(iPlayer, iItem, ANIM_RELOAD1)
  487.     }
  488.    
  489.     // Cancel ANIM_SCANACTIVATE
  490.     set_pdata_int(iItem, 39, 0, 4)
  491.    
  492.     return HAM_SUPERCEDE  
  493. }
  494.  
  495. public fw_Weapon_WeaponIdle(iItem)
  496. {
  497.     if(!IsCustomItem(iItem))
  498.         return HAM_IGNORED
  499.        
  500.     static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)
  501.    
  502.     ExecuteHamB(Ham_Weapon_ResetEmptySound, iItem)
  503.  
  504.     if(get_pdata_float(iItem, 48, 4) > 0.0)
  505.         return HAM_SUPERCEDE
  506.    
  507.     set_pdata_float(iItem, 48, 10.0, 4)
  508.    
  509.     static Mode; Mode = get_pdata_int(iItem, 30, 4)
  510.            
  511.     switch(Mode)
  512.     {
  513.         case 0: Weapon_SendAnim(iPlayer, iItem, ANIM_IDLE)
  514.         case 1: Weapon_SendAnim(iPlayer, iItem, ANIM_IDLE2)
  515.         case 2: Weapon_SendAnim(iPlayer, iItem, ANIM_IDLE3)
  516.     }
  517.    
  518.     return HAM_SUPERCEDE
  519. }
  520.  
  521. public fw_Item_Think(iItem)
  522. {
  523.     if(!IsValidPev(iItem) || !IsCustomItem(iItem))
  524.         return HAM_IGNORED
  525.    
  526.     static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)
  527.    
  528.     if(!is_alive(iPlayer))
  529.         return HAM_SUPERCEDE
  530.    
  531.     if(get_pdata_cbase(iPlayer, 373, 5) != iItem)
  532.         return HAM_SUPERCEDE
  533.        
  534.     switch(get_pdata_int(iItem, 39, 4))
  535.     {
  536.         case 1:
  537.         {
  538.             set_pdata_int(iItem, 39, 0, 4)
  539.            
  540.             Weapon_SendAnim(iPlayer, iItem, ANIM_SCANACTIVATE)
  541.             set_pdata_float(iItem, 48, 0.87, 4)
  542.         }
  543.         case 2:
  544.         {
  545.             set_pdata_int(iItem, 30, 2, 4)
  546.            
  547.             set_pdata_int(iPlayer, 363, 55, 5)
  548.             Set_ProgessBarTime(iPlayer, SCANMODE_DURATION)
  549.            
  550.             set_pdata_int(iItem, 39, 3, 4)
  551.             set_pev(iItem, pev_nextthink, get_gametime() + float(SCANMODE_DURATION))
  552.            
  553.             Create_EfZoom(iPlayer)
  554.             emit_sound(iPlayer, CHAN_ITEM, Kronos5_Sounds[1], 1.0, 0.4, 0, 94 + random_num(0, 15))
  555.         }
  556.         case 3:
  557.         {
  558.             set_pdata_int(iItem, 39, 0, 4)
  559.             set_pdata_int(iItem, 30, 0, 4)
  560.            
  561.             set_pdata_int(iPlayer, 363, 90, 5)
  562.             set_pdata_float(iPlayer, 83, 0.87, 5)
  563.            
  564.             Weapon_SendAnim(iPlayer, iItem, ANIM_SCANDEACTIVATE)
  565.             set_pdata_float(iItem, 48, 0.87, 4)
  566.         }
  567.         case 4:
  568.         {
  569.             set_pdata_int(iItem, 39, 0, 4)
  570.             set_pdata_int(iItem, 30, 0, 4)
  571.            
  572.             Set_ProgessBarTime(iPlayer, 0)
  573.             set_pdata_int(iPlayer, 363, 90, 5)
  574.            
  575.             Weapon_SendAnim(iPlayer, iItem, ANIM_SCANDEACTIVATE)
  576.             set_pdata_float(iItem, 48, 0.87, 4)
  577.         }
  578.     }
  579.    
  580.     return HAM_SUPERCEDE
  581. }
  582.  
  583. public fw_Weapon_PrimaryAttack(iItem)
  584. {
  585.     if(!IsCustomItem(iItem))
  586.         return HAM_IGNORED
  587.        
  588.     static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)
  589.     static iClip; iClip = get_pdata_int(iItem, 51, 4)
  590.    
  591.     if(iClip <= 0)
  592.     {
  593.         // No ammo, play empty sound and cancel
  594.         if(get_pdata_int(iItem, 45, 4))
  595.         {
  596.             ExecuteHamB(Ham_Weapon_PlayEmptySound, iItem)
  597.             set_pdata_float(iItem, 46, 0.2, 4)
  598.         }
  599.    
  600.         return HAM_SUPERCEDE
  601.     }
  602.    
  603.     CallOriginalFireBullets(iItem, iPlayer)
  604.    
  605.     static iFlags
  606.     static szAnimation[64]
  607.  
  608.     iFlags = pev(iPlayer, pev_flags)
  609.    
  610.     if(iFlags & FL_DUCKING)
  611.     {
  612.         formatex(szAnimation, charsmax(szAnimation), "crouch_shoot_%s", ANIM_EXTENSION)
  613.     }
  614.     else
  615.     {
  616.         formatex(szAnimation, charsmax(szAnimation), "ref_shoot_%s", ANIM_EXTENSION)
  617.     }
  618.    
  619.     Player_SetAnimation(iPlayer, szAnimation)
  620.    
  621.     static Mode; Mode = get_pdata_int(iItem, 30, 4)
  622.    
  623.     if(Mode >= 2)
  624.     {
  625.         Weapon_SendAnim(iPlayer, iItem, ANIM_SHOOT3)  
  626.         set_pdata_float(iItem, 48, 0.76, 4)
  627.        
  628.         set_pdata_float(iItem, 46, WEAPON_TIME_NEXT_ATTACKZ, 4)
  629.         set_pdata_float(iItem, 47, WEAPON_TIME_NEXT_ATTACKZ, 4)
  630.        
  631.         set_pdata_float(iItem, 62, 0.0, 4)
  632.        
  633.         Create_Laser(iPlayer)
  634.        
  635.         if(--iClip <= 0)
  636.         {
  637.             set_pdata_float(iPlayer, 83, 1.7, 5)
  638.            
  639.             set_pdata_int(iItem, 39, 4, 4)
  640.             set_pev(iItem, pev_nextthink, get_gametime() + 0.83)
  641.         }
  642.     }
  643.     else
  644.     {
  645.         Weapon_SendAnim(iPlayer, iItem, Mode ? ANIM_SHOOT2 : ANIM_SHOOT1)
  646.         set_pdata_float(iItem, 48, 0.83, 4)
  647.        
  648.         set_pdata_float(iItem, 46, WEAPON_TIME_NEXT_ATTACK, 4)
  649.         set_pdata_float(iItem, 47, WEAPON_TIME_NEXT_ATTACK, 4)
  650.        
  651.         // Cancel ANIM_SCANACTIVATE
  652.         set_pdata_int(iItem, 39, 0, 4)
  653.        
  654.         static Float:Velocity[3]
  655.        
  656.         pev(iPlayer, pev_velocity, Velocity)
  657.        
  658.         if(xs_vec_len(Velocity) > 0)
  659.         {
  660.             Weapon_KickBack(iItem, iPlayer, 0.5, 0.275, 0.2, 0.03, 3.0, 2.0, 10)
  661.         }
  662.         else if(!(iFlags & FL_ONGROUND))
  663.         {
  664.             Weapon_KickBack(iItem, iPlayer, 0.9, 0.475, 0.35, 0.0425, 5.0, 3.0, 6)
  665.         }
  666.         else if(iFlags & FL_DUCKING)
  667.         {
  668.             Weapon_KickBack(iItem, iPlayer, 0.225, 0.15, 0.1, 0.015, 2.0, 1.0, 10)
  669.         }
  670.         else
  671.         {
  672.             Weapon_KickBack(iItem, iPlayer, 0.25, 0.175, 0.125, 0.02, 2.25, 1.25, 10)
  673.         }
  674.     }
  675.    
  676.     emit_sound(iPlayer, CHAN_WEAPON, Kronos5_Sounds[0], 1.0, 0.4, 0, 94 + random_num(0, 15))
  677.    
  678.     return HAM_SUPERCEDE
  679. }
  680.  
  681. public fw_Weapon_SecondaryAttack(iItem)
  682. {
  683.     if(!IsCustomItem(iItem))
  684.         return HAM_IGNORED
  685.        
  686.     static iPlayer; iPlayer = get_pdata_cbase(iItem, 41, 4)
  687.     static iClip; iClip = get_pdata_int(iItem, 51, 4)
  688.    
  689.     if(iClip <= 0)
  690.         return HAM_SUPERCEDE
  691.        
  692.     static Mode; Mode = get_pdata_int(iItem, 30, 4)
  693.    
  694.     if(Mode >= 2 || Mode <= 0)
  695.         return HAM_SUPERCEDE
  696.    
  697.     set_pdata_float(iPlayer, 83, 0.84, 5)
  698.    
  699.     Weapon_SendAnim(iPlayer, iItem, ANIM_ZOOM)
  700.     set_pdata_float(iItem, 48, 0.83, 4)
  701.    
  702.     set_pdata_int(iItem, 39, 2, 4)
  703.     set_pev(iItem, pev_nextthink, get_gametime() + 0.83)
  704.    
  705.     return HAM_SUPERCEDE
  706. }
  707.  
  708. public fw_TraceAttack_Entity(iEntity, iAttacker, Float: flDamage) <FireBullets: Enabled>
  709. {
  710.     if(!is_connected(iAttacker))
  711.         return
  712.    
  713.     static iActiveItem; iActiveItem = get_pdata_cbase(iAttacker, 373, 5)
  714.    
  715.     if(!IsValidPev(iActiveItem))
  716.         return
  717.        
  718.     switch(get_pdata_int(iActiveItem, 30, 4))
  719.     {
  720.         case 2:
  721.         {
  722.             SetHamParamFloat(3, WEAPON_SHOOT_DAMAGEZ)
  723.             return
  724.         }
  725.         case 1:
  726.         {
  727.             SetHamParamFloat(3, WEAPON_SHOOT_DAMAGE)
  728.             return
  729.         }
  730.         case 0:
  731.         {
  732.             SetHamParamFloat(3, WEAPON_SHOOT_DAMAGE)
  733.         }
  734.     }  
  735.        
  736.     if(!is_connected(iEntity))
  737.         return
  738.        
  739.     if(get_pdata_int(iEntity, 114, 5) == get_pdata_int(iAttacker, 114, 5))
  740.         return
  741.        
  742.     static CheckShoots; CheckShoots = get_pdata_int(iActiveItem, 55, 4)
  743.    
  744.     if(CheckShoots < ACTIVATE_AMMO)
  745.     {
  746.         CheckShoots++
  747.         set_pdata_int(iActiveItem, 55, CheckShoots, 4)
  748.     }
  749.     else
  750.     {
  751.         set_pdata_int(iActiveItem, 55, 0, 4)
  752.         set_pdata_int(iActiveItem, 30, 1 ,4)
  753.        
  754.         set_pdata_int(iActiveItem, 39, 1, 4)
  755.         set_pev(iActiveItem, pev_nextthink, get_gametime() + 0.83)
  756.     }  
  757. }
  758.  
  759. public fw_TraceAttack_Entity() </* Empty statement */>    
  760. {
  761.     /* Fallback */
  762. }
  763.  
  764. public fw_TraceAttack_Entity() <FireBullets: Disabled>    
  765. {
  766.     /* Do notning */
  767. }
  768.  
  769. //**********************************************
  770. //* Effects                                    *
  771. //**********************************************
  772. Scan_Enemies(iPlayer)
  773. {
  774.     static Team; Team = get_pdata_int(iPlayer, 114, 5)
  775.     static Float:Origin[3]; pev(iPlayer, pev_origin, Origin)
  776.     static Float:TargetOrigin[3], Float:TargetDistance
  777.     static Float:VecMiddle[3], Float:HitPoint[3], Float:ScaleBoneLen, Float:ScaleBoneWid, Float:DistanceToHitPoint
  778.     static Flags, Float:BoneStart[3], Float:BoneEnd[3], Float:OffsetVec[3], Float:EyeLevel[3], Float:TargetHitPointDistance
  779.     static Brightness
  780.    
  781.     for(new Target = 1; Target <= g_MaxPlayers; Target++)
  782.     {
  783.         if(!is_alive(Target))
  784.             continue
  785.        
  786.         if(get_pdata_int(Target, 114, 5) == Team)
  787.             continue
  788.        
  789.         pev(Target, pev_origin, TargetOrigin)
  790.        
  791.         if(!fm_is_in_viewcone(iPlayer, TargetOrigin))
  792.             continue
  793.        
  794.         TargetDistance = get_distance_f(Origin, TargetOrigin)
  795.        
  796.         if(TargetDistance > WALLHACK_DISTACE)
  797.             continue
  798.        
  799.         // Trace from me to target, getting hitpoint
  800.         engfunc(EngFunc_TraceLine, Origin, TargetOrigin, IGNORE_MONSTERS, 0, 0)
  801.         get_tr2(0, TR_vecEndPos, HitPoint)
  802.        
  803.         // I don't want wallhack when I can see the enemy
  804.         if(xs_vec_equal(HitPoint, TargetOrigin))
  805.             continue
  806.        
  807.         // Get vector from me to target
  808.         xs_vec_sub(TargetOrigin, Origin, VecMiddle)
  809.                                
  810.         // Get distance from me to hitpoint (nearest wall)
  811.         DistanceToHitPoint = vector_distance(Origin, HitPoint)
  812.        
  813.         // Get player flags
  814.         Flags = pev(iPlayer, pev_flags)
  815.        
  816.         // Scale
  817.         ScaleBoneLen = DistanceToHitPoint / TargetDistance * 50.0
  818.         ScaleBoneWid = DistanceToHitPoint / TargetDistance * 150.0
  819.                                
  820.         // Get the point 10.0 units away from wall
  821.         xs_vec_normalize(VecMiddle, OffsetVec)
  822.         xs_vec_mul_scalar(OffsetVec, DistanceToHitPoint - 10.0, OffsetVec)
  823.        
  824.         // Set to eye level
  825.         xs_vec_copy(Origin, EyeLevel)
  826.        
  827.         if(Flags & FL_DUCKING)
  828.         {
  829.             EyeLevel[2] += 12.3
  830.         }
  831.         else
  832.         {
  833.             EyeLevel[2] += 17.5
  834.         }
  835.                                
  836.         xs_vec_add(OffsetVec, EyeLevel, OffsetVec)                
  837.        
  838.         // Start and End of a box
  839.         xs_vec_copy(OffsetVec, BoneStart)
  840.         xs_vec_copy(OffsetVec, BoneEnd)
  841.         BoneEnd[2] -= ScaleBoneLen
  842.        
  843.         TargetHitPointDistance = TargetDistance - DistanceToHitPoint
  844.        
  845.         // This is to make the box darker if distance is larger
  846.         Brightness = 255
  847.        
  848.         if(TargetHitPointDistance < 2040.0)
  849.         {
  850.             Brightness = (255 - floatround(TargetHitPointDistance / 12.0))
  851.                                        
  852.         }
  853.         else
  854.         {
  855.             Brightness = 85
  856.         }  
  857.                        
  858.         Send_BeamPointMessage(iPlayer, BoneStart, BoneEnd, floatround(ScaleBoneWid), Brightness)
  859.     }
  860. }
  861.  
  862. Send_BeamPointMessage(iPlayer, Float:Origin1[3], Float:Origin2[3], Width, Brightness)
  863. {
  864.     engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, SVC_TEMPENTITY, {0,0,0}, iPlayer) //message begin
  865.     write_byte(0)
  866.     engfunc(EngFunc_WriteCoord, Origin1[0]) // start position
  867.     engfunc(EngFunc_WriteCoord, Origin1[1])
  868.     engfunc(EngFunc_WriteCoord, Origin1[2])
  869.     engfunc(EngFunc_WriteCoord, Origin2[0]) // end position
  870.     engfunc(EngFunc_WriteCoord, Origin2[1])
  871.     engfunc(EngFunc_WriteCoord, Origin2[2])
  872.     write_short(g_SprESP) // sprite index
  873.     write_byte(3) // starting frame
  874.     write_byte(0) // frame rate in 0.1's
  875.     write_byte(1) // life in 0.1's
  876.     write_byte(Width) // line width in 0.1's
  877.     write_byte(0) // noise amplitude in 0.01's
  878.     write_byte(TargetColor[0])
  879.     write_byte(TargetColor[1])
  880.     write_byte(TargetColor[2])
  881.     write_byte(Brightness) // brightness)
  882.     write_byte(0) // scroll speed in 0.1's
  883.     message_end()
  884. }  
  885.  
  886. Show_FakeCrosshair(iPlayer)
  887. {
  888.     set_dhudmessage(236, 135, 14, -1.0, -1.0, 0, 0.11, 0.11, 0.0, 0.0)
  889.     show_dhudmessage(iPlayer, "+")
  890. }
  891.  
  892. Create_Laser(iPlayer)
  893. {
  894.     static Float:StartOrigin[3], Float:EndOrigin[3]
  895.    
  896.     Get_Position(iPlayer, 40.0, 0.0, 0.0, StartOrigin)
  897.     fm_get_aim_origin(iPlayer, EndOrigin)
  898.    
  899.     message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  900.     write_byte(TE_BEAMPOINTS)
  901.     engfunc(EngFunc_WriteCoord, StartOrigin[0])
  902.     engfunc(EngFunc_WriteCoord, StartOrigin[1])
  903.     engfunc(EngFunc_WriteCoord, StartOrigin[2])
  904.     engfunc(EngFunc_WriteCoord, EndOrigin[0])
  905.     engfunc(EngFunc_WriteCoord, EndOrigin[1])
  906.     engfunc(EngFunc_WriteCoord, EndOrigin[2])
  907.     write_short(g_SprLaser)
  908.     write_byte(0) // framerate
  909.     write_byte(0) // framerate
  910.     write_byte(5) // life
  911.     write_byte(10)  // width
  912.     write_byte(0)   // noise
  913.     write_byte(255)   // r, g, b
  914.     write_byte(255)   // r, g, b
  915.     write_byte(255)   // r, g, b
  916.     write_byte(175) // brightness
  917.     write_byte(0)       // speed
  918.     message_end()
  919. }
  920.  
  921. Set_ProgessBarTime(iPlayer, Time)
  922. {
  923.     message_begin(MSG_ONE_UNRELIABLE, g_MsgBarTime, {0, 0, 0}, iPlayer)
  924.     write_byte(Time)
  925.     write_byte(0)
  926.     message_end()
  927. }
  928.  
  929. Create_EfZoom(iPlayer)
  930. {
  931.     static Float:Origin[3], Float:Angles[3]
  932.    
  933.     pev(iPlayer, pev_origin, Origin)
  934.     pev(iPlayer, pev_angles, Angles)
  935.    
  936.     static Ent; Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
  937.    
  938.     if(!pev_valid(Ent))
  939.         return
  940.        
  941.     set_pev(Ent, pev_classname, ZOOM_CLASSNAME)
  942.     set_pev(Ent, pev_owner, iPlayer)
  943.     set_pev(Ent, pev_movetype, MOVETYPE_FLY)
  944.     set_pev(Ent, pev_solid, SOLID_NOT)
  945.    
  946.     engfunc(EngFunc_SetModel, Ent, ef_model)
  947.     fm_set_rendering(Ent, kRenderNormal, 255, 255, 255, kRenderTransAdd, 255)
  948.    
  949.     set_pev(Ent, pev_origin, Origin)
  950.     set_pev(Ent, pev_angles, Angles)
  951.    
  952.     set_pev(Ent, pev_nextthink, get_gametime() + 0.001)
  953. }
  954.  
  955. public fw_Zoom_Think(Ent)
  956. {
  957.     static Owner; Owner = pev(Ent, pev_owner)
  958.    
  959.     if(!is_alive(Owner))
  960.     {
  961.         set_pev(Ent, pev_flags, FL_KILLME)
  962.         return
  963.     }
  964.    
  965.     static iActiveItem; iActiveItem = get_pdata_cbase(Owner, 373, 5)
  966.    
  967.     if(!IsValidPev(iActiveItem) || !IsCustomItem(iActiveItem))
  968.     {
  969.         set_pev(Ent, pev_flags, FL_KILLME)
  970.         return
  971.     }
  972.    
  973.     if(get_pdata_int(iActiveItem, 30, 4) < 2)
  974.     {
  975.         set_pev(Ent, pev_flags, FL_KILLME)
  976.         return
  977.     }
  978.    
  979.     static Float:Origin[3], Float:Angles[3]
  980.    
  981.     pev(Owner, pev_origin, Origin)
  982.     pev(Owner, pev_angles, Angles)
  983.    
  984.     set_pev(Ent, pev_origin, Origin)
  985.     set_pev(Ent, pev_angles, Angles)
  986.    
  987.     set_pev(Ent, pev_nextthink, get_gametime() + 0.001)
  988. }
  989.  
  990. //**********************************************
  991. //* Safety Functions                       *
  992. //**********************************************
  993. public Register_SafetyFunc()
  994. {
  995.     RegisterHam(Ham_Spawn, "player", "fw_Safety_Spawn_Post", 1)
  996.     RegisterHam(Ham_Killed, "player", "fw_Safety_Killed_Post", 1)
  997. }
  998.  
  999. public Register_SafetyFuncBot(iPlayer)
  1000. {
  1001.     RegisterHamFromEntity(Ham_Spawn, iPlayer, "fw_Safety_Spawn_Post", 1)
  1002.     RegisterHamFromEntity(Ham_Killed, iPlayer, "fw_Safety_Killed_Post", 1)
  1003. }
  1004.  
  1005. public Safety_Connected(iPlayer)
  1006. {
  1007.     Set_BitVar(g_IsConnected, iPlayer)
  1008.     UnSet_BitVar(g_IsAlive, iPlayer)
  1009. }
  1010.  
  1011. public Safety_Disconnected(iPlayer)
  1012. {
  1013.     UnSet_BitVar(g_IsConnected, iPlayer)
  1014.     UnSet_BitVar(g_IsAlive, iPlayer)
  1015. }
  1016.  
  1017. public fw_Safety_Spawn_Post(iPlayer)
  1018. {
  1019.     if(!is_user_alive(iPlayer))
  1020.         return
  1021.        
  1022.     Set_BitVar(g_IsAlive, iPlayer)
  1023. }
  1024.  
  1025. public fw_Safety_Killed_Post(iPlayer)
  1026. {
  1027.     UnSet_BitVar(g_IsAlive, iPlayer)
  1028. }
  1029.  
  1030. public is_connected(iPlayer)
  1031. {
  1032.     if(!(1 <= iPlayer <= 32))
  1033.         return 0
  1034.     if(!Get_BitVar(g_IsConnected, iPlayer))
  1035.         return 0
  1036.  
  1037.     return 1
  1038. }
  1039.  
  1040. public is_alive(iPlayer)
  1041. {
  1042.     if(!is_connected(iPlayer))
  1043.         return 0
  1044.     if(!Get_BitVar(g_IsAlive, iPlayer))
  1045.         return 0
  1046.        
  1047.     return 1
  1048. }
  1049.  
  1050. //**********************************************
  1051. //* Create and check our custom weapon.        *
  1052. //**********************************************
  1053. IsCustomItem(iItem)
  1054. {
  1055.     return (pev(iItem, pev_impulse) == g_iszWeaponKey)
  1056. }
  1057.  
  1058. Weapon_Create(Float: Origin[3] = {0.0, 0.0, 0.0}, Float: Angles[3] = {0.0, 0.0, 0.0})
  1059. {
  1060.     new iWeapon
  1061.  
  1062.     static iszAllocStringCached
  1063.     if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, WEAPON_BASE)))
  1064.     {
  1065.         iWeapon = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached)
  1066.     }
  1067.    
  1068.     if(!IsValidPev(iWeapon))
  1069.         return FM_NULLENT
  1070.    
  1071.     dllfunc(DLLFunc_Spawn, iWeapon)
  1072.     set_pev(iWeapon, pev_origin, Origin)
  1073.  
  1074.     set_pdata_int(iWeapon, 51, WEAPON_MAX_CLIP, 4)
  1075.     set_pdata_int(iWeapon, 55, 0, 4)
  1076.     set_pdata_int(iWeapon, 30, 0, 4)
  1077.     set_pdata_int(iWeapon, 39, 0, 4)
  1078.    
  1079.     set_pev(iWeapon, pev_impulse, g_iszWeaponKey)
  1080.     set_pev(iWeapon, pev_angles, Angles)
  1081.    
  1082.     engfunc(EngFunc_SetModel, iWeapon, w_model)
  1083.  
  1084.     return iWeapon
  1085. }
  1086.  
  1087. Weapon_Give(iPlayer)
  1088. {
  1089.     if(!IsValidPev(iPlayer))
  1090.     {
  1091.         return FM_NULLENT
  1092.     }
  1093.    
  1094.     new iWeapon, Float: vecOrigin[3]
  1095.     pev(iPlayer, pev_origin, vecOrigin)
  1096.    
  1097.     if((iWeapon = Weapon_Create(vecOrigin)) != FM_NULLENT)
  1098.     {
  1099.         Player_DropWeapons(iPlayer, ExecuteHamB(Ham_Item_ItemSlot, iWeapon))
  1100.        
  1101.         set_pev(iWeapon, pev_spawnflags, pev(iWeapon, pev_spawnflags) | SF_NORESPAWN)
  1102.         dllfunc(DLLFunc_Touch, iWeapon, iPlayer)
  1103.        
  1104.         SetAmmoInventory(iPlayer, PrimaryAmmoIndex(iWeapon), WEAPON_DEFAULT_AMMO)
  1105.        
  1106.         return iWeapon
  1107.     }
  1108.    
  1109.     return FM_NULLENT
  1110. }
  1111.  
  1112. Player_DropWeapons(iPlayer, iSlot)
  1113. {
  1114.     new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, 367 + iSlot, 5)
  1115.  
  1116.     while(IsValidPev(iItem))
  1117.     {
  1118.         pev(iItem, pev_classname, szWeaponName, charsmax(szWeaponName))
  1119.         engclient_cmd(iPlayer, "drop", szWeaponName)
  1120.  
  1121.         iItem = get_pdata_cbase(iItem, 42, 4)
  1122.     }
  1123. }
  1124.  
  1125. //**********************************************
  1126. //* Ammo Inventory.                            *
  1127. //**********************************************
  1128. PrimaryAmmoIndex(iItem)
  1129. {
  1130.     return get_pdata_int(iItem, 49, 4)
  1131. }
  1132.  
  1133. GetAmmoInventory(iPlayer, iAmmoIndex)
  1134. {
  1135.     if(iAmmoIndex == -1)
  1136.         return -1
  1137.    
  1138.     return get_pdata_int(iPlayer, 376 + iAmmoIndex, 5)
  1139. }
  1140.  
  1141. SetAmmoInventory(iPlayer, iAmmoIndex, iAmount)
  1142. {
  1143.     if(iAmmoIndex == -1)
  1144.         return 0
  1145.    
  1146.     set_pdata_int(iPlayer, 376 + iAmmoIndex, iAmount, 5)
  1147.    
  1148.     return 1
  1149. }
  1150.  
  1151. //**********************************************
  1152. //* Fire Bullets.                              *
  1153. //**********************************************
  1154. CallOriginalFireBullets(iItem, iPlayer)
  1155. {
  1156.     state FireBullets: Enabled
  1157.     static Float:g_Recoil[3]
  1158.  
  1159.     pev(iPlayer, pev_punchangle, g_Recoil)
  1160.     ExecuteHam(Ham_Weapon_PrimaryAttack, iItem)
  1161.     set_pev(iPlayer, pev_punchangle, g_Recoil)
  1162.    
  1163.     state FireBullets: Disabled
  1164. }
  1165.  
  1166. //**********************************************
  1167. //* Decals.                                    *
  1168. //**********************************************
  1169. new Array: g_hDecals
  1170.  
  1171. public fw_DecalIndex_Post()
  1172. {
  1173.     if(!g_hDecals)
  1174.     {
  1175.         g_hDecals = ArrayCreate(1, 1)
  1176.     }
  1177.    
  1178.     ArrayPushCell(g_hDecals, get_orig_retval())
  1179. }
  1180.  
  1181. UTIL_GunshotDecalTrace(iTrace, bool: bIsGunshot = false)
  1182. {
  1183.     static iHit
  1184.     static iMessage
  1185.     static iDecalIndex
  1186.    
  1187.     static Float:flFraction
  1188.     static Float:vecEndPos[3]
  1189.    
  1190.     iHit = INSTANCE(get_tr2(iTrace, TR_pHit))
  1191.    
  1192.     if(iHit && !IsValidPev(iHit) || (pev(iHit, pev_flags) & FL_KILLME))
  1193.         return
  1194.    
  1195.     if(pev(iHit, pev_solid) != SOLID_BSP && pev(iHit, pev_movetype) != MOVETYPE_PUSHSTEP)
  1196.         return
  1197.    
  1198.     iDecalIndex = ExecuteHamB(Ham_DamageDecal, iHit, 0)
  1199.    
  1200.     if(iDecalIndex < 0 || iDecalIndex >=  ArraySize(g_hDecals))
  1201.         return
  1202.    
  1203.     iDecalIndex = ArrayGetCell(g_hDecals, iDecalIndex)
  1204.    
  1205.     get_tr2(iTrace, TR_flFraction, flFraction)
  1206.     get_tr2(iTrace, TR_vecEndPos, vecEndPos)
  1207.    
  1208.     if(iDecalIndex < 0 || flFraction >= 1.0)
  1209.         return
  1210.    
  1211.     if(bIsGunshot)
  1212.     {
  1213.         iMessage = TE_GUNSHOTDECAL
  1214.     }
  1215.     else
  1216.     {
  1217.         iMessage = TE_DECAL
  1218.        
  1219.         if(iHit != 0)
  1220.         {
  1221.             if(iDecalIndex > 255)
  1222.             {
  1223.                 iMessage = TE_DECALHIGH
  1224.                 iDecalIndex -= 256
  1225.             }
  1226.         }
  1227.         else
  1228.         {
  1229.             iMessage = TE_WORLDDECAL
  1230.            
  1231.             if(iDecalIndex > 255)
  1232.             {
  1233.                 iMessage = TE_WORLDDECALHIGH
  1234.                 iDecalIndex -= 256
  1235.             }
  1236.         }
  1237.     }
  1238.    
  1239.     engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEndPos, 0)
  1240.     write_byte(iMessage)
  1241.     engfunc(EngFunc_WriteCoord, vecEndPos[0])
  1242.     engfunc(EngFunc_WriteCoord, vecEndPos[1])
  1243.     engfunc(EngFunc_WriteCoord, vecEndPos[2])
  1244.  
  1245.     if(bIsGunshot)
  1246.     {
  1247.         write_short(iHit)
  1248.         write_byte(iDecalIndex)
  1249.     }
  1250.     else
  1251.     {
  1252.         write_byte(iDecalIndex)
  1253.        
  1254.         if(iHit)
  1255.         {
  1256.             write_short(iHit)
  1257.         }
  1258.     }
  1259.    
  1260.     message_end()
  1261. }
  1262.  
  1263. //**********************************************
  1264. //* Set Animations.                            *
  1265. //**********************************************
  1266. stock Weapon_SendAnim(iPlayer, iItem, iAnim)
  1267. {
  1268.     static i, iCount, iSpectator, aSpectators[32]
  1269.    
  1270.     set_pev(iPlayer, pev_weaponanim, iAnim)
  1271.  
  1272.     message_begin(MSG_ONE, SVC_WEAPONANIM, .player = iPlayer)
  1273.     write_byte(iAnim)
  1274.     write_byte(pev(iItem, pev_body))
  1275.     message_end()
  1276.    
  1277.     if(IsObserver(iPlayer))
  1278.         return
  1279.    
  1280.     get_players(aSpectators, iCount, "bch")
  1281.  
  1282.     for(i = 0; i < iCount; i++)
  1283.     {
  1284.         iSpectator = aSpectators[i]
  1285.        
  1286.         if(IsObserver(iSpectator) != OBS_IN_EYE || pev(iSpectator, pev_iuser2) != iPlayer)
  1287.             continue
  1288.        
  1289.         set_pev(iSpectator, pev_weaponanim, iAnim)
  1290.  
  1291.         message_begin(MSG_ONE, SVC_WEAPONANIM, .player = iSpectator)
  1292.         write_byte(iAnim)
  1293.         write_byte(pev(iItem, pev_body))
  1294.         message_end()
  1295.     }
  1296. }
  1297.  
  1298. stock Player_SetAnimation(iPlayer, szAnim[])
  1299. {
  1300.     #define ACT_RANGE_ATTACK1   28
  1301.    
  1302.     // Linux extra offsets
  1303.     #define extra_offset_animating   4
  1304.     #define extra_offset_player 5
  1305.    
  1306.     // CBaseAnimating
  1307.     #define m_flFrameRate      36
  1308.     #define m_flGroundSpeed      37
  1309.     #define m_flLastEventCheck   38
  1310.     #define m_fSequenceFinished   39
  1311.     #define m_fSequenceLoops   40
  1312.    
  1313.     // CBaseMonster
  1314.     #define m_Activity      73
  1315.     #define m_IdealActivity      74
  1316.    
  1317.     // CBasePlayer
  1318.     #define m_flLastAttackTime   220
  1319.    
  1320.     new iAnimDesired, Float:flFrameRate, Float:flGroundSpeed, bool:bLoops
  1321.      
  1322.     if((iAnimDesired = lookup_sequence(iPlayer, szAnim, flFrameRate, bLoops, flGroundSpeed)) == -1)
  1323.     {
  1324.         iAnimDesired = 0
  1325.     }
  1326.    
  1327.     static Float:flGametime; flGametime = get_gametime()
  1328.  
  1329.     set_pev(iPlayer, pev_frame, 0.0)
  1330.     set_pev(iPlayer, pev_framerate, 1.0)
  1331.     set_pev(iPlayer, pev_animtime, flGametime)
  1332.     set_pev(iPlayer, pev_sequence, iAnimDesired)
  1333.    
  1334.     set_pdata_int(iPlayer, m_fSequenceLoops, bLoops, extra_offset_animating)
  1335.     set_pdata_int(iPlayer, m_fSequenceFinished, 0, extra_offset_animating)
  1336.    
  1337.     set_pdata_float(iPlayer, m_flFrameRate, flFrameRate, extra_offset_animating)
  1338.     set_pdata_float(iPlayer, m_flGroundSpeed, flGroundSpeed, extra_offset_animating)
  1339.     set_pdata_float(iPlayer, m_flLastEventCheck, flGametime , extra_offset_animating)
  1340.    
  1341.     set_pdata_int(iPlayer, m_Activity, ACT_RANGE_ATTACK1, extra_offset_player)
  1342.     set_pdata_int(iPlayer, m_IdealActivity, ACT_RANGE_ATTACK1, extra_offset_player)  
  1343.     set_pdata_float(iPlayer, m_flLastAttackTime, flGametime , extra_offset_player)
  1344. }
  1345.  
  1346. //**********************************************
  1347. //* Kick back.                                 *
  1348. //**********************************************
  1349. Weapon_KickBack(iItem, iPlayer, Float:upBase, Float:lateralBase, Float:upMod, Float:lateralMod, Float:upMax, Float:lateralMax, directionChange)
  1350. {
  1351.     static iDirection
  1352.     static iShotsFired
  1353.    
  1354.     static Float: Punchangle[3]
  1355.     pev(iPlayer, pev_punchangle, Punchangle)
  1356.    
  1357.     if((iShotsFired = get_pdata_int(iItem, 64, 4)) != 1)
  1358.     {
  1359.         upBase += iShotsFired * upMod
  1360.         lateralBase += iShotsFired * lateralMod
  1361.     }
  1362.    
  1363.     upMax *= -1.0
  1364.     Punchangle[0] -= upBase
  1365.  
  1366.     if(upMax >= Punchangle[0])
  1367.     {
  1368.         Punchangle[0] = upMax
  1369.     }
  1370.    
  1371.     if((iDirection = get_pdata_int(iItem, 60, 4)))
  1372.     {
  1373.         Punchangle[1] += lateralBase
  1374.        
  1375.         if(lateralMax < Punchangle[1])
  1376.         {
  1377.             Punchangle[1] = lateralMax
  1378.         }
  1379.     }
  1380.     else
  1381.     {
  1382.         lateralMax *= -1.0;
  1383.         Punchangle[1] -= lateralBase
  1384.        
  1385.         if(lateralMax > Punchangle[1])
  1386.         {
  1387.             Punchangle[1] = lateralMax
  1388.         }
  1389.     }
  1390.    
  1391.     if(!random_num(0, directionChange))
  1392.     {
  1393.         set_pdata_int(iItem, 60, !iDirection, 4)
  1394.     }
  1395.    
  1396.     set_pev(iPlayer, pev_punchangle, Punchangle)
  1397. }
  1398.  
  1399. //**********************************************
  1400. //* Some useful stocks.                        *
  1401. //**********************************************
  1402. stock Get_Position(iPlayer, Float:forw, Float:right, Float:up, Float:vStart[])
  1403. {
  1404.     new Float:Origin[3], Float:Angles[3], Float:vForward[3], Float:vRight[3], Float:vUp[3]
  1405.    
  1406.     pev(iPlayer, pev_origin, Origin)
  1407.     pev(iPlayer, pev_view_ofs,vUp) //for player
  1408.     xs_vec_add(Origin, vUp, Origin)
  1409.     pev(iPlayer, pev_v_angle, Angles) // if normal entity ,use pev_angles
  1410.    
  1411.     angle_vector(Angles, ANGLEVECTOR_FORWARD, vForward) //or use EngFunc_AngleVectors
  1412.     angle_vector(Angles, ANGLEVECTOR_RIGHT, vRight)
  1413.     angle_vector(Angles, ANGLEVECTOR_UP, vUp)
  1414.    
  1415.     vStart[0] = Origin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up
  1416.     vStart[1] = Origin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up
  1417.     vStart[2] = Origin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up
  1418. }
Last edited by Raheem 5 years ago, edited 1 time in total.
Reason: Fixed
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

Jack, I had errors but managed to fix this:

changed new g_iItemID to new g_iItemId and g_iItemID = ze_register_item("Hunter Killer", 0, 0) to g_iItemId = ze_register_item("Hunter Killer", 0, 0)
Image

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

#4

Post by Night Fury » 5 years ago

czirimbolo wrote: 5 years ago Jack, I had errors but managed to fix this:

changed new g_iItemID to new g_iItemId and g_iItemID = ze_register_item("Hunter Killer", 0, 0) to g_iItemId = ze_register_item("Hunter Killer", 0, 0)
See? It's easy.
You only had to request a tutorial for it. :P
Good job. :smiley:
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:

#5

Post by czirimbolo » 5 years ago

Yeah I see :D Gun works. Thanks and 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 2 guests