Skull-3 (Double Weapon)

Pluginuri pentru modul AmxModX.

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
User avatar
Rainq
Membru, skill +2
Membru, skill +2
Posts: 681
Joined: 21 Jul 2015, 19:50
Detinator Steam: Da
CS Status: Retras
Detinator server CS: zm.extreamcs.com
SteamID: mrainq
Reputatie: Fost super moderator
Fost detinator ZM.eXtreamCS.COM
Fost Membru Club eXtreamCS (trei luni)
Fond eXtream: 0
Location: Bucharest
Discord: manuraiders
Has thanked: 29 times
Been thanked: 51 times
Contact:

19 Mar 2021, 16:59

Image
Descriere: Skull-3 (Double Weapon)

Descarcare: download

Code: Select all

#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>
#include <fun>
#include <zombieplague>

#define PLUGIN "[Zombie Plague] Primary Weapon: Skull-3"
#define VERSION "1.0"
#define AUTHOR "Dias"

#define weapon_skull3_m1 "weapon_mp5navy"
#define weapon_skull3_m2 "weapon_p90"
#define CSW_SKULL3_M1 CSW_MP5NAVY
#define CSW_SKULL3_M2 CSW_P90
#define SKULL3_M1_KEY 2082
#define SKULL3_M2_KEY 2086

const SILENT_BS	= ((1<<CSW_USP)|(1<<CSW_SKULL3_M1))
const SILENT_BS2 = ((1<<CSW_USP)|(1<<CSW_SKULL3_M2))
stock const g_iDftMaxClip[CSW_P90+1] = {
	-1,  13, -1, 10,  1,  7,    1, 30, 30,  1,  30, 
	20, 25, 30, 35, 25,   12, 20, 10, 30, 100, 
8 , 30, 30, 20,  2,    7, 30, 30, -1,  50}
stock const Float:g_fDelay[CSW_P90+1] = {
	0.00, 2.70, 0.00, 2.00, 0.00, 0.55,   0.00, 3.15, 3.30, 0.00, 4.50, 
	2.70, 3.50, 3.35, 2.45, 3.30,   2.70, 2.20, 2.50, 2.63, 4.70, 
	0.55, 3.05, 2.12, 3.50, 0.00,   2.20, 3.00, 2.45, 0.00, 3.40
}

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_m249",
	"weapon_m3", "weapon_m4a1", "weapon_tmp", "weapon_g3sg1", "weapon_flashbang", "weapon_deagle", "weapon_sg552",
	"weapon_ak47", "weapon_knife"
}

const PRIMARY_WEAPONS_BIT_SUM = (1<<CSW_SCOUT)|(1<<CSW_XM1014)|(1<<CSW_MAC10)|(1<<CSW_MAC10)|(1<<CSW_UMP45)|(1<<CSW_SG550)|(1<<CSW_MAC10)|(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 g_skull3_id
new g_had_skull3[33], g_skull3_mode[33], g_skull3_ammo[33], g_skull3_changing[33],
g_zoomed[33], g_remove_ent[33], g_blood, g_bloodspray, g_pbe_skull3_m1,
g_pbe_skull3_m2, g_is_attacking[33],  Float:g_zoom_time[33], g_skull3_m2_ammo[33],
Float:g_recoil[33], g_shot_anim[33], g_skull3_clip[33], g_reload[33], g_reg
new cvar_recoil_m1, cvar_recoil_m2, cvar_clip_m1, cvar_clip_m2, cvar_speed_m1, cvar_speed_m2,
cvar_damage_m1, cvar_damage_m2, cvar_decrease_speed
new Float:g_oldspeed[33]

new const v_model[] = "models/zombimod/v_skull3.mdl"
new const v_model2[] = "models/zombimod/v_skull3_2.mdl"
new const p_model[] = "models/zombimod/p_skull3.mdl"
new const p_model2[] = "models/zombimod/p_skull3dual.mdl"
new const w_model[] = "models/zombimod/w_skull3.mdl"

new const skull3_sound[5][] = 
{
	"zombimod/skull3_shoot.wav",
	"zombimod/skull3_shoot_2.wav",
	"zombimod/skull3_idle.wav",
	"zombimod/skull3_clipin.wav",
	"zombimod/skull3_boltpull.wav"
}

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	g_skull3_id = zp_register_extra_item("Skull-3 (Double Weapon)", 30, ZP_TEAM_HUMAN)
	
	register_forward(FM_CmdStart, "fw_CmdStart")
	register_forward(FM_UpdateClientData, "fw_UpdateClientData_Post", 1)	
	register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")
	register_forward(FM_SetModel, "fw_SetModel")	
	
	RegisterHam(Ham_Spawn, "player", "ham_spawn_player_post", 1)
	RegisterHam(Ham_Item_AddToPlayer, weapon_skull3_m1, "ham_add_skull3_m1", 1)
	RegisterHam(Ham_Item_AddToPlayer, weapon_skull3_m2, "ham_add_skull3_m2", 1)
	RegisterHam(Ham_CS_Weapon_SendWeaponAnim, weapon_skull3_m1, "ham_anim_skull3_m1", 1)
	RegisterHam(Ham_CS_Weapon_SendWeaponAnim, weapon_skull3_m2, "ham_anim_skull3_m2", 1)
	RegisterHam(Ham_Item_Deploy, weapon_skull3_m1, "ham_deploy_skull3_m1", 1)
	RegisterHam(Ham_Item_Deploy, weapon_skull3_m2, "ham_deploy_skull3_m2", 1)
	
	for (new i = 1; i <= CSW_P90 - 2; i++)
	{
		if (strlen(WEAPONENTNAMES[i]) && !equal(WEAPONENTNAMES[i], "weapon_knife"))
			RegisterHam(Ham_Item_Deploy, WEAPONENTNAMES[i], "fw_Ham_Item_Deploy_Post", 1)
	}
	
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_skull3_m1, "ham_attack_skull3")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_skull3_m2, "ham_attack_skull3")
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_skull3_m1, "ham_attack_skull3_post", 1)	
	RegisterHam(Ham_Weapon_PrimaryAttack, weapon_skull3_m2, "ham_attack_skull3_post", 1)	
	RegisterHam(Ham_Weapon_Reload, weapon_skull3_m1, "ham_reload_skull3")
	RegisterHam(Ham_Weapon_Reload, weapon_skull3_m2, "ham_reload_skull3")
	RegisterHam(Ham_Weapon_Reload, weapon_skull3_m1, "ham_reload_skull3_post", 1)
	RegisterHam(Ham_Weapon_Reload, weapon_skull3_m2, "ham_reload_skull3_post", 1)
	RegisterHam(Ham_Item_PostFrame, weapon_skull3_m1, "ham_postframe_skull3")
	RegisterHam(Ham_Item_PostFrame, weapon_skull3_m2, "ham_postframe_skull3")
	
	RegisterHam(Ham_TraceAttack, "worldspawn", "ham_traceattack")
	RegisterHam(Ham_TraceAttack, "player", "ham_traceattack")
	
	cvar_recoil_m1 = register_cvar("skull3_recoil_m1", "0.46")
	cvar_recoil_m2 = register_cvar("skull3_recoil_m2", "0.56")
	cvar_clip_m1 = register_cvar("skull3_clip_m1", "35")
	cvar_clip_m2 = register_cvar("skull3_clip_m2", "70")
	cvar_speed_m1 = register_cvar("skull3_speed_m1", "1.35")
	cvar_speed_m2 = register_cvar("skull3_speed_m2", "1.28")
	cvar_damage_m1 = register_cvar("skull3_damage_m1", "27")
	cvar_damage_m2 = register_cvar("skull3_damage_m2", "31")
	cvar_decrease_speed = register_cvar("skull3_decrease_speed", "110.0")
	
	register_event("CurWeapon", "event_checkweapon", "be", "1=1")
	
	register_clcmd("drop", "cmd_drop")
	register_clcmd("weapon_skull3", "hook_change_weapon1")
	register_clcmd("weapon_skull3_2", "hook_change_weapon2")
}

public plugin_precache()
{
	engfunc(EngFunc_PrecacheModel, v_model)
	engfunc(EngFunc_PrecacheModel, v_model2)
	engfunc(EngFunc_PrecacheModel, p_model)
	engfunc(EngFunc_PrecacheModel, p_model2)
	engfunc(EngFunc_PrecacheModel, w_model)
	
	for(new i = 0; i < sizeof(skull3_sound); i++)
		engfunc(EngFunc_PrecacheSound, skull3_sound[i])
	
	engfunc(EngFunc_PrecacheGeneric, "sprites/zombimod/skull3_hud.spr")
	engfunc(EngFunc_PrecacheGeneric, "sprites/zombimod/skull3_ammo.spr")
	engfunc(EngFunc_PrecacheGeneric, "sprites/zombimod/weapon_skull3.txt")
	engfunc(EngFunc_PrecacheGeneric, "sprites/zombimod/weapon_skull3_2.txt")
	
	g_blood = precache_model("sprites/zombimod/blood.spr")
	g_bloodspray = precache_model("sprites/zombimod/bloodspray.spr")			
	
	register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
}

public fw_PrecacheEvent_Post(type, const name[])
{
	if(equal("events/mp5n.sc", name))
	{
		g_pbe_skull3_m1 = get_orig_retval()
		return FMRES_HANDLED
	} else if(equal("events/p90.sc", name)) {
		g_pbe_skull3_m2 = get_orig_retval()
		return FMRES_HANDLED
	}

	return FMRES_IGNORED
}

public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
	if (!(1 <= invoker <= get_maxplayers()))
		return FMRES_IGNORED	
	if(!g_is_attacking[invoker])
		return FMRES_IGNORED
	if(eventid == g_pbe_skull3_m1 || eventid == g_pbe_skull3_m2)
		playback_event(flags | FEV_HOSTONLY, invoker, eventid, delay, origin, angles, fparam1, fparam2, iParam1, iParam2, bParam1, bParam2)
	
	return FMRES_SUPERCEDE
}

public zp_extra_item_selected(id, itemid)
{
	if(itemid != g_skull3_id)
		return PLUGIN_HANDLED
	
	drop_weapons(id, 1)
	
	g_had_skull3[id] = 1
	g_skull3_mode[id] = 1
	g_skull3_ammo[id] = 200
	g_skull3_changing[id] = 0
	g_zoomed[id] = 0
	g_oldspeed[id] = get_user_maxspeed(id)
	
	give_item(id, weapon_skull3_m1)
	give_item(id, weapon_skull3_m2)
	
	static skull3_ent
	
	skull3_ent = fm_find_ent_by_owner(-1, weapon_skull3_m1, id)
	set_pev(skull3_ent, pev_iuser4, SKULL3_M1_KEY)
	cs_set_weapon_ammo(skull3_ent, get_pcvar_num(cvar_clip_m1))
	cs_set_user_bpammo(id, CSW_SKULL3_M1, g_skull3_ammo[id])
	
	skull3_ent = fm_find_ent_by_owner(-1, weapon_skull3_m2, id)
	set_pev(skull3_ent, pev_iuser4, SKULL3_M2_KEY)
	cs_set_weapon_ammo(skull3_ent, get_pcvar_num(cvar_clip_m2))
	cs_set_user_bpammo(id, CSW_SKULL3_M2, g_skull3_ammo[id])
	
	engclient_cmd(id, weapon_skull3_m1)
	
	return PLUGIN_CONTINUE
}

public ham_spawn_player_post(id)
{
	remove_skull3(id)
}

public zp_user_infected_post(id)
{
	remove_skull3(id)
}

public remove_skull3(id)
{
	if(!is_user_connected(id))
		return
	
	g_had_skull3[id] = 0
	g_skull3_mode[id] = 0
	g_skull3_ammo[id] = 0
	g_skull3_changing[id] = 0
	g_zoomed[id] = 0	
}

public hook_change_weapon1(id)
{
	if(g_had_skull3[id])
	{
		engclient_cmd(id, weapon_skull3_m1)
	}
}

public hook_change_weapon2(id)
{
	if(g_had_skull3[id])
	{
		engclient_cmd(id, weapon_skull3_m2)
	}
}

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

public do_register(id)
{
	RegisterHamFromEntity(Ham_TraceAttack, id, "ham_traceattack")	
	RegisterHamFromEntity(Ham_Spawn, id, "ham_spawn_player")	
}

public event_checkweapon(id)
{
	if(!is_user_alive(id) || !is_user_connected(id))
		return PLUGIN_HANDLED
	if(zp_get_user_zombie(id))
		return PLUGIN_HANDLED
	if(!g_had_skull3[id])
		return PLUGIN_HANDLED
	
	static CurWeapon
	CurWeapon = get_user_weapon(id)
	
	if(CurWeapon == CSW_SKULL3_M1 && g_skull3_mode[id] == 1)
	{
		set_pev(id, pev_viewmodel2, v_model)
		set_pev(id, pev_weaponmodel2, p_model)
		
		check_weapon_speed(id, 1)
	} else if(CurWeapon == CSW_SKULL3_M2 && g_skull3_mode[id] == 2) {
		set_pev(id, pev_viewmodel2, v_model2)
		set_pev(id, pev_weaponmodel2, p_model2)
		
		check_weapon_speed(id, 2)
	}
	
	return PLUGIN_CONTINUE
}

public check_weapon_speed(id, mode)
{
	static Float:iSpeed
	
	if(mode == 1)
		iSpeed = get_pcvar_float(cvar_speed_m1)
	else if(mode == 2)
		iSpeed = get_pcvar_float(cvar_speed_m2)
	
	static weapon_name[32], ent
	
	if(mode == 1)
		get_weaponname(CSW_SKULL3_M1, weapon_name, sizeof(weapon_name))
	else if(mode == 2)
		get_weaponname(CSW_SKULL3_M2, weapon_name, sizeof(weapon_name))
	
	ent = find_ent_by_owner(-1, weapon_name, id)
	if(ent)
	{
		static Float:Delay, Float:M_Delay
		Delay = get_pdata_float(ent, 46, 4) * iSpeed
		M_Delay = get_pdata_float(ent, 47, 4) * iSpeed
		if (Delay > 0.0)
		{
			set_pdata_float(ent, 46, Delay, 4)
			set_pdata_float(ent, 47, M_Delay, 4)
		}
	}	
}

public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
	if(!is_user_alive(id) || !is_user_connected(id))
		return FMRES_IGNORED
	if(zp_get_user_zombie(id))
		return FMRES_IGNORED		
	if(!g_had_skull3[id])
		return FMRES_IGNORED
	
	if(get_user_weapon(id) == CSW_SKULL3_M1 || get_user_weapon(id) == CSW_SKULL3_M2)
	{
		set_cd(cd_handle, CD_flNextAttack, halflife_time() + 0.001) 
		
		if(get_user_weapon(id) == CSW_SKULL3_M2)
		{
			switch(pev(id, pev_sequence))
			{
				case 10: set_pev(id, pev_sequence, 22)
				case 11: 
				{
					if(g_shot_anim[id] == 0)
					{
						set_pev(id, pev_sequence, 23)
					} else if(g_shot_anim[id] == 1) {
						set_pev(id, pev_sequence, 24)
					}
				}
				case 12: set_pev(id, pev_sequence, 25)				
				case 13: set_pev(id, pev_sequence, 26)
				case 14: 
				{
					if(g_shot_anim[id] == 0)
					{
						set_pev(id, pev_sequence, 27)
					} else if(g_shot_anim[id] == 1) {
						set_pev(id, pev_sequence, 28)
					}
				}
				case 15: set_pev(id, pev_sequence, 29)
			}
		}
	}
	
	return FMRES_HANDLED
}

public cmd_drop(id)
{
	if(get_user_weapon(id) == CSW_SKULL3_M1 || get_user_weapon(id) == CSW_SKULL3_M2 && g_had_skull3[id])
	{
		//return PLUGIN_HANDLED
	}
		
	return PLUGIN_CONTINUE
}

public fw_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 id
	id = entity_get_edict(entity, EV_ENT_owner)
	
	if(equal(model, "models/w_mp5.mdl"))
	{
		static weapon
		weapon = find_ent_by_owner(-1, weapon_skull3_m1, entity)	
		
		if(!pev_valid(weapon))
			return FMRES_IGNORED
		
		if(g_had_skull3[id])
		{
			static weapon2
			weapon2 = find_ent_by_owner(-1, weapon_skull3_m2, id)			
			
			if(pev_valid(weapon2))
			{
				reset_player_maxspeed(id)					
				
				g_skull3_m2_ammo[id] = cs_get_weapon_ammo(weapon2)
				g_remove_ent[id] = entity
				//ham_strip_weapon(id, weapon_skull3_m2)
				//fm_strip_user_gun(id, CSW_SKULL3_M2, weapon_skull3_m2)
				remove_gun(id, CSW_SKULL3_M2)
				client_cmd(id, "slot3")
				
				g_had_skull3[id] = 0
				entity_set_model(entity, w_model)
				
				entity_set_int(weapon, EV_INT_impulse, 2085)
				
				return FMRES_SUPERCEDE
			}
		}
	} 
	if(equal(model, "models/w_p90.mdl"))
	{
		static weapon
		weapon = find_ent_by_owner(-1, weapon_skull3_m2, entity)	
		
		if(!pev_valid(weapon))
			return FMRES_IGNORED
		
		if(g_had_skull3[id])
		{
			static weapon1
			weapon1 = find_ent_by_owner(-1, weapon_skull3_m1, id)			
			
			reset_player_maxspeed(id)	
			
			if(pev_valid(weapon1))
			{
				g_skull3_m2_ammo[id] = cs_get_weapon_ammo(weapon1)
				g_remove_ent[id] = entity
				//ham_strip_weapon(id, weapon_skull3_m1)
				//fm_strip_user_gun(id, CSW_SKULL3_M1, weapon_skull3_m1)
				remove_gun(id, CSW_SKULL3_M1)
				client_cmd(id, "slot3")
				
				g_had_skull3[id] = 0
				entity_set_model(entity, w_model)
				
				entity_set_int(weapon, EV_INT_impulse, 2085)
				
				return FMRES_SUPERCEDE
			}
		}
	} 	
	
	
	return FMRES_IGNORED;
}

public remove_gun(id, CSW) 
{ 
	new wpnList[32] 
	new number
	get_user_weapons(id,wpnList,number) 
	for (new i = 0;i < number ;i++) { 
		if (wpnList[i] == CSW) {
			fm_strip_user_gun(id, wpnList[i])
		}
	}
} 

public fw_CmdStart(id, uc_handle, seed)
{
	if(!is_user_alive(id) || !is_user_connected(id))
		return FMRES_IGNORED	
	if(zp_get_user_zombie(id))
		return FMRES_IGNORED		
	if(!g_had_skull3[id])
		return FMRES_IGNORED	
	if(get_user_weapon(id) != CSW_SKULL3_M1 || g_skull3_mode[id] != 1)
		return FMRES_IGNORED
	
	static CurButton
	CurButton = get_uc(uc_handle, UC_Buttons)
	
	if(CurButton & IN_ATTACK2)
	{
		static Float:CurTime
		CurTime = get_gametime()
		
		if(CurTime - 0.5 > g_zoom_time[id])
		{
			if(!g_zoomed[id])
			{
				cs_set_user_zoom(id, CS_SET_AUGSG552_ZOOM, 1)
				g_zoomed[id] = 1
				} else {
				cs_set_user_zoom(id, CS_RESET_ZOOM, 1)
				g_zoomed[id] = 0
			}
			
			g_zoom_time[id] = CurTime
		}
	}
	
	return FMRES_HANDLED
}

public ham_traceattack(ent, attacker, Float:Damage, Float:fDir[3], pentru, iDamageType)
{
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED	
	if(zp_get_user_zombie(attacker))
		return HAM_IGNORED		
	if(!g_had_skull3[attacker])
		return HAM_IGNORED
	
	static Float:flEnd[3]
	get_tr2(pentru, TR_vecEndPos, flEnd)
	
	if(get_user_weapon(attacker) == CSW_SKULL3_M1)
	{
		make_bullet(attacker, flEnd)
		
		static Damage_New
		Damage_New = get_damage_body(get_tr2(pentru, TR_iHitgroup), get_pcvar_float(cvar_damage_m1))
	
		SetHamParamFloat(3, float(Damage_New))	
	} else if(get_user_weapon(attacker) == CSW_SKULL3_M2) {
		static Damage_New
		Damage_New = get_damage_body(get_tr2(pentru, TR_iHitgroup), get_pcvar_float(cvar_damage_m2))
	
		SetHamParamFloat(3, float(Damage_New))			
	}
	
	return HAM_HANDLED
}

public get_damage_body(body, Float:damage)
{
	switch(body)
	{
		case HIT_HEAD: damage *= 4.0
		case HIT_CHEST: damage *= 1.5
		case HIT_STOMACH: damage *= 1.25
		default: damage *= 1.0
	}

	return floatround(damage)
}

public ham_add_skull3_m1(ent, id)
{
	if(entity_get_int(ent, EV_INT_impulse) == 2085)
	{
		if(pev_valid(g_remove_ent[id]))
		{
			set_pev(g_remove_ent[id], pev_renderfx, kRenderFxGlowShell)
			set_pev(g_remove_ent[id], pev_rendermode, kRenderTransAlpha)
			set_pev(g_remove_ent[id], pev_renderamt, 0)
			
			set_pev(g_remove_ent[id], pev_solid, SOLID_NOT)
			//remove_entity(g_remove_ent[id])
		}
			
		g_had_skull3[id] = 1
		entity_set_int(id, EV_INT_impulse, 0)
		
		fm_give_item(id, weapon_skull3_m2)
		
		g_skull3_mode[id] = 1
		client_cmd(id, weapon_skull3_m1)
		
		static weapon
		weapon = find_ent_by_owner(-1, weapon_skull3_m2, id)		
		cs_set_weapon_ammo(weapon, g_skull3_m2_ammo[id])
		
		set_pev(id, pev_viewmodel2, v_model)
	}			
	
	if(g_had_skull3[id])
	{
		message_begin(MSG_ONE, get_user_msgid("WeaponList"), _, id)
		write_string("weapon_skull3")
		write_byte(10)
		write_byte(120)
		write_byte(-1)
		write_byte(-1)
		write_byte(0)
		write_byte(7)
		write_byte(CSW_SKULL3_M1)
		write_byte(0)
		message_end()			
	}
}

public ham_add_skull3_m2(ent, id)
{
	if(entity_get_int(ent, EV_INT_impulse) == 2085)
	{
		if(pev_valid(g_remove_ent[id]))
		{
			set_pev(g_remove_ent[id], pev_renderfx, kRenderFxGlowShell)
			set_pev(g_remove_ent[id], pev_rendermode, kRenderTransAlpha)
			set_pev(g_remove_ent[id], pev_renderamt, 0)
			
			set_pev(g_remove_ent[id], pev_solid, SOLID_NOT)
			//remove_entity(g_remove_ent[id])
		}
			
		g_had_skull3[id] = 1
		entity_set_int(id, EV_INT_impulse, 0)
		
		fm_give_item(id, weapon_skull3_m1)
		
		g_skull3_mode[id] = 2
		client_cmd(id, weapon_skull3_m2)
		
		static weapon
		weapon = find_ent_by_owner(-1, weapon_skull3_m1, id)		
		cs_set_weapon_ammo(weapon, g_skull3_m2_ammo[id])
		
		set_pev(id, pev_viewmodel2, v_model2)
	}	
	
	if(g_had_skull3[id])
	{
		message_begin(MSG_ONE, get_user_msgid("WeaponList"), _, id)
		write_string("weapon_skull3_2")
		write_byte(7)
		write_byte(100)
		write_byte(-1)
		write_byte(-1)
		write_byte(0)
		write_byte(8)
		write_byte(CSW_SKULL3_M2)
		write_byte(0)
		message_end()	
	}
}

public ham_anim_skull3_m1(ent, anim, skiplocal, body)
{
	if(!pev_valid(ent))
		return HAM_IGNORED
	
	static id
	id = pev(ent, pev_owner)	
	
	if(is_user_alive(id) && is_user_connected(id) && g_had_skull3[id])
	{
		if(anim == 2)
		{
			if(g_skull3_mode[id] == 2)
			{
				g_skull3_changing[id] = 1
				
				set_pev(id, pev_viewmodel2, v_model)
				set_weapon_anim(id, 6)
				set_pdata_int(id, 83, 3, 5)
				
				set_task(3.0, "change_complete1", id)
				set_nextattack(ent, id, 3.0)
				
				//event_checkweapon(id)
				
				reset_player_maxspeed(id)
			} else if(g_skull3_mode[id] == 1) {
				if(!g_skull3_changing[id])
				{
					set_pev(id, pev_viewmodel2, v_model)
					set_weapon_anim(id, 2)
					
					set_nextattack(ent, id, 1.0)
				} else {
					set_pev(id, pev_viewmodel2, v_model)
					set_weapon_anim(id, 2)
					set_nextattack(ent, id, 1.0)
					
					remove_task(id)
					
					reset_player_maxspeed(id)
				}
			}
		}	
		if(anim == 0)
		{
			if(g_skull3_mode[id] == 1)
			{
				cs_set_user_bpammo(id, CSW_SKULL3_M2, cs_get_user_bpammo(id, CSW_SKULL3_M1))
				g_skull3_ammo[id] = cs_get_user_bpammo(id, CSW_SKULL3_M2)
				} else if(g_skull3_mode[id] == 2) {
				cs_set_user_bpammo(id, CSW_SKULL3_M1, cs_get_user_bpammo(id, CSW_SKULL3_M2))
				g_skull3_ammo[id] = cs_get_user_bpammo(id, CSW_SKULL3_M1)
			}
		}
	}
	
	return HAM_HANDLED
}

public ham_anim_skull3_m2(ent, anim, skiplocal, body)
{
	if(!pev_valid(ent))
		return HAM_IGNORED
	
	static id
	id = pev(ent, pev_owner)
	
	if(is_user_alive(id) && is_user_connected(id) && g_had_skull3[id])
	{
		if(anim == 2)
		{
			if(g_skull3_mode[id] == 1)
			{
				g_skull3_changing[id] = 1
				
				set_pev(id, pev_viewmodel2, v_model2)
				set_weapon_anim(id, 6)
				set_pdata_int(id, 83, 3, 5)
				
				set_task(3.0, "change_complete2", id)
				set_nextattack(ent, id, 3.0)
			
				//event_checkweapon(id)
				
				if(pev(id, pev_maxspeed) != get_pcvar_float(cvar_decrease_speed))
					set_user_maxspeed(id, get_pcvar_float(cvar_decrease_speed))	
			} else if(g_skull3_mode[id] == 2) {
				set_pev(id, pev_viewmodel2, v_model2)
				set_weapon_anim(id, 2)
				
				set_nextattack(ent, id, 1.0)
			}
		}	
		
		if(anim == 0)
		{
			if(g_skull3_mode[id] == 1)
			{
				cs_set_user_bpammo(id, CSW_SKULL3_M2, cs_get_user_bpammo(id, CSW_SKULL3_M1))
				g_skull3_ammo[id] = cs_get_user_bpammo(id, CSW_SKULL3_M2)
				} else if(g_skull3_mode[id] == 2) {
				cs_set_user_bpammo(id, CSW_SKULL3_M1, cs_get_user_bpammo(id, CSW_SKULL3_M2))
				g_skull3_ammo[id] = cs_get_user_bpammo(id, CSW_SKULL3_M1)
			}
		}		
	}
	
	return HAM_HANDLED
}

public fw_Ham_Item_Deploy_Post(ent)
{
	if(!pev_valid(ent))
		return HAM_IGNORED
	
	static id
	id = pev(ent, pev_owner)
	
	if(is_user_alive(id) && is_user_connected(id))
	{	
		if(pev(id, pev_maxspeed) == get_pcvar_float(cvar_decrease_speed))
			reset_player_maxspeed(id)
	}
	
	return HAM_HANDLED
}

public ham_deploy_skull3_m1(ent)
{
	if(!pev_valid(ent))
		return HAM_IGNORED
	
	static id
	id = pev(ent, pev_owner)
	
	if(is_user_alive(id) && is_user_connected(id) && g_had_skull3[id] && g_skull3_changing[id])
	{	
		set_nextattack(ent, id, 3.0)
	}
	
	return HAM_HANDLED
}

public ham_deploy_skull3_m2(ent)
{
	if(!pev_valid(ent))
		return HAM_IGNORED
	
	static id
	id = pev(ent, pev_owner)
	
	if(is_user_alive(id) && is_user_connected(id) && g_had_skull3[id] && g_skull3_changing[id])
	{	
		set_nextattack(ent, id, 3.0)
	}
	
	return HAM_HANDLED
}

public ham_attack_skull3(ent)
{
	if(!pev_valid(ent))
		return HAM_IGNORED
	
	static id
	id = pev(ent, pev_owner)
	
	if(is_user_alive(id) && is_user_connected(id) && g_had_skull3[id])
	{	
		g_is_attacking[id] = 1
		pev(id, pev_punchangle, g_recoil[id])
	}
	
	return HAM_HANDLED
}

public ham_attack_skull3_post(ent)
{
	if(!pev_valid(ent))
		return HAM_IGNORED
	
	static id
	id = pev(ent, pev_owner)
	
	if(is_user_alive(id) && is_user_connected(id) && g_had_skull3[id])
	{	
		g_is_attacking[id] = 0
		
		new Float:static_recoil[3]
		pev(id, pev_punchangle, static_recoil)
		
		xs_vec_sub(static_recoil, g_recoil[id], static_recoil)
		
		if(g_skull3_mode[id] == 1)
			xs_vec_mul_scalar(static_recoil, get_pcvar_float(cvar_recoil_m1), static_recoil)
		else if(g_skull3_mode[id] == 2)
			xs_vec_mul_scalar(static_recoil, get_pcvar_float(cvar_recoil_m2), static_recoil)
		
		xs_vec_add(static_recoil, g_recoil[id], static_recoil)
		set_pev(id, pev_punchangle, static_recoil)
		
		if (!cs_get_weapon_ammo(ent))
			return HAM_IGNORED
		
		emit_sound(id, CHAN_WEAPON, skull3_sound[0], VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
		
		if(g_skull3_mode[id] == 1)
		{
			set_weapon_anim(id, 3)
		} else if(g_skull3_mode[id] == 2) {
			set_pdata_float(ent, 62, 0.4, 4)
			if(g_shot_anim[id] == 0)
			{
				set_weapon_anim(id, 3)
				g_shot_anim[id] = 1
				} else if(g_shot_anim[id] == 1) {
				set_weapon_anim(id, 5)
				g_shot_anim[id] = 0
			}
		}
	}
	
	return HAM_HANDLED
}

public ham_reload_skull3(ent)
{
	if(!pev_valid(ent))
		return HAM_IGNORED
	
	static id
	id = pev(ent, pev_owner)
	
	if(is_user_alive(id) && is_user_connected(id) && g_had_skull3[id])
	{		
		g_skull3_clip[id] = -1
		
		new bpammo
		
		if(g_skull3_mode[id] == 1)
			bpammo = cs_get_user_bpammo(id, CSW_SKULL3_M1)
		else if(g_skull3_mode[id] == 2)
			bpammo = cs_get_user_bpammo(id, CSW_SKULL3_M2)
		
		new iClip = get_pdata_int(ent, 51, 4)
		
		if (bpammo <= 0)
			return HAM_SUPERCEDE
		
		if(g_skull3_mode[id] == 1)
		{
			if(iClip >= get_pcvar_num(cvar_clip_m1))
				return HAM_SUPERCEDE		
			} else if(g_skull3_mode[id] == 2) {
			if(iClip >= get_pcvar_num(cvar_clip_m2))
				return HAM_SUPERCEDE			
		}
		
		g_skull3_clip[id] = iClip
		g_reload[id] = 1
	}
	
	return HAM_IGNORED
}

public ham_reload_skull3_post(ent)
{
	if(!pev_valid(ent))
		return HAM_IGNORED
	
	static id
	id = pev(ent, pev_owner)
	
	if(is_user_alive(id) && is_user_connected(id) && g_had_skull3[id])
	{	
		if (g_skull3_clip[id] == -1)
			return HAM_IGNORED
		
		static Float:reload_time
		if(g_skull3_mode[id] == 1)
			reload_time = 2.2
		else if(g_skull3_mode[id] == 2)
			reload_time = 3.4
		
		set_pdata_int(ent, 51, g_skull3_clip[id], 4)
		set_pdata_float(ent, 48, reload_time, 4)
		set_pdata_float(id, 83, reload_time, 5)
		set_pdata_int(ent, 54, 1, 4)
		
		set_weapon_anim(id, 1)
	}
	
	return HAM_IGNORED
}

public ham_postframe_skull3(ent)
{
	if(!pev_valid(ent))
		return HAM_IGNORED
	
	static id
	id = pev(ent, pev_owner)
	
	if(is_user_alive(id) && is_user_connected(id) && g_had_skull3[id])
	{	
		new Float:flNextAttack = get_pdata_float(id, 83, 5)
		
		new bpammo
		if(g_skull3_mode[id] == 1)
			bpammo = cs_get_user_bpammo(id, CSW_SKULL3_M1)
		else if(g_skull3_mode[id] == 2)
			bpammo = cs_get_user_bpammo(id, CSW_SKULL3_M2)
		
		new iClip = get_pdata_int(ent, 51, 4)
		new fInReload = get_pdata_int(ent, 54, 4)
		
		if(fInReload && flNextAttack <= 0.0)
		{
			new temp1
			if(g_skull3_mode[id] == 1)
			{
				temp1 = min(get_pcvar_num(cvar_clip_m1) - iClip, bpammo)
				} else if(g_skull3_mode[id] == 2) {
				temp1 = min(get_pcvar_num(cvar_clip_m2) - iClip, bpammo)			
			}
			
			set_pdata_int(ent, 51, iClip + temp1, 4)
			
			if(g_skull3_mode[id] == 1)
				cs_set_user_bpammo(id, CSW_SKULL3_M1, bpammo-temp1)
			else if(g_skull3_mode[id] == 2)
				cs_set_user_bpammo(id, CSW_SKULL3_M2, bpammo-temp1)		
			
			set_pdata_int(ent, 54, 0, 4)
			
			fInReload = 0
			g_reload[id] = 0
		}		
	}
	
	return HAM_IGNORED
}

public ham_takedamage_player(victim, inflictor, attacker, Float:damage, damagebits)
{
	if(!is_user_alive(victim) || !is_user_connected(victim))
		return HAM_IGNORED
	if(!is_user_alive(attacker) || !is_user_connected(attacker))
		return HAM_IGNORED		
	if(zp_get_user_zombie(attacker))
		return HAM_IGNORED		
	if(!g_had_skull3[attacker])
		return HAM_IGNORED
	
	if(get_user_weapon(attacker) == CSW_SKULL3_M1 && g_skull3_mode[attacker] == 1)
	{
		SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_m1))
		} else if(get_user_weapon(attacker) == CSW_SKULL3_M2 && g_skull3_mode[attacker] == 2) {
		SetHamParamFloat(4, damage * get_pcvar_float(cvar_damage_m2))
	}
	
	return HAM_HANDLED
}

public client_PostThink(id)
{
	if(!is_user_alive(id) || !is_user_connected(id))
		return
	if(zp_get_user_zombie(id))
		return 		
	if(!g_had_skull3[id])
		return
	if(get_user_weapon(id) != CSW_SKULL3_M2 || g_skull3_mode[id] != 2)
		return
	
	if(pev(id, pev_maxspeed) != get_pcvar_float(cvar_decrease_speed))
		set_user_maxspeed(id, get_pcvar_float(cvar_decrease_speed))
}

public change_complete1(id)
{
	g_skull3_changing[id] = 0
	
	if(get_user_weapon(id) == CSW_SKULL3_M1 && g_had_skull3[id])
		g_skull3_mode[id] = 1
}

public change_complete2(id)
{
	g_skull3_changing[id] = 0
	
	if(get_user_weapon(id) == CSW_SKULL3_M2 && g_had_skull3[id])
		g_skull3_mode[id] = 2
}

stock set_weapon_anim(id, anim)
{ 
	set_pev(id, pev_weaponanim, anim)
	
	message_begin(MSG_ONE, SVC_WEAPONANIM, _, id)
	write_byte(anim)
	write_byte(pev(id, pev_body))
	message_end()
}

stock set_nextattack(const weapon, const player, const Float:nextTime)
{
	const m_flNextPrimaryAttack = 46
	const m_flNextSecondaryAttack = 47
	const m_flTimeWeaponIdle = 48
	const m_flNextAttack = 83
	
	set_pdata_float(weapon, m_flNextPrimaryAttack  , nextTime, 4)
	set_pdata_float(weapon, m_flNextSecondaryAttack, nextTime, 4)
	set_pdata_float(weapon, m_flTimeWeaponIdle, nextTime, 4)
	set_pdata_float(player, m_flNextAttack, nextTime, 5)
}

stock make_bullet(id, Float:Origin[3])
{
	// Find target
	new target, body
	get_user_aiming(id, target, body, 999999)
	
	if(target > 0 && target <= get_maxplayers())
	{
		new Float:fStart[3], Float:fEnd[3], Float:fRes[3], Float:fVel[3]
		pev(id, pev_origin, fStart)
		
		// Get ids view direction
		velocity_by_aim(id, 64, fVel)
		
		// Calculate position where blood should be displayed
		fStart[0] = Origin[0]
		fStart[1] = Origin[1]
		fStart[2] = Origin[2]
		fEnd[0] = fStart[0]+fVel[0]
		fEnd[1] = fStart[1]+fVel[1]
		fEnd[2] = fStart[2]+fVel[2]
		
		// Draw traceline from victims origin into ids view direction to find
		// the location on the wall to put some blood on there
		new res
		engfunc(EngFunc_TraceLine, fStart, fEnd, 0, target, res)
		get_tr2(res, TR_vecEndPos, fRes)
		
		// Show some blood :)
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY) 
		write_byte(TE_BLOODSPRITE)
		write_coord(floatround(fStart[0])) 
		write_coord(floatround(fStart[1])) 
		write_coord(floatround(fStart[2])) 
		write_short(g_bloodspray)
		write_short(g_blood)
		write_byte(70)
		write_byte(random_num(1,2))
		message_end()
		
		
		} else {
		new decal = 41
		
		// Check if the wall hit is an entity
		if(target)
		{
			// Put decal on an entity
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(TE_DECAL)
			write_coord(floatround(Origin[0]))
			write_coord(floatround(Origin[1]))
			write_coord(floatround(Origin[2]))
			write_byte(decal)
			write_short(target)
			message_end()
			} else {
			// Put decal on "world" (a wall)
			message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
			write_byte(TE_WORLDDECAL)
			write_coord(floatround(Origin[0]))
			write_coord(floatround(Origin[1]))
			write_coord(floatround(Origin[2]))
			write_byte(decal)
			message_end()
		}
		
		// Show sparcles
		message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
		write_byte(TE_GUNSHOTDECAL)
		write_coord(floatround(Origin[0]))
		write_coord(floatround(Origin[1]))
		write_coord(floatround(Origin[2]))
		write_short(id)
		write_byte(decal)
		message_end()
	}
}

stock drop_weapons(id, dropwhat)
{
	static weapons[32], num, i, weaponid
	num = 0
	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 ham_strip_weapon(id, weapon[])
{
	if(!equal(weapon,"weapon_",7)) 
		return 0
	
	new wId = get_weaponid(weapon);
	if(!wId)
		return 0;
	
	new wEnt;
	while((wEnt = engfunc(EngFunc_FindEntityByString,wEnt,"classname",weapon)) && pev(wEnt,pev_owner) != id) {}
	if(!wEnt) 
		return 0;
	
	if(get_user_weapon(id) == wId) ExecuteHamB(Ham_Weapon_RetireWeapon,wEnt);
	
	if(!ExecuteHamB(Ham_RemovePlayerItem,id,wEnt)) 
		return 0;
	ExecuteHamB(Ham_Item_Kill,wEnt);
	
	set_pev(id,pev_weapons,pev(id,pev_weapons) & ~(1<<wId));
	
	return 1
}

stock reset_player_maxspeed(id)
{
	if(!is_user_alive(id))
		return
		
	set_user_maxspeed(id, g_oldspeed[id])
}
Nume: Skull-3 (Double Weapon)
Versiune: 1.0
Link oficial: -

Instalare:
1. Fisierul zombimod_extra_skull3.sma il puneti in addons/amxmodx/scripting
2. Fisierul zombimod_extra_skull3.amxx il puneti in addons/amxmodx/plugins
3. Intrati in fisierul addons/amxmodx/configs/plugins.ini si adaugati la urma:

Code: Select all

zombimod_extra_skull3.amxx
4. Alti pasi necesari....

Cvar-uri (se adauga in fisierul amxmodx\configs\amxx.cfg):

Code: Select all

	cvar_recoil_m1 = register_cvar("skull3_recoil_m1", "0.46")
	cvar_recoil_m2 = register_cvar("skull3_recoil_m2", "0.56")
	cvar_clip_m1 = register_cvar("skull3_clip_m1", "35")
	cvar_clip_m2 = register_cvar("skull3_clip_m2", "70")
	cvar_speed_m1 = register_cvar("skull3_speed_m1", "1.35")
	cvar_speed_m2 = register_cvar("skull3_speed_m2", "1.28")
	cvar_damage_m1 = register_cvar("skull3_damage_m1", "27")
	cvar_damage_m2 = register_cvar("skull3_damage_m2", "31")
	cvar_decrease_speed = register_cvar("skull3_decrease_speed", "110.0")
Imagini: Image
Image
Image
Post Reply

Return to “AmxModX”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 5 guests