Modificare plugin pistol(m79)

Modificari necesare ale pluginurilor

Moderators: Moderatori ajutatori, Moderatori, Echipa eXtreamCS.com

Post Reply
User avatar
Jucks
Membru, skill +3
Membru, skill +3
Posts: 1141
Joined: 20 May 2016, 16:28
Detinator Steam: Da
Fond eXtream: 0
Contact:

08 Oct 2018, 10:00

Puteti sa faceti ca atunci cand imi da acest pistol sa nu apara ca un pistol normal si sa apara cum trebuie el de fapt?

Uitati sma :
| Afiseaza codul
#include <amxmodx>
#include <engine>
#include <fakemeta>
#include <fakemeta_util>
#include <hamsandwich>
#include <cstrike>

#define PLUGIN "[CSO] Weapon: JANUS-I"
#define VERSION "1.0"
#define AUTHOR "Dias Pendragon"

#define DAMAGE_A 150
#define DAMAGE_B 300
#define CHARGE_TIME 7

#define CHANGE_TIME 2.0
#define LIGHTNING_RANGE 500.0
#define LIGHTNING_HEADSHOTABLE 1

#define CSW_Janus1 CSW_DEAGLE
#define weapon_Janus1 "weapon_deagle"
#define PLAYER_ANIMEXT "onehanded"
#define Janus1_OLDMODEL "models/w_deagle.mdl"

#define V_MODEL "models/v_janus1.mdl"
#define P_MODEL "models/p_janus1.mdl"
#define W_MODEL "models/w_janus1.mdl"
#define S_MODEL "models/s_oicw.mdl"

#define TASK_CHANGE 4263
#define TASK_CHANGELIMITTIME 54354
#define TASK_USETIME 34547

new const Janus1_Sounds[6][] = 
{
	"weapons/janus1-1.wav",
	"weapons/janus1-2.wav",
	"weapons/change1_ready.wav",
	"weapons/janus1_exp.wav",
	"weapons/janus1_change1.wav",
	"weapons/janus1_change2.wav"
}

new const Janus1_Resources[4][] = 
{
	"sprites/weapon_janus1.txt",
	"sprites/640hud7_2.spr",
	"sprites/640hud12_2.spr",
	"sprites/640hud100_2.spr"
}

enum
{
	J1_ANIM_IDLE = 0,
	J1_ANIM_DRAW,
	J1_ANIM_SHOOT1,
	J1_ANIM_SHOOT1_2,
	J1_ANIM_SHOOT1_ACTIVE,
	J1_ANIM_CHANGE_TO_JANUS,
	J1_ANIM_IDLE_JANUS,
	J1_ANIM_DRAW_JANUS,
	J1_ANIM_SHOOT1_JANUS,
	J1_ANIM_SHOOT2_JANUS,
	J1_ANIM_CHANGE_TO_BACK,
	J1_ANIM_IDLE_ACTIVE,
	J1_ANIM_DRAW_ACTIVE
}

enum
{
	Janus1_NORMAL = 0,
	Janus1_ACTIVE,
	Janus1_JANUS
}
#define Get_BitVar(%1,%2) (%1 & (1 << (%2 & 31)))
#define Set_BitVar(%1,%2) %1 |= (1 << (%2 & 31))
#define UnSet_BitVar(%1,%2) %1 &= ~(1 << (%2 & 31))

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)
const SECONDARY_WEAPONS_BIT_SUM = (1<<CSW_P228)|(1<<CSW_ELITE)|(1<<CSW_FIVESEVEN)|(1<<CSW_USP)|(1<<CSW_GLOCK18)|(1<<CSW_DEAGLE)

new g_Had_Janus1, g_Janus1_Mode[33], g_ChangingMode, g_expspr_id , g_SmokeSprId
new g_Event_Janus1, g_Msg_WeaponList, g_ham_bot, g_MaxPlayers, spr_trail

public plugin_init()
{
	register_plugin(PLUGIN, VERSION, AUTHOR)
	
	register_event("CurWeapon", "Event_CurWeapon", "be", "1=1", "2=26")
	register_touch("grenade2", "*", "fw_GrenadeTouch")
	
	register_forward(FM_UpdateClientData,"fw_UpdateClientData_Post", 1)	
	register_forward(FM_PlaybackEvent, "fw_PlaybackEvent")	
	register_forward(FM_SetModel, "fw_SetModel")	
	register_forward(FM_CmdStart, "fw_CmdStart")
	
	RegisterHam(Ham_Weapon_WeaponIdle, weapon_Janus1, "fw_Weapon_WeaponIdle_Post", 1)
	RegisterHam(Ham_Item_Deploy, weapon_Janus1, "fw_Item_Deploy_Post", 1)	
	RegisterHam(Ham_Item_AddToPlayer, weapon_Janus1, "fw_Item_AddToPlayer_Post", 1)
	
	g_Msg_WeaponList = get_user_msgid("WeaponList")
	g_MaxPlayers = get_maxplayers()

	register_clcmd("weapon_janus1", "Hook_Weapon")
}

public plugin_precache()
{
	engfunc(EngFunc_PrecacheModel, V_MODEL)
	engfunc(EngFunc_PrecacheModel, P_MODEL)
	engfunc(EngFunc_PrecacheModel, W_MODEL)
	precache_model(S_MODEL)
	
	new i
	for(i = 0; i < sizeof(Janus1_Sounds); i++)
		engfunc(EngFunc_PrecacheSound, Janus1_Sounds)
	for(i = 0; i < sizeof(Janus1_Resources); i++)
	{
		if(i == 0) engfunc(EngFunc_PrecacheGeneric, Janus1_Resources)
		else engfunc(EngFunc_PrecacheModel, Janus1_Resources)
	}
	
	spr_trail = engfunc(EngFunc_PrecacheModel, "sprites/laserbeam.spr")
	g_expspr_id = engfunc(EngFunc_PrecacheModel, "sprites/zerogxplode.spr")
	g_SmokeSprId = engfunc(EngFunc_PrecacheModel, "sprites/steam1.spr")
	
	register_forward(FM_PrecacheEvent, "fw_PrecacheEvent_Post", 1)
}

public fw_PrecacheEvent_Post(type, const name[])
{
	if(equal("events/deagle.sc", name)) g_Event_Janus1 = get_orig_retval()		
}

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

public Do_Register_HamBot(id)
{
	RegisterHamFromEntity(Ham_TraceAttack, id, "fw_TraceAttack_Player")
}
public plugin_natives()	register_native("get_janus","get_janus",1)
public get_janus(id)
{
	if(!is_user_alive(id))
		return
		
	drop_weapons(id, 1)
		
	g_Janus1_Mode[id] = Janus1_NORMAL
	
	Set_BitVar(g_Had_Janus1, id)
	UnSet_BitVar(g_ChangingMode, id)
	fm_give_item(id, weapon_Janus1)
	
	cs_set_user_bpammo(id, CSW_Janus1, 50)
	
	engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id)
	write_byte(1)
	write_byte(CSW_Janus1)
	write_byte(-1)
	message_end()
}

public Remove_Janus1(id)
{
	g_Janus1_Mode[id] = Janus1_NORMAL
	
	UnSet_BitVar(g_Had_Janus1, id)
	UnSet_BitVar(g_ChangingMode, id)
	
	remove_task(id+TASK_CHANGE)
	remove_task(id+TASK_CHANGELIMITTIME)
	remove_task(id+TASK_USETIME)
}

public Hook_Weapon(id)
{
	engclient_cmd(id, weapon_Janus1)
	return PLUGIN_HANDLED
}

public Event_CurWeapon(id)
{
	if(!is_user_alive(id))
		return
	if(!Get_BitVar(g_Had_Janus1, id))
		return
		
	engfunc(EngFunc_MessageBegin, MSG_ONE_UNRELIABLE, get_user_msgid("CurWeapon"), {0, 0, 0}, id)
	write_byte(1)
	write_byte(CSW_Janus1)
	write_byte(-1)
	message_end()
}

public fw_UpdateClientData_Post(id, sendweapons, cd_handle)
{
	if(!is_user_alive(id) || !is_user_connected(id))
		return FMRES_IGNORED	
	if(get_user_weapon(id) == CSW_Janus1 && Get_BitVar(g_Had_Janus1, id))
		set_cd(cd_handle, CD_flNextAttack, get_gametime() + 0.001) 
	
	return FMRES_HANDLED
}

public fw_PlaybackEvent(flags, invoker, eventid, Float:delay, Float:origin[3], Float:angles[3], Float:fparam1, Float:fparam2, iParam1, iParam2, bParam1, bParam2)
{
	if (!is_user_connected(invoker))
		return FMRES_IGNORED	
	if(get_user_weapon(invoker) != CSW_Janus1 || !Get_BitVar(g_Had_Janus1, invoker))
		return FMRES_IGNORED
	if(eventid != g_Event_Janus1)
		return FMRES_IGNORED
	
	return FMRES_IGNORED
}

public fw_SetModel(entity, model[])
{
	if(!pev_valid(entity))
		return FMRES_IGNORED
	
	static Classname[32]
	pev(entity, pev_classname, Classname, sizeof(Classname))
	
	if(!equal(Classname, "weaponbox"))
		return FMRES_IGNORED
	
	static iOwner
	iOwner = pev(entity, pev_owner)
	
	if(equal(model, Janus1_OLDMODEL))
	{
		static weapon; weapon = fm_find_ent_by_owner(-1, weapon_Janus1, entity)
		
		if(!pev_valid(weapon))
			return FMRES_IGNORED;
		
		if(Get_BitVar(g_Had_Janus1, iOwner))
		{
			Remove_Janus1(iOwner)
			
			set_pev(weapon, pev_impulse, 18012014)
			engfunc(EngFunc_SetModel, entity, W_MODEL)
			
			return FMRES_SUPERCEDE
		}
	}

	return FMRES_IGNORED;
}

public fw_CmdStart(id, uc_handle, seed)
{
	if(!is_user_alive(id))
		return FMRES_IGNORED	
	if(!Get_BitVar(g_Had_Janus1, id) || get_user_weapon(id) != CSW_Janus1)	
		return FMRES_IGNORED
		
	static PressButton; PressButton = get_uc(uc_handle, UC_Buttons)
	
	if((PressButton & IN_ATTACK))
	{
		PressButton &= ~IN_ATTACK
		set_uc(uc_handle, UC_Buttons, PressButton)
		
		if(Get_BitVar(g_ChangingMode, id))
			return FMRES_IGNORED
		if(get_pdata_float(id, 83, 5) > 0.0)
			return FMRES_IGNORED
		
		if(g_Janus1_Mode[id] != Janus1_JANUS)
		{
			if(cs_get_user_bpammo(id, CSW_Janus1) <= 0)
			{
				set_pdata_float(id, 83, 0.5, 5)
				return FMRES_IGNORED
			}
			
			set_weapon_anim(id, J1_ANIM_SHOOT1)
			emit_sound(id, CHAN_WEAPON, Janus1_Sounds[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
			Set_Player_NextAttack(id, CSW_Janus1, 2.5)
			
			cs_set_user_bpammo(id, CSW_Janus1, cs_get_user_bpammo(id, CSW_Janus1) - 1)
			Make_ShootEffect(id)
			Make_GrenadeAmmo(id)
			
			if(cs_get_user_bpammo(id, CSW_Janus1) <= 0)
			{
				g_Janus1_Mode[id] = Janus1_ACTIVE
				emit_sound(id, CHAN_WEAPON, Janus1_Sounds[2], 1.0, ATTN_NORM, 0, PITCH_NORM)
			}
		} else if(g_Janus1_Mode[id] == Janus1_ACTIVE) {
			if(cs_get_user_bpammo(id, CSW_Janus1) <= 0)
			{
				set_pdata_float(id, 83, 0.5, 5)
				return FMRES_IGNORED
			}
			
			set_weapon_anim(id, J1_ANIM_SHOOT1_ACTIVE)
			emit_sound(id, CHAN_WEAPON, Janus1_Sounds[0], 1.0, ATTN_NORM, 0, PITCH_NORM)
			Set_Player_NextAttack(id, CSW_Janus1, 2.5)
			
			cs_set_user_bpammo(id, CSW_Janus1, cs_get_user_bpammo(id, CSW_Janus1) - 1)
			Make_ShootEffect(id)
			Make_GrenadeAmmo(id)
		} else {
			set_weapon_anim(id, J1_ANIM_SHOOT1_JANUS)
			emit_sound(id, CHAN_WEAPON, Janus1_Sounds[1], 1.0, ATTN_NORM, 0, PITCH_NORM)
			Set_Player_NextAttack(id, CSW_Janus1, 0.25)
			
			Make_ShootEffect(id)
			Make_GrenadeAmmo(id)
		}
		
		return FMRES_IGNORED
	}
	
	if((PressButton & IN_RELOAD))
		return FMRES_SUPERCEDE
	
	if((PressButton & IN_ATTACK2))
	{
		PressButton &= ~IN_ATTACK2
		set_uc(uc_handle, UC_Buttons, PressButton)
		
		if((pev(id, pev_oldbuttons) & IN_ATTACK2))
			return FMRES_IGNORED
		if(g_Janus1_Mode[id] != Janus1_ACTIVE)
			return FMRES_IGNORED
		if(get_pdata_float(id, 83, 5) > 0.0)
			return FMRES_IGNORED
		
		remove_task(id+TASK_CHANGELIMITTIME)
		
		Set_BitVar(g_ChangingMode, id)
		Set_Player_NextAttack(id, CSW_Janus1, CHANGE_TIME)
		
		set_weapon_anim(id, J1_ANIM_CHANGE_TO_JANUS)
		set_task(CHANGE_TIME, "ChangeTo_JanusTransform", id+TASK_CHANGE)
	}
	
	return FMRES_IGNORED
}

public Make_GrenadeAmmo(id)
{
	Create_Grenade(id)
}

public Make_ShootEffect(id)
{
	static Float:Angles[3]
	pev(id, pev_punchangle, Angles)
	
	Angles[0] += random_float(-1.5, 0.0)
	Angles[1] += random_float(-0.75, 0.75)
	
	set_pev(id, pev_punchangle, Angles)
}

public Create_Grenade(id)
{
	static Ent; Ent = engfunc(EngFunc_CreateNamedEntity, engfunc(EngFunc_AllocString, "info_target"))
	if(!pev_valid(Ent)) return
	
	static Float:Origin[3], Float:Angles[3]
	
	get_weapon_attachment(id, Origin, 24.0)
	pev(id, pev_v_angle, Angles)
	
	set_pev(Ent, pev_movetype, MOVETYPE_PUSHSTEP)
	set_pev(Ent, pev_solid, SOLID_BBOX)
	
	set_pev(Ent, pev_classname, "grenade2")
	engfunc(EngFunc_SetModel, Ent, S_MODEL)
	set_pev(Ent, pev_origin, Origin)
	set_pev(Ent, pev_angles, Angles)
	set_pev(Ent, pev_owner, id)
	
	static Float:Velocity[3], Float:TargetOrigin[3]
	
	fm_get_aim_origin(id, TargetOrigin)
	get_speed_vector(Origin, TargetOrigin, 1300.0, Velocity)
	
	set_pev(Ent, pev_velocity, Velocity)
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_BEAMFOLLOW)
	write_short(Ent)
	write_short(spr_trail)
	write_byte(15)
	write_byte(2)
	write_byte(100)
	write_byte(100);
	write_byte(100);
	write_byte(250);
	message_end();
}


public fw_GrenadeTouch(Ent, Id)
{
	if(!pev_valid(Ent))
		return
		
	Make_Explosion(Ent)
	engfunc(EngFunc_RemoveEntity, Ent)
}

public Make_Explosion(ent)
{
	static Float:Origin[3]
	pev(ent, pev_origin, Origin)
	
	message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
	write_byte(TE_EXPLOSION)
	engfunc(EngFunc_WriteCoord, Origin[0])
	engfunc(EngFunc_WriteCoord, Origin[1])
	engfunc(EngFunc_WriteCoord, Origin[2])
	write_short(g_expspr_id)
	write_byte(30)
	write_byte(20)
	write_byte(0)
	message_end()
	
	message_begin(MSG_BROADCAST, SVC_TEMPENTITY)
	write_byte(TE_WORLDDECAL)
	engfunc(EngFunc_WriteCoord, Origin[0])
	engfunc(EngFunc_WriteCoord, Origin[1])
	engfunc(EngFunc_WriteCoord, Origin[2])
	write_byte(random_num(46, 48))
	message_end()	
	
	message_begin(MSG_BROADCAST ,SVC_TEMPENTITY)
	write_byte(TE_SMOKE)
	engfunc(EngFunc_WriteCoord, Origin[0])
	engfunc(EngFunc_WriteCoord, Origin[1])
	engfunc(EngFunc_WriteCoord, Origin[2])
	write_short(g_SmokeSprId)
	write_byte(40)
	write_byte(10)
	message_end()
	
	static Float:Origin2[3], id
	id = pev(ent, pev_owner)
	
	if(!is_user_alive(id))
		return
	
	for(new i = 0; i < g_MaxPlayers; i++)
	{
		if(!is_user_alive(i))
			continue
		pev(i, pev_origin, Origin2)
		if(get_distance_f(Origin, Origin2) > float(200))
			continue
		if(cs_get_user_team(id) == cs_get_user_team(i))
			continue

		static TakeDamage; TakeDamage = LIGHTNING_HEADSHOTABLE
		if(!TakeDamage) ExecuteHamB(Ham_TakeDamage, i, 0, id, g_Janus1_Mode[id] == Janus1_JANUS ? float(DAMAGE_B) : float(DAMAGE_A), DMG_BLAST)
		else do_attack(id, i, 0, g_Janus1_Mode[id] == Janus1_JANUS ? float(DAMAGE_B) : float(DAMAGE_A))
	}
}

public ChangeTo_JanusTransform(id)
{
	id -= TASK_CHANGE
	
	if(!is_user_alive(id))
		return
	if(get_user_weapon(id) != CSW_Janus1 || !Get_BitVar(g_Had_Janus1, id))	
		return
	if(!Get_BitVar(g_ChangingMode, id))
		return
		
	UnSet_BitVar(g_ChangingMode, id)
	g_Janus1_Mode[id] = Janus1_JANUS
	
	set_weapon_anim(id, J1_ANIM_IDLE_JANUS)
	
	remove_task(id+TASK_USETIME)
	set_task(float(CHARGE_TIME), "TurnOff_JTS2", id+TASK_USETIME)
}

public TurnOff_JTS2(id)
{
	id -= TASK_USETIME
	
	if(!is_user_alive(id))
		return
	g_Janus1_Mode[id] = Janus1_NORMAL
	if(get_user_weapon(id) != CSW_Janus1 || !Get_BitVar(g_Had_Janus1, id))	
		return
	if(g_Janus1_Mode[id] != Janus1_JANUS)
		return
		
	Set_BitVar(g_ChangingMode, id)
	Set_Player_NextAttack(id, CSW_Janus1, CHANGE_TIME - 1.0)
		
	set_weapon_anim(id, J1_ANIM_CHANGE_TO_BACK)
	set_task(CHANGE_TIME - 1.0, "ChangeTo_Back", id+TASK_CHANGE)
}

public ChangeTo_Back(id)
{
	id -= TASK_CHANGE
	
	if(!is_user_alive(id))
		return
	g_Janus1_Mode[id] = Janus1_NORMAL
	if(get_user_weapon(id) != CSW_Janus1 || !Get_BitVar(g_Had_Janus1, id))	
		return
	if(g_Janus1_Mode[id] != Janus1_JANUS)
		return
		
	g_Janus1_Mode[id] = Janus1_NORMAL
}

public fw_Weapon_WeaponIdle_Post(Ent)
{
	if(pev_valid(Ent) != 2)
		return HAM_IGNORED	
	static Id; Id = get_pdata_cbase(Ent, 41, 4)
	if(get_pdata_cbase(Id, 373) != Ent)
		return HAM_IGNORED	
	if(!Get_BitVar(g_Had_Janus1, Id))
		return HAM_IGNORED	
		
	if(get_pdata_float(Ent, 48, 4) <= 0.1) 
	{
		if(g_Janus1_Mode[Id] == Janus1_NORMAL) set_weapon_anim(Id, J1_ANIM_IDLE)
		else if(g_Janus1_Mode[Id] == Janus1_ACTIVE) set_weapon_anim(Id, J1_ANIM_IDLE_ACTIVE)
		else if(g_Janus1_Mode[Id] == Janus1_JANUS) set_weapon_anim(Id, J1_ANIM_IDLE_JANUS)
		
		set_pdata_float(Ent, 48, 20.0, 4)
		set_pdata_string(Id, (492) * 4, PLAYER_ANIMEXT, -1 , 20)
	}
	
	return HAM_IGNORED	
}

public fw_Item_Deploy_Post(Ent)
{
	if(pev_valid(Ent) != 2)
		return
	static Id; Id = get_pdata_cbase(Ent, 41, 4)
	if(get_pdata_cbase(Id, 373) != Ent)
		return
	if(!Get_BitVar(g_Had_Janus1, Id))
		return
	
	set_pev(Id, pev_viewmodel2, V_MODEL)
	set_pev(Id, pev_weaponmodel2, P_MODEL)
	
	if(g_Janus1_Mode[Id] == Janus1_NORMAL) set_weapon_anim(Id, J1_ANIM_DRAW)
	else if(g_Janus1_Mode[Id] == Janus1_ACTIVE) set_weapon_anim(Id, J1_ANIM_DRAW_ACTIVE)
	else if(g_Janus1_Mode[Id] == Janus1_JANUS) set_weapon_anim(Id, J1_ANIM_DRAW_JANUS)
}

public fw_Item_AddToPlayer_Post(Ent, id)
{
	if(!pev_valid(Ent))
		return HAM_IGNORED
		
	if(pev(Ent, pev_impulse) == 18012014)
	{
		Set_BitVar(g_Had_Janus1, id)
		set_pev(Ent, pev_impulse, 0)
	}		
	
	message_begin(MSG_ONE_UNRELIABLE, g_Msg_WeaponList, .player = id)
	write_string(Get_BitVar(g_Had_Janus1, id) ? "weapon_janus1" : "weapon_deagle")
	write_byte(8)
	write_byte(35)
	write_byte(-1)
	write_byte(-1)
	write_byte(1)
	write_byte(1)
	write_byte(Get_BitVar(g_Had_Janus1, id) ? CSW_Janus1 : CSW_DEAGLE)
	write_byte(0)
	message_end()

	return HAM_HANDLED	
}

public TurnOff_JTS(id)
{
	id -= TASK_CHANGELIMITTIME
	if(!is_user_alive(id))
		return
		
	g_Janus1_Mode[id] = Janus1_NORMAL
	
	set_weapon_anim(id, J1_ANIM_IDLE)
}

public Give_RealAmmo(id, CSWID)
{
	static Amount, Max
	switch(CSWID)
	{
		case CSW_P228: {Amount = 10; Max = 104;}
		case CSW_SCOUT: {Amount = 6; Max = 180;}
		case CSW_XM1014: {Amount = 8; Max = 64;}
		case CSW_MAC10: {Amount = 16; Max = 200;}
		case CSW_AUG: {Amount = 6; Max = 180;}
		case CSW_ELITE: {Amount = 16; Max = 200;}
		case CSW_FIVESEVEN: {Amount = 4; Max = 200;}
		case CSW_UMP45: {Amount = 16; Max = 200;}
		case CSW_SG550: {Amount = 6; Max = 180;}
		case CSW_GALIL: {Amount = 6; Max = 180;}
		case CSW_FAMAS: {Amount = 6; Max = 180;}
		case CSW_USP: {Amount = 18; Max = 200;}
		case CSW_GLOCK18: {Amount = 16; Max = 200;}
		case CSW_AWP: {Amount = 6; Max = 60;}
		case CSW_MP5NAVY: {Amount = 16; Max = 200;}
		case CSW_M249: {Amount = 4; Max = 200;}
		case CSW_M3: {Amount = 8; Max = 64;}
		case CSW_M4A1: {Amount = 7; Max = 180;}
		case CSW_TMP: {Amount = 7; Max = 200;}
		case CSW_G3SG1: {Amount = 7; Max = 180;}
		case CSW_DEAGLE: {Amount = 10; Max = 70;}
		case CSW_SG552: {Amount = 7; Max = 180;}
		case CSW_AK47: {Amount = 7; Max = 180;}
		case CSW_P90: {Amount = 4; Max = 200;}
		default: {Amount = 3; Max = 200;}
	}

	for(new i = 0; i < Amount; i++) give_ammo(id, 0, CSWID, Max)
}

public give_ammo(id, silent, CSWID, Max)
{
	static Amount, Name[32]
		
	switch(CSWID)
	{
		case CSW_P228: {Amount = 13; formatex(Name, sizeof(Name), "357sig");}
		case CSW_SCOUT: {Amount = 30; formatex(Name, sizeof(Name), "762nato");}
		case CSW_XM1014: {Amount = 8; formatex(Name, sizeof(Name), "buckshot");}
		case CSW_MAC10: {Amount = 12; formatex(Name, sizeof(Name), "45acp");}
		case CSW_AUG: {Amount = 30; formatex(Name, sizeof(Name), "556nato");}
		case CSW_ELITE: {Amount = 30; formatex(Name, sizeof(Name), "9mm");}
		case CSW_FIVESEVEN: {Amount = 50; formatex(Name, sizeof(Name), "57mm");}
		case CSW_UMP45: {Amount = 12; formatex(Name, sizeof(Name), "45acp");}
		case CSW_SG550: {Amount = 30; formatex(Name, sizeof(Name), "556nato");}
		case CSW_GALIL: {Amount = 30; formatex(Name, sizeof(Name), "556nato");}
		case CSW_FAMAS: {Amount = 30; formatex(Name, sizeof(Name), "556nato");}
		case CSW_USP: {Amount = 12; formatex(Name, sizeof(Name), "45acp");}
		case CSW_GLOCK18: {Amount = 30; formatex(Name, sizeof(Name), "9mm");}
		case CSW_AWP: {Amount = 10; formatex(Name, sizeof(Name), "338magnum");}
		case CSW_MP5NAVY: {Amount = 30; formatex(Name, sizeof(Name), "9mm");}
		case CSW_M249: {Amount = 30; formatex(Name, sizeof(Name), "556natobox");}
		case CSW_M3: {Amount = 8; formatex(Name, sizeof(Name), "buckshot");}
		case CSW_M4A1: {Amount = 30; formatex(Name, sizeof(Name), "556nato");}
		case CSW_TMP: {Amount = 30; formatex(Name, sizeof(Name), "9mm");}
		case CSW_G3SG1: {Amount = 30; formatex(Name, sizeof(Name), "762nato");}
		case CSW_DEAGLE: {Amount = 7; formatex(Name, sizeof(Name), "50ae");}
		case CSW_SG552: {Amount = 30; formatex(Name, sizeof(Name), "556nato");}
		case CSW_AK47: {Amount = 30; formatex(Name, sizeof(Name), "762nato");}
		case CSW_P90: {Amount = 50; formatex(Name, sizeof(Name), "57mm");}
	}
	
	if(!silent) emit_sound(id, CHAN_ITEM, "items/9mmclip1.wav", VOL_NORM, ATTN_NORM, 0, PITCH_NORM)
	ExecuteHamB(Ham_GiveAmmo, id, Amount, Name, Max)
}

stock Eject_Shell(id, Shell_ModelIndex, Float:Time)
{
	static Ent; Ent = get_pdata_cbase(id, 373, 5)
	if(!pev_valid(Ent))
		return

        set_pdata_int(Ent, 57, Shell_ModelIndex, 4)
        set_pdata_float(id, 111, get_gametime() + Time)
}

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
		
		if ((dropwhat == 1 && ((1<<weaponid) & PRIMARY_WEAPONS_BIT_SUM)) || (dropwhat == 2 && ((1<<weaponid) & SECONDARY_WEAPONS_BIT_SUM)))
		{
			static wname[32]; get_weaponname(weaponid, wname, charsmax(wname))
			engclient_cmd(id, "drop", wname)
		}
	}
}

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


stock get_weapon_attachment(id, Float:output[3], Float:fDis = 40.0)
{ 
	static Float:vfEnd[3], viEnd[3] 
	get_user_origin(id, viEnd, 3)  
	IVecFVec(viEnd, vfEnd) 
	
	static Float:fOrigin[3], Float:fAngle[3]
	
	pev(id, pev_origin, fOrigin) 
	pev(id, pev_view_ofs, fAngle)
	
	xs_vec_add(fOrigin, fAngle, fOrigin) 
	
	static Float:fAttack[3]
	
	xs_vec_sub(vfEnd, fOrigin, fAttack)
	xs_vec_sub(vfEnd, fOrigin, fAttack) 
	
	static Float:fRate
	
	fRate = fDis / vector_length(fAttack)
	xs_vec_mul_scalar(fAttack, fRate, fAttack)
	
	xs_vec_add(fOrigin, fAttack, output)
}

stock Set_Player_NextAttack(id, CSWID, Float:NextTime)
{
	static Ent; Ent = fm_get_user_weapon_entity(id, CSWID)
	if(!pev_valid(Ent)) return
	
	set_pdata_float(id, 83, NextTime, 5)
	
	set_pdata_float(Ent, 46 , NextTime, 4)
	set_pdata_float(Ent, 47, NextTime, 4)
	set_pdata_float(Ent, 48, NextTime, 4)
}

do_attack(Attacker, Victim, Inflictor, Float:fDamage)
{
	fake_player_trace_attack(Attacker, Victim, fDamage)
	fake_take_damage(Attacker, Victim, fDamage, Inflictor)
}

fake_player_trace_attack(iAttacker, iVictim, &Float:fDamage)
{
	static Float:fAngles[3], Float:fDirection[3]
	pev(iAttacker, pev_angles, fAngles)
	angle_vector(fAngles, ANGLEVECTOR_FORWARD, fDirection)
	
	static Float:fStart[3], Float:fViewOfs[3]
	pev(iAttacker, pev_origin, fStart)
	pev(iAttacker, pev_view_ofs, fViewOfs)
	xs_vec_add(fViewOfs, fStart, fStart)
	
	static iAimOrigin[3], Float:fAimOrigin[3]
	get_user_origin(iAttacker, iAimOrigin, 3)
	IVecFVec(iAimOrigin, fAimOrigin)
	
	static pentru; pentru = create_tr2() 
	engfunc(EngFunc_TraceLine, fStart, fAimOrigin, DONT_IGNORE_MONSTERS, iAttacker, pentru)
	static pHit; pHit = get_tr2(pentru, TR_pHit)
	static iHitgroup; iHitgroup = get_tr2(pentru, TR_iHitgroup)
	static Float:fEndPos[3]
	get_tr2(pentru, TR_vecEndPos, fEndPos)
	
	static iTarget, iBody
	get_user_aiming(iAttacker, iTarget, iBody)
	
	if (iTarget == iVictim)
	{
		iHitgroup = iBody
	}
	
	else if (pHit != iVictim)
	{
		static Float:fVicOrigin[3], Float:fVicViewOfs[3], Float:fAimInVictim[3]
		pev(iVictim, pev_origin, fVicOrigin)
		pev(iVictim, pev_view_ofs, fVicViewOfs) 
		xs_vec_add(fVicViewOfs, fVicOrigin, fAimInVictim)
		fAimInVictim[2] = fStart[2]
		fAimInVictim[2] += get_distance_f(fStart, fAimInVictim) * floattan( fAngles[0] * 2.0, degrees )
		
		static iAngleToVictim; iAngleToVictim = get_angle_to_target(iAttacker, fVicOrigin)
		iAngleToVictim = abs(iAngleToVictim)
		static Float:fDis; fDis = 2.0 * get_distance_f(fStart, fAimInVictim) * floatsin( float(iAngleToVictim) * 0.5, degrees )
		static Float:fVicSize[3]
		pev(iVictim, pev_size , fVicSize)
		if ( fDis <= fVicSize[0] * 0.5 )
		{
			static ptr2; ptr2 = create_tr2() 
			engfunc(EngFunc_TraceLine, fStart, fAimInVictim, DONT_IGNORE_MONSTERS, iAttacker, ptr2)
			static pHit2; pHit2 = get_tr2(ptr2, TR_pHit)
			static iHitgroup2; iHitgroup2 = get_tr2(ptr2, TR_iHitgroup)
			
			if ( pHit2 == iVictim && (iHitgroup2 != HIT_HEAD || fDis <= fVicSize[0] * 0.25) )
			{
				pHit = iVictim
				iHitgroup = iHitgroup2
				get_tr2(ptr2, TR_vecEndPos, fEndPos)
			}
			
			free_tr2(ptr2)
		}
		
		if (pHit != iVictim)
		{
			iHitgroup = HIT_GENERIC
			
			static ptr3; ptr3 = create_tr2() 
			engfunc(EngFunc_TraceLine, fStart, fVicOrigin, DONT_IGNORE_MONSTERS, iAttacker, ptr3)
			get_tr2(ptr3, TR_vecEndPos, fEndPos)
			
			free_tr2(ptr3)
		}
	}
	
	set_tr2(pentru, TR_pHit, iVictim)
	set_tr2(pentru, TR_iHitgroup, iHitgroup)
	set_tr2(pentru, TR_vecEndPos, fEndPos)
	
	fake_trake_attack(iAttacker, iVictim, fDamage, fDirection, pentru)
	
	free_tr2(pentru)
}

stock fake_trake_attack(iAttacker, iVictim, Float:fDamage, Float:fDirection[3], iTraceHandle, iDamageBit = (DMG_NEVERGIB | DMG_BULLET))
{
	ExecuteHamB(Ham_TraceAttack, iVictim, iAttacker, fDamage, fDirection, iTraceHandle, iDamageBit)
}

stock fake_take_damage(iAttacker, iVictim, Float:fDamage, iInflictor, iDamageBit = (DMG_NEVERGIB | DMG_BULLET))
{
	ExecuteHamB(Ham_TakeDamage, iVictim, iInflictor, iAttacker, fDamage, iDamageBit)
}

stock get_angle_to_target(id, const Float:fTarget[3], Float:TargetSize = 0.0)
{
	static Float:fOrigin[3], iAimOrigin[3], Float:fAimOrigin[3], Float:fV1[3]
	pev(id, pev_origin, fOrigin)
	get_user_origin(id, iAimOrigin, 3)
	IVecFVec(iAimOrigin, fAimOrigin)
	xs_vec_sub(fAimOrigin, fOrigin, fV1)
	
	static Float:fV2[3]
	xs_vec_sub(fTarget, fOrigin, fV2)
	
	static iResult; iResult = get_angle_between_vectors(fV1, fV2)
	
	if (TargetSize > 0.0)
	{
		static Float:fTan; fTan = TargetSize / get_distance_f(fOrigin, fTarget)
		static fAngleToTargetSize; fAngleToTargetSize = floatround( floatatan(fTan, degrees) )
		iResult -= (iResult > 0) ? fAngleToTargetSize : -fAngleToTargetSize
	}
	
	return iResult
}

stock get_angle_between_vectors(const Float:fV1[3], const Float:fV2[3])
{
	static Float:fA1[3], Float:fA2[3]
	engfunc(EngFunc_VecToAngles, fV1, fA1)
	engfunc(EngFunc_VecToAngles, fV2, fA2)
	
	static iResult; iResult = floatround(fA1[1] - fA2[1])
	iResult = iResult % 360
	iResult = (iResult > 180) ? (iResult - 360) : iResult
	
	return iResult
}

stock is_wall_between_points(Float:start[3], Float:end[3], ignore_ent)
{
	static pentru
	pentru = create_tr2()

	engfunc(EngFunc_TraceLine, start, end, IGNORE_MONSTERS, ignore_ent, pentru)
	
	static Float:EndPos[3]
	get_tr2(pentru, TR_vecEndPos, EndPos)

	free_tr2(pentru)
	return floatround(get_distance_f(end, EndPos))
} 

stock get_speed_vector(const Float:origin1[3],const Float:origin2[3],Float:speed, Float:new_velocity[3])
{
	new_velocity[0] = origin2[0] - origin1[0]
	new_velocity[1] = origin2[1] - origin1[1]
	new_velocity[2] = origin2[2] - origin1[2]
	new Float:num = floatsqroot(speed*speed / (new_velocity[0]*new_velocity[0] + new_velocity[1]*new_velocity[1] + new_velocity[2]*new_velocity[2]))
	new_velocity[0] *= num
	new_velocity[1] *= num
	new_velocity[2] *= num
	
	return 1;
}
/* AMXX-Studio Notes - DO NOT MODIFY BELOW HERE
*{\\ rtf1\\ ansi\\ deff0{\\ fonttbl{\\ f0\\ fnil Tahoma;}}\n\\ viewkind4\\ uc1\\ pard\\ lang1042\\ f0\\ fs16 \n\\ par }
*/
Detinator : # Go.Tried.Ro #
Post Reply

Return to “Modificari pluginuri”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 3 guests