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

Help!


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Connor31
New Member
Join Date: Oct 2021
Old 10-24-2021 , 16:49   Help!
Reply With Quote #1

Someone can rewrite the plugin from GunXP mod to Zombie Plague 4.3

Code:
#include <amxmodx>
#include <fakemeta_util>
#include <hamsandwich>
#include <beams>
#include <cstrike>
#include <fun>
#include <gunxpmod>


// Definitions to change GUNXP Weapon INFOS //

/* register_gxm_item("Thunder Force (AK47)", "DES", 2000, 30, GUN_SECTION_RIFLE, 0, CSW_WPN) */

// Thunder Force (AK47) = Name for the Weapon
// Des = Description Of the weapon
// 2000 = How much will the weapon cost in XP
// 30 = Level for the weapon (Needed level)
// GUN_SECTION_RIFLE = In which menu weapon will be Showen. Can change to Following ones:
/* GUN_SECTION_KNIFE = KNIFE MENU */
/* GUN_SECTION_PISTOL = Pistol MENU */
/* GUN_SECTION_GRENADES = Grenads MENU */
/* GUN_SECTION_ITEMS = Items MENU */

// 0 = acces
/* 1 = VIP Acces Needed */
/* 2 = ADMIN Acces Needed */
/* 3 = S.ADMIN Acces Needed */

// CSW_WPN = What weapon it is!
/* Some Examples */

// CSW_AK47, CSW_AWP, CSW_M249, CSW_FAMAS, CSW_M4A1
// All of them you can find in GOOGLE or Check the .inc files

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

new const WEAPON_MODELS[][] =
{
	"models/cso/v_crossbowex21.mdl",
	"models/cso/p_crossbowex21.mdl",
	"models/cso/w_crossbowex21.mdl",
	"sprites/cso/muzzleflash172.spr",
	"sprites/cso/muzzleflash173.spr",
	"models/cso/v_crossbowex21_2s.mdl",
	"sprites/cso/ishot.spr"
}
new const WEAPON_SOUNDS[][] =
{
	"weapons/crossbowex21-1.wav",
	"weapons/crossbowex21-2.wav",
	"weapons/crossbowex21_zoom.wav",
	"weapons/crossbowex21_beep.wav"
}
const WEAPON_SPECIAL_CODE = 60020210603;

/* ~ [ Change Mode's ] ~ */

/* ~  To change the Weapon mod add before the #define. Example: #define NORMAL_MOD~ */
/* ~  If want Weapon for normal mod undefine GUNXP_MOD by putting before it ~ */

//#define NORMAL_MOD
#define GUNXP_MOD

/* ~ [ Change Mode's ] ~ */



/* ~ [ Variable for edited version ] ~ */
new Has_Weapon[33]
/* ~ [ Variable for edited version ] ~ */

/* ~ [ Weapon Animations ] ~ */
#define WEAPON_ANIM_IDLE_TIME 121/30.0
#define WEAPON_ANIM_RELOAD_TIME 111/30.0
#define WEAPON_ANIM_DRAW_TIME 31/30.0
#define WEAPON_ANIM_SHOOT_TIME 21/30.0
#define ANIM_CHANGE_TO_DEF_TIME	31/30.0
#define ANIM_CHANGE_TO_EX_TIME 	21/30.0

/* ~ [ Weapon Animations ] ~ */
#define WEAPON_ANIM_IDLE 0
#define WEAPON_ANIM_SHOOT1_A 1
#define WEAPON_ANIM_SHOOT2_A 2
#define WEAPON_ANIM_RELOAD_A 3
#define WEAPON_ANIM_DRAW_A 4
#define WEAPON_ANIM_IDLE_B 5
#define WEAPON_ANIM_SHOOT1_B 6
#define WEAPON_ANIM_SHOOT2_B 7
#define WEAPON_ANIM_RELOAD_B 8
#define WEAPON_ANIM_DRAW_B 9
#define WEAPON_ANIM_ZOOM_IN 10	
#define WEAPON_ANIM_ZOOM_IDLE 11
#define WEAPON_ANIM_ZOOM_SHOOT 12
#define WEAPON_ANIM_ZOOM_OUT_A 13
#define WEAPON_ANIM_ZOOM_OUT_B 14

#define WEAPONSTATE_MODE	(1<<7)
#define WEAPONSTATE_SKIN	(1<<6)
#define WEAPONSTATE_SCOPE	(1<<5)

const Float: MUZZLE_TIME_SHOOT = 0.03;

//settings
#define WEAPON_MAX_ENERGY 10
#define ZP_WEAPON_ENERGY_NEW 1.0
#define WEAPON_MAX_CLIP 50
#define WEAPON_DEFAULT_AMMO 200
#define WEAPON_RATE 0.15
#define BP_AMMO 900 // Bp ammo for Normal MOD
#define WEAPON_PUNCHANGLE 0.65
#define DMG_BULLET_1_MOD 2
#define DMG_BULLET_2_MOD random_float(300.0,500.0)

/* ~ [ Params ] ~ */
new gl_iszAllocString_ModelView,
	gl_iszAllocString_ModelView_2s,
	gl_iszAllocString_ModelPlayer,
	gl_iMsgID_Weaponlist,
	g_SmokePuff_Id_blue,
	g_SmokePuff_Id_red,
	gl_iszModelIndex_BloodSpray,
	gl_iszModelIndex_BloodDrop,
	g_iszMuzzleKeyShoot,
	HamHook: gl_HamHook_TraceAttack[4],
	g_iszBeamKey2,
	Enable_beep[33],
	Enable_zoom,
	Enable_item[33],
	g_sprite,
	Enable_reload[33];
	
/* ~ [ Macroses ] ~ */

#define IsValidEntity(%0) (pev_valid(%0) == PDATA_SAFE)
#define CustomMuzzleShoot(%0) (pev(%0, pev_impulse) == g_iszMuzzleKeyShoot)
#define Sprite_SetScale(%0,%1) set_pev(%0, pev_scale, %1)
#define MUZZLE_CLASSNAME4 "ent_crossbowmuzle1"
#define PDATA_SAFE 2
#define MUZZLE_INTOLERANCE 100


// Weapon
#define WEAPON_REFERENCE "weapon_ak47"
#define CSW_WPN CSW_AK47
//


#define WEAPON_SPRITE_LINE3	"sprites/laserbeam.spr"
#define BEAM_CLASSNAME2			"szBeamCrossBow21"
#define BEAM_COLOR 			{255.0, 128.0, 0.0}
#define BEAM_SCROLLRATE			20.0
#define BEAM_NOISE			0
#define BEAM_WEIGHT			20.0		
#define BEAM_FRAMECHANGETIME		0.005
#define IsCustomBeam2(%0) (pev(%0, pev_impulse) == g_iszBeamKey2)


new const iWeaponList[] = 			{ 2,  90, -1, -1, 0, 1, CSW_AK47, 0 };
new const WEAPON_WEAPONLIST[] = 	"cso/weapon_crossbowex21";


/* ~ [ Offsets ] ~ */
// Linux extra offsets
#define linux_diff_animating 4
#define linux_diff_weapon 4
#define linux_diff_player 5

// CWeaponBox
#define m_fInSuperBullets 30
#define m_rgpPlayerItems_CWeaponBox 34
#define m_maxFrame 35
#define m_flFrameRate 36
#define m_flGroundSpeed 37
#define m_flLastEventCheck 38
#define m_fSequenceFinished 39
#define m_fSequenceLoops 40

// CBasePlayerItem
#define m_pPlayer 41
#define m_pNext 42
#define m_iId 43

// CBasePlayerWeapon
#define m_flNextPrimaryAttack 46
#define m_flNextSecondaryAttack 47
#define m_flTimeWeaponIdle 48
#define m_iPrimaryAmmoType 49
#define m_iClip 51
#define m_fInReload 54
#define m_flAccuracy 62

// CBaseMonster
#define m_iScope 70
#define m_iSkin 72
#define m_Activity 73
#define m_iWeaponState 74
#define m_LastHitGroup 75
#define m_flNextAttack 83

// CBasePlayer
#define m_rpgPlayerItems 367
#define m_pActiveItem 373
#define m_rgAmmo 376
#define m_szAnimExtention 492

public plugin_init()
{
	register_plugin("CrossbowEx", "1.0", "PeTRoX | t3rke/Batcoh (edited extazY)");
	
	#if defined GUNXP_MOD
		register_gxm_item("Thunder Force (AK47)", "", 2000, 30, GUN_SECTION_RIFLE, 0, CSW_WPN) // Scroll UP to check all meanings
	#endif
	
	#if defined NORMAL_MOD
		register_clcmd("say /tf", "gxm_item_enabled")
	#endif
	
	// Forwards
	register_forward(FM_UpdateClientData, "FM_Hook_UpdateClientData_Post", true);
	register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");
	
	// Hams
	RegisterHam(Ham_Item_Holster, WEAPON_REFERENCE, "CWeapon__Holster_Post", true);
	RegisterHam(Ham_Item_Deploy, WEAPON_REFERENCE, "CWeapon__Deploy_Post", true);
	RegisterHam(Ham_Item_PostFrame, WEAPON_REFERENCE, "CWeapon__PostFrame_Pre", false);
	RegisterHam(Ham_Item_AddToPlayer, WEAPON_REFERENCE, "CWeapon__AddToPlayer_Post", true);
	RegisterHam(Ham_Weapon_Reload, WEAPON_REFERENCE, "CWeapon__Reload_Pre", false);
	RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_REFERENCE, "CWeapon__WeaponIdle_Pre", false);
	RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_REFERENCE, "CWeapon__PrimaryAttack_Pre", false);
	RegisterHam(Ham_Weapon_SecondaryAttack, WEAPON_REFERENCE, "CWeapon__SecondaryAttack_Pre", false);
	RegisterHam(Ham_Think, "env_sprite", "CWeapon__Think_Pre", false);
	RegisterHam(Ham_Think, "beam", "CWeapon__Think_Beam", true);
	
	gl_HamHook_TraceAttack[0] = RegisterHam(Ham_TraceAttack, "func_breakable",	"CEntity__TraceAttack_Pre", false);
	gl_HamHook_TraceAttack[1] = RegisterHam(Ham_TraceAttack, "info_target",		"CEntity__TraceAttack_Pre", false);
	gl_HamHook_TraceAttack[2] = RegisterHam(Ham_TraceAttack, "player",		"CEntity__TraceAttack_Pre", false);
	gl_HamHook_TraceAttack[3] = RegisterHam(Ham_TraceAttack, "hostage_entity",	"CEntity__TraceAttack_Pre", false);
	
	fm_ham_hook(false);
	
	// Messages
	gl_iMsgID_Weaponlist = get_user_msgid("WeaponList");
	
	// Alloc String
	gl_iszAllocString_ModelView = engfunc(EngFunc_AllocString, WEAPON_MODELS[0]);
	gl_iszAllocString_ModelPlayer = engfunc(EngFunc_AllocString, WEAPON_MODELS[1]);	
	gl_iszAllocString_ModelView_2s = engfunc(EngFunc_AllocString, WEAPON_MODELS[5]);	

}

public plugin_precache()
{
	new i;

	g_SmokePuff_Id_blue = engfunc(EngFunc_PrecacheModel, WEAPON_MODELS[3]);
	g_SmokePuff_Id_red = engfunc(EngFunc_PrecacheModel, WEAPON_MODELS[4]);
	
	for(i = 0; i < sizeof WEAPON_MODELS; i++)
		engfunc(EngFunc_PrecacheModel, WEAPON_MODELS[i]);
	
	// Precache sounds
	for(i = 0; i < sizeof WEAPON_SOUNDS; i++)
		engfunc(EngFunc_PrecacheSound, WEAPON_SOUNDS[i]);
	g_sprite = engfunc(EngFunc_PrecacheModel, WEAPON_MODELS[6]);
	g_iszMuzzleKeyShoot = engfunc(EngFunc_AllocString, MUZZLE_CLASSNAME4);
	UTIL_PrecacheSoundsFromModel(WEAPON_MODELS[0]);
	UTIL_PrecacheSpritesFromTxt(WEAPON_WEAPONLIST);
	gl_iszModelIndex_BloodSpray = engfunc(EngFunc_PrecacheModel, "sprites/bloodspray.spr");
	gl_iszModelIndex_BloodDrop = engfunc(EngFunc_PrecacheModel, "sprites/blood.spr");
	register_clcmd(WEAPON_WEAPONLIST, "Command_HookWeapon");

}

public Command_HookWeapon(iPlayer)
{
	engclient_cmd(iPlayer, WEAPON_REFERENCE);
	return PLUGIN_HANDLED;
}
#if AMXX_VERSION_NUM < 183
	public client_disconnect(iPlayer)
#else
	public client_disconnected(iPlayer)
#endif
{
	Enable_reload[iPlayer]=0
	Enable_item[iPlayer]=0
	Has_Weapon[iPlayer]=0
}

public FM_Hook_TraceLine_Post(const Float: vecStart[3], const Float: vecEnd[3], iFlags, iAttacker, iTrace)
{
	if(iFlags & IGNORE_MONSTERS) return FMRES_IGNORED;
	if(!is_user_alive(iAttacker)) return FMRES_IGNORED;

	static Float: vecEndPos[3]; get_tr2(iTrace, TR_vecEndPos, vecEndPos);
	static pHit; pHit = get_tr2(iTrace, TR_pHit);
	if(pHit > 0) if(pev(pHit, pev_solid) != SOLID_BSP) return FMRES_IGNORED;
	if(get_user_team(iAttacker) == 1)
	{
		engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vecEndPos, 0)
		write_byte(TE_EXPLOSION); // TE
		engfunc(EngFunc_WriteCoord, vecEndPos[0]); // Position X
		engfunc(EngFunc_WriteCoord, vecEndPos[1]); // Position Y
		engfunc(EngFunc_WriteCoord, vecEndPos[2]-10.0); // Position Z
		write_short(g_SmokePuff_Id_blue); // Model Index
		write_byte(2); // Scale
		write_byte(30); // Framerate
		write_byte(TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NOPARTICLES); // Flags
		message_end();	
		return FMRES_IGNORED;
	}
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vecEndPos, 0)
	write_byte(TE_EXPLOSION); // TE
	engfunc(EngFunc_WriteCoord, vecEndPos[0]); // Position X
	engfunc(EngFunc_WriteCoord, vecEndPos[1]); // Position Y
	engfunc(EngFunc_WriteCoord, vecEndPos[2]-10.0); // Position Z
	write_short(g_SmokePuff_Id_blue); // Model Index
	write_byte(2); // Scale
	write_byte(30); // Framerate
	write_byte(TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NOPARTICLES); // Flags
	message_end();
	static Float: VecPlayer[3];
	get_weapon_position(iAttacker, VecPlayer, 18.0, 5.0, -5.0)
	static Float: vecVelocity[3];
	vecVelocity[0] = vecEndPos[0] - VecPlayer[0];
	vecVelocity[1] = vecEndPos[1] - VecPlayer[1];
	vecVelocity[2] = vecEndPos[2] - VecPlayer[2];
	xs_vec_normalize(vecVelocity, vecVelocity);
	xs_vec_mul_scalar(vecVelocity, 4096.0, vecVelocity);
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte(TE_USERTRACER);
	engfunc(EngFunc_WriteCoord, VecPlayer[0]);
	engfunc(EngFunc_WriteCoord, VecPlayer[1]);
	engfunc(EngFunc_WriteCoord, VecPlayer[2]);
	engfunc(EngFunc_WriteCoord, vecVelocity[0]);
	engfunc(EngFunc_WriteCoord, vecVelocity[1]);
	engfunc(EngFunc_WriteCoord, vecVelocity[2]);
	write_byte(50); // Life
	write_byte(7); // Color
	write_byte(5); // Lenght
	message_end();

	engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEndPos, 0);
	write_byte(TE_GUNSHOTDECAL);
	engfunc(EngFunc_WriteCoord, vecEndPos[0]);
	engfunc(EngFunc_WriteCoord, vecEndPos[1]);
	engfunc(EngFunc_WriteCoord, vecEndPos[2]);
	write_short(pHit > 0 ? pHit : 0);
	write_byte(random_num(41,45));
	message_end();
	
	new Float:vecPlaneNormal[3]; get_tr2(iTrace, TR_vecPlaneNormal, vecPlaneNormal);

	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecEndPos, 0);
	write_byte(TE_STREAK_SPLASH);
	engfunc(EngFunc_WriteCoord, vecEndPos[0]);
	engfunc(EngFunc_WriteCoord, vecEndPos[1]);
	engfunc(EngFunc_WriteCoord, vecEndPos[2]);
	engfunc(EngFunc_WriteCoord, vecPlaneNormal[0] * random_float(25.0, 30.0));
	engfunc(EngFunc_WriteCoord, vecPlaneNormal[1] * random_float(25.0, 30.0));
	engfunc(EngFunc_WriteCoord, vecPlaneNormal[2] * random_float(25.0, 30.0));
	write_byte(7); // Color
	write_short(random_num(15, 17)); // Count
	write_short(1); // Speed
	write_short(100); // Speed noice
	message_end();
	
	return FMRES_IGNORED;
}

public gxm_item_enabled(iPlayer)
{
	#if defined NORMAL_MOD
		Enable_item[iPlayer] = 1
		Has_Weapon[iPlayer] = 1
		
		if(is_user_alive(iPlayer))
		{
			give_item(iPlayer, "weapon_ak47")
			cs_set_user_bpammo(iPlayer, CSW_WPN, BP_AMMO)
		}
	#endif
	
	#if defined GUNXP_MOD
		Enable_item[iPlayer] = 1
		Has_Weapon[iPlayer] = 1
		cs_set_user_bpammo(iPlayer, CSW_WPN, BP_AMMO)
	#endif
}

public CWeapon__Holster_Post(iItem)
{
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	if(is_user_connected(iPlayer)&&Has_Weapon[iPlayer])
	{
		Enable_item[iPlayer]=0
		Enable_reload[iPlayer]=0
		static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);
		if (bitsWeaponState & WEAPONSTATE_MODE) 
		{
			set_screen_empty(iPlayer);
			bitsWeaponState &= ~WEAPONSTATE_MODE;
			set_pdata_int(iItem, m_iWeaponState, bitsWeaponState, linux_diff_weapon);
		}
		set_pdata_float(iItem, m_flNextPrimaryAttack, 0.0, linux_diff_weapon);
		set_pdata_float(iItem, m_flTimeWeaponIdle, 0.0, linux_diff_weapon);
		set_pdata_float(iPlayer, m_flNextAttack, 0.0, linux_diff_player);
		set_pev(iItem, pev_iuser1, 0);
		set_task(ZP_WEAPON_ENERGY_NEW,"plusa",iItem,_,_,"b");	
	}
}

public CWeapon__Deploy_Post(iItem)
{
	if(!IsValidEntity(iItem)) return;
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	
	if(!Has_Weapon[iPlayer]) return;
	
	if(get_pdata_int(iItem, m_iSkin, linux_diff_weapon) & WEAPONSTATE_SKIN)
	{
		set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ModelView_2s);
	}
	else
	{
		set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ModelView);
	}
	set_pev_string(iPlayer, pev_weaponmodel2, gl_iszAllocString_ModelPlayer);
	set_pdata_string(iPlayer, m_szAnimExtention * 4, "ak47", -1, linux_diff_player * linux_diff_animating);
	
	set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_DRAW_TIME, linux_diff_player);
	set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_DRAW_TIME, linux_diff_weapon);
	static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, 4)
	UTIL_WeaponList(iPlayer,1,true)
	SetExtraAmmo(iPlayer, iShoots);
	static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);
	if (bitsWeaponState & WEAPONSTATE_MODE) 
	{
		bitsWeaponState &= ~WEAPONSTATE_MODE;
		set_pdata_int(iItem, m_iWeaponState, bitsWeaponState, linux_diff_weapon);
	}
	UTIL_SendWeaponAnim(iPlayer, iShoots>9?WEAPON_ANIM_DRAW_B:WEAPON_ANIM_DRAW_A);
	set_pdata_float(iItem, m_flNextSecondaryAttack, WEAPON_ANIM_DRAW_TIME, linux_diff_weapon);
	remove_task(iItem)
	static Float:fTime;
	pev(iItem,pev_fuser1,fTime);
	set_pev(iItem, pev_fuser1, fTime)
	Enable_item[iPlayer]=1
	static bitsWeaponScope; bitsWeaponScope = get_pdata_int(iItem, m_iScope, linux_diff_weapon);
	if (bitsWeaponScope & WEAPONSTATE_SCOPE) 
	{	
		bitsWeaponState &= ~WEAPONSTATE_SCOPE;
		set_pdata_int(iItem, m_iScope, bitsWeaponScope, linux_diff_weapon);
	}	
}

public client_PreThink(iPlayer)
{
	if(Enable_beep[iPlayer])
	{
		emit_sound(iPlayer, CHAN_STATIC, WEAPON_SOUNDS[3], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		Enable_beep[iPlayer]=0
	}
	if(Enable_reload[iPlayer])
	{
		static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player);
		if(Has_Weapon[iPlayer])
		{
			static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);
			if (bitsWeaponState != WEAPONSTATE_MODE)
			{
				static Float:fTimeNewEn
				pev(iItem, pev_fuser1, fTimeNewEn)
				if(get_gametime() >= fTimeNewEn)
				{	

					if(get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon) < WEAPON_MAX_ENERGY)
					{
						static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
						set_pdata_int(iItem, m_fInSuperBullets,iShoots+1, linux_diff_weapon);
						SetExtraAmmo(iPlayer, iShoots+1);
						if(get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon) == WEAPON_MAX_ENERGY)
						{
							Enable_beep[iPlayer]=1;
							//set_pdata_float(iItem, m_flTimeWeaponIdle, 0.0, linux_diff_weapon);
						}
						set_pev(iItem, pev_fuser1, get_gametime()+ZP_WEAPON_ENERGY_NEW);
						
					}			
				}
				//client_print(iPlayer,print_center,"enable_reload %d",random_num(0,100))
			}

		}
		
	}
	
	if(Enable_item[iPlayer])
	{
		static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player);
		if(IsValidEntity(iItem)&&Has_Weapon[iPlayer]&&get_pdata_int(iItem, m_iScope, linux_diff_weapon) & WEAPONSTATE_SCOPE)
		{
			static Float: fTime;
			pev(iItem,pev_fuser2,fTime);	
			static iVictim;iVictim = FM_NULLENT;			
			static Float:vecOrigin[3];
			pev(iPlayer,pev_origin,vecOrigin);
			//client_print(iPlayer,print_chat,"Enable_item %d",random_num(0,100))
			while((iVictim = find_ent_in_sphere(iVictim, vecOrigin, 99999.9)) > 0)
			{
				if(is_user_connected(iVictim))
				{
					if(is_user_alive(iVictim))
					{
						
						if(iVictim == iPlayer)
							continue;
					}

					static Float:vecEnd[3];
					pev(iVictim, pev_origin, vecEnd);
					static b; b = 1;
					
					if(is_user_alive(iVictim))
					{
						if(fm_is_in_viewcone(iPlayer, vecEnd)&&!IsWallBetweenPoints(vecOrigin, vecEnd, iPlayer)) 
						{
							message_begin(MSG_ONE, SVC_TEMPENTITY, _, iPlayer)
							write_byte(TE_PLAYERATTACHMENT)
							write_byte(iVictim)
							write_coord(0)
							write_short(g_sprite)
							write_short(b)
							message_end()
						}
						else
						{
							message_begin(MSG_ONE, SVC_TEMPENTITY, _, iPlayer)
							write_byte(TE_KILLPLAYERATTACHMENTS)
							write_byte(iVictim)
							message_end()
						}
					}
					else
					{
						message_begin(MSG_ONE, SVC_TEMPENTITY, _, iPlayer)
						write_byte(TE_KILLPLAYERATTACHMENTS)
						write_byte(iVictim)
						message_end()
						continue
					}
				}
			}
		}
	}
}

public CWeapon__PostFrame_Pre(iItem)
{
	if(!IsValidEntity(iItem)) return HAM_IGNORED;
	
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	
	if(!Has_Weapon[iPlayer]) return HAM_IGNORED;
	
	if(!is_user_connected(iPlayer)) return HAM_IGNORED;
	static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon);
	static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);

	static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);

	if(get_pdata_int(iItem, m_fInReload, linux_diff_weapon) == 1)
	{
		static iPrimaryAmmoIndex;iPrimaryAmmoIndex = PrimaryAmmoIndex(iItem);
		static iAmmoPrimary;iAmmoPrimary = GetAmmoInventory(iPlayer, iPrimaryAmmoIndex);
		static iAmount;iAmount= min(WEAPON_MAX_CLIP - iClip, iAmmoPrimary);
		set_pdata_int(iItem, m_iClip, iClip + iAmount, linux_diff_weapon);
		set_pdata_int(iItem, m_fInReload, 0, linux_diff_weapon);
		SetAmmoInventory(iPlayer, iPrimaryAmmoIndex, iAmmoPrimary - iAmount);
		Enable_reload[iPlayer]=0
	}
	static Float:fTimeNewEn
	pev(iItem, pev_fuser1, fTimeNewEn)
	if(get_gametime() >= fTimeNewEn)
	{	
		if(get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon) < WEAPON_MAX_ENERGY)
		{
			if (bitsWeaponState != WEAPONSTATE_MODE) 
			{
				static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
				set_pdata_int(iItem, m_fInSuperBullets,iShoots+1, linux_diff_weapon);
				SetExtraAmmo(iPlayer, iShoots+1);
				if(get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon) == WEAPON_MAX_ENERGY&&get_pdata_int(iItem, m_fInReload, linux_diff_weapon) == 0)
				{
					Enable_beep[iPlayer]=1;
					set_pdata_float(iItem, m_flTimeWeaponIdle, 0.0, linux_diff_weapon);
				}
				set_pev(iItem, pev_fuser1, get_gametime()+ZP_WEAPON_ENERGY_NEW);		
			}
		}
	}
	static iButton; iButton = pev(iPlayer, pev_button);
	if(iButton & IN_ATTACK2 && get_pdata_float(iItem, m_flNextPrimaryAttack, linux_diff_weapon) < 0.0 && get_pdata_float(iItem, m_flNextSecondaryAttack, linux_diff_weapon) !=ANIM_CHANGE_TO_DEF_TIME)
	{
		ExecuteHamB(Ham_Weapon_SecondaryAttack, iItem);
		iButton &= ~IN_ATTACK2;
		set_pev(iPlayer, pev_button, iButton);
	}	
	if (bitsWeaponState & WEAPONSTATE_MODE) 
	{
		if(iShoots<1)
		{
			static bitsWeaponSkin; bitsWeaponSkin = get_pdata_int(iItem, m_iSkin, linux_diff_weapon);
			set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ModelView);
			bitsWeaponSkin &= ~WEAPONSTATE_SKIN
			set_pdata_int(iItem, m_iSkin, bitsWeaponSkin, linux_diff_weapon);
			set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_CHANGE_TO_DEF_TIME, linux_diff_weapon);
			set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_CHANGE_TO_DEF_TIME, linux_diff_weapon);
			set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_CHANGE_TO_DEF_TIME, linux_diff_weapon);
			set_pdata_float(iPlayer, m_flNextAttack, ANIM_CHANGE_TO_DEF_TIME, linux_diff_player);
			UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_ZOOM_OUT_A);
			set_screen_empty(iPlayer)
			bitsWeaponState &= ~WEAPONSTATE_MODE;
			set_pdata_int(iItem, m_iWeaponState, bitsWeaponState, linux_diff_weapon);
			emit_sound(iPlayer, CHAN_WEAPON, "weapons/crossbowex21_zoom_out.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		}
		
	}
	static Float:fTimeScope
	pev(iItem, pev_fuser4, fTimeScope)
	if(get_gametime() >= fTimeScope&&bitsWeaponState & WEAPONSTATE_MODE&&Enable_zoom)
	{	
		message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, iPlayer)
		write_short(1<<10)
		write_short(1<<10)
		write_short(0x0004)
		write_byte(100)
		write_byte(255)
		write_byte(0)
		write_byte(15)
		message_end()
		static bitsWeaponScope; bitsWeaponScope = get_pdata_int(iItem, m_iScope, linux_diff_weapon);	
		bitsWeaponScope |= WEAPONSTATE_SCOPE;
		set_pdata_int(iItem, m_iScope, bitsWeaponScope, linux_diff_weapon);
		set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ModelView_2s);
		static bitsWeaponSkin; bitsWeaponSkin = get_pdata_int(iItem, m_iSkin, linux_diff_weapon);
		bitsWeaponSkin |= WEAPONSTATE_SKIN
		set_pdata_int(iItem, m_iSkin, bitsWeaponSkin, linux_diff_weapon);
		emit_sound(iPlayer, CHAN_STATIC, WEAPON_SOUNDS[2], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		Enable_zoom=0
		
	}	

	
	return HAM_IGNORED;
}

public CWeapon__AddToPlayer_Post(iItem, iPlayer)
{
	if(Has_Weapon[iPlayer])
	{
		UTIL_WeaponList(iPlayer, 1, true);
		SetAmmoInventory(iPlayer, PrimaryAmmoIndex(iItem), pev(iItem, pev_iuser2));
		Enable_item[iPlayer]=1
	}
	else if(pev(iItem, pev_impulse) == 0) UTIL_WeaponList(iPlayer, -1, false);
}

public CWeapon__Reload_Pre(iItem)
{
	if(!IsValidEntity(iItem)) return HAM_IGNORED;
	
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	
	if(!Has_Weapon[iPlayer]) return HAM_IGNORED;

	static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon);
	if(iClip >= WEAPON_MAX_CLIP) return HAM_SUPERCEDE;
	static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, linux_diff_weapon);
	if(get_pdata_int(iPlayer, iAmmoType, linux_diff_player) <= 0) return HAM_SUPERCEDE;
	static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
	set_pdata_int(iItem, m_iClip, 0, linux_diff_weapon);
	ExecuteHam(Ham_Weapon_Reload, iItem);
	Enable_reload[iPlayer]=1
	set_pdata_int(iItem, m_iClip, iClip, linux_diff_weapon);
	set_pdata_int(iItem, m_fInReload, 1, linux_diff_weapon);
	UTIL_SendWeaponAnim(iPlayer, iShoots>9?WEAPON_ANIM_RELOAD_B:WEAPON_ANIM_RELOAD_A);
	static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);
	if (bitsWeaponState & WEAPONSTATE_MODE)
	{
		set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ModelView);
		static bitsWeaponSkin; bitsWeaponSkin = get_pdata_int(iItem, m_iSkin, linux_diff_weapon);
		bitsWeaponSkin &= ~ WEAPONSTATE_SKIN
		set_pdata_int(iItem, m_iSkin, bitsWeaponSkin, linux_diff_weapon);
		set_screen_empty(iPlayer)
		bitsWeaponState &= ~WEAPONSTATE_MODE;
		set_pdata_int(iItem, m_iWeaponState, bitsWeaponState, linux_diff_weapon);
	}
	set_pdata_float(iItem, m_flNextPrimaryAttack, WEAPON_ANIM_RELOAD_TIME, linux_diff_weapon);
	set_pdata_float(iItem, m_flNextSecondaryAttack, WEAPON_ANIM_RELOAD_TIME, linux_diff_weapon);
	set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_RELOAD_TIME, linux_diff_weapon);
	set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_RELOAD_TIME, linux_diff_player);
	
	return HAM_SUPERCEDE;
	
}
	
public CWeapon__WeaponIdle_Pre(iItem)
{
	if(!IsValidEntity(iItem)) return HAM_IGNORED;
	
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	
	if(!Has_Weapon[iPlayer]) return HAM_IGNORED;
	if(get_pdata_float(iItem, m_flTimeWeaponIdle, linux_diff_weapon) > 0.0) return HAM_IGNORED;
	set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_IDLE_TIME, linux_diff_weapon);
	static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
	static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);
	if (bitsWeaponState & WEAPONSTATE_MODE) 
	{
		UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_ZOOM_IDLE);
		
	}
	else
	{
		UTIL_SendWeaponAnim(iPlayer, iShoots>9?WEAPON_ANIM_IDLE_B:WEAPON_ANIM_IDLE);
	}
	return HAM_SUPERCEDE;
}
public CWeapon__SecondaryAttack_Pre(iItem)
{
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
	static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);
	if (bitsWeaponState != WEAPONSTATE_MODE&&iShoots>9) 
	{	
		set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_CHANGE_TO_EX_TIME, linux_diff_weapon);
		set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_CHANGE_TO_EX_TIME, linux_diff_weapon);
		set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_CHANGE_TO_EX_TIME, linux_diff_weapon);
		set_pdata_float(iPlayer, m_flNextAttack, ANIM_CHANGE_TO_EX_TIME, linux_diff_player);
		UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_ZOOM_IN);
		bitsWeaponState |= WEAPONSTATE_MODE
		set_pev(iItem, pev_fuser1,get_gametime()+ANIM_CHANGE_TO_EX_TIME+ZP_WEAPON_ENERGY_NEW)
		Enable_zoom=1
		emit_sound(iPlayer, CHAN_WEAPON, "weapons/crossbowex21_zoom_in.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

		
	}
	else if(bitsWeaponState & WEAPONSTATE_MODE) 
	{
		set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_CHANGE_TO_DEF_TIME, linux_diff_weapon);
		set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_CHANGE_TO_DEF_TIME, linux_diff_weapon);
		set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_CHANGE_TO_DEF_TIME, linux_diff_weapon);
		set_pdata_float(iPlayer, m_flNextAttack, ANIM_CHANGE_TO_DEF_TIME, linux_diff_player);
		UTIL_SendWeaponAnim(iPlayer, iShoots>9?WEAPON_ANIM_ZOOM_OUT_B:WEAPON_ANIM_ZOOM_OUT_A);
		bitsWeaponState &= ~WEAPONSTATE_MODE;
		set_screen_empty(iPlayer)
		set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ModelView);
		static bitsWeaponSkin; bitsWeaponSkin = get_pdata_int(iItem, m_iSkin, linux_diff_weapon);
		bitsWeaponSkin &= ~ WEAPONSTATE_SKIN
		set_pdata_int(iItem, m_iSkin, bitsWeaponSkin, linux_diff_weapon);
		set_pev(iItem, pev_fuser1,get_gametime()+ANIM_CHANGE_TO_EX_TIME+ZP_WEAPON_ENERGY_NEW)
		emit_sound(iPlayer, CHAN_WEAPON, "weapons/crossbowex21_zoom_out.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		
	}
	set_pdata_int(iItem, m_iWeaponState, bitsWeaponState, linux_diff_weapon);
	return HAM_IGNORED;
}

public CWeapon__PrimaryAttack_Pre(iItem)
{
	if(!IsValidEntity(iItem)) return HAM_IGNORED
	
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	
	if(!Has_Weapon[iPlayer]) return HAM_IGNORED;
	
	if(get_pdata_float(iItem, m_flNextPrimaryAttack, linux_diff_weapon) > 0.0) return HAM_SUPERCEDE;
	static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
	static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon);
	if(!iClip)
	{
		ExecuteHam(Ham_Weapon_PlayEmptySound, iItem);
		set_pdata_float(iItem, m_flNextPrimaryAttack, 0.2, linux_diff_weapon);

		return HAM_SUPERCEDE;
	}

	

	if (get_pdata_int(iItem, m_iWeaponState, 4) & WEAPONSTATE_MODE) 
	{
		UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_ZOOM_SHOOT);
		Weapon_MuzzleFlash(iPlayer, WEAPON_MODELS[4], 0.15, 255.0, 1, 1);
		set_pdata_int(iItem, m_fInSuperBullets, iShoots-1, linux_diff_weapon);
		SetExtraAmmo(iPlayer, iShoots-1);	
		set_pdata_float(iItem, m_flNextSecondaryAttack, 1.0, linux_diff_weapon);
		set_pdata_float(iItem, m_flNextPrimaryAttack, 1.0, linux_diff_weapon);
		set_pdata_float(iItem, m_flTimeWeaponIdle, 1.0, linux_diff_weapon);
		set_pdata_float(iPlayer, m_flNextAttack, 0.5, linux_diff_player);
		emit_sound(iPlayer, CHAN_WEAPON, WEAPON_SOUNDS[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		create_beam_shoot(iItem,iPlayer);
		new iAnimDesired, Float: flFrameRate, Float: flGroundSpeed, bool: bLoops;
        
		if((iAnimDesired = lookup_sequence(iPlayer, "crouch_shoot_ak47", flFrameRate, bLoops, flGroundSpeed)) == -1)
		{
			iAnimDesired = 0;
		}
		    
		new Float: 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, linux_diff_animating);
		set_pdata_int(iPlayer, m_fSequenceFinished, 0, linux_diff_animating);
		    
		set_pdata_float(iPlayer, m_flFrameRate, flFrameRate, linux_diff_animating);
		set_pdata_float(iPlayer, m_flGroundSpeed, flGroundSpeed, linux_diff_animating);
		set_pdata_float(iPlayer, m_flLastEventCheck, flGameTime , linux_diff_animating);
		    
		set_pdata_int(iPlayer, m_Activity, 28, linux_diff_player);
		set_pdata_int(iPlayer, 74, 28, linux_diff_player);
		set_pdata_float(iPlayer, 220, flGameTime , linux_diff_player);
	}
	else
	{
		static fw_TraceLine; fw_TraceLine = register_forward(FM_TraceLine, "FM_Hook_TraceLine_Post", true);
		fm_ham_hook(true);
		state FireBullets: Enabled;
		ExecuteHam(Ham_Weapon_PrimaryAttack, iItem);
		state FireBullets: Disabled;
		unregister_forward(FM_TraceLine, fw_TraceLine, true);
		fm_ham_hook(false);	
		set_pdata_float(iItem, m_flAccuracy, 0.001, linux_diff_weapon);
		static Float: vecPunchangle[3];
		vecPunchangle[0] = -WEAPON_PUNCHANGLE * 2.0;
		vecPunchangle[1] = random_float(-WEAPON_PUNCHANGLE * 2.0, WEAPON_PUNCHANGLE * 2.0);
		vecPunchangle[2] = 0.0;
		set_pev(iPlayer, pev_punchangle, vecPunchangle);
		Weapon_MuzzleFlash(iPlayer, WEAPON_MODELS[3], 0.1, 255.0, 1, 1);
		UTIL_SendWeaponAnim(iPlayer, iShoots>9?WEAPON_ANIM_SHOOT1_B:WEAPON_ANIM_SHOOT1_A);
		emit_sound(iPlayer, CHAN_WEAPON, WEAPON_SOUNDS[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		set_pdata_float(iItem, m_flNextPrimaryAttack, WEAPON_RATE, linux_diff_weapon);
		set_pdata_float(iItem, m_flNextSecondaryAttack, WEAPON_RATE, linux_diff_weapon);
		set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_RATE+0.68, linux_diff_weapon);
		set_pdata_float(iPlayer, m_flNextAttack, WEAPON_RATE, linux_diff_player);
	}
	return HAM_SUPERCEDE;
}

public create_beam_shoot(iItem,iPlayer)
{
	static Float: vecOrigin[3]; pev(iPlayer, pev_origin, vecOrigin);		
	get_weapon_position(iPlayer, vecOrigin, 18.0, 0.0, -5.0)
	
	static nobody
	new pPlayer = Players_GetRandomIndex(iPlayer, nobody)
	if(Players_GetRandomIndex(iPlayer, nobody)==nobody)
	{
		static Float:vecLook[3];
		fm_get_aim_origin(iPlayer, vecLook)
		Weapon_DrawBeam2(iPlayer, vecLook)
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_EXPLOSION); // TE
		engfunc(EngFunc_WriteCoord, vecLook[0]); // Position X
		engfunc(EngFunc_WriteCoord, vecLook[1]); // Position Y
		engfunc(EngFunc_WriteCoord, vecLook[2]-10.0); // Position Z
		write_short(g_SmokePuff_Id_red); // Model Index
		write_byte(7); // Scale
		write_byte(25); // Framerate
		write_byte(TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NOPARTICLES); // Flags
		message_end();
		static iVictim;iVictim = FM_NULLENT;			
	
		while((iVictim = find_ent_in_sphere(iVictim, vecLook, 100.0)) > 0)
		{
			if(pev(iVictim, pev_takedamage) == DAMAGE_NO) continue;
			static classnameptd[32]; pev(iVictim, pev_classname, classnameptd, 31);
			if (equali(classnameptd, "func_breakable")) 
			{
				ExecuteHamB(Ham_TakeDamage, iVictim, 0, 0, 250.0, DMG_GENERIC);
			}
			if(is_user_connected(iVictim) && is_user_alive(iVictim))
			{
				if(iVictim == iPlayer) continue;
				static Float:OrigVictim[3];
				pev(iVictim, pev_origin, OrigVictim)
				UTIL_BloodDrips(OrigVictim, iVictim, floatround(DMG_BULLET_2_MOD*0.5));
				set_pdata_int(iVictim, m_LastHitGroup, HIT_GENERIC, linux_diff_player);
				ExecuteHamB(Ham_TakeDamage, iVictim, iPlayer, iPlayer, DMG_BULLET_2_MOD*0.5, DMG_GENERIC);
			}
		}
		
	}
	else
	{
		static Float:vec[3];
		pev(pPlayer, pev_origin, vec)
		Weapon_DrawBeam2(iPlayer, vec)
		if(is_user_alive(pPlayer))
		{
			UTIL_BloodDrips(vec, pPlayer, floatround(DMG_BULLET_2_MOD));
			set_pdata_int(pPlayer, m_LastHitGroup, HIT_GENERIC, linux_diff_player);
			ExecuteHamB(Ham_TakeDamage, pPlayer, iPlayer, iPlayer, DMG_BULLET_2_MOD, DMG_GENERIC);
		}
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_EXPLOSION); // TE
		engfunc(EngFunc_WriteCoord, vec[0]); // Position X
		engfunc(EngFunc_WriteCoord, vec[1]); // Position Y
		engfunc(EngFunc_WriteCoord, vec[2]-10.0); // Position Z
		write_short(g_SmokePuff_Id_red); // Model Index
		write_byte(7); // Scale
		write_byte(25); // Framerate
		write_byte(TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NOPARTICLES); // Flags
		message_end();
	}
}
Players_GetRandomIndex(iPlayer,nobody)
{
	new iIndex, szIndex[33],Float:vecOrigin[3];
	
	pev(iPlayer,pev_origin,vecOrigin);
	static Float:vecId[3];
	for(new pId = 1; pId <= get_maxplayers(); pId++)
	{
		
		if(!is_user_connected(pId) || !is_user_alive(pId) || iPlayer == pId) continue;
		
		pev(pId,pev_origin,vecId);
		if(fm_is_in_viewcone(iPlayer, vecId)&&!IsWallBetweenPoints(vecOrigin, vecId, iPlayer)) 
		{
			szIndex[++iIndex] = pId;
		}
		else
		{
			szIndex[32] = nobody
		}
	}
	return szIndex[random_num(1, iIndex)];
}

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

public CEntity__TraceAttack_Pre(iVictim, iAttacker, Float: flDamage)
{
	if(!is_user_connected(iAttacker)) return HAM_IGNORED;
	static iItem; iItem = get_pdata_cbase(iAttacker, m_pActiveItem, linux_diff_player);
	if(!IsValidEntity(iItem) || !Has_Weapon[iAttacker]) return HAM_IGNORED;
	SetHamParamFloat(3, flDamage * DMG_BULLET_1_MOD);
	return HAM_IGNORED;
}
public FM_Hook_UpdateClientData_Post(iPlayer, SendWeapons, CD_Handle)
{
	if(!is_user_alive(iPlayer)) return;
	
	static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player);
	
	if(!IsValidEntity(iItem) || !Has_Weapon[iPlayer]) return;
	
	if(get_user_weapon(iPlayer) == CSW_WPN)
	{
		set_cd(CD_Handle, CD_flNextAttack, get_gametime()+0.001);
	}
}

public plusa(iItem)
{
	if(!IsValidEntity(iItem)) return HAM_IGNORED;
	static Float:fTimeNewEn
	pev(iItem, pev_fuser1, fTimeNewEn)

	if(get_gametime() >= fTimeNewEn)
	{		
		if(get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon) < WEAPON_MAX_ENERGY)
		{
			static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
			set_pdata_int(iItem, m_fInSuperBullets,iShoots+1, linux_diff_weapon)
			set_pev(iItem, pev_fuser1, get_gametime()+ZP_WEAPON_ENERGY_NEW)
		}
		else
		{
			remove_task(iItem)
		}	
	}
	return HAM_IGNORED;
}


public UTIL_BloodDrips(Float: vecOrigin[3], iVictim, iAmount)
{
	if(iAmount > 255) iAmount = 255;
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vecOrigin, 0);
	write_byte(TE_BLOODSPRITE);
	engfunc(EngFunc_WriteCoord, vecOrigin[0]);
	engfunc(EngFunc_WriteCoord, vecOrigin[1]);
	engfunc(EngFunc_WriteCoord, vecOrigin[2]);
	write_short(gl_iszModelIndex_BloodSpray);
	write_short(gl_iszModelIndex_BloodDrop);
	write_byte(ExecuteHamB(Ham_BloodColor, iVictim));
	write_byte(min(max(3, iAmount / 10), 16));
	message_end();
}
	
public CWeapon__Think_Pre(iSprite)
{
	if(!IsValidEntity(iSprite)) return HAM_IGNORED;
	if(CustomMuzzleShoot(iSprite))
	{
		static Float: flFrame;
		if (pev(iSprite, pev_frame, flFrame) && ++flFrame - 1.0 < get_pdata_float(iSprite, m_maxFrame, 4))
		{
			set_pev(iSprite, pev_frame, flFrame);
			set_pev(iSprite, pev_nextthink, get_gametime() + MUZZLE_TIME_SHOOT);
			return HAM_SUPERCEDE;
		}
		set_pev(iSprite, pev_flags, pev(iSprite, pev_flags)|FL_KILLME);
	}	
	return HAM_IGNORED;
}

public CWeapon__Think_Beam(iSprite)
{
	if (!IsValidEntity(iSprite) || !IsCustomBeam2(iSprite))
	{
		return HAM_IGNORED;
	}
	static Float:amt; pev(iSprite, pev_renderamt, amt)
	amt -= 5.0
	set_pev(iSprite, pev_renderamt, amt)
	set_pev(iSprite, pev_nextthink, get_gametime() + BEAM_FRAMECHANGETIME);
	if(amt <= 0.0) 
	{
		set_pev(iSprite, pev_flags, pev(iSprite,pev_flags) | FL_KILLME)
	}
	return HAM_SUPERCEDE;
}
public fm_ham_hook(bool: bEnabled)
{
	if(bEnabled)
	{
		EnableHamForward(gl_HamHook_TraceAttack[0]);
		EnableHamForward(gl_HamHook_TraceAttack[1]);
		EnableHamForward(gl_HamHook_TraceAttack[2]);
		EnableHamForward(gl_HamHook_TraceAttack[3]);
	}
	else 
	{
		DisableHamForward(gl_HamHook_TraceAttack[0]);
		DisableHamForward(gl_HamHook_TraceAttack[1]);
		DisableHamForward(gl_HamHook_TraceAttack[2]);
		DisableHamForward(gl_HamHook_TraceAttack[3]);
	}
}
stock Weapon_DrawBeam2(iPlayer, Float: vecEnd[3])
{
	static iBeamEntity, iszAllocStringCached; 
	if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "beam"))) 
	{ 
		iBeamEntity = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached); 
	} 
	if(!IsValidEntity(iBeamEntity)) return FM_NULLENT;
	set_pev(iBeamEntity, pev_flags, pev(iBeamEntity, pev_flags) | FL_CUSTOMENTITY); 
	set_pev(iBeamEntity, pev_rendercolor, Float: {255.0, 255.0, 255.0}) 
	set_pev(iBeamEntity, pev_renderamt, 255.0) 
	set_pev(iBeamEntity, pev_body, 0) 
	set_pev(iBeamEntity, pev_frame, 0.0) 
	set_pev(iBeamEntity, pev_animtime, 0.0) 
	set_pev(iBeamEntity, pev_scale, BEAM_WEIGHT) 
	     
	engfunc(EngFunc_SetModel, iBeamEntity, WEAPON_SPRITE_LINE3); 
	     
	set_pev(iBeamEntity, pev_skin, 0); 
	set_pev(iBeamEntity, pev_sequence, 0); 
	set_pev(iBeamEntity, pev_rendermode, 0); 	

	static Float:Origp[3];
	get_weapon_position(iPlayer, Origp, 17.0, 0.0, -5.0)

	set_pev(iBeamEntity, pev_rendermode, (pev(iBeamEntity, pev_rendermode) & 0xF0) | BEAM_POINTS & 0x0F) 
	set_pev(iBeamEntity, pev_origin, vecEnd)  
	set_pev(iBeamEntity, pev_angles, Origp) 
	set_pev(iBeamEntity, pev_sequence, (pev(iBeamEntity, pev_sequence) & 0x0FFF) | ((0 & 0xF) << 12)) 
	set_pev(iBeamEntity, pev_skin, (pev(iBeamEntity, pev_skin) & 0x0FFF) | ((0 & 0xF) << 12)) 
	Beam_RelinkBeam(iBeamEntity); 	
	
	set_pev(iBeamEntity, pev_skin, (pev(iBeamEntity, pev_skin) & 0x0FFF) | ((0 & 0xF) << 12)) 
	set_pev(iBeamEntity, pev_sequence, (pev(iBeamEntity, pev_sequence) & 0x0FFF) | ((0 & 0xF) << 12))
	set_pev(iBeamEntity, pev_renderamt, 255.0) 
	set_pev(iBeamEntity, pev_animtime, BEAM_SCROLLRATE) 
	set_pev(iBeamEntity, pev_rendercolor, BEAM_COLOR) 
	set_pev(iBeamEntity, pev_body, BEAM_NOISE) 
	
	set_pev(iBeamEntity, pev_nextthink, get_gametime() + 0.3);
	set_pev(iBeamEntity, pev_classname, BEAM_CLASSNAME2);
	set_pev(iBeamEntity, pev_impulse, g_iszBeamKey2);
	set_pev(iBeamEntity, pev_owner, iPlayer);
	return iBeamEntity;
}
stock Weapon_MuzzleFlash(iPlayer, szMuzzleSprite[], Float: flScale, Float: flBrightness, iAttachment,iMode)
{
	if (global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < MUZZLE_INTOLERANCE)
	{
		return FM_NULLENT;
	}
	static iSprite, iszAllocStringCached;
	if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "env_sprite")))
	{
		iSprite = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
	}
	if(!pev_valid(iSprite)) return FM_NULLENT;
	set_pev(iSprite, pev_model, szMuzzleSprite);
	set_pev(iSprite, pev_owner, iPlayer);
	set_pev(iSprite, pev_aiment, iPlayer);
	set_pev(iSprite, pev_body, iAttachment);
	if(iMode==1)
	{
		set_pev(iSprite, pev_classname, MUZZLE_CLASSNAME4);
		set_pev(iSprite, pev_impulse, g_iszMuzzleKeyShoot);
		set_pev(iSprite, pev_spawnflags, SF_SPRITE_ONCE);

	}	
	Sprite_SetTransparency(iSprite, kRenderTransAdd, flBrightness);
	Sprite_SetScale(iSprite, flScale);
	
	dllfunc(DLLFunc_Spawn, iSprite)

	return iSprite;
}

PrimaryAmmoIndex(iItem)
{
	return get_pdata_int(iItem, m_iPrimaryAmmoType, 4);
}

GetAmmoInventory(iPlayer, iAmmoIndex)
{
	if (iAmmoIndex == -1)
	{
		return -1;
	}

	return get_pdata_int(iPlayer, m_rgAmmo + iAmmoIndex, 5);
}
stock UTIL_PrecacheSpritesFromTxt(const szWeaponList[])
{
	new szTxtDir[64], szSprDir[64]; 
	new szFileData[128], szSprName[48], temp[1];

	format(szTxtDir, charsmax(szTxtDir), "sprites/%s.txt", szWeaponList);
	engfunc(EngFunc_PrecacheGeneric, szTxtDir);

	new iFile = fopen(szTxtDir, "rb");
	while(iFile && !feof(iFile)) 
	{
		fgets(iFile, szFileData, charsmax(szFileData));
		trim(szFileData);

		if(!strlen(szFileData)) 
			continue;

		new pos = containi(szFileData, "640");	
			
		if(pos == -1)
			continue;
			
		format(szFileData, charsmax(szFileData), "%s", szFileData[pos+3]);		
		trim(szFileData);

		strtok(szFileData, szSprName, charsmax(szSprName), temp, charsmax(temp), ' ', 1);
		trim(szSprName);
		
		format(szSprDir, charsmax(szSprDir), "sprites/%s.spr", szSprName);
		engfunc(EngFunc_PrecacheGeneric, szSprDir);
	}

	if(iFile) fclose(iFile);
}
stock set_screen_empty(iPlayer)
{
	message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, iPlayer)
	write_short(1<<10)
	write_short(1<<10)
	write_short(0x0001)
	write_byte(0)
	write_byte(0)
	write_byte(0)
	write_byte(0)
	message_end()
	static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player);
	
	static bitsWeaponScope; bitsWeaponScope = get_pdata_int(iItem, m_iScope, linux_diff_weapon);
	Enable_zoom=0
	if(bitsWeaponScope & WEAPONSTATE_SCOPE)
	{
		bitsWeaponScope &= ~ WEAPONSTATE_SCOPE;
		
		set_pdata_int(iItem, m_iScope, bitsWeaponScope, linux_diff_weapon);
		
	}
}
stock IsWallBetweenPoints(Float: vecStart[3], Float: vecEnd[3], PlayerEnt)
{
	static iTrace;iTrace = create_tr2();
	static Float: vecEndPos[3];
	engfunc(EngFunc_TraceLine, vecStart, vecEnd, IGNORE_MONSTERS, PlayerEnt, iTrace);
	get_tr2(iTrace, TR_vecEndPos, vecEndPos);
	free_tr2(iTrace);
	return floatround(get_distance_f(vecEnd, vecEndPos));
} 
SetAmmoInventory(iPlayer, iAmmoIndex, iAmount)
{
	if (iAmmoIndex == -1)
	{
		return 0;
	}

	set_pdata_int(iPlayer, m_rgAmmo + iAmmoIndex, iAmount, 5);
	return 1;
}
stock SetExtraAmmo(iPlayer, iClip)
{
	message_begin(MSG_ONE, get_user_msgid("AmmoX"), { 0, 0, 0 }, iPlayer);
	write_byte(1);
	write_byte(iClip);
	message_end();
}
stock get_weapon_position(id, Float:fOrigin[], Float:add_forward = 0.0, Float:add_right = 0.0, Float:add_up = 0.0)
{
	static Float:Angles[3],Float:ViewOfs[3], Float:vAngles[3]
	static Float:Forward[3], Float:Right[3], Float:Up[3]
	
	pev(id, pev_v_angle, vAngles)
	pev(id, pev_origin, fOrigin)
	pev(id, pev_view_ofs, ViewOfs)
	xs_vec_add(fOrigin, ViewOfs, fOrigin)
	
	pev(id, pev_angles, Angles)
	
	Angles[0] = vAngles[0]
	
	engfunc(EngFunc_MakeVectors, Angles)
	
	global_get(glb_v_forward, Forward)
	global_get(glb_v_right, Right)
	global_get(glb_v_up, Up)
	
	xs_vec_mul_scalar(Forward, add_forward, Forward)
	xs_vec_mul_scalar(Right, add_right, Right)
	xs_vec_mul_scalar(Up, add_up, Up)
	
	fOrigin[0] = fOrigin[0] + Forward[0] + Right[0] + Up[0]
	fOrigin[1] = fOrigin[1] + Forward[1] + Right[1] + Up[1]
	fOrigin[2] = fOrigin[2] + Forward[2] + Right[2] + Up[2]
}
stock UTIL_SendWeaponAnim(iPlayer, iAnim)
{
	set_pev(iPlayer, pev_weaponanim, iAnim);

	message_begin(MSG_ONE, SVC_WEAPONANIM, _, iPlayer);
	write_byte(iAnim);
	write_byte(0);
	message_end();
}

stock UTIL_WeaponList(iPlayer, iByte, bool: bEnabled)
{
	message_begin(MSG_ONE, gl_iMsgID_Weaponlist, _, iPlayer);
	write_string(bEnabled ? WEAPON_WEAPONLIST : WEAPON_REFERENCE);
	write_byte(iWeaponList[0]);
	write_byte(bEnabled ? WEAPON_DEFAULT_AMMO : iWeaponList[1]);
	write_byte(iByte);
	write_byte(WEAPON_MAX_ENERGY);
	write_byte(iWeaponList[4]);
	write_byte(iWeaponList[5]);
	write_byte(iWeaponList[6]);
	write_byte(iWeaponList[7]);
	message_end();
}
stock Sprite_SetTransparency(iSprite, iRendermode, Float: flAmt, iFx = kRenderFxNone)
{
	set_pev(iSprite, pev_rendermode, iRendermode);
	set_pev(iSprite, pev_renderamt, flAmt);
	set_pev(iSprite, pev_renderfx, iFx);
}
stock UTIL_PrecacheSoundsFromModel(const szModelPath[])
{
	new iFile;
	
	if((iFile = fopen(szModelPath, "rt")))
	{
		new szSoundPath[64];
		
		new iNumSeq, iSeqIndex;
		new iEvent, iNumEvents, iEventIndex;
		
		fseek(iFile, 164, SEEK_SET);
		fread(iFile, iNumSeq, BLOCK_INT);
		fread(iFile, iSeqIndex, BLOCK_INT);
		
		for(new k, i = 0; i < iNumSeq; i++)
		{
			fseek(iFile, iSeqIndex + 48 + 176 * i, SEEK_SET);
			fread(iFile, iNumEvents, BLOCK_INT);
			fread(iFile, iEventIndex, BLOCK_INT);
			fseek(iFile, iEventIndex + 176 * i, SEEK_SET);
			
			for(k = 0; k < iNumEvents; k++)
			{
				fseek(iFile, iEventIndex + 4 + 76 * k, SEEK_SET);
				fread(iFile, iEvent, BLOCK_INT);
				fseek(iFile, 4, SEEK_CUR);
				
				if(iEvent != 5004)
					continue;
				
				fread_blocks(iFile, szSoundPath, 64, BLOCK_CHAR);
				
				if(strlen(szSoundPath))
				{
					strtolower(szSoundPath);
					engfunc(EngFunc_PrecacheSound, szSoundPath);
				}
			}
		}
	}
	
	fclose(iFile);
}
Connor31 is offline
PeTRoX
New Member
Join Date: Feb 2022
Old 02-02-2022 , 19:14   Re: Help!
Reply With Quote #2

Quote:
Originally Posted by Connor31 View Post
Someone can rewrite the plugin from GunXP mod to Zombie Plague 4.3

Code:
#include <amxmodx>
#include <fakemeta_util>
#include <hamsandwich>
#include <beams>
#include <cstrike>
#include <fun>
#include <gunxpmod>


// Definitions to change GUNXP Weapon INFOS //

/* register_gxm_item("Thunder Force (AK47)", "DES", 2000, 30, GUN_SECTION_RIFLE, 0, CSW_WPN) */

// Thunder Force (AK47) = Name for the Weapon
// Des = Description Of the weapon
// 2000 = How much will the weapon cost in XP
// 30 = Level for the weapon (Needed level)
// GUN_SECTION_RIFLE = In which menu weapon will be Showen. Can change to Following ones:
/* GUN_SECTION_KNIFE = KNIFE MENU */
/* GUN_SECTION_PISTOL = Pistol MENU */
/* GUN_SECTION_GRENADES = Grenads MENU */
/* GUN_SECTION_ITEMS = Items MENU */

// 0 = acces
/* 1 = VIP Acces Needed */
/* 2 = ADMIN Acces Needed */
/* 3 = S.ADMIN Acces Needed */

// CSW_WPN = What weapon it is!
/* Some Examples */

// CSW_AK47, CSW_AWP, CSW_M249, CSW_FAMAS, CSW_M4A1
// All of them you can find in GOOGLE or Check the .inc files

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

new const WEAPON_MODELS[][] =
{
	"models/cso/v_crossbowex21.mdl",
	"models/cso/p_crossbowex21.mdl",
	"models/cso/w_crossbowex21.mdl",
	"sprites/cso/muzzleflash172.spr",
	"sprites/cso/muzzleflash173.spr",
	"models/cso/v_crossbowex21_2s.mdl",
	"sprites/cso/ishot.spr"
}
new const WEAPON_SOUNDS[][] =
{
	"weapons/crossbowex21-1.wav",
	"weapons/crossbowex21-2.wav",
	"weapons/crossbowex21_zoom.wav",
	"weapons/crossbowex21_beep.wav"
}
const WEAPON_SPECIAL_CODE = 60020210603;

/* ~ [ Change Mode's ] ~ */

/* ~  To change the Weapon mod add before the #define. Example: #define NORMAL_MOD~ */
/* ~  If want Weapon for normal mod undefine GUNXP_MOD by putting before it ~ */

//#define NORMAL_MOD
#define GUNXP_MOD

/* ~ [ Change Mode's ] ~ */



/* ~ [ Variable for edited version ] ~ */
new Has_Weapon[33]
/* ~ [ Variable for edited version ] ~ */

/* ~ [ Weapon Animations ] ~ */
#define WEAPON_ANIM_IDLE_TIME 121/30.0
#define WEAPON_ANIM_RELOAD_TIME 111/30.0
#define WEAPON_ANIM_DRAW_TIME 31/30.0
#define WEAPON_ANIM_SHOOT_TIME 21/30.0
#define ANIM_CHANGE_TO_DEF_TIME	31/30.0
#define ANIM_CHANGE_TO_EX_TIME 	21/30.0

/* ~ [ Weapon Animations ] ~ */
#define WEAPON_ANIM_IDLE 0
#define WEAPON_ANIM_SHOOT1_A 1
#define WEAPON_ANIM_SHOOT2_A 2
#define WEAPON_ANIM_RELOAD_A 3
#define WEAPON_ANIM_DRAW_A 4
#define WEAPON_ANIM_IDLE_B 5
#define WEAPON_ANIM_SHOOT1_B 6
#define WEAPON_ANIM_SHOOT2_B 7
#define WEAPON_ANIM_RELOAD_B 8
#define WEAPON_ANIM_DRAW_B 9
#define WEAPON_ANIM_ZOOM_IN 10	
#define WEAPON_ANIM_ZOOM_IDLE 11
#define WEAPON_ANIM_ZOOM_SHOOT 12
#define WEAPON_ANIM_ZOOM_OUT_A 13
#define WEAPON_ANIM_ZOOM_OUT_B 14

#define WEAPONSTATE_MODE	(1<<7)
#define WEAPONSTATE_SKIN	(1<<6)
#define WEAPONSTATE_SCOPE	(1<<5)

const Float: MUZZLE_TIME_SHOOT = 0.03;

//settings
#define WEAPON_MAX_ENERGY 10
#define ZP_WEAPON_ENERGY_NEW 1.0
#define WEAPON_MAX_CLIP 50
#define WEAPON_DEFAULT_AMMO 200
#define WEAPON_RATE 0.15
#define BP_AMMO 900 // Bp ammo for Normal MOD
#define WEAPON_PUNCHANGLE 0.65
#define DMG_BULLET_1_MOD 2
#define DMG_BULLET_2_MOD random_float(300.0,500.0)

/* ~ [ Params ] ~ */
new gl_iszAllocString_ModelView,
	gl_iszAllocString_ModelView_2s,
	gl_iszAllocString_ModelPlayer,
	gl_iMsgID_Weaponlist,
	g_SmokePuff_Id_blue,
	g_SmokePuff_Id_red,
	gl_iszModelIndex_BloodSpray,
	gl_iszModelIndex_BloodDrop,
	g_iszMuzzleKeyShoot,
	HamHook: gl_HamHook_TraceAttack[4],
	g_iszBeamKey2,
	Enable_beep[33],
	Enable_zoom,
	Enable_item[33],
	g_sprite,
	Enable_reload[33];
	
/* ~ [ Macroses ] ~ */

#define IsValidEntity(%0) (pev_valid(%0) == PDATA_SAFE)
#define CustomMuzzleShoot(%0) (pev(%0, pev_impulse) == g_iszMuzzleKeyShoot)
#define Sprite_SetScale(%0,%1) set_pev(%0, pev_scale, %1)
#define MUZZLE_CLASSNAME4 "ent_crossbowmuzle1"
#define PDATA_SAFE 2
#define MUZZLE_INTOLERANCE 100


// Weapon
#define WEAPON_REFERENCE "weapon_ak47"
#define CSW_WPN CSW_AK47
//


#define WEAPON_SPRITE_LINE3	"sprites/laserbeam.spr"
#define BEAM_CLASSNAME2			"szBeamCrossBow21"
#define BEAM_COLOR 			{255.0, 128.0, 0.0}
#define BEAM_SCROLLRATE			20.0
#define BEAM_NOISE			0
#define BEAM_WEIGHT			20.0		
#define BEAM_FRAMECHANGETIME		0.005
#define IsCustomBeam2(%0) (pev(%0, pev_impulse) == g_iszBeamKey2)


new const iWeaponList[] = 			{ 2,  90, -1, -1, 0, 1, CSW_AK47, 0 };
new const WEAPON_WEAPONLIST[] = 	"cso/weapon_crossbowex21";


/* ~ [ Offsets ] ~ */
// Linux extra offsets
#define linux_diff_animating 4
#define linux_diff_weapon 4
#define linux_diff_player 5

// CWeaponBox
#define m_fInSuperBullets 30
#define m_rgpPlayerItems_CWeaponBox 34
#define m_maxFrame 35
#define m_flFrameRate 36
#define m_flGroundSpeed 37
#define m_flLastEventCheck 38
#define m_fSequenceFinished 39
#define m_fSequenceLoops 40

// CBasePlayerItem
#define m_pPlayer 41
#define m_pNext 42
#define m_iId 43

// CBasePlayerWeapon
#define m_flNextPrimaryAttack 46
#define m_flNextSecondaryAttack 47
#define m_flTimeWeaponIdle 48
#define m_iPrimaryAmmoType 49
#define m_iClip 51
#define m_fInReload 54
#define m_flAccuracy 62

// CBaseMonster
#define m_iScope 70
#define m_iSkin 72
#define m_Activity 73
#define m_iWeaponState 74
#define m_LastHitGroup 75
#define m_flNextAttack 83

// CBasePlayer
#define m_rpgPlayerItems 367
#define m_pActiveItem 373
#define m_rgAmmo 376
#define m_szAnimExtention 492

public plugin_init()
{
	register_plugin("CrossbowEx", "1.0", "PeTRoX | t3rke/Batcoh (edited extazY)");
	
	#if defined GUNXP_MOD
		register_gxm_item("Thunder Force (AK47)", "", 2000, 30, GUN_SECTION_RIFLE, 0, CSW_WPN) // Scroll UP to check all meanings
	#endif
	
	#if defined NORMAL_MOD
		register_clcmd("say /tf", "gxm_item_enabled")
	#endif
	
	// Forwards
	register_forward(FM_UpdateClientData, "FM_Hook_UpdateClientData_Post", true);
	register_forward(FM_PlaybackEvent, "fw_PlaybackEvent");
	
	// Hams
	RegisterHam(Ham_Item_Holster, WEAPON_REFERENCE, "CWeapon__Holster_Post", true);
	RegisterHam(Ham_Item_Deploy, WEAPON_REFERENCE, "CWeapon__Deploy_Post", true);
	RegisterHam(Ham_Item_PostFrame, WEAPON_REFERENCE, "CWeapon__PostFrame_Pre", false);
	RegisterHam(Ham_Item_AddToPlayer, WEAPON_REFERENCE, "CWeapon__AddToPlayer_Post", true);
	RegisterHam(Ham_Weapon_Reload, WEAPON_REFERENCE, "CWeapon__Reload_Pre", false);
	RegisterHam(Ham_Weapon_WeaponIdle, WEAPON_REFERENCE, "CWeapon__WeaponIdle_Pre", false);
	RegisterHam(Ham_Weapon_PrimaryAttack, WEAPON_REFERENCE, "CWeapon__PrimaryAttack_Pre", false);
	RegisterHam(Ham_Weapon_SecondaryAttack, WEAPON_REFERENCE, "CWeapon__SecondaryAttack_Pre", false);
	RegisterHam(Ham_Think, "env_sprite", "CWeapon__Think_Pre", false);
	RegisterHam(Ham_Think, "beam", "CWeapon__Think_Beam", true);
	
	gl_HamHook_TraceAttack[0] = RegisterHam(Ham_TraceAttack, "func_breakable",	"CEntity__TraceAttack_Pre", false);
	gl_HamHook_TraceAttack[1] = RegisterHam(Ham_TraceAttack, "info_target",		"CEntity__TraceAttack_Pre", false);
	gl_HamHook_TraceAttack[2] = RegisterHam(Ham_TraceAttack, "player",		"CEntity__TraceAttack_Pre", false);
	gl_HamHook_TraceAttack[3] = RegisterHam(Ham_TraceAttack, "hostage_entity",	"CEntity__TraceAttack_Pre", false);
	
	fm_ham_hook(false);
	
	// Messages
	gl_iMsgID_Weaponlist = get_user_msgid("WeaponList");
	
	// Alloc String
	gl_iszAllocString_ModelView = engfunc(EngFunc_AllocString, WEAPON_MODELS[0]);
	gl_iszAllocString_ModelPlayer = engfunc(EngFunc_AllocString, WEAPON_MODELS[1]);	
	gl_iszAllocString_ModelView_2s = engfunc(EngFunc_AllocString, WEAPON_MODELS[5]);	

}

public plugin_precache()
{
	new i;

	g_SmokePuff_Id_blue = engfunc(EngFunc_PrecacheModel, WEAPON_MODELS[3]);
	g_SmokePuff_Id_red = engfunc(EngFunc_PrecacheModel, WEAPON_MODELS[4]);
	
	for(i = 0; i < sizeof WEAPON_MODELS; i++)
		engfunc(EngFunc_PrecacheModel, WEAPON_MODELS[i]);
	
	// Precache sounds
	for(i = 0; i < sizeof WEAPON_SOUNDS; i++)
		engfunc(EngFunc_PrecacheSound, WEAPON_SOUNDS[i]);
	g_sprite = engfunc(EngFunc_PrecacheModel, WEAPON_MODELS[6]);
	g_iszMuzzleKeyShoot = engfunc(EngFunc_AllocString, MUZZLE_CLASSNAME4);
	UTIL_PrecacheSoundsFromModel(WEAPON_MODELS[0]);
	UTIL_PrecacheSpritesFromTxt(WEAPON_WEAPONLIST);
	gl_iszModelIndex_BloodSpray = engfunc(EngFunc_PrecacheModel, "sprites/bloodspray.spr");
	gl_iszModelIndex_BloodDrop = engfunc(EngFunc_PrecacheModel, "sprites/blood.spr");
	register_clcmd(WEAPON_WEAPONLIST, "Command_HookWeapon");

}

public Command_HookWeapon(iPlayer)
{
	engclient_cmd(iPlayer, WEAPON_REFERENCE);
	return PLUGIN_HANDLED;
}
#if AMXX_VERSION_NUM < 183
	public client_disconnect(iPlayer)
#else
	public client_disconnected(iPlayer)
#endif
{
	Enable_reload[iPlayer]=0
	Enable_item[iPlayer]=0
	Has_Weapon[iPlayer]=0
}

public FM_Hook_TraceLine_Post(const Float: vecStart[3], const Float: vecEnd[3], iFlags, iAttacker, iTrace)
{
	if(iFlags & IGNORE_MONSTERS) return FMRES_IGNORED;
	if(!is_user_alive(iAttacker)) return FMRES_IGNORED;

	static Float: vecEndPos[3]; get_tr2(iTrace, TR_vecEndPos, vecEndPos);
	static pHit; pHit = get_tr2(iTrace, TR_pHit);
	if(pHit > 0) if(pev(pHit, pev_solid) != SOLID_BSP) return FMRES_IGNORED;
	if(get_user_team(iAttacker) == 1)
	{
		engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vecEndPos, 0)
		write_byte(TE_EXPLOSION); // TE
		engfunc(EngFunc_WriteCoord, vecEndPos[0]); // Position X
		engfunc(EngFunc_WriteCoord, vecEndPos[1]); // Position Y
		engfunc(EngFunc_WriteCoord, vecEndPos[2]-10.0); // Position Z
		write_short(g_SmokePuff_Id_blue); // Model Index
		write_byte(2); // Scale
		write_byte(30); // Framerate
		write_byte(TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NOPARTICLES); // Flags
		message_end();	
		return FMRES_IGNORED;
	}
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vecEndPos, 0)
	write_byte(TE_EXPLOSION); // TE
	engfunc(EngFunc_WriteCoord, vecEndPos[0]); // Position X
	engfunc(EngFunc_WriteCoord, vecEndPos[1]); // Position Y
	engfunc(EngFunc_WriteCoord, vecEndPos[2]-10.0); // Position Z
	write_short(g_SmokePuff_Id_blue); // Model Index
	write_byte(2); // Scale
	write_byte(30); // Framerate
	write_byte(TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NOPARTICLES); // Flags
	message_end();
	static Float: VecPlayer[3];
	get_weapon_position(iAttacker, VecPlayer, 18.0, 5.0, -5.0)
	static Float: vecVelocity[3];
	vecVelocity[0] = vecEndPos[0] - VecPlayer[0];
	vecVelocity[1] = vecEndPos[1] - VecPlayer[1];
	vecVelocity[2] = vecEndPos[2] - VecPlayer[2];
	xs_vec_normalize(vecVelocity, vecVelocity);
	xs_vec_mul_scalar(vecVelocity, 4096.0, vecVelocity);
	message_begin( MSG_BROADCAST, SVC_TEMPENTITY );
	write_byte(TE_USERTRACER);
	engfunc(EngFunc_WriteCoord, VecPlayer[0]);
	engfunc(EngFunc_WriteCoord, VecPlayer[1]);
	engfunc(EngFunc_WriteCoord, VecPlayer[2]);
	engfunc(EngFunc_WriteCoord, vecVelocity[0]);
	engfunc(EngFunc_WriteCoord, vecVelocity[1]);
	engfunc(EngFunc_WriteCoord, vecVelocity[2]);
	write_byte(50); // Life
	write_byte(7); // Color
	write_byte(5); // Lenght
	message_end();

	engfunc(EngFunc_MessageBegin, MSG_PAS, SVC_TEMPENTITY, vecEndPos, 0);
	write_byte(TE_GUNSHOTDECAL);
	engfunc(EngFunc_WriteCoord, vecEndPos[0]);
	engfunc(EngFunc_WriteCoord, vecEndPos[1]);
	engfunc(EngFunc_WriteCoord, vecEndPos[2]);
	write_short(pHit > 0 ? pHit : 0);
	write_byte(random_num(41,45));
	message_end();
	
	new Float:vecPlaneNormal[3]; get_tr2(iTrace, TR_vecPlaneNormal, vecPlaneNormal);

	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, vecEndPos, 0);
	write_byte(TE_STREAK_SPLASH);
	engfunc(EngFunc_WriteCoord, vecEndPos[0]);
	engfunc(EngFunc_WriteCoord, vecEndPos[1]);
	engfunc(EngFunc_WriteCoord, vecEndPos[2]);
	engfunc(EngFunc_WriteCoord, vecPlaneNormal[0] * random_float(25.0, 30.0));
	engfunc(EngFunc_WriteCoord, vecPlaneNormal[1] * random_float(25.0, 30.0));
	engfunc(EngFunc_WriteCoord, vecPlaneNormal[2] * random_float(25.0, 30.0));
	write_byte(7); // Color
	write_short(random_num(15, 17)); // Count
	write_short(1); // Speed
	write_short(100); // Speed noice
	message_end();
	
	return FMRES_IGNORED;
}

public gxm_item_enabled(iPlayer)
{
	#if defined NORMAL_MOD
		Enable_item[iPlayer] = 1
		Has_Weapon[iPlayer] = 1
		
		if(is_user_alive(iPlayer))
		{
			give_item(iPlayer, "weapon_ak47")
			cs_set_user_bpammo(iPlayer, CSW_WPN, BP_AMMO)
		}
	#endif
	
	#if defined GUNXP_MOD
		Enable_item[iPlayer] = 1
		Has_Weapon[iPlayer] = 1
		cs_set_user_bpammo(iPlayer, CSW_WPN, BP_AMMO)
	#endif
}

public CWeapon__Holster_Post(iItem)
{
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	if(is_user_connected(iPlayer)&&Has_Weapon[iPlayer])
	{
		Enable_item[iPlayer]=0
		Enable_reload[iPlayer]=0
		static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);
		if (bitsWeaponState & WEAPONSTATE_MODE) 
		{
			set_screen_empty(iPlayer);
			bitsWeaponState &= ~WEAPONSTATE_MODE;
			set_pdata_int(iItem, m_iWeaponState, bitsWeaponState, linux_diff_weapon);
		}
		set_pdata_float(iItem, m_flNextPrimaryAttack, 0.0, linux_diff_weapon);
		set_pdata_float(iItem, m_flTimeWeaponIdle, 0.0, linux_diff_weapon);
		set_pdata_float(iPlayer, m_flNextAttack, 0.0, linux_diff_player);
		set_pev(iItem, pev_iuser1, 0);
		set_task(ZP_WEAPON_ENERGY_NEW,"plusa",iItem,_,_,"b");	
	}
}

public CWeapon__Deploy_Post(iItem)
{
	if(!IsValidEntity(iItem)) return;
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	
	if(!Has_Weapon[iPlayer]) return;
	
	if(get_pdata_int(iItem, m_iSkin, linux_diff_weapon) & WEAPONSTATE_SKIN)
	{
		set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ModelView_2s);
	}
	else
	{
		set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ModelView);
	}
	set_pev_string(iPlayer, pev_weaponmodel2, gl_iszAllocString_ModelPlayer);
	set_pdata_string(iPlayer, m_szAnimExtention * 4, "ak47", -1, linux_diff_player * linux_diff_animating);
	
	set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_DRAW_TIME, linux_diff_player);
	set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_DRAW_TIME, linux_diff_weapon);
	static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, 4)
	UTIL_WeaponList(iPlayer,1,true)
	SetExtraAmmo(iPlayer, iShoots);
	static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);
	if (bitsWeaponState & WEAPONSTATE_MODE) 
	{
		bitsWeaponState &= ~WEAPONSTATE_MODE;
		set_pdata_int(iItem, m_iWeaponState, bitsWeaponState, linux_diff_weapon);
	}
	UTIL_SendWeaponAnim(iPlayer, iShoots>9?WEAPON_ANIM_DRAW_B:WEAPON_ANIM_DRAW_A);
	set_pdata_float(iItem, m_flNextSecondaryAttack, WEAPON_ANIM_DRAW_TIME, linux_diff_weapon);
	remove_task(iItem)
	static Float:fTime;
	pev(iItem,pev_fuser1,fTime);
	set_pev(iItem, pev_fuser1, fTime)
	Enable_item[iPlayer]=1
	static bitsWeaponScope; bitsWeaponScope = get_pdata_int(iItem, m_iScope, linux_diff_weapon);
	if (bitsWeaponScope & WEAPONSTATE_SCOPE) 
	{	
		bitsWeaponState &= ~WEAPONSTATE_SCOPE;
		set_pdata_int(iItem, m_iScope, bitsWeaponScope, linux_diff_weapon);
	}	
}

public client_PreThink(iPlayer)
{
	if(Enable_beep[iPlayer])
	{
		emit_sound(iPlayer, CHAN_STATIC, WEAPON_SOUNDS[3], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		Enable_beep[iPlayer]=0
	}
	if(Enable_reload[iPlayer])
	{
		static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player);
		if(Has_Weapon[iPlayer])
		{
			static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);
			if (bitsWeaponState != WEAPONSTATE_MODE)
			{
				static Float:fTimeNewEn
				pev(iItem, pev_fuser1, fTimeNewEn)
				if(get_gametime() >= fTimeNewEn)
				{	

					if(get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon) < WEAPON_MAX_ENERGY)
					{
						static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
						set_pdata_int(iItem, m_fInSuperBullets,iShoots+1, linux_diff_weapon);
						SetExtraAmmo(iPlayer, iShoots+1);
						if(get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon) == WEAPON_MAX_ENERGY)
						{
							Enable_beep[iPlayer]=1;
							//set_pdata_float(iItem, m_flTimeWeaponIdle, 0.0, linux_diff_weapon);
						}
						set_pev(iItem, pev_fuser1, get_gametime()+ZP_WEAPON_ENERGY_NEW);
						
					}			
				}
				//client_print(iPlayer,print_center,"enable_reload %d",random_num(0,100))
			}

		}
		
	}
	
	if(Enable_item[iPlayer])
	{
		static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player);
		if(IsValidEntity(iItem)&&Has_Weapon[iPlayer]&&get_pdata_int(iItem, m_iScope, linux_diff_weapon) & WEAPONSTATE_SCOPE)
		{
			static Float: fTime;
			pev(iItem,pev_fuser2,fTime);	
			static iVictim;iVictim = FM_NULLENT;			
			static Float:vecOrigin[3];
			pev(iPlayer,pev_origin,vecOrigin);
			//client_print(iPlayer,print_chat,"Enable_item %d",random_num(0,100))
			while((iVictim = find_ent_in_sphere(iVictim, vecOrigin, 99999.9)) > 0)
			{
				if(is_user_connected(iVictim))
				{
					if(is_user_alive(iVictim))
					{
						
						if(iVictim == iPlayer)
							continue;
					}

					static Float:vecEnd[3];
					pev(iVictim, pev_origin, vecEnd);
					static b; b = 1;
					
					if(is_user_alive(iVictim))
					{
						if(fm_is_in_viewcone(iPlayer, vecEnd)&&!IsWallBetweenPoints(vecOrigin, vecEnd, iPlayer)) 
						{
							message_begin(MSG_ONE, SVC_TEMPENTITY, _, iPlayer)
							write_byte(TE_PLAYERATTACHMENT)
							write_byte(iVictim)
							write_coord(0)
							write_short(g_sprite)
							write_short(b)
							message_end()
						}
						else
						{
							message_begin(MSG_ONE, SVC_TEMPENTITY, _, iPlayer)
							write_byte(TE_KILLPLAYERATTACHMENTS)
							write_byte(iVictim)
							message_end()
						}
					}
					else
					{
						message_begin(MSG_ONE, SVC_TEMPENTITY, _, iPlayer)
						write_byte(TE_KILLPLAYERATTACHMENTS)
						write_byte(iVictim)
						message_end()
						continue
					}
				}
			}
		}
	}
}

public CWeapon__PostFrame_Pre(iItem)
{
	if(!IsValidEntity(iItem)) return HAM_IGNORED;
	
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	
	if(!Has_Weapon[iPlayer]) return HAM_IGNORED;
	
	if(!is_user_connected(iPlayer)) return HAM_IGNORED;
	static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon);
	static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);

	static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);

	if(get_pdata_int(iItem, m_fInReload, linux_diff_weapon) == 1)
	{
		static iPrimaryAmmoIndex;iPrimaryAmmoIndex = PrimaryAmmoIndex(iItem);
		static iAmmoPrimary;iAmmoPrimary = GetAmmoInventory(iPlayer, iPrimaryAmmoIndex);
		static iAmount;iAmount= min(WEAPON_MAX_CLIP - iClip, iAmmoPrimary);
		set_pdata_int(iItem, m_iClip, iClip + iAmount, linux_diff_weapon);
		set_pdata_int(iItem, m_fInReload, 0, linux_diff_weapon);
		SetAmmoInventory(iPlayer, iPrimaryAmmoIndex, iAmmoPrimary - iAmount);
		Enable_reload[iPlayer]=0
	}
	static Float:fTimeNewEn
	pev(iItem, pev_fuser1, fTimeNewEn)
	if(get_gametime() >= fTimeNewEn)
	{	
		if(get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon) < WEAPON_MAX_ENERGY)
		{
			if (bitsWeaponState != WEAPONSTATE_MODE) 
			{
				static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
				set_pdata_int(iItem, m_fInSuperBullets,iShoots+1, linux_diff_weapon);
				SetExtraAmmo(iPlayer, iShoots+1);
				if(get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon) == WEAPON_MAX_ENERGY&&get_pdata_int(iItem, m_fInReload, linux_diff_weapon) == 0)
				{
					Enable_beep[iPlayer]=1;
					set_pdata_float(iItem, m_flTimeWeaponIdle, 0.0, linux_diff_weapon);
				}
				set_pev(iItem, pev_fuser1, get_gametime()+ZP_WEAPON_ENERGY_NEW);		
			}
		}
	}
	static iButton; iButton = pev(iPlayer, pev_button);
	if(iButton & IN_ATTACK2 && get_pdata_float(iItem, m_flNextPrimaryAttack, linux_diff_weapon) < 0.0 && get_pdata_float(iItem, m_flNextSecondaryAttack, linux_diff_weapon) !=ANIM_CHANGE_TO_DEF_TIME)
	{
		ExecuteHamB(Ham_Weapon_SecondaryAttack, iItem);
		iButton &= ~IN_ATTACK2;
		set_pev(iPlayer, pev_button, iButton);
	}	
	if (bitsWeaponState & WEAPONSTATE_MODE) 
	{
		if(iShoots<1)
		{
			static bitsWeaponSkin; bitsWeaponSkin = get_pdata_int(iItem, m_iSkin, linux_diff_weapon);
			set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ModelView);
			bitsWeaponSkin &= ~WEAPONSTATE_SKIN
			set_pdata_int(iItem, m_iSkin, bitsWeaponSkin, linux_diff_weapon);
			set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_CHANGE_TO_DEF_TIME, linux_diff_weapon);
			set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_CHANGE_TO_DEF_TIME, linux_diff_weapon);
			set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_CHANGE_TO_DEF_TIME, linux_diff_weapon);
			set_pdata_float(iPlayer, m_flNextAttack, ANIM_CHANGE_TO_DEF_TIME, linux_diff_player);
			UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_ZOOM_OUT_A);
			set_screen_empty(iPlayer)
			bitsWeaponState &= ~WEAPONSTATE_MODE;
			set_pdata_int(iItem, m_iWeaponState, bitsWeaponState, linux_diff_weapon);
			emit_sound(iPlayer, CHAN_WEAPON, "weapons/crossbowex21_zoom_out.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		}
		
	}
	static Float:fTimeScope
	pev(iItem, pev_fuser4, fTimeScope)
	if(get_gametime() >= fTimeScope&&bitsWeaponState & WEAPONSTATE_MODE&&Enable_zoom)
	{	
		message_begin(MSG_ONE, get_user_msgid("ScreenFade"), _, iPlayer)
		write_short(1<<10)
		write_short(1<<10)
		write_short(0x0004)
		write_byte(100)
		write_byte(255)
		write_byte(0)
		write_byte(15)
		message_end()
		static bitsWeaponScope; bitsWeaponScope = get_pdata_int(iItem, m_iScope, linux_diff_weapon);	
		bitsWeaponScope |= WEAPONSTATE_SCOPE;
		set_pdata_int(iItem, m_iScope, bitsWeaponScope, linux_diff_weapon);
		set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ModelView_2s);
		static bitsWeaponSkin; bitsWeaponSkin = get_pdata_int(iItem, m_iSkin, linux_diff_weapon);
		bitsWeaponSkin |= WEAPONSTATE_SKIN
		set_pdata_int(iItem, m_iSkin, bitsWeaponSkin, linux_diff_weapon);
		emit_sound(iPlayer, CHAN_STATIC, WEAPON_SOUNDS[2], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		Enable_zoom=0
		
	}	

	
	return HAM_IGNORED;
}

public CWeapon__AddToPlayer_Post(iItem, iPlayer)
{
	if(Has_Weapon[iPlayer])
	{
		UTIL_WeaponList(iPlayer, 1, true);
		SetAmmoInventory(iPlayer, PrimaryAmmoIndex(iItem), pev(iItem, pev_iuser2));
		Enable_item[iPlayer]=1
	}
	else if(pev(iItem, pev_impulse) == 0) UTIL_WeaponList(iPlayer, -1, false);
}

public CWeapon__Reload_Pre(iItem)
{
	if(!IsValidEntity(iItem)) return HAM_IGNORED;
	
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	
	if(!Has_Weapon[iPlayer]) return HAM_IGNORED;

	static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon);
	if(iClip >= WEAPON_MAX_CLIP) return HAM_SUPERCEDE;
	static iAmmoType; iAmmoType = m_rgAmmo + get_pdata_int(iItem, m_iPrimaryAmmoType, linux_diff_weapon);
	if(get_pdata_int(iPlayer, iAmmoType, linux_diff_player) <= 0) return HAM_SUPERCEDE;
	static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
	set_pdata_int(iItem, m_iClip, 0, linux_diff_weapon);
	ExecuteHam(Ham_Weapon_Reload, iItem);
	Enable_reload[iPlayer]=1
	set_pdata_int(iItem, m_iClip, iClip, linux_diff_weapon);
	set_pdata_int(iItem, m_fInReload, 1, linux_diff_weapon);
	UTIL_SendWeaponAnim(iPlayer, iShoots>9?WEAPON_ANIM_RELOAD_B:WEAPON_ANIM_RELOAD_A);
	static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);
	if (bitsWeaponState & WEAPONSTATE_MODE)
	{
		set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ModelView);
		static bitsWeaponSkin; bitsWeaponSkin = get_pdata_int(iItem, m_iSkin, linux_diff_weapon);
		bitsWeaponSkin &= ~ WEAPONSTATE_SKIN
		set_pdata_int(iItem, m_iSkin, bitsWeaponSkin, linux_diff_weapon);
		set_screen_empty(iPlayer)
		bitsWeaponState &= ~WEAPONSTATE_MODE;
		set_pdata_int(iItem, m_iWeaponState, bitsWeaponState, linux_diff_weapon);
	}
	set_pdata_float(iItem, m_flNextPrimaryAttack, WEAPON_ANIM_RELOAD_TIME, linux_diff_weapon);
	set_pdata_float(iItem, m_flNextSecondaryAttack, WEAPON_ANIM_RELOAD_TIME, linux_diff_weapon);
	set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_RELOAD_TIME, linux_diff_weapon);
	set_pdata_float(iPlayer, m_flNextAttack, WEAPON_ANIM_RELOAD_TIME, linux_diff_player);
	
	return HAM_SUPERCEDE;
	
}
	
public CWeapon__WeaponIdle_Pre(iItem)
{
	if(!IsValidEntity(iItem)) return HAM_IGNORED;
	
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	
	if(!Has_Weapon[iPlayer]) return HAM_IGNORED;
	if(get_pdata_float(iItem, m_flTimeWeaponIdle, linux_diff_weapon) > 0.0) return HAM_IGNORED;
	set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_ANIM_IDLE_TIME, linux_diff_weapon);
	static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
	static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);
	if (bitsWeaponState & WEAPONSTATE_MODE) 
	{
		UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_ZOOM_IDLE);
		
	}
	else
	{
		UTIL_SendWeaponAnim(iPlayer, iShoots>9?WEAPON_ANIM_IDLE_B:WEAPON_ANIM_IDLE);
	}
	return HAM_SUPERCEDE;
}
public CWeapon__SecondaryAttack_Pre(iItem)
{
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
	static bitsWeaponState; bitsWeaponState = get_pdata_int(iItem, m_iWeaponState, linux_diff_weapon);
	if (bitsWeaponState != WEAPONSTATE_MODE&&iShoots>9) 
	{	
		set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_CHANGE_TO_EX_TIME, linux_diff_weapon);
		set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_CHANGE_TO_EX_TIME, linux_diff_weapon);
		set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_CHANGE_TO_EX_TIME, linux_diff_weapon);
		set_pdata_float(iPlayer, m_flNextAttack, ANIM_CHANGE_TO_EX_TIME, linux_diff_player);
		UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_ZOOM_IN);
		bitsWeaponState |= WEAPONSTATE_MODE
		set_pev(iItem, pev_fuser1,get_gametime()+ANIM_CHANGE_TO_EX_TIME+ZP_WEAPON_ENERGY_NEW)
		Enable_zoom=1
		emit_sound(iPlayer, CHAN_WEAPON, "weapons/crossbowex21_zoom_in.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);

		
	}
	else if(bitsWeaponState & WEAPONSTATE_MODE) 
	{
		set_pdata_float(iItem, m_flNextSecondaryAttack, ANIM_CHANGE_TO_DEF_TIME, linux_diff_weapon);
		set_pdata_float(iItem, m_flNextPrimaryAttack, ANIM_CHANGE_TO_DEF_TIME, linux_diff_weapon);
		set_pdata_float(iItem, m_flTimeWeaponIdle, ANIM_CHANGE_TO_DEF_TIME, linux_diff_weapon);
		set_pdata_float(iPlayer, m_flNextAttack, ANIM_CHANGE_TO_DEF_TIME, linux_diff_player);
		UTIL_SendWeaponAnim(iPlayer, iShoots>9?WEAPON_ANIM_ZOOM_OUT_B:WEAPON_ANIM_ZOOM_OUT_A);
		bitsWeaponState &= ~WEAPONSTATE_MODE;
		set_screen_empty(iPlayer)
		set_pev_string(iPlayer, pev_viewmodel2, gl_iszAllocString_ModelView);
		static bitsWeaponSkin; bitsWeaponSkin = get_pdata_int(iItem, m_iSkin, linux_diff_weapon);
		bitsWeaponSkin &= ~ WEAPONSTATE_SKIN
		set_pdata_int(iItem, m_iSkin, bitsWeaponSkin, linux_diff_weapon);
		set_pev(iItem, pev_fuser1,get_gametime()+ANIM_CHANGE_TO_EX_TIME+ZP_WEAPON_ENERGY_NEW)
		emit_sound(iPlayer, CHAN_WEAPON, "weapons/crossbowex21_zoom_out.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		
	}
	set_pdata_int(iItem, m_iWeaponState, bitsWeaponState, linux_diff_weapon);
	return HAM_IGNORED;
}

public CWeapon__PrimaryAttack_Pre(iItem)
{
	if(!IsValidEntity(iItem)) return HAM_IGNORED
	
	static iPlayer; iPlayer = get_pdata_cbase(iItem, m_pPlayer, linux_diff_weapon);
	
	if(!Has_Weapon[iPlayer]) return HAM_IGNORED;
	
	if(get_pdata_float(iItem, m_flNextPrimaryAttack, linux_diff_weapon) > 0.0) return HAM_SUPERCEDE;
	static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
	static iClip; iClip = get_pdata_int(iItem, m_iClip, linux_diff_weapon);
	if(!iClip)
	{
		ExecuteHam(Ham_Weapon_PlayEmptySound, iItem);
		set_pdata_float(iItem, m_flNextPrimaryAttack, 0.2, linux_diff_weapon);

		return HAM_SUPERCEDE;
	}

	

	if (get_pdata_int(iItem, m_iWeaponState, 4) & WEAPONSTATE_MODE) 
	{
		UTIL_SendWeaponAnim(iPlayer, WEAPON_ANIM_ZOOM_SHOOT);
		Weapon_MuzzleFlash(iPlayer, WEAPON_MODELS[4], 0.15, 255.0, 1, 1);
		set_pdata_int(iItem, m_fInSuperBullets, iShoots-1, linux_diff_weapon);
		SetExtraAmmo(iPlayer, iShoots-1);	
		set_pdata_float(iItem, m_flNextSecondaryAttack, 1.0, linux_diff_weapon);
		set_pdata_float(iItem, m_flNextPrimaryAttack, 1.0, linux_diff_weapon);
		set_pdata_float(iItem, m_flTimeWeaponIdle, 1.0, linux_diff_weapon);
		set_pdata_float(iPlayer, m_flNextAttack, 0.5, linux_diff_player);
		emit_sound(iPlayer, CHAN_WEAPON, WEAPON_SOUNDS[1], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		create_beam_shoot(iItem,iPlayer);
		new iAnimDesired, Float: flFrameRate, Float: flGroundSpeed, bool: bLoops;
        
		if((iAnimDesired = lookup_sequence(iPlayer, "crouch_shoot_ak47", flFrameRate, bLoops, flGroundSpeed)) == -1)
		{
			iAnimDesired = 0;
		}
		    
		new Float: 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, linux_diff_animating);
		set_pdata_int(iPlayer, m_fSequenceFinished, 0, linux_diff_animating);
		    
		set_pdata_float(iPlayer, m_flFrameRate, flFrameRate, linux_diff_animating);
		set_pdata_float(iPlayer, m_flGroundSpeed, flGroundSpeed, linux_diff_animating);
		set_pdata_float(iPlayer, m_flLastEventCheck, flGameTime , linux_diff_animating);
		    
		set_pdata_int(iPlayer, m_Activity, 28, linux_diff_player);
		set_pdata_int(iPlayer, 74, 28, linux_diff_player);
		set_pdata_float(iPlayer, 220, flGameTime , linux_diff_player);
	}
	else
	{
		static fw_TraceLine; fw_TraceLine = register_forward(FM_TraceLine, "FM_Hook_TraceLine_Post", true);
		fm_ham_hook(true);
		state FireBullets: Enabled;
		ExecuteHam(Ham_Weapon_PrimaryAttack, iItem);
		state FireBullets: Disabled;
		unregister_forward(FM_TraceLine, fw_TraceLine, true);
		fm_ham_hook(false);	
		set_pdata_float(iItem, m_flAccuracy, 0.001, linux_diff_weapon);
		static Float: vecPunchangle[3];
		vecPunchangle[0] = -WEAPON_PUNCHANGLE * 2.0;
		vecPunchangle[1] = random_float(-WEAPON_PUNCHANGLE * 2.0, WEAPON_PUNCHANGLE * 2.0);
		vecPunchangle[2] = 0.0;
		set_pev(iPlayer, pev_punchangle, vecPunchangle);
		Weapon_MuzzleFlash(iPlayer, WEAPON_MODELS[3], 0.1, 255.0, 1, 1);
		UTIL_SendWeaponAnim(iPlayer, iShoots>9?WEAPON_ANIM_SHOOT1_B:WEAPON_ANIM_SHOOT1_A);
		emit_sound(iPlayer, CHAN_WEAPON, WEAPON_SOUNDS[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM);
		set_pdata_float(iItem, m_flNextPrimaryAttack, WEAPON_RATE, linux_diff_weapon);
		set_pdata_float(iItem, m_flNextSecondaryAttack, WEAPON_RATE, linux_diff_weapon);
		set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_RATE+0.68, linux_diff_weapon);
		set_pdata_float(iPlayer, m_flNextAttack, WEAPON_RATE, linux_diff_player);
	}
	return HAM_SUPERCEDE;
}

public create_beam_shoot(iItem,iPlayer)
{
	static Float: vecOrigin[3]; pev(iPlayer, pev_origin, vecOrigin);		
	get_weapon_position(iPlayer, vecOrigin, 18.0, 0.0, -5.0)
	
	static nobody
	new pPlayer = Players_GetRandomIndex(iPlayer, nobody)
	if(Players_GetRandomIndex(iPlayer, nobody)==nobody)
	{
		static Float:vecLook[3];
		fm_get_aim_origin(iPlayer, vecLook)
		Weapon_DrawBeam2(iPlayer, vecLook)
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_EXPLOSION); // TE
		engfunc(EngFunc_WriteCoord, vecLook[0]); // Position X
		engfunc(EngFunc_WriteCoord, vecLook[1]); // Position Y
		engfunc(EngFunc_WriteCoord, vecLook[2]-10.0); // Position Z
		write_short(g_SmokePuff_Id_red); // Model Index
		write_byte(7); // Scale
		write_byte(25); // Framerate
		write_byte(TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NOPARTICLES); // Flags
		message_end();
		static iVictim;iVictim = FM_NULLENT;			
	
		while((iVictim = find_ent_in_sphere(iVictim, vecLook, 100.0)) > 0)
		{
			if(pev(iVictim, pev_takedamage) == DAMAGE_NO) continue;
			static classnameptd[32]; pev(iVictim, pev_classname, classnameptd, 31);
			if (equali(classnameptd, "func_breakable")) 
			{
				ExecuteHamB(Ham_TakeDamage, iVictim, 0, 0, 250.0, DMG_GENERIC);
			}
			if(is_user_connected(iVictim) && is_user_alive(iVictim))
			{
				if(iVictim == iPlayer) continue;
				static Float:OrigVictim[3];
				pev(iVictim, pev_origin, OrigVictim)
				UTIL_BloodDrips(OrigVictim, iVictim, floatround(DMG_BULLET_2_MOD*0.5));
				set_pdata_int(iVictim, m_LastHitGroup, HIT_GENERIC, linux_diff_player);
				ExecuteHamB(Ham_TakeDamage, iVictim, iPlayer, iPlayer, DMG_BULLET_2_MOD*0.5, DMG_GENERIC);
			}
		}
		
	}
	else
	{
		static Float:vec[3];
		pev(pPlayer, pev_origin, vec)
		Weapon_DrawBeam2(iPlayer, vec)
		if(is_user_alive(pPlayer))
		{
			UTIL_BloodDrips(vec, pPlayer, floatround(DMG_BULLET_2_MOD));
			set_pdata_int(pPlayer, m_LastHitGroup, HIT_GENERIC, linux_diff_player);
			ExecuteHamB(Ham_TakeDamage, pPlayer, iPlayer, iPlayer, DMG_BULLET_2_MOD, DMG_GENERIC);
		}
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_EXPLOSION); // TE
		engfunc(EngFunc_WriteCoord, vec[0]); // Position X
		engfunc(EngFunc_WriteCoord, vec[1]); // Position Y
		engfunc(EngFunc_WriteCoord, vec[2]-10.0); // Position Z
		write_short(g_SmokePuff_Id_red); // Model Index
		write_byte(7); // Scale
		write_byte(25); // Framerate
		write_byte(TE_EXPLFLAG_NODLIGHTS|TE_EXPLFLAG_NOSOUND|TE_EXPLFLAG_NOPARTICLES); // Flags
		message_end();
	}
}
Players_GetRandomIndex(iPlayer,nobody)
{
	new iIndex, szIndex[33],Float:vecOrigin[3];
	
	pev(iPlayer,pev_origin,vecOrigin);
	static Float:vecId[3];
	for(new pId = 1; pId <= get_maxplayers(); pId++)
	{
		
		if(!is_user_connected(pId) || !is_user_alive(pId) || iPlayer == pId) continue;
		
		pev(pId,pev_origin,vecId);
		if(fm_is_in_viewcone(iPlayer, vecId)&&!IsWallBetweenPoints(vecOrigin, vecId, iPlayer)) 
		{
			szIndex[++iIndex] = pId;
		}
		else
		{
			szIndex[32] = nobody
		}
	}
	return szIndex[random_num(1, iIndex)];
}

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

public CEntity__TraceAttack_Pre(iVictim, iAttacker, Float: flDamage)
{
	if(!is_user_connected(iAttacker)) return HAM_IGNORED;
	static iItem; iItem = get_pdata_cbase(iAttacker, m_pActiveItem, linux_diff_player);
	if(!IsValidEntity(iItem) || !Has_Weapon[iAttacker]) return HAM_IGNORED;
	SetHamParamFloat(3, flDamage * DMG_BULLET_1_MOD);
	return HAM_IGNORED;
}
public FM_Hook_UpdateClientData_Post(iPlayer, SendWeapons, CD_Handle)
{
	if(!is_user_alive(iPlayer)) return;
	
	static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player);
	
	if(!IsValidEntity(iItem) || !Has_Weapon[iPlayer]) return;
	
	if(get_user_weapon(iPlayer) == CSW_WPN)
	{
		set_cd(CD_Handle, CD_flNextAttack, get_gametime()+0.001);
	}
}

public plusa(iItem)
{
	if(!IsValidEntity(iItem)) return HAM_IGNORED;
	static Float:fTimeNewEn
	pev(iItem, pev_fuser1, fTimeNewEn)

	if(get_gametime() >= fTimeNewEn)
	{		
		if(get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon) < WEAPON_MAX_ENERGY)
		{
			static iShoots; iShoots = get_pdata_int(iItem, m_fInSuperBullets, linux_diff_weapon);
			set_pdata_int(iItem, m_fInSuperBullets,iShoots+1, linux_diff_weapon)
			set_pev(iItem, pev_fuser1, get_gametime()+ZP_WEAPON_ENERGY_NEW)
		}
		else
		{
			remove_task(iItem)
		}	
	}
	return HAM_IGNORED;
}


public UTIL_BloodDrips(Float: vecOrigin[3], iVictim, iAmount)
{
	if(iAmount > 255) iAmount = 255;
	engfunc(EngFunc_MessageBegin, MSG_BROADCAST, SVC_TEMPENTITY, vecOrigin, 0);
	write_byte(TE_BLOODSPRITE);
	engfunc(EngFunc_WriteCoord, vecOrigin[0]);
	engfunc(EngFunc_WriteCoord, vecOrigin[1]);
	engfunc(EngFunc_WriteCoord, vecOrigin[2]);
	write_short(gl_iszModelIndex_BloodSpray);
	write_short(gl_iszModelIndex_BloodDrop);
	write_byte(ExecuteHamB(Ham_BloodColor, iVictim));
	write_byte(min(max(3, iAmount / 10), 16));
	message_end();
}
	
public CWeapon__Think_Pre(iSprite)
{
	if(!IsValidEntity(iSprite)) return HAM_IGNORED;
	if(CustomMuzzleShoot(iSprite))
	{
		static Float: flFrame;
		if (pev(iSprite, pev_frame, flFrame) && ++flFrame - 1.0 < get_pdata_float(iSprite, m_maxFrame, 4))
		{
			set_pev(iSprite, pev_frame, flFrame);
			set_pev(iSprite, pev_nextthink, get_gametime() + MUZZLE_TIME_SHOOT);
			return HAM_SUPERCEDE;
		}
		set_pev(iSprite, pev_flags, pev(iSprite, pev_flags)|FL_KILLME);
	}	
	return HAM_IGNORED;
}

public CWeapon__Think_Beam(iSprite)
{
	if (!IsValidEntity(iSprite) || !IsCustomBeam2(iSprite))
	{
		return HAM_IGNORED;
	}
	static Float:amt; pev(iSprite, pev_renderamt, amt)
	amt -= 5.0
	set_pev(iSprite, pev_renderamt, amt)
	set_pev(iSprite, pev_nextthink, get_gametime() + BEAM_FRAMECHANGETIME);
	if(amt <= 0.0) 
	{
		set_pev(iSprite, pev_flags, pev(iSprite,pev_flags) | FL_KILLME)
	}
	return HAM_SUPERCEDE;
}
public fm_ham_hook(bool: bEnabled)
{
	if(bEnabled)
	{
		EnableHamForward(gl_HamHook_TraceAttack[0]);
		EnableHamForward(gl_HamHook_TraceAttack[1]);
		EnableHamForward(gl_HamHook_TraceAttack[2]);
		EnableHamForward(gl_HamHook_TraceAttack[3]);
	}
	else 
	{
		DisableHamForward(gl_HamHook_TraceAttack[0]);
		DisableHamForward(gl_HamHook_TraceAttack[1]);
		DisableHamForward(gl_HamHook_TraceAttack[2]);
		DisableHamForward(gl_HamHook_TraceAttack[3]);
	}
}
stock Weapon_DrawBeam2(iPlayer, Float: vecEnd[3])
{
	static iBeamEntity, iszAllocStringCached; 
	if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "beam"))) 
	{ 
		iBeamEntity = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached); 
	} 
	if(!IsValidEntity(iBeamEntity)) return FM_NULLENT;
	set_pev(iBeamEntity, pev_flags, pev(iBeamEntity, pev_flags) | FL_CUSTOMENTITY); 
	set_pev(iBeamEntity, pev_rendercolor, Float: {255.0, 255.0, 255.0}) 
	set_pev(iBeamEntity, pev_renderamt, 255.0) 
	set_pev(iBeamEntity, pev_body, 0) 
	set_pev(iBeamEntity, pev_frame, 0.0) 
	set_pev(iBeamEntity, pev_animtime, 0.0) 
	set_pev(iBeamEntity, pev_scale, BEAM_WEIGHT) 
	     
	engfunc(EngFunc_SetModel, iBeamEntity, WEAPON_SPRITE_LINE3); 
	     
	set_pev(iBeamEntity, pev_skin, 0); 
	set_pev(iBeamEntity, pev_sequence, 0); 
	set_pev(iBeamEntity, pev_rendermode, 0); 	

	static Float:Origp[3];
	get_weapon_position(iPlayer, Origp, 17.0, 0.0, -5.0)

	set_pev(iBeamEntity, pev_rendermode, (pev(iBeamEntity, pev_rendermode) & 0xF0) | BEAM_POINTS & 0x0F) 
	set_pev(iBeamEntity, pev_origin, vecEnd)  
	set_pev(iBeamEntity, pev_angles, Origp) 
	set_pev(iBeamEntity, pev_sequence, (pev(iBeamEntity, pev_sequence) & 0x0FFF) | ((0 & 0xF) << 12)) 
	set_pev(iBeamEntity, pev_skin, (pev(iBeamEntity, pev_skin) & 0x0FFF) | ((0 & 0xF) << 12)) 
	Beam_RelinkBeam(iBeamEntity); 	
	
	set_pev(iBeamEntity, pev_skin, (pev(iBeamEntity, pev_skin) & 0x0FFF) | ((0 & 0xF) << 12)) 
	set_pev(iBeamEntity, pev_sequence, (pev(iBeamEntity, pev_sequence) & 0x0FFF) | ((0 & 0xF) << 12))
	set_pev(iBeamEntity, pev_renderamt, 255.0) 
	set_pev(iBeamEntity, pev_animtime, BEAM_SCROLLRATE) 
	set_pev(iBeamEntity, pev_rendercolor, BEAM_COLOR) 
	set_pev(iBeamEntity, pev_body, BEAM_NOISE) 
	
	set_pev(iBeamEntity, pev_nextthink, get_gametime() + 0.3);
	set_pev(iBeamEntity, pev_classname, BEAM_CLASSNAME2);
	set_pev(iBeamEntity, pev_impulse, g_iszBeamKey2);
	set_pev(iBeamEntity, pev_owner, iPlayer);
	return iBeamEntity;
}
stock Weapon_MuzzleFlash(iPlayer, szMuzzleSprite[], Float: flScale, Float: flBrightness, iAttachment,iMode)
{
	if (global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < MUZZLE_INTOLERANCE)
	{
		return FM_NULLENT;
	}
	static iSprite, iszAllocStringCached;
	if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "env_sprite")))
	{
		iSprite = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
	}
	if(!pev_valid(iSprite)) return FM_NULLENT;
	set_pev(iSprite, pev_model, szMuzzleSprite);
	set_pev(iSprite, pev_owner, iPlayer);
	set_pev(iSprite, pev_aiment, iPlayer);
	set_pev(iSprite, pev_body, iAttachment);
	if(iMode==1)
	{
		set_pev(iSprite, pev_classname, MUZZLE_CLASSNAME4);
		set_pev(iSprite, pev_impulse, g_iszMuzzleKeyShoot);
		set_pev(iSprite, pev_spawnflags, SF_SPRITE_ONCE);

	}	
	Sprite_SetTransparency(iSprite, kRenderTransAdd, flBrightness);
	Sprite_SetScale(iSprite, flScale);
	
	dllfunc(DLLFunc_Spawn, iSprite)

	return iSprite;
}

PrimaryAmmoIndex(iItem)
{
	return get_pdata_int(iItem, m_iPrimaryAmmoType, 4);
}

GetAmmoInventory(iPlayer, iAmmoIndex)
{
	if (iAmmoIndex == -1)
	{
		return -1;
	}

	return get_pdata_int(iPlayer, m_rgAmmo + iAmmoIndex, 5);
}
stock UTIL_PrecacheSpritesFromTxt(const szWeaponList[])
{
	new szTxtDir[64], szSprDir[64]; 
	new szFileData[128], szSprName[48], temp[1];

	format(szTxtDir, charsmax(szTxtDir), "sprites/%s.txt", szWeaponList);
	engfunc(EngFunc_PrecacheGeneric, szTxtDir);

	new iFile = fopen(szTxtDir, "rb");
	while(iFile && !feof(iFile)) 
	{
		fgets(iFile, szFileData, charsmax(szFileData));
		trim(szFileData);

		if(!strlen(szFileData)) 
			continue;

		new pos = containi(szFileData, "640");	
			
		if(pos == -1)
			continue;
			
		format(szFileData, charsmax(szFileData), "%s", szFileData[pos+3]);		
		trim(szFileData);

		strtok(szFileData, szSprName, charsmax(szSprName), temp, charsmax(temp), ' ', 1);
		trim(szSprName);
		
		format(szSprDir, charsmax(szSprDir), "sprites/%s.spr", szSprName);
		engfunc(EngFunc_PrecacheGeneric, szSprDir);
	}

	if(iFile) fclose(iFile);
}
stock set_screen_empty(iPlayer)
{
	message_begin(MSG_ONE, get_user_msgid("ScreenFade"), {0,0,0}, iPlayer)
	write_short(1<<10)
	write_short(1<<10)
	write_short(0x0001)
	write_byte(0)
	write_byte(0)
	write_byte(0)
	write_byte(0)
	message_end()
	static iItem; iItem = get_pdata_cbase(iPlayer, m_pActiveItem, linux_diff_player);
	
	static bitsWeaponScope; bitsWeaponScope = get_pdata_int(iItem, m_iScope, linux_diff_weapon);
	Enable_zoom=0
	if(bitsWeaponScope & WEAPONSTATE_SCOPE)
	{
		bitsWeaponScope &= ~ WEAPONSTATE_SCOPE;
		
		set_pdata_int(iItem, m_iScope, bitsWeaponScope, linux_diff_weapon);
		
	}
}
stock IsWallBetweenPoints(Float: vecStart[3], Float: vecEnd[3], PlayerEnt)
{
	static iTrace;iTrace = create_tr2();
	static Float: vecEndPos[3];
	engfunc(EngFunc_TraceLine, vecStart, vecEnd, IGNORE_MONSTERS, PlayerEnt, iTrace);
	get_tr2(iTrace, TR_vecEndPos, vecEndPos);
	free_tr2(iTrace);
	return floatround(get_distance_f(vecEnd, vecEndPos));
} 
SetAmmoInventory(iPlayer, iAmmoIndex, iAmount)
{
	if (iAmmoIndex == -1)
	{
		return 0;
	}

	set_pdata_int(iPlayer, m_rgAmmo + iAmmoIndex, iAmount, 5);
	return 1;
}
stock SetExtraAmmo(iPlayer, iClip)
{
	message_begin(MSG_ONE, get_user_msgid("AmmoX"), { 0, 0, 0 }, iPlayer);
	write_byte(1);
	write_byte(iClip);
	message_end();
}
stock get_weapon_position(id, Float:fOrigin[], Float:add_forward = 0.0, Float:add_right = 0.0, Float:add_up = 0.0)
{
	static Float:Angles[3],Float:ViewOfs[3], Float:vAngles[3]
	static Float:Forward[3], Float:Right[3], Float:Up[3]
	
	pev(id, pev_v_angle, vAngles)
	pev(id, pev_origin, fOrigin)
	pev(id, pev_view_ofs, ViewOfs)
	xs_vec_add(fOrigin, ViewOfs, fOrigin)
	
	pev(id, pev_angles, Angles)
	
	Angles[0] = vAngles[0]
	
	engfunc(EngFunc_MakeVectors, Angles)
	
	global_get(glb_v_forward, Forward)
	global_get(glb_v_right, Right)
	global_get(glb_v_up, Up)
	
	xs_vec_mul_scalar(Forward, add_forward, Forward)
	xs_vec_mul_scalar(Right, add_right, Right)
	xs_vec_mul_scalar(Up, add_up, Up)
	
	fOrigin[0] = fOrigin[0] + Forward[0] + Right[0] + Up[0]
	fOrigin[1] = fOrigin[1] + Forward[1] + Right[1] + Up[1]
	fOrigin[2] = fOrigin[2] + Forward[2] + Right[2] + Up[2]
}
stock UTIL_SendWeaponAnim(iPlayer, iAnim)
{
	set_pev(iPlayer, pev_weaponanim, iAnim);

	message_begin(MSG_ONE, SVC_WEAPONANIM, _, iPlayer);
	write_byte(iAnim);
	write_byte(0);
	message_end();
}

stock UTIL_WeaponList(iPlayer, iByte, bool: bEnabled)
{
	message_begin(MSG_ONE, gl_iMsgID_Weaponlist, _, iPlayer);
	write_string(bEnabled ? WEAPON_WEAPONLIST : WEAPON_REFERENCE);
	write_byte(iWeaponList[0]);
	write_byte(bEnabled ? WEAPON_DEFAULT_AMMO : iWeaponList[1]);
	write_byte(iByte);
	write_byte(WEAPON_MAX_ENERGY);
	write_byte(iWeaponList[4]);
	write_byte(iWeaponList[5]);
	write_byte(iWeaponList[6]);
	write_byte(iWeaponList[7]);
	message_end();
}
stock Sprite_SetTransparency(iSprite, iRendermode, Float: flAmt, iFx = kRenderFxNone)
{
	set_pev(iSprite, pev_rendermode, iRendermode);
	set_pev(iSprite, pev_renderamt, flAmt);
	set_pev(iSprite, pev_renderfx, iFx);
}
stock UTIL_PrecacheSoundsFromModel(const szModelPath[])
{
	new iFile;
	
	if((iFile = fopen(szModelPath, "rt")))
	{
		new szSoundPath[64];
		
		new iNumSeq, iSeqIndex;
		new iEvent, iNumEvents, iEventIndex;
		
		fseek(iFile, 164, SEEK_SET);
		fread(iFile, iNumSeq, BLOCK_INT);
		fread(iFile, iSeqIndex, BLOCK_INT);
		
		for(new k, i = 0; i < iNumSeq; i++)
		{
			fseek(iFile, iSeqIndex + 48 + 176 * i, SEEK_SET);
			fread(iFile, iNumEvents, BLOCK_INT);
			fread(iFile, iEventIndex, BLOCK_INT);
			fseek(iFile, iEventIndex + 176 * i, SEEK_SET);
			
			for(k = 0; k < iNumEvents; k++)
			{
				fseek(iFile, iEventIndex + 4 + 76 * k, SEEK_SET);
				fread(iFile, iEvent, BLOCK_INT);
				fseek(iFile, 4, SEEK_CUR);
				
				if(iEvent != 5004)
					continue;
				
				fread_blocks(iFile, szSoundPath, 64, BLOCK_CHAR);
				
				if(strlen(szSoundPath))
				{
					strtolower(szSoundPath);
					engfunc(EngFunc_PrecacheSound, szSoundPath);
				}
			}
		}
	}
	
	fclose(iFile);
}
According to the rules of the site, I should not advertise anything, but still try to find my channel on YouTube, there is an answer to your post
PeTRoX is offline
OciXCrom
Veteran Member
Join Date: Oct 2013
Location: Macedonia
Old 02-03-2022 , 15:26   Re: Help!
Reply With Quote #3

Your post is even worse than an advertisement and you're probably a bot.

@Connor31 - if you want someone else to do something for you, use the REQUESTS section. This is the Scripting Help section where you learn how to do things by yourself.

Also, a thread named "help" does not help anyone. Imagine what the forum would look like if everyone did what you did.
__________________
OciXCrom is offline
Send a message via Skype™ to OciXCrom
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 11:20.


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