Available Turbulent's

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

Turbulent's

#1

Post by czirimbolo » 5 years ago

Another gun from CSO, can someone coverthem them please?

Code: Select all

/*THIS IS BASED ON A PLUGIN BY:asepdwa32
CODE EDITED BY RaDNoX*/

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

// ZP NATIVE
#include <zombieplague>

#define PLUGIN "CSO Turbulent Dragora By RaDNoX"
#define VERSION "1.0"
#define AUTHOR "RaDNoX"

// CONFIGURATION WEAPON
#define system_name		"turbulent"
#define system_base		"ak47"

#define DRAW_TIME		0.66
#define RELOAD_TIME		2.1

#define CSW_BASE		CSW_AK47
#define WEAPON_KEY 		11092002112

#define OLD_MODEL		"models/w_ak47.mdl"
#define ANIMEXT			"carbine"

// Configuration Extra Items
#define NAME_EXTRA_ITEMS	"CSO DraGoRa Turbulent"
#define TEAM_EXTRA_ITEMS	ZP_TEAM_HUMAN
#define COST_EXTRA_ITEMS	35

#define ENG_NULLENT		-1
#define EV_INT_WEAPONKEY	EV_INT_impulse
#define TASK_MUZZLEFLASH	102291

#define USE_STOPPED 		0
#define OFFSET_LINUX_WEAPONS 	4
#define OFFSET_LINUX 		5
#define OFFSET_WEAPONOWNER 	41
#define OFFSET_ACTIVE_ITEM 	373

#define m_fKnown		44
#define m_flNextPrimaryAttack 	46
#define m_flTimeWeaponIdle	48
#define m_iClip			51
#define m_fInReload		54
#define m_flNextAttack		83
#define write_coord_f(%1)	engfunc(EngFunc_WriteCoord,%1)

// ALL ANIM
#define ANIM_RELOAD		1
#define ANIM_DRAW		2
#define ANIM_SHOOT1		3
#define ANIM_SHOOT2		4
#define ANIM_SHOOT3		5

#define MODE_A			0
#define MODE_B			1

// All Models Of The Weapon
new V_MODEL[64] = "models/v_turbulent.mdl"
new W_MODEL[64] = "models/w_turbulent.mdl"
new P_MODEL[64] = "models/p_turbulent.mdl"
new S_MODEL[64] = "sprites/turbulent-exp.spr"

new const WeaponResources[][] =
{
	"sprites/640hud40.spr",
	"sprites/640hud162.spr"
}

new const MuzzleFlash[][] =
{
	"sprites/muzzleflash40.spr",
	"sprites/muzzleflash41.spr"
}

// You Can Add Fire Sound Here
new const Fire_Sounds[][] = { "turbulent-1.wav", "turbulent-2.wav" }


new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
new cvar_dmg, cvar_recoil, cvar_clip, cvar_spd, cvar_ammo, cvar_radius, cvar_dmg_2, cvar_trace_color
new g_MaxPlayers, g_orig_event, g_IsInPrimaryAttack, g_attack_type[33], Float:cl_pushangle[33][3]
new g_has_weapon[33], g_clip_ammo[33], g_weapon_TmpClip[33], oldweap[33], sturbulentHit
new g_Muzzleflash_Ent[2], g_Muzzleflash[33][2], g_Mode[33], g_item, g_list_variables[10]


new weapon_name_buffer[512]
new weapon_base_buffer[512]
		
const PRIMARY_WEAPONS_BIT_SUM = 
(1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<
CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
			"weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
			"weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
			"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
			"weapon_ak47", "weapon_knife", "weapon_p90" }

public plugin_init()
{
	//register_concmd("give_ak","give_item")
	
	formatex(weapon_name_buffer, sizeof(weapon_name_buffer), "weapon_%s_asep", system_name)
	formatex(weapon_base_buffer, sizeof(weapon_base_buffer), "weapon_%s", system_base)
	
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	// Event And Message
	register_event("CurWeapon", "Forward_CurrentWeapon", "be", "1=1")
	register_message(get_user_msgid("DeathMsg"), "Forward_DeathMsg")
	register_message(get_user_msgid("WeaponList"), "Forward_MessageWeapList")
	
	// Ham Forward (Entity) || Ham_Use
	RegisterHam(Ham_Use, "func_tank", "Forward_UseStationary_Post", 1)
	RegisterHam(Ham_Use, "func_tankmortar", "Forward_UseStationary_Post", 1)
	RegisterHam(Ham_Use, "func_tankrocket", "Forward_UseStationary_Post", 1)
	RegisterHam(Ham_Use, "func_tanklaser", "Forward_UseStationary_Post", 1)
	
	// Ham Forward (Entity) || Ham_TraceAttack
	RegisterHam(Ham_TraceAttack, "player", "Forward_TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "worldspawn", "Forward_TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "func_wall", "Forward_TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "func_breakable", "Forward_TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "func_door", "Forward_TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "func_door_rotating", "Forward_TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "func_rotating", "Forward_TraceAttack", 1)
	RegisterHam(Ham_TraceAttack, "func_plat", "Forward_TraceAttack", 1)
	
	// Ham Forward (Weapon)
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_base_buffer, "Weapon_PrimaryAttack")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_base_buffer, "Weapon_PrimaryAttack_Post", 1)
	RegisterHam(Ham_Item_PostFrame, weapon_base_buffer, "Weapon_ItemPostFrame")
	RegisterHam(Ham_Weapon_Reload, weapon_base_buffer, "Weapon_Reload")
	RegisterHam(Ham_Weapon_Reload, weapon_base_buffer, "Weapon_Reload_Post", 1)
	RegisterHam(Ham_Item_AddToPlayer, weapon_base_buffer, "Weapon_AddToPlayer")
	
	for(new i = 1; i < sizeof WEAPONENTNAMES; i++)
		if(WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "Weapon_Deploy_Post", 1)
		
	// Ham Forward (Player)
	RegisterHam(Ham_Killed, "player", "Forward_PlayerKilled")
	
	// Fakemeta Forward
	register_forward(FM_SetModel, "Forward_SetModel")
	register_forward(FM_PlaybackEvent, "Forward_PlaybackEvent")
	register_forward(FM_UpdateClientData, "Forward_UpdateClientData_Post", 1)
	register_forward(FM_AddToFullPack, "Forward_AddToFullPack", 1)
	register_forward(FM_CheckVisibility, "Forward_CheckVisibility")
	
	// All Some Cvar
	cvar_clip = register_cvar("turbulent_clip", "50")
	cvar_spd = register_cvar("turbulent_speed", "1.15")
	cvar_ammo = register_cvar("turbulent_ammo", "240")
	cvar_dmg = register_cvar("turbulent_damage", "8.0")
	cvar_recoil = register_cvar("turbulent_recoil", "0.62")
	cvar_dmg_2 = register_cvar("turbulent_buff_damage", "100")
	cvar_radius = register_cvar("turbulent_radius", "50")
	cvar_trace_color = register_cvar("turbulent_trace_color", "7")
	
	g_MaxPlayers = get_maxplayers()
	g_item = zp_register_extra_item(NAME_EXTRA_ITEMS, COST_EXTRA_ITEMS, TEAM_EXTRA_ITEMS)
}

public plugin_precache()
{
	formatex(weapon_name_buffer, sizeof(weapon_name_buffer), "weapon_%s_asep", system_name)
	formatex(weapon_base_buffer, sizeof(weapon_base_buffer), "weapon_%s", system_base)
	
	precache_model(V_MODEL)
	precache_model(P_MODEL)
	precache_model(W_MODEL)
	sturbulentHit = precache_model(S_MODEL)
	
	new Buffer[512]
	formatex(Buffer, sizeof(Buffer), "sprites/%s.txt", weapon_name_buffer)
	precache_generic(Buffer) 
	
	for(new i = 0; i < sizeof Fire_Sounds; i++)
		precache_sound(Fire_Sounds[i])
	for(new i = 0; i < sizeof MuzzleFlash; i++)
		precache_model(MuzzleFlash[i])
	for(new i = 0; i < sizeof WeaponResources; i++)
		precache_model(WeaponResources[i])
		
	precache_viewmodel_sound(V_MODEL)
	formatex(Buffer, sizeof(Buffer), "test_%s", system_name)
	
	register_clcmd(Buffer, "give_item") 
	register_clcmd(weapon_name_buffer, "weapon_hook")
	register_forward(FM_PrecacheEvent, "Forward_PrecacheEvent_Post", 1)
	
	g_Muzzleflash_Ent[0] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
	engfunc(EngFunc_SetModel, g_Muzzleflash_Ent[0], MuzzleFlash[0])
	set_pev(g_Muzzleflash_Ent[0], pev_scale, 0.08)
	set_pev(g_Muzzleflash_Ent[0], pev_rendermode, kRenderTransTexture)
	set_pev(g_Muzzleflash_Ent[0], pev_renderamt, 0.0)

	g_Muzzleflash_Ent[1] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
	engfunc(EngFunc_SetModel, g_Muzzleflash_Ent[1], MuzzleFlash[1])
	set_pev(g_Muzzleflash_Ent[1], pev_scale, 0.07)
	set_pev(g_Muzzleflash_Ent[1], pev_rendermode, kRenderTransTexture)
	set_pev(g_Muzzleflash_Ent[1], pev_renderamt, 0.0)
}

public plugin_natives()
{
	new Buffer[512]
	formatex(Buffer, sizeof(Buffer), "give_%s", system_name)
	register_native(Buffer, "give_item", 1) 
	formatex(Buffer, sizeof(Buffer), "remove_%s", system_name)
	register_native(Buffer, "remove_item", 1) 
}

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

	give_item(id)
}

// Reset Bitvar (Fix Bug) If You Connect Or Disconnect Server
public client_connect(id) remove_item(id)
public client_disconnect(id) remove_item(id)
public zp_user_infected_post(id) remove_item(id)
public zp_user_humanized_post(id) remove_item(id)
/* ========= START OF REGISTER HAM TO SUPPORT BOTS FUNC ========= */
new g_HamBot
public client_putinserver(id)
{
	if(!g_HamBot && is_user_bot(id))
	{
		g_HamBot = 1
		set_task(0.1, "Do_RegisterHam", id)
	}
}

public Do_RegisterHam(id)
{
	RegisterHamFromEntity(Ham_Killed, id, "Forward_PlayerKilled")
	RegisterHamFromEntity(Ham_TraceAttack, id, "Forward_TraceAttack", 1)
}

public Forward_AddToFullPack(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
{
	if(iEnt == g_Muzzleflash_Ent[0])
	{
		if(g_Muzzleflash[iHost][0] == 3)
		{
			set_es(esState, ES_RenderMode, kRenderTransAdd)
			set_es(esState, ES_RenderAmt, random_float(200.0, 255.0))
			set_es(esState, ES_Scale, random_float(0.06, 0.1))
			
			g_Muzzleflash[iHost][0] = 2
		}
		else if(g_Muzzleflash[iHost][0] == 2)
		{
			set_es(esState, ES_RenderMode, kRenderTransAdd)
			set_es(esState, ES_RenderAmt, random_float(200.0, 255.0))
			set_es(esState, ES_Scale, random_float(0.06, 0.1))
			
			g_Muzzleflash[iHost][0] = 1
			g_Muzzleflash[iHost][1] = 1
		}
		else if(g_Muzzleflash[iHost][0] == 1)
		{
			set_es(esState, ES_RenderMode, kRenderTransAdd)
			set_es(esState, ES_RenderAmt, random_float(200.0, 255.0))
			set_es(esState, ES_Scale, random_float(0.06, 0.1))
			
			g_Muzzleflash[iHost][0] = 0
		}
			
		set_es(esState, ES_Skin, iHost)
		set_es(esState, ES_Body, 1)
		set_es(esState, ES_AimEnt, iHost)
		set_es(esState, ES_MoveType, MOVETYPE_FOLLOW)
	}
	else if(iEnt == g_Muzzleflash_Ent[1])
	{
		if(g_Muzzleflash[iHost][1])
		{
			set_es(esState, ES_RenderMode, kRenderTransAdd)
			set_es(esState, ES_RenderAmt, 240.0)
			
			g_Muzzleflash[iHost][1] = 0
		}
			
		set_es(esState, ES_Skin, iHost)
		set_es(esState, ES_Body, 1)
		set_es(esState, ES_AimEnt, iHost)
		set_es(esState, ES_MoveType, MOVETYPE_FOLLOW)
	}

}

public Forward_CheckVisibility(iEntity, pSet)
{
	if(iEntity == g_Muzzleflash_Ent[0] || iEntity == g_Muzzleflash_Ent[1])
	{
		forward_return(FMV_CELL, 1)
		return FMRES_SUPERCEDE
	}
	
	return FMRES_IGNORED
}

public Forward_PrecacheEvent_Post(type, const name[])
{
	new Buffer[512]
	formatex(Buffer, sizeof(Buffer), "events/%s.sc", system_base)
	if(equal(Buffer, name, 0))
	{
		g_orig_event = get_orig_retval()
		return FMRES_HANDLED
	}
	return FMRES_IGNORED
}

public Forward_SetModel(entity, model[])
{
	if(!is_valid_ent(entity))
		return FMRES_IGNORED
	
	static szClassName[33]
	entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
		
	if(!equal(szClassName, "weaponbox"))
		return FMRES_IGNORED
	
	static iOwner
	iOwner = entity_get_edict(entity, EV_ENT_owner)
	
	if(equal(model, OLD_MODEL))
	{
		static iStoredAugID
		iStoredAugID = find_ent_by_owner(ENG_NULLENT, weapon_base_buffer, entity)
			
		if(!is_valid_ent(iStoredAugID))
			return FMRES_IGNORED

		if(g_has_weapon[iOwner])
		{
			entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, WEAPON_KEY)
			g_has_weapon[iOwner] = 0
			entity_set_model(entity, W_MODEL)
			
			return FMRES_SUPERCEDE
		}
	}
	return FMRES_IGNORED
}

public Forward_UseStationary_Post(entity, caller, activator, use_type)
{
	if(use_type == USE_STOPPED && is_user_connected(caller))
		replace_weapon_models(caller, get_user_weapon(caller))
}

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

public Forward_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
	if((eventid != g_orig_event) || !g_IsInPrimaryAttack)
		return FMRES_IGNORED
	if(!(1 <= invoker <= g_MaxPlayers))
		return FMRES_IGNORED

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

/* ================= END OF ALL FAKEMETA FORWARD ================= */
/* ================= START OF ALL MESSAGE FORWARD ================ */
public Forward_DeathMsg(msg_id, msg_dest, id)
{
	static szTruncatedWeapon[33], iAttacker, iVictim
	
	get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
	
	iAttacker = get_msg_arg_int(1)
	iVictim = get_msg_arg_int(2)
	
	if(!is_user_connected(iAttacker) || iAttacker == iVictim)
		return PLUGIN_CONTINUE
	
	if(equal(szTruncatedWeapon, system_base) && get_user_weapon(iAttacker) == CSW_BASE)
	{
		if(g_has_weapon[iAttacker])
			set_msg_arg_string(4, system_name)
	}
	return PLUGIN_CONTINUE
}
/* ================== END OF ALL MESSAGE FORWARD ================ */
/* ================== START OF ALL EVENT FORWARD ================ */
public Forward_MessageWeapList(msg_id, msg_dest, id)
{
	if(get_msg_arg_int(8) != CSW_BASE)
		return
     
	g_list_variables[2] = get_msg_arg_int(2)
	g_list_variables[3] = get_msg_arg_int(3)
	g_list_variables[4] = get_msg_arg_int(4)
	g_list_variables[5] = get_msg_arg_int(5)
	g_list_variables[6] = get_msg_arg_int(6)
	g_list_variables[7] = get_msg_arg_int(7)
	g_list_variables[8] = get_msg_arg_int(8)
	g_list_variables[9] = get_msg_arg_int(9)
}

public Forward_CurrentWeapon(id)
{
	replace_weapon_models(id, read_data(2))
     
	if(!is_user_alive(id))
		return
	if(read_data(2) != CSW_BASE || !g_has_weapon[id])
		return
     
	static Float:Speed
	if(g_has_weapon[id])
		Speed = get_pcvar_float(cvar_spd)
	
	static weapon[32], Ent
	get_weaponname(read_data(2), weapon, 31)
	Ent = find_ent_by_owner(-1, weapon, id)
	if(pev_valid(Ent))
	{
		static Float:Delay
		Delay = get_pdata_float(Ent, 46, 4) * Speed
		if(Delay > 0.0) set_pdata_float(Ent, 46, Delay, 4)
	}
}
/* ================== END OF ALL EVENT FORWARD =================== */
/* ================== START OF ALL HAM FORWARD ============== */
public Forward_PlayerKilled(id) remove_item(id)
public Forward_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
{
	if(!is_user_alive(iAttacker) || !is_user_connected(iAttacker))
		return
	if(get_user_weapon(iAttacker) != CSW_BASE || !g_has_weapon[iAttacker])
		return

	static Float:flEnd[3], Float:WallVector[3], trace_color
	get_tr2(ptr, TR_vecEndPos, flEnd)
	get_tr2(ptr, TR_vecPlaneNormal, WallVector)
	
	if(iEnt)
	{
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_DECAL)
		write_coord_f(flEnd[0])
		write_coord_f(flEnd[1])
		write_coord_f(flEnd[2])
		write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
		write_short(iEnt)
		message_end()
	}
	else
	{
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_WORLDDECAL)
		write_coord_f(flEnd[0])
		write_coord_f(flEnd[1])
		write_coord_f(flEnd[2])
		write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
		message_end()
	}
	
	if(g_Mode[iAttacker] == MODE_A)
	{
		if(!is_user_alive(iEnt)) trace_color = get_pcvar_num(cvar_trace_color)
		else if(is_user_alive(iEnt)) trace_color = 2000 // NO STREAK COLOR or Disabled
		ExecuteHamB(Ham_TakeDamage, iEnt, iAttacker, iAttacker, flDamage * get_pcvar_float(cvar_dmg), DMG_BULLET)
	}
	
	if(pev(iEnt, pev_takedamage) != DAMAGE_NO)
	{
		set_hudmessage(255, 0, 0, -1.0, 0.46, 0, 0.2, 0.2)
		show_hudmessage(iAttacker, "\         /^n+^n/         \")
	}
	
	if(trace_color < 2000)
	{
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_STREAK_SPLASH)
		engfunc(EngFunc_WriteCoord, flEnd[0])
		engfunc(EngFunc_WriteCoord, flEnd[1])
		engfunc(EngFunc_WriteCoord, flEnd[2])
		engfunc(EngFunc_WriteCoord, WallVector[0] * random_float(25.0,30.0))
		engfunc(EngFunc_WriteCoord, WallVector[1] * random_float(25.0,30.0))
		engfunc(EngFunc_WriteCoord, WallVector[2] * random_float(25.0,30.0))
		write_byte(trace_color)
		write_short(50)
		write_short(3)
		write_short(90)	
		message_end()
		
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_GUNSHOTDECAL)
		write_coord_f(flEnd[0])
		write_coord_f(flEnd[1])
		write_coord_f(flEnd[2])
		write_short(iAttacker)
		write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
		message_end()
	}
}

public Weapon_Deploy_Post(weapon_entity)
{
	static owner
	owner = fm_cs_get_weapon_ent_owner(weapon_entity)
	
	static weaponid
	weaponid = cs_get_weapon_id(weapon_entity)
	
	replace_weapon_models(owner, weaponid)
}

public Weapon_AddToPlayer(weapon_entity, id)
{
	if(!is_valid_ent(weapon_entity) || !is_user_connected(id))
		return HAM_IGNORED
	
	if(entity_get_int(weapon_entity, EV_INT_WEAPONKEY) == WEAPON_KEY)
	{
		g_has_weapon[id] = true
		entity_set_int(weapon_entity, EV_INT_WEAPONKEY, 0)
		set_weapon_list(id, weapon_name_buffer)
		
		return HAM_HANDLED
	}
	else
	{
		set_weapon_list(id, weapon_base_buffer)
	}
	
	return HAM_IGNORED
}

public Weapon_PrimaryAttack(weapon_entity)
{
	new Player = get_pdata_cbase(weapon_entity, 41, 4)
	
	if(!g_has_weapon[Player])
		return
	
	g_IsInPrimaryAttack = 1
	pev(Player,pev_punchangle,cl_pushangle[Player])
	
	g_clip_ammo[Player] = cs_get_weapon_ammo(weapon_entity)
}

public Weapon_PrimaryAttack_Post(weapon_entity)
{
	g_IsInPrimaryAttack = 0
	new Player = get_pdata_cbase(weapon_entity, 41, 4)
	
	new szClip, szAmmo
	get_user_weapon(Player, szClip, szAmmo)
	
	if(!is_user_alive(Player))
		return
		
	if(g_has_weapon[Player])
	{
		if(!g_clip_ammo[Player])
		{
			ExecuteHam(Ham_Weapon_PlayEmptySound, weapon_entity)
			return
		}
		
		new Float:push[3]
		pev(Player,pev_punchangle,push)
		xs_vec_sub(push,cl_pushangle[Player],push)
		xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
		xs_vec_add(push,cl_pushangle[Player],push)
		set_pev(Player,pev_punchangle,push)
		
		set_weapon_shoot_anim(Player)
		emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		set_task(random_float(0.001, 0.005), "Re_MuzzleFlash", Player+TASK_MUZZLEFLASH)
	}
}

public Weapon_ItemPostFrame(weapon_entity) 
{
	new id = pev(weapon_entity, pev_owner)
	if(!is_user_connected(id))
		return HAM_IGNORED
	if(!g_has_weapon[id])
		return HAM_IGNORED

	static iClipExtra
	iClipExtra = get_pcvar_num(cvar_clip)
	new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, OFFSET_LINUX)

	new iBpAmmo = cs_get_user_bpammo(id, CSW_BASE)
	new iClip = get_pdata_int(weapon_entity, m_iClip, OFFSET_LINUX_WEAPONS)

	new fInReload = get_pdata_int(weapon_entity, m_fInReload, OFFSET_LINUX_WEAPONS) 
	if(fInReload && flNextAttack <= 0.0)
	{
		new j = min(iClipExtra - iClip, iBpAmmo)
	
		set_pdata_int(weapon_entity, m_iClip, iClip + j, OFFSET_LINUX_WEAPONS)
		cs_set_user_bpammo(id, CSW_BASE, iBpAmmo-j)
		
		set_pdata_int(weapon_entity, m_fInReload, 0, OFFSET_LINUX_WEAPONS)
		fInReload = 0
	}
	else if(!fInReload && !get_pdata_int(weapon_entity, 74, 4))
	{
		if(!iClip)
			return HAM_IGNORED
			
		if(get_pdata_float(id, 83, 5) <= 0.0 && get_pdata_float(weapon_entity, 46, 4) <= 0.0 ||
		get_pdata_float(weapon_entity, 47, 4) <= 0.0 || get_pdata_float(weapon_entity, 48, 4) <= 0.0)
		{
			if(pev(id, pev_button) & IN_ATTACK)
			{
				if(g_Mode[id] == MODE_B)
					Shoot_Special(id)
			}
			else if(pev(id, pev_button) & IN_ATTACK2)
			{
				set_turbulent_zoom(id, 0)
				set_weapons_timeidle(id, CSW_BASE, 0.4)
				set_player_nextattackx(id, 0.4)
			}
		}
	}
	
	return HAM_IGNORED
}

public Weapon_Reload(weapon_entity) 
{
	new id = pev(weapon_entity, pev_owner)
	if(!is_user_connected(id))
		return HAM_IGNORED
	if(!g_has_weapon[id])
		return HAM_IGNORED
	static iClipExtra
	if(g_has_weapon[id])
		iClipExtra = get_pcvar_num(cvar_clip)

	g_weapon_TmpClip[id] = -1

	new iBpAmmo = cs_get_user_bpammo(id, CSW_BASE)
	new iClip = get_pdata_int(weapon_entity, m_iClip, OFFSET_LINUX_WEAPONS)

	if(iBpAmmo <= 0)
		return HAM_SUPERCEDE

	if(iClip >= iClipExtra)
		return HAM_SUPERCEDE

	g_weapon_TmpClip[id] = iClip

	return HAM_IGNORED
}

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

	if(!g_has_weapon[id])
		return HAM_IGNORED
	if(g_weapon_TmpClip[id] == -1)
		return HAM_IGNORED
	
	set_pdata_int(weapon_entity, m_iClip, g_weapon_TmpClip[id], OFFSET_LINUX_WEAPONS)
	set_pdata_float(weapon_entity, m_flTimeWeaponIdle, RELOAD_TIME, OFFSET_LINUX_WEAPONS)
	set_pdata_float(id, m_flNextAttack, RELOAD_TIME, OFFSET_LINUX)
	set_pdata_int(weapon_entity, m_fInReload, 1, OFFSET_LINUX_WEAPONS)
	
	set_weapon_anim(id, ANIM_RELOAD)
	set_pdata_string(id, (492) * 4, ANIMEXT, -1 , 20)
	set_turbulent_zoom(id, 1)
	
	return HAM_IGNORED
}

/* ===================== END OF ALL HAM FORWARD ====================== */
/* ================= START OF OTHER PUBLIC FUNCTION  ================= */
public give_item(id)
{
	//if (!zp_get_user_zombie(id)) {
		drop_weapons(id, 1)
		new iWeapon = fm_give_item(id, weapon_base_buffer)
		if(iWeapon > 0)
		{
			cs_set_weapon_ammo(iWeapon, get_pcvar_num(cvar_clip))
			cs_set_user_bpammo(id, CSW_BASE, get_pcvar_num(cvar_ammo))
			emit_sound(id, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM,0,PITCH_NORM)
			
			set_weapon_anim(id, ANIM_DRAW)
			set_pdata_float(id, m_flNextAttack, DRAW_TIME, OFFSET_LINUX)
			
			set_weapon_list(id, weapon_name_buffer)
			set_pdata_string(id, (492) * 4, ANIMEXT, -1 , 20)
			set_pdata_int(iWeapon, 74, MODE_A)
		}
		
		g_has_weapon[id] = true
		g_Mode[id] = MODE_A
		remove_bitvar(id)
	//}
}

public remove_item(id)
{
	g_has_weapon[id] = false
	g_Mode[id] = MODE_A
	remove_bitvar(id)
}

public remove_bitvar(id)
{
	g_attack_type[id] = 0
	g_Muzzleflash[id][0] = 0
	g_Muzzleflash[id][1] = 0
}

public weapon_hook(id)
{
	engclient_cmd(id, weapon_base_buffer)
	return PLUGIN_HANDLED
}

public replace_weapon_models(id, weaponid)
{
	if(weaponid != CSW_BASE)
	{
		if(g_has_weapon[id])
		{
			remove_bitvar(id)
			set_turbulent_zoom(id, 1)
		}
	}
	
	switch(weaponid)
	{
		case CSW_BASE:
		{
			if(g_has_weapon[id])
			{
				set_pev(id, pev_viewmodel2, V_MODEL)
				set_pev(id, pev_weaponmodel2, P_MODEL)
				
				if(oldweap[id] != CSW_BASE) 
				{
					set_weapon_anim(id, ANIM_DRAW)
					set_player_nextattackx(id, DRAW_TIME)
					set_weapons_timeidle(id, CSW_BASE, DRAW_TIME)
					set_weapon_list(id, weapon_name_buffer)
					set_pdata_string(id, (492) * 4, ANIMEXT, -1 , 20)
				}
			}
		}
	}
	
	oldweap[id] = weaponid
}

public Shoot_Special(id)
{
	if(!is_user_alive(id) || !is_user_connected(id))
		return
		
	new szClip, szWeapId
	szWeapId = get_user_weapon(id, szClip)
	if(szWeapId != CSW_BASE || !g_has_weapon[id] || !szClip)
		return
	
	g_Muzzleflash[id][0] = 3
	set_task(random_float(0.001, 0.005), "Re_MuzzleFlash", id+TASK_MUZZLEFLASH)
	
	static Float:PunchAngles[3]
	PunchAngles[0] = -5.0
	PunchAngles[1] = -2.5
	PunchAngles[2] = -2.5
	set_pev(id, pev_punchangle, PunchAngles)
	
	set_weapon_shoot_anim(id)
	emit_sound(id, CHAN_WEAPON, Fire_Sounds[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
	
	new Float:fStart[3], Float:originF[3]
	new target, body
	
	fm_get_aim_origin(id, originF)
	get_user_aiming(id, target, body)
	
	pev(id, pev_origin, fStart)
	engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fStart, 0)
	write_byte(TE_SPRITE)
	engfunc(EngFunc_WriteCoord, originF[0])
	engfunc(EngFunc_WriteCoord, originF[1])
	engfunc(EngFunc_WriteCoord, originF[2] + 20.0)
	write_short(sturbulentHit)
	write_byte(10)
	write_byte(240)
	message_end()
	
	new a = FM_NULLENT
	while((a = find_ent_in_sphere(a, originF, float(get_pcvar_num(cvar_radius)))) != 0)
	{
		if(id == a)
			continue
	
		if(pev(a, pev_takedamage) != DAMAGE_NO)
			ExecuteHamB(Ham_TakeDamage, a, 0, id, float(get_pcvar_num(cvar_dmg_2)), DMG_BULLET)
	}
	
	if(!is_user_alive(target))
	{
		static Classname[32]
		pev(target, pev_classname, Classname, sizeof(Classname))
		
		if(equal(Classname, "func_breakable"))
			ExecuteHamB(Ham_TakeDamage, target, 0, 0, float(get_pcvar_num(cvar_dmg_2)), DMG_GENERIC)
	}
	else if(is_user_alive(target) && is_user_connected(target) && zp_get_user_zombie(target))
	{
		static Float:MyOrigin[3]
		pev(id, pev_origin, MyOrigin)
		hook_ent2(target, MyOrigin, 40.0, 2)
		ExecuteHamB(Ham_TakeDamage, target, 0, id, float(get_pcvar_num(cvar_dmg_2))*0.75, DMG_BULLET)
	}
	
	static entity_weapon
	entity_weapon = find_ent_by_owner(ENG_NULLENT, weapon_base_buffer, id)
	
	if(!pev_valid(entity_weapon))
		return
	
	cs_set_weapon_ammo(entity_weapon, szClip - 1)
	set_player_nextattackx(id, 0.7)
	set_weapons_timeidle(id, CSW_BASE, 0.7)
}

public set_weapon_shoot_anim(id)
{
	if(!g_attack_type[id])
	{
		set_weapon_anim(id, ANIM_SHOOT1)
		g_attack_type[id] = 1
	}
	else if(g_attack_type[id] == 1)
	{
		set_weapon_anim(id, ANIM_SHOOT2)
		g_attack_type[id] = 2
	}
	else if(g_attack_type[id] == 2)
	{
		set_weapon_anim(id, ANIM_SHOOT3)
		g_attack_type[id] = 0
	}
}

public Re_MuzzleFlash(id)
{
	id -= TASK_MUZZLEFLASH

	if(!is_user_alive(id) || !is_user_connected(id))
		return
	if(get_user_weapon(id) != CSW_BASE || !g_has_weapon[id])
		return
	
	if(g_Mode[id] == MODE_A) g_Muzzleflash[id][0] = true
	else if(g_Mode[id] == MODE_B) g_Muzzleflash[id][1] = true
}


stock set_turbulent_zoom(id, const reset = 0)
{
	if(reset == 1)
	{
		set_fov(id)
		g_Mode[id] = MODE_A
	}
	else if(reset == 0)
	{
		if(g_Mode[id] == MODE_A)
		{
			set_fov(id, 80)
			g_Mode[id] = MODE_B
		}
		else if(g_Mode[id] == MODE_B)
		{
			set_fov(id)
			g_Mode[id] = MODE_A
		}
	}
}

stock set_fov(id, fov = 90)
{
	message_begin(MSG_ONE, get_user_msgid("SetFOV"), {0,0,0}, id)
	write_byte(fov)
	message_end()
}

stock set_weapon_list(id, const weapon_name[])
{
	message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0,0,0}, id)
	write_string(weapon_name)
	write_byte(g_list_variables[2])
	write_byte(g_list_variables[3])
	write_byte(g_list_variables[4])
	write_byte(g_list_variables[5])
	write_byte(g_list_variables[6])
	write_byte(g_list_variables[7])
	write_byte(g_list_variables[8])
	write_byte(g_list_variables[9])
	message_end()
}

stock hook_ent2(ent, Float:VicOrigin[3], Float:speed, type)
{
	static Float:fl_Velocity[3]
	static Float:EntOrigin[3]
	
	pev(ent, pev_origin, EntOrigin)
	static Float:distance_f
	distance_f = 100.0
	
	new Float:fl_Time = distance_f / speed
	if(type == 1)
	{
		fl_Velocity[0] = ((VicOrigin[0] - EntOrigin[0]) / fl_Time) * 1.5
		fl_Velocity[1] = ((VicOrigin[1] - EntOrigin[1]) / fl_Time) * 1.5
		fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time		
	}
	else if(type == 2)
	{
		fl_Velocity[0] = ((EntOrigin[0] - VicOrigin[0]) / fl_Time) * 1.5
		fl_Velocity[1] = ((EntOrigin[1] - VicOrigin[1]) / fl_Time) * 1.5
		fl_Velocity[2] = (EntOrigin[2] - VicOrigin[2]) / fl_Time
	}
	
	entity_set_vector(ent, EV_VEC_velocity, fl_Velocity)
}

stock drop_weapons(id, dropwhat)
{
	static weapons[32], num = 0, i, weaponid
	get_user_weapons(id, weapons, num)
     
	for (i = 0; i < num; i++)
	{
		weaponid = weapons[i]
          
		if(dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
		{
			static wname[32]
			get_weaponname(weaponid, wname, sizeof wname - 1)
			engclient_cmd(id, "drop", wname)
		}
	}
}

stock set_player_nextattackx(id, Float:nexttime)
{
	if(!is_user_alive(id))
		return
		
	set_pdata_float(id, m_flNextAttack, nexttime, 5)
}

stock set_weapons_timeidle(id, WeaponId ,Float:TimeIdle)
{
	if(!is_user_alive(id))
		return
		
	static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
	if(!pev_valid(entwpn)) 
		return
		
	set_pdata_float(entwpn, 46, TimeIdle, OFFSET_LINUX_WEAPONS)
	set_pdata_float(entwpn, 47, TimeIdle, OFFSET_LINUX_WEAPONS)
	set_pdata_float(entwpn, 48, TimeIdle + 1.0, OFFSET_LINUX_WEAPONS)
}

stock set_weapons_timeidlex(id, Float:TimeIdle, Float:Idle)
{
	new entwpn = fm_get_user_weapon_entity(id, CSW_BASE)
	if(!pev_valid(entwpn)) 
		return
	
	set_pdata_float(entwpn, 46, TimeIdle, 4)
	set_pdata_float(entwpn, 47, TimeIdle, 4)
	set_pdata_float(entwpn, 48, Idle, 4)
}

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

stock precache_viewmodel_sound(const model[]) 
{
	new file, i, k
	if((file = fopen(model, "rt")))
	{
		new szsoundpath[64], NumSeq, SeqID, Event, NumEvents, EventID
		fseek(file, 164, SEEK_SET)
		fread(file, NumSeq, BLOCK_INT)
		fread(file, SeqID, BLOCK_INT)
		
		for(i = 0; i < NumSeq; i++)
		{
			fseek(file, SeqID + 48 + 176 * i, SEEK_SET)
			fread(file, NumEvents, BLOCK_INT)
			fread(file, EventID, BLOCK_INT)
			fseek(file, EventID + 176 * i, SEEK_SET)
			
			
			for(k = 0; k < NumEvents; k++)
			{
				fseek(file, EventID + 4 + 76 * k, SEEK_SET)
				fread(file, Event, BLOCK_INT)
				fseek(file, 4, SEEK_CUR)
				
				if(Event != 5004)
					continue
				
				fread_blocks(file, szsoundpath, 64, BLOCK_CHAR)
				
				if(strlen(szsoundpath))
				{
					strtolower(szsoundpath)
					engfunc(EngFunc_PrecacheSound, szsoundpath)
				}
			}
		}
	}
	fclose(file)
}

stock fm_cs_get_weapon_ent_owner(ent)
{
	return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
}


/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
*/
Image

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

#2

Post by Night Fury » 5 years ago

  1. /*THIS IS BASED ON A PLUGIN BY:asepdwa32
  2. CODE EDITED BY RaDNoX*/
  3.  
  4. #include <zombie_escape>
  5. #include <engine>
  6. #include <fakemeta_util>
  7. #include <cstrike>
  8. #include <xs>
  9.  
  10. #define PLUGIN "CSO Turbulent Dragora By RaDNoX"
  11. #define VERSION "1.0"
  12. #define AUTHOR "RaDNoX"
  13.  
  14. // CONFIGURATION WEAPON
  15. #define system_name     "turbulent"
  16. #define system_base     "ak47"
  17.  
  18. #define DRAW_TIME       0.66
  19. #define RELOAD_TIME     2.1
  20.  
  21. #define CSW_BASE        CSW_AK47
  22. #define WEAPON_KEY      11092002112
  23.  
  24. #define OLD_MODEL       "models/w_ak47.mdl"
  25. #define ANIMEXT         "carbine"
  26.  
  27. // Configuration Extra Items
  28. #define NAME_EXTRA_ITEMS    "CSO DraGoRa Turbulent"
  29. #define COST_EXTRA_ITEMS    35
  30.  
  31. #define ENG_NULLENT     -1
  32. #define EV_INT_WEAPONKEY    EV_INT_impulse
  33. #define TASK_MUZZLEFLASH    102291
  34.  
  35. #define USE_STOPPED         0
  36. #define OFFSET_LINUX_WEAPONS    4
  37. #define OFFSET_LINUX        5
  38. #define OFFSET_WEAPONOWNER  41
  39. #define OFFSET_ACTIVE_ITEM  373
  40.  
  41. #define m_fKnown        44
  42. #define m_flNextPrimaryAttack   46
  43. #define m_flTimeWeaponIdle  48
  44. #define m_iClip         51
  45. #define m_fInReload     54
  46. #define m_flNextAttack      83
  47. #define write_coord_f(%1)   engfunc(EngFunc_WriteCoord,%1)
  48.  
  49. // ALL ANIM
  50. #define ANIM_RELOAD     1
  51. #define ANIM_DRAW       2
  52. #define ANIM_SHOOT1     3
  53. #define ANIM_SHOOT2     4
  54. #define ANIM_SHOOT3     5
  55.  
  56. #define MODE_A          0
  57. #define MODE_B          1
  58.  
  59. // All Models Of The Weapon
  60. new V_MODEL[64] = "models/v_turbulent.mdl"
  61. new W_MODEL[64] = "models/w_turbulent.mdl"
  62. new P_MODEL[64] = "models/p_turbulent.mdl"
  63. new S_MODEL[64] = "sprites/turbulent-exp.spr"
  64.  
  65. new const WeaponResources[][] =
  66. {
  67.     "sprites/640hud40.spr",
  68.     "sprites/640hud162.spr"
  69. }
  70.  
  71. new const MuzzleFlash[][] =
  72. {
  73.     "sprites/muzzleflash40.spr",
  74.     "sprites/muzzleflash41.spr"
  75. }
  76.  
  77. // You Can Add Fire Sound Here
  78. new const Fire_Sounds[][] = { "turbulent-1.wav", "turbulent-2.wav" }
  79.  
  80.  
  81. new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
  82. new cvar_dmg, cvar_recoil, cvar_clip, cvar_spd, cvar_ammo, cvar_radius, cvar_dmg_2, cvar_trace_color
  83. new g_MaxPlayers, g_orig_event, g_IsInPrimaryAttack, g_attack_type[33], Float:cl_pushangle[33][3]
  84. new g_has_weapon[33], g_clip_ammo[33], g_weapon_TmpClip[33], oldweap[33], sturbulentHit
  85. new g_Muzzleflash_Ent[2], g_Muzzleflash[33][2], g_Mode[33], g_item, g_list_variables[10]
  86.  
  87.  
  88. new weapon_name_buffer[512]
  89. new weapon_base_buffer[512]
  90.        
  91. const PRIMARY_WEAPONS_BIT_SUM =
  92. (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<
  93. CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
  94. new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
  95.             "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
  96.             "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
  97.             "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
  98.             "weapon_ak47", "weapon_knife", "weapon_p90" }
  99.  
  100. public plugin_init()
  101. {
  102.     //register_concmd("give_ak","give_item")
  103.    
  104.     formatex(weapon_name_buffer, sizeof(weapon_name_buffer), "weapon_%s_asep", system_name)
  105.     formatex(weapon_base_buffer, sizeof(weapon_base_buffer), "weapon_%s", system_base)
  106.    
  107.     register_plugin(PLUGIN, VERSION, AUTHOR)
  108.    
  109.     // Event And Message
  110.     register_event("CurWeapon", "Forward_CurrentWeapon", "be", "1=1")
  111.     register_message(get_user_msgid("DeathMsg"), "Forward_DeathMsg")
  112.     register_message(get_user_msgid("WeaponList"), "Forward_MessageWeapList")
  113.    
  114.     // Ham Forward (Entity) || Ham_Use
  115.     RegisterHam(Ham_Use, "func_tank", "Forward_UseStationary_Post", 1)
  116.     RegisterHam(Ham_Use, "func_tankmortar", "Forward_UseStationary_Post", 1)
  117.     RegisterHam(Ham_Use, "func_tankrocket", "Forward_UseStationary_Post", 1)
  118.     RegisterHam(Ham_Use, "func_tanklaser", "Forward_UseStationary_Post", 1)
  119.    
  120.     // Ham Forward (Entity) || Ham_TraceAttack
  121.     RegisterHam(Ham_TraceAttack, "player", "Forward_TraceAttack", 1)
  122.     RegisterHam(Ham_TraceAttack, "worldspawn", "Forward_TraceAttack", 1)
  123.     RegisterHam(Ham_TraceAttack, "func_wall", "Forward_TraceAttack", 1)
  124.     RegisterHam(Ham_TraceAttack, "func_breakable", "Forward_TraceAttack", 1)
  125.     RegisterHam(Ham_TraceAttack, "func_door", "Forward_TraceAttack", 1)
  126.     RegisterHam(Ham_TraceAttack, "func_door_rotating", "Forward_TraceAttack", 1)
  127.     RegisterHam(Ham_TraceAttack, "func_rotating", "Forward_TraceAttack", 1)
  128.     RegisterHam(Ham_TraceAttack, "func_plat", "Forward_TraceAttack", 1)
  129.    
  130.     // Ham Forward (Weapon)
  131.     RegisterHam(Ham_Weapon_PrimaryAttack, weapon_base_buffer, "Weapon_PrimaryAttack")
  132.     RegisterHam(Ham_Weapon_PrimaryAttack, weapon_base_buffer, "Weapon_PrimaryAttack_Post", 1)
  133.     RegisterHam(Ham_Item_PostFrame, weapon_base_buffer, "Weapon_ItemPostFrame")
  134.     RegisterHam(Ham_Weapon_Reload, weapon_base_buffer, "Weapon_Reload")
  135.     RegisterHam(Ham_Weapon_Reload, weapon_base_buffer, "Weapon_Reload_Post", 1)
  136.     RegisterHam(Ham_Item_AddToPlayer, weapon_base_buffer, "Weapon_AddToPlayer")
  137.    
  138.     for(new i = 1; i < sizeof WEAPONENTNAMES; i++)
  139.         if(WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "Weapon_Deploy_Post", 1)
  140.        
  141.     // Ham Forward (Player)
  142.     RegisterHam(Ham_Killed, "player", "Forward_PlayerKilled")
  143.    
  144.     // Fakemeta Forward
  145.     register_forward(FM_SetModel, "Forward_SetModel")
  146.     register_forward(FM_PlaybackEvent, "Forward_PlaybackEvent")
  147.     register_forward(FM_UpdateClientData, "Forward_UpdateClientData_Post", 1)
  148.     register_forward(FM_AddToFullPack, "Forward_AddToFullPack", 1)
  149.     register_forward(FM_CheckVisibility, "Forward_CheckVisibility")
  150.    
  151.     // All Some Cvar
  152.     cvar_clip = register_cvar("turbulent_clip", "50")
  153.     cvar_spd = register_cvar("turbulent_speed", "1.15")
  154.     cvar_ammo = register_cvar("turbulent_ammo", "240")
  155.     cvar_dmg = register_cvar("turbulent_damage", "8.0")
  156.     cvar_recoil = register_cvar("turbulent_recoil", "0.62")
  157.     cvar_dmg_2 = register_cvar("turbulent_buff_damage", "100")
  158.     cvar_radius = register_cvar("turbulent_radius", "50")
  159.     cvar_trace_color = register_cvar("turbulent_trace_color", "7")
  160.    
  161.     g_MaxPlayers = get_member_game(m_nMaxPlayers)
  162.     g_item = ze_register_item(NAME_EXTRA_ITEMS, COST_EXTRA_ITEMS, 0)
  163. }
  164.  
  165. public plugin_precache()
  166. {
  167.     formatex(weapon_name_buffer, sizeof(weapon_name_buffer), "weapon_%s_asep", system_name)
  168.     formatex(weapon_base_buffer, sizeof(weapon_base_buffer), "weapon_%s", system_base)
  169.    
  170.     precache_model(V_MODEL)
  171.     precache_model(P_MODEL)
  172.     precache_model(W_MODEL)
  173.     sturbulentHit = precache_model(S_MODEL)
  174.    
  175.     new Buffer[512]
  176.     formatex(Buffer, sizeof(Buffer), "sprites/%s.txt", weapon_name_buffer)
  177.     precache_generic(Buffer)
  178.    
  179.     for(new i = 0; i < sizeof Fire_Sounds; i++)
  180.         precache_sound(Fire_Sounds[i])
  181.     for(new i = 0; i < sizeof MuzzleFlash; i++)
  182.         precache_model(MuzzleFlash[i])
  183.     for(new i = 0; i < sizeof WeaponResources; i++)
  184.         precache_model(WeaponResources[i])
  185.        
  186.     precache_viewmodel_sound(V_MODEL)
  187.     formatex(Buffer, sizeof(Buffer), "test_%s", system_name)
  188.    
  189.     register_clcmd(Buffer, "give_item")
  190.     register_clcmd(weapon_name_buffer, "weapon_hook")
  191.     register_forward(FM_PrecacheEvent, "Forward_PrecacheEvent_Post", 1)
  192.    
  193.     g_Muzzleflash_Ent[0] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
  194.     engfunc(EngFunc_SetModel, g_Muzzleflash_Ent[0], MuzzleFlash[0])
  195.     set_pev(g_Muzzleflash_Ent[0], pev_scale, 0.08)
  196.     set_pev(g_Muzzleflash_Ent[0], pev_rendermode, kRenderTransTexture)
  197.     set_pev(g_Muzzleflash_Ent[0], pev_renderamt, 0.0)
  198.  
  199.     g_Muzzleflash_Ent[1] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
  200.     engfunc(EngFunc_SetModel, g_Muzzleflash_Ent[1], MuzzleFlash[1])
  201.     set_pev(g_Muzzleflash_Ent[1], pev_scale, 0.07)
  202.     set_pev(g_Muzzleflash_Ent[1], pev_rendermode, kRenderTransTexture)
  203.     set_pev(g_Muzzleflash_Ent[1], pev_renderamt, 0.0)
  204. }
  205.  
  206. public plugin_natives()
  207. {
  208.     new Buffer[512]
  209.     formatex(Buffer, sizeof(Buffer), "give_%s", system_name)
  210.     register_native(Buffer, "give_item", 1)
  211.     formatex(Buffer, sizeof(Buffer), "remove_%s", system_name)
  212.     register_native(Buffer, "remove_item", 1)
  213. }
  214.  
  215. public ze_select_item_pre(id, itemid)
  216. {
  217.     if(itemid != g_item)
  218.         return ZE_ITEM_AVAILABLE
  219.  
  220.     if (ze_is_user_zombie(id))
  221.         return ZE_ITEM_DONT_SHOW
  222.  
  223.     return ZE_ITEM_AVAILABLE
  224.  
  225. }
  226.  
  227. public ze_select_item_post(id, itemid)
  228. {
  229.     if(itemid != g_item)
  230.         return
  231.  
  232.     give_item(id)
  233. }
  234.  
  235. // Reset Bitvar (Fix Bug) If You Connect Or Disconnect Server
  236. public client_connect(id) remove_item(id)
  237. public client_disconnected(id) remove_item(id)
  238. public ze_user_infected(id) remove_item(id)
  239. public ze_user_humanized(id) remove_item(id)
  240. /* ========= START OF REGISTER HAM TO SUPPORT BOTS FUNC ========= */
  241. new g_HamBot
  242. public client_putinserver(id)
  243. {
  244.     if(!g_HamBot && is_user_bot(id))
  245.     {
  246.         g_HamBot = 1
  247.         set_task(0.1, "Do_RegisterHam", id)
  248.     }
  249. }
  250.  
  251. public Do_RegisterHam(id)
  252. {
  253.     RegisterHamFromEntity(Ham_Killed, id, "Forward_PlayerKilled")
  254.     RegisterHamFromEntity(Ham_TraceAttack, id, "Forward_TraceAttack", 1)
  255. }
  256.  
  257. public Forward_AddToFullPack(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
  258. {
  259.     if(iEnt == g_Muzzleflash_Ent[0])
  260.     {
  261.         if(g_Muzzleflash[iHost][0] == 3)
  262.         {
  263.             set_es(esState, ES_RenderMode, kRenderTransAdd)
  264.             set_es(esState, ES_RenderAmt, random_float(200.0, 255.0))
  265.             set_es(esState, ES_Scale, random_float(0.06, 0.1))
  266.            
  267.             g_Muzzleflash[iHost][0] = 2
  268.         }
  269.         else if(g_Muzzleflash[iHost][0] == 2)
  270.         {
  271.             set_es(esState, ES_RenderMode, kRenderTransAdd)
  272.             set_es(esState, ES_RenderAmt, random_float(200.0, 255.0))
  273.             set_es(esState, ES_Scale, random_float(0.06, 0.1))
  274.            
  275.             g_Muzzleflash[iHost][0] = 1
  276.             g_Muzzleflash[iHost][1] = 1
  277.         }
  278.         else if(g_Muzzleflash[iHost][0] == 1)
  279.         {
  280.             set_es(esState, ES_RenderMode, kRenderTransAdd)
  281.             set_es(esState, ES_RenderAmt, random_float(200.0, 255.0))
  282.             set_es(esState, ES_Scale, random_float(0.06, 0.1))
  283.            
  284.             g_Muzzleflash[iHost][0] = 0
  285.         }
  286.            
  287.         set_es(esState, ES_Skin, iHost)
  288.         set_es(esState, ES_Body, 1)
  289.         set_es(esState, ES_AimEnt, iHost)
  290.         set_es(esState, ES_MoveType, MOVETYPE_FOLLOW)
  291.     }
  292.     else if(iEnt == g_Muzzleflash_Ent[1])
  293.     {
  294.         if(g_Muzzleflash[iHost][1])
  295.         {
  296.             set_es(esState, ES_RenderMode, kRenderTransAdd)
  297.             set_es(esState, ES_RenderAmt, 240.0)
  298.            
  299.             g_Muzzleflash[iHost][1] = 0
  300.         }
  301.            
  302.         set_es(esState, ES_Skin, iHost)
  303.         set_es(esState, ES_Body, 1)
  304.         set_es(esState, ES_AimEnt, iHost)
  305.         set_es(esState, ES_MoveType, MOVETYPE_FOLLOW)
  306.     }
  307.  
  308. }
  309.  
  310. public Forward_CheckVisibility(iEntity, pSet)
  311. {
  312.     if(iEntity == g_Muzzleflash_Ent[0] || iEntity == g_Muzzleflash_Ent[1])
  313.     {
  314.         forward_return(FMV_CELL, 1)
  315.         return FMRES_SUPERCEDE
  316.     }
  317.    
  318.     return FMRES_IGNORED
  319. }
  320.  
  321. public Forward_PrecacheEvent_Post(type, const name[])
  322. {
  323.     new Buffer[512]
  324.     formatex(Buffer, sizeof(Buffer), "events/%s.sc", system_base)
  325.     if(equal(Buffer, name, 0))
  326.     {
  327.         g_orig_event = get_orig_retval()
  328.         return FMRES_HANDLED
  329.     }
  330.     return FMRES_IGNORED
  331. }
  332.  
  333. public Forward_SetModel(entity, model[])
  334. {
  335.     if(!is_valid_ent(entity))
  336.         return FMRES_IGNORED
  337.    
  338.     static szClassName[33]
  339.     entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
  340.        
  341.     if(!equal(szClassName, "weaponbox"))
  342.         return FMRES_IGNORED
  343.    
  344.     static iOwner
  345.     iOwner = entity_get_edict(entity, EV_ENT_owner)
  346.    
  347.     if(equal(model, OLD_MODEL))
  348.     {
  349.         static iStoredAugID
  350.         iStoredAugID = find_ent_by_owner(ENG_NULLENT, weapon_base_buffer, entity)
  351.            
  352.         if(!is_valid_ent(iStoredAugID))
  353.             return FMRES_IGNORED
  354.  
  355.         if(g_has_weapon[iOwner])
  356.         {
  357.             entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, WEAPON_KEY)
  358.             g_has_weapon[iOwner] = 0
  359.             entity_set_model(entity, W_MODEL)
  360.            
  361.             return FMRES_SUPERCEDE
  362.         }
  363.     }
  364.     return FMRES_IGNORED
  365. }
  366.  
  367. public Forward_UseStationary_Post(entity, caller, activator, use_type)
  368. {
  369.     if(use_type == USE_STOPPED && is_user_connected(caller))
  370.         replace_weapon_models(caller, get_user_weapon(caller))
  371. }
  372.  
  373. public Forward_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
  374. {
  375.     if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_BASE || !g_has_weapon[Player]))
  376.         return FMRES_IGNORED
  377.    
  378.     set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
  379.     return FMRES_HANDLED
  380. }
  381.  
  382. public Forward_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
  383. {
  384.     if((eventid != g_orig_event) || !g_IsInPrimaryAttack)
  385.         return FMRES_IGNORED
  386.     if(!(1 <= invoker <= g_MaxPlayers))
  387.         return FMRES_IGNORED
  388.  
  389.     playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
  390.     return FMRES_SUPERCEDE
  391. }
  392.  
  393. /* ================= END OF ALL FAKEMETA FORWARD ================= */
  394. /* ================= START OF ALL MESSAGE FORWARD ================ */
  395. public Forward_DeathMsg(msg_id, msg_dest, id)
  396. {
  397.     static szTruncatedWeapon[33], iAttacker, iVictim
  398.    
  399.     get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
  400.    
  401.     iAttacker = get_msg_arg_int(1)
  402.     iVictim = get_msg_arg_int(2)
  403.    
  404.     if(!is_user_connected(iAttacker) || iAttacker == iVictim)
  405.         return PLUGIN_CONTINUE
  406.    
  407.     if(equal(szTruncatedWeapon, system_base) && get_user_weapon(iAttacker) == CSW_BASE)
  408.     {
  409.         if(g_has_weapon[iAttacker])
  410.             set_msg_arg_string(4, system_name)
  411.     }
  412.     return PLUGIN_CONTINUE
  413. }
  414. /* ================== END OF ALL MESSAGE FORWARD ================ */
  415. /* ================== START OF ALL EVENT FORWARD ================ */
  416. public Forward_MessageWeapList(msg_id, msg_dest, id)
  417. {
  418.     if(get_msg_arg_int(8) != CSW_BASE)
  419.         return
  420.      
  421.     g_list_variables[2] = get_msg_arg_int(2)
  422.     g_list_variables[3] = get_msg_arg_int(3)
  423.     g_list_variables[4] = get_msg_arg_int(4)
  424.     g_list_variables[5] = get_msg_arg_int(5)
  425.     g_list_variables[6] = get_msg_arg_int(6)
  426.     g_list_variables[7] = get_msg_arg_int(7)
  427.     g_list_variables[8] = get_msg_arg_int(8)
  428.     g_list_variables[9] = get_msg_arg_int(9)
  429. }
  430.  
  431. public Forward_CurrentWeapon(id)
  432. {
  433.     replace_weapon_models(id, read_data(2))
  434.      
  435.     if(!is_user_alive(id))
  436.         return
  437.     if(read_data(2) != CSW_BASE || !g_has_weapon[id])
  438.         return
  439.      
  440.     static Float:Speed
  441.     if(g_has_weapon[id])
  442.         Speed = get_pcvar_float(cvar_spd)
  443.    
  444.     static weapon[32], Ent
  445.     get_weaponname(read_data(2), weapon, 31)
  446.     Ent = find_ent_by_owner(-1, weapon, id)
  447.     if(pev_valid(Ent))
  448.     {
  449.         static Float:Delay
  450.         Delay = get_pdata_float(Ent, 46, 4) * Speed
  451.         if(Delay > 0.0) set_pdata_float(Ent, 46, Delay, 4)
  452.     }
  453. }
  454. /* ================== END OF ALL EVENT FORWARD =================== */
  455. /* ================== START OF ALL HAM FORWARD ============== */
  456. public Forward_PlayerKilled(id) remove_item(id)
  457. public Forward_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
  458. {
  459.     if(!is_user_alive(iAttacker) || !is_user_connected(iAttacker))
  460.         return
  461.     if(get_user_weapon(iAttacker) != CSW_BASE || !g_has_weapon[iAttacker])
  462.         return
  463.  
  464.     static Float:flEnd[3], Float:WallVector[3], trace_color
  465.     get_tr2(ptr, TR_vecEndPos, flEnd)
  466.     get_tr2(ptr, TR_vecPlaneNormal, WallVector)
  467.    
  468.     if(iEnt)
  469.     {
  470.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  471.         write_byte(TE_DECAL)
  472.         write_coord_f(flEnd[0])
  473.         write_coord_f(flEnd[1])
  474.         write_coord_f(flEnd[2])
  475.         write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  476.         write_short(iEnt)
  477.         message_end()
  478.     }
  479.     else
  480.     {
  481.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  482.         write_byte(TE_WORLDDECAL)
  483.         write_coord_f(flEnd[0])
  484.         write_coord_f(flEnd[1])
  485.         write_coord_f(flEnd[2])
  486.         write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  487.         message_end()
  488.     }
  489.    
  490.     if(g_Mode[iAttacker] == MODE_A)
  491.     {
  492.         if(!is_user_alive(iEnt)) trace_color = get_pcvar_num(cvar_trace_color)
  493.         else if(is_user_alive(iEnt)) trace_color = 2000 // NO STREAK COLOR or Disabled
  494.         ExecuteHamB(Ham_TakeDamage, iEnt, iAttacker, iAttacker, flDamage * get_pcvar_float(cvar_dmg), DMG_BULLET)
  495.     }
  496.    
  497.     if(pev(iEnt, pev_takedamage) != DAMAGE_NO)
  498.     {
  499.         set_hudmessage(255, 0, 0, -1.0, 0.46, 0, 0.2, 0.2)
  500.         show_hudmessage(iAttacker, "\         /^n+^n/         \")
  501.     }
  502.    
  503.     if(trace_color < 2000)
  504.     {
  505.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  506.         write_byte(TE_STREAK_SPLASH)
  507.         engfunc(EngFunc_WriteCoord, flEnd[0])
  508.         engfunc(EngFunc_WriteCoord, flEnd[1])
  509.         engfunc(EngFunc_WriteCoord, flEnd[2])
  510.         engfunc(EngFunc_WriteCoord, WallVector[0] * random_float(25.0,30.0))
  511.         engfunc(EngFunc_WriteCoord, WallVector[1] * random_float(25.0,30.0))
  512.         engfunc(EngFunc_WriteCoord, WallVector[2] * random_float(25.0,30.0))
  513.         write_byte(trace_color)
  514.         write_short(50)
  515.         write_short(3)
  516.         write_short(90)
  517.         message_end()
  518.        
  519.         message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
  520.         write_byte(TE_GUNSHOTDECAL)
  521.         write_coord_f(flEnd[0])
  522.         write_coord_f(flEnd[1])
  523.         write_coord_f(flEnd[2])
  524.         write_short(iAttacker)
  525.         write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
  526.         message_end()
  527.     }
  528. }
  529.  
  530. public Weapon_Deploy_Post(weapon_entity)
  531. {
  532.     static owner
  533.     owner = fm_cs_get_weapon_ent_owner(weapon_entity)
  534.    
  535.     static weaponid
  536.     weaponid = cs_get_weapon_id(weapon_entity)
  537.    
  538.     replace_weapon_models(owner, weaponid)
  539. }
  540.  
  541. public Weapon_AddToPlayer(weapon_entity, id)
  542. {
  543.     if(!is_valid_ent(weapon_entity) || !is_user_connected(id))
  544.         return HAM_IGNORED
  545.    
  546.     if(entity_get_int(weapon_entity, EV_INT_WEAPONKEY) == WEAPON_KEY)
  547.     {
  548.         g_has_weapon[id] = true
  549.         entity_set_int(weapon_entity, EV_INT_WEAPONKEY, 0)
  550.         set_weapon_list(id, weapon_name_buffer)
  551.        
  552.         return HAM_HANDLED
  553.     }
  554.     else
  555.     {
  556.         set_weapon_list(id, weapon_base_buffer)
  557.     }
  558.    
  559.     return HAM_IGNORED
  560. }
  561.  
  562. public Weapon_PrimaryAttack(weapon_entity)
  563. {
  564.     new Player = get_pdata_cbase(weapon_entity, 41, 4)
  565.    
  566.     if(!g_has_weapon[Player])
  567.         return
  568.    
  569.     g_IsInPrimaryAttack = 1
  570.     pev(Player,pev_punchangle,cl_pushangle[Player])
  571.    
  572.     g_clip_ammo[Player] = cs_get_weapon_ammo(weapon_entity)
  573. }
  574.  
  575. public Weapon_PrimaryAttack_Post(weapon_entity)
  576. {
  577.     g_IsInPrimaryAttack = 0
  578.     new Player = get_pdata_cbase(weapon_entity, 41, 4)
  579.    
  580.     new szClip, szAmmo
  581.     get_user_weapon(Player, szClip, szAmmo)
  582.    
  583.     if(!is_user_alive(Player))
  584.         return
  585.        
  586.     if(g_has_weapon[Player])
  587.     {
  588.         if(!g_clip_ammo[Player])
  589.         {
  590.             ExecuteHam(Ham_Weapon_PlayEmptySound, weapon_entity)
  591.             return
  592.         }
  593.        
  594.         new Float:push[3]
  595.         pev(Player,pev_punchangle,push)
  596.         xs_vec_sub(push,cl_pushangle[Player],push)
  597.         xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
  598.         xs_vec_add(push,cl_pushangle[Player],push)
  599.         set_pev(Player,pev_punchangle,push)
  600.        
  601.         set_weapon_shoot_anim(Player)
  602.         emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
  603.         set_task(random_float(0.001, 0.005), "Re_MuzzleFlash", Player+TASK_MUZZLEFLASH)
  604.     }
  605. }
  606.  
  607. public Weapon_ItemPostFrame(weapon_entity)
  608. {
  609.     new id = pev(weapon_entity, pev_owner)
  610.     if(!is_user_connected(id))
  611.         return HAM_IGNORED
  612.     if(!g_has_weapon[id])
  613.         return HAM_IGNORED
  614.  
  615.     static iClipExtra
  616.     iClipExtra = get_pcvar_num(cvar_clip)
  617.     new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, OFFSET_LINUX)
  618.  
  619.     new iBpAmmo = cs_get_user_bpammo(id, CSW_BASE)
  620.     new iClip = get_pdata_int(weapon_entity, m_iClip, OFFSET_LINUX_WEAPONS)
  621.  
  622.     new fInReload = get_pdata_int(weapon_entity, m_fInReload, OFFSET_LINUX_WEAPONS)
  623.     if(fInReload && flNextAttack <= 0.0)
  624.     {
  625.         new j = min(iClipExtra - iClip, iBpAmmo)
  626.    
  627.         set_pdata_int(weapon_entity, m_iClip, iClip + j, OFFSET_LINUX_WEAPONS)
  628.         cs_set_user_bpammo(id, CSW_BASE, iBpAmmo-j)
  629.        
  630.         set_pdata_int(weapon_entity, m_fInReload, 0, OFFSET_LINUX_WEAPONS)
  631.         fInReload = 0
  632.     }
  633.     else if(!fInReload && !get_pdata_int(weapon_entity, 74, 4))
  634.     {
  635.         if(!iClip)
  636.             return HAM_IGNORED
  637.            
  638.         if(get_pdata_float(id, 83, 5) <= 0.0 && get_pdata_float(weapon_entity, 46, 4) <= 0.0 ||
  639.         get_pdata_float(weapon_entity, 47, 4) <= 0.0 || get_pdata_float(weapon_entity, 48, 4) <= 0.0)
  640.         {
  641.             if(pev(id, pev_button) & IN_ATTACK)
  642.             {
  643.                 if(g_Mode[id] == MODE_B)
  644.                     Shoot_Special(id)
  645.             }
  646.             else if(pev(id, pev_button) & IN_ATTACK2)
  647.             {
  648.                 set_turbulent_zoom(id, 0)
  649.                 set_weapons_timeidle(id, CSW_BASE, 0.4)
  650.                 set_player_nextattackx(id, 0.4)
  651.             }
  652.         }
  653.     }
  654.    
  655.     return HAM_IGNORED
  656. }
  657.  
  658. public Weapon_Reload(weapon_entity)
  659. {
  660.     new id = pev(weapon_entity, pev_owner)
  661.     if(!is_user_connected(id))
  662.         return HAM_IGNORED
  663.     if(!g_has_weapon[id])
  664.         return HAM_IGNORED
  665.     static iClipExtra
  666.     if(g_has_weapon[id])
  667.         iClipExtra = get_pcvar_num(cvar_clip)
  668.  
  669.     g_weapon_TmpClip[id] = -1
  670.  
  671.     new iBpAmmo = cs_get_user_bpammo(id, CSW_BASE)
  672.     new iClip = get_pdata_int(weapon_entity, m_iClip, OFFSET_LINUX_WEAPONS)
  673.  
  674.     if(iBpAmmo <= 0)
  675.         return HAM_SUPERCEDE
  676.  
  677.     if(iClip >= iClipExtra)
  678.         return HAM_SUPERCEDE
  679.  
  680.     g_weapon_TmpClip[id] = iClip
  681.  
  682.     return HAM_IGNORED
  683. }
  684.  
  685. public Weapon_Reload_Post(weapon_entity)
  686. {
  687.     new id = pev(weapon_entity, pev_owner)
  688.     if (!is_user_connected(id))
  689.         return HAM_IGNORED
  690.  
  691.     if(!g_has_weapon[id])
  692.         return HAM_IGNORED
  693.     if(g_weapon_TmpClip[id] == -1)
  694.         return HAM_IGNORED
  695.    
  696.     set_pdata_int(weapon_entity, m_iClip, g_weapon_TmpClip[id], OFFSET_LINUX_WEAPONS)
  697.     set_pdata_float(weapon_entity, m_flTimeWeaponIdle, RELOAD_TIME, OFFSET_LINUX_WEAPONS)
  698.     set_pdata_float(id, m_flNextAttack, RELOAD_TIME, OFFSET_LINUX)
  699.     set_pdata_int(weapon_entity, m_fInReload, 1, OFFSET_LINUX_WEAPONS)
  700.    
  701.     set_weapon_anim(id, ANIM_RELOAD)
  702.     set_pdata_string(id, (492) * 4, ANIMEXT, -1 , 20)
  703.     set_turbulent_zoom(id, 1)
  704.    
  705.     return HAM_IGNORED
  706. }
  707.  
  708. /* ===================== END OF ALL HAM FORWARD ====================== */
  709. /* ================= START OF OTHER PUBLIC FUNCTION  ================= */
  710. public give_item(id)
  711. {
  712.     //if (!ze_is_user_zombie(id)) {
  713.         drop_weapons(id, 1)
  714.         new iWeapon = fm_give_item(id, weapon_base_buffer)
  715.         if(iWeapon > 0)
  716.         {
  717.             cs_set_weapon_ammo(iWeapon, get_pcvar_num(cvar_clip))
  718.             cs_set_user_bpammo(id, CSW_BASE, get_pcvar_num(cvar_ammo))
  719.             emit_sound(id, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM,0,PITCH_NORM)
  720.            
  721.             set_weapon_anim(id, ANIM_DRAW)
  722.             set_pdata_float(id, m_flNextAttack, DRAW_TIME, OFFSET_LINUX)
  723.            
  724.             set_weapon_list(id, weapon_name_buffer)
  725.             set_pdata_string(id, (492) * 4, ANIMEXT, -1 , 20)
  726.             set_pdata_int(iWeapon, 74, MODE_A)
  727.         }
  728.        
  729.         g_has_weapon[id] = true
  730.         g_Mode[id] = MODE_A
  731.         remove_bitvar(id)
  732.     //}
  733. }
  734.  
  735. public remove_item(id)
  736. {
  737.     g_has_weapon[id] = false
  738.     g_Mode[id] = MODE_A
  739.     remove_bitvar(id)
  740. }
  741.  
  742. public remove_bitvar(id)
  743. {
  744.     g_attack_type[id] = 0
  745.     g_Muzzleflash[id][0] = 0
  746.     g_Muzzleflash[id][1] = 0
  747. }
  748.  
  749. public weapon_hook(id)
  750. {
  751.     engclient_cmd(id, weapon_base_buffer)
  752.     return PLUGIN_HANDLED
  753. }
  754.  
  755. public replace_weapon_models(id, weaponid)
  756. {
  757.     if(weaponid != CSW_BASE)
  758.     {
  759.         if(g_has_weapon[id])
  760.         {
  761.             remove_bitvar(id)
  762.             set_turbulent_zoom(id, 1)
  763.         }
  764.     }
  765.    
  766.     switch(weaponid)
  767.     {
  768.         case CSW_BASE:
  769.         {
  770.             if(g_has_weapon[id])
  771.             {
  772.                 set_pev(id, pev_viewmodel2, V_MODEL)
  773.                 set_pev(id, pev_weaponmodel2, P_MODEL)
  774.                
  775.                 if(oldweap[id] != CSW_BASE)
  776.                 {
  777.                     set_weapon_anim(id, ANIM_DRAW)
  778.                     set_player_nextattackx(id, DRAW_TIME)
  779.                     set_weapons_timeidle(id, CSW_BASE, DRAW_TIME)
  780.                     set_weapon_list(id, weapon_name_buffer)
  781.                     set_pdata_string(id, (492) * 4, ANIMEXT, -1 , 20)
  782.                 }
  783.             }
  784.         }
  785.     }
  786.    
  787.     oldweap[id] = weaponid
  788. }
  789.  
  790. public Shoot_Special(id)
  791. {
  792.     if(!is_user_alive(id) || !is_user_connected(id))
  793.         return
  794.        
  795.     new szClip, szWeapId
  796.     szWeapId = get_user_weapon(id, szClip)
  797.     if(szWeapId != CSW_BASE || !g_has_weapon[id] || !szClip)
  798.         return
  799.    
  800.     g_Muzzleflash[id][0] = 3
  801.     set_task(random_float(0.001, 0.005), "Re_MuzzleFlash", id+TASK_MUZZLEFLASH)
  802.    
  803.     static Float:PunchAngles[3]
  804.     PunchAngles[0] = -5.0
  805.     PunchAngles[1] = -2.5
  806.     PunchAngles[2] = -2.5
  807.     set_pev(id, pev_punchangle, PunchAngles)
  808.    
  809.     set_weapon_shoot_anim(id)
  810.     emit_sound(id, CHAN_WEAPON, Fire_Sounds[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
  811.    
  812.     new Float:fStart[3], Float:originF[3]
  813.     new target, body
  814.    
  815.     fm_get_aim_origin(id, originF)
  816.     get_user_aiming(id, target, body)
  817.    
  818.     pev(id, pev_origin, fStart)
  819.     engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fStart, 0)
  820.     write_byte(TE_SPRITE)
  821.     engfunc(EngFunc_WriteCoord, originF[0])
  822.     engfunc(EngFunc_WriteCoord, originF[1])
  823.     engfunc(EngFunc_WriteCoord, originF[2] + 20.0)
  824.     write_short(sturbulentHit)
  825.     write_byte(10)
  826.     write_byte(240)
  827.     message_end()
  828.    
  829.     new a = FM_NULLENT
  830.     while((a = find_ent_in_sphere(a, originF, float(get_pcvar_num(cvar_radius)))) != 0)
  831.     {
  832.         if(id == a)
  833.             continue
  834.    
  835.         if(pev(a, pev_takedamage) != DAMAGE_NO)
  836.             ExecuteHamB(Ham_TakeDamage, a, 0, id, float(get_pcvar_num(cvar_dmg_2)), DMG_BULLET)
  837.     }
  838.    
  839.     if(!is_user_alive(target))
  840.     {
  841.         static Classname[32]
  842.         pev(target, pev_classname, Classname, sizeof(Classname))
  843.        
  844.         if(equal(Classname, "func_breakable"))
  845.             ExecuteHamB(Ham_TakeDamage, target, 0, 0, float(get_pcvar_num(cvar_dmg_2)), DMG_GENERIC)
  846.     }
  847.     else if(is_user_alive(target) && is_user_connected(target) && ze_is_user_zombie(target))
  848.     {
  849.         static Float:MyOrigin[3]
  850.         pev(id, pev_origin, MyOrigin)
  851.         hook_ent2(target, MyOrigin, 40.0, 2)
  852.         ExecuteHamB(Ham_TakeDamage, target, 0, id, float(get_pcvar_num(cvar_dmg_2))*0.75, DMG_BULLET)
  853.     }
  854.    
  855.     static entity_weapon
  856.     entity_weapon = find_ent_by_owner(ENG_NULLENT, weapon_base_buffer, id)
  857.    
  858.     if(!pev_valid(entity_weapon))
  859.         return
  860.    
  861.     cs_set_weapon_ammo(entity_weapon, szClip - 1)
  862.     set_player_nextattackx(id, 0.7)
  863.     set_weapons_timeidle(id, CSW_BASE, 0.7)
  864. }
  865.  
  866. public set_weapon_shoot_anim(id)
  867. {
  868.     if(!g_attack_type[id])
  869.     {
  870.         set_weapon_anim(id, ANIM_SHOOT1)
  871.         g_attack_type[id] = 1
  872.     }
  873.     else if(g_attack_type[id] == 1)
  874.     {
  875.         set_weapon_anim(id, ANIM_SHOOT2)
  876.         g_attack_type[id] = 2
  877.     }
  878.     else if(g_attack_type[id] == 2)
  879.     {
  880.         set_weapon_anim(id, ANIM_SHOOT3)
  881.         g_attack_type[id] = 0
  882.     }
  883. }
  884.  
  885. public Re_MuzzleFlash(id)
  886. {
  887.     id -= TASK_MUZZLEFLASH
  888.  
  889.     if(!is_user_alive(id) || !is_user_connected(id))
  890.         return
  891.     if(get_user_weapon(id) != CSW_BASE || !g_has_weapon[id])
  892.         return
  893.    
  894.     if(g_Mode[id] == MODE_A) g_Muzzleflash[id][0] = true
  895.     else if(g_Mode[id] == MODE_B) g_Muzzleflash[id][1] = true
  896. }
  897.  
  898.  
  899. stock set_turbulent_zoom(id, const reset = 0)
  900. {
  901.     if(reset == 1)
  902.     {
  903.         set_fov(id)
  904.         g_Mode[id] = MODE_A
  905.     }
  906.     else if(reset == 0)
  907.     {
  908.         if(g_Mode[id] == MODE_A)
  909.         {
  910.             set_fov(id, 80)
  911.             g_Mode[id] = MODE_B
  912.         }
  913.         else if(g_Mode[id] == MODE_B)
  914.         {
  915.             set_fov(id)
  916.             g_Mode[id] = MODE_A
  917.         }
  918.     }
  919. }
  920.  
  921. stock set_fov(id, fov = 90)
  922. {
  923.     message_begin(MSG_ONE, get_user_msgid("SetFOV"), {0,0,0}, id)
  924.     write_byte(fov)
  925.     message_end()
  926. }
  927.  
  928. stock set_weapon_list(id, const weapon_name[])
  929. {
  930.     message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0,0,0}, id)
  931.     write_string(weapon_name)
  932.     write_byte(g_list_variables[2])
  933.     write_byte(g_list_variables[3])
  934.     write_byte(g_list_variables[4])
  935.     write_byte(g_list_variables[5])
  936.     write_byte(g_list_variables[6])
  937.     write_byte(g_list_variables[7])
  938.     write_byte(g_list_variables[8])
  939.     write_byte(g_list_variables[9])
  940.     message_end()
  941. }
  942.  
  943. stock hook_ent2(ent, Float:VicOrigin[3], Float:speed, type)
  944. {
  945.     static Float:fl_Velocity[3]
  946.     static Float:EntOrigin[3]
  947.    
  948.     pev(ent, pev_origin, EntOrigin)
  949.     static Float:distance_f
  950.     distance_f = 100.0
  951.    
  952.     new Float:fl_Time = distance_f / speed
  953.     if(type == 1)
  954.     {
  955.         fl_Velocity[0] = ((VicOrigin[0] - EntOrigin[0]) / fl_Time) * 1.5
  956.         fl_Velocity[1] = ((VicOrigin[1] - EntOrigin[1]) / fl_Time) * 1.5
  957.         fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time       
  958.     }
  959.     else if(type == 2)
  960.     {
  961.         fl_Velocity[0] = ((EntOrigin[0] - VicOrigin[0]) / fl_Time) * 1.5
  962.         fl_Velocity[1] = ((EntOrigin[1] - VicOrigin[1]) / fl_Time) * 1.5
  963.         fl_Velocity[2] = (EntOrigin[2] - VicOrigin[2]) / fl_Time
  964.     }
  965.    
  966.     entity_set_vector(ent, EV_VEC_velocity, fl_Velocity)
  967. }
  968.  
  969. stock drop_weapons(id, dropwhat)
  970. {
  971.     static weapons[32], num = 0, i, weaponid
  972.     get_user_weapons(id, weapons, num)
  973.      
  974.     for (i = 0; i < num; i++)
  975.     {
  976.         weaponid = weapons[i]
  977.          
  978.         if(dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
  979.         {
  980.             static wname[32]
  981.             get_weaponname(weaponid, wname, sizeof wname - 1)
  982.             engclient_cmd(id, "drop", wname)
  983.         }
  984.     }
  985. }
  986.  
  987. stock set_player_nextattackx(id, Float:nexttime)
  988. {
  989.     if(!is_user_alive(id))
  990.         return
  991.        
  992.     set_pdata_float(id, m_flNextAttack, nexttime, 5)
  993. }
  994.  
  995. stock set_weapons_timeidle(id, WeaponId ,Float:TimeIdle)
  996. {
  997.     if(!is_user_alive(id))
  998.         return
  999.        
  1000.     static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
  1001.     if(!pev_valid(entwpn))
  1002.         return
  1003.        
  1004.     set_pdata_float(entwpn, 46, TimeIdle, OFFSET_LINUX_WEAPONS)
  1005.     set_pdata_float(entwpn, 47, TimeIdle, OFFSET_LINUX_WEAPONS)
  1006.     set_pdata_float(entwpn, 48, TimeIdle + 1.0, OFFSET_LINUX_WEAPONS)
  1007. }
  1008.  
  1009. stock set_weapons_timeidlex(id, Float:TimeIdle, Float:Idle)
  1010. {
  1011.     new entwpn = fm_get_user_weapon_entity(id, CSW_BASE)
  1012.     if(!pev_valid(entwpn))
  1013.         return
  1014.    
  1015.     set_pdata_float(entwpn, 46, TimeIdle, 4)
  1016.     set_pdata_float(entwpn, 47, TimeIdle, 4)
  1017.     set_pdata_float(entwpn, 48, Idle, 4)
  1018. }
  1019.  
  1020. stock set_weapon_anim(const Player, const Sequence)
  1021. {
  1022.     set_pev(Player, pev_weaponanim, Sequence)
  1023.    
  1024.     message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
  1025.     write_byte(Sequence)
  1026.     write_byte(pev(Player, pev_body))
  1027.     message_end()
  1028. }
  1029.  
  1030. stock precache_viewmodel_sound(const model[])
  1031. {
  1032.     new file, i, k
  1033.     if((file = fopen(model, "rt")))
  1034.     {
  1035.         new szsoundpath[64], NumSeq, SeqID, Event, NumEvents, EventID
  1036.         fseek(file, 164, SEEK_SET)
  1037.         fread(file, NumSeq, BLOCK_INT)
  1038.         fread(file, SeqID, BLOCK_INT)
  1039.        
  1040.         for(i = 0; i < NumSeq; i++)
  1041.         {
  1042.             fseek(file, SeqID + 48 + 176 * i, SEEK_SET)
  1043.             fread(file, NumEvents, BLOCK_INT)
  1044.             fread(file, EventID, BLOCK_INT)
  1045.             fseek(file, EventID + 176 * i, SEEK_SET)
  1046.            
  1047.            
  1048.             for(k = 0; k < NumEvents; k++)
  1049.             {
  1050.                 fseek(file, EventID + 4 + 76 * k, SEEK_SET)
  1051.                 fread(file, Event, BLOCK_INT)
  1052.                 fseek(file, 4, SEEK_CUR)
  1053.                
  1054.                 if(Event != 5004)
  1055.                     continue
  1056.                
  1057.                 fread_blocks(file, szsoundpath, 64, BLOCK_CHAR)
  1058.                
  1059.                 if(strlen(szsoundpath))
  1060.                 {
  1061.                     strtolower(szsoundpath)
  1062.                     engfunc(EngFunc_PrecacheSound, szsoundpath)
  1063.                 }
  1064.             }
  1065.         }
  1066.     }
  1067.     fclose(file)
  1068. }
  1069.  
  1070. stock fm_cs_get_weapon_ent_owner(ent)
  1071. {
  1072.     return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
  1073. }
  1074.  
  1075.  
  1076. /* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
  1077. *{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1033\\ f0\\ fs16 \n\\ par }
  1078. */
Last edited by Raheem 5 years ago, edited 1 time in total.
Reason: Make it for humans only
Want your own mod edition? PM me.
Accepting private projects.
Discord: Fury#7469
Image

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

#3

Post by czirimbolo » 5 years ago

Thanks but now the guns shows in zombie's menu and zombie can buy it. Can you make it for HUMAN only?
Image

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#4

Post by Raheem » 5 years ago

Please check now.
He who fails to plan is planning to fail

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

#5

Post by czirimbolo » 5 years ago

Works, thanks.
Image

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

#6

Post by czirimbolo » 5 years ago

This weapon can damage zombies when they are in freezetime. Can you block it? or tell me what I can do this
Image

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#7

Post by Raheem » 5 years ago

Try:
  • Code: Select all

    /*THIS IS BASED ON A PLUGIN BY:asepdwa32
    CODE EDITED BY RaDNoX*/
     
    #include <zombie_escape>
    #include <engine>
    #include <fakemeta_util>
    #include <cstrike>
    #include <xs>
     
    #define PLUGIN "CSO Turbulent Dragora By RaDNoX"
    #define VERSION "1.0"
    #define AUTHOR "RaDNoX"
     
    // CONFIGURATION WEAPON
    #define system_name     "turbulent"
    #define system_base     "ak47"
     
    #define DRAW_TIME       0.66
    #define RELOAD_TIME     2.1
     
    #define CSW_BASE        CSW_AK47
    #define WEAPON_KEY      11092002112
     
    #define OLD_MODEL       "models/w_ak47.mdl"
    #define ANIMEXT         "carbine"
     
    // Configuration Extra Items
    #define NAME_EXTRA_ITEMS    "CSO DraGoRa Turbulent"
    #define COST_EXTRA_ITEMS    35
     
    #define ENG_NULLENT     -1
    #define EV_INT_WEAPONKEY    EV_INT_impulse
    #define TASK_MUZZLEFLASH    102291
     
    #define USE_STOPPED         0
    #define OFFSET_LINUX_WEAPONS    4
    #define OFFSET_LINUX        5
    #define OFFSET_WEAPONOWNER  41
    #define OFFSET_ACTIVE_ITEM  373
     
    #define m_fKnown        44
    #define m_flNextPrimaryAttack   46
    #define m_flTimeWeaponIdle  48
    #define m_iClip         51
    #define m_fInReload     54
    #define m_flNextAttack      83
    #define write_coord_f(%1)   engfunc(EngFunc_WriteCoord,%1)
     
    // ALL ANIM
    #define ANIM_RELOAD     1
    #define ANIM_DRAW       2
    #define ANIM_SHOOT1     3
    #define ANIM_SHOOT2     4
    #define ANIM_SHOOT3     5
     
    #define MODE_A          0
    #define MODE_B          1
     
    // All Models Of The Weapon
    new V_MODEL[64] = "models/v_turbulent.mdl"
    new W_MODEL[64] = "models/w_turbulent.mdl"
    new P_MODEL[64] = "models/p_turbulent.mdl"
    new S_MODEL[64] = "sprites/turbulent-exp.spr"
     
    new const WeaponResources[][] =
    {
        "sprites/640hud40.spr",
        "sprites/640hud162.spr"
    }
     
    new const MuzzleFlash[][] =
    {
        "sprites/muzzleflash40.spr",
        "sprites/muzzleflash41.spr"
    }
     
    // You Can Add Fire Sound Here
    new const Fire_Sounds[][] = { "turbulent-1.wav", "turbulent-2.wav" }
     
     
    new const GUNSHOT_DECALS[] = { 41, 42, 43, 44, 45 }
    new cvar_dmg, cvar_recoil, cvar_clip, cvar_spd, cvar_ammo, cvar_radius, cvar_dmg_2, cvar_trace_color
    new g_MaxPlayers, g_orig_event, g_IsInPrimaryAttack, g_attack_type[33], Float:cl_pushangle[33][3]
    new g_has_weapon[33], g_clip_ammo[33], g_weapon_TmpClip[33], oldweap[33], sturbulentHit
    new g_Muzzleflash_Ent[2], g_Muzzleflash[33][2], g_Mode[33], g_item, g_list_variables[10]
     
     
    new weapon_name_buffer[512]
    new weapon_base_buffer[512]
    
    new bool:g_bBlockDamage
           
    const PRIMARY_WEAPONS_BIT_SUM =
    (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_AUG)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_GALIL)|(1<<CSW_FAMAS)|(1<<CSW_AWP)|(1<<
    CSW_MP5NAVY)|(1<<CSW_M249)|(1<<CSW_M3)|(1<<CSW_M4A1)|(1<<CSW_TMP)|(1<<CSW_G3SG1)|(1<<CSW_SG552)|(1<<CSW_AK47)|(1<<CSW_P90)
    new const WEAPONENTNAMES[][] = { "", "weapon_p228", "", "weapon_scout", "weapon_hegrenade", "weapon_xm1014", "weapon_c4", "weapon_mac10",
                "weapon_aug", "weapon_smokegrenade", "weapon_elite", "weapon_fiveseven", "weapon_ump45", "weapon_sg550",
                "weapon_galil", "weapon_famas", "weapon_usp", "weapon_glock18", "weapon_awp", "weapon_mp5navy", "weapon_m249",
                "weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
                "weapon_ak47", "weapon_knife", "weapon_p90" }
     
    public plugin_init()
    {
        //register_concmd("give_ak","give_item")
       
        formatex(weapon_name_buffer, sizeof(weapon_name_buffer), "weapon_%s_asep", system_name)
        formatex(weapon_base_buffer, sizeof(weapon_base_buffer), "weapon_%s", system_base)
       
        register_plugin(PLUGIN, VERSION, AUTHOR)
       
        // Event And Message
        register_event("CurWeapon", "Forward_CurrentWeapon", "be", "1=1")
        register_message(get_user_msgid("DeathMsg"), "Forward_DeathMsg")
        register_message(get_user_msgid("WeaponList"), "Forward_MessageWeapList")
       
        // Ham Forward (Entity) || Ham_Use
        RegisterHam(Ham_Use, "func_tank", "Forward_UseStationary_Post", 1)
        RegisterHam(Ham_Use, "func_tankmortar", "Forward_UseStationary_Post", 1)
        RegisterHam(Ham_Use, "func_tankrocket", "Forward_UseStationary_Post", 1)
        RegisterHam(Ham_Use, "func_tanklaser", "Forward_UseStationary_Post", 1)
       
        // Ham Forward (Entity) || Ham_TraceAttack
        RegisterHam(Ham_TraceAttack, "player", "Forward_TraceAttack", 1)
        RegisterHam(Ham_TraceAttack, "worldspawn", "Forward_TraceAttack", 1)
        RegisterHam(Ham_TraceAttack, "func_wall", "Forward_TraceAttack", 1)
        RegisterHam(Ham_TraceAttack, "func_breakable", "Forward_TraceAttack", 1)
        RegisterHam(Ham_TraceAttack, "func_door", "Forward_TraceAttack", 1)
        RegisterHam(Ham_TraceAttack, "func_door_rotating", "Forward_TraceAttack", 1)
        RegisterHam(Ham_TraceAttack, "func_rotating", "Forward_TraceAttack", 1)
        RegisterHam(Ham_TraceAttack, "func_plat", "Forward_TraceAttack", 1)
       
        // Ham Forward (Weapon)
        RegisterHam(Ham_Weapon_PrimaryAttack, weapon_base_buffer, "Weapon_PrimaryAttack")
        RegisterHam(Ham_Weapon_PrimaryAttack, weapon_base_buffer, "Weapon_PrimaryAttack_Post", 1)
        RegisterHam(Ham_Item_PostFrame, weapon_base_buffer, "Weapon_ItemPostFrame")
        RegisterHam(Ham_Weapon_Reload, weapon_base_buffer, "Weapon_Reload")
        RegisterHam(Ham_Weapon_Reload, weapon_base_buffer, "Weapon_Reload_Post", 1)
        RegisterHam(Ham_Item_AddToPlayer, weapon_base_buffer, "Weapon_AddToPlayer")
       
        for(new i = 1; i < sizeof WEAPONENTNAMES; i++)
            if(WEAPONENTNAMES[i][0]) RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "Weapon_Deploy_Post", 1)
           
        // Ham Forward (Player)
        RegisterHam(Ham_Killed, "player", "Forward_PlayerKilled")
       
        // Fakemeta Forward
        register_forward(FM_SetModel, "Forward_SetModel")
        register_forward(FM_PlaybackEvent, "Forward_PlaybackEvent")
        register_forward(FM_UpdateClientData, "Forward_UpdateClientData_Post", 1)
        register_forward(FM_AddToFullPack, "Forward_AddToFullPack", 1)
        register_forward(FM_CheckVisibility, "Forward_CheckVisibility")
       
        // All Some Cvar
        cvar_clip = register_cvar("turbulent_clip", "50")
        cvar_spd = register_cvar("turbulent_speed", "1.15")
        cvar_ammo = register_cvar("turbulent_ammo", "240")
        cvar_dmg = register_cvar("turbulent_damage", "8.0")
        cvar_recoil = register_cvar("turbulent_recoil", "0.62")
        cvar_dmg_2 = register_cvar("turbulent_buff_damage", "100")
        cvar_radius = register_cvar("turbulent_radius", "50")
        cvar_trace_color = register_cvar("turbulent_trace_color", "7")
       
        g_MaxPlayers = get_member_game(m_nMaxPlayers)
        g_item = ze_register_item(NAME_EXTRA_ITEMS, COST_EXTRA_ITEMS, 0)
    }
     
    public plugin_precache()
    {
        formatex(weapon_name_buffer, sizeof(weapon_name_buffer), "weapon_%s_asep", system_name)
        formatex(weapon_base_buffer, sizeof(weapon_base_buffer), "weapon_%s", system_base)
       
        precache_model(V_MODEL)
        precache_model(P_MODEL)
        precache_model(W_MODEL)
        sturbulentHit = precache_model(S_MODEL)
       
        new Buffer[512]
        formatex(Buffer, sizeof(Buffer), "sprites/%s.txt", weapon_name_buffer)
        precache_generic(Buffer)
       
        for(new i = 0; i < sizeof Fire_Sounds; i++)
            precache_sound(Fire_Sounds[i])
        for(new i = 0; i < sizeof MuzzleFlash; i++)
            precache_model(MuzzleFlash[i])
        for(new i = 0; i < sizeof WeaponResources; i++)
            precache_model(WeaponResources[i])
           
        precache_viewmodel_sound(V_MODEL)
        formatex(Buffer, sizeof(Buffer), "test_%s", system_name)
       
        register_clcmd(Buffer, "give_item")
        register_clcmd(weapon_name_buffer, "weapon_hook")
        register_forward(FM_PrecacheEvent, "Forward_PrecacheEvent_Post", 1)
       
        g_Muzzleflash_Ent[0] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
        engfunc(EngFunc_SetModel, g_Muzzleflash_Ent[0], MuzzleFlash[0])
        set_pev(g_Muzzleflash_Ent[0], pev_scale, 0.08)
        set_pev(g_Muzzleflash_Ent[0], pev_rendermode, kRenderTransTexture)
        set_pev(g_Muzzleflash_Ent[0], pev_renderamt, 0.0)
     
        g_Muzzleflash_Ent[1] = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
        engfunc(EngFunc_SetModel, g_Muzzleflash_Ent[1], MuzzleFlash[1])
        set_pev(g_Muzzleflash_Ent[1], pev_scale, 0.07)
        set_pev(g_Muzzleflash_Ent[1], pev_rendermode, kRenderTransTexture)
        set_pev(g_Muzzleflash_Ent[1], pev_renderamt, 0.0)
    }
     
    public plugin_natives()
    {
        new Buffer[512]
        formatex(Buffer, sizeof(Buffer), "give_%s", system_name)
        register_native(Buffer, "give_item", 1)
        formatex(Buffer, sizeof(Buffer), "remove_%s", system_name)
        register_native(Buffer, "remove_item", 1)
    }
    
    public ze_zombie_appear()
    {
        g_bBlockDamage = true;
    }
    
    public ze_zombie_release()
    {
        g_bBlockDamage = false;
    }
     
    public ze_select_item_pre(id, itemid)
    {
        if(itemid != g_item)
            return ZE_ITEM_AVAILABLE
     
        if (ze_is_user_zombie(id))
            return ZE_ITEM_DONT_SHOW
     
        return ZE_ITEM_AVAILABLE
     
    }
     
    public ze_select_item_post(id, itemid)
    {
        if(itemid != g_item)
            return
     
        give_item(id)
    }
     
    // Reset Bitvar (Fix Bug) If You Connect Or Disconnect Server
    public client_connect(id) remove_item(id)
    public client_disconnected(id) remove_item(id)
    public ze_user_infected(id) remove_item(id)
    public ze_user_humanized(id) remove_item(id)
    /* ========= START OF REGISTER HAM TO SUPPORT BOTS FUNC ========= */
    new g_HamBot
    public client_putinserver(id)
    {
        if(!g_HamBot && is_user_bot(id))
        {
            g_HamBot = 1
            set_task(0.1, "Do_RegisterHam", id)
        }
    }
     
    public Do_RegisterHam(id)
    {
        RegisterHamFromEntity(Ham_Killed, id, "Forward_PlayerKilled")
        RegisterHamFromEntity(Ham_TraceAttack, id, "Forward_TraceAttack", 1)
    }
     
    public Forward_AddToFullPack(esState, iE, iEnt, iHost, iHostFlags, iPlayer, pSet)
    {
        if(iEnt == g_Muzzleflash_Ent[0])
        {
            if(g_Muzzleflash[iHost][0] == 3)
            {
                set_es(esState, ES_RenderMode, kRenderTransAdd)
                set_es(esState, ES_RenderAmt, random_float(200.0, 255.0))
                set_es(esState, ES_Scale, random_float(0.06, 0.1))
               
                g_Muzzleflash[iHost][0] = 2
            }
            else if(g_Muzzleflash[iHost][0] == 2)
            {
                set_es(esState, ES_RenderMode, kRenderTransAdd)
                set_es(esState, ES_RenderAmt, random_float(200.0, 255.0))
                set_es(esState, ES_Scale, random_float(0.06, 0.1))
               
                g_Muzzleflash[iHost][0] = 1
                g_Muzzleflash[iHost][1] = 1
            }
            else if(g_Muzzleflash[iHost][0] == 1)
            {
                set_es(esState, ES_RenderMode, kRenderTransAdd)
                set_es(esState, ES_RenderAmt, random_float(200.0, 255.0))
                set_es(esState, ES_Scale, random_float(0.06, 0.1))
               
                g_Muzzleflash[iHost][0] = 0
            }
               
            set_es(esState, ES_Skin, iHost)
            set_es(esState, ES_Body, 1)
            set_es(esState, ES_AimEnt, iHost)
            set_es(esState, ES_MoveType, MOVETYPE_FOLLOW)
        }
        else if(iEnt == g_Muzzleflash_Ent[1])
        {
            if(g_Muzzleflash[iHost][1])
            {
                set_es(esState, ES_RenderMode, kRenderTransAdd)
                set_es(esState, ES_RenderAmt, 240.0)
               
                g_Muzzleflash[iHost][1] = 0
            }
               
            set_es(esState, ES_Skin, iHost)
            set_es(esState, ES_Body, 1)
            set_es(esState, ES_AimEnt, iHost)
            set_es(esState, ES_MoveType, MOVETYPE_FOLLOW)
        }
     
    }
     
    public Forward_CheckVisibility(iEntity, pSet)
    {
        if(iEntity == g_Muzzleflash_Ent[0] || iEntity == g_Muzzleflash_Ent[1])
        {
            forward_return(FMV_CELL, 1)
            return FMRES_SUPERCEDE
        }
       
        return FMRES_IGNORED
    }
     
    public Forward_PrecacheEvent_Post(type, const name[])
    {
        new Buffer[512]
        formatex(Buffer, sizeof(Buffer), "events/%s.sc", system_base)
        if(equal(Buffer, name, 0))
        {
            g_orig_event = get_orig_retval()
            return FMRES_HANDLED
        }
        return FMRES_IGNORED
    }
     
    public Forward_SetModel(entity, model[])
    {
        if(!is_valid_ent(entity))
            return FMRES_IGNORED
       
        static szClassName[33]
        entity_get_string(entity, EV_SZ_classname, szClassName, charsmax(szClassName))
           
        if(!equal(szClassName, "weaponbox"))
            return FMRES_IGNORED
       
        static iOwner
        iOwner = entity_get_edict(entity, EV_ENT_owner)
       
        if(equal(model, OLD_MODEL))
        {
            static iStoredAugID
            iStoredAugID = find_ent_by_owner(ENG_NULLENT, weapon_base_buffer, entity)
               
            if(!is_valid_ent(iStoredAugID))
                return FMRES_IGNORED
     
            if(g_has_weapon[iOwner])
            {
                entity_set_int(iStoredAugID, EV_INT_WEAPONKEY, WEAPON_KEY)
                g_has_weapon[iOwner] = 0
                entity_set_model(entity, W_MODEL)
               
                return FMRES_SUPERCEDE
            }
        }
        return FMRES_IGNORED
    }
     
    public Forward_UseStationary_Post(entity, caller, activator, use_type)
    {
        if(use_type == USE_STOPPED && is_user_connected(caller))
            replace_weapon_models(caller, get_user_weapon(caller))
    }
     
    public Forward_UpdateClientData_Post(Player, SendWeapons, CD_Handle)
    {
        if(!is_user_alive(Player) || (get_user_weapon(Player) != CSW_BASE || !g_has_weapon[Player]))
            return FMRES_IGNORED
       
        set_cd(CD_Handle, CD_flNextAttack, halflife_time () + 0.001)
        return FMRES_HANDLED
    }
     
    public Forward_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
    {
        if((eventid != g_orig_event) || !g_IsInPrimaryAttack)
            return FMRES_IGNORED
        if(!(1 <= invoker <= g_MaxPlayers))
            return FMRES_IGNORED
     
        playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
        return FMRES_SUPERCEDE
    }
     
    /* ================= END OF ALL FAKEMETA FORWARD ================= */
    /* ================= START OF ALL MESSAGE FORWARD ================ */
    public Forward_DeathMsg(msg_id, msg_dest, id)
    {
        static szTruncatedWeapon[33], iAttacker, iVictim
       
        get_msg_arg_string(4, szTruncatedWeapon, charsmax(szTruncatedWeapon))
       
        iAttacker = get_msg_arg_int(1)
        iVictim = get_msg_arg_int(2)
       
        if(!is_user_connected(iAttacker) || iAttacker == iVictim)
            return PLUGIN_CONTINUE
       
        if(equal(szTruncatedWeapon, system_base) && get_user_weapon(iAttacker) == CSW_BASE)
        {
            if(g_has_weapon[iAttacker])
                set_msg_arg_string(4, system_name)
        }
        return PLUGIN_CONTINUE
    }
    /* ================== END OF ALL MESSAGE FORWARD ================ */
    /* ================== START OF ALL EVENT FORWARD ================ */
    public Forward_MessageWeapList(msg_id, msg_dest, id)
    {
        if(get_msg_arg_int(8) != CSW_BASE)
            return
         
        g_list_variables[2] = get_msg_arg_int(2)
        g_list_variables[3] = get_msg_arg_int(3)
        g_list_variables[4] = get_msg_arg_int(4)
        g_list_variables[5] = get_msg_arg_int(5)
        g_list_variables[6] = get_msg_arg_int(6)
        g_list_variables[7] = get_msg_arg_int(7)
        g_list_variables[8] = get_msg_arg_int(8)
        g_list_variables[9] = get_msg_arg_int(9)
    }
     
    public Forward_CurrentWeapon(id)
    {
        replace_weapon_models(id, read_data(2))
         
        if(!is_user_alive(id))
            return
        if(read_data(2) != CSW_BASE || !g_has_weapon[id])
            return
         
        static Float:Speed
        if(g_has_weapon[id])
            Speed = get_pcvar_float(cvar_spd)
       
        static weapon[32], Ent
        get_weaponname(read_data(2), weapon, 31)
        Ent = find_ent_by_owner(-1, weapon, id)
        if(pev_valid(Ent))
        {
            static Float:Delay
            Delay = get_pdata_float(Ent, 46, 4) * Speed
            if(Delay > 0.0) set_pdata_float(Ent, 46, Delay, 4)
        }
    }
    /* ================== END OF ALL EVENT FORWARD =================== */
    /* ================== START OF ALL HAM FORWARD ============== */
    public Forward_PlayerKilled(id) remove_item(id)
    public Forward_TraceAttack(iEnt, iAttacker, Float:flDamage, Float:fDir[3], ptr, iDamageType)
    {
    	if (g_bBlockDamage)
    		return HAM_SUPERCEDE
    
        if(!is_user_alive(iAttacker) || !is_user_connected(iAttacker))
            return HAM_IGNORED
        if(get_user_weapon(iAttacker) != CSW_BASE || !g_has_weapon[iAttacker])
            return HAM_IGNORED
     
        static Float:flEnd[3], Float:WallVector[3], trace_color
        get_tr2(ptr, TR_vecEndPos, flEnd)
        get_tr2(ptr, TR_vecPlaneNormal, WallVector)
       
        if(iEnt)
        {
            message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
            write_byte(TE_DECAL)
            write_coord_f(flEnd[0])
            write_coord_f(flEnd[1])
            write_coord_f(flEnd[2])
            write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
            write_short(iEnt)
            message_end()
        }
        else
        {
            message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
            write_byte(TE_WORLDDECAL)
            write_coord_f(flEnd[0])
            write_coord_f(flEnd[1])
            write_coord_f(flEnd[2])
            write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
            message_end()
        }
       
        if(g_Mode[iAttacker] == MODE_A)
        {
            if(!is_user_alive(iEnt)) trace_color = get_pcvar_num(cvar_trace_color)
            else if(is_user_alive(iEnt)) trace_color = 2000 // NO STREAK COLOR or Disabled
            ExecuteHamB(Ham_TakeDamage, iEnt, iAttacker, iAttacker, flDamage * get_pcvar_float(cvar_dmg), DMG_BULLET)
        }
       
        if(pev(iEnt, pev_takedamage) != DAMAGE_NO)
        {
            set_hudmessage(255, 0, 0, -1.0, 0.46, 0, 0.2, 0.2)
            show_hudmessage(iAttacker, "\         /^n+^n/         \")
        }
       
        if(trace_color < 2000)
        {
            message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
            write_byte(TE_STREAK_SPLASH)
            engfunc(EngFunc_WriteCoord, flEnd[0])
            engfunc(EngFunc_WriteCoord, flEnd[1])
            engfunc(EngFunc_WriteCoord, flEnd[2])
            engfunc(EngFunc_WriteCoord, WallVector[0] * random_float(25.0,30.0))
            engfunc(EngFunc_WriteCoord, WallVector[1] * random_float(25.0,30.0))
            engfunc(EngFunc_WriteCoord, WallVector[2] * random_float(25.0,30.0))
            write_byte(trace_color)
            write_short(50)
            write_short(3)
            write_short(90)
            message_end()
           
            message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
            write_byte(TE_GUNSHOTDECAL)
            write_coord_f(flEnd[0])
            write_coord_f(flEnd[1])
            write_coord_f(flEnd[2])
            write_short(iAttacker)
            write_byte(GUNSHOT_DECALS[random_num (0, sizeof GUNSHOT_DECALS -1)])
            message_end()
        }
    	return HAM_IGNORED
    }
     
    public Weapon_Deploy_Post(weapon_entity)
    {
        static owner
        owner = fm_cs_get_weapon_ent_owner(weapon_entity)
       
        static weaponid
        weaponid = cs_get_weapon_id(weapon_entity)
       
        replace_weapon_models(owner, weaponid)
    }
     
    public Weapon_AddToPlayer(weapon_entity, id)
    {
        if(!is_valid_ent(weapon_entity) || !is_user_connected(id))
            return HAM_IGNORED
       
        if(entity_get_int(weapon_entity, EV_INT_WEAPONKEY) == WEAPON_KEY)
        {
            g_has_weapon[id] = true
            entity_set_int(weapon_entity, EV_INT_WEAPONKEY, 0)
            set_weapon_list(id, weapon_name_buffer)
           
            return HAM_HANDLED
        }
        else
        {
            set_weapon_list(id, weapon_base_buffer)
        }
       
        return HAM_IGNORED
    }
     
    public Weapon_PrimaryAttack(weapon_entity)
    {
        new Player = get_pdata_cbase(weapon_entity, 41, 4)
       
        if(!g_has_weapon[Player])
            return
       
        g_IsInPrimaryAttack = 1
        pev(Player,pev_punchangle,cl_pushangle[Player])
       
        g_clip_ammo[Player] = cs_get_weapon_ammo(weapon_entity)
    }
     
    public Weapon_PrimaryAttack_Post(weapon_entity)
    {
        g_IsInPrimaryAttack = 0
        new Player = get_pdata_cbase(weapon_entity, 41, 4)
       
        new szClip, szAmmo
        get_user_weapon(Player, szClip, szAmmo)
       
        if(!is_user_alive(Player))
            return
           
        if(g_has_weapon[Player])
        {
            if(!g_clip_ammo[Player])
            {
                ExecuteHam(Ham_Weapon_PlayEmptySound, weapon_entity)
                return
            }
           
            new Float:push[3]
            pev(Player,pev_punchangle,push)
            xs_vec_sub(push,cl_pushangle[Player],push)
            xs_vec_mul_scalar(push,get_pcvar_float(cvar_recoil),push)
            xs_vec_add(push,cl_pushangle[Player],push)
            set_pev(Player,pev_punchangle,push)
           
            set_weapon_shoot_anim(Player)
            emit_sound(Player, CHAN_WEAPON, Fire_Sounds[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
            set_task(random_float(0.001, 0.005), "Re_MuzzleFlash", Player+TASK_MUZZLEFLASH)
        }
    }
     
    public Weapon_ItemPostFrame(weapon_entity)
    {
        new id = pev(weapon_entity, pev_owner)
        if(!is_user_connected(id))
            return HAM_IGNORED
        if(!g_has_weapon[id])
            return HAM_IGNORED
     
        static iClipExtra
        iClipExtra = get_pcvar_num(cvar_clip)
        new Float:flNextAttack = get_pdata_float(id, m_flNextAttack, OFFSET_LINUX)
     
        new iBpAmmo = cs_get_user_bpammo(id, CSW_BASE)
        new iClip = get_pdata_int(weapon_entity, m_iClip, OFFSET_LINUX_WEAPONS)
     
        new fInReload = get_pdata_int(weapon_entity, m_fInReload, OFFSET_LINUX_WEAPONS)
        if(fInReload && flNextAttack <= 0.0)
        {
            new j = min(iClipExtra - iClip, iBpAmmo)
       
            set_pdata_int(weapon_entity, m_iClip, iClip + j, OFFSET_LINUX_WEAPONS)
            cs_set_user_bpammo(id, CSW_BASE, iBpAmmo-j)
           
            set_pdata_int(weapon_entity, m_fInReload, 0, OFFSET_LINUX_WEAPONS)
            fInReload = 0
        }
        else if(!fInReload && !get_pdata_int(weapon_entity, 74, 4))
        {
            if(!iClip)
                return HAM_IGNORED
               
            if(get_pdata_float(id, 83, 5) <= 0.0 && get_pdata_float(weapon_entity, 46, 4) <= 0.0 ||
            get_pdata_float(weapon_entity, 47, 4) <= 0.0 || get_pdata_float(weapon_entity, 48, 4) <= 0.0)
            {
                if(pev(id, pev_button) & IN_ATTACK)
                {
                    if(g_Mode[id] == MODE_B)
                        Shoot_Special(id)
                }
                else if(pev(id, pev_button) & IN_ATTACK2)
                {
                    set_turbulent_zoom(id, 0)
                    set_weapons_timeidle(id, CSW_BASE, 0.4)
                    set_player_nextattackx(id, 0.4)
                }
            }
        }
       
        return HAM_IGNORED
    }
     
    public Weapon_Reload(weapon_entity)
    {
        new id = pev(weapon_entity, pev_owner)
        if(!is_user_connected(id))
            return HAM_IGNORED
        if(!g_has_weapon[id])
            return HAM_IGNORED
        static iClipExtra
        if(g_has_weapon[id])
            iClipExtra = get_pcvar_num(cvar_clip)
     
        g_weapon_TmpClip[id] = -1
     
        new iBpAmmo = cs_get_user_bpammo(id, CSW_BASE)
        new iClip = get_pdata_int(weapon_entity, m_iClip, OFFSET_LINUX_WEAPONS)
     
        if(iBpAmmo <= 0)
            return HAM_SUPERCEDE
     
        if(iClip >= iClipExtra)
            return HAM_SUPERCEDE
     
        g_weapon_TmpClip[id] = iClip
     
        return HAM_IGNORED
    }
     
    public Weapon_Reload_Post(weapon_entity)
    {
        new id = pev(weapon_entity, pev_owner)
        if (!is_user_connected(id))
            return HAM_IGNORED
     
        if(!g_has_weapon[id])
            return HAM_IGNORED
        if(g_weapon_TmpClip[id] == -1)
            return HAM_IGNORED
       
        set_pdata_int(weapon_entity, m_iClip, g_weapon_TmpClip[id], OFFSET_LINUX_WEAPONS)
        set_pdata_float(weapon_entity, m_flTimeWeaponIdle, RELOAD_TIME, OFFSET_LINUX_WEAPONS)
        set_pdata_float(id, m_flNextAttack, RELOAD_TIME, OFFSET_LINUX)
        set_pdata_int(weapon_entity, m_fInReload, 1, OFFSET_LINUX_WEAPONS)
       
        set_weapon_anim(id, ANIM_RELOAD)
        set_pdata_string(id, (492) * 4, ANIMEXT, -1 , 20)
        set_turbulent_zoom(id, 1)
       
        return HAM_IGNORED
    }
     
    /* ===================== END OF ALL HAM FORWARD ====================== */
    /* ================= START OF OTHER PUBLIC FUNCTION  ================= */
    public give_item(id)
    {
        //if (!ze_is_user_zombie(id)) {
            drop_weapons(id, 1)
            new iWeapon = fm_give_item(id, weapon_base_buffer)
            if(iWeapon > 0)
            {
                cs_set_weapon_ammo(iWeapon, get_pcvar_num(cvar_clip))
                cs_set_user_bpammo(id, CSW_BASE, get_pcvar_num(cvar_ammo))
                emit_sound(id, CHAN_ITEM, "items/gunpickup2.wav", VOL_NORM, ATTN_NORM,0,PITCH_NORM)
               
                set_weapon_anim(id, ANIM_DRAW)
                set_pdata_float(id, m_flNextAttack, DRAW_TIME, OFFSET_LINUX)
               
                set_weapon_list(id, weapon_name_buffer)
                set_pdata_string(id, (492) * 4, ANIMEXT, -1 , 20)
                set_pdata_int(iWeapon, 74, MODE_A)
            }
           
            g_has_weapon[id] = true
            g_Mode[id] = MODE_A
            remove_bitvar(id)
        //}
    }
     
    public remove_item(id)
    {
        g_has_weapon[id] = false
        g_Mode[id] = MODE_A
        remove_bitvar(id)
    }
     
    public remove_bitvar(id)
    {
        g_attack_type[id] = 0
        g_Muzzleflash[id][0] = 0
        g_Muzzleflash[id][1] = 0
    }
     
    public weapon_hook(id)
    {
        engclient_cmd(id, weapon_base_buffer)
        return PLUGIN_HANDLED
    }
     
    public replace_weapon_models(id, weaponid)
    {
        if(weaponid != CSW_BASE)
        {
            if(g_has_weapon[id])
            {
                remove_bitvar(id)
                set_turbulent_zoom(id, 1)
            }
        }
       
        switch(weaponid)
        {
            case CSW_BASE:
            {
                if(g_has_weapon[id])
                {
                    set_pev(id, pev_viewmodel2, V_MODEL)
                    set_pev(id, pev_weaponmodel2, P_MODEL)
                   
                    if(oldweap[id] != CSW_BASE)
                    {
                        set_weapon_anim(id, ANIM_DRAW)
                        set_player_nextattackx(id, DRAW_TIME)
                        set_weapons_timeidle(id, CSW_BASE, DRAW_TIME)
                        set_weapon_list(id, weapon_name_buffer)
                        set_pdata_string(id, (492) * 4, ANIMEXT, -1 , 20)
                    }
                }
            }
        }
       
        oldweap[id] = weaponid
    }
     
    public Shoot_Special(id)
    {
        if(!is_user_alive(id) || !is_user_connected(id))
            return
           
        new szClip, szWeapId
        szWeapId = get_user_weapon(id, szClip)
        if(szWeapId != CSW_BASE || !g_has_weapon[id] || !szClip)
            return
       
        g_Muzzleflash[id][0] = 3
        set_task(random_float(0.001, 0.005), "Re_MuzzleFlash", id+TASK_MUZZLEFLASH)
       
        static Float:PunchAngles[3]
        PunchAngles[0] = -5.0
        PunchAngles[1] = -2.5
        PunchAngles[2] = -2.5
        set_pev(id, pev_punchangle, PunchAngles)
       
        set_weapon_shoot_anim(id)
        emit_sound(id, CHAN_WEAPON, Fire_Sounds[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
       
        new Float:fStart[3], Float:originF[3]
        new target, body
       
        fm_get_aim_origin(id, originF)
        get_user_aiming(id, target, body)
       
        pev(id, pev_origin, fStart)
        engfunc(EngFunc_MessageBegin, MSG_PVS, SVC_TEMPENTITY, fStart, 0)
        write_byte(TE_SPRITE)
        engfunc(EngFunc_WriteCoord, originF[0])
        engfunc(EngFunc_WriteCoord, originF[1])
        engfunc(EngFunc_WriteCoord, originF[2] + 20.0)
        write_short(sturbulentHit)
        write_byte(10)
        write_byte(240)
        message_end()
       
        new a = FM_NULLENT
        while((a = find_ent_in_sphere(a, originF, float(get_pcvar_num(cvar_radius)))) != 0)
        {
            if(id == a)
                continue
       
            if(pev(a, pev_takedamage) != DAMAGE_NO)
                ExecuteHamB(Ham_TakeDamage, a, 0, id, float(get_pcvar_num(cvar_dmg_2)), DMG_BULLET)
        }
       
        if(!is_user_alive(target))
        {
            static Classname[32]
            pev(target, pev_classname, Classname, sizeof(Classname))
           
            if(equal(Classname, "func_breakable"))
                ExecuteHamB(Ham_TakeDamage, target, 0, 0, float(get_pcvar_num(cvar_dmg_2)), DMG_GENERIC)
        }
        else if(is_user_alive(target) && is_user_connected(target) && ze_is_user_zombie(target))
        {
            static Float:MyOrigin[3]
            pev(id, pev_origin, MyOrigin)
            hook_ent2(target, MyOrigin, 40.0, 2)
            ExecuteHamB(Ham_TakeDamage, target, 0, id, float(get_pcvar_num(cvar_dmg_2))*0.75, DMG_BULLET)
        }
       
        static entity_weapon
        entity_weapon = find_ent_by_owner(ENG_NULLENT, weapon_base_buffer, id)
       
        if(!pev_valid(entity_weapon))
            return
       
        cs_set_weapon_ammo(entity_weapon, szClip - 1)
        set_player_nextattackx(id, 0.7)
        set_weapons_timeidle(id, CSW_BASE, 0.7)
    }
     
    public set_weapon_shoot_anim(id)
    {
        if(!g_attack_type[id])
        {
            set_weapon_anim(id, ANIM_SHOOT1)
            g_attack_type[id] = 1
        }
        else if(g_attack_type[id] == 1)
        {
            set_weapon_anim(id, ANIM_SHOOT2)
            g_attack_type[id] = 2
        }
        else if(g_attack_type[id] == 2)
        {
            set_weapon_anim(id, ANIM_SHOOT3)
            g_attack_type[id] = 0
        }
    }
     
    public Re_MuzzleFlash(id)
    {
        id -= TASK_MUZZLEFLASH
     
        if(!is_user_alive(id) || !is_user_connected(id))
            return
        if(get_user_weapon(id) != CSW_BASE || !g_has_weapon[id])
            return
       
        if(g_Mode[id] == MODE_A) g_Muzzleflash[id][0] = true
        else if(g_Mode[id] == MODE_B) g_Muzzleflash[id][1] = true
    }
     
     
    stock set_turbulent_zoom(id, const reset = 0)
    {
        if(reset == 1)
        {
            set_fov(id)
            g_Mode[id] = MODE_A
        }
        else if(reset == 0)
        {
            if(g_Mode[id] == MODE_A)
            {
                set_fov(id, 80)
                g_Mode[id] = MODE_B
            }
            else if(g_Mode[id] == MODE_B)
            {
                set_fov(id)
                g_Mode[id] = MODE_A
            }
        }
    }
     
    stock set_fov(id, fov = 90)
    {
        message_begin(MSG_ONE, get_user_msgid("SetFOV"), {0,0,0}, id)
        write_byte(fov)
        message_end()
    }
     
    stock set_weapon_list(id, const weapon_name[])
    {
        message_begin(MSG_ONE, get_user_msgid("WeaponList"), {0,0,0}, id)
        write_string(weapon_name)
        write_byte(g_list_variables[2])
        write_byte(g_list_variables[3])
        write_byte(g_list_variables[4])
        write_byte(g_list_variables[5])
        write_byte(g_list_variables[6])
        write_byte(g_list_variables[7])
        write_byte(g_list_variables[8])
        write_byte(g_list_variables[9])
        message_end()
    }
     
    stock hook_ent2(ent, Float:VicOrigin[3], Float:speed, type)
    {
        static Float:fl_Velocity[3]
        static Float:EntOrigin[3]
       
        pev(ent, pev_origin, EntOrigin)
        static Float:distance_f
        distance_f = 100.0
       
        new Float:fl_Time = distance_f / speed
        if(type == 1)
        {
            fl_Velocity[0] = ((VicOrigin[0] - EntOrigin[0]) / fl_Time) * 1.5
            fl_Velocity[1] = ((VicOrigin[1] - EntOrigin[1]) / fl_Time) * 1.5
            fl_Velocity[2] = (VicOrigin[2] - EntOrigin[2]) / fl_Time       
        }
        else if(type == 2)
        {
            fl_Velocity[0] = ((EntOrigin[0] - VicOrigin[0]) / fl_Time) * 1.5
            fl_Velocity[1] = ((EntOrigin[1] - VicOrigin[1]) / fl_Time) * 1.5
            fl_Velocity[2] = (EntOrigin[2] - VicOrigin[2]) / fl_Time
        }
       
        entity_set_vector(ent, EV_VEC_velocity, fl_Velocity)
    }
     
    stock drop_weapons(id, dropwhat)
    {
        static weapons[32], num = 0, i, weaponid
        get_user_weapons(id, weapons, num)
         
        for (i = 0; i < num; i++)
        {
            weaponid = weapons[i]
             
            if(dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM))
            {
                static wname[32]
                get_weaponname(weaponid, wname, sizeof wname - 1)
                engclient_cmd(id, "drop", wname)
            }
        }
    }
     
    stock set_player_nextattackx(id, Float:nexttime)
    {
        if(!is_user_alive(id))
            return
           
        set_pdata_float(id, m_flNextAttack, nexttime, 5)
    }
     
    stock set_weapons_timeidle(id, WeaponId ,Float:TimeIdle)
    {
        if(!is_user_alive(id))
            return
           
        static entwpn; entwpn = fm_get_user_weapon_entity(id, WeaponId)
        if(!pev_valid(entwpn))
            return
           
        set_pdata_float(entwpn, 46, TimeIdle, OFFSET_LINUX_WEAPONS)
        set_pdata_float(entwpn, 47, TimeIdle, OFFSET_LINUX_WEAPONS)
        set_pdata_float(entwpn, 48, TimeIdle + 1.0, OFFSET_LINUX_WEAPONS)
    }
     
    stock set_weapons_timeidlex(id, Float:TimeIdle, Float:Idle)
    {
        new entwpn = fm_get_user_weapon_entity(id, CSW_BASE)
        if(!pev_valid(entwpn))
            return
       
        set_pdata_float(entwpn, 46, TimeIdle, 4)
        set_pdata_float(entwpn, 47, TimeIdle, 4)
        set_pdata_float(entwpn, 48, Idle, 4)
    }
     
    stock set_weapon_anim(const Player, const Sequence)
    {
        set_pev(Player, pev_weaponanim, Sequence)
       
        message_begin(MSG_ONE_UNRELIABLE, SVC_WEAPONANIM, .player = Player)
        write_byte(Sequence)
        write_byte(pev(Player, pev_body))
        message_end()
    }
     
    stock precache_viewmodel_sound(const model[])
    {
        new file, i, k
        if((file = fopen(model, "rt")))
        {
            new szsoundpath[64], NumSeq, SeqID, Event, NumEvents, EventID
            fseek(file, 164, SEEK_SET)
            fread(file, NumSeq, BLOCK_INT)
            fread(file, SeqID, BLOCK_INT)
           
            for(i = 0; i < NumSeq; i++)
            {
                fseek(file, SeqID + 48 + 176 * i, SEEK_SET)
                fread(file, NumEvents, BLOCK_INT)
                fread(file, EventID, BLOCK_INT)
                fseek(file, EventID + 176 * i, SEEK_SET)
               
               
                for(k = 0; k < NumEvents; k++)
                {
                    fseek(file, EventID + 4 + 76 * k, SEEK_SET)
                    fread(file, Event, BLOCK_INT)
                    fseek(file, 4, SEEK_CUR)
                   
                    if(Event != 5004)
                        continue
                   
                    fread_blocks(file, szsoundpath, 64, BLOCK_CHAR)
                   
                    if(strlen(szsoundpath))
                    {
                        strtolower(szsoundpath)
                        engfunc(EngFunc_PrecacheSound, szsoundpath)
                    }
                }
            }
        }
        fclose(file)
    }
     
    stock fm_cs_get_weapon_ent_owner(ent)
    {
        return get_pdata_cbase(ent, OFFSET_WEAPONOWNER, OFFSET_LINUX_WEAPONS)
    }
He who fails to plan is planning to fail

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#8

Post by Raheem » 5 years ago

How to block damage at zombie freeze time?

1. Create boolean variable 2. At the appearing of zombies make it true 3. At the release of zombies make it false 4. At Ham_TraceAttack we add this check:
He who fails to plan is planning to fail

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

#9

Post by czirimbolo » 5 years ago

Raheem, please edit Jack code, not the original :)
Image

User avatar
Raheem
Mod Developer
Mod Developer
Posts: 2214
Joined: 7 years ago
Contact:

#10

Post by Raheem » 5 years ago

OH, forget it :laughing:. UPDATED.
He who fails to plan is planning to fail

Post Reply

Create an account or sign in to join the discussion

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

Create an account

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

Register

Sign in

Who is online

Users browsing this forum: Bing [Bot] and 7 guests