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

API Scripting Help Request Modified Plugin


Post New Thread Reply   
 
Thread Tools Display Modes
Author Message
Scopce
Junior Member
Join Date: Oct 2011
Location: ALLD
Old 03-30-2020 , 21:15   Request Modified Plugin
Reply With Quote #1

Hello, can somebody please help me to make this kind of plugin for one round?

Code:
#include <amxmodx>
#include <fakemeta_util>
#include <hamsandwich>
#include <beam>
#include <zombieplague>

#define PLUGIN 					"[ZP] Extra: CSO Weapon Gungnir"
#define VERSION 				"1.0"
#define AUTHOR 					"KORD_12.7"

#pragma ctrlchar '\'
#pragma compress 1//Protection From Decompiler

//**********************************************
//* Weapon Settings.                           *
//**********************************************

#define WPNLIST	

// Main
#define WEAPON_KEY				87349
#define WEAPON_NAME 				"weapon_gungnir"

#define WEAPON_REFERANCE			"weapon_aug"
#define WEAPON_MAX_CLIP				50
#define WEAPON_DEFAULT_AMMO			200

#define WEAPON_TIME_NEXT_IDLE 			5.0
#define WEAPON_TIME_NEXT_ATTACK 		0.15
#define WEAPON_TIME_DELAY_DEPLOY 		1.0
#define WEAPON_TIME_DELAY_RELOAD 		2.0

#define WEAPON_DAMAGE_HIT			random_float(70.0,220.0)
#define WEAPON_RADIUS_HIT			400.0

#define WEAPON_BALL_DAMAGE_EXP			random_float(500.0, 600.0)
#define WEAPON_BALL_RADIUS_EXP			250.0
#define WEAPON_BALL_EXP_KNOCKBACK		20.0

#define WEAPON_MISSILE_DAMAGE_EXP		random_float(500.0, 600.0)
#define WEAPON_MISSILE_RADIUS_EXP		100.0

#define WEAPON_MISSILE_DAMAGE2			random_float(500.0, 600.0)
#define WEAPON_MISSILE_RADIUS2			100.0

#define WEAPON_MISSILE_DAMAGE_TOUCH		random_float(300.0, 400.0)
#define WEAPON_MISSILE_KNOCKBACK_TOUCH		50.0

#define WEAPON_DAMAGE_LINE			random_float(10.0, 50.0)

#define ZP_ITEM_NAME				"Weapon: GunGnir" 
#define ZP_ITEM_COST				500

// Models
#define MODEL_WORLD				"models/w_gungnir.mdl"
#define MODEL_VIEW				"models/v_gungnir_v3.mdl"
#define MODEL_PLAYER_A				"models/p_gungnira.mdl"
#define MODEL_PLAYER_B				"models/p_gungnirb.mdl"
#define MODEL_MISSILE				"models/gungnir_missile.mdl"

// Sounds
#define SOUND_SHOOT_B				"weapons/gungnir_shoot_b.wav"
#define SOUND_SHOOT_B_EXP			"weapons/gungnir_shoot_b_exp.wav"
#define SOUND_SHOOT_END				"weapons/gungnir_shoot_end.wav"
#define SOUND_LOOP				"weapons/gungnir_shoot_loop.wav"

#define SOUND_CHARGE_EXP			"weapons/gungnir_charge_shoot_exp.wav"
#define SOUND_CHARGE_EXP2			"weapons/gungnir_charge_shoot_exp2.wav"
#define SOUND_CHARGE_SHOOT			"weapons/gungnir_charge_shoot1.wav"
#define SOUND_CHARGE_SHOOT2			"weapons/gungnir_charge_shoot2.wav"

// Sprites
#define WEAPON_HUD_TXT				"sprites/weapon_gungnir.txt"
#define WEAPON_HUD_SPR_1			"sprites/640hud185.spr"
#define WEAPON_HUD_SPR_2			"sprites/640hud36.spr"

#define WEAPON_SPRITE_HIT_EXP			"sprites/ef_gungnir_aexplo.spr"
#define WEAPON_SPRITE_MODE_EXP			"sprites/ef_gungnir_bexplo.spr"
#define WEAPON_SPRITE_CHARGE_EXP		"sprites/ef_gungnir_chargeexplo2.spr"
#define WEAPON_SPRITE_LINE			"sprites/ef_gungnir_lightline1.spr"
#define WEAPON_SPRITE_LINE3			"sprites/ef_gungnir_xbeam.spr"
#define WEAPON_SPRITE_MISSILE			"sprites/ef_gungnir_missile.spr"
#define WEAPON_SPRITE_MUZZLE			"sprites/muzzleflash81.spr"

// Animation
#define ANIM_EXTENSION				"m249"

// Animation sequences
enum
{	
	ANIM_IDLE,
	
	ANIM_RELOAD,

	ANIM_DRAW,
	
	ANIM_SHOOT_START,
	ANIM_SHOOT_LOOP,
	ANIM_SHOOT_END,
	
	ANIM_SHOOT_B,
	ANIM_CHANGE_B,
	
	ANIM_SHOOT_CHARGE,
	ANIM_CHARGE_IDLE,
};

//**********************************************
//* Some macroses.                             *
//**********************************************

#define MDLL_Spawn(%0)			dllfunc(DLLFunc_Spawn, %0)
#define MDLL_Touch(%0,%1)		dllfunc(DLLFunc_Touch, %0, %1)
#define MDLL_USE(%0,%1)			dllfunc(DLLFunc_Use, %0, %1)

#define SET_MODEL(%0,%1)		engfunc(EngFunc_SetModel, %0, %1)
#define SET_ORIGIN(%0,%1)		engfunc(EngFunc_SetOrigin, %0, %1)

#define PRECACHE_MODEL(%0)		engfunc(EngFunc_PrecacheModel, %0)
#define PRECACHE_SOUND(%0)		engfunc(EngFunc_PrecacheSound, %0)
#define PRECACHE_GENERIC(%0)		engfunc(EngFunc_PrecacheGeneric, %0)

#define MESSAGE_BEGIN(%0,%1,%2,%3)	engfunc(EngFunc_MessageBegin, %0, %1, %2, %3)
#define MESSAGE_END()			message_end()

#define WRITE_ANGLE(%0)			engfunc(EngFunc_WriteAngle, %0)
#define WRITE_BYTE(%0)			write_byte(%0)
#define WRITE_COORD(%0)			engfunc(EngFunc_WriteCoord, %0)
#define WRITE_STRING(%0)		write_string(%0)
#define WRITE_SHORT(%0)			write_short(%0)

#define BitSet(%0,%1) (%0 |= (1 << (%1 - 1)))
#define BitClear(%0,%1) (%0 &= ~(1 << (%1 - 1)))
#define BitCheck(%0,%1) (%0 & (1 << (%1 - 1)))

//**********************************************
//* PvData Offsets.                            *
//**********************************************

// Linux extra offsets
#define extra_offset_weapon		4
#define extra_offset_player		5

new g_bitIsConnected;

#define m_rgpPlayerItems_CWeaponBox	34

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

// CBasePlayerWeapon
#define m_fInSuperBullets		30
#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_iChargeReady			55
#define m_flAccuracy 			62
#define m_fWeaponState			74
#define m_iLastZoom 			109

// CBaseMonster
#define m_flNextAttack			83

// CBasePlayer
#define m_fResumeZoom       		110
#define m_iFOV				363
#define m_rgpPlayerItems_CBasePlayer	367
#define m_pActiveItem			373
#define m_rgAmmo_CBasePlayer		376
#define m_szAnimExtention		492

#define IsValidPev(%0) 			(pev_valid(%0) == 2)

#define INSTANCE(%0)			((%0 == -1) ? 0 : %0)

#define MUZZLE_CLASSNAME		"iMuzzGungnir"

#define MISSILE_CLASSNAME		"GunGnirMissile"
#define BALL_CLASSNAME			"GunGnirBall"

#define BEAM_CLASSNAME			"szBeamGunGnir"
#define BEAM_CLASSNAME2			"szBeamGunGnir2"

#define BEAM_LIFE 			0.16
#define BEAM_COLOR 			{255.0, 255.0, 255.0}
#define BEAM_BRIGHTNESS			250.0
#define BEAM_SCROLLRATE			20.0
#define BEAM_NOISE			0
#define BEAM_WEIGHT			200.0

//**********************************************
//* Let's code our weapon.                     *
//**********************************************

new iBlood[7];

Weapon_OnPrecache()
{
	PRECACHE_MODEL(MODEL_WORLD);
	PRECACHE_MODEL(MODEL_VIEW);
	PRECACHE_MODEL(MODEL_PLAYER_A);
	PRECACHE_MODEL(MODEL_PLAYER_B);
	PRECACHE_MODEL(MODEL_MISSILE);
	
	PRECACHE_SOUND(SOUND_SHOOT_B);
	PRECACHE_SOUND(SOUND_SHOOT_B_EXP);
	PRECACHE_SOUND(SOUND_SHOOT_END);
	PRECACHE_SOUND(SOUND_LOOP);
	
	PRECACHE_SOUND(SOUND_CHARGE_EXP);
	PRECACHE_SOUND(SOUND_CHARGE_EXP2);
	PRECACHE_SOUND(SOUND_CHARGE_SHOOT);
	PRECACHE_SOUND(SOUND_CHARGE_SHOOT2);

	PRECACHE_SOUNDS_FROM_MODEL(MODEL_VIEW);
	
	iBlood[2] = PRECACHE_MODEL(WEAPON_SPRITE_HIT_EXP);
	iBlood[3] = PRECACHE_MODEL(WEAPON_SPRITE_MODE_EXP);
	iBlood[6] = PRECACHE_MODEL(WEAPON_SPRITE_CHARGE_EXP);

	iBlood[4] = PRECACHE_MODEL(WEAPON_SPRITE_LINE);
	
	PRECACHE_MODEL(WEAPON_SPRITE_LINE3);
	PRECACHE_MODEL(WEAPON_SPRITE_MISSILE);
	PRECACHE_MODEL(WEAPON_SPRITE_MUZZLE);
	
	#if defined WPNLIST
	PRECACHE_GENERIC(WEAPON_HUD_TXT);
	PRECACHE_GENERIC(WEAPON_HUD_SPR_1);
	PRECACHE_GENERIC(WEAPON_HUD_SPR_2);
	#endif
	
	iBlood[0] = PRECACHE_MODEL("sprites/bloodspray.spr");
	iBlood[1] = PRECACHE_MODEL("sprites/blood.spr");
}

Weapon_OnSpawn(const iItem)
{
	// Setting world model.
	SET_MODEL(iItem, MODEL_WORLD);
}

Weapon_OnDeploy(const iItem, const iPlayer, const iClip, const iChargeReady, const iAmmoPrimary)
{
	#pragma unused iClip, iAmmoPrimary, iChargeReady
		
	static iszViewModel;

	if (iszViewModel || (iszViewModel = engfunc(EngFunc_AllocString, MODEL_VIEW)))
	{
		set_pev_string(iPlayer, pev_viewmodel2, iszViewModel);
	}
	
	static iszPlayerModel;
	if (iszPlayerModel || (iszPlayerModel = engfunc(EngFunc_AllocString, MODEL_PLAYER_A)))
	{
		set_pev_string(iPlayer, pev_weaponmodel2, iszPlayerModel);
	}
	
	set_pdata_int(iItem, m_fInReload, 0, extra_offset_weapon);
	set_pdata_int(iItem, m_iChargeReady, 0, extra_offset_weapon);

	set_pdata_string(iPlayer, m_szAnimExtention * 4, ANIM_EXTENSION, -1, extra_offset_player * 4);
	
	set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_TIME_DELAY_DEPLOY, extra_offset_weapon);
	set_pdata_float(iPlayer, m_flNextAttack, WEAPON_TIME_DELAY_DEPLOY, extra_offset_player);

	Weapon_DefaultDeploy(iPlayer, MODEL_VIEW, MODEL_PLAYER_A, ANIM_DRAW, ANIM_EXTENSION);
}

Weapon_OnHolster(const iItem, const iPlayer, const iClip, const iChargeReady, const iAmmoPrimary)
{
	#pragma unused iPlayer, iClip, iAmmoPrimary, iChargeReady
	
	Weapon_ChargeEnd(iItem, iPlayer);

	set_pdata_int(iItem, m_fInReload, 0, extra_offset_weapon);
	
	engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_LOOP, 0.0, 0.0, SND_STOP, PITCH_NORM);
	
	set_pdata_int(iItem, m_fInSuperBullets, 0, extra_offset_weapon);
	set_pev(iItem, pev_fuser1, 0.0);
}

Weapon_OnIdle(const iItem, const iPlayer, const iClip, const iChargeReady, const iAmmoPrimary)
{
	#pragma unused iClip, iAmmoPrimary
	
	if (get_pdata_float(iItem, m_flNextSecondaryAttack, extra_offset_weapon) > 0.0)
	{
		return;
	}
	
	if (get_pdata_int(iItem, m_fInSuperBullets, extra_offset_weapon) == 3)
	{
		Weapon_ShootLaser(iItem, iPlayer, iClip);
	}

	if (get_pdata_float(iItem, m_flTimeWeaponIdle, extra_offset_weapon) > 0.0)
	{
		return;
	}
	
	if(iChargeReady > 0)
	{
		Weapon_ChargeEnd(iItem, iPlayer);
		return;
	}
	
	set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_TIME_NEXT_IDLE, extra_offset_weapon);
	
	Weapon_SendAnim(iPlayer, get_pdata_int(iItem,m_fInSuperBullets,extra_offset_weapon) == 2 ? ANIM_CHARGE_IDLE : ANIM_IDLE);
}

Weapon_OnReload(const iItem, const iPlayer, const iClip, const iChargeReady, const iAmmoPrimary)
{
	#pragma unused iAmmoPrimary
	
	if (min(WEAPON_MAX_CLIP - iClip, iAmmoPrimary) <= 0)
	{
		return;
	}
	
	if(iChargeReady > 0)
	{
		Weapon_ChargeEnd(iItem, iPlayer);
		return;
	}
	
	set_pdata_int(iItem, m_iClip, 0, extra_offset_weapon);
	
	ExecuteHam(Ham_Weapon_Reload, iItem);
	
	set_pdata_int(iItem, m_iClip, iClip, extra_offset_weapon);
	
	set_pdata_float(iPlayer, m_flNextAttack, WEAPON_TIME_DELAY_RELOAD, extra_offset_player);
	set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_TIME_DELAY_RELOAD, extra_offset_weapon);
	
	Weapon_SendAnim(iPlayer, ANIM_RELOAD);
}

Weapon_OnPrimaryAttack(const iItem, const iPlayer, const iClip, const iChargeReady, const iAmmoPrimary)
{
	#pragma unused iAmmoPrimary
	
	if (get_pdata_int(iItem, m_fInSuperBullets, extra_offset_weapon))
	{
		return;
	}

	if(iClip <= 0 || pev(iPlayer, pev_waterlevel) == 3)
	{
		if(iChargeReady > 0)
		{
			Weapon_ChargeEnd(iItem, iPlayer);
		}
		return;
	}
	
	switch(iChargeReady)
	{
		case 0:
		{
			Weapon_SendAnim(iPlayer, ANIM_SHOOT_START);
			
			set_pdata_int(iItem, m_iChargeReady, 1, extra_offset_weapon);
			
			set_pdata_float(iItem, m_flTimeWeaponIdle, 0.16, extra_offset_weapon);
			set_pdata_float(iItem, m_flNextPrimaryAttack, 0.2, extra_offset_weapon);
			set_pdata_float(iItem, m_flNextSecondaryAttack, 0.2, extra_offset_weapon);
			
			return;
		}
		case 1:
		{
			static iFlags, iAnimDesired; 
			static szAnimation[64];iFlags = pev(iPlayer, pev_flags);
			
			if (pev(iItem, pev_fuser1) < get_gametime())
			{
				engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_LOOP, 0.9, ATTN_NORM, 0, PITCH_NORM);
				set_pev(iItem, pev_fuser1, get_gametime() + 1.85);
			}
			
			Weapon_SendAnim(iPlayer, ANIM_SHOOT_LOOP);
					
			formatex(szAnimation, charsmax(szAnimation), iFlags & FL_DUCKING ? "crouch_shoot_%s" : "ref_shoot_%s", ANIM_EXTENSION);
					
			if ((iAnimDesired = lookup_sequence(iPlayer, szAnimation)) == -1)
			{
				iAnimDesired = 0;
			}
			
			set_pev(iPlayer, pev_sequence, iAnimDesired);
			
			set_pdata_float(iItem, m_flNextPrimaryAttack, WEAPON_TIME_NEXT_ATTACK, extra_offset_weapon);
			set_pdata_float(iItem, m_flTimeWeaponIdle, WEAPON_TIME_NEXT_ATTACK, extra_offset_weapon);
			
			set_pdata_int(iItem, m_iClip, iClip-1, extra_offset_weapon);
			
			Weapon_MuzzleFlash(iPlayer, WEAPON_SPRITE_MUZZLE, 0.1, 10.0, Float:{0.0, 0.0, 0.0}, 250.0);
			
			static Float:VecEnd[3];Get_Position(iPlayer, 100.0, 0.0, 0.0, VecEnd);
			CreateExplosion(VecEnd, 10.0, iBlood[2], 1, 50, TE_EXPLFLAG_NOSOUND | TE_EXPLFLAG_NOPARTICLES | TE_EXPLFLAG_NODLIGHTS);
			Weapon_DrawBeam2(iPlayer, VecEnd);
			
			static Float:vecEnd[3];
			static Float:vecOrigin[3];pev(iPlayer, pev_origin, vecOrigin);
			static iVictim;iVictim = FM_NULLENT;
				
			while(((iVictim = fm_find_ent_in_sphere(iVictim, vecOrigin, WEAPON_RADIUS_HIT)) != 0))
			{
				if(is_user_connected(iVictim) && is_user_alive(iVictim) && IsValidPev(iVictim))
				{
					pev(iVictim, pev_origin, vecEnd);
					if(iVictim == iPlayer)continue;
					if(!zp_get_user_zombie(iVictim))continue;	
					if(IsWallBetweenPoints(vecOrigin, vecEnd, iPlayer))continue;	
					if(!fm_is_in_viewcone(iPlayer, vecEnd))continue;				
					
					CreateExplosion(vecEnd, 10.0, iBlood[2], random_num(2,3), 30, TE_EXPLFLAG_NOSOUND | TE_EXPLFLAG_NOPARTICLES | TE_EXPLFLAG_NODLIGHTS);
										
					ExecuteHamB(Ham_TakeDamage, iVictim, iPlayer, iPlayer, WEAPON_DAMAGE_HIT, DMG_BURN);
	
					Weapon_DrawBeam(iPlayer, vecEnd, VecEnd);
				}
			}
		}
	}
}

Weapon_OnSecondaryAttack(const iItem, const iPlayer, const iClip, const iChargeReady, const iAmmoPrimary)
{
	#pragma unused iAmmoPrimary, iChargeReady, iClip
	
	static iChargeReady;iChargeReady = get_pdata_int(iItem, m_fInSuperBullets, extra_offset_weapon);
	
	if(iClip <= 0 || pev(iPlayer, pev_waterlevel) == 3)
	{
		if(iChargeReady > 0)
		{
			Weapon_ChargeEnd(iItem, iPlayer);
		}
		return;
	}
	
	switch(iChargeReady)
	{
		case 0:
		{
			set_pdata_int(iItem, m_fInSuperBullets, 1, extra_offset_weapon);

			set_pdata_float(iItem, m_flTimeWeaponIdle, 0.5, extra_offset_weapon);
			set_pdata_float(iItem, m_flNextPrimaryAttack, 0.5, extra_offset_weapon);
			set_pdata_float(iItem, m_flNextSecondaryAttack, 0.5, extra_offset_weapon);
	
			return; 
		}
		case 1:
		{
			Weapon_SendAnim(iPlayer, ANIM_CHANGE_B);
				
			set_pdata_int(iItem, m_fInSuperBullets, 2, extra_offset_weapon);
				
			set_pdata_float(iItem, m_flTimeWeaponIdle, 2.1, extra_offset_weapon);
			set_pdata_float(iItem, m_flNextPrimaryAttack, 2.1, extra_offset_weapon);
			set_pdata_float(iItem, m_flNextSecondaryAttack, 2.1, extra_offset_weapon);
	
			return; 
		}
		case 2:
		{	
			Weapon_SendAnim(iPlayer, ANIM_CHARGE_IDLE);
			
			set_pdata_int(iItem, m_fInSuperBullets, 3, extra_offset_weapon);
			set_pdata_float(iItem, m_flTimeWeaponIdle, 1.0, extra_offset_weapon);
			set_pdata_float(iItem, m_flNextPrimaryAttack, 1.0, extra_offset_weapon);

			static iszPlayerModel;
			if (iszPlayerModel || (iszPlayerModel = engfunc(EngFunc_AllocString, MODEL_PLAYER_B)))
			{
				set_pev_string(iPlayer, pev_weaponmodel2, iszPlayerModel);
			}
			
			return;
		}
	}
}

Weapon_ShootLaser(const iItem, const iPlayer, const iClip)
{
	Weapon_SendAnim(iPlayer, ANIM_SHOOT_CHARGE);
	
	set_pdata_float(iItem, m_flTimeWeaponIdle, 3.0, extra_offset_weapon);
	set_pdata_float(iItem, m_flNextPrimaryAttack, 3.0, extra_offset_weapon);
	set_pdata_float(iItem, m_flNextSecondaryAttack, 3.0, extra_offset_weapon);
	
	set_pdata_int(iItem, m_iClip, max(iClip-5, 0), extra_offset_weapon);
	
	set_pdata_int(iItem, m_fInSuperBullets, 0, extra_offset_weapon);

	CreateMissile(iPlayer);
	
	static iszPlayerModel;
	if (iszPlayerModel || (iszPlayerModel = engfunc(EngFunc_AllocString, MODEL_PLAYER_A)))
	{
		set_pev_string(iPlayer, pev_weaponmodel2, iszPlayerModel);
	}
	
	engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_CHARGE_SHOOT, 0.9, ATTN_NORM, 0, PITCH_NORM);
}

Weapon_ChargeEnd(const iItem, const iPlayer)
{
	Weapon_SendAnim(iPlayer, ANIM_SHOOT_END);
	
	set_pdata_float(iItem, m_flTimeWeaponIdle, 0.28, extra_offset_weapon);
	set_pdata_float(iItem, m_flNextPrimaryAttack, 0.3, extra_offset_weapon);
	set_pdata_float(iItem, m_flNextSecondaryAttack, 0.3, extra_offset_weapon);
	
	set_pdata_int(iItem, m_iChargeReady, 0, extra_offset_weapon);
	
	engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_LOOP, 0.0, 0.0, SND_STOP, PITCH_NORM);
	engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_SHOOT_END, 0.9, ATTN_NORM, 0, PITCH_NORM);

	set_pev(iItem, pev_fuser1, 0.0);
}
	
//*********************************************************************
//*           Don't modify the code below this line unless            *
//*          	 you know _exactly_ what you are doing!!!             *
//*********************************************************************

#define MSGID_WEAPONLIST 78

new g_iszMuzzleKey;
new g_iszBeamKey;
new g_iszBeamKey2;

new g_iItemID;

#define IsCustomItem(%0) (pev(%0, pev_impulse) == WEAPON_KEY)
#define IsCustomBeam(%0) (pev(%0, pev_impulse) == g_iszBeamKey)
#define IsCustomBeam2(%0) (pev(%0, pev_impulse) == g_iszBeamKey2)
#define IsCustomMuzzle(%0) (pev(%0, pev_impulse) == g_iszMuzzleKey)

public plugin_precache()
{
	Weapon_OnPrecache();
	
	g_iszBeamKey = engfunc(EngFunc_AllocString, BEAM_CLASSNAME);
	g_iszBeamKey2 = engfunc(EngFunc_AllocString, BEAM_CLASSNAME2);
	g_iszMuzzleKey = engfunc(EngFunc_AllocString, MUZZLE_CLASSNAME);

	#if defined WPNLIST
	register_clcmd(WEAPON_NAME, "Cmd_WeaponSelect");
	register_message(MSGID_WEAPONLIST, "MsgHook_WeaponList");
	#endif
}

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR);

	register_forward(FM_SetModel,					"FakeMeta_SetModel",		 false);
	register_forward(FM_UpdateClientData,				"FakeMeta_UpdateClientData_Post",true);
	register_forward(FM_Touch, 					"FakeMeta_Touch",		 false);
	
	RegisterHam(Ham_Think, 			"beam",			"HamHook_Think_Post", true);
	RegisterHam(Ham_Think, 			"info_target",		"HamHook_Think", false);
	RegisterHam(Ham_Think, 			"env_sprite",		"HamHook_Sprite_Think", false);
	
	// Weaponbox
	RegisterHam(Ham_Spawn, 			"weaponbox", 		"HamHook_Weaponbox_Spawn_Post", true);
	
	// Item (weapon) hooks
	RegisterHam(Ham_Item_Deploy,		WEAPON_REFERANCE, 	"HamHook_Item_Deploy_Post",	true);
	RegisterHam(Ham_Item_Holster,		WEAPON_REFERANCE, 	"HamHook_Item_Holster",		false);
	RegisterHam(Ham_Item_AddToPlayer,	WEAPON_REFERANCE, 	"HamHook_Item_AddToPlayer",	false);
	RegisterHam(Ham_Item_PostFrame,		WEAPON_REFERANCE, 	"HamHook_Item_PostFrame",	false);
	
	RegisterHam(Ham_Weapon_Reload,		WEAPON_REFERANCE, 	"HamHook_Item_Reload",		false);
	RegisterHam(Ham_Weapon_WeaponIdle,	WEAPON_REFERANCE, 	"HamHook_Item_WeaponIdle",	false);
	RegisterHam(Ham_Weapon_PrimaryAttack,	WEAPON_REFERANCE, 	"HamHook_Item_PrimaryAttack",	false);
	RegisterHam(Ham_Weapon_SecondaryAttack,	WEAPON_REFERANCE, 	"HamHook_Item_SecondaryAttack",	false);
	
	g_iItemID = zp_register_extra_item(ZP_ITEM_NAME, ZP_ITEM_COST, ZP_TEAM_HUMAN);
}

public zp_extra_item_selected(iPlayer, iItemid)
{
	if (iItemid == g_iItemID)
	{
		Weapon_Give(iPlayer);
	}
}
		
//**********************************************
//* Block client weapon.                       *
//**********************************************

public FakeMeta_UpdateClientData_Post(const iPlayer, const iSendWeapons, const CD_Handle)
{
	static iActiveItem;iActiveItem = get_pdata_cbase(iPlayer, m_pActiveItem, extra_offset_player);
	
	if (!IsValidPev(iActiveItem) || !IsCustomItem(iActiveItem))
	{
		return FMRES_IGNORED;
	}

	set_cd(CD_Handle, CD_flNextAttack, get_gametime() + 0.001);
	return FMRES_IGNORED;
}

public FakeMeta_Touch(const iEntity, const iOther)
{
	if(!pev_valid(iEntity))
	{
		return FMRES_IGNORED;
	}
	
	static Classname[32];pev(iEntity, pev_classname, Classname, 31);
	static iAttacker; iAttacker = pev(iEntity, pev_owner);
	static Float:Origin[3];pev(iEntity, pev_origin, Origin);
	new pNull = FM_NULLENT;	
	
	if (equal(Classname, BALL_CLASSNAME))
	{
		if (engfunc(EngFunc_PointContents, Origin) == CONTENTS_SKY || engfunc(EngFunc_PointContents, Origin) == CONTENTS_WATER)
		{
			set_pev(iEntity, pev_flags, pev(iEntity, pev_flags) | FL_KILLME);
			return FMRES_SUPERCEDE;
		}
			
		if (!is_user_connected(iAttacker))
		{
			set_pev(iEntity, pev_flags, pev(iEntity, pev_flags) | FL_KILLME);
			return FMRES_IGNORED;
		}

		CreateExplosion(Origin, 10.0, iBlood[3], 10, 19, TE_EXPLFLAG_NOPARTICLES|TE_EXPLFLAG_NOSOUND);
		
		if(pev_valid(iOther) && !is_user_connected(iOther))
		{
			static szClassname[32];pev(iOther, pev_classname, szClassname, 31);
			if(equal(szClassname, "func_breakable") && (pev(iOther, pev_solid) != SOLID_NOT))
			{
				MDLL_USE(iOther, iEntity);
			}
		}

		while((pNull = fm_find_ent_in_sphere(pNull, Origin, WEAPON_BALL_RADIUS_EXP)) != 0)
		{
			if(IsValidPev(pNull) && pev(pNull, pev_takedamage) != DAMAGE_NO && pev(pNull, pev_solid) != SOLID_NOT)
			{
				if(is_user_connected(pNull)  && zp_get_user_zombie(pNull))
				{
					static Float:originV[3], Float:dist, Float:damage;
					pev(pNull, pev_origin, originV);
					
					message_begin(MSG_BROADCAST, SVC_TEMPENTITY) 
					write_byte(TE_BLOODSPRITE)
					WRITE_COORD(originV[0])
					WRITE_COORD(originV[1])
					WRITE_COORD(originV[2])
					write_short(iBlood[0])
					write_short(iBlood[1])
					write_byte(76)
					write_byte(15)
					message_end()
					
					new Float:vecViewAngle[3];pev(iAttacker, pev_v_angle, vecViewAngle);
					new Float:vecForward[3];angle_vector(vecViewAngle, ANGLEVECTOR_FORWARD, vecForward);
					CreateKnockBack(pNull, vecForward, WEAPON_BALL_EXP_KNOCKBACK);
					
					dist = get_distance_f(Origin, originV);
					damage = WEAPON_BALL_DAMAGE_EXP - (WEAPON_BALL_DAMAGE_EXP/WEAPON_BALL_DAMAGE_EXP) * dist;
					if(damage > 0.0)
					{
						ExecuteHamB(Ham_TakeDamage, pNull, iAttacker, iAttacker, damage, DMG_BURN);
					}
				}
			}
		}
	
		engfunc(EngFunc_EmitSound, iEntity, CHAN_WEAPON, SOUND_SHOOT_B_EXP, 0.9, ATTN_NORM, 0, PITCH_NORM);
	
		set_pev(iEntity, pev_flags, pev(iEntity, pev_flags) | FL_KILLME);
	}
	else if (equal(Classname, MISSILE_CLASSNAME))
	{
		if (is_user_alive(iOther))
		{
			if (zp_get_user_zombie(iOther) /*&& !RoundEend*/)
			{
				static Float:vOrigin[3];pev(iOther, pev_origin, vOrigin);
				message_begin(MSG_BROADCAST, SVC_TEMPENTITY) 
				write_byte(TE_BLOODSPRITE)
				WRITE_COORD(vOrigin[0])
				WRITE_COORD(vOrigin[1])
				WRITE_COORD(vOrigin[2])
				write_short(iBlood[0])
				write_short(iBlood[1])
				write_byte(76)
				write_byte(15)
				message_end()
				
				new Float:vecViewAngle[3];pev(iAttacker, pev_v_angle, vecViewAngle);
				new Float:vecForward[3];angle_vector(vecViewAngle, ANGLEVECTOR_FORWARD, vecForward);
				CreateKnockBack(iOther, vecForward, WEAPON_MISSILE_KNOCKBACK_TOUCH);
				
				ExecuteHamB(Ham_TakeDamage, iOther, iEntity, iAttacker, WEAPON_MISSILE_DAMAGE_TOUCH, DMG_BURN);
			}
		}
		else 
		{
			CreateExplosion(Origin, - 10.0, iBlood[6], 10, 18, TE_EXPLFLAG_NOPARTICLES|TE_EXPLFLAG_NOSOUND);
			
			if(pev_valid(iOther) && !is_user_connected(iOther))
			{
				static szClassname[32];pev(iOther, pev_classname, szClassname, 31);
				if(equal(szClassname, "func_breakable") && (pev(iOther, pev_solid) != SOLID_NOT))
				{
					MDLL_USE(iOther, iEntity);
				}
			}

			while((pNull = fm_find_ent_in_sphere(pNull, Origin, WEAPON_MISSILE_RADIUS_EXP)) != 0)
			{
				if(IsValidPev(pNull) && pev(pNull, pev_takedamage) != DAMAGE_NO && pev(pNull, pev_solid) != SOLID_NOT)
				{
					if(is_user_connected(pNull)  && zp_get_user_zombie(pNull))
					{
						static Float:originV[3], Float:dist, Float:damage;
						pev(pNull, pev_origin, originV);
						
						message_begin(MSG_BROADCAST, SVC_TEMPENTITY) 
						write_byte(TE_BLOODSPRITE)
						WRITE_COORD(originV[0])
						WRITE_COORD(originV[1])
						WRITE_COORD(originV[2])
						write_short(iBlood[0])
						write_short(iBlood[1])
						write_byte(76)
						write_byte(15)
						message_end()

						dist = get_distance_f(Origin, originV);
						damage = WEAPON_MISSILE_DAMAGE_EXP - (WEAPON_MISSILE_DAMAGE_EXP/WEAPON_MISSILE_DAMAGE_EXP) * dist;
						if(damage > 0.0)
						{
							ExecuteHamB(Ham_TakeDamage, pNull, iAttacker, iAttacker, damage, DMG_BURN);
						}
					}
				}
			}
			
			engfunc(EngFunc_EmitSound, iEntity, CHAN_WEAPON, SOUND_CHARGE_EXP, 0.9, ATTN_NORM, 0, PITCH_NORM);
			
			set_pev(iEntity, pev_movetype, MOVETYPE_NONE);
			set_pev(iEntity, pev_solid, SOLID_NOT);
			set_pev(iEntity, pev_iuser3, 0);
			set_pev(iEntity, pev_fuser2, get_gametime() + 3.0);
		}
	}
	
	return FMRES_IGNORED;
}

//**********************************************
//* Item (weapon) hooks.                       *
//**********************************************

	#define _call.%0(%1,%2) \
									\
	Weapon_On%0							\
	(								\
		%1, 							\
		%2,							\
									\
		get_pdata_int(%1, m_iClip, extra_offset_weapon),	\
		get_pdata_int(%1, m_iChargeReady, extra_offset_weapon), \
		GetAmmoInventory(%2, PrimaryAmmoIndex(%1))		\
	) 

public HamHook_Item_Deploy_Post(const iItem)
{
	new iPlayer; 
	
	if (!CheckItem(iItem, iPlayer))
	{
		return HAM_IGNORED;
	}
	
	_call.Deploy(iItem, iPlayer);
	return HAM_IGNORED;
}

public HamHook_Item_Holster(const iItem)
{
	new iPlayer; 
	
	if (!CheckItem(iItem, iPlayer))
	{
		return HAM_IGNORED;
	}
	
	set_pev(iPlayer, pev_viewmodel, 0);
	set_pev(iPlayer, pev_weaponmodel, 0);
	
	_call.Holster(iItem, iPlayer);
	return HAM_SUPERCEDE;
}

public HamHook_Item_WeaponIdle(const iItem)
{
	static iPlayer; 
	
	if (!CheckItem(iItem, iPlayer))
	{
		return HAM_IGNORED;
	}

	_call.Idle(iItem, iPlayer);
	return HAM_SUPERCEDE;
}

public HamHook_Item_Reload(const iItem)
{
	static iPlayer; 
	
	if (!CheckItem(iItem, iPlayer))
	{
		return HAM_IGNORED;
	}
	
	_call.Reload(iItem, iPlayer);
	return HAM_SUPERCEDE;
}

public HamHook_Item_PrimaryAttack(const iItem)
{
	static iPlayer; 
	
	if (!CheckItem(iItem, iPlayer))
	{
		return HAM_IGNORED;
	}
	
	_call.PrimaryAttack(iItem, iPlayer);
	return HAM_SUPERCEDE;
}

public HamHook_Item_SecondaryAttack(const iItem)
{
	static iPlayer; 
	
	if (!CheckItem(iItem, iPlayer))
	{
		return HAM_IGNORED;
	}
	
	_call.SecondaryAttack(iItem, iPlayer);
	return HAM_SUPERCEDE;
}

public HamHook_Item_PostFrame(const iItem)
{
	static iPlayer;
	static iClip;
	
	if (!CheckItem(iItem, iPlayer))
	{
		return HAM_IGNORED;
	}
	
	iClip = get_pdata_int(iItem, m_iClip, extra_offset_weapon); 
	
	if (get_pdata_int(iItem, m_fInReload, extra_offset_weapon))
	{
		new iPrimaryAmmoIndex	= PrimaryAmmoIndex(iItem);
		new iAmmoPrimary	= GetAmmoInventory(iPlayer, iPrimaryAmmoIndex);
		new iAmount		= min(WEAPON_MAX_CLIP - iClip, iAmmoPrimary);
		
		set_pdata_int(iItem, m_iClip, iClip + iAmount, extra_offset_weapon);
		set_pdata_int(iItem, m_fInReload, false, extra_offset_weapon);

		SetAmmoInventory(iPlayer, iPrimaryAmmoIndex, iAmmoPrimary - iAmount);
	}
	
	if (!(pev(iPlayer, pev_button) & IN_ATTACK2) && get_pdata_int(iItem, m_fInSuperBullets, extra_offset_weapon) == 1)
	{	
		Weapon_SendAnim(iPlayer, ANIM_SHOOT_B);
			
		set_pdata_float(iItem, m_flTimeWeaponIdle, 0.6, extra_offset_weapon);
		set_pdata_float(iItem, m_flNextPrimaryAttack, 0.6, extra_offset_weapon);
		set_pdata_float(iItem, m_flNextSecondaryAttack, 0.6, extra_offset_weapon);
			
		engfunc(EngFunc_EmitSound, iPlayer, CHAN_WEAPON, SOUND_SHOOT_B, 0.9, ATTN_NORM, 0, PITCH_NORM);
		
		set_pdata_int(iItem, m_fInSuperBullets, 0, extra_offset_weapon);	

		set_pdata_int(iItem, m_iClip, max(iClip-5, 0), extra_offset_weapon);
		
		CreateBall(iPlayer);
	}
	
	if (!(pev(iPlayer, pev_button) & IN_ATTACK2) && get_pdata_int(iItem, m_fInSuperBullets, extra_offset_weapon) == 2)
	{
		set_pdata_int(iItem, m_fInSuperBullets, get_pdata_int(iItem, m_fInSuperBullets, extra_offset_weapon)+1, extra_offset_weapon);
	}

	return HAM_IGNORED;
}

public HamHook_Think_Post(const iBeam)
{
	if (IsValidPev(iBeam) && IsCustomBeam(iBeam) || IsCustomBeam2(iBeam))
	{
		set_pev(iBeam, pev_flags, FL_KILLME);
	}

	return HAM_IGNORED;
}	

public HamHook_Think(const iEntity)
{
	if(!pev_valid(iEntity))
	{
		return HAM_IGNORED;
	}
	
	static Classname[32];pev(iEntity, pev_classname, Classname, sizeof(Classname));
	
	if (equal(Classname, BALL_CLASSNAME))
	{
		static Float:iFrame;pev(iEntity, pev_frame, iFrame);
		
		if (iFrame >= 10.0)iFrame=0.0;
		
		iFrame += 0.75;
		
		set_pev(iEntity, pev_frame, iFrame);
		
		set_pev(iEntity, pev_nextthink, get_gametime() + 0.050);
	}
	else if (equal(Classname, MISSILE_CLASSNAME))
	{
		static Float:iAngles[3];pev(iEntity, pev_angles, iAngles);iAngles[2] = random_float(0.0, -180.0);set_pev(iEntity, pev_angles, iAngles);
		static Float:vAngle[3];pev(iEntity, pev_vuser2, vAngle);
		static Float:iStart[3];pev(iEntity, pev_vuser1, iStart);
		static Float:iEnd[3];pev(iEntity, pev_origin, iEnd);
		static pevVictim;pevVictim = -1
		
		CreateLine(iEntity, vAngle);
	
		if (pev(iEntity, pev_fuser2) && pev(iEntity, pev_fuser2) < get_gametime())
		{
			while((pevVictim = engfunc(EngFunc_FindEntityInSphere, pevVictim, iEnd, WEAPON_MISSILE_RADIUS2)) != 0 )
			{
				if (is_user_alive(pevVictim))
				{
					if (zp_get_user_zombie(pevVictim))
					{
						//if (iRound)continue;
					
						static Float:vOrigin[3];pev(pevVictim, pev_origin, vOrigin);
			
						message_begin(MSG_BROADCAST, SVC_TEMPENTITY) 
						write_byte(TE_BLOODSPRITE)
						WRITE_COORD(vOrigin[0])
						WRITE_COORD(vOrigin[1])
						WRITE_COORD(vOrigin[2])
						write_short(iBlood[0])
						write_short(iBlood[1])
						write_byte(76)
						write_byte(14)
						message_end()
					
						ExecuteHamB(Ham_TakeDamage, pevVictim, iEntity, pev(iEntity, pev_owner), WEAPON_MISSILE_DAMAGE2, DMG_BURN);
					}
				}
			}
			
			engfunc(EngFunc_EmitSound, iEntity, CHAN_WEAPON, SOUND_CHARGE_EXP2, 0.9, ATTN_NORM, 0, PITCH_NORM);
			set_pev(iEntity, pev_iuser2, 1);
			set_pev(iEntity, pev_flags, FL_KILLME);
		}
		
		engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, iStart, 0);
		write_byte(TE_BEAMPOINTS);
		WRITE_COORD(iEnd[0]);
		WRITE_COORD(iEnd[1]);
		WRITE_COORD(iEnd[2]);
		WRITE_COORD(iStart[0]);
		WRITE_COORD(iStart[1]);
		WRITE_COORD(iStart[2]);
		write_short(iBlood[4]);
		write_byte(0);		// byte (starting frame) 
		write_byte(50);		// byte (frame rate in 0.1's) 
		write_byte(pev(iEntity, pev_iuser2) ? 25:1);		// byte (life in 0.1's) 
		write_byte(pev(iEntity, pev_iuser2) ? 200:100);		// byte (line width in 0.1's) 
		write_byte(0);		// byte (noise amplitude in 0.01's) 
		write_byte(200);		// byte,byte,byte (color) (R)
		write_byte(200);		// (G)
		write_byte(200);		// (B)
		write_byte(250);		// byte (brightness)
		write_byte(80);		// byte (scroll speed in 0.1's)
		message_end();

		set_pev(iEntity, pev_nextthink, get_gametime() + 0.090);
	}
	
	return HAM_IGNORED;
}

Weapon_Create(const Float: vecOrigin[3] = {0.0, 0.0, 0.0}, const Float: vecAngles[3] = {0.0, 0.0, 0.0})
{
	new iWeapon;

	static iszAllocStringCached;
	if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, WEAPON_REFERANCE)))
	{
		iWeapon = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
	}
	
	if (!IsValidPev(iWeapon))
	{
		return FM_NULLENT;
	}
	
	MDLL_Spawn(iWeapon);
	SET_ORIGIN(iWeapon, vecOrigin);
	
	set_pdata_int(iWeapon, m_iClip, WEAPON_MAX_CLIP, extra_offset_weapon);
	set_pdata_int(iWeapon, m_fInSuperBullets, 0, extra_offset_weapon);
	
	set_pev(iWeapon, pev_impulse, WEAPON_KEY);
	set_pev(iWeapon, pev_angles, vecAngles);
	
	Weapon_OnSpawn(iWeapon);
	
	return iWeapon;
}

Weapon_Give(const 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);
		MDLL_Touch(iWeapon, iPlayer);
		
		SetAmmoInventory(iPlayer, PrimaryAmmoIndex(iWeapon), WEAPON_DEFAULT_AMMO);
		
		return iWeapon;
	}
	
	return FM_NULLENT;
}

Player_DropWeapons(const iPlayer, const iSlot)
{
	new szWeaponName[32], iItem = get_pdata_cbase(iPlayer, m_rgpPlayerItems_CBasePlayer + iSlot, extra_offset_player);

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

		iItem = get_pdata_cbase(iItem, m_pNext, extra_offset_weapon);
	}
}

Weapon_SendAnim(const iPlayer, const iAnim)
{
	set_pev(iPlayer, pev_weaponanim, iAnim);

	MESSAGE_BEGIN(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, {0.0, 0.0, 0.0}, iPlayer);
	WRITE_BYTE(iAnim);
	WRITE_BYTE(0);
	MESSAGE_END();
}

//**********************************************
//* Muzzleflash stuff.                *
//**********************************************

#define Sprite_SetScale(%0,%1) set_pev(%0, pev_scale, %1)
#define Sprite_SetFramerate(%0,%1) set_pev(%0, pev_framerate, %1)

stock Sprite_SetTransparency(const iSprite, const iRendermode, const Float: vecColor[3], const Float: flAmt, const iFx = kRenderFxNone)
{
	set_pev(iSprite, pev_rendermode, iRendermode);
	set_pev(iSprite, pev_rendercolor, vecColor);
	set_pev(iSprite, pev_renderamt, flAmt);
	set_pev(iSprite, pev_renderfx, iFx);
}


stock Weapon_MuzzleFlash(const iPlayer, const szMuzzleSprite[], const Float: flScale, const Float: flFramerate, const Float: vecColor[3], const Float: flBrightness)
{
	if (global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < 100)
	{
		return FM_NULLENT;
	}
	
	static iSprite, iszAllocStringCached;
	if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "env_sprite")))
	{
		iSprite = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
	}
	
	if (!IsValidPev(iSprite))
	{
		return FM_NULLENT;
	}
	
	set_pev(iSprite, pev_model, szMuzzleSprite);
	set_pev(iSprite, pev_spawnflags, SF_SPRITE_ONCE);
	
	set_pev(iSprite, pev_classname, MUZZLE_CLASSNAME);
	set_pev(iSprite, pev_impulse, g_iszMuzzleKey);
	set_pev(iSprite, pev_owner, iPlayer);

	set_pev(iSprite, pev_aiment, iPlayer);
	set_pev(iSprite, pev_body, 1);
	
	Sprite_SetTransparency(iSprite, kRenderTransAdd, vecColor, flBrightness);
	Sprite_SetFramerate(iSprite, flFramerate);
	Sprite_SetScale(iSprite, flScale);
	
	MDLL_Spawn(iSprite);

	return iSprite;
}

public HamHook_Sprite_Think(const iSprite)
{
	static Float:flFrame;
	
	if (!IsValidPev(iSprite) || !IsCustomMuzzle(iSprite))
	{
		return HAM_IGNORED;
	}
	
	if (pev(iSprite, pev_frame, flFrame) && ++flFrame - 1.0 < get_pdata_float(iSprite, 35, extra_offset_weapon))
	{
		set_pev(iSprite, pev_frame, flFrame);
		
		set_pev(iSprite, pev_nextthink, get_gametime() + 0.020);
		
		return HAM_SUPERCEDE;
	}

	set_pev(iSprite, pev_flags, FL_KILLME);
	return HAM_SUPERCEDE;
}


stock Weapon_DefaultDeploy(const iPlayer, const szViewModel[], const szWeaponModel[], const iAnim, const szAnimExt[])
{
	set_pev(iPlayer, pev_viewmodel2, szViewModel);
	set_pev(iPlayer, pev_weaponmodel2, szWeaponModel);
	set_pev(iPlayer, pev_fov, 90.0);
	
	set_pdata_int(iPlayer, m_iFOV, 90, extra_offset_player);
	set_pdata_int(iPlayer, m_fResumeZoom, 0, extra_offset_player);
	set_pdata_int(iPlayer, m_iLastZoom, 90, extra_offset_player);
	
	set_pdata_string(iPlayer, m_szAnimExtention * 4, szAnimExt, -1, extra_offset_player * 4);
	
	Weapon_SendAnim(iPlayer, iAnim);
}

stock Punchangle(iPlayer, Float:iVecx = 0.0, Float:iVecy = 0.0, Float:iVecz = 0.0)
{
	static Float:iVec[3];pev(iPlayer, pev_punchangle,iVec);
	iVec[0] = iVecx;iVec[1] = iVecy;iVec[2] = iVecz
	set_pev(iPlayer, pev_punchangle, iVec);
}

stock Weapon_DrawBeam(const iPlayer, const Float:vecStart[3], const Float:vecEnd[3])
{
	if (global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < 100)
	{
		return FM_NULLENT;
	}
	
	static iBeam; iBeam = Beam_Create(WEAPON_SPRITE_LINE3, BEAM_WEIGHT);

	if (!IsValidPev(iBeam))
	{
		return FM_NULLENT;
	}
	
	Beam_PointsInit(iBeam, vecStart, vecEnd);
	Beam_SetBrightness(iBeam, BEAM_BRIGHTNESS);
	Beam_SetScrollRate(iBeam, BEAM_SCROLLRATE);
	Beam_SetColor(iBeam, BEAM_COLOR);
	Beam_SetNoise(iBeam, BEAM_NOISE);
	
	set_pev(iBeam, pev_nextthink, get_gametime() + BEAM_LIFE);
	set_pev(iBeam, pev_classname, BEAM_CLASSNAME);
	set_pev(iBeam, pev_impulse, g_iszBeamKey);
	set_pev(iBeam, pev_owner, iPlayer);
	
	return iBeam;
}

stock Weapon_DrawBeam2(const iPlayer, const Float: vecEnd[3])
{
	if (global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < 100)
	{
		return FM_NULLENT;
	}
	
	static iBeam; iBeam = Beam_Create(WEAPON_SPRITE_LINE3, BEAM_WEIGHT);

	if (!IsValidPev(iBeam))
	{
		return FM_NULLENT;
	}
	
	Beam_PointEntInit(iBeam, vecEnd, iPlayer);
	Beam_SetEndAttachment(iBeam, 1);
	Beam_SetBrightness(iBeam, BEAM_BRIGHTNESS);
	Beam_SetScrollRate(iBeam, BEAM_SCROLLRATE);
	Beam_SetColor(iBeam, BEAM_COLOR);
	Beam_SetNoise(iBeam, BEAM_NOISE);
	
	set_pev(iBeam, pev_nextthink, get_gametime() + BEAM_LIFE);
	set_pev(iBeam, pev_classname, BEAM_CLASSNAME2);
	set_pev(iBeam, pev_impulse, g_iszBeamKey2);
	set_pev(iBeam, pev_owner, iPlayer);
	
	return iBeam;
}

stock CreateMissile(const iPlayer)
{
	if (global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < 100)
	{
		return;
	}
	
	static iszAllocStringCached;
	static pEntity;
	
	static Float:Origin[3];Get_Position(iPlayer, 15.0, 0.0, 0.0, Origin);
	static Float:VecEnd[3];Get_Position(iPlayer, 8096.0, 0.0, 0.0, VecEnd);
	
	static Float:vAngle[3];pev(iPlayer,pev_v_angle,vAngle);
	static Float:Angles[3];
	
	static Float:vecMins[3];vecMins[0] = -1.0;vecMins[1] = -1.0;vecMins[2] = -1.0;
	static Float:vecMaxs[3];vecMaxs[0] = 1.0;vecMaxs[1] = 1.0;vecMaxs[2] = 1.0;
	
	Angles[0] = 360.0 - vAngle[0];
	Angles[1] = vAngle[1];
	Angles[2] = vAngle[2];
	
	if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "info_target")))
	{
		pEntity = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
	}
		
	if (pev_valid(pEntity))
	{
		set_pev(pEntity, pev_movetype, MOVETYPE_TOSS);
		set_pev(pEntity, pev_owner, iPlayer);
			
		SET_MODEL(pEntity, MODEL_MISSILE)
		SET_ORIGIN(pEntity, Origin)
	
		set_pev(pEntity, pev_classname, MISSILE_CLASSNAME);
		set_pev(pEntity, pev_solid, SOLID_TRIGGER);
		set_pev(pEntity, pev_angles, Angles);
		set_pev(pEntity, pev_gravity, 0.01);
		set_pev(pEntity, pev_vuser1, Origin);
		set_pev(pEntity, pev_vuser2, vAngle);
		set_pev(pEntity, pev_iuser2, 0);
		set_pev(pEntity, pev_iuser3, 1);
		engfunc(EngFunc_SetSize, pEntity, vecMins, vecMaxs); 
		set_pev(pEntity, pev_nextthink, get_gametime() + 0.01);
	
		static Float:Velocity[3];Get_Speed_Vector(Origin, VecEnd, 2000.0, Velocity);
		set_pev(pEntity, pev_velocity, Velocity);
	}
}

stock FindHullIntersection(const Float: vecSrc[3], &iTrace, const Float: vecMins[3], const Float: vecMaxs[3], const iEntity)
{
	new iTempTrace;
	
	new Float: flFraction;
	new Float: flThisDistance;
	
	new Float: vecEnd[3];
	new Float: vecEndPos[3];
	new Float: vecHullEnd[3];
	new Float: vecMinMaxs[2][3];
	
	new Float: flDistance = 999999.0;
	
	xs_vec_copy(vecMins, vecMinMaxs[0]);
	xs_vec_copy(vecMaxs, vecMinMaxs[1]);
	
	get_tr2(iTrace, TR_vecEndPos, vecHullEnd);
	
	xs_vec_sub(vecHullEnd, vecSrc, vecHullEnd);
	xs_vec_mul_scalar(vecHullEnd, 2.0, vecHullEnd);
	xs_vec_add(vecHullEnd, vecSrc, vecHullEnd);
	
	engfunc(EngFunc_TraceLine, vecSrc, vecHullEnd, DONT_IGNORE_MONSTERS, iEntity, (iTempTrace = create_tr2()));
	get_tr2(iTempTrace, TR_flFraction, flFraction);
	
	if (flFraction < 1.0)
	{
		free_tr2(iTrace);
		
		iTrace = iTempTrace;
		return;
	}
	
	for (new j, k, i = 0; i < 2; i++)
	{
		for (j = 0; j < 2; j++)
		{
			for (k = 0; k < 2; k++)
			{
				vecEnd[0] = vecHullEnd[0] + vecMinMaxs[i][0];
				vecEnd[1] = vecHullEnd[1] + vecMinMaxs[j][1];
				vecEnd[2] = vecHullEnd[2] + vecMinMaxs[k][2];
				
				engfunc(EngFunc_TraceLine, vecSrc, vecEnd, DONT_IGNORE_MONSTERS, iEntity, iTempTrace);
				get_tr2(iTempTrace, TR_flFraction, flFraction);
				
				if (flFraction < 1.0)
				{
					get_tr2(iTempTrace, TR_vecEndPos, vecEndPos);
					xs_vec_sub(vecEndPos, vecSrc, vecEndPos);
					
					if ((flThisDistance = xs_vec_len(vecEndPos)) < flDistance)
					{
						free_tr2(iTrace);
						
						iTrace = iTempTrace;
						flDistance = flThisDistance;
					}
				}
			}
		}
	}
}

stock CreateBall(const iPlayer)
{
	if (global_get(glb_maxEntities) - engfunc(EngFunc_NumberOfEntities) < 100)
	{
		return;
	}
	
	static iszAllocStringCached;
	static pEntity;
	static Float:iAngle[3];
	static Float:Origin[3];Get_Position(iPlayer, 15.0, 0.0, 0.0, Origin);
	static Float:VecEnd[3];Get_Position(iPlayer, 1024.0, 0.0, 0.0, VecEnd);
	
	if (iszAllocStringCached || (iszAllocStringCached = engfunc(EngFunc_AllocString, "info_target")))
	{
		pEntity = engfunc(EngFunc_CreateNamedEntity, iszAllocStringCached);
	}
		
	if (pev_valid(pEntity))
	{
		iAngle[2] = random_float(0.0, 360.0);

		set_pev(pEntity, pev_movetype, MOVETYPE_FLYMISSILE);
		set_pev(pEntity, pev_owner, iPlayer);
			
		SET_MODEL(pEntity, WEAPON_SPRITE_MISSILE)
		SET_ORIGIN(pEntity, Origin)
	
		set_pev(pEntity, pev_classname, BALL_CLASSNAME);
		set_pev(pEntity, pev_scale, 0.08);
		set_pev(pEntity, pev_mins, Float:{-0.01, -0.01, -0.01});
		set_pev(pEntity, pev_maxs, Float:{0.01, 0.01, 0.01});
		set_pev(pEntity, pev_gravity, 0.01);
		set_pev(pEntity, pev_solid, SOLID_BBOX);
		set_pev(pEntity, pev_angles, iAngle);
		set_pev(pEntity, pev_nextthink, get_gametime() + 0.01);
	
		static Float:Velocity[3];
		Get_Speed_Vector(Origin, VecEnd, 2000.0, Velocity);
		set_pev(pEntity, pev_velocity, Velocity);
				
		Sprite_SetTransparency(pEntity, kRenderTransAdd, Float:{255.0,255.0,255.0}, 200.0);
	}
}

stock CreateLine(const iEntity, const Float:vAngle[3])
{
	static Float:iVec[2][3];pev(iEntity, pev_vuser1, iVec[1]);pev(iEntity, pev_origin, iVec[0]);
	static pevVictim;pevVictim=-1
	
	if (get_distance_f(iVec[0], iVec[1]) > 50.0)
	{
		static Float:iVec2[3];
		engfunc(EngFunc_MakeVectors, vAngle);
		global_get(glb_v_forward, vAngle);
		xs_vec_mul_scalar(vAngle, 25.0, iVec2);
			
		new iCount = floatround(get_distance_f(iVec[0], iVec[1]) / 20.0);
		
		while (iCount)
		{
			xs_vec_add(iVec[1], iVec2, iVec[1]);

			while((pevVictim = engfunc(EngFunc_FindEntityInSphere, pevVictim, iVec[1], 2.0)) != 0 )
			{
				if (is_user_alive(pevVictim))
				{
					if (zp_get_user_zombie(pevVictim))
					{
						static Float:vOrigin[3];pev(pevVictim, pev_origin, vOrigin);
			
						message_begin(MSG_BROADCAST, SVC_TEMPENTITY) 
						write_byte(TE_BLOODSPRITE)
						WRITE_COORD(vOrigin[0])
						WRITE_COORD(vOrigin[1])
						WRITE_COORD(vOrigin[2])
						write_short(iBlood[0])
						write_short(iBlood[1])
						write_byte(76)
						write_byte(13)
						message_end()
					
						ExecuteHamB(Ham_TakeDamage, pevVictim, iEntity, pev(iEntity, pev_owner), WEAPON_DAMAGE_LINE, DMG_BURN);
					}
				}
			}
			
			iCount--;
		}
	}
}

stock IsWallBetweenPoints(const Float: vecStart[3], const 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));
} 

stock Get_Position(id,Float:forw, Float:right, Float:up, Float:vStart[]) 
{
	static Float:vOrigin[3], Float:vAngle[3], Float:vForward[3], Float:vRight[3], Float:vUp[3];
	
	pev(id, pev_origin, vOrigin);
	pev(id, pev_view_ofs, vUp);
	
	xs_vec_add(vOrigin, vUp, vOrigin);
	
	pev(id, pev_v_angle, vAngle);
	
	angle_vector(vAngle, ANGLEVECTOR_FORWARD, vForward);
	angle_vector(vAngle, ANGLEVECTOR_RIGHT, vRight);
	angle_vector(vAngle, ANGLEVECTOR_UP, vUp);
	
	vStart[0] = vOrigin[0] + vForward[0] * forw + vRight[0] * right + vUp[0] * up;
	vStart[1] = vOrigin[1] + vForward[1] * forw + vRight[1] * right + vUp[1] * up;
	vStart[2] = vOrigin[2] + vForward[2] * forw + vRight[2] * right + vUp[2] * up;
}

stock Get_Speed_Vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
	new_velocity[0] = origin2[0] - origin1[0]
	new_velocity[1] = origin2[1] - origin1[1]
	new_velocity[2] = origin2[2] - origin1[2]
	new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
	new_velocity[0] *= num
	new_velocity[1] *= num
	new_velocity[2] *= num
}

stock CreateKnockBack(iPlayer, Float: vecDirection[3], Float:flKnockBack)
{
	static Float:vecVelocity[3]; pev(iPlayer, pev_velocity, vecVelocity);
	if(pev(iPlayer, pev_flags) & FL_DUCKING) flKnockBack *= 0.7;
	vecVelocity[0] = vecDirection[0] * 50.0 * flKnockBack;
	vecVelocity[1] = vecDirection[1] * 50.0 * flKnockBack;
	vecVelocity[2] = 50.0;
	set_pev(iPlayer, pev_velocity, vecVelocity);
}

stock CreateExplosion(const Float:Origin[3], const Float:CordZ = 0.0, const iModel, const iScale, const iFramerate, const iFlag)
{
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY); 
	write_byte(TE_EXPLOSION); 
	WRITE_COORD(Origin[0]); 
	WRITE_COORD(Origin[1]); 
	WRITE_COORD(Origin[2] - CordZ); 
	write_short(iModel);
	write_byte(iScale); 
	write_byte(iFramerate); 
	write_byte(iFlag); 
	message_end();
}

#define BitSet(%0,%1) (%0 |= (1 << (%1 - 1)))
#define BitClear(%0,%1) (%0 &= ~(1 << (%1 - 1)))
#define BitCheck(%0,%1) (%0 & (1 << (%1 - 1)))

public client_putinserver(id)
{
	BitSet(g_bitIsConnected, id);
}

public client_disconnect(id)
{
	BitClear(g_bitIsConnected, id);
}


bool: CheckItem(const iItem, &iPlayer)
{
	if (!IsValidPev(iItem) || !IsCustomItem(iItem))
	{
		return false;
	}
	
	iPlayer = get_pdata_cbase(iItem, m_pPlayer, extra_offset_weapon);
	
	if (!IsValidPev(iPlayer) || !BitCheck(g_bitIsConnected, iPlayer))
	{
		return false;
	}
	
	return true;
}

//**********************************************
//* Weapon list update.                        *
//**********************************************

public Cmd_WeaponSelect(const iPlayer)
{
	engclient_cmd(iPlayer, WEAPON_REFERANCE);
	return PLUGIN_HANDLED;
}

public HamHook_Item_AddToPlayer(const iItem, const iPlayer)
{
	switch(pev(iItem, pev_impulse))
	{
		case 0: 
		{
			#if defined WPNLIST
			MsgHook_WeaponList(MSGID_WEAPONLIST, iItem, iPlayer);
			#endif
		}
		case WEAPON_KEY: 
		{
			#if defined WPNLIST
			MsgHook_WeaponList(MSGID_WEAPONLIST, iItem, iPlayer);
			#endif
			SetAmmoInventory(iPlayer, PrimaryAmmoIndex(iItem), pev(iItem, pev_iuser2));
		}
	}
	
	return HAM_IGNORED;
}

public MsgHook_WeaponList(const iMsgID, const iMsgDest, const iMsgEntity)
{
	static arrWeaponListData[8];
	
	if (!iMsgEntity)
	{
		new szWeaponName[32];
		get_msg_arg_string(1, szWeaponName, charsmax(szWeaponName));
		
		if (!strcmp(szWeaponName, WEAPON_REFERANCE))
		{
			for (new i, a = sizeof arrWeaponListData; i < a; i++)
			{
				arrWeaponListData[i] = get_msg_arg_int(i + 2);
			}
		}
	}
	else
	{
		if (!IsCustomItem(iMsgDest) && pev(iMsgDest, pev_impulse))
		{
			return;
		}
		
		MESSAGE_BEGIN(MSG_ONE, iMsgID, {0.0, 0.0, 0.0}, iMsgEntity);
		WRITE_STRING(IsCustomItem(iMsgDest) ? WEAPON_NAME : WEAPON_REFERANCE);
		
		for (new i, a = sizeof arrWeaponListData; i < a; i++)
		{
			WRITE_BYTE(arrWeaponListData[i]);
		}
		
		MESSAGE_END();
	}
}

//**********************************************
//* Weaponbox world model.                     *
//**********************************************

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

public FakeMeta_SetModel(const 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, m_rgpPlayerItems_CWeaponBox + i, extra_offset_weapon);
		
		if (IsValidPev(iItem) && IsCustomItem(iItem))
		{
			SET_MODEL(iEntity, MODEL_WORLD);	
			set_pev(iItem, pev_iuser2, GetAmmoInventory(pev(iEntity,pev_owner), PrimaryAmmoIndex(iItem)))
			return FMRES_SUPERCEDE;
		}
	}
	
	return FMRES_IGNORED;
}

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

//***************************

//**********************************************
//* Ammo Inventory.                            *
//**********************************************

PrimaryAmmoIndex(const iItem)
{
	return get_pdata_int(iItem, m_iPrimaryAmmoType, extra_offset_weapon);
}

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

	return get_pdata_int(iPlayer, m_rgAmmo_CBasePlayer + iAmmoIndex, extra_offset_player);
}

SetAmmoInventory(const iPlayer, const iAmmoIndex, const iAmount)
{
	if (iAmmoIndex == -1)
	{
		return 0;
	}

	set_pdata_int(iPlayer, m_rgAmmo_CBasePlayer + iAmmoIndex, iAmount, extra_offset_player);
	return 1;
}

stock Player_SetAnimation(const iPlayer, const szAnim[])
{
	   if(!is_user_alive(iPlayer))return;
		
	   #define ACT_RANGE_ATTACK1   28
	   
	   // Linux extra offsets
	   #define extra_offset_animating   4
	   
	   // 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;
	   }
   
	   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, 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);
}

PRECACHE_SOUNDS_FROM_MODEL(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);
					PRECACHE_SOUND(szSoundPath);
				}
			}
		}
	}
	
	fclose(iFile);
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1049\\ f0\\ fs16 \n\\ par }
*/
Or can you give me the script code to make by itself please...
Scopce is offline
Send a message via Yahoo to Scopce
Scopce
Junior Member
Join Date: Oct 2011
Location: ALLD
Old 04-02-2020 , 18:33   Re: Request Modified Plugin
Reply With Quote #2

up??? Somebody can help me please?
Scopce is offline
Send a message via Yahoo to Scopce
headshot910
Member
Join Date: Apr 2012
Old 04-05-2020 , 05:42   Re: Request Modified Plugin
Reply With Quote #3

Hook another spawn on player then strip weapon
__________________
Hi!
I'm here!
headshot910 is offline
Scopce
Junior Member
Join Date: Oct 2011
Location: ALLD
Old 04-10-2020 , 20:02   Re: Request Modified Plugin
Reply With Quote #4

I've been tried with cvar, but is not work....
Scopce is offline
Send a message via Yahoo to Scopce
Scopce
Junior Member
Join Date: Oct 2011
Location: ALLD
Old 04-10-2020 , 20:03   Re: Request Modified Plugin
Reply With Quote #5

I've been tried with cvar, but is not work....
Scopce is offline
Send a message via Yahoo to Scopce
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 19:25.


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